diff --git a/apecs.cabal b/apecs.cabal
--- a/apecs.cabal
+++ b/apecs.cabal
@@ -1,5 +1,5 @@
 name:                apecs
-version:             0.4.1.0
+version:             0.4.1.1
 homepage:            https://github.com/jonascarpay/apecs#readme
 license:             BSD3
 license-file:        LICENSE
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -9,7 +9,6 @@
 import Linear
 
 import Apecs
-import Apecs.Stores
 
 -- pos_vel
 newtype ECSPos = ECSPos (V2 Float) deriving (Eq, Show)
diff --git a/src/Apecs.hs b/src/Apecs.hs
--- a/src/Apecs.hs
+++ b/src/Apecs.hs
@@ -6,6 +6,7 @@
   module Data.Proxy,
   -- * Core types
     System(..), Component(..), Entity(..), Has(..), Not(..),
+    Get, Set, Destroy, Members,
 
   -- * Stores
     Map, Unique, Global, Cache,
@@ -14,6 +15,7 @@
   -- * Systems
     get, set, getAll,
     cmap, cmapM, cmapM_,
+    cfold, cfoldM, cfoldM_,
     modify, destroy, exists,
 
   -- * Other
diff --git a/src/Apecs/Core.hs b/src/Apecs/Core.hs
--- a/src/Apecs/Core.hs
+++ b/src/Apecs/Core.hs
@@ -171,6 +171,8 @@
   explSet (EitherStore _ sb) ety (Right b) = explSet sb ety b
   explSet (EitherStore sa _) ety (Left a)  = explSet sa ety a
 
+instance Has w () where
+  getStore = return ()
 instance Component () where
   type Storage () = ()
 type instance Elem () = ()
diff --git a/src/Apecs/Stores.hs b/src/Apecs/Stores.hs
--- a/src/Apecs/Stores.hs
+++ b/src/Apecs/Stores.hs
@@ -62,7 +62,7 @@
 
 instance ExplGet (Unique c) where
   {-# INLINE explGet #-}
-  explGet (Unique ref) _ = readIORef ref >>= return . \case
+  explGet (Unique ref) _ = flip fmap (readIORef ref) $ \case
     Nothing -> error "Reading empty Unique"
     Just (_, c)  -> c
   {-# INLINE explExists #-}
@@ -74,11 +74,12 @@
 
 instance ExplDestroy (Unique c) where
   {-# INLINE explDestroy #-}
-  explDestroy (Unique ref) ety = writeIORef ref Nothing
+  explDestroy (Unique ref) ety = do
+    readIORef ref >>= mapM_ (flip when (writeIORef ref Nothing) . (==ety) . fst)
 
 instance ExplMembers (Unique c) where
   {-# INLINE explMembers #-}
-  explMembers (Unique ref) = readIORef ref >>= return . \case
+  explMembers (Unique ref) = flip fmap (readIORef ref) $ \case
     Nothing -> mempty
     Just (ety, _) -> U.singleton ety
 
@@ -116,6 +117,7 @@
 data Cache (n :: Nat) s =
   Cache Int (UM.IOVector Int) (VM.IOVector (Elem s)) s
 
+cacheMiss :: t
 cacheMiss = error "Cache miss!"
 
 type instance Elem (Cache n s) = Elem s
diff --git a/src/Apecs/Util.hs b/src/Apecs/Util.hs
--- a/src/Apecs/Util.hs
+++ b/src/Apecs/Util.hs
@@ -11,7 +11,7 @@
   runGC, global,
 
   -- * EntityCounter
-  EntityCounter, nextEntity, newEntity,
+  EntityCounter(..), nextEntity, newEntity,
 
   -- * Spatial hashing
   -- $hash
@@ -26,7 +26,6 @@
 import           Control.Monad.Reader (liftIO)
 import           Data.Monoid
 import           Data.Semigroup
-import           Data.Proxy
 import           System.CPUTime
 import           System.Mem           (performMajorGC)
 
