diff --git a/apecs.cabal b/apecs.cabal
--- a/apecs.cabal
+++ b/apecs.cabal
@@ -1,5 +1,5 @@
 name:                apecs
-version:             0.3.0.1
+version:             0.3.0.2
 homepage:            https://github.com/jonascarpay/apecs#readme
 license:             BSD3
 license-file:        LICENSE
diff --git a/src/Apecs.hs b/src/Apecs.hs
--- a/src/Apecs.hs
+++ b/src/Apecs.hs
@@ -11,7 +11,7 @@
     initStore,
 
   -- * Systems
-    get, set,
+    get, set, getAll,
     cmap, cmapM, cmapM_,
     modify, destroy, exists,
 
diff --git a/src/Apecs/System.hs b/src/Apecs/System.hs
--- a/src/Apecs/System.hs
+++ b/src/Apecs/System.hs
@@ -79,6 +79,17 @@
     x <- liftIO$ explGet s ety
     sys x
 
+-- | Get all components @c@.
+--   Call as @[(c,Entity)]@ to read the entity/index.
+{-# INLINE getAll #-}
+getAll :: forall world c. Has world c
+      => System world [c]
+getAll = do
+  s :: Storage c <- getStore
+  sl <- liftIO$ explMembers s
+  forM (U.toList sl) $ liftIO . explGet s
+
+
 -- | Destroys component @c@ for the given entity.
 -- Note that @c@ is a phantom argument, used only to convey the type of the entity to be destroyed.
 {-# INLINE destroy #-}
