diff --git a/lgtk.cabal b/lgtk.cabal
--- a/lgtk.cabal
+++ b/lgtk.cabal
@@ -1,5 +1,5 @@
 name:               lgtk
-version:            0.3.1
+version:            0.3.2
 category:           GUI
 synopsis:           lens-based GUI with Gtk backend
 description:
diff --git a/src/Control/MLens.hs b/src/Control/MLens.hs
--- a/src/Control/MLens.hs
+++ b/src/Control/MLens.hs
@@ -12,21 +12,20 @@
     , readRef, writeRef, modRef
 
     -- * Lens transformations
-    , fromLens, toLens
     , mapMLens
     , (.)
     , (***)
-    , joinML, joinLens
+    , joinML
     , memoMLens
 
     -- * Lens creation
-    , lens
+    , lensStore
     , NewRef (..)
     , ExtRef (..)
     , Ext, runExt, runExt_
 
     -- * Derived constructs
-    -- ** Pure lenses, built with @lens@
+    -- ** Pure lenses, built with @lensStore@
     , id
     , unitLens
     , fstLens, sndLens
@@ -34,18 +33,22 @@
     , listLens
     , ithLens
 
-    -- ** Impure lenses, built with @lens@
+    -- ** Impure lenses, built with @lensStore@
     , forkLens
     , justLens
     , showLens
 
     -- ** Other derived construts
+    , lens
+    , fromLens
+    , toLens
+    , joinLens
     , undoTr
+    , memoRead
+    , memoWrite
 
     -- * Auxiliary definitions
     , Morph
-    , memoRead
-    , memoWrite
     ) where
 
 import Control.Category
diff --git a/src/Data/MLens.hs b/src/Data/MLens.hs
--- a/src/Data/MLens.hs
+++ b/src/Data/MLens.hs
@@ -8,6 +8,7 @@
     , fromLens, toLens
 
     -- * Lens construction
+    , lensStore
     , lens
 
     -- * Lens operations
@@ -90,16 +91,19 @@
     = MLens Identity a b
 
 fromLens :: Monad m => Lens a b -> MLens m a b
-fromLens (MLens f) = MLens $ \x -> do
-    let (a, b) = runIdentity $ f x
-    return (a, \y -> return $ runIdentity $ b y)
+fromLens = mapMLens (return . runIdentity)
 
 toLens :: (forall m . Monad m => MLens m a b) -> Lens a b
 toLens k = k
 
 -- | Impure (but effect-free) lens constuctor
+lensStore :: Monad m => (a -> (b, b -> a)) -> MLens m a b
+lensStore f = MLens $ return . g . f where
+    g (b, ba) = (b, return . ba)
+
+-- | Impure (but effect-free) lens constuctor, built on @lensStore@.
 lens :: Monad m => (a -> b) -> (b -> a -> a) -> MLens m a b
-lens get set = MLens $ \a -> return (get a, return . flip set a)
+lens get set = lensStore $ \a -> (get a, flip set a)
 
 getL :: Monad m => MLens m a b -> a -> m b
 getL (MLens f) a = f a >>= return . fst
