diff --git a/fltkhs.cabal b/fltkhs.cabal
--- a/fltkhs.cabal
+++ b/fltkhs.cabal
@@ -1,5 +1,5 @@
 name : fltkhs
-version : 0.5.3.0
+version : 0.5.3.1
 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_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
@@ -28,6 +28,7 @@
      kb_CommandState, kb_ControlState, kb_KpLast,
      -- * Widget damage types
      Damage(..),
+     allDamages,
      -- * Cursor type
      Cursor(..),
      -- * Various modes
@@ -523,8 +524,20 @@
 #endif
 kb_KpLast :: SpecialKey
 kb_KpLast = Kb_F
-{#enum Damage {} deriving (Show) #}
-{#enum Cursor {} deriving (Show) #}
+{#enum Damage {} deriving (Show, Eq, Ord) #}
+allDamages :: [Damage]
+allDamages =
+  [
+   DamageChild
+   , DamageExpose
+   , DamageScroll
+   , DamageOverlay
+   , DamageUser1
+   , DamageUser2
+   , DamageAll
+  ]
+
+{#enum Cursor {} deriving (Show, Eq, Ord) #}
 {#enum Mode   {} deriving (Show,Eq,Ord) #}
 -- Fl_Mode Aliases
 single :: Mode
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
@@ -173,14 +173,14 @@
          redrawLabel,
          GetDamage,
          getDamage,
-         ClearDamageWithBitmask,
-         clearDamageWithBitmask,
+         ClearDamageExcept,
+         clearDamageExcept,
          ClearDamage,
          clearDamage,
-         GetDamageWithText,
-         getDamageWithText,
-         GetDamageInsideWidget,
-         getDamageInsideWidget,
+         SetDamage,
+         setDamage,
+         SetDamageInside,
+         setDamageInside,
          MeasureLabel,
          measureLabel,
          GetWindow,
@@ -1653,10 +1653,10 @@
   (Redraw
   (RedrawLabel
   (GetDamage
-  (ClearDamageWithBitmask
+  (ClearDamageExcept
   (ClearDamage
-  (GetDamageWithText
-  (GetDamageInsideWidget
+  (SetDamage
+  (SetDamageInside
   (MeasureLabel
   (GetWindow
   (GetTopWindow
@@ -1743,10 +1743,10 @@
 MAKE_METHOD(Redraw,redraw)
 MAKE_METHOD(RedrawLabel,redrawLabel)
 MAKE_METHOD(GetDamage,getDamage)
-MAKE_METHOD(ClearDamageWithBitmask,clearDamageWithBitmask)
+MAKE_METHOD(ClearDamageExcept,clearDamageExcept)
 MAKE_METHOD(ClearDamage,clearDamage)
-MAKE_METHOD(GetDamageWithText,getDamageWithText)
-MAKE_METHOD(GetDamageInsideWidget,getDamageInsideWidget)
+MAKE_METHOD(SetDamage,setDamage)
+MAKE_METHOD(SetDamageInside,setDamageInside)
 MAKE_METHOD(MeasureLabel,measureLabel)
 MAKE_METHOD(GetWindow,getWindow)
 MAKE_METHOD(GetTopWindow,getTopWindow)
diff --git a/src/Graphics/UI/FLTK/LowLevel/Widget.chs b/src/Graphics/UI/FLTK/LowLevel/Widget.chs
--- a/src/Graphics/UI/FLTK/LowLevel/Widget.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/Widget.chs
@@ -402,22 +402,24 @@
 instance (impl ~ (IO ())) => Op (RedrawLabel ()) Widget orig impl where
   runOp _ _ widget = withRef widget $ \widgetPtr -> redrawLabel' widgetPtr
 {# fun Fl_Widget_damage as damage' { id `Ptr ()' } -> `Word8' #}
-instance (impl ~ (IO (Word8))) => Op (GetDamage ()) Widget orig impl where
-  runOp _ _ widget = withRef widget $ \widgetPtr -> damage' widgetPtr
+instance (impl ~ (IO ([Damage]))) => Op (GetDamage ()) Widget orig impl where
+  runOp _ _ widget = withRef widget $ \widgetPtr -> do
+    d <- damage' widgetPtr
+    return (extract allDamages (fromIntegral d))
 {# fun Fl_Widget_clear_damage_with_bitmask as clearDamageWithBitmask' { id `Ptr ()',`Word8' } -> `()' supressWarningAboutRes #}
-instance (impl ~ ( Word8 ->  IO ())) => Op (ClearDamageWithBitmask ()) Widget orig impl where
-  runOp _ _ widget c = withRef widget $ \widgetPtr -> clearDamageWithBitmask' widgetPtr c
+instance (impl ~ ( [Damage] ->  IO ())) => Op (ClearDamageExcept ()) Widget orig impl where
+  runOp _ _ widget damages = withRef widget $ \widgetPtr -> clearDamageWithBitmask' widgetPtr (fromIntegral (combine damages))
 {# fun Fl_Widget_clear_damage as clearDamage' { id `Ptr ()' } -> `()' supressWarningAboutRes #}
 instance (impl ~ (IO ())) => Op (ClearDamage ()) Widget orig impl where
   runOp _ _ widget = withRef widget $ \widgetPtr -> clearDamage' widgetPtr
 {# fun Fl_Widget_damage_with_text as damageWithText' { id `Ptr ()',`Word8' } -> `()' supressWarningAboutRes #}
-instance (impl ~ ( Word8 ->  IO ())) => Op (GetDamageWithText ()) Widget orig impl where
-  runOp _ _ widget c = withRef widget $ \widgetPtr -> damageWithText' widgetPtr c
+instance (impl ~ ( [Damage] ->  IO ())) => Op (SetDamage ()) Widget orig impl where
+  runOp _ _ widget damages = withRef widget $ \widgetPtr -> damageWithText' widgetPtr (fromIntegral (combine damages))
 {# fun Fl_Widget_damage_inside_widget as damageInsideWidget' { id `Ptr ()',`Word8',`Int',`Int',`Int',`Int' } -> `()' supressWarningAboutRes #}
-instance (impl ~ ( Word8 -> Rectangle ->  IO ())) => Op (GetDamageInsideWidget ()) Widget orig impl where
-  runOp _ _ widget c rectangle = withRef widget $ \widgetPtr -> do
+instance (impl ~ ( [Damage] -> Rectangle ->  IO ())) => Op (SetDamageInside()) Widget orig impl where
+  runOp _ _ widget damages rectangle = withRef widget $ \widgetPtr -> do
     let (x_pos,y_pos,w_pos,h_pos) = fromRectangle rectangle
-    damageInsideWidget' widgetPtr c x_pos y_pos w_pos h_pos
+    damageInsideWidget' widgetPtr (fromIntegral (combine damages)) x_pos y_pos w_pos h_pos
 {# fun Fl_Widget_measure_label as measureLabel' {id `Ptr ()',alloca- `Int' peekIntConv*, alloca- `Int' peekIntConv*} -> `()' #}
 instance (impl ~ ( IO (Size))) => Op (MeasureLabel ()) Widget orig impl where
   runOp _ _ widget = withRef widget $ \widgetPtr -> measureLabel' widgetPtr >>= \(width, height) -> return $ Size (Width width) (Height height)
