diff --git a/c-src/Fl_DeviceC.cpp b/c-src/Fl_DeviceC.cpp
--- a/c-src/Fl_DeviceC.cpp
+++ b/c-src/Fl_DeviceC.cpp
@@ -49,12 +49,6 @@
 FL_EXPORT_C(void,Fl_Surface_Device_set_current)(fl_Surface_Device surface_device){
  return (static_cast<Fl_Surface_Device*>(surface_device))->set_current();
 }
-FL_EXPORT_C(void,Fl_Surface_Device_set_driver)(fl_Surface_Device surface_device,fl_Graphics_Driver graphics_driver){
-  return (static_cast<Fl_Surface_Device*>(surface_device))->driver((static_cast<Fl_Graphics_Driver*>(graphics_driver)));
-}
-FL_EXPORT_C(fl_Graphics_Driver,Fl_Surface_Device_driver)(fl_Surface_Device surface_device){
- return (fl_Graphics_Driver)(static_cast<Fl_Surface_Device*>(surface_device))->driver();
-}
 FL_EXPORT_C(fl_Surface_Device,Fl_Surface_Device_surface)(){
   return (fl_Surface_Device)Fl_Surface_Device::surface();
 }
diff --git a/c-src/Fl_DeviceC.h b/c-src/Fl_DeviceC.h
--- a/c-src/Fl_DeviceC.h
+++ b/c-src/Fl_DeviceC.h
@@ -28,8 +28,6 @@
 
   // Fl_Surface_Device
   FL_EXPORT_C_HEADER(void,Fl_Surface_Device_set_current,(fl_Surface_Device surface_device));
-  FL_EXPORT_C_HEADER(void,Fl_Surface_Device_set_driver,(fl_Surface_Device surface_device,fl_Graphics_Driver graphics_driver));
-  FL_EXPORT_C_HEADER(fl_Graphics_Driver,Fl_Surface_Device_driver,(fl_Surface_Device surface_device));
   FL_EXPORT_C_HEADER(fl_Surface_Device,Fl_Surface_Device_surface,());
   FL_EXPORT_C_HEADER(void,Fl_Surface_Device_Destroy,(fl_Surface_Device surface_device));
 #ifdef __cplusplus
diff --git a/c-src/Fl_Paged_DeviceC.cpp b/c-src/Fl_Paged_DeviceC.cpp
--- a/c-src/Fl_Paged_DeviceC.cpp
+++ b/c-src/Fl_Paged_DeviceC.cpp
@@ -5,12 +5,6 @@
   FL_EXPORT_C(void,Fl_Paged_Device_set_current)(fl_Paged_Device paged_device){
     return (static_cast<Fl_Paged_Device*>(paged_device))->set_current();
   }
-  FL_EXPORT_C(void,Fl_Paged_Device_set_driver)(fl_Paged_Device paged_device,fl_Graphics_Driver graphics_driver){
-    return (static_cast<Fl_Paged_Device*>(paged_device))->driver((static_cast<Fl_Graphics_Driver*>(graphics_driver)));
-  }
-  FL_EXPORT_C(fl_Graphics_Driver,Fl_Paged_Device_driver)(fl_Paged_Device paged_device){
-    return (fl_Graphics_Driver)(static_cast<Fl_Paged_Device*>(paged_device))->driver();
-  }
   FL_EXPORT_C(fl_Surface_Device,Fl_Paged_Device_surface)(){
     return (fl_Surface_Device)Fl_Surface_Device::surface();
   }
diff --git a/c-src/Fl_Paged_DeviceC.h b/c-src/Fl_Paged_DeviceC.h
--- a/c-src/Fl_Paged_DeviceC.h
+++ b/c-src/Fl_Paged_DeviceC.h
@@ -11,8 +11,6 @@
 #endif
   // Inherited from Fl_Surface_Driver
   FL_EXPORT_C_HEADER(void,Fl_Paged_Device_set_current,(fl_Paged_Device paged_device));
-  FL_EXPORT_C_HEADER(void,Fl_Paged_Device_set_driver,(fl_Paged_Device paged_device,fl_Graphics_Driver graphics_driver));
-  FL_EXPORT_C_HEADER(fl_Graphics_Driver,Fl_Paged_Device_driver,(fl_Paged_Device paged_device));
   FL_EXPORT_C_HEADER(fl_Surface_Device,Fl_Paged_Device_surface,());
   // Fl_Paged_Device specific
   FL_EXPORT_C_HEADER(int,Fl_Paged_Device_start_job,(fl_Paged_Device paged_device,int pagecount));
diff --git a/fltk-master.zip b/fltk-master.zip
# file too large to diff: fltk-master.zip
diff --git a/fltkhs.cabal b/fltkhs.cabal
--- a/fltkhs.cabal
+++ b/fltkhs.cabal
@@ -1,5 +1,5 @@
 name : fltkhs
-version : 0.8.0.1
+version : 0.8.0.2
 synopsis : FLTK bindings
 description: Low level bindings for the FLTK GUI toolkit. For installation and quick start instruction please scroll all the way down to the README.
 license : MIT
diff --git a/src/Graphics/UI/FLTK/LowLevel/FL.chs b/src/Graphics/UI/FLTK/LowLevel/FL.chs
--- a/src/Graphics/UI/FLTK/LowLevel/FL.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/FL.chs
@@ -222,6 +222,7 @@
 import qualified Data.Text.Foreign as TF
 import qualified System.IO.Unsafe as Unsafe (unsafePerformIO)
 import Control.Exception(catch, throw, AsyncException(UserInterrupt))
+import Control.Monad(forever)
 #c
  enum Option {
    OptionArrowFocus = OPTION_ARROW_FOCUS,
@@ -1102,11 +1103,14 @@
   flush
   w <- firstWindow
   case w of
-    Just w' ->
-      catch (waitFor 0 >> replRun)
+    Just _ ->
+      catch (forever (waitFor 0.01))
             (\e -> if (e == UserInterrupt)
                    then do
-                     allToplevelWindows [] (Just w') >>= mapM_ deleteWidget
+                     wM <- firstWindow
+                     case wM of
+                       Just w' -> allToplevelWindows [] (Just w') >>= mapM_ deleteWidget
+                       Nothing -> return ()
                      flush
                    else throw e)
     Nothing -> return ()
