diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014 Gabriel Gonzalez
+Copyright (c) 2014 Gabriella Gonzalez
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -8,7 +8,7 @@
     * Redistributions in binary form must reproduce the above copyright notice,
       this list of conditions and the following disclaimer in the documentation
       and/or other materials provided with the distribution.
-    * Neither the name of Gabriel Gonzalez nor the names of other contributors
+    * Neither the name of Gabriella Gonzalez nor the names of other contributors
       may be used to endorse or promote products derived from this software
       without specific prior written permission.
 
diff --git a/managed.cabal b/managed.cabal
--- a/managed.cabal
+++ b/managed.cabal
@@ -1,14 +1,22 @@
 Name: managed
-Version: 1.0.6
-Cabal-Version: >=1.8.0.2
+Version: 1.0.11
+Cabal-Version: >=1.10
 Build-Type: Simple
 License: BSD3
 License-File: LICENSE
-Copyright: 2014 Gabriel Gonzalez
-Author: Gabriel Gonzalez
-Maintainer: Gabriel439@gmail.com
-Tested-With: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2, GHC == 8.0.1
-Bug-Reports: https://github.com/Gabriel439/Haskell-Managed-Library/issues
+Copyright: 2014 Gabriella Gonzalez
+Author: Gabriella Gonzalez
+Maintainer: GenuineGabriella@gmail.com
+Tested-With:
+    GHC == 9.2.1
+    GHC == 9.0.1
+    GHC == 8.10.7
+    GHC == 8.8.4
+    GHC == 8.6.5
+    GHC == 8.4.4
+    GHC == 8.2.2
+    GHC == 8.0.2
+Bug-Reports: https://github.com/Gabriella439/managed/issues
 Synopsis: A monad for managed values
 Description: In Haskell you very often acquire values using the @with...@
   idiom using functions of type @(a -> IO r) -> IO r@.  This idiom forms a
@@ -28,17 +36,15 @@
 Category: Control
 Source-Repository head
     Type: git
-    Location: https://github.com/Gabriel439/Haskell-Managed-Library
+    Location: https://github.com/Gabriella439/managed
 
 Library
     Hs-Source-Dirs: src
     Build-Depends:
-        base              >= 4.5     && < 5  ,
-        transformers      >= 0.2.0.0 && < 0.6
-    if !impl(ghc >= 8.0)
-      Build-Depends:
-        semigroups        >= 0.16    && < 0.19
+        base              >= 4.9     && < 5  ,
+        transformers      >= 0.2.0.0 && < 0.7
     Exposed-Modules:
         Control.Monad.Managed,
         Control.Monad.Managed.Safe
     GHC-Options: -Wall
+    Default-Language: Haskell2010
diff --git a/src/Control/Monad/Managed.hs b/src/Control/Monad/Managed.hs
--- a/src/Control/Monad/Managed.hs
+++ b/src/Control/Monad/Managed.hs
@@ -99,6 +99,7 @@
     MonadManaged(..),
     managed,
     managed_,
+    defer,
     with,
     runManaged,
 
@@ -108,14 +109,10 @@
     ) where
 
 import Control.Monad.IO.Class (MonadIO(liftIO))
+import Control.Monad.Fail as MonadFail (MonadFail(..))
 import Control.Monad.Trans.Class (lift)
 
-#if MIN_VERSION_base(4,8,0)
 import Control.Applicative (liftA2)
-#else
-import Control.Applicative
-import Data.Monoid (Monoid(..))
-#endif
 
 #if !(MIN_VERSION_base(4,11,0))
 import Data.Semigroup (Semigroup(..))
@@ -153,9 +150,6 @@
         return_ (f x) )
 
 instance Monad Managed where
-    return r = Managed (\return_ ->
-        return_ r )
-
     ma >>= f = Managed (\return_ ->
         ma  >>- \a ->
         f a >>- \b ->
@@ -166,6 +160,11 @@
         a <- m
         return_ a )
 
+instance MonadFail Managed where
+    fail s = Managed (\return_ -> do
+        a <- MonadFail.fail s
+        return_ a )
+
 instance Semigroup a => Semigroup (Managed a) where
     (<>) = liftA2 (<>)
 
@@ -261,13 +260,24 @@
     using m = lift (using m)
 
 -- | Build a `Managed` value
-managed :: (forall r . (a -> IO r) -> IO r) -> Managed a
-managed = Managed
+managed :: MonadManaged m => (forall r . (a -> IO r) -> IO r) -> m a
+managed f = using (Managed f)
 
 -- | Like 'managed' but for resource-less operations.
-managed_ :: (forall r. IO r -> IO r) -> Managed ()
+managed_ :: MonadManaged m => (forall r. IO r -> IO r) -> m ()
 managed_ f = managed $ \g -> f $ g ()
 
+{-| Defer running an action until exit (via `runManaged`).
+
+For example, the following code will print \"Hello\" followed by \"Goodbye\":
+
+> runManaged $ do
+>   defer $ liftIO $ putStrLn "Goodbye"
+>   liftIO $ putStrLn "Hello"
+-}
+defer :: MonadManaged m => IO r -> m ()
+defer m = managed_ (<* m)
+
 {-| Acquire a `Managed` value
 
     This is a potentially unsafe function since it allows a resource to escape
@@ -293,7 +303,7 @@
     a value that is not a resource being managed.
 -}
 with :: Managed a -> (a -> IO r) -> IO r
-with = (>>-)
+with m = (>>-) m
 
 -- | Run a `Managed` computation, enforcing that no acquired resources leak
 runManaged :: Managed () -> IO ()
diff --git a/src/Control/Monad/Managed/Safe.hs b/src/Control/Monad/Managed/Safe.hs
--- a/src/Control/Monad/Managed/Safe.hs
+++ b/src/Control/Monad/Managed/Safe.hs
@@ -20,6 +20,7 @@
     MonadManaged(..),
     managed,
     managed_,
+    defer,
     runManaged,
 
     -- * Re-exports
@@ -29,7 +30,7 @@
 
 import Control.Monad.IO.Class (MonadIO(liftIO))
 import Control.Monad.Managed
-    (Managed, MonadManaged(..), managed, managed_, runManaged)
+    (Managed, MonadManaged(..), defer, managed, managed_, runManaged)
 
 {- $reexports
     "Control.Monad.IO.Class" re-exports 'MonadIO'
