diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for ecstasy
 
+## 0.1.1.1  -- 2018-05-17
+
+* Use strict datastructures to avoid memory leaks. Backported from 0.2 branch.
+
 ## 0.1.1.0  -- 2018-02-18
 
 * Added 'deleteEntity' (function) and 'delEntity' (QueryT setter).
diff --git a/ecstasy.cabal b/ecstasy.cabal
--- a/ecstasy.cabal
+++ b/ecstasy.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                ecstasy
-version:             0.1.1.0
+version:             0.1.1.1
 synopsis:
   A GHC.Generics based entity component system.
 
diff --git a/src/Data/Ecstasy.hs b/src/Data/Ecstasy.hs
--- a/src/Data/Ecstasy.hs
+++ b/src/Data/Ecstasy.hs
@@ -18,8 +18,8 @@
 import           Control.Monad.Trans.Class (lift)
 import           Control.Monad.Trans.Maybe (runMaybeT)
 import           Control.Monad.Trans.Reader (runReaderT, ask)
-import           Control.Monad.Trans.State (modify, gets, evalStateT)
-import qualified Control.Monad.Trans.State as S
+import           Control.Monad.Trans.State.Strict (modify, gets, evalStateT)
+import qualified Control.Monad.Trans.State.Strict as S
 import           Data.Ecstasy.Deriving
 import qualified Data.Ecstasy.Types as T
 import           Data.Ecstasy.Types hiding (unEnt)
@@ -93,6 +93,7 @@
       => world 'FieldOf
       -> world 'SetterOf
   convertSetter = to . gConvertSetter . from
+  {-# INLINE convertSetter #-}
 
   ----------------------------------------------------------------------------
   -- | The default entity, owning no components.
@@ -103,6 +104,7 @@
          )
       => world 'FieldOf
   defEntity = def @'True
+  {-# INLINE defEntity #-}
 
   ----------------------------------------------------------------------------
   -- | The default setter, which keeps all components with their previous value.
@@ -113,6 +115,7 @@
          )
       => world 'SetterOf
   defEntity' = def @'True
+  {-# INLINE defEntity' #-}
 
   ----------------------------------------------------------------------------
   -- | A setter which will delete the entity if its 'QueryT' matches.
@@ -123,6 +126,7 @@
          )
       => world 'SetterOf
   delEntity = def @'False
+  {-# INLINE delEntity #-}
 
   ----------------------------------------------------------------------------
   -- | The default world, which contains only empty containers.
@@ -133,6 +137,7 @@
          )
       => world 'WorldOf
   defWorld = def @'True
+  {-# INLINE defWorld #-}
 
 
 instance ( Generic (world 'SetterOf)
diff --git a/src/Data/Ecstasy/Deriving.hs b/src/Data/Ecstasy/Deriving.hs
--- a/src/Data/Ecstasy/Deriving.hs
+++ b/src/Data/Ecstasy/Deriving.hs
@@ -11,8 +11,8 @@
 module Data.Ecstasy.Deriving where
 
 import           Data.Ecstasy.Types (Update (..))
-import           Data.IntMap (IntMap)
-import qualified Data.IntMap as I
+import           Data.IntMap.Strict (IntMap)
+import qualified Data.IntMap.Strict as I
 import           GHC.Generics
 
 
diff --git a/src/Data/Ecstasy/Types.hs b/src/Data/Ecstasy/Types.hs
--- a/src/Data/Ecstasy/Types.hs
+++ b/src/Data/Ecstasy/Types.hs
@@ -6,9 +6,9 @@
 
 import Control.Monad.Trans.Maybe (MaybeT)
 import Control.Monad.Trans.Reader (ReaderT)
-import Control.Monad.Trans.State (StateT)
+import Control.Monad.Trans.State.Strict (StateT)
 import Data.Functor.Identity (Identity)
-import Data.IntMap (IntMap)
+import Data.IntMap.Strict (IntMap)
 
 
 ------------------------------------------------------------------------------
