diff --git a/async-extras.cabal b/async-extras.cabal
--- a/async-extras.cabal
+++ b/async-extras.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                async-extras
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            Extra Utilities for the Async Library
 -- description:         
 homepage:            http://github.com/jfischoff/async-extras
diff --git a/src/Control/Concurrent/Async/Extra.hs b/src/Control/Concurrent/Async/Extra.hs
--- a/src/Control/Concurrent/Async/Extra.hs
+++ b/src/Control/Concurrent/Async/Extra.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE RecursiveDo #-}
 {-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE RankNTypes #-}
 module Control.Concurrent.Async.Extra where
 import Control.Concurrent.Async
 import Control.Concurrent.STM
@@ -30,6 +31,32 @@
 fixAsync :: (Async a -> IO a) -> IO (Async a)
 fixAsync f = mdo 
     this <- async $ f this
+    return this
+
+-- | Like 'fixAsync' but using 'forkOS' internally.
+fixAsyncBound :: (Async a -> IO a) -> IO (Async a)
+fixAsyncBound f = mdo 
+    this <- asyncBound $ f this
+    return this
+
+-- | Like 'fixAsync' but using 'forkOn' internally.
+fixAsyncOn :: Int -> (Async a -> IO a) -> IO (Async a)
+fixAsyncOn cpu f = mdo 
+    this <- asyncOn cpu $ f this
+    return this
+
+-- | Like 'fixAsync' but using 'forkIOWithUnmask' internally.
+-- The child thread is passed a function that can be used to unmask asynchronous exceptions.
+fixAsyncWithUnmask :: (Async a -> (forall b . IO b -> IO b) -> IO a) -> IO (Async a)
+fixAsyncWithUnmask f = mdo 
+    this <- asyncWithUnmask $ f this
+    return this
+
+-- | Like 'fixAsyncOn' but using 'forkOnWithUnmask' internally.
+-- The child thread is passed a function that can be used to unmask asynchronous exceptions.
+fixAsyncOnWithUnmask :: Int -> (Async a -> (forall b . IO b -> IO b) -> IO a) -> IO (Async a)
+fixAsyncOnWithUnmask cpu f = mdo 
+    this <- asyncWithUnmask $ f this
     return this
 
 -- | Create an async that is linked to a parent. If the parent
diff --git a/src/Control/Concurrent/Async/Lifted/Extra.hs b/src/Control/Concurrent/Async/Lifted/Extra.hs
--- a/src/Control/Concurrent/Async/Lifted/Extra.hs
+++ b/src/Control/Concurrent/Async/Lifted/Extra.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE RankNTypes #-}
 module Control.Concurrent.Async.Lifted.Extra where
 import Control.Concurrent.Async.Lifted
 import Control.Concurrent.STM
@@ -40,9 +41,41 @@
 
 -- | Create an 'Async' and pass it to itself.
 fixAsync :: (MonadFix m, MonadBaseControl IO m) 
-            => (Async (StM m a) -> m a) -> m (Async (StM m a))
+         => (Async (StM m a) -> m a) -> m (Async (StM m a))
 fixAsync f = mdo 
     this <- async $ f this
+    return this
+
+-- | Like 'fixAsync' but using 'forkOS' internally.
+fixAsyncBound :: (MonadFix m, MonadBaseControl IO m) 
+              => (Async (StM m a) -> m a) -> m (Async (StM m a))
+fixAsyncBound f = mdo 
+    this <- asyncBound $ f this
+    return this
+
+-- | Like 'fixAsync' but using 'forkOn' internally.
+fixAsyncOn :: (MonadFix m, MonadBaseControl IO m) 
+           => Int -> (Async (StM m a) -> m a) -> m (Async (StM m a))
+fixAsyncOn cpu f = mdo 
+    this <- asyncOn cpu $ f this
+    return this
+
+-- | Like 'fixAsync' but using 'forkIOWithUnmask' internally.
+-- The child thread is passed a function that can be used to unmask asynchronous exceptions.
+fixAsyncWithUnmask :: (MonadFix m, MonadBaseControl IO m) 
+                   => (Async (StM m a) -> (forall b . m b -> m b) -> m a) 
+                   -> m (Async (StM m a))
+fixAsyncWithUnmask f = mdo 
+    this <- asyncWithUnmask $ f this
+    return this
+
+-- | Like 'fixAsyncOn' but using 'forkOnWithUnmask' internally.
+-- The child thread is passed a function that can be used to unmask asynchronous exceptions.
+fixAsyncOnWithUnmask :: (MonadFix m, MonadBaseControl IO m) 
+                     => Int -> (Async (StM m a) -> (forall b . m b -> m b) -> m a) 
+                     -> m (Async (StM m a))
+fixAsyncOnWithUnmask cpu f = mdo 
+    this <- asyncWithUnmask $ f this
     return this
 
 -- | Create an async that is linked to a parent. If the parent
