diff --git a/common/src/app/common/types/tokens_lib.cljc b/common/src/app/common/types/tokens_lib.cljc
index 369ffd37f..f53c806d3 100644
--- a/common/src/app/common/types/tokens_lib.cljc
+++ b/common/src/app/common/types/tokens_lib.cljc
@@ -1227,18 +1227,15 @@ Will return a value that matches this schema:
         :none)))
 
   (get-active-themes-set-tokens [this]
-    (let [sets-order (get-ordered-set-names this)
-          active-themes (get-active-themes this)
-          order-theme-set (fn [theme]
-                            (filter #(contains? (set (:sets theme)) %) sets-order))]
-      (reduce
-       (fn [tokens theme]
-         (reduce
-          (fn [tokens' cur]
-            (merge tokens' (:tokens (get-set this cur))))
-          tokens (order-theme-set theme)))
-       (d/ordered-map)
-       active-themes)))
+    (let [theme-set-names  (get-active-themes-set-names this)
+          all-set-names    (get-ordered-set-names this)
+          active-set-names (filter theme-set-names all-set-names)
+          tokens           (reduce (fn [tokens set-name]
+                                     (let [set (get-set this set-name)]
+                                       (merge tokens (:tokens set))))
+                                   (d/ordered-map)
+                                   active-set-names)]
+      tokens))
 
   (encode-dtcg [this]
     (let [themes-xform
diff --git a/common/test/common_tests/types/tokens_lib_test.cljc b/common/test/common_tests/types/tokens_lib_test.cljc
index 6779ac08e..0b80eed16 100644
--- a/common/test/common_tests/types/tokens_lib_test.cljc
+++ b/common/test/common_tests/types/tokens_lib_test.cljc
@@ -441,32 +441,225 @@
     (t/is (nil? token'))
     (t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))))
 
-(t/deftest list-active-themes-tokens-in-order
-  (let [tokens-lib  (-> (ctob/make-tokens-lib)
-                        (ctob/add-theme (ctob/make-token-theme :name "out-of-order-theme"
-                                                               ;; Out of order sets in theme
-                                                               :sets ["unknown-set" "set-b" "set-a"]))
-                        (ctob/set-active-themes #{"/out-of-order-theme"})
+(t/deftest get-ordered-sets
+  (let [tokens-lib (-> (ctob/make-tokens-lib)
+                       (ctob/add-set (ctob/make-token-set :name "group-1/set-a"))
+                       (ctob/add-set (ctob/make-token-set :name "group-1/set-b"))
+                       (ctob/add-set (ctob/make-token-set :name "group-2/set-a"))
+                       (ctob/add-set (ctob/make-token-set :name "group-1/set-c")))
 
-                        (ctob/add-set (ctob/make-token-set :name "set-a"))
-                        (ctob/add-token-in-set "set-a" (ctob/make-token :name "set-a-token"
-                                                                        :type :boolean
-                                                                        :value true))
-                        (ctob/add-set (ctob/make-token-set :name "set-b"))
-                        (ctob/add-token-in-set "set-b" (ctob/make-token :name "set-b-token"
-                                                                        :type :boolean
-                                                                        :value true))
-                        ;; Ignore this set
-                        (ctob/add-set (ctob/make-token-set :name "inactive-set"))
-                        (ctob/add-token-in-set "inactive-set" (ctob/make-token :name "inactive-set-token"
-                                                                               :type :boolean
-                                                                               :value true)))
+        ordered-sets (ctob/get-ordered-set-names tokens-lib)]
 
-        expected-order (ctob/get-ordered-set-names tokens-lib)
-        expected-tokens (ctob/get-active-themes-set-tokens tokens-lib)
-        expected-token-names (mapv key expected-tokens)]
-    (t/is (= '("set-a" "set-b" "inactive-set") expected-order))
-    (t/is (= ["set-a-token" "set-b-token"] expected-token-names))))
+    (t/is (= ordered-sets '("group-1/set-a"
+                            "group-1/set-b"
+                            "group-1/set-c"
+                            "group-2/set-a")))))
+
+(t/deftest list-active-themes-tokens-no-theme
+  (let [tokens-lib (-> (ctob/make-tokens-lib)
+                       (ctob/add-set (ctob/make-token-set :name "set-a"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 10)
+                                                                   "token-2"
+                                                                   (ctob/make-token :name "token-2"
+                                                                                    :type :border-radius
+                                                                                    :value 20)}))
+                       (ctob/add-set (ctob/make-token-set :name "set-b"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 100)
+                                                                   "token-3"
+                                                                   (ctob/make-token :name "token-3"
+                                                                                    :type :border-radius
+                                                                                    :value 300)}))
+                       (ctob/add-set (ctob/make-token-set :name "set-c"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 1000)
+                                                                   "token-2"
+                                                                   (ctob/make-token :name "token-2"
+                                                                                    :type :border-radius
+                                                                                    :value 2000)
+                                                                   "token-3"
+                                                                   (ctob/make-token :name "token-3"
+                                                                                    :type :border-radius
+                                                                                    :value 3000)
+                                                                   "token-4"
+                                                                   (ctob/make-token :name "token-4"
+                                                                                    :type :border-radius
+                                                                                    :value 4000)}))
+                       (ctob/update-theme ctob/hidden-token-theme-group ctob/hidden-token-theme-name
+                                          #(ctob/enable-sets % #{"set-a" "set-b"})))
+
+        tokens (ctob/get-active-themes-set-tokens tokens-lib)]
+
+    (t/is (= (mapv key tokens) ["token-1" "token-2" "token-3"]))
+    (t/is (= (get-in tokens ["token-1" :value]) 100))
+    (t/is (= (get-in tokens ["token-2" :value]) 20))
+    (t/is (= (get-in tokens ["token-3" :value]) 300))))
+
+(t/deftest list-active-themes-tokens-one-theme
+  (let [tokens-lib (-> (ctob/make-tokens-lib)
+                       (ctob/add-set (ctob/make-token-set :name "set-a"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 10)
+                                                                   "token-2"
+                                                                   (ctob/make-token :name "token-2"
+                                                                                    :type :border-radius
+                                                                                    :value 20)}))
+                       (ctob/add-set (ctob/make-token-set :name "set-b"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 100)
+                                                                   "token-3"
+                                                                   (ctob/make-token :name "token-3"
+                                                                                    :type :border-radius
+                                                                                    :value 300)}))
+                       (ctob/add-set (ctob/make-token-set :name "set-c"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 1000)
+                                                                   "token-2"
+                                                                   (ctob/make-token :name "token-2"
+                                                                                    :type :border-radius
+                                                                                    :value 2000)
+                                                                   "token-3"
+                                                                   (ctob/make-token :name "token-3"
+                                                                                    :type :border-radius
+                                                                                    :value 3000)
+                                                                   "token-4"
+                                                                   (ctob/make-token :name "token-4"
+                                                                                    :type :border-radius
+                                                                                    :value 4000)}))
+                       (ctob/add-theme (ctob/make-token-theme :name "single-theme"
+                                                              :sets #{"set-b" "set-c" "set-a"}))
+                       (ctob/set-active-themes #{"/single-theme"}))
+
+        tokens (ctob/get-active-themes-set-tokens tokens-lib)]
+
+    ;; Note that sets order inside the theme is undefined. What matters is order in that the
+    ;; sets have been added to the library.
+    (t/is (= (mapv key tokens) ["token-1" "token-2" "token-3" "token-4"]))
+    (t/is (= (get-in tokens ["token-1" :value]) 1000))
+    (t/is (= (get-in tokens ["token-2" :value]) 2000))
+    (t/is (= (get-in tokens ["token-3" :value]) 3000))
+    (t/is (= (get-in tokens ["token-4" :value]) 4000))))
+
+(t/deftest list-active-themes-tokens-two-themes
+  (let [tokens-lib (-> (ctob/make-tokens-lib)
+                       (ctob/add-set (ctob/make-token-set :name "set-a"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 10)
+                                                                   "token-2"
+                                                                   (ctob/make-token :name "token-2"
+                                                                                    :type :border-radius
+                                                                                    :value 20)}))
+                       (ctob/add-set (ctob/make-token-set :name "set-b"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 100)
+                                                                   "token-3"
+                                                                   (ctob/make-token :name "token-3"
+                                                                                    :type :border-radius
+                                                                                    :value 300)}))
+                       (ctob/add-set (ctob/make-token-set :name "set-c"
+                                                          :tokens {"token-1"
+                                                                   (ctob/make-token :name "token-1"
+                                                                                    :type :border-radius
+                                                                                    :value 1000)
+                                                                   "token-2"
+                                                                   (ctob/make-token :name "token-2"
+                                                                                    :type :border-radius
+                                                                                    :value 2000)
+                                                                   "token-3"
+                                                                   (ctob/make-token :name "token-3"
+                                                                                    :type :border-radius
+                                                                                    :value 3000)
+                                                                   "token-4"
+                                                                   (ctob/make-token :name "token-4"
+                                                                                    :type :border-radius
+                                                                                    :value 4000)}))
+                       (ctob/add-theme (ctob/make-token-theme :name "theme-1"
+                                                              :sets #{"set-b"}))
+                       (ctob/add-theme (ctob/make-token-theme :name "theme-2"
+                                                              :sets #{"set-b" "set-a"}))
+                       (ctob/set-active-themes #{"/theme-1" "/theme-2"}))
+
+        tokens (ctob/get-active-themes-set-tokens tokens-lib)]
+
+    ;; Note that themes order is irrelevant. What matters is the union of the active sets
+    ;; and the order of the sets in the library.
+    (t/is (= (mapv key tokens) ["token-1" "token-2" "token-3"]))
+    (t/is (= (get-in tokens ["token-1" :value]) 100))
+    (t/is (= (get-in tokens ["token-2" :value]) 20))
+    (t/is (= (get-in tokens ["token-3" :value]) 300))))
+
+(t/deftest list-active-themes-tokens-bug-taiga-10617
+  (let [tokens-lib (-> (ctob/make-tokens-lib)
+                       (ctob/add-set (ctob/make-token-set :name "Mode / Dark"
+                                                          :tokens {"red"
+                                                                   (ctob/make-token :name "red"
+                                                                                    :type :color
+                                                                                    :value "#700000")}))
+                       (ctob/add-set (ctob/make-token-set :name "Mode / Light"
+                                                          :tokens {"red"
+                                                                   (ctob/make-token :name "red"
+                                                                                    :type :color
+                                                                                    :value "#ff0000")}))
+                       (ctob/add-set (ctob/make-token-set :name "Device / Desktop"
+                                                          :tokens {"border1"
+                                                                   (ctob/make-token :name "border1"
+                                                                                    :type :border-radius
+                                                                                    :value 30)}))
+                       (ctob/add-set (ctob/make-token-set :name "Device / Mobile"
+                                                          :tokens {"border1"
+                                                                   (ctob/make-token :name "border1"
+                                                                                    :type :border-radius
+                                                                                    :value 50)}))
+                       (ctob/add-theme (ctob/make-token-theme :group "App"
+                                                              :name "Mobile"
+                                                              :sets #{"Mode / Dark" "Device / Mobile"}))
+                       (ctob/add-theme (ctob/make-token-theme :group "App"
+                                                              :name "Web"
+                                                              :sets #{"Mode / Dark" "Mode / Light" "Device / Desktop"}))
+                       (ctob/add-theme (ctob/make-token-theme :group "Brand"
+                                                              :name "Brand A"
+                                                              :sets #{"Mode / Dark" "Mode / Light" "Device / Desktop" "Device / Mobile"}))
+                       (ctob/add-theme (ctob/make-token-theme :group "Brand"
+                                                              :name "Brand B"
+                                                              :sets #{}))
+                       (ctob/set-active-themes #{"App/Web" "Brand/Brand A"}))
+
+        tokens (ctob/get-active-themes-set-tokens tokens-lib)]
+
+    (t/is (= (mapv key tokens) ["red" "border1"]))
+    (t/is (= (get-in tokens ["red" :value]) "#ff0000"))
+    (t/is (= (get-in tokens ["border1" :value]) 50))))
+
+(t/deftest list-active-themes-tokens-no-tokens
+  (let [tokens-lib (-> (ctob/make-tokens-lib)
+                       (ctob/add-set (ctob/make-token-set :name "set-a")))
+
+        tokens (ctob/get-active-themes-set-tokens tokens-lib)]
+
+    (t/is (empty? tokens))))
+
+(t/deftest list-active-themes-tokens-no-sets
+  (let [tokens-lib (ctob/make-tokens-lib)
+        tokens (ctob/get-active-themes-set-tokens tokens-lib)]
+
+    (t/is (empty? tokens))))
 
 (t/deftest sets-at-path-active-state
   (let [tokens-lib  (-> (ctob/make-tokens-lib)