diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,2 +1,3 @@
+* 0.5.1 - Add more instances from base
 * 0.5.0.1 - Compatibility with GHC 8.2.1
 * 0.5 - Relax types of underF and overF to allow different input & output funtors
diff --git a/Control/Newtype.hs b/Control/Newtype.hs
--- a/Control/Newtype.hs
+++ b/Control/Newtype.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-}
+{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE DefaultSignatures          #-}
 {-# LANGUAGE FlexibleContexts           #-}
@@ -47,9 +48,19 @@
   , overF
   ) where
 
-import Data.Monoid
 import Control.Applicative
 import Control.Arrow
+import Data.Functor.Compose
+import Data.Functor.Identity
+#if MIN_VERSION_base(4,7,0)
+import Data.Fixed
+#endif
+import Data.Monoid
+import Data.Ord
+#if MIN_VERSION_base(4,9,0)
+import qualified Data.Semigroup
+import Data.Semigroup (Min(..), Max(..), WrappedMonoid(..), Option(..))
+#endif
 import GHC.Generics
 {-import Generics.Deriving-}
 
@@ -157,6 +168,81 @@
       => (o -> n) -> (f o -> g o') -> (f n -> g n')
 overF _ f = fmap pack . f . fmap unpack
 
+-- Instances from Control.Applicative
+
+instance Newtype (WrappedMonad m a) where
+  type O (WrappedMonad m a) = m a
+  pack = WrapMonad
+  unpack (WrapMonad a) = a
+
+instance Newtype (WrappedArrow a b c) where
+  type O (WrappedArrow a b c) = a b c
+  pack = WrapArrow
+  unpack (WrapArrow a) = a
+
+instance Newtype (ZipList a) where
+  type O (ZipList a) = [a]
+  pack = ZipList
+  unpack (ZipList a) = a
+
+-- Instances from Control.Arrow
+
+instance Newtype (Kleisli m a b) where
+  type O (Kleisli m a b) = a -> m b
+  pack = Kleisli
+  unpack (Kleisli a) = a
+
+instance Newtype (ArrowMonad a b) where
+  type O (ArrowMonad a b) = a () b
+  pack = ArrowMonad
+  unpack (ArrowMonad a) = a
+
+#if MIN_VERSION_base(4,7,0)
+-- Instances from Data.Fixed
+
+-- | @since 0.5.1
+instance Newtype (Fixed a) where
+  type O (Fixed a) = Integer
+  pack = MkFixed
+  unpack (MkFixed x) = x
+#endif
+
+-- Instances from Data.Functor.Compose
+
+-- | @since 0.5.1
+instance Newtype (Compose f g a) where
+  type O (Compose f g a) = f (g a)
+  pack = Compose
+  unpack (Compose x) = x
+
+-- Instances from Data.Functor.Const
+
+instance Newtype (Const a x) where
+  type O (Const a x) = a
+  pack = Const
+  unpack (Const a) = a
+
+-- Instances from Data.Functor.Identity
+
+-- | @since 0.5.1
+instance Newtype (Identity a) where
+  type O (Identity a) = a
+  pack = Identity
+  unpack (Identity a) = a
+
+-- Instances from Data.Monoid
+
+-- | @since 0.5.1
+instance Newtype (Dual a) where
+  type O (Dual a) = a
+  pack = Dual
+  unpack (Dual a) = a
+
+instance Newtype (Endo a) where
+  type O (Endo a) = (a -> a)
+  pack = Endo
+  unpack (Endo a) = a
+
 instance Newtype All where
   type O All = Bool
   pack = All
@@ -187,40 +273,59 @@
   pack = Last
   unpack (Last a) = a
 
-instance Newtype (Endo a) where
-  type O (Endo a) = (a -> a)
-  pack = Endo
-  unpack (Endo a) = a
+#if MIN_VERSION_base(4,8,0)
+-- | @since 0.5.1
+instance Newtype (Alt f a) where
+  type O (Alt f a) = f a
+  pack = Alt
+  unpack (Alt x) = x
+#endif
 
-instance Newtype (ZipList a) where
-  type O (ZipList a) = [a]
-  pack = ZipList
-  unpack (ZipList a) = a
+-- Instances from Data.Ord
 
-instance Newtype (Const a x) where
-  type O (Const a x) = a
-  pack = Const
-  unpack (Const a) = a
+-- | @since 0.5.1
+instance Newtype (Down a) where
+  type O (Down a) = a
+  pack = Down
+  unpack (Down a) = a
 
-instance Newtype (Kleisli m a b) where
-  type O (Kleisli m a b) = a -> m b
-  pack = Kleisli
-  unpack (Kleisli a) = a
 
-instance Newtype (WrappedMonad m a) where
-  type O (WrappedMonad m a) = m a
-  pack = WrapMonad
-  unpack (WrapMonad a) = a
+#if MIN_VERSION_base(4,9,0)
+-- Instances from Data.Semigroup
 
-instance Newtype (WrappedArrow a b c) where
-  type O (WrappedArrow a b c) = a b c
-  pack = WrapArrow
-  unpack (WrapArrow a) = a
+-- | @since 0.5.1
+instance Newtype (Min a) where
+  type O (Min a) = a
+  pack = Min
+  unpack (Min a) = a
 
-instance Newtype (ArrowMonad a b) where
-  type O (ArrowMonad a b) = a () b
-  pack = ArrowMonad
-  unpack (ArrowMonad a) = a
+-- | @since 0.5.1
+instance Newtype (Max a) where
+  type O (Max a) = a
+  pack = Max
+  unpack (Max a) = a
 
+-- | @since 0.5.1
+instance Newtype (Data.Semigroup.First a) where
+  type O (Data.Semigroup.First a) = a
+  pack = Data.Semigroup.First
+  unpack (Data.Semigroup.First a) = a
 
+-- | @since 0.5.1
+instance Newtype (Data.Semigroup.Last a) where
+  type O (Data.Semigroup.Last a) = a
+  pack = Data.Semigroup.Last
+  unpack (Data.Semigroup.Last a) = a
 
+-- | @since 0.5.1
+instance Newtype (WrappedMonoid m) where
+  type O (WrappedMonoid m) = m
+  pack = WrapMonoid
+  unpack (WrapMonoid m) = m
+
+-- | @since 0.5.1
+instance Newtype (Option a) where
+  type O (Option a) = Maybe a
+  pack = Option
+  unpack (Option x) = x
+#endif
diff --git a/newtype-generics.cabal b/newtype-generics.cabal
--- a/newtype-generics.cabal
+++ b/newtype-generics.cabal
@@ -1,5 +1,5 @@
 Name:                newtype-generics
-Version:             0.5.0.1
+Version:             0.5.1
 Synopsis:            A typeclass and set of functions for working with newtypes, with generics support.
 Description:         Per Conor McBride, the Newtype typeclass represents the packing and unpacking of a newtype,
                      and allows you to operatate under that newtype with functions such as ala.
@@ -24,6 +24,7 @@
 Library
   Exposed-modules:     Control.Newtype
   Build-depends:       base >= 4.6 && < 4.11
+                     , transformers
   -- Other-modules:       
   -- Build-tools:         
   Ghc-options: -Wall
