diff --git a/zecsy.hpp b/zecsy.hpp
index e7ec72b..d9663b2 100644
--- a/zecsy.hpp
+++ b/zecsy.hpp
@@ -245,36 +245,27 @@ namespace zecsy
         auto id = get_component_id<T>();
         auto& comp_set = entity_to_comps[e];
 
-        if(!comp_set.contains(id))
+        if(comp_set.erase(id) > 0)
         {
-            return;
-        }
+            std::vector<comp_id> old_key(comp_set.begin(), comp_set.end());
+            old_key.push_back(id);
+            std::sort(old_key.begin(), old_key.end());
 
-        std::set<comp_id> old_set = comp_set;
-        size_t removed = comp_set.erase(id);
-
-        if(removed > 0)
-        {
-            std::vector<comp_id> old_key(old_set.begin(), old_set.end());
-
-            auto& group = archetypes[old_key];
-            group.erase(std::remove(group.begin(), group.end(), e),
-                        group.end());
-
-            if(archetypes[old_key].empty())
-            {
-                archetypes.erase(old_key);
-            }
+            auto& old_group = archetypes[old_key];
+            old_group.erase(std::remove(old_group.begin(), old_group.end(), e),
+                            old_group.end());
 
             std::vector<comp_id> new_key(comp_set.begin(), comp_set.end());
-            archetypes[new_key].emplace_back(e);
-        }
+            std::sort(new_key.begin(), new_key.end());
 
-        auto& pool = pools[id];
-        auto index = pool.entity_to_index[e];
-        pool.free_list.push_back(index);
-        pool.entity_to_index.erase(e);
-        pool.index_to_entity.erase(index);
+            archetypes[new_key].emplace_back(e);
+
+            auto& pool = pools[id];
+            auto index = pool.entity_to_index[e];
+            pool.free_list.push_back(index);
+            pool.entity_to_index.erase(e);
+            pool.index_to_entity.erase(index);
+        }
     }
 
     template<Component First, Component Second, Component... Rest>