diff --git a/pointed.cabal b/pointed.cabal
--- a/pointed.cabal
+++ b/pointed.cabal
@@ -1,6 +1,6 @@
 name:          pointed
 category:      Data
-version:       4.2
+version:       4.2.0.1
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -27,11 +27,13 @@
     containers           >= 0.4     && < 0.6,
     comonad              >= 4       && < 5,
     data-default-class   >= 0.0.1   && < 0.1,
+    hashable             >= 1.1     && < 1.3,
     kan-extensions       >= 4.2     && < 5,
     semigroups           >= 0.8.3.1 && < 1,
-    semigroupoids        >= 4       && < 5,
+    semigroupoids        >= 4       && < 6,
     stm                  >= 2.1.2.1 && < 2.5,
-    tagged               >= 0.5     && < 1
+    tagged               >= 0.5     && < 1,
+    unordered-containers >= 0.2     && < 0.3
 
   exposed-modules:
     Data.Pointed
diff --git a/src/Data/Copointed.hs b/src/Data/Copointed.hs
--- a/src/Data/Copointed.hs
+++ b/src/Data/Copointed.hs
@@ -6,13 +6,18 @@
 module Data.Copointed where
 
 import Data.Default.Class
+import Data.Functor.Bind
 import Data.Functor.Identity
 import Data.Functor.Compose
 import Data.Functor.Coproduct
-import Data.Functor.Kan.Lift
+import Data.Functor.Reverse
+import Data.Functor.Kan.Lift as Kan
 import qualified Data.Functor.Sum as F
 import Data.Tree
 import Data.Semigroup as Semigroup
+import Control.Applicative
+import Control.Applicative.Backwards
+import Control.Applicative.Lift as Applicative
 import Control.Monad.Trans.Identity
 import qualified Control.Monad.Trans.Writer.Lazy as Lazy
 import qualified Control.Monad.Trans.Writer.Strict as Strict
@@ -56,13 +61,23 @@
 instance Copointed Tree where
   copoint = rootLabel
 
+instance Copointed f => Copointed (Backwards f) where
+  copoint = copoint . forwards
+
 instance (Copointed p, Copointed q) => Copointed (Compose p q) where
   copoint = copoint . copoint . getCompose
 
 instance (Copointed p, Copointed q) => Copointed (Coproduct p q) where
   copoint = coproduct copoint copoint
 
-instance (Functor g, g ~ h) => Copointed (Lift g h) where
+instance Copointed f => Copointed (Applicative.Lift f) where
+  copoint (Pure a)   = a
+  copoint (Other fa) = copoint fa
+
+instance Copointed f => Copointed (Reverse f) where
+  copoint = copoint . getReverse
+
+instance (Functor g, g ~ h) => Copointed (Kan.Lift g h) where
   copoint x = runIdentity (runLift x (fmap Identity))
   {-# INLINE copoint #-}
 
@@ -96,8 +111,26 @@
 instance Copointed Semigroup.Min where
   copoint = Semigroup.getMin
 
+instance Copointed WrappedMonoid where
+  copoint = unwrapMonoid
+
+#if MIN_VERSION_semigroups(0,16,2)
+instance Copointed (Arg a) where
+  copoint (Arg _ b) = b
+#endif
+
 instance Copointed w => Copointed (EnvT e w) where
   copoint = copoint . lowerEnvT
 
 instance Copointed w => Copointed (StoreT s w) where
   copoint (StoreT wf s) = copoint wf s
+
+instance Copointed f => Copointed (WrappedApplicative f) where
+  copoint = copoint . unwrapApplicative
+
+instance Copointed m => Copointed (WrappedMonad m) where
+  copoint = copoint . unwrapMonad
+
+instance Copointed f => Copointed (MaybeApply f) where
+  copoint (MaybeApply (Left fa)) = copoint fa
+  copoint (MaybeApply (Right a)) = a
diff --git a/src/Data/Pointed.hs b/src/Data/Pointed.hs
--- a/src/Data/Pointed.hs
+++ b/src/Data/Pointed.hs
@@ -3,20 +3,28 @@
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE Safe #-}
 #endif
+{-# OPTIONS_GHC -fno-warn-deprecations #-}
 module Data.Pointed where
 
 import Control.Arrow
 import Control.Applicative
+import Control.Comonad
 import Control.Concurrent.STM
 import Data.Default.Class
 import qualified Data.Monoid as Monoid
 import Data.Semigroup as Semigroup
 import Data.Functor.Identity
-import Data.Sequence (Seq)
+import Data.Sequence (Seq, ViewL(..), ViewR(..))
 import qualified Data.Sequence as Seq
 import Data.Tree (Tree(..))
+import Data.Hashable
+import Data.HashMap.Lazy (HashMap)
+import qualified Data.HashMap.Lazy as HashMap
+import Data.Map (Map)
+import qualified Data.Map as Map
 import Data.Set (Set)
 import qualified Data.Set as Set
+import Data.Functor.Bind
 import Data.Functor.Constant
 import Data.Functor.Kan.Rift
 import qualified Data.Functor.Product as Functor
@@ -123,9 +131,32 @@
 instance Pointed Semigroup.Min where
   point = Semigroup.Min
 
+instance Pointed Option where
+  point = Option . Just
+
+instance Pointed WrappedMonoid where
+  point = WrapMonoid
+
+#if MIN_VERSION_semigroups(0,16,2)
+instance Default a => Pointed (Arg a) where
+  point = Arg def
+#endif
+
+instance (Default k, Hashable k) => Pointed (HashMap k) where
+  point = HashMap.singleton def
+
+instance Default k => Pointed (Map k) where
+  point = Map.singleton def
+
 instance Pointed Seq where
   point = Seq.singleton
 
+instance Pointed ViewL where
+  point a = a :< Seq.empty
+
+instance Pointed ViewR where
+  point a = Seq.empty :> a
+
 instance Pointed Set where
   point = Set.singleton
 
@@ -192,3 +223,12 @@
 
 instance Pointed m => Pointed (Static m a) where
   point = Static . point . const
+
+instance Pointed (Cokleisli w a) where
+  point = Cokleisli . const
+
+instance Pointed f => Pointed (WrappedApplicative f) where
+  point = WrapApplicative . point
+
+instance Pointed (MaybeApply f) where
+  point = MaybeApply . Right
