diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 1.4.6.2
+
+monad-control 1.0
+
 ## 1.4.6
 
 Added the `Yesod.Core.Unsafe` module.
diff --git a/Yesod/Core/Handler.hs b/Yesod/Core/Handler.hs
--- a/Yesod/Core/Handler.hs
+++ b/Yesod/Core/Handler.hs
@@ -567,7 +567,7 @@
     => (IO S8.ByteString -> (S8.ByteString -> IO ()) -> m ())
     -> m a
 sendRawResponseNoConduit raw = control $ \runInIO ->
-    runInIO $ sendWaiResponse $ flip W.responseRaw fallback
+    liftIO $ throwIO $ HCWai $ flip W.responseRaw fallback
     $ \src sink -> runInIO (raw src sink) >> return ()
   where
     fallback = W.responseLBS H.status500 [("Content-Type", "text/plain")]
@@ -582,7 +582,7 @@
                 => (Source IO S8.ByteString -> Sink S8.ByteString IO () -> m ())
                 -> m a
 sendRawResponse raw = control $ \runInIO ->
-    runInIO $ sendWaiResponse $ flip W.responseRaw fallback
+    liftIO $ throwIO $ HCWai $ flip W.responseRaw fallback
     $ \src sink -> runInIO (raw (src' src) (CL.mapM_ sink)) >> return ()
   where
     fallback = W.responseLBS H.status500 [("Content-Type", "text/plain")]
diff --git a/Yesod/Core/Types.hs b/Yesod/Core/Types.hs
--- a/Yesod/Core/Types.hs
+++ b/Yesod/Core/Types.hs
@@ -396,12 +396,21 @@
 instance MonadBase b m => MonadBase b (WidgetT site m) where
     liftBase = WidgetT . const . liftBase . fmap (, mempty)
 instance MonadBaseControl b m => MonadBaseControl b (WidgetT site m) where
+#if MIN_VERSION_monad_control(1,0,0)
+    type StM (WidgetT site m) a = StM m (a, GWData (Route site))
+    liftBaseWith f = WidgetT $ \reader' ->
+        liftBaseWith $ \runInBase ->
+            liftM (\x -> (x, mempty))
+            (f $ runInBase . flip unWidgetT reader')
+    restoreM = WidgetT . const . restoreM
+#else
     data StM (WidgetT site m) a = StW (StM m (a, GWData (Route site)))
     liftBaseWith f = WidgetT $ \reader' ->
         liftBaseWith $ \runInBase ->
             liftM (\x -> (x, mempty))
             (f $ liftM StW . runInBase . flip unWidgetT reader')
     restoreM (StW base) = WidgetT $ const $ restoreM base
+#endif
 instance Monad m => MonadReader site (WidgetT site m) where
     ask = WidgetT $ \hd -> return (rheSite $ handlerEnv hd, mempty)
     local f (WidgetT g) = WidgetT $ \hd -> g hd
@@ -481,11 +490,19 @@
 -- \"Control.Monad.Trans.Resource.register\': The mutable state is being accessed
 -- after cleanup. Please contact the maintainers.\"
 instance MonadBaseControl b m => MonadBaseControl b (HandlerT site m) where
+#if MIN_VERSION_monad_control(1,0,0)
+    type StM (HandlerT site m) a = StM m a
+    liftBaseWith f = HandlerT $ \reader' ->
+        liftBaseWith $ \runInBase ->
+            f $ runInBase . (\(HandlerT r) -> r reader')
+    restoreM = HandlerT . const . restoreM
+#else
     data StM (HandlerT site m) a = StH (StM m a)
     liftBaseWith f = HandlerT $ \reader' ->
         liftBaseWith $ \runInBase ->
             f $ liftM StH . runInBase . (\(HandlerT r) -> r reader')
     restoreM (StH base) = HandlerT $ const $ restoreM base
+#endif
 
 instance MonadThrow m => MonadThrow (HandlerT site m) where
     throwM = lift . monadThrow
diff --git a/yesod-core.cabal b/yesod-core.cabal
--- a/yesod-core.cabal
+++ b/yesod-core.cabal
@@ -1,5 +1,5 @@
 name:            yesod-core
-version:         1.4.6.1
+version:         1.4.6.2
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -40,7 +40,7 @@
                    , old-locale            >= 1.0.0.2  && < 1.1
                    , containers            >= 0.2
                    , unordered-containers  >= 0.2
-                   , monad-control         >= 0.3      && < 0.4
+                   , monad-control         >= 0.3      && < 1.1
                    , transformers-base     >= 0.4
                    , cookie                >= 0.4.1    && < 0.5
                    , http-types            >= 0.7
