diff --git a/monad-finally.cabal b/monad-finally.cabal
--- a/monad-finally.cabal
+++ b/monad-finally.cabal
@@ -1,5 +1,5 @@
 Name: monad-finally
-Version: 0.1.1
+Version: 0.1.2
 Category: Control
 Stability: experimental
 Synopsis: Guard monadic computations with cleanup actions
@@ -35,10 +35,10 @@
 Library
   Build-Depends: base >= 4.4 && < 5
   Build-Depends: transformers        >= 0.2
-               , transformers-compat >= 0.5
+               , transformers-compat >= 0.6.1
                , transformers-base   >= 0.4
                , transformers-abort  >= 0.6
-               , monad-abort-fd      >= 0.6
+               , monad-abort-fd      >= 0.6.2
                , monad-control       >= 1.0
   Hs-Source-Dirs: src
   GHC-Options: -Wall
diff --git a/src/Control/Monad/Finally.hs b/src/Control/Monad/Finally.hs
--- a/src/Control/Monad/Finally.hs
+++ b/src/Control/Monad/Finally.hs
@@ -34,6 +34,7 @@
 import qualified Control.Monad.Trans.Writer.Strict as SW
 import qualified Control.Monad.Trans.RWS.Lazy as L
 import qualified Control.Monad.Trans.RWS.Strict as S
+import Control.Monad.Trans.Accum
 import Control.Monad.Trans.Abort
 import Control.Monad.Trans.Finish
 import qualified Control.Exception as E
@@ -255,6 +256,21 @@
                   Nothing → S.runRWST (release ar Nothing) r s')
                (\(ar, s', aw) → S.runRWST (S.tell aw >> m ar) r s')
     return ((mr, fr), s''', w `mappend` w')
+
+instance (MonadFinally μ, Monoid w) ⇒ MonadFinally (AccumT w μ) where
+  finally' m f = AccumT $ \w → do
+    ~(~(mr, _), ~(fr, w'')) ← finally' (runAccumT m w) $ \case
+      Just ~(a, w') → runAccumT (f $ Just a) w'
+      Nothing       → runAccumT (f Nothing) w
+    return ((mr, fr), w'')
+  bracket' acquire release m = AccumT $ \w → do
+    ~(~(mr, _), ~(fr, w''')) ←
+      bracket' (runAccumT acquire w)
+               (\ ~(ar, w') → \case
+                  Just ~(mr, w'') → runAccumT (release ar (Just mr)) w''
+                  Nothing → runAccumT (release ar Nothing) w')
+               (\ ~(ar, w') → runAccumT (m ar) w')
+    return ((mr, fr), w''')
 
 -- | Run the provided list of cleanup actions sequentually, attempting to run
 -- the next action even if the previous one did not produce a result.
