diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 ## Changelog
 
+## 0.20.0.0 (2015-02-10)
+
+* Changes the type signature of `when` and `unless` from `:: Bool -> Fay a -> Fay ()` to `:: Bool -> Fay () -> Fay ()`. This allows tail call optimization for these functions and matches base - by Zachary Mason
+
 #### 0.19.4.2 (2015-01-05)
 
 * Allow `fay 0.22.*`.
diff --git a/fay-base.cabal b/fay-base.cabal
--- a/fay-base.cabal
+++ b/fay-base.cabal
@@ -1,5 +1,5 @@
 name:                fay-base
-version:             0.19.4.2
+version:             0.20.0.0
 synopsis:            The base package for Fay.
 description:         The base package for Fay.
                      This package amongst others exports Prelude and FFI which you probably want to use with Fay.
@@ -59,4 +59,4 @@
     Unsafe.Coerce
   build-depends:
       base == 4.*
-    , fay >= 0.21.1 && < 0.23
+    , fay >= 0.21.1 && < 0.24
diff --git a/src/Prelude.hs b/src/Prelude.hs
--- a/src/Prelude.hs
+++ b/src/Prelude.hs
@@ -295,11 +295,11 @@
 fail :: String -> Fay a
 fail = error
 
-when :: Bool -> Fay a -> Fay ()
-when p m = if p then m >> return () else return ()
+when :: Bool -> Fay () -> Fay ()
+when p m = if p then m else return ()
 
-unless :: Bool -> Fay a -> Fay ()
-unless p m = if p then return () else m >> return ()
+unless :: Bool -> Fay () -> Fay ()
+unless p m = if p then return () else m
 
 forM :: [a] -> (a -> Fay b) -> Fay [b]
 forM lst fn = sequence $ map fn lst
