diff --git a/Changes b/Changes
--- a/Changes
+++ b/Changes
@@ -1,4 +1,7 @@
 
+version 0.5.0 (16 Jan 2010):
+  * Split into 2 packages OpenVG (this package) and OpenVGRaw.
+
 version 0.4.0 (13 Dec 2009):
   * LinearGradient type changed to be Vector4 VGfloat.
  
@@ -24,7 +27,8 @@
 version 0.3.0 (10 Dec 2009):
   * Changes to use the split OpenGL packages 
 
-  * Added type coercions for the Size data type (these might not be ideal).
+  * Added type coercions for the Size data type (these 
+    might not be ideal).
 
 
 version 0.2.1 (10 Dec 2009):
diff --git a/OpenVG.cabal b/OpenVG.cabal
--- a/OpenVG.cabal
+++ b/OpenVG.cabal
@@ -1,5 +1,5 @@
 name:             OpenVG
-version:          0.4.0
+version:          0.5.0
 license:          BSD3
 license-file:     LICENSE
 copyright:        Stephen Tetley <stephen.tetley@gmail.com>
@@ -11,18 +11,19 @@
   A Haskell binding for the OpenVG vector graphics API version 
   1.0.1, specifically the ShivaVG-0.2.1 implementation.
   .
-  This version (0.4.0) is NOT compatible with the Haskell Platform 
+  This version (0.5.0) is NOT compatible with the Haskell Platform 
   (2009.2.0.2) - it uses the split OpenGL packages (RAW, StateVar, 
   etc.).
   .
-  \*\* WARNING - the module @Graphics.Rendering.OpenVG.VG.Paths@ 
-  seems flawed in hindsight, as it ammalgamates the OpenVG 
-  @VGPathSegment@ and @VGPathCommand@ data types into one Haskell 
-  type. The binding is thus likely to change in the next major 
-  revision in what is perhaps the worst place. \*\*.
+  \*\* WARNING - major changes to previous version. Also 
+  significant changes likely in next revision. \*\*.
   .
   Changelog
+  0.4.0 to 0.5.0
+  . 
+  * Significantly reworked. Changed to use OpenVGRaw. 
   .
+  .
   0.3.0 to 0.4.0 
   .
   * LinearGradient type changed to be Vector4 VGfloat.
@@ -54,8 +55,8 @@
   InstallWindows.txt,
   Changes,
   README.txt,
-  examples/TestUtils.hs,
-  examples/TestVgu.hs
+  demo/VguUtils.hs,
+  demo/TestVgu.hs
 
 library
   hs-source-dirs:     src
@@ -64,16 +65,13 @@
                       GLUT      >= 2.2     && < 2.3,
                       OpenGLRaw >= 1.1.0.1 && < 2, 
                       StateVar  >= 1.0.0.0 && < 2,
-                      Tensor    >= 1.0.0.1 && < 2
-
+                      Tensor    >= 1.0.0.1 && < 2,
+                      OpenVGRaw >= 0.1.0
   
   exposed-modules:
     Graphics.Rendering.OpenVG,
-    Graphics.Rendering.OpenVG.Util.Colors,
-    Graphics.Rendering.OpenVG.Util.PathCommands,
     Graphics.Rendering.OpenVG.VG,
     Graphics.Rendering.OpenVG.VGU,
-    Graphics.Rendering.OpenVG.VG.BasicTypes,
     Graphics.Rendering.OpenVG.VG.Blending,
     Graphics.Rendering.OpenVG.VG.DrawingContext,
     Graphics.Rendering.OpenVG.VG.Extending,
@@ -87,14 +85,10 @@
     Graphics.Rendering.OpenVG.VGU.VGU
   
   other-modules:
-    Graphics.Rendering.OpenVG.VG.Constants,
     Graphics.Rendering.OpenVG.VG.Utils,
-    Graphics.Rendering.OpenVG.VG.CFunDecls,
-    Graphics.Rendering.OpenVG.VGU.CInternals,
     Graphics.Rendering.OpenVG.VGU.ErrorsInternal    
   
   extensions:
-    ForeignFunctionInterface, TypeSynonymInstances, CPP
 
   ghc-options:  -Wall 
   
diff --git a/demo/TestVgu.hs b/demo/TestVgu.hs
new file mode 100644
--- /dev/null
+++ b/demo/TestVgu.hs
@@ -0,0 +1,129 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  TestVgu
+-- Copyright   :  (c) Stephen Tetley 2008
+-- License     :  LGPL - this is a direct translation of Ivan Leben's code
+--                (test_vgu.c) so its LGPL
+--
+-- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
+-- Stability   :  highly unstable
+-- Portability :  GHC
+--
+-- Haskell translation of test_vgu from the shivavg examples
+--
+
+--------------------------------------------------------------------------------
+
+-- On Windows copy `openvg32.dll` and `glut32.dll` into this directory,
+-- then under MinGW/Msys cd to this directory and run this at the prompt:
+-- MinGW> runhaskell.exe -lopenvg32 TestVgu.hs
+
+-- You can run through GHCi, but closing the display window kills the
+-- GHCi session.
+
+-- On MacOSX runhaskell won't work, a blank window is printed and the
+-- shell effectively freezes. You will have to do a compile to see the demo:
+-- shell> ghc --make -lopenvg TestVgu.hs
+-- the run the compiled app.
+
+-- GHCi does not work either.
+
+
+module Main where
+
+import VguUtils
+
+import Graphics.Rendering.OpenVG (  
+        ArcType(..), line, polygon, roundRect, ellipse, arc,
+        destroyContextSH )
+import qualified Graphics.Rendering.OpenVG as VG        
+
+
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGfloat, VGPath )
+
+import Graphics.UI.GLUT
+
+import Control.Monad ( zipWithM_ )
+
+
+display :: [VGPath] -> IO ()
+display primitives = do
+    VG.clearColor $= white
+    sz  <- get $ windowSize
+    pos <- get $ windowPosition
+    VG.clear pos sz
+    VG.matrixMode $= VG.PathUserToSurface
+    
+    zipWithM_ fn primitives coords
+    putStrLn "display - flush..."
+    swapBuffers
+  where
+    white :: Color4 GLfloat
+    white = Color4 1.0 1.0 1.0 1.0
+    
+    coords = [(x,y) | y <- [0..2], x <- [0..2] ]
+
+    fn :: VGPath -> (VGfloat, VGfloat) -> IO ()    
+    fn a (x,y) = do 
+        VG.loadIdentity
+        VG.translate (100 + x*150) (100 + y*150)
+        VG.drawPath a [VG.StrokePath]
+
+points :: [VGfloat]
+points = [(-30),(-30),  30,(-30),  0,30]
+    
+createPrimitives :: IO [VGPath]
+createPrimitives = do 
+    line1 <- testCreatePath 
+    line line1 (-30.0) (-30.0) 30.0 30.0
+    
+    poly_open <- testCreatePath
+    polygon poly_open points True
+    
+    poly_closed <- testCreatePath
+    polygon poly_closed points False
+    
+    rect1 <- testCreatePath
+    VG.rect rect1 (-50) (-30) 100 60
+    
+    rect_round <- testCreatePath
+    roundRect rect_round  (-50) (-30) 100 60 30 30
+    
+    ellipse1 <- testCreatePath
+    ellipse ellipse1 0 0 100 60
+  
+    arc_open <- testCreatePath
+    arc arc_open  0 0  100 60  0  270  ArcOpen
+
+    arc_chord <- testCreatePath
+    arc arc_chord 0 0 100 60 0 270 ArcChord
+  
+    arc_pie  <- testCreatePath
+    arc arc_pie 0 0 100 60 0 270 ArcPie
+  
+    return [ line1, poly_open, poly_closed
+           , rect1, rect_round, ellipse1
+           , arc_open, arc_chord, arc_pie
+           ]
+
+     
+
+main :: IO ()
+main = do
+    win <- testInit (Position 0 0) (Size 500 500) title
+    prims <- createPrimitives
+    displayCallback $= display prims
+    mainLoop
+    
+    -- end
+    testDestoryPaths prims
+    destroyContextSH
+    destroyWindow win
+    
+  where
+    title =  "Haskell OpenVG: VGU Primitives test"
+
+-- testDisplay :: IO ()
+
diff --git a/demo/VguUtils.hs b/demo/VguUtils.hs
new file mode 100644
--- /dev/null
+++ b/demo/VguUtils.hs
@@ -0,0 +1,77 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  VguUtils
+-- Copyright   :  (c) Stephen Tetley 2008
+-- License     :  LGPL - this is a direct translation of Ivan Leben's code
+--                (test.c) so its LGPL.
+--
+-- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
+-- Stability   :  highly unstable
+-- Portability :  GHC
+--
+-- Helper functions
+--
+--------------------------------------------------------------------------------
+
+
+module VguUtils (
+  testCreatePath,
+  testDestoryPaths,
+  
+  testDrawString,
+  testInit
+) where
+
+import Graphics.Rendering.OpenVG hiding ( 
+        loadIdentity, lineWidth, scale, translate, matrixMode )
+import qualified Graphics.Rendering.OpenVG as VG
+
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGPath )
+
+import Graphics.UI.GLUT 
+
+
+testCreatePath :: IO VGPath
+testCreatePath = createPath VG.Float 1.0 0.0 0 0 [CapabilityAll]
+
+testDestoryPaths :: [VGPath] -> IO ()
+testDestoryPaths = mapM_ destroyPath
+
+
+testDrawString :: GLfloat -> GLfloat -> String -> IO ()
+testDrawString x y test_string = do
+    
+    blend       $= Enabled
+    blendFunc   $= (SrcAlpha, OneMinusSrcAlpha)
+    lineSmooth  $= Enabled
+    multisample $= Disabled
+    
+    matrixMode  $= (Modelview 0) -- eh?
+    preservingMatrix $ do
+        loadIdentity
+        translate (Vector3 (x+0.5) (y+0.5) 0)
+        scale k k k
+        lineWidth $= 1.0
+        renderString Roman test_string
+    
+    lineSmooth  $= Disabled
+  where
+    k :: GLfloat
+    k = 0.15
+        
+testInit :: Position -> Size -> String -> IO Window 
+testInit xy sz title = do 
+    (_progName, _args)    <- getArgsAndInitialize
+    initialDisplayMode    $= [ RGBAMode, DoubleBuffered, WithAlphaComponent,
+                               WithStencilBuffer, Multisampling ]
+    initialWindowSize     $= sz
+    initialWindowPosition $= xy
+    win <- createWindow title
+    -- ...
+    okb <- VG.createContextSH $ sz                          
+    if okb then putStrLn "testInit - okay" else error "testInit - failed"
+    return win
+   
+    
diff --git a/examples/TestUtils.hs b/examples/TestUtils.hs
deleted file mode 100644
--- a/examples/TestUtils.hs
+++ /dev/null
@@ -1,73 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  TestUtils
--- Copyright   :  (c) Stephen Tetley 2008
--- License     :  LGPL - this is a direct translation of Ivan Leben's code
---                (test.c) so its LGPL.
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  highly unstable
--- Portability :  GHC
---
--- Helper functions
---
---------------------------------------------------------------------------------
-
-
-module TestUtils (
-  testCreatePath,
-  testDestoryPaths,
-  
-  testDrawString,
-  testInit
-) where
-
-import Graphics.Rendering.OpenVG hiding ( 
-        loadIdentity, lineWidth, scale, translate, matrixMode )
-import qualified Graphics.Rendering.OpenVG as VG
-import Graphics.UI.GLUT 
-
-testCreatePath :: IO VGPath
-testCreatePath = createPath VG.Float 1.0 0.0 0 0 [CapabilityAll]
-
-testDestoryPaths :: [VGPath] -> IO ()
-testDestoryPaths = mapM_ destroyPath
-
-
-testDrawString :: GLfloat -> GLfloat -> String -> IO ()
-testDrawString x y test_string = do
-    
-    blend       $= Enabled
-    blendFunc   $= (SrcAlpha, OneMinusSrcAlpha)
-    lineSmooth  $= Enabled
-    multisample $= Disabled
-    
-    matrixMode  $= (Modelview 0) -- eh?
-    preservingMatrix $ do
-        loadIdentity
-        translate (Vector3 (x+0.5) (y+0.5) 0)
-        scale k k k
-        lineWidth $= 1.0
-        renderString Roman test_string
-    
-    lineSmooth  $= Disabled
-  where
-    k :: GLfloat
-    k = 0.15
-        
-testInit :: Position -> Size -> String -> IO Window 
-testInit xy sz title = do 
-    (_progName, _args)    <- getArgsAndInitialize
-    initialDisplayMode    $= [ RGBAMode, DoubleBuffered, WithAlphaComponent,
-                               WithStencilBuffer, Multisampling ]
-    initialWindowSize     $= sz
-    initialWindowPosition $= xy
-    win <- createWindow title
-    -- ...
-    okb <- VG.createContextSH $ sz                          
-    if okb then putStrLn "testInit - okay" else error "testInit - failed"
-    return win
-   
-    
diff --git a/examples/TestVgu.hs b/examples/TestVgu.hs
deleted file mode 100644
--- a/examples/TestVgu.hs
+++ /dev/null
@@ -1,127 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  TestVgu
--- Copyright   :  (c) Stephen Tetley 2008
--- License     :  LGPL - this is a direct translation of Ivan Leben's code
---                (test_vgu.c) so its LGPL
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  highly unstable
--- Portability :  GHC
---
--- Haskell translation of test_vgu from the shivavg examples
---
-
---------------------------------------------------------------------------------
-
--- On Windows copy `openvg32.dll` and `glut32.dll` into this directory,
--- then under MinGW/Msys cd to this directory and run this at the prompt:
--- MinGW> runhaskell.exe -lopenvg32 TestVgu.hs
-
--- You can run through GHCi, but closing the display window kills the
--- GHCi session.
-
--- On MacOSX runhaskell won't work, a blank window is printed and the
--- shell effectively freezes. You will have to do a compile to see the demo:
--- shell> ghc --make -lopenvg TestVgu.hs
--- the run the compiled app.
-
--- GHCi does not work either.
-
-
-module Main where
-
-import TestUtils
-
-import Graphics.Rendering.OpenVG ( 
-        VGPath, VGfloat, 
-        ArcType(..), line, polygon, roundRect, ellipse, arc,
-        destroyContextSH )
-import qualified Graphics.Rendering.OpenVG as VG        
-import Graphics.UI.GLUT
-
-import Control.Monad ( zipWithM_ )
-
-
-display :: [VGPath] -> IO ()
-display primitives = do
-    VG.clearColor $= white
-    sz  <- get $ windowSize
-    pos <- get $ windowPosition
-    VG.clear pos sz
-    VG.matrixMode $= VG.PathUserToSurface
-    
-    zipWithM_ fn primitives coords
-    putStrLn "display - flush..."
-    swapBuffers
-  where
-    white :: Color4 GLfloat
-    white = Color4 1.0 1.0 1.0 1.0
-    
-    coords = [(x,y) | y <- [0..2], x <- [0..2] ]
-
-    fn :: VGPath -> (VGfloat, VGfloat) -> IO ()    
-    fn a (x,y) = do 
-        VG.loadIdentity
-        VG.translate (100 + x*150) (100 + y*150)
-        VG.drawPath a [VG.StrokePath]
-
-points :: [VGfloat]
-points = [(-30),(-30),  30,(-30),  0,30]
-    
-createPrimitives :: IO [VGPath]
-createPrimitives = do 
-    line1 <- testCreatePath 
-    line line1 (-30.0) (-30.0) 30.0 30.0
-    
-    poly_open <- testCreatePath
-    polygon poly_open points True
-    
-    poly_closed <- testCreatePath
-    polygon poly_closed points False
-    
-    rect1 <- testCreatePath
-    VG.rect rect1 (-50) (-30) 100 60
-    
-    rect_round <- testCreatePath
-    roundRect rect_round  (-50) (-30) 100 60 30 30
-    
-    ellipse1 <- testCreatePath
-    ellipse ellipse1 0 0 100 60
-  
-    arc_open <- testCreatePath
-    arc arc_open  0 0  100 60  0  270  ArcOpen
-
-    arc_chord <- testCreatePath
-    arc arc_chord 0 0 100 60 0 270 ArcChord
-  
-    arc_pie  <- testCreatePath
-    arc arc_pie 0 0 100 60 0 270 ArcPie
-  
-    return [ line1, poly_open, poly_closed
-           , rect1, rect_round, ellipse1
-           , arc_open, arc_chord, arc_pie
-           ]
-
-     
-
-main :: IO ()
-main = do
-    win <- testInit (Position 0 0) (Size 500 500) title
-    prims <- createPrimitives
-    displayCallback $= display prims
-    mainLoop
-    
-    -- end
-    testDestoryPaths prims
-    destroyContextSH
-    destroyWindow win
-    
-  where
-    title =  "Haskell OpenVG: VGU Primitives test"
-
--- testDisplay :: IO ()
-
-        
diff --git a/src/Graphics/Rendering/OpenVG/Util/Colors.hs b/src/Graphics/Rendering/OpenVG/Util/Colors.hs
deleted file mode 100644
--- a/src/Graphics/Rendering/OpenVG/Util/Colors.hs
+++ /dev/null
@@ -1,633 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Graphics.Rendering.OpenVG.Util.Colors
--- Copyright   :  (c) Stephen Tetley 2009
--- License     :  BSD3
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  deprecated
--- Portability :  GHC
---
--- \*\* This module is deprecated \*\*
--- 
--- Colour definitions named with the SVG \'named colours\'.
--- 
--- If this module is /useful/ it would be better off outside the 
--- OpenVG bindings package and presented in some /higher-level/ 
--- package.
---
---
---------------------------------------------------------------------------------
-
-module Graphics.Rendering.OpenVG.Util.Colors (
-    -- * Named colours
-    aliceblue, 
-    antiquewhite,
-    aqua,
-    aquamarine,
-    azure,
-    beige,
-    bisque,
-    black,
-    blanchedalmond,
-    blue,
-    blueviolet,
-    brown,
-    burlywood,
-    cadetblue,
-    chartreuse,
-    chocolate,
-    coral,
-    cornflowerblue,
-    cornsilk,
-    crimson,
-    cyan,
-    darkblue,
-    darkcyan,
-    darkgoldenrod,
-    darkgray,
-    darkgreen,
-    darkgrey,
-    darkkhaki,
-    darkmagenta,
-    darkolivegreen,
-    darkorange,
-    darkorchid,
-    darkred,
-    darksalmon,
-    darkseagreen,
-    darkslateblue,
-    darkslategray,
-    darkslategrey,
-    darkturquoise,
-    darkviolet,
-    deeppink,
-    deepskyblue,
-    dimgray,
-    dimgrey,
-    dodgerblue,
-    firebrick,
-    floralwhite,
-    forestgreen,
-    fuchsia,
-    gainsboro,
-    ghostwhite,
-    gold,
-    goldenrod,
-    gray,
-    grey,
-    green,
-    greenyellow,
-    honeydew,
-    hotpink,
-    indianred,
-    indigo,
-    ivory,
-    khaki,
-    lavender,
-    lavenderblush,
-    lawngreen,
-    lemonchiffon,
-    lightblue,
-    lightcoral,
-    lightcyan,
-    lightgoldenrodyellow,
-    lightgray,
-    lightgreen,
-    lightgrey,
-    lightpink,
-    lightsalmon,
-    lightseagreen,
-    lightskyblue,
-    lightslategray,
-    lightslategrey,
-    lightsteelblue,
-    lightyellow,
-    lime,
-    limegreen,
-    linen,
-    magenta,
-    maroon,
-    mediumaquamarine,
-    mediumblue,
-    mediumorchid,
-    mediumpurple,
-    mediumseagreen,
-    mediumslateblue,
-    mediumspringgreen,
-    mediumturquoise,
-    mediumvioletred,
-    midnightblue,
-    mintcream,
-    mistyrose,
-    moccasin,
-    navajowhite,
-    navy,
-    oldlace,
-    olive,
-    olivedrab,
-    orange,
-    orangered,
-    orchid,
-    palegoldenrod,
-    palegreen,
-    paleturquoise,
-    palevioletred,
-    papayawhip,
-    peachpuff,
-    peru,
-    pink,
-    plum,
-    powderblue,
-    purple,
-    red,
-    rosybrown,
-    royalblue,
-    saddlebrown,
-    salmon,
-    sandybrown,
-    seagreen,
-    seashell,
-    sienna,
-    silver,
-    skyblue,
-    slateblue,
-    slategray,
-    slategrey,
-    snow,
-    springgreen,
-    steelblue,
-    tan,
-    teal,
-    thistle,
-    tomato,
-    turquoise,
-    violet,
-    wheat,
-    white,
-    whitesmoke,
-    yellow,
-    yellowgreen
-) where
-
-import Graphics.Rendering.OpenGL.GL ( 
-    Color4(..), Color3(..), GLfloat )
-
-import Prelude hiding ( tan )
-
-class RGB t where rgb :: GLfloat -> GLfloat -> GLfloat -> t GLfloat
-
-instance RGB Color4 where
-  rgb r g b = Color4 (r / 255.0) (g / 255.0) (b / 255.0) 1.0
-
-instance RGB Color3 where
-  rgb r g b = Color3 (r / 255.0) (g / 255.0) (b / 255.0)
-  
-  
-aliceblue           :: RGB c => c GLfloat
-aliceblue           = rgb 240 248 255
-
-antiquewhite        :: RGB c => c GLfloat
-antiquewhite        = rgb 250 235 215
-
-aqua                :: RGB c => c GLfloat
-aqua                = rgb 0 255 255
-
-aquamarine          :: RGB c => c GLfloat
-aquamarine          = rgb 127 255 212
-
-azure               :: RGB c => c GLfloat
-azure               = rgb 240 255 255
-
-beige               :: RGB c => c GLfloat  
-beige               = rgb 245 245 220
-
-bisque              :: RGB c => c GLfloat
-bisque              = rgb 255 228 196
-
-black               :: RGB c => c GLfloat
-black               = rgb  0 0 0
-
-blanchedalmond      :: RGB c => c GLfloat
-blanchedalmond      = rgb 255 235 205
-
-blue                :: RGB c => c GLfloat
-blue                = rgb  0 0 255
-
-blueviolet          :: RGB c => c GLfloat
-blueviolet          = rgb 138 43 226
-
-brown               :: RGB c => c GLfloat
-brown               = rgb 165 42 42
-
-burlywood           :: RGB c => c GLfloat
-burlywood           = rgb 222 184 135
-
-cadetblue           :: RGB c => c GLfloat
-cadetblue           = rgb  95 158 160
-
-chartreuse          :: RGB c => c GLfloat
-chartreuse          = rgb 127 255 0
-
-chocolate           :: RGB c => c GLfloat
-chocolate           = rgb 210 105 30
-
-coral               :: RGB c => c GLfloat
-coral               = rgb 255 127 80
-
-cornflowerblue      :: RGB c => c GLfloat
-cornflowerblue      = rgb 100 149 237
-
-cornsilk            :: RGB c => c GLfloat
-cornsilk            = rgb 255 248 220
-
-crimson             :: RGB c => c GLfloat
-crimson             = rgb 220 20 60
-
-cyan                :: RGB c => c GLfloat
-cyan                = rgb  0 255 255
-
-darkblue            :: RGB c => c GLfloat
-darkblue            = rgb  0 0 139
-
-darkcyan            :: RGB c => c GLfloat
-darkcyan            = rgb  0 139 139
-
-darkgoldenrod       :: RGB c => c GLfloat
-darkgoldenrod       = rgb 184 134 11
-
-darkgray            :: RGB c => c GLfloat
-darkgray            = rgb 169 169 169
-
-darkgreen           :: RGB c => c GLfloat
-darkgreen           = rgb  0 100 0
-
-darkgrey            :: RGB c => c GLfloat
-darkgrey            = rgb 169 169 169
-
-darkkhaki           :: RGB c => c GLfloat
-darkkhaki           = rgb 189 183 107
-
-darkmagenta         :: RGB c => c GLfloat
-darkmagenta         = rgb 139 0 139
-
-darkolivegreen      :: RGB c => c GLfloat
-darkolivegreen      = rgb  85 107 47
-
-darkorange          :: RGB c => c GLfloat
-darkorange          = rgb 255 140 0
-
-darkorchid          :: RGB c => c GLfloat
-darkorchid          = rgb 153 50 204
-
-darkred             :: RGB c => c GLfloat
-darkred             = rgb 139 0 0
-
-darksalmon          :: RGB c => c GLfloat
-darksalmon          = rgb 233 150 122
-
-darkseagreen        :: RGB c => c GLfloat
-darkseagreen        = rgb 143 188 143
-
-darkslateblue       :: RGB c => c GLfloat
-darkslateblue       = rgb  72 61 139
-
-darkslategray       :: RGB c => c GLfloat
-darkslategray       = rgb  47 79 79
-
-darkslategrey       :: RGB c => c GLfloat
-darkslategrey       = rgb  47 79 79
-
-darkturquoise       :: RGB c => c GLfloat
-darkturquoise       = rgb  0 206 209
-
-darkviolet          :: RGB c => c GLfloat
-darkviolet          = rgb 148 0 211
-
-deeppink            :: RGB c => c GLfloat
-deeppink            = rgb 255 20 147
-
-deepskyblue         :: RGB c => c GLfloat
-deepskyblue         = rgb  0 191 255
-
-dimgray             :: RGB c => c GLfloat
-dimgray             = rgb 105 105 105
-
-dimgrey             :: RGB c => c GLfloat
-dimgrey             = rgb 105 105 105
-
-dodgerblue          :: RGB c => c GLfloat
-dodgerblue          = rgb  30 144 255
-
-firebrick           :: RGB c => c GLfloat
-firebrick           = rgb 178 34 34
-
-floralwhite         :: RGB c => c GLfloat
-floralwhite         = rgb 255 250 240
-
-forestgreen         :: RGB c => c GLfloat
-forestgreen         = rgb  34 139 34
-
-fuchsia             :: RGB c => c GLfloat
-fuchsia             = rgb 255 0 255
-
-gainsboro           :: RGB c => c GLfloat
-gainsboro           = rgb 220 220 220
-
-ghostwhite          :: RGB c => c GLfloat
-ghostwhite          = rgb 248 248 255
-
-gold                :: RGB c => c GLfloat
-gold                = rgb 255 215 0
-
-goldenrod           :: RGB c => c GLfloat
-goldenrod           = rgb 218 165 32
-
-gray                :: RGB c => c GLfloat
-gray                = rgb 128 128 128
-
-grey                :: RGB c => c GLfloat
-grey                = rgb 128 128 128
-
-green               :: RGB c => c GLfloat
-green               = rgb  0 128 0
-
-greenyellow         :: RGB c => c GLfloat
-greenyellow         = rgb 173 255 47
-
-honeydew            :: RGB c => c GLfloat
-honeydew            = rgb 240 255 240
-
-hotpink             :: RGB c => c GLfloat
-hotpink             = rgb 255 105 180
-
-indianred           :: RGB c => c GLfloat
-indianred           = rgb 205 92 92
-
-indigo              :: RGB c => c GLfloat
-indigo              = rgb  75 0 130
-
-ivory               :: RGB c => c GLfloat
-ivory               = rgb 255 255 240
-
-khaki               :: RGB c => c GLfloat
-khaki               = rgb 240 230 140
-
-lavender            :: RGB c => c GLfloat
-lavender            = rgb 230 230 250
-
-lavenderblush       :: RGB c => c GLfloat
-lavenderblush       = rgb 255 240 245
-
-lawngreen           :: RGB c => c GLfloat
-lawngreen           = rgb 124 252 0
-
-lemonchiffon        :: RGB c => c GLfloat
-lemonchiffon        = rgb 255 250 205
-
-lightblue           :: RGB c => c GLfloat
-lightblue           = rgb 173 216 230
-
-lightcoral          :: RGB c => c GLfloat
-lightcoral          = rgb 240 128 128
-
-lightcyan           :: RGB c => c GLfloat
-lightcyan           = rgb 224 255 255
-
-lightgoldenrodyellow  :: RGB c => c GLfloat
-lightgoldenrodyellow  = rgb 250 250 210
-
-lightgray           :: RGB c => c GLfloat
-lightgray           = rgb 211 211 211
-
-lightgreen          :: RGB c => c GLfloat
-lightgreen          = rgb 144 238 144
-
-lightgrey           :: RGB c => c GLfloat
-lightgrey           = rgb 211 211 211
-
-lightpink           :: RGB c => c GLfloat
-lightpink           = rgb 255 182 193
-
-lightsalmon         :: RGB c => c GLfloat
-lightsalmon         = rgb 255 160 122
-
-lightseagreen       :: RGB c => c GLfloat
-lightseagreen       = rgb  32 178 170
-
-lightskyblue        :: RGB c => c GLfloat
-lightskyblue        = rgb 135 206 250
-
-lightslategray      :: RGB c => c GLfloat
-lightslategray      = rgb 119 136 153
-
-lightslategrey      :: RGB c => c GLfloat
-lightslategrey      = rgb 119 136 153
-
-lightsteelblue      :: RGB c => c GLfloat
-lightsteelblue      = rgb 176 196 222
-
-lightyellow         :: RGB c => c GLfloat
-lightyellow         = rgb 255 255 224
-
-lime                :: RGB c => c GLfloat
-lime                = rgb  0 255 0
-
-limegreen           :: RGB c => c GLfloat
-limegreen           = rgb  50 205 50
-
-linen               :: RGB c => c GLfloat
-linen               = rgb 250 240 230
-
-magenta             :: RGB c => c GLfloat
-magenta             = rgb 255 0 255
-
-maroon              :: RGB c => c GLfloat
-maroon              = rgb 128 0 0
-
-mediumaquamarine    :: RGB c => c GLfloat
-mediumaquamarine    = rgb 102 205 170
-
-mediumblue          :: RGB c => c GLfloat
-mediumblue          = rgb 0 0 205
-
-mediumorchid        :: RGB c => c GLfloat
-mediumorchid        = rgb 186 85 211
-
-mediumpurple        :: RGB c => c GLfloat
-mediumpurple        = rgb 147 112 219
-
-mediumseagreen      :: RGB c => c GLfloat
-mediumseagreen      = rgb 60 179 113
-
-mediumslateblue     :: RGB c => c GLfloat
-mediumslateblue     = rgb 123 104 238
-
-mediumspringgreen   :: RGB c => c GLfloat
-mediumspringgreen   = rgb 0 250 154
-
-mediumturquoise     :: RGB c => c GLfloat
-mediumturquoise     = rgb 72 209 204
-
-mediumvioletred     :: RGB c => c GLfloat
-mediumvioletred     = rgb 199 21 133
-
-midnightblue        :: RGB c => c GLfloat
-midnightblue        = rgb  25 25 112
-
-mintcream           :: RGB c => c GLfloat
-mintcream           = rgb 245 255 250
-
-mistyrose           :: RGB c => c GLfloat
-mistyrose           = rgb 255 228 225
-
-moccasin            :: RGB c => c GLfloat
-moccasin            = rgb 255 228 181
-
-navajowhite         :: RGB c => c GLfloat
-navajowhite         = rgb 255 222 173
-
-navy                :: RGB c => c GLfloat
-navy                = rgb  0 0 128
-
-oldlace             :: RGB c => c GLfloat
-oldlace             = rgb 253 245 230
-
-olive               :: RGB c => c GLfloat
-olive               = rgb 128 128 0
-
-olivedrab           :: RGB c => c GLfloat
-olivedrab           = rgb 107 142 35
-
-orange              :: RGB c => c GLfloat
-orange              = rgb 255 165 0
-
-orangered           :: RGB c => c GLfloat
-orangered           = rgb 255 69 0
-
-orchid              :: RGB c => c GLfloat
-orchid              = rgb 218 112 214
-
-palegoldenrod       :: RGB c => c GLfloat
-palegoldenrod       = rgb 238 232 170
-
-palegreen           :: RGB c => c GLfloat
-palegreen           = rgb 152 251 152
-
-paleturquoise       :: RGB c => c GLfloat
-paleturquoise       = rgb 175 238 238
-
-palevioletred       :: RGB c => c GLfloat
-palevioletred       = rgb 219 112 147
-
-papayawhip          :: RGB c => c GLfloat
-papayawhip          = rgb 255 239 213
-
-peachpuff           :: RGB c => c GLfloat
-peachpuff           = rgb 255 218 185
-
-peru                :: RGB c => c GLfloat
-peru                = rgb 205 133 63
-
-pink                :: RGB c => c GLfloat
-pink                = rgb 255 192 203
-
-plum                :: RGB c => c GLfloat
-plum                = rgb 221 160 221
-
-powderblue          :: RGB c => c GLfloat
-powderblue          = rgb 176 224 230
-
-purple              :: RGB c => c GLfloat
-purple              = rgb 128 0 128
-
-red                 :: RGB c => c GLfloat
-red                 = rgb 255 0 0
-
-rosybrown           :: RGB c => c GLfloat
-rosybrown           = rgb 188 143 143
-
-royalblue           :: RGB c => c GLfloat
-royalblue           = rgb  65 105 225
-
-saddlebrown         :: RGB c => c GLfloat
-saddlebrown         = rgb 139 69 19
-
-salmon              :: RGB c => c GLfloat
-salmon              = rgb 250 128 114
-
-sandybrown          :: RGB c => c GLfloat
-sandybrown          = rgb 244 164 96
-
-seagreen            :: RGB c => c GLfloat
-seagreen            = rgb  46 139 87
-
-seashell            :: RGB c => c GLfloat
-seashell            = rgb 255 245 238
-
-sienna              :: RGB c => c GLfloat
-sienna              = rgb 160 82 45
-
-silver              :: RGB c => c GLfloat
-silver              = rgb 192 192 192
-
-skyblue             :: RGB c => c GLfloat
-skyblue             = rgb 135 206 235
-
-slateblue           :: RGB c => c GLfloat
-slateblue           = rgb 106 90 205
-
-slategray           :: RGB c => c GLfloat
-slategray           = rgb 112 128 144
-
-slategrey           :: RGB c => c GLfloat
-slategrey           = rgb 112 128 144
-
-snow                :: RGB c => c GLfloat
-snow                = rgb 255 250 250
-
-springgreen         :: RGB c => c GLfloat
-springgreen         = rgb  0 255 127
-
-steelblue           :: RGB c => c GLfloat
-steelblue           = rgb  70 130 180
-
-tan                 :: RGB c => c GLfloat
-tan                 = rgb 210 180 140
-
-teal                :: RGB c => c GLfloat
-teal                = rgb  0 128 128
-
-thistle             :: RGB c => c GLfloat
-thistle             = rgb 216 191 216
-
-tomato              :: RGB c => c GLfloat
-tomato              = rgb 255 99 71
-
-turquoise           :: RGB c => c GLfloat
-turquoise           = rgb  64 224 208
-
-violet              :: RGB c => c GLfloat
-violet              = rgb 238 130 238
-
-wheat               :: RGB c => c GLfloat
-wheat               = rgb 245 222 179
-
-white               :: RGB c => c GLfloat
-white               = rgb 255 255 255
-
-whitesmoke          :: RGB c => c GLfloat
-whitesmoke          = rgb 245 245 245
-
-yellow              :: RGB c => c GLfloat
-yellow              = rgb 255 255 0
-
-yellowgreen         :: RGB c => c GLfloat
-yellowgreen         = rgb 154 205 50
-
-
-
-
-
diff --git a/src/Graphics/Rendering/OpenVG/Util/PathCommands.hs b/src/Graphics/Rendering/OpenVG/Util/PathCommands.hs
deleted file mode 100644
--- a/src/Graphics/Rendering/OpenVG/Util/PathCommands.hs
+++ /dev/null
@@ -1,182 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Graphics.Rendering.OpenVG.Util.PathCommands
--- Copyright   :  (c) Stephen Tetley 2009
--- License     :  BSD3
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  deprecated
--- Portability :  GHC
---
---
--- \*\* This module is deprecated \*\*
---
--- Path Segment shorthand commands patterned after section 8.5.2.
---
--- This module is needs more thought - currently it is a sketch 
--- to help create paths. If it becomes useful in the future it 
--- is still be better off outside the OpenVG bindings package 
--- and presented in some higher-level package.
---
-
---------------------------------------------------------------------------------
-
-module Graphics.Rendering.OpenVG.Util.PathCommands (
-  -- * Translate Path Commands
-  pathData,
-  
-  -- * Path commands
-  closePath,
-  moveAbs, moveRel,
-  lineAbs, lineRel,
-  hlineAbs, hlineRel,
-  vlineAbs, vlineRel,
-  quadraticAbs, quadraticRel,
-  cubicAbs, cubicRel,
-  smoothQuadAbs, smoothQuadRel,
-  smoothCubicAbs, smoothCubicRel,
-  smallCcwArcAbs, smallCcwArcRel,
-  smallCwArcAbs, smallCwArcRel,
-  largeCcwArcAbs, largeCcwArcRel,
-  largeCwArcAbs, largeCwArcRel,
-  
-  
-) where
-
-import Graphics.Rendering.OpenVG.VG.Paths
-
-data SegmentCommand a = 
-     CLOSE_PATH
-   | MOVE_TO    PathAbsRel a a
-   | LINE_TO    PathAbsRel a a
-   | HLINE_TO   PathAbsRel a
-   | VLINE_TO   PathAbsRel a
-   | QUAD_TO    PathAbsRel a a a a
-   | CUBIC_TO   PathAbsRel a a a a a a
-   | SQUAD_TO   PathAbsRel a a
-   | SCUBIC_TO  PathAbsRel a a a a
-   | SCCWARC_TO PathAbsRel a a a a a
-   | SCWARC_TO  PathAbsRel a a a a a
-   | LCCWARC_TO PathAbsRel a a a a a
-   | LCWARC_TO  PathAbsRel a a a a a
-   deriving ( Eq, Show )
-
-pathData :: StorablePathData a => [SegmentCommand a] -> ([PathCommand], [a])
-pathData = foldr fn ([],[]) where
-  fn :: SegmentCommand a -> ([PathCommand], [a]) -> ([PathCommand], [a])
-  fn CLOSE_PATH                     (xs,ys) = (ClosePath:xs,ys) 
-  fn (MOVE_TO t x y)                (xs,ys) 
-          | t == Absolute                   = (MoveToAbs : xs, x:y:ys)
-          | otherwise                       = (MoveToRel : xs, x:y:ys)
-  fn (LINE_TO t x y)                (xs,ys) 
-          | t == Absolute                   = (LineToAbs : xs, x:y:ys)
-          | otherwise                       = (LineToRel : xs, x:y:ys)
-  fn (HLINE_TO t x)                 (xs,ys)
-          | t == Absolute                   = (HLineToAbs : xs, x:ys)
-          | otherwise                       = (HLineToRel : xs, x:ys)
-  fn (VLINE_TO t y)                 (xs,ys)
-          | t == Absolute                   = (VLineToAbs : xs, y:ys)
-          | otherwise                       = (VLineToRel : xs, y:ys)
-  fn (QUAD_TO t x y x' y')          (xs,ys)
-          | t == Absolute                   = (QuadToAbs : xs, x:y:x':y':ys)
-          | otherwise                       = (QuadToRel : xs, x:y:x':y':ys)
-  fn (CUBIC_TO t x y x' y' x'' y'') (xs,ys)
-          | t == Absolute                   = (CubicToAbs : xs, x:y:x':y':x'':y'':ys)
-          | otherwise                       = (CubicToRel : xs, x:y:x':y':x'':y'':ys)
-  fn (SQUAD_TO t x y)               (xs,ys)
-          | t == Absolute                   = (SQuadToAbs : xs, x:y:ys)
-          | otherwise                       = (SQuadToRel : xs, x:y:ys)
-  fn (SCUBIC_TO t x y x' y')        (xs,ys)
-          | t == Absolute                   = (SCubicToAbs : xs, x:y:x':y':ys)
-          | otherwise                       = (SCubicToRel : xs, x:y:x':y':ys)
-  fn (SCCWARC_TO t rh rv rt x y)    (xs,ys)
-          | t == Absolute                   = (SCCWArcToAbs : xs, rh:rv:rt:x:y:ys)
-          | otherwise                       = (SCCWArcToRel : xs, rh:rv:rt:x:y:ys)
-  fn (SCWARC_TO t rh rv rt x y)     (xs,ys)
-          | t == Absolute                   = (SCWArcToAbs : xs, rh:rv:rt:x:y:ys)
-          | otherwise                       = (SCWArcToRel : xs, rh:rv:rt:x:y:ys)
-  fn (LCCWARC_TO t rh rv rt x y)    (xs,ys)
-          | t == Absolute                   = (LCCWArcToAbs : xs, rh:rv:rt:x:y:ys)
-          | otherwise                       = (LCCWArcToRel : xs, rh:rv:rt:x:y:ys)
-  fn (LCWARC_TO t rh rv rt x y)     (xs,ys)
-          | t == Absolute                   = (LCWArcToAbs : xs, rh:rv:rt:x:y:ys)
-          | otherwise                       = (LCWArcToRel : xs, rh:rv:rt:x:y:ys)
-
-
-closePath :: SegmentCommand a
-closePath = CLOSE_PATH
-
-moveAbs :: StorablePathData a => a -> a -> SegmentCommand a
-moveAbs = MOVE_TO Absolute 
-
-moveRel :: StorablePathData a => a -> a -> SegmentCommand a
-moveRel = MOVE_TO Relative 
-
-lineAbs :: StorablePathData a => a -> a -> SegmentCommand a
-lineAbs = LINE_TO Absolute 
-
-lineRel :: StorablePathData a => a -> a -> SegmentCommand a
-lineRel = LINE_TO Relative 
-
-hlineAbs :: StorablePathData a => a -> SegmentCommand a
-hlineAbs = VLINE_TO Absolute 
-
-hlineRel :: StorablePathData a => a -> SegmentCommand a
-hlineRel = HLINE_TO Relative 
-
-vlineAbs :: StorablePathData a => a -> SegmentCommand a
-vlineAbs = VLINE_TO Absolute 
-
-vlineRel :: StorablePathData a => a -> SegmentCommand a
-vlineRel = VLINE_TO Relative 
-
-quadraticAbs :: StorablePathData a => a -> a -> a -> a -> SegmentCommand a
-quadraticAbs = QUAD_TO Absolute
-
-quadraticRel :: StorablePathData a => a -> a -> a -> a -> SegmentCommand a
-quadraticRel = QUAD_TO Relative
-
-cubicAbs :: StorablePathData a => a -> a -> a -> a -> a -> a -> SegmentCommand a
-cubicAbs = CUBIC_TO Absolute
-
-cubicRel :: StorablePathData a => a -> a -> a -> a -> a -> a -> SegmentCommand a
-cubicRel = CUBIC_TO Relative
-
-smoothQuadAbs :: StorablePathData a => a -> a -> SegmentCommand a
-smoothQuadAbs = SQUAD_TO Absolute
-
-smoothQuadRel :: StorablePathData a => a -> a -> SegmentCommand a
-smoothQuadRel = SQUAD_TO Relative
-
-smoothCubicAbs :: StorablePathData a => a -> a -> a -> a -> SegmentCommand a
-smoothCubicAbs = SCUBIC_TO Absolute
-
-smoothCubicRel :: StorablePathData a => a -> a -> a -> a -> SegmentCommand a
-smoothCubicRel = SCUBIC_TO Relative
-
-smallCcwArcAbs :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-smallCcwArcAbs = SCCWARC_TO Absolute
-
-smallCcwArcRel :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-smallCcwArcRel = SCCWARC_TO Relative
-
-smallCwArcAbs :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-smallCwArcAbs = SCWARC_TO Absolute
-
-smallCwArcRel :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-smallCwArcRel = SCWARC_TO Relative
-
-largeCcwArcAbs :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-largeCcwArcAbs = LCCWARC_TO Absolute
-
-largeCcwArcRel :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-largeCcwArcRel = LCCWARC_TO Relative
-
-largeCwArcAbs :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-largeCwArcAbs = LCWARC_TO Absolute
-
-largeCwArcRel :: StorablePathData a => a -> a -> a -> a -> a -> SegmentCommand a
-largeCwArcRel = LCWARC_TO Relative
-
diff --git a/src/Graphics/Rendering/OpenVG/VG.hs b/src/Graphics/Rendering/OpenVG/VG.hs
--- a/src/Graphics/Rendering/OpenVG/VG.hs
+++ b/src/Graphics/Rendering/OpenVG/VG.hs
@@ -15,7 +15,6 @@
 --------------------------------------------------------------------------------
 
 module Graphics.Rendering.OpenVG.VG (
-  module Graphics.Rendering.OpenVG.VG.BasicTypes,  
   module Graphics.Rendering.OpenVG.VG.Blending,
   module Graphics.Rendering.OpenVG.VG.DrawingContext,
   module Graphics.Rendering.OpenVG.VG.Extending,
@@ -28,7 +27,6 @@
   module Graphics.Rendering.OpenVG.VG.ShivaExtensions
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes
 import Graphics.Rendering.OpenVG.VG.Blending
 import Graphics.Rendering.OpenVG.VG.DrawingContext
 import Graphics.Rendering.OpenVG.VG.Extending
diff --git a/src/Graphics/Rendering/OpenVG/VG/BasicTypes.hsc b/src/Graphics/Rendering/OpenVG/VG/BasicTypes.hsc
deleted file mode 100644
--- a/src/Graphics/Rendering/OpenVG/VG/BasicTypes.hsc
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE ForeignFunctionInterface   #-}
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Graphics.Rendering.OpenVG.VG.BasicTypes
--- Copyright   :  (c) Stephen Tetley 2008, 2009
--- License     :  BSD3
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  highly unstable
--- Portability :  GHC
---
--- This module corresponds to sections 3.2 (Primitive Data Types) 
--- and 3.6 (Handle-based Data Types) of the OpenVG 1.0.1 specs.
--- 
---
---------------------------------------------------------------------------------
-
-module Graphics.Rendering.OpenVG.VG.BasicTypes (
-  -- * Primitive Types
-  VGbyte, VGubyte, VGshort, VGint, VGuint, VGbitfield, 
-  VGboolean, VGfloat,
-  VGenum,
-  
-  vg_FALSE, vg_TRUE,
-  
-  -- * Handle-based Types
-  VGHandle,
-  vg_INVALID_HANDLE,
-  
-  VGPath, VGImage, VGPaint,
-  
-  -- * Points
-  Point,
-
-) where
-
-#include <vg/openvg.h>
-
-import Graphics.Rendering.OpenGL.Raw.Core31
-
-import Foreign.Ptr
-
-type VGfloat    = GLfloat
-type VGbyte     = GLbyte
-type VGubyte    = GLubyte
-type VGshort    = GLshort
-type VGint      = GLint
-type VGuint     = GLuint
-type VGbitfield = GLbitfield
-
-type VGenum     = GLenum 
-
-
-
-type VGboolean = GLint
-
-#{enum VGboolean,
-  , vg_FALSE    = VG_FALSE
-  , vg_TRUE     = VG_TRUE
-  }
-    
-newtype VGHandle = VGHandle (Ptr ())
-
-
-vg_INVALID_HANDLE :: VGHandle 
-vg_INVALID_HANDLE = VGHandle nullPtr
-
-
-type VGPath  = VGHandle
-type VGImage = VGHandle
-type VGPaint = VGHandle
-
-
-type Point = (VGfloat, VGfloat)
-
-
diff --git a/src/Graphics/Rendering/OpenVG/VG/Blending.hs b/src/Graphics/Rendering/OpenVG/VG/Blending.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Blending.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Blending.hs
@@ -21,14 +21,10 @@
   blendMode
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( VGenum )
-import Graphics.Rendering.OpenVG.VG.Constants (
-    vg_BLEND_SRC, vg_BLEND_SRC_OVER, vg_BLEND_DST_OVER, 
-    vg_BLEND_SRC_IN, vg_BLEND_DST_IN, vg_BLEND_MULTIPLY, 
-    vg_BLEND_SCREEN, vg_BLEND_DARKEN, vg_BLEND_LIGHTEN, 
-    vg_BLEND_ADDITIVE ) 
-import Graphics.Rendering.OpenVG.VG.Parameters ( 
-    seti, ParamType ( BlendMode ) )
+import Graphics.Rendering.OpenVG.VG.Parameters
+
+import Graphics.Rendering.OpenVG.Raw.VG.Blending
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGenum ) 
 
 import Data.StateVar (
    SettableStateVar, makeSettableStateVar ) 
diff --git a/src/Graphics/Rendering/OpenVG/VG/CFunDecls.hsc b/src/Graphics/Rendering/OpenVG/VG/CFunDecls.hsc
deleted file mode 100644
--- a/src/Graphics/Rendering/OpenVG/VG/CFunDecls.hsc
+++ /dev/null
@@ -1,491 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE ForeignFunctionInterface   #-}
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Graphics.Rendering.OpenVG.VG.CFunDecls
--- Copyright   :  (c) Stephen Tetley 2008, 2009
--- License     :  BSD3
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  highly unstable
--- Portability :  GHC
---
--- Internal module declaring all the foreign declarations of the functions
--- defined in <vg/openvg.h>.
---
---
---------------------------------------------------------------------------------
-
-module Graphics.Rendering.OpenVG.VG.CFunDecls where
-
-#include <vg/openvg.h>
-
-import Graphics.Rendering.OpenVG.VG.BasicTypes
-
-import Foreign.Ptr ( Ptr )
-import Foreign.C.String ( CString )
-
--- 'suffix indicates a marshalled enum type.
-type VGErrorCode'           = VGenum
-type VGHardwareQueryResult' = VGenum
-type VGHardwareQueryType'   = VGenum
-type VGImageChannel'        = VGenum
-type VGImageFormat'         = VGenum
-type VGMaskOperation'       = VGenum
-type VGPaintMode'           = VGenum
-type VGPathDatatype'        = VGenum
-type VGStringID'            = VGenum
-type VGTilingMode'          = VGenum
-
-
-foreign import ccall unsafe "vg/openvg.h vgGetError"
-    vgGetError :: IO VGErrorCode'
-
-
-
-foreign import ccall unsafe "vg/openvg.h vgFlush"
-    vgFlush :: IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgFinish"
-    vgFinish ::  IO ()
-
-
--- getters and setters
-foreign import ccall unsafe "vg/openvg.h vgSeti"
-    vgSeti :: VGenum -> VGint -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetf"
-    vgSetf :: VGenum -> VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetfv"
-    vgSetfv :: VGenum -> VGint -> Ptr VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetiv"
-    vgSetiv :: VGenum -> VGint -> Ptr VGint -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgGetf"
-    vgGetf :: VGenum -> IO VGfloat
-
-foreign import ccall unsafe "vg/openvg.h vgGeti"
-    vgGeti :: VGenum -> IO VGint
-
-foreign import ccall unsafe "vg/openvg.h vgGetVectorSize"
-    vgGetVectorSize :: VGenum -> IO VGint
-
-foreign import ccall unsafe "vg/openvg.h vgGetfv"
-    vgGetfv :: VGenum -> VGint -> IO (Ptr VGfloat)
-
-foreign import ccall unsafe "vg/openvg.h vgGetiv"
-    vgGetiv :: VGenum -> VGint -> IO (Ptr VGint)
-
-foreign import ccall unsafe "vg/openvg.h vgSetParameterf"
-    vgSetParameterf :: VGHandle -> VGenum -> VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetParameteri"
-    vgSetParameteri :: VGHandle -> VGenum -> VGint -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetParameterfv"
-    vgSetParameterfv :: VGHandle -> VGenum -> VGint -> Ptr VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetParameteriv"
-    vgSetParameteriv :: VGHandle -> VGenum -> VGint -> Ptr VGint -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgGetParameterf"
-    vgGetParameterf :: VGHandle -> VGenum -> IO VGfloat
-
-foreign import ccall unsafe "vg/openvg.h vgGetParameteri"
-    vgGetParameteri :: VGHandle -> VGenum -> IO VGint
-
-foreign import ccall unsafe "vg/openvg.h vgGetParameterVectorSize"
-    vgGetParameterVectorSize :: VGHandle -> VGenum -> IO VGint
-
-foreign import ccall unsafe "vg/openvg.h vgGetParameterfv"
-    vgGetParameterfv :: VGHandle -> VGenum -> VGint -> IO (Ptr VGfloat)
-
-foreign import ccall unsafe "vg/openvg.h vgGetParameteriv"
-    vgGetParameteriv :: VGHandle -> VGenum -> VGint -> IO (Ptr VGint)
-
-
--- | Matrix Manipulation
--- set the current matrix to the identity matrix
-foreign import ccall unsafe "vg/openvg.h vgLoadIdentity"
-    vgLoadIdentity :: IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgLoadMatrix"
-    vgLoadMatrix :: Ptr VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgGetMatrix"
-    vgGetMatrix :: IO (Ptr VGfloat)
-
--- multiple the current matrix by the given matrix
-foreign import ccall unsafe "vg/openvg.h vgMultMatrix"
-    vgMultMatrix :: Ptr VGfloat -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgTranslate"
-    vgTranslate :: VGfloat -> VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgScale"
-    vgScale :: VGfloat -> VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgShear"
-    vgShear :: VGfloat -> VGfloat -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgRotate"
-    vgRotate :: VGfloat -> IO ()
-
--- | Masking and Clearing
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgMask"
-    vgMask :: VGImage -> VGMaskOperation' ->
-                  VGint -> VGint -> VGint -> VGint -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgClear"
-    vgClear :: VGint -> VGint -> VGint -> VGint -> IO ()
-
-
-
--- | Paths
-foreign import ccall unsafe "vg/openvg.h vgCreatePath"
-    vgCreatePath :: VGint
-                 -> VGPathDatatype'
-                 -> VGfloat
-                 -> VGfloat
-                 -> VGint
-                 -> VGint
-                 -> VGbitfield
-                 -> IO VGPath
-
-
-
-foreign import ccall unsafe "vg/openvg.h vgClearPath"
-    vgClearPath :: VGPath -> VGbitfield -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgDestroyPath"
-    vgDestroyPath :: VGPath -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgRemovePathCapabilities"
-    vgRemovePathCapabilities :: VGPath -> VGbitfield -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgGetPathCapabilities"
-    vgGetPathCapabilities :: VGPath -> IO VGbitfield
-
-foreign import ccall unsafe "vg/openvg.h vgAppendPath"
-    vgAppendPath :: VGPath -> VGPath -> IO ()
-
--- append the data in /Ptr a/ to the path handle /VGPath/.
-foreign import ccall unsafe "vg/openvg.h vgAppendPathData"
-    vgAppendPathData :: VGPath -> VGint -> Ptr VGubyte -> Ptr a -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgModifyPathCoords"
-    vgModifyPathCoords :: VGPath -> VGint -> VGint -> Ptr a -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgTransformPath"
-    vgTransformPath :: VGPath -> VGPath -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgInterpolatePath"
-    vgInterpolatePath :: VGPath
-                      -> VGPath
-                      -> VGPath
-                      -> VGfloat
-                      -> IO VGboolean
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgPathLength"
-    vgPathLength :: VGPath -> VGint -> VGint -> IO VGfloat
-
-
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgPointAlongPath"
-    vgPointAlongPath :: VGPath
-                     -> VGint
-                     -> VGint
-                     -> VGfloat
-                     -> Ptr VGfloat
-                     -> Ptr VGfloat
-                     -> Ptr VGfloat
-                     -> Ptr VGfloat
-                     -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgPathBounds"
-    vgPathBounds :: VGPath
-                 -> Ptr VGfloat
-                 -> Ptr VGfloat
-                 -> Ptr VGfloat
-                 -> Ptr VGfloat
-                 -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgPathTransformedBounds"
-    vgPathTransformedBounds :: VGPath
-                            -> Ptr VGfloat
-                            -> Ptr VGfloat
-                            -> Ptr VGfloat
-                            -> Ptr VGfloat
-                            -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgDrawPath"
-    vgDrawPath :: VGPath -> VGbitfield -> IO ()
-
-
-
--- | Paint
-foreign import ccall unsafe "vg/openvg.h vgCreatePaint"
-    vgCreatePaint :: IO VGPaint
-
-foreign import ccall unsafe "vg/openvg.h vgDestroyPaint"
-    vgDestroyPaint :: VGPaint -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetPaint"
-    vgSetPaint :: VGPaint -> VGbitfield -> IO ()
-
-{-
--- TODO vgGetPaint seems to be missing in the dll... ?
-foreign import ccall unsafe "vg/openvg.h vgGetPaint"
-    vgGetPaint :: VGPaintMode' -> IO VGPaint
--}
-
-{-
--- TODO vgSetColor seems to be missing in the dll... ?
-foreign import ccall unsafe "vg/openvg.h vgSetColor"
-    vgSetColor :: VGPaint -> VGuint -> IO ()
--}
-
-{-
--- TODO vgGetColor seems to be missing in the dll... ?
-foreign import ccall unsafe "vg/openvg.h vgGetColor"
-    vgGetColor :: VGPaint -> IO VGuint
--}
-
-foreign import ccall unsafe "vg/openvg.h vgPaintPattern"
-    vgPaintPattern :: VGPaint -> VGImage -> IO ()
-
-
--- | Images
-
-foreign import ccall unsafe "vg/openvg.h vgCreateImage"
-    vgCreateImage :: VGImageFormat'
-                  -> VGint
-                  -> VGint
-                  -> VGbitfield
-                  -> IO VGImage
-
-
-foreign import ccall unsafe "vg/openvg.h vgDestroyImage"
-    vgDestroyImage :: VGImage -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgClearImage"
-    vgClearImage :: VGImage -> VGint -> VGint -> VGint -> VGint -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgImageSubData"
-    vgImageSubData :: VGImage
-                   -> Ptr a
-                   -> VGint
-                   -> VGImageFormat'
-                   -> VGint
-                   -> VGint
-                   -> VGint
-                   -> VGint
-                   -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgGetImageSubData"
-    vgGetImageSubData :: VGImage
-                      -> Ptr a
-                      -> VGint
-                      -> VGImageFormat'
-                      -> VGint
-                      -> VGint
-                      -> VGint
-                      -> VGint
-                      -> IO ()
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgChildImage"
-    vgChildImage :: VGImage -> VGint -> VGint -> VGint -> VGint -> IO VGImage
-
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgGetParent"
-    vgGetParent :: VGImage -> IO VGImage
-
-
-
-foreign import ccall unsafe "vg/openvg.h vgCopyImage"
-    vgCopyImage :: VGImage -> VGint -> VGint
-                -> VGImage -> VGint -> VGint
-                -> VGint   -> VGint
-                -> VGboolean
-                -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgDrawImage"
-    vgDrawImage :: VGImage -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgSetPixels"
-    vgSetPixels :: VGint
-                -> VGint
-                -> VGImage
-                -> VGint
-                -> VGint
-                -> VGint
-                -> VGint
-                -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgWritePixels"
-    vgWritePixels :: Ptr a
-                  -> VGint
-                  -> VGImageFormat'
-                  -> VGint
-                  -> VGint
-                  -> VGint
-                  -> VGint
-                  -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgGetPixels"
-    vgGetPixels :: VGImage
-                -> VGint
-                -> VGint
-                -> VGint
-                -> VGint
-                -> VGint
-                -> VGint
-                -> IO ()
-
-foreign import ccall unsafe "vg/openvg.h vgReadPixels"
-    vgReadPixels :: Ptr a
-                 -> VGint
-                 -> VGImageFormat'
-                 -> VGint
-                 -> VGint
-                 -> VGint
-                 -> VGint
-                 -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgCopyPixels"
-    vgCopyPixels :: VGint
-                 -> VGint
-                 -> VGint
-                 -> VGint
-                 -> VGint
-                 -> VGint
-                 -> IO ()
-
-
--- | Image Filters
-
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgColorMatrix"
-    vgColorMatrix :: VGImage -> VGImage -> Ptr VGfloat -> IO ()
-
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgConvolve"
-    vgConvolve :: VGImage
-               -> VGImage
-               -> VGint
-               -> VGint
-               -> VGint
-               -> VGint
-               -> Ptr VGshort
-               -> VGfloat
-               -> VGfloat
-               -> VGTilingMode'
-               -> IO ()
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgSeparableConvolve"
-    vgSeparableConvolve :: VGImage
-                        -> VGImage
-                        -> VGint
-                        -> VGint
-                        -> VGint
-                        -> VGint
-                        -> Ptr VGshort
-                        -> Ptr VGshort
-                        -> VGfloat
-                        -> VGfloat
-                        -> VGTilingMode'
-                        -> IO ()
-
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgGaussianBlur"
-    vgGaussianBlur :: VGImage
-                   -> VGImage
-                   -> VGfloat
-                   -> VGfloat
-                   -> VGTilingMode'
-                   -> IO ()
-
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgLookup"
-    vgLookup :: VGImage
-             -> VGImage
-             -> Ptr VGubyte
-             -> Ptr VGubyte
-             -> Ptr VGubyte
-             -> Ptr VGubyte
-             -> VGboolean
-             -> VGboolean
-             -> IO ()
-
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vgLookupSingle"
-    vgLookupSingle :: VGImage
-                   -> VGImage
-                   -> Ptr VGuint
-                   -> VGImageChannel'
-                   -> VGboolean
-                   -> VGboolean
-                   -> IO ()
-
-
--- | Hardware Queries
-
--- | Query hardware capabilites
-
--- Implemented in shivaVG 0.2.1
-foreign import ccall unsafe "vg/openvg.h vgHardwareQuery"
-    vgHardwareQuery :: VGHardwareQueryType'
-                    -> VGint
-                    -> IO VGHardwareQueryResult'
-
--- | Renderer and Extension Information
-foreign import ccall unsafe "vg/openvg.h vgGetString"
-    vgGetString :: VGStringID' -> IO CString
-
--- | Shiva-VG Extensions
--- See the README in the shiva archive.
-foreign import ccall unsafe "vg/openvg.h vgCreateContextSH"
-    vgCreateContextSH :: VGint -> VGint -> IO VGboolean
-
-foreign import ccall unsafe "vg/openvg.h vgResizeSurfaceSH"
-    vgResizeSurfaceSH :: VGint -> VGint -> IO ()
-
-
-foreign import ccall unsafe "vg/openvg.h vgDestroyContextSH"
-    vgDestroyContextSH :: IO ()
-
-
-
-
-
-
-
-
-
diff --git a/src/Graphics/Rendering/OpenVG/VG/Constants.hsc b/src/Graphics/Rendering/OpenVG/VG/Constants.hsc
deleted file mode 100644
--- a/src/Graphics/Rendering/OpenVG/VG/Constants.hsc
+++ /dev/null
@@ -1,384 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE ForeignFunctionInterface   #-}
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Graphics.Rendering.OpenVG.VG.Constants
--- Copyright   :  (c) Stephen Tetley 2008, 2009
--- License     :  BSD3
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  highly unstable
--- Portability :  GHC
---
--- Aliases for constants defined in <vg/openvg.h>.
---
---------------------------------------------------------------------------------
-
-
-module Graphics.Rendering.OpenVG.VG.Constants where
-
-#include <vg/openvg.h>
-
-import Graphics.Rendering.OpenVG.VG.BasicTypes
-
-vg_PATH_FORMAT_STANDARD :: VGint
-vg_PATH_FORMAT_STANDARD = #const VG_PATH_FORMAT_STANDARD
-
-vg_MAXSHORT :: VGshort
-vg_MAXSHORT = #const VG_MAXSHORT
-
-vg_MAXINT :: VGint
-vg_MAXINT = #const VG_MAXINT
-
--- shiva-vg has no VG_MAXFLOAT
--- vg_MAXFLOAT :: VGfloat
--- vg_MAXFLOAT = #const VG_MAXFLOAT
-
-
--- | Enumerations
-
-#{enum VGenum,
-  , vg_NO_ERROR                         = VG_NO_ERROR
-  , vg_BAD_HANDLE_ERROR                 = VG_BAD_HANDLE_ERROR
-  , vg_ILLEGAL_ARGUMENT_ERROR           = VG_ILLEGAL_ARGUMENT_ERROR
-  , vg_OUT_OF_MEMORY_ERROR              = VG_OUT_OF_MEMORY_ERROR
-  , vg_PATH_CAPABILITY_ERROR            = VG_PATH_CAPABILITY_ERROR
-  , vg_UNSUPPORTED_IMAGE_FORMAT_ERROR   = VG_UNSUPPORTED_IMAGE_FORMAT_ERROR
-  , vg_UNSUPPORTED_PATH_FORMAT_ERROR    = VG_UNSUPPORTED_PATH_FORMAT_ERROR
-  , vg_IMAGE_IN_USE_ERROR               = VG_IMAGE_IN_USE_ERROR
-  , vg_NO_CONTEXT_ERROR                 = VG_NO_CONTEXT_ERROR
-  }
-  
-#{enum VGenum,
-  , vg_MATRIX_MODE                  = VG_MATRIX_MODE
-  , vg_FILL_RULE                    = VG_FILL_RULE
-  , vg_IMAGE_QUALITY                = VG_IMAGE_QUALITY
-  , vg_RENDERING_QUALITY            = VG_RENDERING_QUALITY
-  , vg_BLEND_MODE                   = VG_BLEND_MODE
-  , vg_IMAGE_MODE                   = VG_IMAGE_MODE
-  
-  , vg_SCISSOR_RECTS                = VG_SCISSOR_RECTS
-
-  , vg_STROKE_LINE_WIDTH            = VG_STROKE_LINE_WIDTH
-  , vg_STROKE_CAP_STYLE             = VG_STROKE_CAP_STYLE
-  , vg_STROKE_JOIN_STYLE            = VG_STROKE_JOIN_STYLE
-  , vg_STROKE_MITER_LIMIT           = VG_STROKE_MITER_LIMIT
-  , vg_STROKE_DASH_PATTERN          = VG_STROKE_DASH_PATTERN
-  , vg_STROKE_DASH_PHASE            = VG_STROKE_DASH_PHASE
-  , vg_STROKE_DASH_PHASE_RESET      = VG_STROKE_DASH_PHASE_RESET
-
-  , vg_TILE_FILL_COLOR              = VG_TILE_FILL_COLOR
-
-  , vg_CLEAR_COLOR                  = VG_CLEAR_COLOR
-
-  , vg_MASKING                      = VG_MASKING
-  , vg_SCISSORING                   = VG_SCISSORING
-
-  , vg_PIXEL_LAYOUT                 = VG_PIXEL_LAYOUT
-  , vg_SCREEN_LAYOUT                = VG_SCREEN_LAYOUT
-
-  , vg_FILTER_FORMAT_LINEAR         = VG_FILTER_FORMAT_LINEAR
-  , vg_FILTER_FORMAT_PREMULTIPLIED  = VG_FILTER_FORMAT_PREMULTIPLIED
-
-  , vg_FILTER_CHANNEL_MASK          = VG_FILTER_CHANNEL_MASK
-
-  , vg_MAX_SCISSOR_RECTS            = VG_MAX_SCISSOR_RECTS
-  , vg_MAX_DASH_COUNT               = VG_MAX_DASH_COUNT
-  , vg_MAX_KERNEL_SIZE              = VG_MAX_KERNEL_SIZE
-  , vg_MAX_SEPARABLE_KERNEL_SIZE    = VG_MAX_SEPARABLE_KERNEL_SIZE
-  , vg_MAX_COLOR_RAMP_STOPS         = VG_MAX_COLOR_RAMP_STOPS
-  , vg_MAX_IMAGE_WIDTH              = VG_MAX_IMAGE_WIDTH
-  , vg_MAX_IMAGE_HEIGHT             = VG_MAX_IMAGE_HEIGHT
-  , vg_MAX_IMAGE_PIXELS             = VG_MAX_IMAGE_PIXELS
-  , vg_MAX_IMAGE_BYTES              = VG_MAX_IMAGE_BYTES
-  , vg_MAX_FLOAT                    = VG_MAX_FLOAT
-  , vg_MAX_GAUSSIAN_STD_DEVIATION   = VG_MAX_GAUSSIAN_STD_DEVIATION 
-  }
-    
-
-#{enum VGenum,
-  , vg_RENDERING_QUALITY_NONANTIALIASED = VG_RENDERING_QUALITY_NONANTIALIASED
-  , vg_RENDERING_QUALITY_FASTER         = VG_RENDERING_QUALITY_FASTER
-  , vg_RENDERING_QUALITY_BETTER         = VG_RENDERING_QUALITY_BETTER 
-  }   
-    
-
-
-#{enum VGenum,
-  , vg_PIXEL_LAYOUT_UNKNOWN             = VG_PIXEL_LAYOUT_UNKNOWN
-  , vg_PIXEL_LAYOUT_RGB_VERTICAL        = VG_PIXEL_LAYOUT_RGB_VERTICAL
-  , vg_PIXEL_LAYOUT_BGR_VERTICAL        = VG_PIXEL_LAYOUT_BGR_VERTICAL
-  , vg_PIXEL_LAYOUT_RGB_HORIZONTAL      = VG_PIXEL_LAYOUT_RGB_HORIZONTAL
-  , vg_PIXEL_LAYOUT_BGR_HORIZONTAL      = VG_PIXEL_LAYOUT_BGR_HORIZONTAL
-  }
-
-#{enum VGenum,
-  , vg_MATRIX_PATH_USER_TO_SURFACE    = VG_MATRIX_PATH_USER_TO_SURFACE
-  , vg_MATRIX_IMAGE_USER_TO_SURFACE   = VG_MATRIX_IMAGE_USER_TO_SURFACE
-  , vg_MATRIX_FILL_PAINT_TO_USER      = VG_MATRIX_FILL_PAINT_TO_USER
-  , vg_MATRIX_STROKE_PAINT_TO_USER    = VG_MATRIX_STROKE_PAINT_TO_USER
-  }
-
-#{enum VGenum,
-  , vg_CLEAR_MASK       = VG_CLEAR_MASK
-  , vg_FILL_MASK        = VG_FILL_MASK
-  , vg_SET_MASK         = VG_SET_MASK
-  , vg_UNION_MASK       = VG_UNION_MASK
-  , vg_INTERSECT_MASK   = VG_INTERSECT_MASK
-  , vg_SUBTRACT_MASK    = VG_SUBTRACT_MASK
-  }
-    
-    
-#{enum VGenum,
-  , vg_PATH_DATATYPE_S_8    = VG_PATH_DATATYPE_S_8
-  , vg_PATH_DATATYPE_S_16   = VG_PATH_DATATYPE_S_16
-  , vg_PATH_DATATYPE_S_32   = VG_PATH_DATATYPE_S_32
-  , vg_PATH_DATATYPE_F      = VG_PATH_DATATYPE_F
-  }
-
-#{enum VGenum,
-  , vg_ABSOLUTE         = VG_ABSOLUTE
-  , vg_RELATIVE         = VG_RELATIVE
-  }
-
-#{enum VGenum,
-  , vg_CLOSE_PATH       = VG_CLOSE_PATH
-  , vg_MOVE_TO          = VG_MOVE_TO
-  , vg_LINE_TO          = VG_LINE_TO
-  , vg_HLINE_TO         = VG_HLINE_TO
-  , vg_VLINE_TO         = VG_VLINE_TO
-  , vg_QUAD_TO          = VG_QUAD_TO
-  , vg_CUBIC_TO         = VG_CUBIC_TO
-  , vg_SQUAD_TO         = VG_SQUAD_TO
-  , vg_SCUBIC_TO        = VG_SCUBIC_TO
-  , vg_SCCWARC_TO       = VG_SCCWARC_TO
-  , vg_SCWARC_TO        = VG_SCWARC_TO
-  , vg_LCCWARC_TO       = VG_LCCWARC_TO
-  , vg_LCWARC_TO        = VG_LCWARC_TO
-  }
-
-
-#{enum VGenum,
-  , vg_MOVE_TO_ABS      = VG_MOVE_TO_ABS
-  , vg_MOVE_TO_REL      = VG_MOVE_TO_REL
-  , vg_LINE_TO_ABS      = VG_LINE_TO_ABS
-  , vg_LINE_TO_REL      = VG_LINE_TO_REL
-  , vg_HLINE_TO_ABS     = VG_HLINE_TO_ABS
-  , vg_HLINE_TO_REL     = VG_HLINE_TO_REL
-  , vg_VLINE_TO_ABS     = VG_VLINE_TO_ABS
-  , vg_VLINE_TO_REL     = VG_VLINE_TO_REL
-  , vg_QUAD_TO_ABS      = VG_QUAD_TO_ABS
-  , vg_QUAD_TO_REL      = VG_QUAD_TO_REL
-  , vg_CUBIC_TO_ABS     = VG_CUBIC_TO_ABS
-  , vg_CUBIC_TO_REL     = VG_CUBIC_TO_REL
-  , vg_SQUAD_TO_ABS     = VG_SQUAD_TO_ABS
-  , vg_SQUAD_TO_REL     = VG_SQUAD_TO_REL
-  , vg_SCUBIC_TO_ABS    = VG_SCUBIC_TO_ABS
-  , vg_SCUBIC_TO_REL    = VG_SCUBIC_TO_REL
-  , vg_SCCWARC_TO_ABS   = VG_SCCWARC_TO_ABS
-  , vg_SCCWARC_TO_REL   = VG_SCCWARC_TO_REL
-  , vg_SCWARC_TO_ABS    = VG_SCWARC_TO_ABS
-  , vg_SCWARC_TO_REL    = VG_SCWARC_TO_REL
-  , vg_LCCWARC_TO_ABS   = VG_LCCWARC_TO_ABS
-  , vg_LCCWARC_TO_REL   = VG_LCCWARC_TO_REL
-  , vg_LCWARC_TO_ABS    = VG_LCWARC_TO_ABS
-  , vg_LCWARC_TO_REL    = VG_LCWARC_TO_REL
-  }
-
--- typedef VGHandle VGPath;
-
-
-#{enum VGenum,
-  , vg_PATH_CAPABILITY_APPEND_FROM              = VG_PATH_CAPABILITY_APPEND_FROM
-  , vg_PATH_CAPABILITY_APPEND_TO                = VG_PATH_CAPABILITY_APPEND_TO
-  , vg_PATH_CAPABILITY_MODIFY                   = VG_PATH_CAPABILITY_MODIFY
-  , vg_PATH_CAPABILITY_TRANSFORM_FROM           = VG_PATH_CAPABILITY_TRANSFORM_FROM
-  , vg_PATH_CAPABILITY_TRANSFORM_TO             = VG_PATH_CAPABILITY_TRANSFORM_TO
-  , vg_PATH_CAPABILITY_INTERPOLATE_FROM         = VG_PATH_CAPABILITY_INTERPOLATE_FROM
-  , vg_PATH_CAPABILITY_INTERPOLATE_TO           = VG_PATH_CAPABILITY_INTERPOLATE_TO
-  , vg_PATH_CAPABILITY_PATH_LENGTH              = VG_PATH_CAPABILITY_PATH_LENGTH
-  , vg_PATH_CAPABILITY_POINT_ALONG_PATH         = VG_PATH_CAPABILITY_POINT_ALONG_PATH
-  , vg_PATH_CAPABILITY_TANGENT_ALONG_PATH       = VG_PATH_CAPABILITY_TANGENT_ALONG_PATH
-  , vg_PATH_CAPABILITY_PATH_BOUNDS              = VG_PATH_CAPABILITY_PATH_BOUNDS
-  , vg_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS  = VG_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS
-  , vg_PATH_CAPABILITY_ALL                      = VG_PATH_CAPABILITY_ALL
-  }
-
-#{enum VGenum,
-  , vg_PATH_FORMAT            = VG_PATH_FORMAT
-  , vg_PATH_DATATYPE          = VG_PATH_DATATYPE
-  , vg_PATH_SCALE             = VG_PATH_SCALE
-  , vg_PATH_BIAS              = VG_PATH_BIAS
-  , vg_PATH_NUM_SEGMENTS      = VG_PATH_NUM_SEGMENTS
-  , vg_PATH_NUM_COORDS        = VG_PATH_NUM_COORDS
-  }
-
-#{enum VGenum,
-  , vg_CAP_BUTT         = VG_CAP_BUTT
-  , vg_CAP_ROUND        = VG_CAP_ROUND
-  , vg_CAP_SQUARE       = VG_CAP_SQUARE
-  }
-
-#{enum VGenum,
-  , vg_JOIN_MITER       = VG_JOIN_MITER
-  , vg_JOIN_ROUND       = VG_JOIN_ROUND
-  , vg_JOIN_BEVEL       = VG_JOIN_BEVEL
-  }
-
-#{enum VGenum,
-  , vg_EVEN_ODD         = VG_EVEN_ODD
-  , vg_NON_ZERO         = VG_NON_ZERO
-  }
-
-#{enum VGenum,
-  , vg_STROKE_PATH      = VG_STROKE_PATH
-  , vg_FILL_PATH        = VG_FILL_PATH
-}
-
--- typedef VGHandle VGPaint;
-
-#{enum VGenum,
-  , vg_PAINT_TYPE                       = VG_PAINT_TYPE
-  , vg_PAINT_COLOR                      = VG_PAINT_COLOR
-  , vg_PAINT_COLOR_RAMP_SPREAD_MODE     = VG_PAINT_COLOR_RAMP_SPREAD_MODE
-  , vg_PAINT_COLOR_RAMP_PREMULTIPLIED   = VG_PAINT_COLOR_RAMP_PREMULTIPLIED
-  , vg_PAINT_COLOR_RAMP_STOPS           = VG_PAINT_COLOR_RAMP_STOPS
-
-  , vg_PAINT_LINEAR_GRADIENT            = VG_PAINT_LINEAR_GRADIENT
-
-  , vg_PAINT_RADIAL_GRADIENT            = VG_PAINT_RADIAL_GRADIENT
-
-  , vg_PAINT_PATTERN_TILING_MODE        = VG_PAINT_PATTERN_TILING_MODE
-}
-
-#{enum VGenum,
-  , vg_PAINT_TYPE_COLOR                 = VG_PAINT_TYPE_COLOR
-  , vg_PAINT_TYPE_LINEAR_GRADIENT       = VG_PAINT_TYPE_LINEAR_GRADIENT
-  , vg_PAINT_TYPE_RADIAL_GRADIENT       = VG_PAINT_TYPE_RADIAL_GRADIENT
-  , vg_PAINT_TYPE_PATTERN               = VG_PAINT_TYPE_PATTERN
-  }
-
-#{enum VGenum,
-  , vg_COLOR_RAMP_SPREAD_PAD            = VG_COLOR_RAMP_SPREAD_PAD
-  , vg_COLOR_RAMP_SPREAD_REPEAT         = VG_COLOR_RAMP_SPREAD_REPEAT
-  , vg_COLOR_RAMP_SPREAD_REFLECT        = VG_COLOR_RAMP_SPREAD_REFLECT
-  }
-
-#{enum VGenum,
-  , vg_TILE_FILL        = VG_TILE_FILL
-  , vg_TILE_PAD         = VG_TILE_PAD
-  , vg_TILE_REPEAT      = VG_TILE_REPEAT
-  , vg_TILE_REFLECT     = VG_TILE_REFLECT
-  }
-
-#{enum VGenum,
-  , vg_sRGBX_8888       = VG_sRGBX_8888
-  , vg_sRGBA_8888       = VG_sRGBA_8888
-  , vg_sRGBA_8888_PRE   = VG_sRGBA_8888_PRE
-  , vg_sRGB_565         = VG_sRGB_565
-  , vg_sRGBA_5551       = VG_sRGBA_5551
-  , vg_sRGBA_4444       = VG_sRGBA_4444
-  , vg_sL_8             = VG_sL_8
-  , vg_lRGBX_8888       = VG_lRGBX_8888
-  , vg_lRGBA_8888       = VG_lRGBA_8888
-  , vg_lRGBA_8888_PRE   = VG_lRGBA_8888_PRE
-  , vg_lL_8             = VG_lL_8
-  , vg_A_8              = VG_A_8
-  , vg_BW_1             = VG_BW_1
-
-  , vg_sXRGB_8888       = VG_sXRGB_8888
-  , vg_sARGB_8888       = VG_sARGB_8888
-  , vg_sARGB_8888_PRE   = VG_sARGB_8888_PRE
-  , vg_sARGB_1555       = VG_sARGB_1555
-  , vg_sARGB_4444       = VG_sARGB_4444
-  , vg_lXRGB_8888       = VG_lXRGB_8888
-  , vg_lARGB_8888       = VG_lARGB_8888
-  , vg_lARGB_8888_PRE   = VG_lARGB_8888_PRE
-
-  , vg_sBGRX_8888       = VG_sBGRX_8888
-  , vg_sBGRA_8888       = VG_sBGRA_8888
-  , vg_sBGRA_8888_PRE   = VG_sBGRA_8888_PRE
-  , vg_sBGR_565         = VG_sBGR_565
-  , vg_sBGRA_5551       = VG_sBGRA_5551
-  , vg_sBGRA_4444       = VG_sBGRA_4444
-  , vg_lBGRX_8888       = VG_lBGRX_8888
-  , vg_lBGRA_8888       = VG_lBGRA_8888
-  , vg_lBGRA_8888_PRE   = VG_lBGRA_8888_PRE
-
-  , vg_sXBGR_8888       = VG_sXBGR_8888
-  , vg_sABGR_8888       = VG_sABGR_8888
-  , vg_sABGR_8888_PRE   = VG_sABGR_8888_PRE
-  , vg_sABGR_1555       = VG_sABGR_1555
-  , vg_sABGR_4444       = VG_sABGR_4444
-  , vg_lXBGR_8888       = VG_lXBGR_8888
-  , vg_lABGR_8888       = VG_lABGR_8888
-  , vg_lABGR_8888_PRE   = VG_lABGR_8888_PRE
-}
-
-
--- typedef VGHandle VGImage;
-
-
-#{enum VGenum,
-  , vg_IMAGE_QUALITY_NONANTIALIASED     = VG_IMAGE_QUALITY_NONANTIALIASED
-  , vg_IMAGE_QUALITY_FASTER             = VG_IMAGE_QUALITY_FASTER
-  , vg_IMAGE_QUALITY_BETTER             = VG_IMAGE_QUALITY_BETTER
-  }
-
-#{enum VGenum,
-  , vg_IMAGE_FORMAT     = VG_IMAGE_FORMAT
-  , vg_IMAGE_WIDTH      = VG_IMAGE_WIDTH
-  , vg_IMAGE_HEIGHT     = VG_IMAGE_HEIGHT
-  }
-
-#{enum VGenum,
-  , vg_DRAW_IMAGE_NORMAL      = VG_DRAW_IMAGE_NORMAL
-  , vg_DRAW_IMAGE_MULTIPLY    = VG_DRAW_IMAGE_MULTIPLY
-  , vg_DRAW_IMAGE_STENCIL     = VG_DRAW_IMAGE_STENCIL
-  }
-
-#{enum VGenum,
-  , vg_RED              = VG_RED
-  , vg_GREEN            = VG_GREEN
-  , vg_BLUE             = VG_BLUE
-  , vg_ALPHA            = VG_ALPHA
-  }
-
-#{enum VGenum,
-  , vg_BLEND_SRC              = VG_BLEND_SRC
-  , vg_BLEND_SRC_OVER         = VG_BLEND_SRC_OVER
-  , vg_BLEND_DST_OVER         = VG_BLEND_DST_OVER
-  , vg_BLEND_SRC_IN           = VG_BLEND_SRC_IN
-  , vg_BLEND_DST_IN           = VG_BLEND_DST_IN
-  , vg_BLEND_MULTIPLY         = VG_BLEND_MULTIPLY
-  , vg_BLEND_SCREEN           = VG_BLEND_SCREEN
-  , vg_BLEND_DARKEN           = VG_BLEND_DARKEN
-  , vg_BLEND_LIGHTEN          = VG_BLEND_LIGHTEN
-  , vg_BLEND_ADDITIVE         = VG_BLEND_ADDITIVE
-  , vg_BLEND_SRC_OUT_SH       = VG_BLEND_SRC_OUT_SH
-  , vg_BLEND_DST_OUT_SH       = VG_BLEND_DST_OUT_SH
-  , vg_BLEND_SRC_ATOP_SH      = VG_BLEND_SRC_ATOP_SH
-  , vg_BLEND_DST_ATOP_SH      = VG_BLEND_DST_ATOP_SH
-  }
-
-#{enum VGenum,
-  , vg_IMAGE_FORMAT_QUERY     = VG_IMAGE_FORMAT_QUERY
-  , vg_PATH_DATATYPE_QUERY    = VG_PATH_DATATYPE_QUERY
-  }
-
-#{enum VGenum,
-  , vg_HARDWARE_ACCELERATED   = VG_HARDWARE_ACCELERATED
-  , vg_HARDWARE_UNACCELERATED = VG_HARDWARE_UNACCELERATED
-  }
-
-#{enum VGenum,
-  , vg_VENDOR           = VG_VENDOR
-  , vg_RENDERER         = VG_RENDERER
-  , vg_VERSION          = VG_VERSION
-  , vg_EXTENSIONS       = VG_EXTENSIONS
-  }
-
--- end of file
-
diff --git a/src/Graphics/Rendering/OpenVG/VG/DrawingContext.hs b/src/Graphics/Rendering/OpenVG/VG/DrawingContext.hs
--- a/src/Graphics/Rendering/OpenVG/VG/DrawingContext.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/DrawingContext.hs
@@ -27,20 +27,9 @@
 
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( VGenum )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( 
-        vgGetError, vgFlush, vgFinish ) 
 
-import Graphics.Rendering.OpenVG.VG.Constants (
-      vg_NO_ERROR, 
-      vg_BAD_HANDLE_ERROR, 
-      vg_ILLEGAL_ARGUMENT_ERROR,
-      vg_OUT_OF_MEMORY_ERROR, 
-      vg_PATH_CAPABILITY_ERROR,
-      vg_UNSUPPORTED_IMAGE_FORMAT_ERROR, 
-      vg_UNSUPPORTED_PATH_FORMAT_ERROR,
-      vg_IMAGE_IN_USE_ERROR,
-      vg_NO_CONTEXT_ERROR ) 
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGenum )
+import Graphics.Rendering.OpenVG.Raw.VG.DrawingContext
 
 import Control.Monad ( liftM )
 
diff --git a/src/Graphics/Rendering/OpenVG/VG/Extending.hs b/src/Graphics/Rendering/OpenVG/VG/Extending.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Extending.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Extending.hs
@@ -22,10 +22,9 @@
   stringId,
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( VGenum )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( vgGetString ) 
-import Graphics.Rendering.OpenVG.VG.Constants (
-    vg_VENDOR, vg_RENDERER, vg_VERSION, vg_EXTENSIONS ) 
+
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGenum )
+import Graphics.Rendering.OpenVG.Raw.VG.Extending
 
 import Data.StateVar (
    GettableStateVar, makeGettableStateVar )
diff --git a/src/Graphics/Rendering/OpenVG/VG/Images.hs b/src/Graphics/Rendering/OpenVG/VG/Images.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Images.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Images.hs
@@ -25,7 +25,10 @@
   ImageFormat(..),
   
   -- * Creating and destroying images
-  maxImageWidth, maxImageHeight, maxImagePixels, maxImageBytes,
+  maxImageWidth, 
+  maxImageHeight, 
+  maxImagePixels, 
+  maxImageBytes,
   
   createImage, 
   destroyImage, 
@@ -33,12 +36,15 @@
   
   
   -- * Querying images
-  imageFormat, imageWidth, imageHeight,
+  imageFormat, 
+  imageWidth, 
+  imageHeight,
   
   -- * Reading and writing image pixels
   clearImage,
    
-  imageSubData, getImageSubData,
+  imageSubData, 
+  getImageSubData,
   
   -- * Copying pixels between images
   copyImage, 
@@ -49,47 +55,22 @@
   drawImage,
   
   -- * Reading and writing drawing surface pixels
-  setPixels, writePixels, getPixels, readPixels, 
+  setPixels, 
+  writePixels, 
+  getPixels, 
+  readPixels, 
   
   -- * Copying portions of the drawing surface
-  copyPixels,
-  
+  copyPixels
      
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( 
-    VGenum, VGint, VGImage )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( 
-    vgCreateImage, vgDestroyImage, vgClearImage,
-    vgImageSubData, vgGetImageSubData, 
-    vgCopyImage, vgDrawImage, 
-    vgSetPixels, vgWritePixels, vgGetPixels, vgReadPixels, vgCopyPixels )
-import Graphics.Rendering.OpenVG.VG.Constants (
-    vg_sRGBX_8888, vg_sRGBA_8888, vg_sRGBA_8888_PRE, vg_sRGB_565,
-    vg_sRGBA_5551, vg_sRGBA_4444, vg_sL_8, vg_lRGBX_8888,
-    vg_lRGBA_8888, vg_lRGBA_8888_PRE, vg_lL_8, vg_A_8, vg_BW_1,
 
-    vg_sXRGB_8888, vg_sARGB_8888, vg_sARGB_8888_PRE, vg_sARGB_1555,
-    vg_sARGB_4444, vg_lXRGB_8888, vg_lARGB_8888, vg_lARGB_8888_PRE,
-    vg_sBGRX_8888, vg_sBGRA_8888, vg_sBGRA_8888_PRE, vg_sBGR_565,
-    vg_sBGRA_5551, vg_sBGRA_4444, vg_lBGRX_8888, vg_lBGRA_8888,
-    vg_lBGRA_8888_PRE, vg_sXBGR_8888, vg_sABGR_8888,
-    vg_sABGR_8888_PRE, vg_sABGR_1555, vg_sABGR_4444, vg_lXBGR_8888,
-    vg_lABGR_8888, vg_lABGR_8888_PRE,
-    
-    vg_IMAGE_QUALITY_NONANTIALIASED, vg_IMAGE_QUALITY_FASTER, 
-    vg_IMAGE_QUALITY_BETTER, 
-    vg_IMAGE_FORMAT, vg_IMAGE_WIDTH, vg_IMAGE_HEIGHT,
-    vg_DRAW_IMAGE_NORMAL, vg_DRAW_IMAGE_MULTIPLY, vg_DRAW_IMAGE_STENCIL )
-
-import Graphics.Rendering.OpenVG.VG.Parameters ( 
-    seti, geti, getParameteri, 
-    ParamType ( ImageQuality, ImageMode,
-                MaxImageWidth, MaxImageHeight, 
-                MaxImagePixels, MaxImageBytes ) )
-
-import Graphics.Rendering.OpenVG.VG.Utils ( bitwiseOr, unSizeM, marshalBool )
+import Graphics.Rendering.OpenVG.VG.Parameters
+import Graphics.Rendering.OpenVG.VG.Utils ( bitwiseOr, marshalBool, unSizeM )
 
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGenum, VGint, VGImage )
+import Graphics.Rendering.OpenVG.Raw.VG.Images
 
 import Graphics.Rendering.OpenGL.GL.CoordTrans ( Position(..), Size (..) )  
 
diff --git a/src/Graphics/Rendering/OpenVG/VG/Paint.hs b/src/Graphics/Rendering/OpenVG/VG/Paint.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Paint.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Paint.hs
@@ -18,11 +18,13 @@
 
 module Graphics.Rendering.OpenVG.VG.Paint (
   -- * Creating and destroying paint objects 
-  createPaint, destroyPaint, 
+  createPaint, 
+  destroyPaint, 
   withPaint,
   
   -- * Setting the current paint 
-  setPaint, getPaint,
+  setPaint, 
+  getPaint,
   
   -- * Setting paint parameters
   PaintType(..), 
@@ -44,34 +46,16 @@
   
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( 
-    VGenum, VGint, VGfloat, VGImage, VGPaint )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( 
-    vgCreatePaint, vgDestroyPaint, 
-    vgSetPaint,
-    vgPaintPattern )
-    
-import Graphics.Rendering.OpenVG.VG.Constants (
-    vg_PAINT_TYPE, vg_PAINT_COLOR, vg_PAINT_COLOR_RAMP_SPREAD_MODE, 
-    vg_PAINT_COLOR_RAMP_STOPS, vg_PAINT_COLOR_RAMP_PREMULTIPLIED, 
-    vg_PAINT_LINEAR_GRADIENT, vg_PAINT_RADIAL_GRADIENT, 
-    vg_PAINT_PATTERN_TILING_MODE,
 
-    vg_PAINT_TYPE_COLOR, vg_PAINT_TYPE_LINEAR_GRADIENT, 
-    vg_PAINT_TYPE_RADIAL_GRADIENT, vg_PAINT_TYPE_PATTERN,
 
-    vg_COLOR_RAMP_SPREAD_PAD, vg_COLOR_RAMP_SPREAD_REPEAT, 
-    vg_COLOR_RAMP_SPREAD_REFLECT,
-            
-    vg_TILE_FILL, vg_TILE_PAD, vg_TILE_REPEAT, vg_TILE_REFLECT )
 
-import Graphics.Rendering.OpenVG.VG.Parameters ( 
-    ParamType( MaxColorRampStops ),
-    geti, getParameteri, 
-    setParameteri, setParameterfv ) 
-    
-import Graphics.Rendering.OpenVG.VG.Paths ( PaintMode(..), marshalPaintMode )
+import Graphics.Rendering.OpenVG.VG.Parameters
+import Graphics.Rendering.OpenVG.VG.Paths ( PaintMode, marshalPaintMode )
 import Graphics.Rendering.OpenVG.VG.Utils ( bitwiseOr, marshalBool )
+
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( 
+    VGenum, VGint, VGfloat, VGImage, VGPaint )
+import Graphics.Rendering.OpenVG.Raw.VG.Paint
 
 import Graphics.Rendering.OpenGL.GL.VertexSpec ( Color4(..) )
 
diff --git a/src/Graphics/Rendering/OpenVG/VG/Parameters.hs b/src/Graphics/Rendering/OpenVG/VG/Parameters.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Parameters.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Parameters.hs
@@ -18,36 +18,38 @@
 --------------------------------------------------------------------------------
 
 module Graphics.Rendering.OpenVG.VG.Parameters (    
-    ParamType(..), marshalParamType,
-    setf, seti, setfv, setiv,
-    getf, geti, getVectorSize, getfv, getiv,
-    setParameterf, setParameteri, setParameterfv, setParameteriv,
-    getParameterf, getParameteri, getParameterVectorSize,
-    getParameterfv, getParameteriv
+  ParamType(..), 
+  marshalParamType,
+
+  -- * Setting and querying context parameter values
+  setf, 
+  seti, 
+  setfv, 
+  setiv,
+  getf, 
+  geti, 
+  getVectorSize, 
+  getfv, 
+  getiv,
+
+  -- * Setting and querying object parameters
+  setParameterf, 
+  setParameteri, 
+  setParameterfv, 
+  setParameteriv,
+  getParameterf, 
+  getParameteri, 
+  getParameterVectorSize,
+  getParameterfv, 
+  getParameteriv
+
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( 
-    VGenum, VGfloat, VGint, VGHandle )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( 
-    vgSetf, vgSeti, vgSetfv, vgSetiv,
-    vgGetf, vgGeti, vgGetVectorSize, vgGetfv, vgGetiv,
-     
-    vgSetParameterf, vgSetParameteri, vgSetParameterfv, vgSetParameteriv, 
-    vgGetParameterf, vgGetParameteri, vgGetParameterVectorSize,
-    vgGetParameterfv, vgGetParameteriv )
-    
-import Graphics.Rendering.OpenVG.VG.Constants (
-    vg_MATRIX_MODE, vg_FILL_RULE, vg_IMAGE_QUALITY, vg_RENDERING_QUALITY,
-    vg_BLEND_MODE, vg_IMAGE_MODE, vg_SCISSOR_RECTS, vg_STROKE_LINE_WIDTH,
-    vg_STROKE_CAP_STYLE, vg_STROKE_JOIN_STYLE, vg_STROKE_MITER_LIMIT,
-    vg_STROKE_DASH_PATTERN, vg_STROKE_DASH_PHASE, vg_STROKE_DASH_PHASE_RESET,
-    vg_TILE_FILL_COLOR, vg_CLEAR_COLOR, vg_MASKING,
-    vg_SCISSORING, vg_PIXEL_LAYOUT, vg_SCREEN_LAYOUT, vg_FILTER_FORMAT_LINEAR,
-    vg_FILTER_FORMAT_PREMULTIPLIED, vg_FILTER_CHANNEL_MASK, 
-    vg_MAX_SCISSOR_RECTS, vg_MAX_DASH_COUNT, vg_MAX_KERNEL_SIZE,
-    vg_MAX_SEPARABLE_KERNEL_SIZE, vg_MAX_COLOR_RAMP_STOPS,
-    vg_MAX_IMAGE_WIDTH, vg_MAX_IMAGE_HEIGHT, vg_MAX_IMAGE_PIXELS,
-    vg_MAX_IMAGE_BYTES, vg_MAX_FLOAT, vg_MAX_GAUSSIAN_STD_DEVIATION )
+
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( 
+    VGint, VGfloat, VGenum, VGHandle )
+import Graphics.Rendering.OpenVG.Raw.VG.Parameters
+
 
 import Foreign.Marshal.Array ( newArray, peekArray ) 
 
diff --git a/src/Graphics/Rendering/OpenVG/VG/Paths.hs b/src/Graphics/Rendering/OpenVG/VG/Paths.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Paths.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Paths.hs
@@ -5,7 +5,7 @@
 --------------------------------------------------------------------------------
 -- |
 -- Module      :  Graphics.Rendering.OpenVG.VG.Paths
--- Copyright   :  (c) Stephen Tetley 2008, 2009
+-- Copyright   :  (c) Stephen Tetley 2008, 2009, 2010
 -- License     :  BSD3
 --
 -- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
@@ -15,9 +15,7 @@
 -- This module corresponds to section 8 (Paths) 
 -- of the OpenVG 1.0.1 specs.
 --
--- \*\* WARNING - this module is due to be changed significantly 
--- in the next revision so that it is closer to the original 
--- OpenVG API.
+-- \*\* WARNING - this module is due to be changed significantly.
 --
 -- This is unfortunate as the module defines the most significant 
 -- data types for vectors - the @Paths@. \*\*
@@ -25,20 +23,29 @@
 --
 --------------------------------------------------------------------------------
 
+
 module Graphics.Rendering.OpenVG.VG.Paths (
   -- * Datatypes
   PathDatatype(..),
   PathAbsRel(..),
+  PathSegment(..),
   PathCommand(..),
   
   
   -- * Creating and destroying paths
   PathCapabilities(..),
   withPath,
-  createPath, clearPath, destroyPath,
+  createPath, 
+  clearPath, 
+  destroyPath,
 
   -- * Path queries
-  format, datatype, pathScale, bias, numSegments, numCoords,
+  format, 
+  datatype, 
+  pathScale, 
+  bias, 
+  numSegments, 
+  numCoords,
 
   -- * Querying and modifying path capabilities
   getPathCapabilities, 
@@ -62,76 +69,36 @@
   
   -- * Setting stroke parameters
   lineWidth,
-  CapStyle(..), capStyle,
-  JoinStyle(..), joinStyle,
+  CapStyle(..), 
+  capStyle,
+  JoinStyle(..), 
+  joinStyle,
   miterLimit,
   maxDashCount, 
-  dashPattern, disableDashPattern,
+  dashPattern, 
+  disableDashPattern,
   dashPhase,
   dashPhaseReset,
   
   -- * Filling or stroking a path
-  FillRule(..),  fillRule,
-  PaintMode(..), marshalPaintMode,
+  FillRule(..),
+  fillRule,
+  PaintMode(..),
+  marshalPaintMode,
   drawPath,
   fillPath,
   strokePath,
   fillStrokePath
+
 ) where
 
+import Graphics.Rendering.OpenVG.VG.Parameters
+import Graphics.Rendering.OpenVG.VG.Utils ( 
+    bitwiseOr, unbits32, unmarshalBool, marshalBool )
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( 
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( 
     VGenum, VGint, VGfloat, VGPath )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( 
-    vgCreatePath, vgClearPath, vgDestroyPath, 
-    vgRemovePathCapabilities, vgGetPathCapabilities, 
-    vgAppendPath, vgAppendPathData, vgModifyPathCoords,
-    vgTransformPath, vgInterpolatePath,    
-    vgDrawPath )
-import Graphics.Rendering.OpenVG.VG.Constants ( 
-    vg_PATH_DATATYPE_S_8, vg_PATH_DATATYPE_S_16,
-    vg_PATH_DATATYPE_S_32, vg_PATH_DATATYPE_F,
-    vg_PATH_FORMAT_STANDARD,
-    
-    vg_CLOSE_PATH, 
-    vg_MOVE_TO_ABS, vg_MOVE_TO_REL,
-    vg_LINE_TO_ABS, vg_LINE_TO_REL,
-    vg_HLINE_TO_ABS, vg_HLINE_TO_REL,
-    vg_VLINE_TO_ABS, vg_VLINE_TO_REL,
-    vg_QUAD_TO_ABS, vg_QUAD_TO_REL,
-    vg_CUBIC_TO_ABS, vg_CUBIC_TO_REL,
-    vg_SQUAD_TO_ABS, vg_SQUAD_TO_REL,
-    vg_SCUBIC_TO_ABS, vg_SCUBIC_TO_REL,
-    vg_SCCWARC_TO_ABS, vg_SCCWARC_TO_REL,
-    vg_SCWARC_TO_ABS, vg_SCWARC_TO_REL,
-    vg_LCCWARC_TO_ABS, vg_LCCWARC_TO_REL,
-    vg_LCWARC_TO_ABS, vg_LCWARC_TO_REL,
-    
-    vg_PATH_CAPABILITY_APPEND_FROM, vg_PATH_CAPABILITY_APPEND_TO,
-    vg_PATH_CAPABILITY_MODIFY, vg_PATH_CAPABILITY_TRANSFORM_FROM,
-    vg_PATH_CAPABILITY_TRANSFORM_TO, vg_PATH_CAPABILITY_INTERPOLATE_FROM, 
-    vg_PATH_CAPABILITY_INTERPOLATE_TO, vg_PATH_CAPABILITY_PATH_LENGTH, 
-    vg_PATH_CAPABILITY_POINT_ALONG_PATH, vg_PATH_CAPABILITY_TANGENT_ALONG_PATH, 
-    vg_PATH_CAPABILITY_PATH_BOUNDS, vg_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS,
-    vg_PATH_CAPABILITY_ALL, 
-    
-    vg_PATH_FORMAT, vg_PATH_DATATYPE, vg_PATH_SCALE, vg_PATH_BIAS, 
-    vg_PATH_NUM_SEGMENTS, vg_PATH_NUM_COORDS,
-    vg_CAP_BUTT, vg_CAP_ROUND, vg_CAP_SQUARE,
-    vg_JOIN_MITER, vg_JOIN_ROUND, vg_JOIN_BEVEL,
-    vg_EVEN_ODD, vg_NON_ZERO,
-    vg_STROKE_PATH, vg_FILL_PATH  )
-import Graphics.Rendering.OpenVG.VG.Parameters ( 
-    ParamType ( FillRule, 
-                StrokeLineWidth, StrokeCapStyle,
-                StrokeJoinStyle, StrokeMiterLimit, 
-                StrokeDashPattern, 
-                StrokeDashPhase, StrokeDashPhaseReset,
-                MaxDashCount ),
-    getParameteri, getParameterf, seti, setf, setfv, geti )     
-    
-import Graphics.Rendering.OpenVG.VG.Utils ( 
-    bitwiseOr, unbits32, marshalBool, unmarshalBool )
+import Graphics.Rendering.OpenVG.Raw.VG.Paths
 
 import Data.StateVar (
     SettableStateVar, makeSettableStateVar,
@@ -159,19 +126,32 @@
 
 -- | 'PathAbsRel' enumerates the path addressing types, 
 -- @absolute@ or @relative@. 
+--
 data PathAbsRel = 
      Absolute
    | Relative
    deriving ( Eq, Ord, Show )
 
--- There is no Haskell equivalent to @VGPathSegment@. 
--- It is subsumed by PathCommand 
+data PathSegment = 
+     ClosePath
+   | MoveTo 
+   | LineTo 
+   | HLineTo 
+   | VLineTo
+   | QuadTo 
+   | CubicTo 
+   | SQuadTo 
+   | SCubicTo 
+   | SCCWArcTo 
+   | SCWArcTo 
+   | LCCWArcTo 
+   | LCWArcTo
+   deriving ( Eq, Ord, Show )
 
 -- | 'PathCommand' corresponds to the OpenVG enumeration @VGPathCommand@,
 -- but includes ClosePath aka @VG_CLOSE_PATH@.      
 data PathCommand = 
-     ClosePath
-   | MoveToAbs
+     MoveToAbs
    | MoveToRel
    | LineToAbs
    | LineToRel
@@ -328,7 +308,21 @@
 instance StorablePathData Int16
 instance StorablePathData Int32
 instance StorablePathData VGfloat
-    
+
+data PathData = S_8     Int8
+              | S_16    Int16
+              | S_32    Int32
+              | F_float Float
+  deriving (Eq,Ord,Show)
+
+{-
+-- final ptr is @const void * pathData@ 
+
+appendPathData :: VGPath -> VGint -> Ptr VGubyte -> Ptr a -> IO ()
+appendPathData = vgAppendPathData
+-}
+
+
 -- | @appendPathData@ - TODO is this implementation valid?
 appendPathData :: StorablePathData a => VGPath -> [PathCommand] -> [a] -> IO ()
 appendPathData h cs ds = do 
@@ -478,10 +472,26 @@
     | otherwise = error ("unmarshalPathDatatype: illegal value " ++ show x)
 
 
+marshalPathSegment :: PathSegment -> VGenum
+marshalPathSegment x = case x of
+    ClosePath -> vg_CLOSE_PATH
+    MoveTo    -> vg_MOVE_TO
+    LineTo    -> vg_LINE_TO
+    HLineTo   -> vg_HLINE_TO
+    VLineTo   -> vg_VLINE_TO
+    QuadTo    -> vg_QUAD_TO
+    CubicTo   -> vg_CUBIC_TO
+    SQuadTo   -> vg_SQUAD_TO
+    SCubicTo  -> vg_SCUBIC_TO
+    SCCWArcTo -> vg_SCCWARC_TO
+    SCWArcTo  -> vg_SCWARC_TO
+    LCCWArcTo -> vg_LCCWARC_TO
+    LCWArcTo  -> vg_LCWARC_TO
+ 
 
+
 marshalPathCommand :: PathCommand -> VGenum
 marshalPathCommand x = case x of
-    ClosePath    -> vg_CLOSE_PATH
     MoveToAbs    -> vg_MOVE_TO_ABS
     MoveToRel    -> vg_MOVE_TO_REL
     LineToAbs    -> vg_LINE_TO_ABS
@@ -540,7 +550,8 @@
     | x == vg_PATH_CAPABILITY_PATH_BOUNDS             = PathBounds 
     | x == vg_PATH_CAPABILITY_PATH_TRANSFORMED_BOUNDS = PathTransfomedBounds 
     | x == vg_PATH_CAPABILITY_ALL                     = CapabilityAll 
-    | otherwise = error ("unmarshalPathCapabilities: illegal value " ++ show x)
+    | otherwise                                       = error $ 
+          "unmarshalPathCapabilities: illegal value " ++ show x
         
  
 marshalCapStyle :: CapStyle -> VGenum
diff --git a/src/Graphics/Rendering/OpenVG/VG/RenderingQuality.hs b/src/Graphics/Rendering/OpenVG/VG/RenderingQuality.hs
--- a/src/Graphics/Rendering/OpenVG/VG/RenderingQuality.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/RenderingQuality.hs
@@ -38,29 +38,14 @@
   scale, 
   shear, 
   rotate
+
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( 
-    VGfloat, VGenum )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( 
-    vgLoadIdentity, vgLoadMatrix, vgGetMatrix, vgMultMatrix, 
-    vgTranslate, vgScale, vgShear, vgRotate
-    )
-import Graphics.Rendering.OpenVG.VG.Constants (
-    vg_RENDERING_QUALITY_NONANTIALIASED, vg_RENDERING_QUALITY_FASTER,
-    vg_RENDERING_QUALITY_BETTER,
-    --
-    vg_PIXEL_LAYOUT_UNKNOWN, 
-    vg_PIXEL_LAYOUT_RGB_VERTICAL, vg_PIXEL_LAYOUT_BGR_VERTICAL,
-    vg_PIXEL_LAYOUT_RGB_HORIZONTAL, vg_PIXEL_LAYOUT_BGR_HORIZONTAL,
-    --
-    vg_MATRIX_PATH_USER_TO_SURFACE, vg_MATRIX_IMAGE_USER_TO_SURFACE, 
-    vg_MATRIX_FILL_PAINT_TO_USER, vg_MATRIX_STROKE_PAINT_TO_USER, 
-    )  
-import Graphics.Rendering.OpenVG.VG.Parameters ( 
-    ParamType ( MatrixMode, RenderingQuality, ScreenLayout ), 
-    seti, geti  )
+import Graphics.Rendering.OpenVG.VG.Parameters
 
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGenum, VGfloat )
+import Graphics.Rendering.OpenVG.Raw.VG.RenderingQuality
+
 import Data.StateVar (
     StateVar(), makeStateVar, SettableStateVar, makeSettableStateVar )   
 
@@ -147,6 +132,10 @@
 loadIdentity :: IO ()
 loadIdentity = vgLoadIdentity
 
+-- NOTE
+-- See Graphics.Rendering.OpenGL.GL.CoordTrans
+
+
 -- | Set the current matrix to the supplied matrix.
 --
 -- 'loadMatrix' corresponds to the OpenVG function @vgLoadMatrix@.
@@ -232,7 +221,8 @@
     | x == vg_PIXEL_LAYOUT_BGR_VERTICAL   = BgrVertical 
     | x == vg_PIXEL_LAYOUT_RGB_HORIZONTAL = RgbHorizontal 
     | x == vg_PIXEL_LAYOUT_BGR_HORIZONTAL = BgrHorizontal 
-    | otherwise = error ("unmarshalPixelLayout: illegal value " ++ show x)
+    | otherwise                           = error  $ 
+          "unmarshalPixelLayout: illegal value " ++ show x
     
     
 marshalMatrixMode :: MatrixMode -> VGenum
diff --git a/src/Graphics/Rendering/OpenVG/VG/Scissoring.hs b/src/Graphics/Rendering/OpenVG/VG/Scissoring.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Scissoring.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Scissoring.hs
@@ -26,21 +26,22 @@
   -- * Alpha masking
   MaskOperation(..),
   alphaMasking,
+  mask,
   
   -- * Fast clearing
   clearColor,
   clear  
+
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( VGint, VGfloat )
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( vgClear )
-import Graphics.Rendering.OpenVG.VG.Parameters ( 
-    ParamType ( Scissoring, ScissorRects, MaxScissorRects, 
-                Masking, ClearColor ),   
-    seti, geti, setiv, setfv )
 
-import Graphics.Rendering.OpenVG.VG.Utils ( unSize, unSizeM, marshalBool )
+import Graphics.Rendering.OpenVG.VG.Parameters
+import Graphics.Rendering.OpenVG.VG.Utils ( marshalBool, unSize, unSizeM )
 
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( 
+    VGint, VGfloat, VGenum, VGImage )
+import Graphics.Rendering.OpenVG.Raw.VG.Scissoring
+
 import Graphics.Rendering.OpenGL.GL.CoordTrans ( Position(..), Size(..) )
 import Graphics.Rendering.OpenGL.GL.VertexSpec ( Color4(..) )
 
@@ -102,7 +103,12 @@
 alphaMasking :: SettableStateVar Bool
 alphaMasking = makeSettableStateVar $ seti Masking . marshalBool
 
--- vgMask not implemented in shiva-vg
+-- | Modify the alpha mask values according to the supplied
+-- 'MaskOperation'.
+--
+mask :: VGImage -> MaskOperation -> Position -> Size -> IO ()
+mask img mop (Position x y) = 
+    unSizeM $ vgMask img (marshalMaskOperation mop) x y
 
 --------------------------------------------------------------------------------
 -- Fast clearing
@@ -127,16 +133,15 @@
 
 --------------------------------------------------------------------------------
 
-{-
--- Defined but not (YET) used: marshalMaskOperation
+
 marshalMaskOperation :: MaskOperation -> VGenum
 marshalMaskOperation x = case x of
-    ClearMask -> vg_CLEAR_MASK
-    FillMask -> vg_FILL_MASK
-    SetMask -> vg_SET_MASK
-    UnionMask -> vg_UNION_MASK
+    ClearMask     -> vg_CLEAR_MASK
+    FillMask      -> vg_FILL_MASK
+    SetMask       -> vg_SET_MASK
+    UnionMask     -> vg_UNION_MASK
     IntersectMask -> vg_INTERSECT_MASK
-    SubtractMask -> vg_SUBTRACT_MASK
--}
+    SubtractMask  -> vg_SUBTRACT_MASK
+
 
 
diff --git a/src/Graphics/Rendering/OpenVG/VG/ShivaExtensions.hs b/src/Graphics/Rendering/OpenVG/VG/ShivaExtensions.hs
--- a/src/Graphics/Rendering/OpenVG/VG/ShivaExtensions.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/ShivaExtensions.hs
@@ -25,15 +25,13 @@
 
 ) where
 
-import Graphics.Rendering.OpenVG.VG.CFunDecls ( 
-        vgCreateContextSH, vgResizeSurfaceSH, vgDestroyContextSH ) 
-
-import Graphics.Rendering.OpenVG.VG.Utils ( unSizeM, unmarshalBool )
+import Graphics.Rendering.OpenVG.VG.Utils ( unmarshalBool, unSizeM )
 
+import Graphics.Rendering.OpenVG.Raw.VG.ShivaExtensions
 
 import Graphics.Rendering.OpenGL.GL.CoordTrans ( Size(..) )
 
-import Control.Applicative
+import Control.Monad ( liftM )
 
 
 
@@ -41,7 +39,8 @@
 -- OpenGL context.
 --
 createContextSH :: Size -> IO Bool
-createContextSH = unSizeM $ \w h -> unmarshalBool <$> vgCreateContextSH w h
+createContextSH = unSizeM $ \w h -> 
+    liftM unmarshalBool $ vgCreateContextSH w h
 
 -- | 'resizeSurfaceSH' should be called whenever the size of the 
 -- surface changes.    
diff --git a/src/Graphics/Rendering/OpenVG/VG/Utils.hs b/src/Graphics/Rendering/OpenVG/VG/Utils.hs
--- a/src/Graphics/Rendering/OpenVG/VG/Utils.hs
+++ b/src/Graphics/Rendering/OpenVG/VG/Utils.hs
@@ -22,16 +22,14 @@
 
   ) where
 
-
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( 
-        VGint, VGenum, VGbitfield, VGboolean, vg_TRUE, vg_FALSE )
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( 
+    VGboolean, VGenum, VGint, VGbitfield, 
+    vg_TRUE, vg_FALSE )
 
 import Graphics.Rendering.OpenGL.GL.CoordTrans ( Size(..) )
 
 
 import Data.Bits
-
-
 
 
 marshalBool :: Bool -> VGboolean
diff --git a/src/Graphics/Rendering/OpenVG/VGU/CInternals.hsc b/src/Graphics/Rendering/OpenVG/VGU/CInternals.hsc
deleted file mode 100644
--- a/src/Graphics/Rendering/OpenVG/VGU/CInternals.hsc
+++ /dev/null
@@ -1,115 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE ForeignFunctionInterface   #-}
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Graphics.Rendering.OpenVG.VGU.CInternals
--- Copyright   :  (c) Stephen Tetley 2008, 2009
--- License     :  BSD3
---
--- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
--- Stability   :  highly unstable
--- Portability :  GHC
---
--- Internal module declaring all the datatypes and foreign declarations 
--- defined in <vg/openvgu.h>.
---
---
---------------------------------------------------------------------------------
-
-module Graphics.Rendering.OpenVG.VGU.CInternals where
-
-#include <vg/vgu.h>
-
-import Graphics.Rendering.OpenVG.VG.BasicTypes
-
-import Foreign.Ptr ( Ptr )
-
-type VGUErrorCode' = VGenum
-
--- | Enumerations
-
-#{enum VGenum,
-  , vgu_NO_ERROR                        = VGU_NO_ERROR
-  , vgu_BAD_HANDLE_ERROR                = VGU_BAD_HANDLE_ERROR
-  , vgu_ILLEGAL_ARGUMENT_ERROR          = VGU_ILLEGAL_ARGUMENT_ERROR
-  , vgu_OUT_OF_MEMORY_ERROR             = VGU_OUT_OF_MEMORY_ERROR
-  , vgu_PATH_CAPABILITY_ERROR           = VGU_PATH_CAPABILITY_ERROR
-  , vgu_BAD_WARP_ERROR                  = VGU_BAD_WARP_ERROR
-  }
-
-#{enum VGenum,
-  , vgu_ARC_OPEN                        = VGU_ARC_OPEN
-  , vgu_ARC_CHORD                       = VGU_ARC_CHORD
-  , vgu_ARC_PIE                         = VGU_ARC_PIE
-} 
-  
-
-foreign import ccall unsafe "vg/openvg.h vguLine" 
-    vguLine :: VGPath 
-            -> VGfloat -> VGfloat -> VGfloat -> VGfloat 
-            -> IO VGUErrorCode'
-
-foreign import ccall unsafe "vg/openvg.h vguPolygon"
-    vguPolygon :: VGPath 
-               -> Ptr VGfloat -> VGint -> VGboolean 
-               -> IO VGUErrorCode' 
-
-foreign import ccall unsafe "vg/openvg.h vguRect"
-    vguRect :: VGPath 
-            -> VGfloat -> VGfloat -> VGfloat -> VGfloat 
-            -> IO VGUErrorCode'     
-
-foreign import ccall unsafe "vg/openvg.h vguRoundRect"
-    vguRoundRect :: VGPath 
-                 -> VGfloat -> VGfloat -> VGfloat -> VGfloat
-                 -> VGfloat -> VGfloat 
-                 -> IO VGUErrorCode'  
-
-foreign import ccall unsafe "vg/openvg.h vguEllipse"
-    vguEllipse :: VGPath 
-               -> VGfloat -> VGfloat -> VGfloat -> VGfloat 
-               -> IO VGUErrorCode'  
-
-foreign import ccall unsafe "vg/openvg.h vguArc"
-    vguArc :: VGPath 
-           -> VGfloat -> VGfloat -> VGfloat -> VGfloat
-           -> VGfloat -> VGfloat
-           -> VGenum 
-           -> IO VGUErrorCode'  
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vguComputeWarpQuadToSquare"
-    vguComputeWarpQuadToSquare :: VGfloat -> VGfloat 
-                               -> VGfloat -> VGfloat
-                               -> VGfloat -> VGfloat
-                               -> VGfloat -> VGfloat
-                               -> Ptr VGfloat
-                               -> IO VGUErrorCode'  
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vguComputeWarpSquareToQuad"
-    vguComputeWarpSquareToQuad :: VGfloat -> VGfloat 
-                               -> VGfloat -> VGfloat
-                               -> VGfloat -> VGfloat
-                               -> VGfloat -> VGfloat
-                               -> Ptr VGfloat
-                               -> IO VGUErrorCode'  
-
--- Stubbed in shivaVG 0.2.1 (not implemented)
-foreign import ccall unsafe "vg/openvg.h vguComputeWarpQuadToQuad"
-    vguComputeWarpQuadToQuad :: VGfloat -> VGfloat 
-                             -> VGfloat -> VGfloat
-                             -> VGfloat -> VGfloat
-                             -> VGfloat -> VGfloat
-                             -> VGfloat -> VGfloat 
-                             -> VGfloat -> VGfloat
-                             -> VGfloat -> VGfloat
-                             -> VGfloat -> VGfloat
-                             -> Ptr VGfloat
-                             -> IO VGUErrorCode'  
-
-
-
--- end of file
diff --git a/src/Graphics/Rendering/OpenVG/VGU/ErrorsInternal.hs b/src/Graphics/Rendering/OpenVG/VGU/ErrorsInternal.hs
--- a/src/Graphics/Rendering/OpenVG/VGU/ErrorsInternal.hs
+++ b/src/Graphics/Rendering/OpenVG/VGU/ErrorsInternal.hs
@@ -2,7 +2,7 @@
 
 --------------------------------------------------------------------------------
 -- |
--- Module      :  Graphics.Rendering.OpenVG.VG.Errors
+-- Module      :  Graphics.Rendering.OpenVG.VG.ErrorsInternal
 -- Copyright   :  (c) Stephen Tetley 2008, 2009
 -- License     :  BSD3
 --
@@ -12,7 +12,6 @@
 --
 -- VGU error codes.
 --
--- Portions of code have been copied from 
 -- 
 --------------------------------------------------------------------------------
 
@@ -22,8 +21,8 @@
    unmarshalErrorCode
 ) where
 
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( VGenum )
-import Graphics.Rendering.OpenVG.VGU.CInternals
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGenum )
+import Graphics.Rendering.OpenVG.Raw.VGU.VGU
 
 import Control.Monad ( liftM )
 
diff --git a/src/Graphics/Rendering/OpenVG/VGU/VGU.hs b/src/Graphics/Rendering/OpenVG/VGU/VGU.hs
--- a/src/Graphics/Rendering/OpenVG/VGU/VGU.hs
+++ b/src/Graphics/Rendering/OpenVG/VGU/VGU.hs
@@ -26,10 +26,13 @@
   arc
 ) where
 
-
-import Graphics.Rendering.OpenVG.VG.BasicTypes ( VGfloat, VGenum, VGPath )
 import Graphics.Rendering.OpenVG.VG.Utils ( marshalBool )
-import Graphics.Rendering.OpenVG.VGU.CInternals
+
+import Graphics.Rendering.OpenVG.Raw.VG.Core101 (
+    VGenum, VGfloat, VGPath )
+
+import Graphics.Rendering.OpenVG.Raw.VGU.VGU
+
 import Graphics.Rendering.OpenVG.VGU.ErrorsInternal ( 
         VGU_ErrorCode, withErrorCode )
 
