diff --git a/src/metabase/db.clj b/src/metabase/db.clj
index 2ae4feaeff635343eac761db7e3cde3bf86cce1e..19051f4d5191c564b959450e496b66de3f42db1b 100644
--- a/src/metabase/db.clj
+++ b/src/metabase/db.clj
@@ -439,7 +439,8 @@
   [entity & {:as kwargs}]
   `(not (empty? (select (entity->korma ~entity)
                         (fields [:id])
-                        (where ~kwargs)
+                        ~@(when (seq kwargs)
+                            `[(where ~kwargs)])
                         (limit 1)))))
 
 ;; ## CASADE-DELETE
diff --git a/src/metabase/routes.clj b/src/metabase/routes.clj
index cae3ffa600b81185260407743d99bb5d963c8b97..c4a831396dad218e0c365aa1e36d96aac5ebff4c 100644
--- a/src/metabase/routes.clj
+++ b/src/metabase/routes.clj
@@ -5,9 +5,9 @@
             [metabase.api.routes :as api]
             [metabase.setup :as setup]))
 
-
-(let [redirect-to-setup? (fn [{:keys [uri]}]                      ; Redirect naughty users who try to visit a page other than setup
-                           (and (setup/token-exists?)             ; if setup is not yet complete
+;; Redirect naughty users who try to visit a page other than setup if setup is not yet complete
+(let [redirect-to-setup? (fn [{:keys [uri]}]
+                           (and (setup/incomplete?)
                                 (not (re-matches #"^/setup/.*$" uri))))
       index (fn [request]
               (if (redirect-to-setup? request) (resp/redirect (format "/setup/init/%s" (setup/token-value)))
diff --git a/src/metabase/setup.clj b/src/metabase/setup.clj
index 5ddba8bc2dfecbb4aed632776efdf947dec62417..91090004c13969b5b8c54baacf68b0e14cf0fedb 100644
--- a/src/metabase/setup.clj
+++ b/src/metabase/setup.clj
@@ -1,6 +1,8 @@
-(ns metabase.setup)
+(ns metabase.setup
+  (:require [metabase.db :as db]
+            [metabase.models.user :refer [User]]))
 
-(def ^:private setup-token
+(defonce ^:private setup-token
   (atom nil))
 
 (defn token-value
@@ -8,10 +10,11 @@
   []
   @setup-token)
 
-(defn token-exists?
-  "Return `true` if a setup token exists."
+(defn incomplete?
+  "Return `true` if a setup token exists and no `Users` exist in the DB."
   []
-  (boolean @setup-token))
+  (and @setup-token
+       (not (db/exists? User))))
 
 (defn token-match?
   "Function for checking if the supplied string matches our setup token.