diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs
index 0a6d56acd..8c331da2c 100644
--- a/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs
+++ b/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs
@@ -288,7 +288,6 @@
   "Check if the current situation allows grouping
   of the currently selected shapes."
   [selected shapes-map]
-  ;; TODO: transducers
   (let [xform (comp (map shapes-map)
                     (map :group))
         groups (into #{} xform selected)]
@@ -298,11 +297,12 @@
   "Check if the current situation allows ungrouping
   of the currently selected shapes."
   [selected shapes-map]
-  (let [xform (comp (map shapes-map)
-                    (map :group))
-        groups (into #{} xform selected)]
-    (and (= 1 (count groups))
-         (not (nil? (first groups))))))
+  (let [shapes (into #{} (map shapes-map) selected)
+        groups (into #{} (map :group) shapes)]
+    (or (and (= 1 (count shapes))
+             (= :group (:type (first shapes))))
+        (and (= 1 (count groups))
+             (not (nil? (first groups)))))))
 
 (mx/defc layers-tools
   "Layers widget options buttons."
diff --git a/frontend/test/uxbox/tests/test_main_data_shapes_impl.cljs b/frontend/test/uxbox/tests/test_main_data_shapes_impl.cljs
index da74cb9f1..b11b67163 100644
--- a/frontend/test/uxbox/tests/test_main_data_shapes_impl.cljs
+++ b/frontend/test/uxbox/tests/test_main_data_shapes_impl.cljs
@@ -435,13 +435,10 @@
                  :shapes {1 {:id 1 :page 1 :group 3}
                           2 {:id 2 :page 1 :group 3}
                           3 {:id 3 :page 1 :type :group :items [1 2]}}}
-
-        expected (-> initial
-                     (assoc-in [:workspace :selected] #{1 2})
-                     (assoc-in [:pages 1 :shapes] [1 2])
-                     (update-in [:shapes 1] dissoc :group)
-                     (update-in [:shapes 2] dissoc :group)
-                     (update-in [:shapes] dissoc 3))]
+        expected {:workspace {:selected #{1 2}}
+                  :pages {1 {:id 1 :shapes [1 2]}}
+                  :shapes {1 {:id 1 :page 1}
+                           2 {:id 2 :page 1}}}]
     (let [result (impl/degroup-shapes initial [3] 1)]
       ;; (pprint expected)
       ;; (pprint result)
@@ -455,12 +452,10 @@
                           2 {:id 2 :page 1 :type :group :items [3] :group 1}
                           3 {:id 3 :page 1 :group 2}}}
 
-        expected (-> initial
-                     (assoc-in [:workspace :selected] #{3})
-                     (assoc-in [:pages 1 :shapes] [1])
-                     (update-in [:shapes] dissoc 2)
-                     (assoc-in [:shapes 1 :items] [3])
-                     (assoc-in [:shapes 3 :group] 1))]
+        expected {:pages {1 {:id 1, :shapes [1]}},
+                  :shapes {1 {:id 1, :page 1, :type :group, :items [3]},
+                           3 {:id 3, :page 1, :group 1}},
+                  :workspace {:selected #{3}}}]
     (let [result (impl/degroup-shapes initial [2] 1)]
       ;; (pprint expected)
       ;; (pprint result)
@@ -475,13 +470,9 @@
                           3 {:id 3 :page 1 :group 1}
                           4 {:id 4 :page 1 :group 2}}}
 
-        expected (-> initial
-                     (assoc-in [:workspace :selected] #{3 4})
-                     (assoc-in [:pages 1 :shapes] [3 4])
-                     (update :shapes dissoc 1)
-                     (update :shapes dissoc 2)
-                     (update-in [:shapes 3] dissoc :group)
-                     (update-in [:shapes 4] dissoc :group))]
+        expected {:pages {1 {:id 1, :shapes [3 4]}},
+                  :shapes {3 {:id 3, :page 1}, 4 {:id 4, :page 1}},
+                  :workspace {:selected #{4 3}}}]
     (let [result (impl/degroup-shapes initial [1 2] 1)]
       ;; (pprint expected)
       ;; (pprint result)
@@ -495,12 +486,9 @@
                           2 {:id 2 :page 1 :type :group :items [3] :group 1}
                           3 {:id 3 :page 1 :group 2}}}
 
-        expected (-> initial
-                     (assoc-in [:workspace :selected] #{3})
-                     (assoc-in [:pages 1 :shapes] [3])
-                     (update :shapes dissoc 1)
-                     (update :shapes dissoc 2)
-                     (update-in [:shapes 3] dissoc :group))]
+        expected {:pages {1 {:id 1, :shapes [3]}},
+                  :shapes {3 {:id 3, :page 1}},
+                  :workspace {:selected #{3}}}]
     (let [result (impl/degroup-shapes initial [2 1] 1)]
       ;; (pprint expected)
       ;; (pprint result)
@@ -514,12 +502,9 @@
                           2 {:id 2 :page 1 :type :group :items [3] :group 1}
                           3 {:id 3 :page 1 :group 2}}}
 
-        expected (-> initial
-                     (assoc-in [:workspace :selected] #{3})
-                     (assoc-in [:pages 1 :shapes] [3])
-                     (update :shapes dissoc 1)
-                     (update :shapes dissoc 2)
-                     (update-in [:shapes 3] dissoc :group))]
+        expected {:pages {1 {:id 1, :shapes [3]}},
+                  :shapes {3 {:id 3, :page 1}},
+                  :workspace {:selected #{3}}}]
     (let [result (impl/degroup-shapes initial [1 2] 1)]
       ;; (pprint expected)
       ;; (pprint result)