diff --git a/bound.cabal b/bound.cabal
--- a/bound.cabal
+++ b/bound.cabal
@@ -1,6 +1,6 @@
 name:          bound
 category:      Language, Compilers/Interpreters
-version:       0.3.1
+version:       0.3.2
 license:       BSD3
 cabal-version: >= 1.9.2
 license-file:  LICENSE
diff --git a/examples/Simple.hs b/examples/Simple.hs
--- a/examples/Simple.hs
+++ b/examples/Simple.hs
@@ -37,8 +37,7 @@
 let_ :: Eq a => [(a,Exp a)] -> Exp a -> Exp a
 let_ [] b = b
 let_ bs b = Let (map (abstr . snd) bs) (abstr b)
-  where vs = map fst bs
-        abstr = abstract (`elemIndex` vs)
+  where abstr = abstract (`elemIndex` map fst bs)
 
 instance Functor Exp  where fmap       = fmapDefault
 instance Foldable Exp where foldMap    = foldMapDefault
@@ -69,8 +68,7 @@
 -- | Compute the normal form of an expression
 nf :: Exp a -> Exp a
 nf e@V{}   = e
-nf (Lam b)      = Lam $ toScope $ nf $ fromScope b
--- nf (Lam (Scope b)) = Lam $ Scope $ fmap (fmap nf) (nf b)
+nf (Lam b) = Lam $ toScope $ nf $ fromScope b
 nf (f :@ a) = case whnf f of
   Lam b -> nf (instantiate1 a b)
   f' -> nf f' :@ nf a
diff --git a/src/Bound/Scope.hs b/src/Bound/Scope.hs
--- a/src/Bound/Scope.hs
+++ b/src/Bound/Scope.hs
@@ -120,7 +120,7 @@
     return (Scope (fmap (fmap lower1 . lower2) s), r'')
 
 instance Bound (Scope b) where
-  m >>>= f = m >>= lift . f
+  Scope m >>>= f = Scope (liftM (fmap (>>= f)) m)
 
 -- | Capture some free variables in an expression to yield
 -- a 'Scope' with bound variables in @b@
