diff --git a/Control/Monad/Trans/Accum.hs b/Control/Monad/Trans/Accum.hs
index ecb664bd4f1aaced7c9452ac7a0bcb66078a44d6..b1ec83d3e19295223ea03128fab46e9f70992f0f 100644
--- a/Control/Monad/Trans/Accum.hs
+++ b/Control/Monad/Trans/Accum.hs
@@ -167,8 +167,8 @@ instance (Functor m) => Functor (AccumT w m) where
     fmap f = mapAccumT $ fmap $ \ ~(a, w) -> (f a, w)
     {-# INLINE fmap #-}
 
-instance (Monoid w, Monad m) => Applicative (AccumT w m) where
-    pure a  = AccumT $ const $ pure (a, mempty)
+instance (Monoid w, Functor m, Monad m) => Applicative (AccumT w m) where
+    pure a  = AccumT $ const $ return (a, mempty)
     {-# INLINE pure #-}
     mf <*> mv = AccumT $ \ w -> do
       ~(f, w')  <- runAccumT mf w
@@ -176,15 +176,15 @@ instance (Monoid w, Monad m) => Applicative (AccumT w m) where
       return (f v, w' `mappend` w'')
     {-# INLINE (<*>) #-}
 
-instance (Monoid w, MonadPlus m) => Alternative (AccumT w m) where
+instance (Monoid w, Functor m, MonadPlus m) => Alternative (AccumT w m) where
     empty   = AccumT $ const mzero
     {-# INLINE empty #-}
-    m <|> n = AccumT $ \ w -> runAccumT m w <|> runAccumT n w
+    m <|> n = AccumT $ \ w -> runAccumT m w `mplus` runAccumT n w
     {-# INLINE (<|>) #-}
 
-instance (Monoid w, Monad m) => Monad (AccumT w m) where
+instance (Monoid w, Functor m, Monad m) => Monad (AccumT w m) where
 #if !(MIN_VERSION_base(4,8,0))
-    return a = AccumT $ const $ return (a, mempty)
+    return a  = AccumT $ const $ return (a, mempty)
     {-# INLINE return #-}
 #endif
     m >>= k  = AccumT $ \ w -> do
@@ -201,13 +201,13 @@ instance (Monoid w, Fail.MonadFail m) => Fail.MonadFail (AccumT w m) where
     {-# INLINE fail #-}
 #endif
 
-instance (Monoid w, MonadPlus m) => MonadPlus (AccumT w m) where
+instance (Monoid w, Functor m, MonadPlus m) => MonadPlus (AccumT w m) where
     mzero       = AccumT $ const mzero
     {-# INLINE mzero #-}
     m `mplus` n = AccumT $ \ w -> runAccumT m w `mplus` runAccumT n w
     {-# INLINE mplus #-}
 
-instance (Monoid w, MonadFix m) => MonadFix (AccumT w m) where
+instance (Monoid w, Functor m, MonadFix m) => MonadFix (AccumT w m) where
     mfix m = AccumT $ \ w -> mfix $ \ ~(a, _) -> runAccumT (m a) w
     {-# INLINE mfix #-}
 
@@ -217,7 +217,7 @@ instance (Monoid w) => MonadTrans (AccumT w) where
         return (a, mempty)
     {-# INLINE lift #-}
 
-instance (Monoid w, MonadIO m) => MonadIO (AccumT w m) where
+instance (Monoid w, Functor m, MonadIO m) => MonadIO (AccumT w m) where
     liftIO = lift . liftIO
     {-# INLINE liftIO #-}
 
diff --git a/Control/Monad/Trans/Select.hs b/Control/Monad/Trans/Select.hs
index 12a798ec7726dd8775e7faa3755841d8b2afc6a9..ad61f4e84805a1c82311921a130a3911dd9e5a72 100644
--- a/Control/Monad/Trans/Select.hs
+++ b/Control/Monad/Trans/Select.hs
@@ -81,8 +81,8 @@ instance (Functor m) => Functor (SelectT r m) where
     fmap f (SelectT g) = SelectT (fmap f . g . (. f))
     {-# INLINE fmap #-}
 
-instance (Monad m) => Applicative (SelectT r m) where
-    pure = lift . pure
+instance (Functor m, Monad m) => Applicative (SelectT r m) where
+    pure = lift . return
     {-# INLINE pure #-}
     SelectT gf <*> SelectT gx = SelectT $ \ k -> do
         let h f = liftM f (gx (k . f))
@@ -90,7 +90,7 @@ instance (Monad m) => Applicative (SelectT r m) where
         h f
     {-# INLINE (<*>) #-}
 
-instance (MonadPlus m) => Alternative (SelectT r m) where
+instance (Functor m, MonadPlus m) => Alternative (SelectT r m) where
     empty = mzero
     {-# INLINE empty #-}
     (<|>) = mplus
@@ -98,7 +98,7 @@ instance (MonadPlus m) => Alternative (SelectT r m) where
 
 instance (Monad m) => Monad (SelectT r m) where
 #if !(MIN_VERSION_base(4,8,0))
-    return = pure
+    return = lift . return
     {-# INLINE return #-}
 #endif
     SelectT g >>= f = SelectT $ \ k -> do
diff --git a/changelog b/changelog
index 2ad7539ab0dbe86dd58ff4ed1a29460711ca6ae3..7f7590b83e8649f79dca36e97198a6124a96c378 100644
--- a/changelog
+++ b/changelog
@@ -1,5 +1,8 @@
 -*-change-log-*-
 
+0.5.3.1 Ross Paterson <R.Paterson@city.ac.uk> Feb 2017
+	* Fixed for pre-AMP environments
+
 0.5.3.0 Ross Paterson <R.Paterson@city.ac.uk> Feb 2017
 	* Added AccumT and SelectT monad transformers
 	* Deprecated ListT
diff --git a/transformers.cabal b/transformers.cabal
index 024eea884d509ccdeba63009821ae23395f14003..08646ed79f261acfe4f3935e7358165be437362b 100644
--- a/transformers.cabal
+++ b/transformers.cabal
@@ -1,5 +1,5 @@
 name:         transformers
-version:      0.5.3.0
+version:      0.5.3.1
 license:      BSD3
 license-file: LICENSE
 author:       Andy Gill, Ross Paterson