diff --git a/fltkhs.cabal b/fltkhs.cabal
--- a/fltkhs.cabal
+++ b/fltkhs.cabal
@@ -1,5 +1,5 @@
 name : fltkhs
-version : 0.4.0.1
+version : 0.4.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.
diff --git a/src/Graphics/UI/FLTK/LowLevel/Dispatch.hs b/src/Graphics/UI/FLTK/LowLevel/Dispatch.hs
--- a/src/Graphics/UI/FLTK/LowLevel/Dispatch.hs
+++ b/src/Graphics/UI/FLTK/LowLevel/Dispatch.hs
@@ -37,16 +37,16 @@
 -- | See 'FindOp' for more details.
 data Match a
 -- | See 'FindOp' for more details.
-data NoFunction a
+data NoFunction a b
 
 -- Test whether a given nested type contains
 -- a type
 -- eg. Same ~ Contains (w (x (y (z ())))) (y ())
 --     Different ~ Contains (w (x (y (z ())))) (a ())
 type family Contains as a where
+  Contains () (x ()) = Different
   Contains (a as) (a ()) = Same
-  Contains () x = Different
-  Contains (a as) b = Contains as b
+  Contains (a as) (b ()) = Contains as (b ())
 
 -- | @FindOp@ searches a class hierarchy for a member function (an  Op-eration)
 -- and returns the first class in the hierarchy that support it.
@@ -55,13 +55,13 @@
 -- closest ancestor to @a@ (possibly @a@) that has that function.
 --
 -- If found @r@ is @Match c@, if not found @r@ is @NoFunction b@.
-type family FindOpHelper hierarchy  (needle :: *) (found :: *) :: * where
-  FindOpHelper hierarchy needle Same = Match hierarchy
-  FindOpHelper (child ancestors) needle Different = FindOp ancestors needle
+type family FindOpHelper orig hierarchy  (needle :: *) (found :: *) :: * where
+  FindOpHelper orig hierarchy needle Same = Match hierarchy
+  FindOpHelper orig (child ancestors) needle Different = FindOp orig ancestors needle
 
-type family FindOp hierarchy (needle :: *) :: * where
-  FindOp () n = NoFunction n
-  FindOp hierarchy needle = FindOpHelper hierarchy needle (Contains (Functions hierarchy) needle)
+type family FindOp orig hierarchy (needle :: *) :: * where
+  FindOp orig () n = NoFunction n orig
+  FindOp orig hierarchy needle = FindOpHelper orig hierarchy needle (Contains (Functions hierarchy) needle)
 
 -- | Find the first "object" of the given type
 -- | in the hierarchy.
@@ -115,7 +115,7 @@
 -- what arguments it needs.
 dispatch :: forall op obj origObj impl.
             (
-              Match obj ~ FindOp origObj op,
+              Match obj ~ FindOp origObj origObj op,
               Op op obj origObj impl
             ) =>
             op -> Ref origObj -> impl
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
@@ -7,12 +7,12 @@
 #ifdef CALLSTACK_AVAILABLE
 #define MAKE_METHOD(Datatype, Method) \
 data Datatype a; \
-Method :: (?loc :: CallStack, Match r ~ FindOp a (Datatype ()), Op (Datatype ()) r a impl) => Ref a -> impl; \
+Method :: (?loc :: CallStack, Match r ~ FindOp a a (Datatype ()), Op (Datatype ()) r a impl) => Ref a -> impl; \
 Method aRef = (unsafePerformIO $ withRef aRef (\_ -> return ())) `seq` dispatch (undefined :: Datatype()) aRef
 #else
 #define MAKE_METHOD(Datatype, Method) \
 data Datatype a; \
-Method :: (Match r ~ FindOp a (Datatype ()), Op (Datatype ()) r a impl) => Ref a -> impl; \
+Method :: (Match r ~ FindOp a a (Datatype ()), Op (Datatype ()) r a impl) => Ref a -> impl; \
 Method aRef = dispatch (undefined :: Datatype ()) aRef
 #endif
 
@@ -1549,7 +1549,7 @@
 import GHC.Stack
 import System.IO.Unsafe
 #endif
-
+type instance Functions Base = ()
 data CRegion parent
 type Region = CRegion Base
 type instance Functions Region = ()
diff --git a/src/Graphics/UI/FLTK/LowLevel/RGBImage.chs b/src/Graphics/UI/FLTK/LowLevel/RGBImage.chs
--- a/src/Graphics/UI/FLTK/LowLevel/RGBImage.chs
+++ b/src/Graphics/UI/FLTK/LowLevel/RGBImage.chs
@@ -40,9 +40,9 @@
 
 checkImage :: (
                 Parent orig RGBImage,
-                Match x ~ FindOp orig (GetW ()),
+                Match x ~ FindOp orig orig (GetW ()),
                 Op (GetW ()) x orig (IO Int),
-                Match y ~ FindOp orig (Destroy ()),
+                Match y ~ FindOp orig orig (Destroy ()),
                 Op (Destroy ()) y orig (IO ())
                )
                => Ref orig -> IO (Either UnknownError (Ref orig))
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
@@ -210,10 +210,10 @@
 instance (impl ~ IO (Int)) => Op (GetH ()) Widget orig impl where
   runOp _ _ widget = withRef widget $ \widgetPtr -> h' widgetPtr
 instance (
-         Match obj ~ FindOp orig (GetX ()),
-         Match obj ~ FindOp orig (GetY ()),
-         Match obj ~ FindOp orig (GetW ()),
-         Match obj ~ FindOp orig (GetH ()),
+         Match obj ~ FindOp orig orig (GetX ()),
+         Match obj ~ FindOp orig orig (GetY ()),
+         Match obj ~ FindOp orig orig (GetW ()),
+         Match obj ~ FindOp orig orig (GetH ()),
          Op (GetX ()) obj orig (IO Int),
          Op (GetY ()) obj orig (IO Int),
          Op (GetW ()) obj orig (IO Int),
