diff --git a/Control/Monad/States.hs b/Control/Monad/States.hs
--- a/Control/Monad/States.hs
+++ b/Control/Monad/States.hs
@@ -10,13 +10,14 @@
     , Control.Monad.States.use, Control.Monad.States.iuse, Control.Monad.States.uses, Control.Monad.States.iuses
     ) where
 
-import qualified Control.Lens as Lens (Optical, view, views)
+import qualified Control.Lens as Lens (view, views)
 import Control.Lens hiding (view, views, iview, iviews, uses)
 import Control.Monad.Readers
 import Control.Monad.State hiding (MonadState(get, put, state), modify, modify', gets)
 import qualified Control.Monad.State as MTL (get, put)
 import Control.Monad.Writer (WriterT)
-import Data.Profunctor.Unsafe ((#.), (.#))
+import Data.Monoid (Monoid)
+import Data.Profunctor.Unsafe ((#.))
 
 -- | Copy of 'Control.Monad.State.MonadState' with functional dependency m -> s removed.
 class Monad m => MonadStates s m where
@@ -63,8 +64,8 @@
 iuse :: MonadStates s m => IndexedGetting i (i,a) s a -> m (i,a)
 iuse l = Control.Monad.States.gets (getConst #. l (Indexed $ \i -> Const #. (,) i))
 
-uses :: (Profunctor p, MonadStates s m) => Lens.Optical p (->) (Const r) s s a a -> p a r -> m r
+uses :: MonadStates s m => LensLike' (Const r) s a -> (a -> r) -> m r
 uses l f = Control.Monad.States.gets (Lens.views l f)
 
 iuses :: MonadStates s m => IndexedGetting i r s a -> (i -> a -> r) -> m r
-iuses l = uses l .# Indexed
+iuses l f = Control.Monad.States.gets (getConst #. l (Const #. Indexed f))
diff --git a/Tests/Main.hs b/Tests/Main.hs
--- a/Tests/Main.hs
+++ b/Tests/Main.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE TemplateHaskell #-}
 module Main where
 
+import Control.Applicative
 import Control.Lens as Lens
 import Control.Monad.Readers as Readers
 import Control.Monad.States as States
@@ -51,7 +52,7 @@
 
 -- This is where the advantages of MonadReaders start to appear:
 -- use two different MonadReaders instances for the same monad.
-s1t1 :: (MonadReaders S m, MonadReaders T m) => m (Float, Int)
+s1t1 :: (Applicative m, Functor m, MonadReaders S m, MonadReaders T m) => m (Float, Int)
 s1t1 = (,) <$> Readers.view s1 <*> Readers.view t1
 
 tests :: SpecM () ()
diff --git a/mtl-unleashed.cabal b/mtl-unleashed.cabal
--- a/mtl-unleashed.cabal
+++ b/mtl-unleashed.cabal
@@ -1,5 +1,5 @@
 name:               mtl-unleashed
-version:            0.3.1
+version:            0.3.2
 cabal-version:      >= 1.10
 build-type:         Simple
 license:            BSD3
@@ -19,7 +19,7 @@
   extra type signatures.
 
 library
-  build-depends: base < 5, lens, mtl, contravariant, profunctors, tagged
+  build-depends: base < 5, lens >= 4.13, mtl, contravariant, profunctors, tagged
   ghc-options: -Wall -O2
   exposed-modules:
     Control.Monad.Readers
@@ -30,7 +30,7 @@
   type:             exitcode-stdio-1.0
   hs-source-dirs:   Tests
   main-is:          Main.hs
-  build-depends:    base, hspec, hspec-core, lens, mtl, mtl-unleashed, contravariant, profunctors
+  build-depends:    base, hspec, hspec-core, lens >= 4.13, mtl, mtl-unleashed, contravariant, profunctors
   default-language: Haskell2010
 
 source-repository head
