diff --git a/c-src/Fl_C.cpp b/c-src/Fl_C.cpp
--- a/c-src/Fl_C.cpp
+++ b/c-src/Fl_C.cpp
@@ -2,55 +2,55 @@
 #include "Fl_ExportMacros.h"
 #ifdef __cplusplus
 #include "Fl_C.h"
-  class C_to_Fl_Event_Dispatch {
-  public:
-    static fl_Event_Dispatch* cb;
-    static int intercept(int event, Fl_Window* window) {
-      fl_Window w = (fl_Window)window;
-      return (*cb)(event, w);
-    }
-  };
-  fl_Event_Dispatch* C_to_Fl_Event_Dispatch::cb = 0;
-  class C_to_Fl_Label_Draw_F {
-  public:
-    static fl_Label_Draw_F* cb;
-    static void intercept(const Fl_Label* label, int x, int y, int w, int h, Fl_Align align) {
-      fl_Label* l = (fl_Label*)label;
-      (*cb)(l, x, y, w, h, align);
-    }
-  };
-  fl_Label_Draw_F* C_to_Fl_Label_Draw_F::cb = 0;
-  class C_to_Fl_Label_Measure_F {
-  public:
-    static fl_Label_Measure_F* cb;
-    static void intercept(const Fl_Label* label, int& width, int& height) {
-      fl_Label* l = (fl_Label*)label;
-      int* w = &width;
-      int* h = &height;
-      (*cb)(l, w, h);
-    }
-  };
-  fl_Label_Measure_F* C_to_Fl_Label_Measure_F::cb = 0;
-  class C_to_Fl_Abort_Handler {
-  public:
-    static fl_Abort_Handler* cb;
-    static void intercept(const char* format, ...) {
-      va_list argp;
-      va_start(argp, format);
-      (*cb)(format, argp);
-      va_end(argp);
-    }
-  };
-  fl_Abort_Handler* C_to_Fl_Abort_Handler::cb = 0;
-  class C_to_Fl_Atclose_Handler {
-  public:
-    static fl_Atclose_Handler* cb;
-    static void intercept(Fl_Window* window, void* data){
-      fl_Window w = (fl_Window)window;
-      (*cb)(w,data);
-    }
-  };
-  fl_Atclose_Handler* C_to_Fl_Atclose_Handler::cb = 0;
+class C_to_Fl_Event_Dispatch {
+public:
+  static fl_Event_Dispatch* cb;
+  static int intercept(int event, Fl_Window* window) {
+    fl_Window w = (fl_Window)window;
+    return (*cb)(event, w);
+  }
+};
+fl_Event_Dispatch* C_to_Fl_Event_Dispatch::cb = 0;
+class C_to_Fl_Label_Draw_F {
+public:
+  static fl_Label_Draw_F* cb;
+  static void intercept(const Fl_Label* label, int x, int y, int w, int h, Fl_Align align) {
+    fl_Label* l = (fl_Label*)label;
+    (*cb)(l, x, y, w, h, align);
+  }
+};
+fl_Label_Draw_F* C_to_Fl_Label_Draw_F::cb = 0;
+class C_to_Fl_Label_Measure_F {
+public:
+  static fl_Label_Measure_F* cb;
+  static void intercept(const Fl_Label* label, int& width, int& height) {
+    fl_Label* l = (fl_Label*)label;
+    int* w = &width;
+    int* h = &height;
+    (*cb)(l, w, h);
+  }
+};
+fl_Label_Measure_F* C_to_Fl_Label_Measure_F::cb = 0;
+class C_to_Fl_Abort_Handler {
+public:
+  static fl_Abort_Handler* cb;
+  static void intercept(const char* format, ...) {
+    va_list argp;
+    va_start(argp, format);
+    (*cb)(format, argp);
+    va_end(argp);
+  }
+};
+fl_Abort_Handler* C_to_Fl_Abort_Handler::cb = 0;
+class C_to_Fl_Atclose_Handler {
+public:
+  static fl_Atclose_Handler* cb;
+  static void intercept(Fl_Window* window, void* data){
+    fl_Window w = (fl_Window)window;
+    (*cb)(w,data);
+  }
+};
+fl_Atclose_Handler* C_to_Fl_Atclose_Handler::cb = 0;
 EXPORT {
 #endif
   FL_EXPORT_C(int, Fl_run)(){ return Fl::run(); }
@@ -606,7 +606,7 @@
   FL_EXPORT_C(int ,Fl_reload_scheme()){
     return Fl::reload_scheme();
   };
-#if FL_API_VERSION == 10304
+#if FL_API_VERSION >= 10304
   FL_EXPORT_C(void,Fl_set_box_color)(Fl_Color c) {
     Fl::set_box_color(c);
   }
@@ -621,7 +621,7 @@
   }
   FL_EXPORT_C(int ,Fl_abi_check(int val)){
     return Fl::abi_check(val);
-      };
+  };
   FL_EXPORT_C(const char*,Fl_local_ctrl)(){
     return fl_local_ctrl;
   }
@@ -633,6 +633,12 @@
   }
   FL_EXPORT_C(const char*,Fl_local_shift)(){
     return fl_local_shift;
+  }
+  FL_EXPORT_C(void,Fl_set_use_high_res_GL)(int val){
+    Fl::use_high_res_GL(val);
+  }
+  FL_EXPORT_C(int,Fl_use_high_res_GL)(){
+    return Fl::use_high_res_GL();
   }
 #endif
 
diff --git a/c-src/Fl_C.h b/c-src/Fl_C.h
--- a/c-src/Fl_C.h
+++ b/c-src/Fl_C.h
@@ -261,7 +261,7 @@
   FL_EXPORT_C(void*             ,Fl_event_clipboard)();
   FL_EXPORT_C(const char*       ,Fl_event_clipboard_type)();
   FL_EXPORT_C(int               ,Fl_reload_scheme());
-#if FL_API_VERSION == 10304
+#if FL_API_VERSION >= 10304
   FL_EXPORT_C(void              ,Fl_set_box_color)(Fl_Color c);
   FL_EXPORT_C(Fl_Color          ,Fl_box_color)(Fl_Color c);
   FL_EXPORT_C(int               ,Fl_abi_version)();
@@ -271,6 +271,8 @@
   FL_EXPORT_C(const char*       ,Fl_local_meta)();
   FL_EXPORT_C(const char*       ,Fl_local_alt)();
   FL_EXPORT_C(const char*       ,Fl_local_shift)();
+  FL_EXPORT_C(void              ,Fl_set_use_high_res_GL)(int val);
+  FL_EXPORT_C(int               ,Fl_use_high_res_GL)();
 #endif
 #ifdef __cplusplus
 }
diff --git a/c-src/Fl_EnumerationsC.h b/c-src/Fl_EnumerationsC.h
--- a/c-src/Fl_EnumerationsC.h
+++ b/c-src/Fl_EnumerationsC.h
@@ -423,6 +423,9 @@
     FL_MULTISAMPLE      = 128,
     FL_STEREO           = 256,
     FL_FAKE_SINGLE      = 512
+#if HAVE_GL
+    , FL_OPENGL3 = 1024
+#endif
   } Fl_Mode;
 #define FL_IMAGE_WITH_ALPHA 0x40000000
 
diff --git a/c-src/Fl_Gl_WindowC.cpp b/c-src/Fl_Gl_WindowC.cpp
--- a/c-src/Fl_Gl_WindowC.cpp
+++ b/c-src/Fl_Gl_WindowC.cpp
@@ -834,6 +834,18 @@
   FL_EXPORT_C(void,Fl_Gl_Window_make_overlay_current)(fl_Gl_Window win){
     (static_cast<Fl_DerivedGl_Window*>(win))->make_overlay_current();
   }
+#if FL_API_VERSION >= 10304
+  FL_EXPORT_C(float, Fl_Gl_Window_pixels_per_unit)(fl_Gl_Window win){
+    return (static_cast<Fl_DerivedGl_Window*>(win))->pixels_per_unit();
+  }
+  FL_EXPORT_C(int, Fl_Gl_Window_pixel_h)(fl_Gl_Window win){
+    return (static_cast<Fl_DerivedGl_Window*>(win))->pixel_h();
+  }
+  FL_EXPORT_C(int, Fl_Gl_Window_pixel_w)(fl_Gl_Window win){
+    return (static_cast<Fl_DerivedGl_Window*>(win))->pixel_w();
+  }
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/c-src/Fl_Gl_WindowC.h b/c-src/Fl_Gl_WindowC.h
--- a/c-src/Fl_Gl_WindowC.h
+++ b/c-src/Fl_Gl_WindowC.h
@@ -1,6 +1,9 @@
 #ifndef __FL_GL_WINDOW_C__
 #define __FL_GL_WINDOW_C__
+#include "Fl_Types.h"
+#include "Fl_EnumerationsC.h"
 #ifdef __cplusplus
+#include "Fl_EnumerationsC.h"
 #include "FL/Fl.H"
 #include "FL/Fl_Gl_Window.H" // always include the FL/*.H headers before local headers
                           // Fl_Widget is included transitively and needed for
@@ -17,13 +20,13 @@
   FL_EXPORT_C(void,         Fl_Gl_Window_set_parent)(fl_Gl_Window win, fl_Group grp);
   FL_EXPORT_C(uchar,        Fl_Gl_Window_type)(fl_Gl_Window win);
   FL_EXPORT_C(void,         Fl_Gl_Window_set_type)(fl_Gl_Window win, uchar t);
-FL_EXPORT_C(void, Fl_Gl_Window_draw_box)(fl_Gl_Window Gl_Window);
-FL_EXPORT_C(void, Fl_Gl_Window_draw_box_with_tc)(fl_Gl_Window Gl_Window,Fl_Boxtype t, Fl_Color c);
-FL_EXPORT_C(void, Fl_Gl_Window_draw_box_with_txywhc)(fl_Gl_Window Gl_Window,Fl_Boxtype t, int x,int y,int w,int h, Fl_Color c);
-FL_EXPORT_C(void, Fl_Gl_Window_draw_backdrop)(fl_Gl_Window Gl_Window);
-FL_EXPORT_C(void, Fl_Gl_Window_draw_focus)(fl_Gl_Window Gl_Window);
-FL_EXPORT_C(void, Fl_Gl_Window_draw_focus_with_txywh)(fl_Gl_Window Gl_Window,Fl_Boxtype t, int x,int y,int w,int h);
-FL_EXPORT_C(void, Fl_Gl_Window_draw_label)(fl_Gl_Window Gl_Window);
+  FL_EXPORT_C(void, Fl_Gl_Window_draw_box)(fl_Gl_Window Gl_Window);
+  FL_EXPORT_C(void, Fl_Gl_Window_draw_box_with_tc)(fl_Gl_Window Gl_Window,Fl_Boxtype t, Fl_Color c);
+  FL_EXPORT_C(void, Fl_Gl_Window_draw_box_with_txywhc)(fl_Gl_Window Gl_Window,Fl_Boxtype t, int x,int y,int w,int h, Fl_Color c);
+  FL_EXPORT_C(void, Fl_Gl_Window_draw_backdrop)(fl_Gl_Window Gl_Window);
+  FL_EXPORT_C(void, Fl_Gl_Window_draw_focus)(fl_Gl_Window Gl_Window);
+  FL_EXPORT_C(void, Fl_Gl_Window_draw_focus_with_txywh)(fl_Gl_Window Gl_Window,Fl_Boxtype t, int x,int y,int w,int h);
+  FL_EXPORT_C(void, Fl_Gl_Window_draw_label)(fl_Gl_Window Gl_Window);
 
   FL_EXPORT_C(int,          Fl_Gl_Window_x)(fl_Gl_Window win);
   FL_EXPORT_C(int,          Fl_Gl_Window_y)(fl_Gl_Window win);
@@ -259,6 +262,11 @@
   FL_EXPORT_C(void, Fl_Gl_Window_redraw_overlay)(fl_Gl_Window win);
   FL_EXPORT_C(void, Fl_Gl_Window_hide_overlay)(fl_Gl_Window win);
   FL_EXPORT_C(void, Fl_Gl_Window_make_overlay_current)(fl_Gl_Window win);
+#if FL_API_VERSION >= 10304
+  FL_EXPORT_C(float, Fl_Gl_Window_pixels_per_unit)(fl_Gl_Window win);
+  FL_EXPORT_C(int, Fl_Gl_Window_pixel_h)(fl_Gl_Window win);
+  FL_EXPORT_C(int, Fl_Gl_Window_pixel_w)(fl_Gl_Window win);
+#endif
   FL_EXPORT_C(int,Fl_Gl_Window_handle_super)(fl_Gl_Window self, int event);
   FL_EXPORT_C(void,Fl_Gl_Window_draw_super)(fl_Gl_Window self);
   FL_EXPORT_C(fl_Group,Fl_Gl_Window_as_group_super)(fl_Gl_Window win);
diff --git a/c-src/Fl_ImageC.cpp b/c-src/Fl_ImageC.cpp
--- a/c-src/Fl_ImageC.cpp
+++ b/c-src/Fl_ImageC.cpp
@@ -147,7 +147,7 @@
   FL_EXPORT_C(void,Fl_Image_uncache)(fl_Image image){
     return (static_cast<Fl_DerivedImage*>(image))->uncache();
   }
-#if FL_API_VERSION == 10304
+#if FL_API_VERSION >= 10304
   FL_EXPORT_C(int, Fl_Image_fail)(fl_Image image){
     return (static_cast<Fl_DerivedImage*>(image))->fail();
   }
diff --git a/c-src/Fl_ImageC.h b/c-src/Fl_ImageC.h
--- a/c-src/Fl_ImageC.h
+++ b/c-src/Fl_ImageC.h
@@ -61,7 +61,7 @@
   FL_EXPORT_C(void,Fl_Image_draw_with)(fl_Image image,int X,int Y,int W,int H);
   FL_EXPORT_C(void, Fl_Image_draw)(fl_Image image,int X, int Y);
   FL_EXPORT_C(void, Fl_Image_uncache)(fl_Image image);
-#if FL_API_VERSION == 10304
+#if FL_API_VERSION >= 10304
   FL_EXPORT_C(int, Fl_Image_fail)(fl_Image image);
 #endif
 #ifdef __cplusplus
diff --git a/c-src/Fl_Menu_C.cpp b/c-src/Fl_Menu_C.cpp
--- a/c-src/Fl_Menu_C.cpp
+++ b/c-src/Fl_Menu_C.cpp
@@ -615,7 +615,7 @@
   FL_EXPORT_C(void,Fl_Menu__set_down_color)(fl_Menu_ menu_,unsigned c){
     (static_cast<Fl_DerivedMenu_*>(menu_))->down_color(c);
   }
-#if FL_API_VERSION == 10304
+#if FL_API_VERSION >= 10304
   FL_EXPORT_C(void, Fl_Menu__set_only)(fl_Menu_ menu_, fl_Menu_Item m){
     (static_cast<Fl_DerivedMenu_*>(menu_))->setonly(static_cast<Fl_Menu_Item*>(m));
   }
diff --git a/c-src/Fl_Menu_C.h b/c-src/Fl_Menu_C.h
--- a/c-src/Fl_Menu_C.h
+++ b/c-src/Fl_Menu_C.h
@@ -207,7 +207,7 @@
   FL_EXPORT_C(void, Fl_Menu__set_down_box)(fl_Menu_ menu_, Fl_Boxtype b);
   FL_EXPORT_C(Fl_Color, Fl_Menu__down_color)(fl_Menu_ menu_);
   FL_EXPORT_C(void, Fl_Menu__set_down_color)(fl_Menu_ menu_, unsigned c);
-#if FL_API_VERSION == 10304
+#if FL_API_VERSION >= 10304
   FL_EXPORT_C(void, Fl_Menu__set_only)(fl_Menu_ menu_, fl_Menu_Item m);
 #endif
 #ifdef __cplusplus
diff --git a/c-src/Fl_Types.h b/c-src/Fl_Types.h
--- a/c-src/Fl_Types.h
+++ b/c-src/Fl_Types.h
@@ -86,7 +86,7 @@
     FL_TREE_REASON_DESELECTED,
 #if FLTK_ABI_VERSION >= 10302
     FL_TREE_REASON_RESELECTED,
-#endif /*FLTK_ABI_VERSION*/
+#endif
     FL_TREE_REASON_OPENED,
     FL_TREE_REASON_CLOSED,
     FL_TREE_REASON_DRAGGED
diff --git a/fltkhs.cabal b/fltkhs.cabal
--- a/fltkhs.cabal
+++ b/fltkhs.cabal
@@ -1,5 +1,5 @@
 name : fltkhs
-version : 0.5.2.7
+version : 0.5.2.8
 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
@@ -162,7 +162,7 @@
      eventText,
      eventLength,
      eventClipboardContents,
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
      setBoxColor,
      boxColor,
      abiVersion,
@@ -172,11 +172,15 @@
      localMeta,
      localAlt,
      localShift
+#ifdef GLSUPPORT
+     , useHighResGL
+     , setUseHighResGL
 #endif
+#endif
     )
 where
 #include "Fl_C.h"
-import C2HS hiding (cFromEnum, cToBool,cToEnum)
+import C2HS hiding (cFromEnum, cToBool,cToEnum,cFromBool)
 import Data.IORef
 
 import Graphics.UI.FLTK.LowLevel.Fl_Enumerations
@@ -329,7 +333,7 @@
        { `Int' } -> `()' #}
 
 {# fun Fl_readqueue as readqueue
-       {  } -> `Ref Widget' unsafeToRef #}
+       {  } -> `Maybe (Ref Widget)' unsafeToMaybeRef #}
 {# fun Fl_add_timeout as addTimeout
        { `Double', unsafeToCallbackPrim `GlobalCallback' } -> `()' supressWarningAboutRes #}
 {# fun Fl_repeat_timeout as repeatTimeout
@@ -879,7 +883,7 @@
 releaseWidgetPointer wp = withRef wp {#call Fl_release_widget_pointer as fl_release_widget_pointer #}
 clearWidgetPointer :: (Parent a Widget) => Ref a -> IO ()
 clearWidgetPointer wp = withRef wp {#call Fl_clear_widget_pointer as fl_Clear_Widget_Pointer #}
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
 -- | Only available on FLTK version 1.3.4 and above.
 setBoxColor :: Color -> IO ()
 setBoxColor c = {#call Fl_set_box_color as fl_set_box_color #} (cFromColor c)
@@ -907,4 +911,12 @@
 -- | Only available on FLTK version 1.3.4 and above.
 localShift :: IO T.Text
 localShift = {#call Fl_local_shift as fl_local_shift #} >>= cStringToText
+#ifdef GLSUPPORT
+-- | Only available on FLTK version 1.3.4 and above if GL is enabled with 'stack build --flag fltkhs:opengl'
+useHighResGL :: IO Bool
+useHighResGL = {#call Fl_use_high_res_GL as fl_use_high_res_GL #} >>= return . cToBool
+-- | Only available on FLTK version 1.3.4 and above if GL is enabled with 'stack build --flag fltkhs:opengl'
+setUseHighResGL :: Bool -> IO ()
+setUseHighResGL use' = {#call Fl_set_use_high_res_GL as fl_set_use_high_res_GL #} (cFromBool use')
+#endif
 #endif
diff --git a/src/Graphics/UI/FLTK/LowLevel/Fl_Enumerations.chs b/src/Graphics/UI/FLTK/LowLevel/Fl_Enumerations.chs
--- a/src/Graphics/UI/FLTK/LowLevel/Fl_Enumerations.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/Fl_Enumerations.chs
@@ -12,6 +12,10 @@
      TreeConnector(..),
      TreeSelect(..),
      SearchDirection(..),
+#if FLTK_ABI_VERSION >= 10302
+     TreeItemReselectMode(..),
+     TreeItemDrawMode(..),
+#endif
      -- * Keyboard and mouse codes
      SpecialKey(..),
      allSpecialKeys,
@@ -24,6 +28,8 @@
      kb_CommandState, kb_ControlState, kb_KpLast,
      -- * Widget damage types
      Damage(..),
+     -- * Cursor type
+     Cursor(..),
 #ifdef GLSUPPORT
      -- * Glut attributes
      GlutDraw(..),
@@ -37,14 +43,12 @@
      GlutWindowProperties(..),
      GlutCursor(..),
      glutCursorFullCrossHair,
-#endif
-     -- * Cursor type
-     Cursor(..),
      -- * Various modes
      Mode(..),
      Modes(..),
      single,
      allModes,
+#endif
      -- * Alignment
      Alignments(..),
      AlignType(..),
@@ -255,6 +259,17 @@
   SearchDirectionDown = FL_Down,
   SearchDirectionUp = FL_Up
 };
+#if FLTK_ABI_VERSION >= 10302
+enum  TreeItemReselectMode{
+  TreeSelectableOnce = FL_TREE_SELECTABLE_ONCE,
+  TreeSelectableAlways = FL_TREE_SELECTABLE_ALWAYS
+};
+enum TreeItemDrawMode{
+  TreeItemDrawDefault = FL_TREE_ITEM_DRAW_DEFAULT,
+  TreeItemDrawLabelAndWidget = FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET,
+  TreeItemHeightFromWidget = FL_TREE_ITEM_HEIGHT_FROM_WIDGET
+};
+#endif
 enum SpecialKey {
   Button = FL_Button,
   Kb_Clear = FL_Clear,
@@ -485,16 +500,19 @@
 };
 enum Mode {
  ModeRGB         = FL_RGB,
+ ModeRGB8        = FL_RGB8,
  ModeIndex       = FL_INDEX,
  ModeDouble      = FL_DOUBLE,
  ModeAccum       = FL_ACCUM,
  ModeAlpha       = FL_ALPHA,
  ModeDepth       = FL_DEPTH,
  ModeStencil     = FL_STENCIL,
- ModeRGB8        = FL_RGB8,
  ModeMultisample = FL_MULTISAMPLE,
  ModeStereo      = FL_STEREO,
  ModeFakeSingle  = FL_FAKE_SINGLE
+#if FLTK_API_VERSION >= 10304
+ , ModeOpenGL3     = FL_OPENGL3
+#endif
 };
 enum AlignType {
  AlignTypeCenter          = 0,
@@ -525,7 +543,7 @@
 #if FLTK_ABI_VERSION >= 10302
 {#enum TreeItemReselectMode {} deriving (Show, Eq) #}
 {#enum TreeItemDrawMode {} deriving (Show, Eq) #}
-#endif /*FLTK_ABI_VERSION*/
+#endif
 {#enum SpecialKey {} deriving (Show, Eq) #}
 
 allShortcutSpecialKeys :: [CInt]
@@ -635,6 +653,7 @@
 kb_KpLast :: SpecialKey
 kb_KpLast = Kb_F
 {#enum Damage {} deriving (Show) #}
+{#enum Cursor {} deriving (Show) #}
 #ifdef GLSUPPORT
 -- | Only available if the 'opengl' flag is set (stack build --flag fltkhs:opengl).
 {#enum GlutDraw {} deriving (Show) #}
@@ -659,9 +678,35 @@
 -- | Only available if the 'opengl' flag is set (stack build --flag fltkhs:opengl).
 glutCursorFullCrossHair :: GlutCursor
 glutCursorFullCrossHair = GlutCursorCrosshair
-#endif
-{#enum Cursor {} deriving (Show) #}
+-- | Only available if the 'opengl' flag is set (stack build --flag fltkhs:opengl).
 {#enum Mode   {} deriving (Show,Eq,Ord) #}
+-- Fl_Mode Aliases
+-- | Only available if the 'opengl' flag is set (stack build --flag fltkhs:opengl).
+single :: Mode
+single = ModeRGB
+-- | Only available if the 'opengl' flag is set (stack build --flag fltkhs:opengl).
+newtype Modes = Modes [Mode] deriving (Show,Eq,Ord)
+-- | Only available if the 'opengl' flag is set (stack build --flag fltkhs:opengl).
+allModes :: [Mode]
+allModes =
+  [
+    ModeRGB,
+    ModeIndex,
+    ModeDouble,
+    ModeAccum,
+    ModeAlpha,
+    ModeDepth,
+    ModeStencil,
+    ModeRGB8,
+    ModeMultisample,
+    ModeStereo,
+    ModeFakeSingle
+#if FLTK_API_VERSION >= 10304
+    , ModeOpenGL3
+#endif
+  ]
+#endif /* GLSUPPORT */
+
 {#enum AlignType {} deriving (Show, Eq, Ord) #}
 newtype Alignments = Alignments [AlignType] deriving Show
 alignCenter :: Alignments
@@ -1069,27 +1114,6 @@
 numGreen = Color 8
 numBlue :: Color
 numBlue = Color 5
-
--- Fl_Mode Aliases
-
-single :: Mode
-single = ModeRGB
-newtype Modes = Modes [Mode] deriving (Show,Eq,Ord)
-allModes :: [Mode]
-allModes =
-  [
-    ModeRGB,
-    ModeIndex,
-    ModeDouble,
-    ModeAccum,
-    ModeAlpha,
-    ModeDepth,
-    ModeStencil,
-    ModeRGB8,
-    ModeMultisample,
-    ModeStereo,
-    ModeFakeSingle
-  ]
 
 -- Fl_LabelType
 
diff --git a/src/Graphics/UI/FLTK/LowLevel/Fl_Types.chs b/src/Graphics/UI/FLTK/LowLevel/Fl_Types.chs
--- a/src/Graphics/UI/FLTK/LowLevel/Fl_Types.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/Fl_Types.chs
@@ -452,13 +452,25 @@
         return (refPtr == nullPtr)
    )
 
+#ifdef CALLSTACK_AVAILABLE
+unsafeRefToPtr :: (?loc :: CallStack) => Ref a -> IO (Ptr ())
+#elif HASCALLSTACK_AVAILABLE
+unsafeRefToPtr :: HasCallStack => Ref a -> IO (Ptr ())
+#else
 unsafeRefToPtr :: Ref a -> IO (Ptr ())
+#endif
 unsafeRefToPtr (Ref fptr) =
     throwStackOnError $ do
       refPtr <- toRefPtr $ Unsafe.unsafeForeignPtrToPtr fptr
       return $ castPtr refPtr
 
+#ifdef CALLSTACK_AVAILABLE
+withRefs :: (?loc :: CallStack) => [Ref a] -> (Ptr (Ptr b) -> IO c) -> IO c
+#elif HASCALLSTACK_AVAILABLE
+withRefs :: HasCallStack => [Ref a] -> (Ptr (Ptr b) -> IO c) -> IO c
+#else
 withRefs :: [Ref a] -> (Ptr (Ptr b) -> IO c) -> IO c
+#endif
 withRefs refs f =
   throwStackOnError
   $ withForeignPtrs
@@ -486,3 +498,10 @@
 
 fromFunRef :: FunRef -> (FunPtr ())
 fromFunRef (FunRef f) = castFunPtr f
+
+refPtrEquals :: Ref a -> Ref b -> IO Bool
+refPtrEquals w1 w2 = do
+  w1Null <- isNull w1
+  w2Null <- isNull w2
+  if (w1Null || w2Null) then return False
+    else withRef w1 (\w1Ptr -> withRef w2 (\w2Ptr -> return (w1Ptr == w2Ptr)))
diff --git a/src/Graphics/UI/FLTK/LowLevel/Gl.chs b/src/Graphics/UI/FLTK/LowLevel/Gl.chs
--- a/src/Graphics/UI/FLTK/LowLevel/Gl.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/Gl.chs
@@ -42,9 +42,9 @@
 {# fun flc_gl_rectf as flcGlRectf' { `Int',`Int',`Int',`Int' } -> `()' #}
 glRectf :: Rectangle ->  IO ()
 glRectf rectangle = let (x_pos', y_pos', width', height') = fromRectangle rectangle in flcGlRectf' x_pos' y_pos' width' height'
-{# fun flc_gl_font as flcGlFont' {cFromFont `Font',`Int' } -> `()' #}
-glFont :: Font -> Int ->  IO ()
-glFont fontid size = flcGlFont' fontid size
+{# fun flc_gl_font as flcGlFont' {cFromFont `Font',`CInt' } -> `()' #}
+glFont :: Font -> FontSize ->  IO ()
+glFont fontid (FontSize size) = flcGlFont' fontid size
 
 {# fun flc_gl_width as flcGlWidth' { unsafeToCString `T.Text' } -> `Double' #}
 glWidth :: T.Text ->  IO (Double)
diff --git a/src/Graphics/UI/FLTK/LowLevel/GlWindow.chs b/src/Graphics/UI/FLTK/LowLevel/GlWindow.chs
--- a/src/Graphics/UI/FLTK/LowLevel/GlWindow.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/GlWindow.chs
@@ -158,7 +158,17 @@
 {# fun Fl_Gl_Window_make_overlay_current as makeOverlayCurrent' { id `Ptr ()' } -> `()' supressWarningAboutRes #}
 instance (impl ~ ( IO ())) => Op (MakeOverlayCurrent ()) GlWindow orig impl where
   runOp _ _ win = withRef win $ \winPtr -> makeOverlayCurrent' winPtr
-
+{# fun Fl_Gl_Window_pixels_per_unit as pixelsPerUnit' { id `Ptr ()'} -> `Float' #}
+#if FLTK_API_VERSION >= 10304
+instance (impl ~ ( IO (Float))) => Op (PixelsPerUnit ()) GlWindow orig impl where
+  runOp _ _ win = withRef win $ \winPtr -> pixelsPerUnit' winPtr
+{# fun Fl_Gl_Window_pixel_h as pixelH' { id `Ptr ()'} -> `Int' #}
+instance (impl ~ ( IO (Int))) => Op (PixelH ()) GlWindow orig impl where
+  runOp _ _ win = withRef win $ \winPtr -> pixelH' winPtr
+{# fun Fl_Gl_Window_pixel_w as pixelW' { id `Ptr ()'} -> `Int' #}
+instance (impl ~ ( IO (Int))) => Op (PixelW ()) GlWindow orig impl where
+  runOp _ _ win = withRef win $ \winPtr -> pixelW' winPtr
+#endif
 -- $GlWindowfunctions
 -- @
 -- canDo :: 'Ref' 'GlWindow' -> 'IO' ('Bool')
@@ -181,9 +191,9 @@
 --
 -- getValid :: 'Ref' 'GlWindow' -> 'IO' ('Bool')
 --
--- handle :: 'Ref' 'GlWindow' -> 'Event' -> 'IO' ('Int')
+-- handle :: 'Ref' 'GlWindow' -> 'Event' -> 'IO(Either' 'UnknownEvent' ())
 --
--- handleSuper :: 'Ref' 'GlWindow' -> 'Event' -> 'IO' ('Int')
+-- handleSuper :: 'Ref' 'GlWindow' -> 'Event' -> 'IO' ('Either' 'UnknownEvent' ())
 --
 -- hide :: 'Ref' 'GlWindow' -> 'IO' ()
 --
@@ -218,6 +228,14 @@
 -- showWidgetSuper :: 'Ref' 'GlWindow' -> 'IO' ()
 --
 -- swapBuffers :: 'Ref' 'GlWindow' -> 'IO' ()
+--
+-- Available in FLTK 1.3.4 only:
+--
+-- pixelH :: 'Ref' 'GlWindow' -> 'IO' ('Int')
+--
+-- pixelW :: 'Ref' 'GlWindow' -> 'IO' ('Int')
+--
+-- pixelsPerUnit :: 'Ref' 'GlWindow' -> 'IO' ('Float')
 -- @
 
 -- $hierarchy
diff --git a/src/Graphics/UI/FLTK/LowLevel/Hierarchy.hs b/src/Graphics/UI/FLTK/LowLevel/Hierarchy.hs
--- a/src/Graphics/UI/FLTK/LowLevel/Hierarchy.hs
+++ b/src/Graphics/UI/FLTK/LowLevel/Hierarchy.hs
@@ -863,6 +863,12 @@
          hideOverlay,
          MakeOverlayCurrent,
          makeOverlayCurrent,
+         PixelsPerUnit,
+         pixelsPerUnit,
+         PixelH,
+         pixelH,
+         PixelW,
+         pixelW,
          -- * Box
          Box,
          -- * Browser
@@ -2327,11 +2333,11 @@
   (SetDownBox
   (GetDownColor
   (SetDownColor
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
   (Setonly
 #endif
   ())))))))))))))))))))))))))))))))))))))))))))))
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
   )
 #endif
 
@@ -2460,11 +2466,11 @@
   (DrawResize
   (Draw
   (Uncache
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
   (Fail
 #endif
   ())))))))))))))
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
   )
 #endif
 
@@ -3174,7 +3180,15 @@
   (RedrawOverlay
   (HideOverlay
   (MakeOverlayCurrent
+#if FLTK_API_VERSION >= 10304
+  (PixelsPerUnit
+  (PixelH
+  (PixelW
+#endif
   ())))))))))))))))))))))))))))))
+#if FLTK_API_VERSION >= 10304
+  )))
+#endif
 
 type instance Functions GlWindow = GlWindowFuncs
 
@@ -3191,6 +3205,9 @@
 MAKE_METHOD(Ortho,ortho)
 MAKE_METHOD(HideOverlay,hideOverlay)
 MAKE_METHOD(MakeOverlayCurrent,makeOverlayCurrent)
+MAKE_METHOD(PixelsPerUnit,pixelsPerUnit)
+MAKE_METHOD(PixelH,pixelH)
+MAKE_METHOD(PixelW,pixelW)
 
 data CBox parent
 type Box = CBox Widget
diff --git a/src/Graphics/UI/FLTK/LowLevel/Image.chs b/src/Graphics/UI/FLTK/LowLevel/Image.chs
--- a/src/Graphics/UI/FLTK/LowLevel/Image.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/Image.chs
@@ -2,7 +2,7 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Graphics.UI.FLTK.LowLevel.Image
        (
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
        ImageFail(..),
 #endif
        ImageFuncs(..),
@@ -33,7 +33,7 @@
 import Graphics.UI.FLTK.LowLevel.Hierarchy
 import Graphics.UI.FLTK.LowLevel.Dispatch
 
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
 #c
 enum ImageFail {
   ImageErrNoImage = ERR_NO_IMAGE,
@@ -185,7 +185,7 @@
 instance (impl ~ ( IO ())) => Op (Uncache ()) Image orig impl where
   runOp _ _ image = withRef image $ \imagePtr -> uncache' imagePtr
 
-#if FLTK_API_VERSION == 10304
+#if FLTK_API_VERSION >= 10304
 {#fun Fl_Image_fail as fail' { id `Ptr ()'} -> `CInt' #}
 -- | Only available on FLTK version 1.3.4 and above.
 instance (impl ~ (IO (Either ImageFail ()))) => Op (Fail ()) Image orig impl where
