diff --git a/checked-exceptions.cabal b/checked-exceptions.cabal
--- a/checked-exceptions.cabal
+++ b/checked-exceptions.cabal
@@ -4,7 +4,7 @@
 -- http://haskell.org/cabal/users-guide/
 
 name: checked-exceptions
-version: 0.1.0.1
+version: 0.2.0.0
 synopsis: mtl-style checked exceptions
 description: A monad transformer that allows you to throw and catch a restricted set of exceptions, tracked at the type level.
 -- bug-reports:
@@ -39,7 +39,8 @@
       base >=4.12.0.0 && < 5
     , mtl >= 2.0.0.0 && < 3.0.0.0
     , constraints >= 0.14 && < 0.15
-    --
+    , exceptions >= 0.10 && < 0.11
+    -- typechecker plugin dependencies
     , ghc >=8.6.5 && <10
     , ghc-tcplugins-extra >= 0.4 && < 0.6
   hs-source-dirs: lib
diff --git a/lib/Control/Monad/CheckedExcept.hs b/lib/Control/Monad/CheckedExcept.hs
--- a/lib/Control/Monad/CheckedExcept.hs
+++ b/lib/Control/Monad/CheckedExcept.hs
@@ -54,7 +54,7 @@
   ) where
 
 import Data.Functor ((<&>))
-import Control.Exception (Exception(..), catch, SomeException)
+import Control.Exception (Exception(..), SomeException)
 import Control.Monad.Except
 import Data.Functor.Identity
 import Data.Kind
@@ -63,9 +63,10 @@
 import Data.Constraint
 import Data.Typeable (Typeable, cast, eqT)
 import Data.Type.Equality
-import Control.Monad.IO.Class (MonadIO (liftIO))
+import Control.Monad.IO.Class (MonadIO)
 import Control.Monad.Trans (MonadTrans (..))
 import Data.Constraint.Unsafe (unsafeCoerceConstraint)
+import Control.Monad.Catch (MonadCatch (..))
 
 -- | Isomorphic to t'ExceptT' over our open-union exceptions type @t'OneOf' es@.
 -- Because many effects systems have an t'ExceptT' analogue, this would be pretty simple to port to any effects system.
@@ -186,7 +187,7 @@
 applyAll :: (forall e. CheckedException e => e -> b) -> OneOf es -> b
 applyAll f (OneOf e) = f e
 
--- | Catch an exception or @mempty@ (think 'pure ()' or 'Nothing').
+-- | Catch an exception or @mempty@ (think @pure ()@ or @Nothing@).
 withOneOf :: (Elem e es, Monoid a, CheckedException e) => OneOf es -> (e -> a) -> a
 withOneOf e f = case fromOneOf e of
   Just x -> f x
@@ -219,8 +220,8 @@
   Elem' x (x ': xs) = 'True
   Elem' x (y ': xs) = Elem' x xs
 
+-- TODO: Sometimes causes weird type errors when it doesn't propagate correctly.
 -- | @ type Elem x xs = Elem' x xs ~ 'True @
--- Sometimes causes weird type errors when it doesn't propagate correctly.
 type family Elem x xs :: Constraint where
   Elem x xs =
     If (Elem' x xs)
@@ -262,9 +263,9 @@
 
 -- | Add 'SomeException' to the exceptions set. Preferably, call this before catching the checked
 -- exceptions so there are no surprising exceptions.
-catchSomeException :: (Monad m, MonadIO m) => Elem SomeException es => CheckedExceptT es m ()
-catchSomeException = do
-  me <- lift $ liftIO $ catch (pure Nothing) (pure . Just)
+catchSomeException :: (Monad m, MonadCatch m, Elem SomeException es) => CheckedExceptT es m a -> CheckedExceptT es m a
+catchSomeException ce = do
+  me <- lift $ catch (Right <$> runCheckedExceptT ce) (pure . Left)
   case me of
-    Nothing -> pure ()
-    Just e -> throwCheckedException (e :: SomeException)
+    Right a -> CheckedExceptT $ pure a
+    Left e -> throwCheckedException (e :: SomeException)
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -15,8 +15,11 @@
 module Main where
 
 import Test.Tasty
--- import Test.Tasty.HUnit
--- import Control.Monad.CheckedExcept
+import Test.Tasty.HUnit
+import CompTest
+import Control.Exception (try, SomeException(..))
+import Control.Monad.CheckedExcept
+import Data.Either (isRight)
 
 main :: IO ()
 main = defaultMain tests
@@ -26,7 +29,9 @@
 
 unitTests :: TestTree
 unitTests = testGroup "Unit tests"
-  [
+  [ testCase "testCE" $ do
+      testCERes <- try @SomeException $ runCheckedExceptT $ runCheckedExceptStack testCE
+      assertBool "testCE does not throw SomeException" (isRight testCERes)
   ]
 
 unwrap :: Either a b -> b
