diff --git a/bluefin-internal.cabal b/bluefin-internal.cabal
--- a/bluefin-internal.cabal
+++ b/bluefin-internal.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               bluefin-internal
-version:            0.8.2.0
+version:            0.9.0.0
 license:            MIT
 license-file:       LICENSE
 author:             Tom Ellis
diff --git a/src/Bluefin/Internal.hs b/src/Bluefin/Internal.hs
--- a/src/Bluefin/Internal.hs
+++ b/src/Bluefin/Internal.hs
@@ -18,12 +18,12 @@
     OneWayCoercibleD,
     OneWayCoercion,
     gOneWayCoercible,
-    oneWayCoerce,
     oneWayCoercible,
     oneWayCoercion,
     trans3D,
     unsafeCoercionOfOneWayCoercion,
     unsafeOneWayCoercible,
+    unsafeOneWayCoerce,
   )
 import Bluefin.Internal.Vault (Vault)
 import Bluefin.Internal.Vault qualified as Vault
@@ -412,7 +412,10 @@
 --
 -- Please note the "handle" nomeclature is legacy and will probably
 -- change to "capability" in the future.  See "Bluefin.Capability".
-class Handle (h :: Effects -> Type) where
+class
+  (forall e es. (e <: es) => OneWayCoercible (h e) (h es)) =>
+  Handle (h :: Effects -> Type)
+  where
   handleImpl :: HandleD h
 
 -- | This was previously a method of class 'Handle' using which you
@@ -444,7 +447,7 @@
 --   oneWayCoercibleImpl = 'oneWayCoercibleTrustMe' $ \\h -> \<mapHandle definition\>
 -- @
 mapHandle :: forall h e es. (Handle h, e <: es) => h e -> h es
-mapHandle = case handleDictImpl @h of MkHandleDict -> oneWayCoerce
+mapHandle = unsafeOneWayCoerce
 
 withHandle ::
   forall h r.
@@ -452,7 +455,7 @@
   -- | ͘
   ((forall e es. (e <: es) => OneWayCoercible (h e) (h es)) => r) ->
   r
-withHandle r = case handleDictImpl @h of MkHandleDict -> r
+withHandle r = r
 
 type HandleDict :: (Effects -> Type) -> Type
 data HandleDict h where
@@ -514,13 +517,13 @@
 handleOneWayCoercible = MkHandleD (unsafeCoerce (MkHandleDict @h))
 
 instance (Handle h) => Handle (Rec1 h) where
-  handleImpl = withHandle @h handleOneWayCoercible
+  handleImpl = handleOneWayCoercible
 
 instance (Handle h) => Handle (M1 i t h) where
-  handleImpl = withHandle @h handleOneWayCoercible
+  handleImpl = handleOneWayCoercible
 
 instance (Handle h1, Handle h2) => Handle (h1 :*: h2) where
-  handleImpl = withHandle @h1 (withHandle @h2 handleOneWayCoercible)
+  handleImpl = handleOneWayCoercible
 
 -- | It is not always possible to derive an instance of
 -- 'OneWayCoercible'.  In such cases write a definition of
@@ -1735,7 +1738,7 @@
 mapHandleReader = case coerceH of Coercion -> coerce
   where
     oneWayCoerceH :: OneWayCoercion (h e) (h es)
-    oneWayCoerceH = withHandle @h oneWayCoercion
+    oneWayCoerceH = oneWayCoercion
 
     coerceH :: Coercion (h e) (h es)
     coerceH = unsafeCoercionOfOneWayCoercion oneWayCoerceH
@@ -1777,7 +1780,7 @@
 runHandleReader h k = do
   runReader (mapHandle h) $ \(st :: Reader (h es) e) -> do
     let oneWayCoerceH :: OneWayCoercion (h es) (h (e :& es))
-        oneWayCoerceH = withHandle @h oneWayCoercion
+        oneWayCoerceH = oneWayCoercion
 
     let coerceH :: Coercion (h es) (h (e :& es))
         coerceH = unsafeCoercionOfOneWayCoercion oneWayCoerceH
diff --git a/src/Bluefin/Internal/OneWayCoercible.hs b/src/Bluefin/Internal/OneWayCoercible.hs
--- a/src/Bluefin/Internal/OneWayCoercible.hs
+++ b/src/Bluefin/Internal/OneWayCoercible.hs
@@ -1,3 +1,13 @@
+-- | 'OneWayCoercible' morally belongs to GHC as erased,
+-- compiler-checked evidence of representational "castability"
+-- (i.e. conversion in one direction only), just like 'Coercible` is
+-- evidence of representational equality (i.e. "castability" in both
+-- directions).  But such a feature is missing in GHC and Bluefin
+-- simulates it with an ordinary class.  To obtain zero-cost
+-- conversions it must trust the evidence without evaluating its
+-- dictionary, introducing potential unsafety when 'OneWayCoercible'
+-- instances are not valid.
+
 {-# OPTIONS_HADDOCK not-home #-}
 
 module Bluefin.Internal.OneWayCoercible
@@ -45,6 +55,9 @@
 
 oneWayCoerce :: forall a b. (OneWayCoercible a b) => a -> b
 oneWayCoerce = oneWayCoerceWith (oneWayCoercion @a @b)
+
+unsafeOneWayCoerce :: forall a b. (OneWayCoercible a b) => a -> b
+unsafeOneWayCoerce = unsafeCoerce
 
 oneWayCoerceWith :: OneWayCoercion a b -> a -> b
 oneWayCoerceWith (MkOneWayCoercion Coercion) = coerce
