diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -2,6 +2,11 @@
 
 ## Unreleased changes
 
+## 0.2.0.1
+
+- [#13](https://github.com/parsonsmatt/annotated-exception/pull/13)
+    - Fixed a bug in `UnliftIO.catches` where it would infinitely recurse.
+
 ## 0.2.0.0
 
 - [#12](https://github.com/parsonsmatt/annotated-exception/pull/12)
diff --git a/annotated-exception.cabal b/annotated-exception.cabal
--- a/annotated-exception.cabal
+++ b/annotated-exception.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           annotated-exception
-version:        0.2.0.0
+version:        0.2.0.1
 synopsis:       Exceptions, with checkpoints and context.
 description:    Please see the README on Github at <https://github.com/parsonsmatt/annotated-exception#readme>
 category:       Control
@@ -47,6 +47,7 @@
   type: exitcode-stdio-1.0
   main-is: Spec.hs
   other-modules:
+      Control.Exception.Annotated.UnliftIOSpec
       Control.Exception.AnnotatedSpec
       Data.AnnotationSpec
       Paths_annotated_exception
diff --git a/src/Control/Exception/Annotated/UnliftIO.hs b/src/Control/Exception/Annotated/UnliftIO.hs
--- a/src/Control/Exception/Annotated/UnliftIO.hs
+++ b/src/Control/Exception/Annotated/UnliftIO.hs
@@ -146,4 +146,4 @@
 catches action handlers =
     withRunInIO $ \runInIO -> do
         let f (Handler k) = Handler (\e -> runInIO (k e))
-        liftIO $ catches (runInIO action) (map f handlers)
+        liftIO $ Catch.catches (runInIO action) (map f handlers)
diff --git a/test/Control/Exception/Annotated/UnliftIOSpec.hs b/test/Control/Exception/Annotated/UnliftIOSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Control/Exception/Annotated/UnliftIOSpec.hs
@@ -0,0 +1,43 @@
+module Control.Exception.Annotated.UnliftIOSpec where
+
+import Test.Hspec
+
+import Control.Exception.Annotated.UnliftIO
+import qualified Control.Exception.Safe as Safe
+import Data.Annotation
+import GHC.Stack
+
+import Data.AnnotationSpec ()
+import Control.Exception.AnnotatedSpec (TestException(..))
+import Data.Maybe
+
+asIO :: IO a -> IO a
+asIO = id
+
+spec :: Spec
+spec = do
+    describe "catch" $ do
+        describe "the right exception" $ do
+            it "works" $ asIO $ do
+                throw TestException
+                    `catch` \(AnnotatedException _ TestException) ->
+                        pure ()
+
+        describe "the wrong exception" $ do
+            it "works" $ asIO $ do
+                let
+                    action =
+                        throw (userError "oh no")
+                            `catch` \(AnnotatedException _ TestException) ->
+                                expectationFailure "Should not catch"
+                action `shouldThrow` \(AnnotatedException _ e) ->
+                    e == userError "oh no"
+
+    describe "catches" $ do
+        describe "the right exception" $ do
+            it "works" $ asIO $ do
+                throw TestException
+                    `catches`
+                        [ Handler $ \TestException ->
+                            pure ()
+                        ]
