diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/lib/Polysemy/Resume/Data/Stop.hs b/lib/Polysemy/Resume/Data/Stop.hs
--- a/lib/Polysemy/Resume/Data/Stop.hs
+++ b/lib/Polysemy/Resume/Data/Stop.hs
@@ -1,8 +1,8 @@
+{-# options_haddock prune #-}
+
 -- |Description: Internal
 module Polysemy.Resume.Data.Stop where
 
-import Polysemy (makeSem)
-
 -- |An effect similar to 'Polysemy.Error.Error' without the ability to be caught.
 -- Used to signal that an error is supposed to be expected by dependent programs.
 --
@@ -16,6 +16,7 @@
 --     StopBoom -> stop (Boom "ouch")
 -- @
 data Stop e :: Effect where
+  -- |Abort a computation with an error value.
   Stop :: e -> Stop e m a
 
 makeSem ''Stop
diff --git a/lib/Polysemy/Resume/Prelude.hs b/lib/Polysemy/Resume/Prelude.hs
deleted file mode 100644
--- a/lib/Polysemy/Resume/Prelude.hs
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Polysemy.Resume.Prelude (
-  module GHC.Err,
-  module Polysemy,
-  module Polysemy.Error,
-  module Relude,
-) where
-
-import GHC.Err (undefined)
-import Polysemy (Effect, EffectRow, InterpreterFor, Member, Members, Sem)
-import Polysemy.Error (Error)
-import Relude hiding (undefined)
diff --git a/lib/Polysemy/Resume/Resumable.hs b/lib/Polysemy/Resume/Resumable.hs
--- a/lib/Polysemy/Resume/Resumable.hs
+++ b/lib/Polysemy/Resume/Resumable.hs
@@ -1,8 +1,8 @@
+{-# options_ghc -Wno-redundant-constraints #-}
+
 module Polysemy.Resume.Resumable where
 
-import Polysemy (Final, Tactical)
-import Polysemy.Error (Error (Throw), catchJust)
-import Polysemy.Internal (Sem (Sem, runSem), liftSem, raise, raiseUnder, send, usingSem)
+import Polysemy.Internal (Sem (Sem, runSem), liftSem, usingSem)
 import Polysemy.Internal.CustomErrors (FirstOrder)
 import Polysemy.Internal.Tactics (liftT, runTactics)
 import Polysemy.Internal.Union (Weaving (Weaving), decomp, hoist, inj, injWeaving, weave)
@@ -38,7 +38,7 @@
 -- * the interpreter is wrapped with actions of another effect, as in:
 --
 --   @
---   interpretEffResumable :: InterpreterFor Eff r
+--   interpretEff :: InterpreterFor Eff r
 --   ...
 --
 --   interpretEffResumable :: InterpreterFor (Resumable Text Eff) r
@@ -69,9 +69,6 @@
             runStop $ interpreter $ liftSem $ weave s (raise . raise . wv) ins (injWeaving e)
       Left g ->
         k g
-  -- where
-  --   int =
-  --     runSem . interpreter
 {-# inline resumable #-}
 
 -- |Convenience combinator for turning an interpreter that doesn't use 'Stop' into a 'Resumable'.
@@ -123,17 +120,16 @@
       Left there ->
         k (hoist (interpretResumableH handler) there)
       Right (Weaving (Resumable (Weaving e s dist ex ins)) sOuter distOuter exOuter insOuter) ->
-        usingSem k (exFinal <$> runStop tac)
+        usingSem k (exFinal <$> runStop (tac (handler e)))
         where
           tac =
             runTactics
             (Compose (s <$ sOuter))
             (raiseUnder . fmap Compose . distOuter . fmap dist . getCompose)
-            (join . fmap ins . insOuter . getCompose)
+            (ins <=< insOuter . getCompose)
             (raise . interpretResumableH handler . fmap Compose . distOuter . fmap dist . getCompose)
-            (handler e)
           exFinal = exOuter . \case
-            Right (getCompose -> a) -> Right . ex <$> a
+            Right (Compose a) -> Right . ex <$> a
             Left err -> Left err <$ sOuter
 {-# inline interpretResumableH #-}
 
diff --git a/lib/Polysemy/Resume/Resume.hs b/lib/Polysemy/Resume/Resume.hs
--- a/lib/Polysemy/Resume/Resume.hs
+++ b/lib/Polysemy/Resume/Resume.hs
@@ -1,7 +1,5 @@
+-- |Resumption combinators, transforming an effect into 'Resumable' and 'Stop'.
 module Polysemy.Resume.Resume where
-
-import Polysemy (raiseUnder, raiseUnder2)
-import Polysemy.Error (throw)
 
 import Polysemy.Resume.Data.Resumable (Resumable)
 import Polysemy.Resume.Data.Stop (Stop, stop)
diff --git a/lib/Polysemy/Resume/Stop.hs b/lib/Polysemy/Resume/Stop.hs
--- a/lib/Polysemy/Resume/Stop.hs
+++ b/lib/Polysemy/Resume/Stop.hs
@@ -1,16 +1,15 @@
 module Polysemy.Resume.Stop where
 
-import Control.Exception (throwIO, try)
-import Control.Monad.Trans.Except (throwE)
+import qualified Control.Exception as Base
+import Control.Exception (throwIO)
+import Control.Monad.Trans.Except (ExceptT (ExceptT), runExceptT, throwE)
 import Data.Typeable (typeRep)
-import Polysemy (Final)
-import Polysemy.Error (runError, throw)
 import Polysemy.Final (getInitialStateS, interpretFinal, runS, withStrategicToFinal)
-import Polysemy.Internal (Sem(Sem), send, usingSem)
-import Polysemy.Internal.Union (Weaving(Weaving), decomp, hoist, weave)
+import Polysemy.Internal (Sem (Sem), usingSem)
+import Polysemy.Internal.Union (Weaving (Weaving), decomp, hoist, weave)
 import qualified Text.Show
 
-import Polysemy.Resume.Data.Stop (Stop(Stop), stop)
+import Polysemy.Resume.Data.Stop (Stop (Stop), stop)
 
 hush :: Either e a -> Maybe a
 hush (Right a) = Just a
@@ -67,7 +66,7 @@
   withStrategicToFinal @IO do
     m' <- runS (runStopAsExcFinal sem)
     s <- getInitialStateS
-    pure $ either ((<$ s) . Left . unStopExc) (fmap Right) <$> try m'
+    pure $ either ((<$ s) . Left . unStopExc) (fmap Right) <$> Base.try m'
 {-# inline stopToIOFinal #-}
 
 -- |Stop if the argument is 'Left', transforming the error with @f@.
diff --git a/lib/Prelude.hs b/lib/Prelude.hs
deleted file mode 100644
--- a/lib/Prelude.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Prelude (
-  module Polysemy.Resume.Prelude,
-) where
-
-import Polysemy.Resume.Prelude
diff --git a/polysemy-resume.cabal b/polysemy-resume.cabal
--- a/polysemy-resume.cabal
+++ b/polysemy-resume.cabal
@@ -1,11 +1,11 @@
 cabal-version: 2.2
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.34.6.
 --
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-resume
-version:        0.2.0.0
+version:        0.3.0.0
 synopsis:       Polysemy error tracking
 description:    Please see the readme on Github at <https://github.com/tek/polysemy-resume>
 category:       Experimental
@@ -24,15 +24,9 @@
       Polysemy.Resume
       Polysemy.Resume.Data.Resumable
       Polysemy.Resume.Data.Stop
-      Polysemy.Resume.Prelude
       Polysemy.Resume.Resumable
       Polysemy.Resume.Resume
       Polysemy.Resume.Stop
-  other-modules:
-      Prelude
-      Paths_polysemy_resume
-  autogen-modules:
-      Paths_polysemy_resume
   hs-source-dirs:
       lib
   default-extensions:
@@ -96,8 +90,8 @@
   ghc-options: -flate-specialise -fspecialise-aggressively -Wall
   build-depends:
       base ==4.*
-    , polysemy >=1.5
-    , relude >=0.7
+    , incipit-core >=0.1
+    , polysemy >=1.6
     , transformers
   mixins:
       base hiding (Prelude)
@@ -109,7 +103,6 @@
   other-modules:
       Polysemy.Resume.ExampleTest
       Polysemy.Resume.HigherOrderTest
-      Paths_polysemy_resume
   hs-source-dirs:
       test
   default-extensions:
@@ -170,19 +163,19 @@
       UndecidableInstances
       UnicodeSyntax
       ViewPatterns
-  ghc-options: -flate-specialise -fspecialise-aggressively -Wall -threaded -rtsopts -with-rtsopts=-N -fplugin=Polysemy.Plugin
+  ghc-options: -flate-specialise -fspecialise-aggressively -Wall -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       base ==4.*
     , hedgehog
+    , incipit-core
     , polysemy
     , polysemy-plugin
     , polysemy-resume
     , polysemy-test
+    , stm
     , tasty
     , tasty-hedgehog
     , text
   mixins:
       base hiding (Prelude)
-    , polysemy-resume hiding (Prelude)
-    , polysemy-resume (Polysemy.Resume.Prelude as Prelude)
   default-language: Haskell2010
diff --git a/test/Polysemy/Resume/ExampleTest.hs b/test/Polysemy/Resume/ExampleTest.hs
--- a/test/Polysemy/Resume/ExampleTest.hs
+++ b/test/Polysemy/Resume/ExampleTest.hs
@@ -1,9 +1,9 @@
+{-# options_ghc -fplugin=Polysemy.Plugin #-}
+
 module Polysemy.Resume.ExampleTest where
 
-import Polysemy (interpret, makeSem)
 import Polysemy.Test (UnitTest, assertRight, runTestAuto, (===))
 
-import Polysemy.Error (runError)
 import Polysemy.Resume (Stop, resumable, resumableFor, resume, stop, type (!!))
 
 data Stopper :: Effect where
diff --git a/test/Polysemy/Resume/HigherOrderTest.hs b/test/Polysemy/Resume/HigherOrderTest.hs
--- a/test/Polysemy/Resume/HigherOrderTest.hs
+++ b/test/Polysemy/Resume/HigherOrderTest.hs
@@ -1,22 +1,14 @@
-{-# options_ghc -Wno-all #-}
+{-# options_ghc -fplugin=Polysemy.Plugin #-}
 
 module Polysemy.Resume.HigherOrderTest where
 
-import Polysemy (makeSem, pureT, raise, raiseUnder, runT)
-import Polysemy.AtomicState (
-  AtomicState,
-  atomicModify,
-  runAtomicStateTVar,
-  )
-import Polysemy.Resource (Resource, finally)
-import Polysemy.Resume (type (!!))
-import Polysemy.Resume.Data.Stop (stop)
-import Polysemy.Resume.Resumable (interpretResumable, interpretResumableH)
-import Polysemy.Resume.Resume (restop, resume)
+import Control.Concurrent.STM (newTVarIO, readTVarIO)
 import Polysemy.Test (UnitTest, runTestAuto, (===))
 
-import Polysemy.Resume.Data.Stop (Stop)
-import Polysemy.Resume.Stop (stopNote)
+import Polysemy.Resume (type (!!))
+import Polysemy.Resume.Data.Stop (stop)
+import Polysemy.Resume.Resumable (interpretResumableH)
+import Polysemy.Resume.Resume (resume)
 
 data Eff :: Effect where
   Nest :: m a -> Eff m a
@@ -66,9 +58,9 @@
 test_switchInterpreter :: UnitTest
 test_switchInterpreter =
   runTestAuto do
-    tv <- newTVarIO 0
+    tv <- embed (newTVarIO 0)
     (2 ===) =<< runAtomicStateTVar tv (interpretEffFinally (resume (nest (result >> result)) \ _ -> pure 3))
-    (1 ===) =<< readTVarIO tv
+    (1 ===) =<< embed (readTVarIO tv)
     (3 ===) =<< interpretEff (resume (nest (nest result)) \ _ -> pure 3)
     (1 ===) =<< interpretEff (resume result \ _ -> pure 3)
     -- (2 ===) =<< interpretEff (interpretOff (resume off \ _ -> pure 3))
