diff --git a/Changelog.txt b/Changelog.txt
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,8 +1,8 @@
-Sun Jul  5 23:49:09 PDT 2015  paul@thev.net
-  * Bump version to 0.5.2.3
+Mon Jul  6 00:14:07 PDT 2015  paul@thev.net
+  * Bump version to 0.5.2.4
 
-Sun Jul  5 23:45:09 PDT 2015  paul@thev.net
-  * Backward compatability fix to work with GHC 7.8.4
+Mon Jul  6 00:13:52 PDT 2015  paul@thev.net
+  * Comptability fix for GHC 7.8.4
 
 Tue Jun 23 11:52:53 PDT 2015  plcplc@gmail.com
   * Update for ghc 7.10.1
diff --git a/GLFW.cabal b/GLFW.cabal
--- a/GLFW.cabal
+++ b/GLFW.cabal
@@ -1,5 +1,5 @@
 name:          GLFW
-version:       0.5.2.3
+version:       0.5.2.4
 homepage:      http://haskell.org/haskellwiki/GLFW
 maintainer:    Paul H. Liu <paul@thev.net>
 cabal-version: >= 1.12
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -253,8 +253,8 @@
         ~(x', s'') <- runStateT x s'
         return (f' x', s'')
 
-instance (Monad m) => Monad (StateT s m) where
-    return = return
+instance (Functor m, Monad m) => Monad (StateT s m) where
+    return = pure
     m >>= k  = StateT $ \s -> do
         ~(a, s') <- runStateT m s
         runStateT (k a) s'
@@ -265,6 +265,6 @@
         a <- m
         return (a, s)
 
-instance (Monad m) => MonadState s (StateT s m) where
+instance (Functor m, Monad m) => MonadState s (StateT s m) where
     get   = StateT $ \s -> return (s, s)
     put s = StateT $ \_ -> return ((), s)
