diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 0.7.1
+* Relaxed the dependency on "monad-control"
+
 # 0.7.0 - Refinements and minor updates
 * Streaming now is parameterized by the size of a chunk
 * Introduced a new type `Ex`
diff --git a/hasql.cabal b/hasql.cabal
--- a/hasql.cabal
+++ b/hasql.cabal
@@ -1,7 +1,7 @@
 name:
   hasql
 version:
-  0.7.0
+  0.7.1
 synopsis:
   A minimalistic general high level API for relational databases
 description:
@@ -109,7 +109,7 @@
     list-t >= 0.3.1 && < 0.5,
     mmorph == 1.0.*,
     mtl >= 2.1 && < 2.3,
-    monad-control == 1.0.*,
+    monad-control >= 0.3 && < 1.1,
     transformers-base == 0.4.*,
     transformers >= 0.3 && < 0.5,
     base-prelude >= 0.1.3 && < 0.2,
diff --git a/library/Hasql.hs b/library/Hasql.hs
--- a/library/Hasql.hs
+++ b/library/Hasql.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE UndecidableInstances, CPP #-}
 -- |
 -- This is the API of the \"hasql\" library.
 -- For an introduction to the package 
@@ -161,6 +161,16 @@
 instance MonadTrans (Session c) where
   lift = Session . lift . lift
 
+deriving instance MonadBase IO m => MonadBase IO (Session c m)
+
+instance MFunctor (Session c) where
+  hoist f (Session m) = 
+    Session $ ReaderT $ \e ->
+      EitherT $ f $ runEitherT $ flip runReaderT e $ m
+
+
+#if MIN_VERSION_monad_control(1,0,0)
+
 instance MonadTransControl (Session c) where
   type StT (Session c) a = Either (SessionError c) a
   liftWith onUnlift =
@@ -170,17 +180,32 @@
   restoreT = 
     Session . ReaderT . const . EitherT
 
-deriving instance MonadBase IO m => MonadBase IO (Session c m)
-
 instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where
   type StM (Session c m) a = ComposeSt (Session c) m a
   liftBaseWith = defaultLiftBaseWith
   restoreM = defaultRestoreM
 
-instance MFunctor (Session c) where
-  hoist f (Session m) = 
-    Session $ ReaderT $ \e ->
-      EitherT $ f $ runEitherT $ flip runReaderT e $ m
+#else
+
+instance MonadTransControl (Session c) where
+  newtype StT (Session c) a = 
+    SessionStT (Either (SessionError c) a)
+  liftWith onUnlift =
+    Session $ ReaderT $ \e -> 
+      lift $ onUnlift $ \(Session m) -> 
+        liftM SessionStT $ runEitherT $ flip runReaderT e $ m
+  restoreT = 
+    Session . ReaderT . const . EitherT . liftM (\(SessionStT a) -> a)
+
+instance (MonadBaseControl IO m) => MonadBaseControl IO (Session c m) where
+  newtype StM (Session c m) a = 
+    SessionStM (ComposeSt (Session c) m a)
+  liftBaseWith = 
+    defaultLiftBaseWith SessionStM
+  restoreM = 
+    defaultRestoreM $ \(SessionStM a) -> a
+   
+#endif
 
 -- |
 -- Execute a session using an established connection pool.
