diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
 Changes
 =======
 
+Version 0.1.0.2
+---------------
+
+Add support for mtl 2.1
+
 Version 0.1.0.1
 ---------------
 
diff --git a/data-lens-light.cabal b/data-lens-light.cabal
--- a/data-lens-light.cabal
+++ b/data-lens-light.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                data-lens-light
-version:             0.1.0.1
+version:             0.1.0.2
 synopsis:            Simple lenses, minimum dependencies
 description:         See <https://github.com/feuerbach/data-lens-light/blob/master/README.md>
 homepage:            https://github.com/feuerbach/data-lens-light
@@ -30,6 +30,6 @@
   build-depends:
     base >= 4.5 && < 5,
     template-haskell,
-    mtl >= 2.2
+    mtl >= 2.1
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/Data/Lens/Light/State.hs b/src/Data/Lens/Light/State.hs
--- a/src/Data/Lens/Light/State.hs
+++ b/src/Data/Lens/Light/State.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 module Data.Lens.Light.State
   ( access
   , (~=)
@@ -22,6 +23,12 @@
 -- whole state.
 (!=) :: MonadState a m => Lens a b -> b -> m ()
 l != b = modify' $ setL l $! b
+
+#if !MIN_VERSION_mtl(2,2,0)
+-- Copied from mtl-2.2.0.1
+modify' :: MonadState s m => (s -> s) -> m ()
+modify' f = state (\s -> let s' = f s in s' `seq` ((), s'))
+#endif
 
 infixr 4 ~=, !=
 
