diff --git a/Network/Wai/Handler/DevelServer.hs b/Network/Wai/Handler/DevelServer.hs
--- a/Network/Wai/Handler/DevelServer.hs
+++ b/Network/Wai/Handler/DevelServer.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE StandaloneDeriving #-}
 module Network.Wai.Handler.DevelServer
     ( run
     , runQuit
@@ -20,6 +19,10 @@
 import qualified Control.Exception as E
 import Control.Concurrent (forkIO, threadDelay)
 
+import Data.Maybe
+import Control.Monad
+import Control.Concurrent.MVar
+
 import System.Directory (getModificationTime)
 import qualified Network.Wai.Handler.Warp as Warp
 import Network.Wai.Application.Devel
@@ -40,20 +43,25 @@
 runQuit :: Int -> ModuleName -> FunctionName -> (FilePath -> IO [FilePath])
         -> IO ()
 runQuit port modu func extras = do
-    _ <- forkIO $ run port modu func extras
-    go
+    sig <- newEmptyMVar
+    _ <- forkIO $ run port modu func extras (Just sig)
+    go sig
   where
-    go = do
+    go sig = do
         x <- getLine
         case x of
             'q':_ -> putStrLn "Quitting, goodbye!"
-            _ -> go
+            'r':_ -> do
+                putStrLn "Forcing reinterpretation"
+                _ <- tryPutMVar sig ()
+                go sig
+            _ -> go sig
 
-run :: Int -> ModuleName -> FunctionName -> (FilePath -> IO [FilePath])
+run :: Int -> ModuleName -> FunctionName -> (FilePath -> IO [FilePath]) -> Maybe (MVar ())
     -> IO ()
-run port modu func extras = do
+run port modu func extras msig = do
     ah <- initAppHolder
-    _ <- forkIO $ fillApp modu func extras ah
+    _ <- forkIO $ fillApp modu func extras ah msig
     Warp.run port $ toApp ah
 
 {-
@@ -85,13 +93,14 @@
 constSE = const
 
 fillApp :: String -> String
-        -> (FilePath -> IO [FilePath]) -> AppHolder -> IO ()
-fillApp modu func dirs ah =
+        -> (FilePath -> IO [FilePath]) -> AppHolder -> Maybe (MVar ()) -> IO ()
+fillApp modu func dirs ah msig =
     go Nothing []
   where
     go prevError prevFiles = do
+        forceReload <- maybe (return False) (fmap isJust . tryTakeMVar) msig
         toReload <-
-            if null prevFiles
+            if forceReload || null prevFiles
                 then return True
                 else do
                     times <- getTimes $ map fst prevFiles
@@ -116,9 +125,8 @@
     res <- theapp modu func
     case res of
         Left err -> do
-            if show (Just err) /= show prevError
-               then putStrLn $ "Compile failed: " ++ showInterpError err
-               else return ()
+            when (show (Just err) /= show prevError) $
+               putStrLn $ "Compile failed: " ++ showInterpError err
             loadingApp' (Just $ toException err) ah
             return (Just $ toException err, [])
         Right (app, files') -> E.handle onInitErr $ do
diff --git a/wai-handler-devel.cabal b/wai-handler-devel.cabal
--- a/wai-handler-devel.cabal
+++ b/wai-handler-devel.cabal
@@ -1,5 +1,5 @@
 Name:                wai-handler-devel
-Version:             0.4.2
+Version:             0.4.3
 Synopsis:            WAI server that automatically reloads code after modification.
 Description:         This handler automatically reloads your source code upon any changes. It works by using the hint package, essentially embedding GHC inside the handler. The handler (both the executable and library) takes three arguments: the port to listen on, the module name containing the application function, and the name of the function.
                      .
