diff --git a/profunctor-optics.cabal b/profunctor-optics.cabal
--- a/profunctor-optics.cabal
+++ b/profunctor-optics.cabal
@@ -1,7 +1,7 @@
 cabal-version: >= 1.10
 
 name:           profunctor-optics
-version:        0.0.0.3
+version:        0.0.0.4
 synopsis:       An optics library compatible with the typeclasses in 'profunctors'.
 description:  
   This package provides utilities for creating and manipulating profunctor-based optics. Some highlights:
@@ -100,11 +100,11 @@
     , mtl               >= 2.0.1    && < 2.3
     , newtype-generics  >= 0.5.3    && < 0.6
     , profunctor-arrows >= 0.0.0.2  && < 0.0.1
-    , profunctors       >= 5.3      && < 6
+    , profunctors       >= 5.4      && < 6
     , rings             >= 0.0.2.1  && < 0.1
     , semigroupoids     >= 5        && < 6
     , tagged            >= 0.4.4    && < 1
-    , transformers      >= 0.5.6.0  && < 0.6
+    , transformers      >= 0.5      && < 0.6
     , unliftio-core     >= 0.1.2    && < 0.2
     , adjunctions       >= 4.4      && < 5.0
 
diff --git a/src/Data/Profunctor/Optic.hs b/src/Data/Profunctor/Optic.hs
--- a/src/Data/Profunctor/Optic.hs
+++ b/src/Data/Profunctor/Optic.hs
@@ -23,7 +23,6 @@
   , module View
   , module Setter
   , module Zoom
-  , module Data.Profunctor.Optic 
 ) where
 
 import Data.Profunctor.Optic.Types            as Type
diff --git a/src/Data/Profunctor/Optic/Affine.hs b/src/Data/Profunctor/Optic/Affine.hs
--- a/src/Data/Profunctor/Optic/Affine.hs
+++ b/src/Data/Profunctor/Optic/Affine.hs
@@ -23,8 +23,6 @@
     -- * Primitive operators
   , withAffine
     -- * Operators
-  , is
-  , isnt
   , matches
     -- * Classes
   , Strong(..)
@@ -128,24 +126,6 @@
 ---------------------------------------------------------------------
 -- Operators
 ---------------------------------------------------------------------
-
--- | Check whether the optic is matched.
---
--- >>> is just Nothing
--- False
---
-is :: AAffine s t a b -> s -> Bool
-is o = either (const False) (const True) . matches o
-{-# INLINE is #-}
-
--- | Check whether the optic isn't matched.
---
--- >>> isnt just Nothing
--- True
---
-isnt :: AAffine s t a b -> s -> Bool
-isnt o = either (const True) (const False) . matches o
-{-# INLINE isnt #-}
 
 -- | Test whether the optic matches or not.
 --
diff --git a/src/Data/Profunctor/Optic/Option.hs b/src/Data/Profunctor/Optic/Option.hs
--- a/src/Data/Profunctor/Optic/Option.hs
+++ b/src/Data/Profunctor/Optic/Option.hs
@@ -23,6 +23,8 @@
   , (^?)
   , preview 
   , preuse
+  , is
+  , isnt
     -- * Indexed operators
   , ipreview
   , ipreviews
@@ -44,7 +46,7 @@
 import Data.Profunctor.Optic.Carrier
 import Data.Profunctor.Optic.Import
 import Data.Profunctor.Optic.Prism (just, async)
-import Data.Profunctor.Optic.Affine (affineVl, iaffineVl, is)
+import Data.Profunctor.Optic.Affine
 import Data.Profunctor.Optic.Types
 import Data.Profunctor.Optic.View
 import qualified Control.Exception as Ex
@@ -183,6 +185,24 @@
 preuse :: MonadState s m => AOption a s a -> m (Maybe a)
 preuse o = State.gets $ preview o
 {-# INLINE preuse #-}
+
+-- | Check whether the optic is matched.
+--
+-- >>> is just Nothing
+-- False
+--
+is :: AOption a s a -> s -> Bool
+is o s = isJust (preview o s)
+{-# INLINE is #-}
+
+-- | Check whether the optic isn't matched.
+--
+-- >>> isnt just Nothing
+-- True
+--
+isnt :: AOption a s a -> s -> Bool
+isnt o s = not (isJust (preview o s))
+{-# INLINE isnt #-}
 
 ------------------------------------------------------------------------------
 -- Indexed operators
diff --git a/src/Data/Profunctor/Optic/Types.hs b/src/Data/Profunctor/Optic/Types.hs
--- a/src/Data/Profunctor/Optic/Types.hs
+++ b/src/Data/Profunctor/Optic/Types.hs
@@ -351,8 +351,10 @@
 instance (Coapplicative f, Coapplicative g) => Coapplicative (Compose f g) where
   copure (Compose a) = copure . fmap copure $ a
 
+#if MIN_VERSION_profunctors(5,4,0)
 instance Coapplicative f => Choice (Costar f) where
   left' (Costar f) = Costar $ either (Left . f) (Right . copure) . branch
+#endif
 
 -- | Can be used to rewrite
 --
