diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp
index 465734911fa661a7347cc311f81573e4f54e3cdb..a5a7cf804eb4f1421cd898d9fdcb08e78026a604 100644
--- a/Fltk/FlGui.cpp
+++ b/Fltk/FlGui.cpp
@@ -198,9 +198,39 @@ static void gamepad_handler(void *data)
   }
 }
 
+static void error_handler(const char *fmt, ...)
+{
+  char str[5000];
+  va_list args;
+  va_start(args, fmt);
+  vsnprintf(str, sizeof(str), fmt, args);
+  va_end(args);
+  if(!strcmp(str, "Insufficient GL support")){ // this should be fatal
+    CTX::instance()->terminal = 1;
+    Msg::Error("%s (FLTK internal error)", str);
+    Msg::Fatal("Your system does not seem to support OpenGL - aborting");
+  }
+  else{
+    Msg::Error("%s (FLTK internal error)", str);
+  }
+}
+
+static void fatal_error_handler(const char *fmt, ...)
+{
+  char str[5000];
+  va_list args;
+  va_start(args, fmt);
+  vsnprintf(str, sizeof(str), fmt, args);
+  va_end(args);
+  CTX::instance()->terminal = 1;
+  Msg::Fatal("%s (FLTK internal error)", str);
+}
 
 FlGui::FlGui(int argc, char **argv)
 {
+  Fl::error = error_handler;
+  Fl::fatal = fatal_error_handler;
+
   // set X display
   if(CTX::instance()->display.size())
     Fl::display(CTX::instance()->display.c_str());