diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
index 19b736ba55516209ff2b94a9f1dd2a5d78f2f388..4089f093a1304598eb0add4ef6a82c0b078e55fe 100644
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -6,7 +6,7 @@ Unreleased
   `Control.Monad.Error.Class`, and re-export from `Control.Monad.Except`.
 * Remove `Control.Monad.List` and `Control.Monad.Error`
 * Remove instances of deprecated `ListT` and `ErrorT`
-* Add instances for `Control.Monad.Trans.Accum`
+* Add instances for `Control.Monad.Trans.Accum` and `Control.Monad.Trans.Select`
 
 2.2.2
 -----
diff --git a/Control/Monad/Reader/Class.hs b/Control/Monad/Reader/Class.hs
index 4b163cd45c737bec5c3d7069444f3389c228927c..a1d52daa9b7f98e7649519cecb3a40c22d8fe1a3 100644
--- a/Control/Monad/Reader/Class.hs
+++ b/Control/Monad/Reader/Class.hs
@@ -61,6 +61,7 @@ import Control.Monad.Trans.Writer.Strict as Strict
 
 #if MIN_VERSION_transformers(0,5,3)
 import Control.Monad.Trans.Accum as Accum
+import Control.Monad.Trans.Select as Select
 #endif
 
 #if MIN_VERSION_transformers(0,5,6)
@@ -203,4 +204,18 @@ instance
     ask = lift ask
     local = Accum.mapAccumT . local
     reader = lift . reader
+
+-- | @since 2.3
+instance
+  ( MonadReader r' m
+#if !MIN_VERSION_base(4,8,0)
+  , Functor m
+#endif
+  ) => MonadReader r' (SelectT r m) where
+    ask = lift ask
+    -- there is no Select.liftLocal
+    local f m = SelectT $ \c -> do
+      r <- ask
+      local f (runSelectT m (local (const r) . c))
+    reader = lift . reader
 #endif