diff --git a/focus.cabal b/focus.cabal
--- a/focus.cabal
+++ b/focus.cabal
@@ -1,9 +1,6 @@
-name:
-  focus
-version:
-  1.0.1.2
-synopsis:
-  A general abstraction for manipulating elements of container data structures
+name: focus
+version: 1.0.1.3
+synopsis: A general abstraction for manipulating elements of container data structures
 description:
   An API for construction of free-form strategies of access and manipulation of 
   elements of arbitrary data structures.
@@ -18,44 +15,45 @@
   .
   This library provides pure and monadic interfaces,
   so it supports both immutable and mutable data structures.
-category:
-  Containers, Data
-homepage:
-  https://github.com/nikita-volkov/focus 
-bug-reports:
-  https://github.com/nikita-volkov/focus/issues 
-author:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-maintainer:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-copyright:
-  (c) 2014, Nikita Volkov
-license:
-  MIT
-license-file:
-  LICENSE
-build-type:
-  Simple
-cabal-version:
-  >=1.10
+category: Containers, Data
+homepage: https://github.com/nikita-volkov/focus
+bug-reports: https://github.com/nikita-volkov/focus/issues
+author: Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright: (c) 2014, Nikita Volkov
+license: MIT
+license-file: LICENSE
+build-type: Simple
+cabal-version: >=1.10
 
 source-repository head
-  type:
-    git
-  location:
-    git://github.com/nikita-volkov/focus.git
+  type: git
+  location: git://github.com/nikita-volkov/focus.git
 
 library
-  hs-source-dirs:
-    library
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedLists, OverloadedStrings, PatternGuards, PatternSynonyms, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+  hs-source-dirs: library
+  default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedLists, OverloadedStrings, PatternGuards, PatternSynonyms, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language: Haskell2010
   exposed-modules:
     Focus
   other-modules:
     Focus.Prelude
   build-depends:
-    base >=4.6 && <5,
+    base >=4.9 && <5,
     transformers >=0.5 && <0.6
+
+test-suite test
+  type: exitcode-stdio-1.0
+  hs-source-dirs: test
+  default-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, DeriveFunctor, DeriveTraversable, FlexibleContexts, FlexibleInstances, LambdaCase, NoImplicitPrelude, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeFamilies
+  default-language: Haskell2010
+  main-is:
+    Main.hs
+  build-depends:
+    focus,
+    QuickCheck >=2.8.1 && <3,
+    quickcheck-instances >=0.3.11 && <0.4,
+    rerebase <2,
+    tasty >=0.12 && <2,
+    tasty-hunit >=0.9 && <0.11,
+    tasty-quickcheck >=0.9 && <0.11
diff --git a/library/Focus.hs b/library/Focus.hs
--- a/library/Focus.hs
+++ b/library/Focus.hs
@@ -20,7 +20,7 @@
   (<*>) = ap
 
 instance Monad m => Monad (Focus element m) where
-  return result = Focus (return (result, Leave)) (\ _ -> return (result, Leave))
+  return result = Focus (return (result, Leave)) (\ element -> return (result, Set element))
   (>>=) (Focus aAbsent bPresent) bKleisli = let
     sendSome element = do
       (aResult, aChange) <- bPresent element
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,44 @@
+module Main where
+
+import Prelude hiding (choose)
+import Test.QuickCheck.Instances
+import Test.Tasty
+import Test.Tasty.Runners
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+import qualified Test.QuickCheck as QuickCheck
+import qualified Test.QuickCheck.Property as QuickCheck
+import qualified Focus
+
+
+main =
+  defaultMain $
+  testGroup "" $
+  [
+    testCase "Monadically composed lookup and insert (https://github.com/nikita-volkov/stm-containers/issues/25)" $ let
+      Focus.Focus absent present = do
+        prev <- Focus.lookup
+        Focus.insert "one"
+        pure (isJust prev)
+      in do
+        assertEqual "" (True, Focus.Set "one") $ runIdentity (present "zero")
+        assertEqual "" (False, Focus.Set "one") $ runIdentity absent
+    ,
+    testCase "Applicatively composed lookup and insert" $ let
+      Focus.Focus absent present = (isJust <$> Focus.lookup) <* Focus.insert "one"
+      in do
+        assertEqual "" (True, Focus.Set "one") $ runIdentity (present "zero")
+        assertEqual "" (False, Focus.Set "one") $ runIdentity absent
+    ,
+    testCase "Applicatively composed pure and insert" $ let
+      Focus.Focus absent present = pure () <* Focus.insert "one"
+      in do
+        assertEqual "" ((), Focus.Set "one") (runIdentity (present "zero"))
+        assertEqual "" ((), Focus.Set "one") (runIdentity absent)
+    ,
+    testCase "insert" $ let
+      Focus.Focus absent present = Focus.insert "one"
+      in do
+        assertEqual "" ((), Focus.Set "one") (runIdentity (present "zero"))
+        assertEqual "" ((), Focus.Set "one") (runIdentity absent)
+  ]
