diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.0.6
+
+* More generalising
+
 0.0.5
 
 * Rename `downReader` to `liftReader`.
diff --git a/reader.cabal b/reader.cabal
--- a/reader.cabal
+++ b/reader.cabal
@@ -1,12 +1,12 @@
 name:                 reader
-version:              0.0.5
+version:              0.0.6
 synopsis:             A reader data type with all the bits
 description:          A reader data type with all the bits and type constructor rearrangements
 license:              BSD3
 license-file:         LICENCE
 author:               Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
 maintainer:           Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
-copyright:            Copyright (C) 2021-2015 Tony Morris
+copyright:            Copyright (C) 2021-2025 Tony Morris
 category:             Test
 build-type:           Simple
 extra-source-files:   changelog.md
diff --git a/src/Data/Reader/Reader.hs b/src/Data/Reader/Reader.hs
--- a/src/Data/Reader/Reader.hs
+++ b/src/Data/Reader/Reader.hs
@@ -6,8 +6,7 @@
 module Data.Reader.Reader where
 
 import Control.Applicative ( Applicative(pure) )
-import Control.Arrow
-    ( Kleisli(Kleisli) )
+import Control.Arrow ( Kleisli )
 import Control.Category ( Category(..) )
 import Control.Lens
     ( _Wrapped,
@@ -18,7 +17,7 @@
       Iso,
       Rewrapped,
       Wrapped(Unwrapped) )
-import Data.Profunctor ( Star(Star) )
+import Data.Profunctor ( Star )
 
 -- |
 --
@@ -74,9 +73,7 @@
   (Rewrapped a a, Rewrapped s s, Unwrapped a ~ (d1 -> f2 c1), Unwrapped s ~ (d2 -> f3 c2)) =>
   Iso (Star f2 d1 c1) (Star f3 d2 c2) a s
 star =
-  iso
-    (\(Star k) -> review _Wrapped k)
-    (Star . view _Wrapped)
+  reader'
 
 -- |
 --
@@ -85,6 +82,12 @@
   (Rewrapped a1 a1, Rewrapped s s, Unwrapped a1 ~ (a2 -> m1 b1), Unwrapped s ~ (a3 -> m2 b2)) =>
   Iso (Kleisli m1 a2 b1) (Kleisli m2 a3 b2) a1 s
 kleisli =
+  reader'
+
+reader' ::
+  (Rewrapped s s, Rewrapped t t, Rewrapped a a, Rewrapped b b, Unwrapped b ~ Unwrapped t, Unwrapped a ~ Unwrapped s) =>
+  Iso s t a b
+reader' =
   iso
-    (\(Kleisli k) -> review _Wrapped k)
-    (Kleisli . view _Wrapped)
+    (review _Wrapped . view _Wrapped)
+    (review _Wrapped . view _Wrapped)
diff --git a/src/Data/Reader/Reader1.hs b/src/Data/Reader/Reader1.hs
--- a/src/Data/Reader/Reader1.hs
+++ b/src/Data/Reader/Reader1.hs
@@ -28,7 +28,7 @@
     ( LensLike, view, iso, review, over, _Wrapped, Iso, Rewrapped, Wrapped(..) )
 import Control.Monad
     ( Monad(return, (>>=)), MonadPlus(..) )
-import qualified Control.Monad.Reader as Reader(ReaderT(ReaderT))
+import qualified Control.Monad.Reader as Reader( ReaderT )
 import Control.Monad.Reader.Class ( MonadReader )
 import qualified Control.Monad.Reader.Class as Reader ( MonadReader(..) )
 import Control.Monad.State.Class ( MonadState(..) )
@@ -51,7 +51,13 @@
 import Data.Monoid(Monoid(mempty))
 import Data.Profunctor ( Star )
 import Data.Reader.Reader
-    ( pureReader, homReader, reader, readerLens, star, kleisli )
+    ( pureReader,
+      homReader,
+      reader,
+      readerLens,
+      star,
+      kleisli,
+      reader' )
 import Data.Semigroup ( Semigroup((<>)) )
 
 newtype Reader1T a f b =
@@ -98,9 +104,7 @@
     (Reader1T a f b)
     (Reader1T a' f' b')
 reader1' =
-  iso
-    (\(Reader.ReaderT k) -> Reader1T k)
-    (\(Reader1T k) -> Reader.ReaderT k)
+  reader'
 
 star1 ::
   Iso
diff --git a/src/Data/Reader/Reader2.hs b/src/Data/Reader/Reader2.hs
--- a/src/Data/Reader/Reader2.hs
+++ b/src/Data/Reader/Reader2.hs
@@ -37,7 +37,7 @@
     ( LensLike, view, iso, review, over, _Wrapped, Iso, Rewrapped, Wrapped(..) )
 import Control.Monad
     ( Monad(return, (>>=)), sequence, MonadPlus(..), (>=>) )
-import qualified Control.Monad.Reader as Reader(ReaderT(ReaderT))
+import qualified Control.Monad.Reader as Reader( ReaderT )
 import Control.Monad.Reader.Class ( MonadReader )
 import qualified Control.Monad.Reader.Class as Reader ( MonadReader(..) )
 import Control.Monad.State.Class ( MonadState(..) )
@@ -69,6 +69,13 @@
       Cochoice(unright) )
 import Data.Profunctor.Traversing ( Traversing(..) )
 import Data.Reader.Reader
+    ( pureReader,
+      homReader,
+      reader,
+      readerLens,
+      star,
+      kleisli,
+      reader' )
 import Data.Semigroup ( Semigroup((<>)) )
 import Data.Semigroupoid ( Semigroupoid(..) )
 import Data.Traversable ( Traversable(traverse) )
@@ -105,9 +112,7 @@
     (Reader2T f a b)
     (Reader2T f' a' b')
 reader2' =
-  iso
-    (\(Reader.ReaderT k) -> Reader2T k)
-    (\(Reader2T k) -> Reader.ReaderT k)
+  reader'
 
 type Reader2Lens f s t a b =
   Reader2T f a b
diff --git a/src/Data/Reader/Reader3.hs b/src/Data/Reader/Reader3.hs
--- a/src/Data/Reader/Reader3.hs
+++ b/src/Data/Reader/Reader3.hs
@@ -26,7 +26,7 @@
 import Control.Category ( Category(..) )
 import Control.Lens
     ( LensLike, view, iso, review, over, _Wrapped, Iso, Rewrapped, Wrapped(..) )
-import qualified Control.Monad.Reader as Reader(ReaderT(ReaderT))
+import qualified Control.Monad.Reader as Reader( ReaderT )
 import Data.Either ( either )
 import Data.Functor.Apply ( Apply(liftF2) )
 import Data.Functor.Contravariant ( Contravariant(contramap) )
@@ -36,7 +36,13 @@
 import Data.Profunctor ( Star )
 import Data.Monoid(Monoid(mempty, mappend))
 import Data.Reader.Reader
-    ( pureReader, homReader, reader, readerLens, star, kleisli )
+    ( pureReader,
+      homReader,
+      reader,
+      readerLens,
+      star,
+      kleisli,
+      reader' )
 import Data.Semigroup ( Semigroup((<>)) )
 import Data.Void ( absurd )
 
@@ -71,9 +77,7 @@
     (Reader3T f b a)
     (Reader3T f' b' a')
 reader3' =
-  iso
-    (\(Reader.ReaderT k) -> Reader3T k)
-    (\(Reader3T k) -> Reader.ReaderT k)
+  reader'
 
 type Reader3Lens f s t a b =
   Reader3T f b a
