diff --git a/Graphics/Rendering/OpenGL/GL.hs b/Graphics/Rendering/OpenGL/GL.hs
--- a/Graphics/Rendering/OpenGL/GL.hs
+++ b/Graphics/Rendering/OpenGL/GL.hs
@@ -58,8 +58,8 @@
 --   module Graphics.Rendering.OpenGL.GL.QueryObjects,
 
    -- * State and State Requests
-   module Data.StateVar,
-   module Data.Tensor,
+   module Graphics.Rendering.OpenGL.GL.StateVar,
+   module Graphics.Rendering.OpenGL.GL.Tensor,
    module Graphics.Rendering.OpenGL.GL.StringQueries,
    module Graphics.Rendering.OpenGL.GL.SavingState
 ) where
@@ -106,7 +106,7 @@
 -- is exported through PerFragment for backwards compatibility reasons
 --import Graphics.Rendering.OpenGL.GL.QueryObjects
 
-import Data.StateVar
-import Data.Tensor
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.StringQueries
 import Graphics.Rendering.OpenGL.GL.SavingState
diff --git a/Graphics/Rendering/OpenGL/GL/Antialiasing.hs b/Graphics/Rendering/OpenGL/GL/Antialiasing.hs
--- a/Graphics/Rendering/OpenGL/GL/Antialiasing.hs
+++ b/Graphics/Rendering/OpenGL/GL/Antialiasing.hs
@@ -17,7 +17,7 @@
    sampleBuffers, samples, multisample, subpixelBits
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.Core31
diff --git a/Graphics/Rendering/OpenGL/GL/BeginEnd.hs b/Graphics/Rendering/OpenGL/GL/BeginEnd.hs
--- a/Graphics/Rendering/OpenGL/GL/BeginEnd.hs
+++ b/Graphics/Rendering/OpenGL/GL/BeginEnd.hs
@@ -23,7 +23,7 @@
    edgeFlag
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.EdgeFlag
 import Graphics.Rendering.OpenGL.GL.Exception
 import Graphics.Rendering.OpenGL.GL.PrimitiveMode
diff --git a/Graphics/Rendering/OpenGL/GL/Bitmaps.hs b/Graphics/Rendering/OpenGL/GL/Bitmaps.hs
--- a/Graphics/Rendering/OpenGL/GL/Bitmaps.hs
+++ b/Graphics/Rendering/OpenGL/GL/Bitmaps.hs
@@ -16,11 +16,11 @@
    bitmap
 ) where
 
-import Data.Tensor
 import Foreign.Ptr
 import Graphics.Rendering.OpenGL.Raw.Core31
 import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility ( glBitmap )
 import Graphics.Rendering.OpenGL.GL.CoordTrans
+import Graphics.Rendering.OpenGL.GL.Tensor
 
 --------------------------------------------------------------------------------
 
diff --git a/Graphics/Rendering/OpenGL/GL/BufferObjects.hs b/Graphics/Rendering/OpenGL/GL/BufferObjects.hs
--- a/Graphics/Rendering/OpenGL/GL/BufferObjects.hs
+++ b/Graphics/Rendering/OpenGL/GL/BufferObjects.hs
@@ -15,7 +15,7 @@
 
 module Graphics.Rendering.OpenGL.GL.BufferObjects (
    -- * Object Names
-   module Data.ObjectName,
+   module Graphics.Rendering.OpenGL.GL.ObjectName,
 
    -- * Buffer Objects
    BufferObject(BufferObject),
@@ -44,17 +44,17 @@
    indexedBufferStart, indexedBufferSize
 ) where
 
-import Data.ObjectName
 import Data.List(foldl1')
 import Data.Bits((.|.))
 import Data.Maybe
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
 
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.ObjectName
 import Graphics.Rendering.OpenGL.GL.Exception
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.PeekPoke
diff --git a/Graphics/Rendering/OpenGL/GL/Capability.hs b/Graphics/Rendering/OpenGL/GL/Capability.hs
--- a/Graphics/Rendering/OpenGL/GL/Capability.hs
+++ b/Graphics/Rendering/OpenGL/GL/Capability.hs
@@ -21,7 +21,7 @@
    IndexedEnableCap(..), makeIndexedCapability,
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
diff --git a/Graphics/Rendering/OpenGL/GL/Clipping.hs b/Graphics/Rendering/OpenGL/GL/Clipping.hs
--- a/Graphics/Rendering/OpenGL/GL/Clipping.hs
+++ b/Graphics/Rendering/OpenGL/GL/Clipping.hs
@@ -16,9 +16,9 @@
    ClipPlaneName(..), clipPlane, maxClipPlanes
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Utils
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.CoordTrans
 import Graphics.Rendering.OpenGL.GL.QueryUtils
diff --git a/Graphics/Rendering/OpenGL/GL/ColorSum.hs b/Graphics/Rendering/OpenGL/GL/ColorSum.hs
--- a/Graphics/Rendering/OpenGL/GL/ColorSum.hs
+++ b/Graphics/Rendering/OpenGL/GL/ColorSum.hs
@@ -16,7 +16,7 @@
    colorSum
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 
 --------------------------------------------------------------------------------
diff --git a/Graphics/Rendering/OpenGL/GL/Colors.hs b/Graphics/Rendering/OpenGL/GL/Colors.hs
--- a/Graphics/Rendering/OpenGL/GL/Colors.hs
+++ b/Graphics/Rendering/OpenGL/GL/Colors.hs
@@ -44,13 +44,13 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
-import Data.Tensor
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.Face
 import Graphics.Rendering.OpenGL.GL.PeekPoke
diff --git a/Graphics/Rendering/OpenGL/GL/ControlPoint.hs b/Graphics/Rendering/OpenGL/GL/ControlPoint.hs
--- a/Graphics/Rendering/OpenGL/GL/ControlPoint.hs
+++ b/Graphics/Rendering/OpenGL/GL/ControlPoint.hs
@@ -17,9 +17,9 @@
    ControlPoint(..)
 ) where
 
-import Data.Tensor
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.Domain
 import Graphics.Rendering.OpenGL.GL.VertexArrays
diff --git a/Graphics/Rendering/OpenGL/GL/CoordTrans.hs b/Graphics/Rendering/OpenGL/GL/CoordTrans.hs
--- a/Graphics/Rendering/OpenGL/GL/CoordTrans.hs
+++ b/Graphics/Rendering/OpenGL/GL/CoordTrans.hs
@@ -36,14 +36,14 @@
    Plane(..), TextureCoordName(..), TextureGenMode(..), textureGenMode
 ) where
 
-import Data.StateVar
-import Data.Tensor
 import Foreign.ForeignPtr
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.Exception
 import Graphics.Rendering.OpenGL.GL.PeekPoke
diff --git a/Graphics/Rendering/OpenGL/GL/DisplayLists.hs b/Graphics/Rendering/OpenGL/GL/DisplayLists.hs
--- a/Graphics/Rendering/OpenGL/GL/DisplayLists.hs
+++ b/Graphics/Rendering/OpenGL/GL/DisplayLists.hs
@@ -25,9 +25,9 @@
    genLists, deleteLists, isList,
 ) where
 
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.DataType
 import Graphics.Rendering.OpenGL.GL.Exception
 import Graphics.Rendering.OpenGL.GL.GLboolean
diff --git a/Graphics/Rendering/OpenGL/GL/Evaluators.hs b/Graphics/Rendering/OpenGL/GL/Evaluators.hs
--- a/Graphics/Rendering/OpenGL/GL/Evaluators.hs
+++ b/Graphics/Rendering/OpenGL/GL/Evaluators.hs
@@ -46,12 +46,12 @@
 
 import Control.Monad
 import Data.List
-import Data.StateVar
 import Foreign.ForeignPtr
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.ControlPoint
 import Graphics.Rendering.OpenGL.GL.Domain
diff --git a/Graphics/Rendering/OpenGL/GL/Feedback.hs b/Graphics/Rendering/OpenGL/GL/Feedback.hs
--- a/Graphics/Rendering/OpenGL/GL/Feedback.hs
+++ b/Graphics/Rendering/OpenGL/GL/Feedback.hs
@@ -18,11 +18,11 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
-import Data.Tensor
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.IOState
 import Graphics.Rendering.OpenGL.GL.RenderMode
 import Graphics.Rendering.OpenGL.GL.VertexSpec
diff --git a/Graphics/Rendering/OpenGL/GL/Fog.hs b/Graphics/Rendering/OpenGL/GL/Fog.hs
--- a/Graphics/Rendering/OpenGL/GL/Fog.hs
+++ b/Graphics/Rendering/OpenGL/GL/Fog.hs
@@ -20,9 +20,9 @@
    FogDistanceMode(..), fogDistanceMode
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Utils
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.GL.VertexSpec
diff --git a/Graphics/Rendering/OpenGL/GL/Framebuffer.hs b/Graphics/Rendering/OpenGL/GL/Framebuffer.hs
--- a/Graphics/Rendering/OpenGL/GL/Framebuffer.hs
+++ b/Graphics/Rendering/OpenGL/GL/Framebuffer.hs
@@ -35,8 +35,8 @@
 import Control.Monad
 import Data.List
 import Data.Maybe
-import Data.StateVar
 import Foreign.Marshal.Array
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.BufferMode
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.Face
diff --git a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjects.hs b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjects.hs
--- a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjects.hs
+++ b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjects.hs
@@ -22,11 +22,11 @@
    FramebufferStatus(..), framebufferStatus,
 ) where
 
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Marshal
 import Graphics.Rendering.OpenGL.Raw.Core31
 
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 
diff --git a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/Queries.hs b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/Queries.hs
--- a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/Queries.hs
+++ b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/Queries.hs
@@ -27,9 +27,9 @@
    renderbufferAlphaSize, renderbufferDepthSize, renderbufferStencilSize,
 ) where
 
-import Data.StateVar
 import Graphics.Rendering.OpenGL.Raw.Core31
 
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Texturing.Objects(TextureObject(..))
 import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat
 import Graphics.Rendering.OpenGL.GL.Texturing.Specification(Level)
diff --git a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObjects.hs b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObjects.hs
--- a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObjects.hs
+++ b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObjects.hs
@@ -25,11 +25,11 @@
    getRBParameteriv,
 ) where
 
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Marshal
 import Graphics.Rendering.OpenGL.Raw.Core31
 
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.QueryUtils
diff --git a/Graphics/Rendering/OpenGL/GL/GLstring.hs b/Graphics/Rendering/OpenGL/GL/GLstring.hs
--- a/Graphics/Rendering/OpenGL/GL/GLstring.hs
+++ b/Graphics/Rendering/OpenGL/GL/GLstring.hs
@@ -17,12 +17,13 @@
     stringQuery
 ) where
 
-import Data.StateVar
 import Foreign.C.String
 import Foreign.Marshal.Array
 import Foreign.Ptr
 
 import Graphics.Rendering.OpenGL.Raw.Core31
+
+import Graphics.Rendering.OpenGL.GL.StateVar
 
 -----------------------------------------------------------------------------
 
diff --git a/Graphics/Rendering/OpenGL/GL/Hints.hs b/Graphics/Rendering/OpenGL/GL/Hints.hs
--- a/Graphics/Rendering/OpenGL/GL/Hints.hs
+++ b/Graphics/Rendering/OpenGL/GL/Hints.hs
@@ -16,7 +16,7 @@
    HintTarget(..), HintMode(..), hint
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility (
    gl_FOG_HINT, gl_GENERATE_MIPMAP_HINT, gl_PERSPECTIVE_CORRECTION_HINT,
diff --git a/Graphics/Rendering/OpenGL/GL/LineSegments.hs b/Graphics/Rendering/OpenGL/GL/LineSegments.hs
--- a/Graphics/Rendering/OpenGL/GL/LineSegments.hs
+++ b/Graphics/Rendering/OpenGL/GL/LineSegments.hs
@@ -28,7 +28,7 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility ( glLineStipple )
diff --git a/Graphics/Rendering/OpenGL/GL/ObjectName.hs b/Graphics/Rendering/OpenGL/GL/ObjectName.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Rendering/OpenGL/GL/ObjectName.hs
@@ -0,0 +1,31 @@
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Graphics.Rendering.OpenGL.GL.ObjectName
+-- Copyright   :  (c) Sven Panne 2009
+-- License     :  BSD-style (see the file LICENSE)
+-- 
+-- Maintainer  :  sven.panne@aedion.de
+-- Stability   :  stable
+-- Portability :  portable
+--
+-- Object names are explicitly handled identifiers for API objects, e.g. a
+-- texture object name in OpenGL or a buffer object name in OpenAL.
+--
+--------------------------------------------------------------------------------
+
+module Graphics.Rendering.OpenGL.GL.ObjectName ( ObjectName(..) ) where
+
+-- | An 'ObjectName' is an explicitly handled identifier for API objects, e.g. a
+-- texture object name in OpenGL or a buffer object name in OpenAL.
+
+class ObjectName a where
+   -- | Generate a given number of object names, which are guaranteed to be
+   -- unused. By generating the names, they become used.
+   genObjectNames :: Int -> IO [a]
+
+   -- | Make the given object names available again, declaring them as unused.
+   deleteObjectNames:: [a] -> IO ()
+
+   -- | Test if the given object name is currently in use, i.e. test if it has
+   -- been generated, but not been deleted so far.
+   isObjectName :: a -> IO Bool
diff --git a/Graphics/Rendering/OpenGL/GL/PerFragment.hs b/Graphics/Rendering/OpenGL/GL/PerFragment.hs
--- a/Graphics/Rendering/OpenGL/GL/PerFragment.hs
+++ b/Graphics/Rendering/OpenGL/GL/PerFragment.hs
@@ -48,7 +48,7 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.BlendingFactor
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.ComparisonFunction
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs
@@ -21,11 +21,11 @@
    colorTableRGBASizes, colorTableLuminanceSize, colorTableIntesitySize,
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.CoordTrans
 import Graphics.Rendering.OpenGL.GL.PeekPoke
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs
@@ -25,11 +25,11 @@
    convolutionFilterScale, convolutionFilterBias,
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.CoordTrans
 import Graphics.Rendering.OpenGL.GL.PeekPoke
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs
@@ -18,8 +18,8 @@
    histogramRGBASizes, histogramLuminanceSize
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.PixelData
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs
@@ -17,8 +17,8 @@
    minmax, getMinmax, resetMinmax
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.PixelData
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelMap.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelMap.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelMap.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelMap.hs
@@ -21,11 +21,11 @@
 ) where
 
 import Data.List
-import Data.StateVar
 import Foreign.ForeignPtr
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.GL.VertexSpec
 import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility (
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelStorage.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelStorage.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelStorage.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelStorage.hs
@@ -18,7 +18,7 @@
    skipPixels, rowAlignment, imageHeight, skipImages
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.Core31
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelTransfer.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelTransfer.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelTransfer.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelTransfer.hs
@@ -19,7 +19,7 @@
    rgbaScale, rgbaBias
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.GL.VertexSpec
diff --git a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Rasterization.hs b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Rasterization.hs
--- a/Graphics/Rendering/OpenGL/GL/PixelRectangles/Rasterization.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixelRectangles/Rasterization.hs
@@ -18,7 +18,7 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.CoordTrans
 import Graphics.Rendering.OpenGL.GL.PixelData
 import Graphics.Rendering.OpenGL.GL.PixelFormat
diff --git a/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs b/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs
--- a/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs
+++ b/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs
@@ -17,8 +17,8 @@
   PixellikeObjectTarget(pixellikeObjTarParam),
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.Raw.Core31
 
diff --git a/Graphics/Rendering/OpenGL/GL/Points.hs b/Graphics/Rendering/OpenGL/GL/Points.hs
--- a/Graphics/Rendering/OpenGL/GL/Points.hs
+++ b/Graphics/Rendering/OpenGL/GL/Points.hs
@@ -33,8 +33,8 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
 import Foreign.Marshal.Array
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.PointParameter
 import Graphics.Rendering.OpenGL.GL.QueryUtils
diff --git a/Graphics/Rendering/OpenGL/GL/Polygons.hs b/Graphics/Rendering/OpenGL/GL/Polygons.hs
--- a/Graphics/Rendering/OpenGL/GL/Polygons.hs
+++ b/Graphics/Rendering/OpenGL/GL/Polygons.hs
@@ -20,10 +20,10 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
 import Foreign.ForeignPtr
 import Foreign.Marshal.Array
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.Face
 import Graphics.Rendering.OpenGL.GL.PixelRectangles
diff --git a/Graphics/Rendering/OpenGL/GL/QueryObjects.hs b/Graphics/Rendering/OpenGL/GL/QueryObjects.hs
--- a/Graphics/Rendering/OpenGL/GL/QueryObjects.hs
+++ b/Graphics/Rendering/OpenGL/GL/QueryObjects.hs
@@ -26,10 +26,10 @@
 beginConditionalRender, endConditionalRender, withConditionalRender
 ) where
 
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Exception
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.PeekPoke
diff --git a/Graphics/Rendering/OpenGL/GL/RasterPos.hs b/Graphics/Rendering/OpenGL/GL/RasterPos.hs
--- a/Graphics/Rendering/OpenGL/GL/RasterPos.hs
+++ b/Graphics/Rendering/OpenGL/GL/RasterPos.hs
@@ -23,9 +23,9 @@
    rasterPositionUnclipped
 ) where
 
-import Data.StateVar
-import Data.Tensor
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.QueryUtils
diff --git a/Graphics/Rendering/OpenGL/GL/ReadCopyPixels.hs b/Graphics/Rendering/OpenGL/GL/ReadCopyPixels.hs
--- a/Graphics/Rendering/OpenGL/GL/ReadCopyPixels.hs
+++ b/Graphics/Rendering/OpenGL/GL/ReadCopyPixels.hs
@@ -24,7 +24,7 @@
    BlitFramebufferMask(..), blitFramebuffer
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.BufferMode
 import Graphics.Rendering.OpenGL.GL.CoordTrans
 import Graphics.Rendering.OpenGL.GL.PixelData
diff --git a/Graphics/Rendering/OpenGL/GL/Rectangles.hs b/Graphics/Rendering/OpenGL/GL/Rectangles.hs
--- a/Graphics/Rendering/OpenGL/GL/Rectangles.hs
+++ b/Graphics/Rendering/OpenGL/GL/Rectangles.hs
@@ -18,8 +18,8 @@
    Rect(..)
 ) where
 
-import Data.Tensor
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility (
    glRectd, glRectdv, glRectf, glRectfv, glRecti, glRectiv, glRects, glRectsv )
 import Graphics.Rendering.OpenGL.Raw.Core31
diff --git a/Graphics/Rendering/OpenGL/GL/RenderMode.hs b/Graphics/Rendering/OpenGL/GL/RenderMode.hs
--- a/Graphics/Rendering/OpenGL/GL/RenderMode.hs
+++ b/Graphics/Rendering/OpenGL/GL/RenderMode.hs
@@ -17,7 +17,7 @@
    RenderMode(..), withRenderMode, renderMode
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Exception
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility (
diff --git a/Graphics/Rendering/OpenGL/GL/Selection.hs b/Graphics/Rendering/OpenGL/GL/Selection.hs
--- a/Graphics/Rendering/OpenGL/GL/Selection.hs
+++ b/Graphics/Rendering/OpenGL/GL/Selection.hs
@@ -18,9 +18,9 @@
    RenderMode(..), renderMode
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Array
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Exception
 import Graphics.Rendering.OpenGL.GL.IOState
 import Graphics.Rendering.OpenGL.GL.QueryUtils
diff --git a/Graphics/Rendering/OpenGL/GL/Shaders/Attribs.hs b/Graphics/Rendering/OpenGL/GL/Shaders/Attribs.hs
--- a/Graphics/Rendering/OpenGL/GL/Shaders/Attribs.hs
+++ b/Graphics/Rendering/OpenGL/GL/Shaders/Attribs.hs
@@ -19,7 +19,7 @@
 import Graphics.Rendering.OpenGL.GL.GLstring
 
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.Core31
 
diff --git a/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs b/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs
--- a/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs
+++ b/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs
@@ -18,7 +18,7 @@
    maxFragmentUniformComponents, maxVertexAttribs, maxVaryingFloats
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.Core31
 
diff --git a/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs b/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs
--- a/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs
+++ b/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs
@@ -28,11 +28,11 @@
 import Control.Monad
 import Data.List
 import Data.Maybe (fromMaybe)
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Framebuffer
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.GLstring
diff --git a/Graphics/Rendering/OpenGL/GL/Shaders/Shaders.hs b/Graphics/Rendering/OpenGL/GL/Shaders/Shaders.hs
--- a/Graphics/Rendering/OpenGL/GL/Shaders/Shaders.hs
+++ b/Graphics/Rendering/OpenGL/GL/Shaders/Shaders.hs
@@ -26,11 +26,11 @@
 import Control.Monad
 import Control.Monad.Fix
 import Data.List
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Marshal.Utils
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.GLstring
 import Graphics.Rendering.OpenGL.GL.PeekPoke
diff --git a/Graphics/Rendering/OpenGL/GL/Shaders/Uniform.hs b/Graphics/Rendering/OpenGL/GL/Shaders/Uniform.hs
--- a/Graphics/Rendering/OpenGL/GL/Shaders/Uniform.hs
+++ b/Graphics/Rendering/OpenGL/GL/Shaders/Uniform.hs
@@ -20,11 +20,11 @@
    UniformComponent,
 ) where
 
-import Data.StateVar
-import Data.Tensor
 import Foreign.Marshal.Alloc
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.GLstring
 import Graphics.Rendering.OpenGL.GL.VertexSpec
 import Graphics.Rendering.OpenGL.Raw.Core31
diff --git a/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs b/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs
--- a/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs
+++ b/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs
@@ -20,13 +20,13 @@
 import Graphics.Rendering.OpenGL.GL.GLstring
 
 import Control.Monad
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Rendering.OpenGL.Raw.Core31
 
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Shaders.Program
 
 -- Table 2.9 of the OpenGL 3.1 spec: OpenGL Shading Language type tokens
diff --git a/Graphics/Rendering/OpenGL/GL/StateVar.hs b/Graphics/Rendering/OpenGL/GL/StateVar.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Rendering/OpenGL/GL/StateVar.hs
@@ -0,0 +1,145 @@
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Graphics.Rendering.OpenGL.GL.StateVar
+-- Copyright   :  (c) Sven Panne 2009
+-- License     :  BSD-style (see the file LICENSE)
+-- 
+-- Maintainer  :  sven.panne@aedion.de
+-- Stability   :  stable
+-- Portability :  portable
+--
+-- State variables are references in the IO monad, like 'IORef's or parts of
+-- the OpenGL state. Note that state variables are not neccessarily writable or
+-- readable, they may come in read-only or write-only flavours, too. As a very
+-- simple example for a state variable, consider an explicitly allocated memory
+-- buffer. This buffer can easily be converted into a 'StateVar':
+--
+-- @
+-- makeStateVarFromPtr :: Storable a => Ptr a -> StateVar a
+-- makeStateVarFromPtr p = makeStateVar (peek p) (poke p)
+-- @
+--
+-- The example below puts 11 into a state variable (i.e. into the buffer),
+-- increments the contents of the state variable by 22, and finally prints the
+-- resulting content:
+--
+-- @
+--   do p <- malloc :: IO (Ptr Int)
+--      let v = makeStateVarFromPtr p
+--      v $= 11
+--      v $~ (+ 22)
+--      x <- get v
+--      print x
+-- @
+--
+-- 'IORef's are state variables, too, so an example with them looks extremely
+-- similiar:
+--
+-- @
+--   do v <- newIORef (0 :: Int)
+--      v $= 11
+--      v $~ (+ 22)
+--      x <- get v
+--      print x
+-- @
+--------------------------------------------------------------------------------
+
+module Graphics.Rendering.OpenGL.GL.StateVar (
+   -- * Readable State Variables
+   HasGetter(..),
+   GettableStateVar, makeGettableStateVar,
+   -- * Writable State Variables
+   HasSetter(..),
+   SettableStateVar, makeSettableStateVar,
+   -- * General State Variables
+   StateVar, makeStateVar,
+   -- * Utility Functions
+   ($~), ($=!), ($~!)
+) where
+
+import Data.IORef ( IORef, readIORef, writeIORef )
+
+--------------------------------------------------------------------------------
+
+infixr 2 $=
+
+--------------------------------------------------------------------------------
+
+-- | The class of all readable state variables.
+class HasGetter g where
+   -- | Read the value of a state variable.
+   get :: g a -> IO a
+
+instance HasGetter IORef where
+   get = readIORef
+
+-- | A concrete implementation of a read-only state variable, carrying an IO
+-- action to read the value.
+newtype GettableStateVar a = GettableStateVar (IO a)
+
+instance HasGetter GettableStateVar where
+   get (GettableStateVar g) = g
+
+-- | Construct a 'GettableStateVar' from an IO action.
+makeGettableStateVar :: IO a -> GettableStateVar a
+makeGettableStateVar = GettableStateVar
+
+--------------------------------------------------------------------------------
+
+-- | The class of all writable state variables.
+class HasSetter s where
+   -- | Write a new value into a state variable.
+   ($=) :: s a -> a -> IO ()
+
+instance HasSetter IORef where
+   ($=) = writeIORef
+
+-- | A concrete implementation of a write-only state variable, carrying an IO
+-- action to write the new value.
+newtype SettableStateVar a = SettableStateVar (a -> IO ())
+
+instance HasSetter SettableStateVar where
+   ($=) (SettableStateVar s) a = s a
+
+-- | Construct a 'SettableStateVar' from an IO action.
+makeSettableStateVar :: (a -> IO ()) -> SettableStateVar a
+makeSettableStateVar = SettableStateVar
+
+--------------------------------------------------------------------------------
+
+-- | A concrete implementation of a readable and writable state variable,
+-- carrying one IO action to read the value and another IO action to write the
+-- new value.
+data StateVar a =
+   StateVar (GettableStateVar a) (SettableStateVar a)
+
+instance HasGetter StateVar where
+   get (StateVar g _) = get g
+
+instance HasSetter StateVar where
+   ($=) (StateVar _ s) a = s $= a
+
+-- | Construct a 'StateVar' from two IO actions, one for reading and one for
+-- writing.
+makeStateVar :: IO a -> (a -> IO ()) -> StateVar a
+makeStateVar g s = StateVar (makeGettableStateVar g) (makeSettableStateVar s)
+
+--------------------------------------------------------------------------------
+
+-- | A modificator convenience function, transforming the contents of a state
+-- variable with a given funtion.
+
+($~) :: (HasGetter v, HasSetter v) => v a -> (a -> a) -> IO ()
+v $~ f = do
+   x <- get v
+   v $= f x
+
+-- | A variant of '$=' which is strict in the value to be set.
+($=!) :: HasSetter s => s a -> a -> IO ()
+v $=! x = x `seq` v $= x
+
+-- | A variant of '$~' which is strict in the transformed value.
+($~!) :: (HasGetter v, HasSetter v) => v a -> (a -> a) -> IO ()
+v $~! f = do
+   x <- get v
+   v $=! f x
diff --git a/Graphics/Rendering/OpenGL/GL/StringQueries.hs b/Graphics/Rendering/OpenGL/GL/StringQueries.hs
--- a/Graphics/Rendering/OpenGL/GL/StringQueries.hs
+++ b/Graphics/Rendering/OpenGL/GL/StringQueries.hs
@@ -20,9 +20,9 @@
 
 import Data.Bits
 import Data.Char
-import Data.StateVar
 import Foreign.C.String
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.Core32
 
diff --git a/Graphics/Rendering/OpenGL/GL/Tensor.hs b/Graphics/Rendering/OpenGL/GL/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/Graphics/Rendering/OpenGL/GL/Tensor.hs
@@ -0,0 +1,323 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Graphics.Rendering.OpenGL.GL.Tensor
+-- Copyright   :  (c) Sven Panne 2009
+-- License     :  BSD-style (see the file LICENSE)
+-- 
+-- Maintainer  :  sven.panne@aedion.de
+-- Stability   :  stable
+-- Portability :  portable
+--
+-- This package contains tensor data types and their instances for some basic
+-- type classes.
+--
+--------------------------------------------------------------------------------
+
+module Graphics.Rendering.OpenGL.GL.Tensor (
+   Vertex1(..), Vertex2(..), Vertex3(..), Vertex4(..),
+   Vector1(..), Vector2(..), Vector3(..), Vector4(..)
+) where
+
+import Control.Applicative
+import Control.Monad
+import Data.Foldable
+import Data.Ix
+import Data.Traversable
+import Data.Typeable
+import Foreign.Marshal.Array
+import Foreign.Ptr
+import Foreign.Storable
+
+--------------------------------------------------------------------------------
+
+-- | A vertex with /y/=0, /z/=0 and /w/=1.
+newtype Vertex1 a = Vertex1 a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vertex1 where
+   fmap f (Vertex1 x) = Vertex1 (f x)
+
+instance Applicative Vertex1 where
+   pure a = Vertex1 a
+   Vertex1 f <*> Vertex1 x = Vertex1 (f x)
+
+instance Foldable Vertex1 where
+   foldr f a (Vertex1 x) = x `f ` a
+   foldl f a (Vertex1 x) = a `f` x
+   foldr1 _ (Vertex1 x) = x
+   foldl1 _ (Vertex1 x) = x
+
+instance Traversable Vertex1 where
+   traverse f (Vertex1 x) = pure Vertex1 <*> f x
+   sequenceA (Vertex1 x) =  pure Vertex1 <*> x
+   mapM f (Vertex1 x) = return Vertex1 `ap` f x
+   sequence (Vertex1 x) = return Vertex1 `ap` x
+
+instance Typeable a => Typeable (Vertex1 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vertex1 a) where
+   sizeOf    ~(Vertex1 s) = sizeOf s
+   alignment ~(Vertex1 s) = alignment s
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+-- | A vertex with /z/=0 and /w/=1.
+data Vertex2 a = Vertex2 !a !a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vertex2 where
+   fmap f (Vertex2 x y) = Vertex2 (f x) (f y)
+
+instance Applicative Vertex2 where
+   pure a = Vertex2 a a
+   Vertex2 f g <*> Vertex2 x y = Vertex2 (f x) (g y)
+
+instance Foldable Vertex2 where
+   foldr f a (Vertex2 x y) = x `f ` (y `f` a)
+   foldl f a (Vertex2 x y) = (a `f` x) `f` y
+   foldr1 f (Vertex2 x y) = x `f` y
+   foldl1 f (Vertex2 x y) = x `f` y
+
+instance Traversable Vertex2 where
+   traverse f (Vertex2 x y) = pure Vertex2 <*> f x <*> f y
+   sequenceA (Vertex2 x y) =  pure Vertex2 <*> x <*> y
+   mapM f (Vertex2 x y) = return Vertex2 `ap` f x `ap` f y
+   sequence (Vertex2 x y) = return Vertex2 `ap` x `ap` y
+
+instance Typeable a => Typeable (Vertex2 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vertex2 a) where
+   sizeOf ~(Vertex2 x _) = 2 * sizeOf x
+   alignment ~(Vertex2 x _) = alignment x
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+-- | A vertex with /w/=1.
+data Vertex3 a = Vertex3 !a !a !a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vertex3 where
+   fmap f (Vertex3 x y z) = Vertex3 (f x) (f y) (f z)
+
+instance Applicative Vertex3 where
+   pure a = Vertex3 a a a
+   Vertex3 f g h <*> Vertex3 x y z = Vertex3 (f x) (g y) (h z)
+
+instance Foldable Vertex3 where
+   foldr f a (Vertex3 x y z) = x `f ` (y `f` (z `f` a))
+   foldl f a (Vertex3 x y z) = ((a `f` x) `f` y) `f` z
+   foldr1 f (Vertex3 x y z) = x `f` (y `f` z)
+   foldl1 f (Vertex3 x y z) = (x `f` y) `f` z
+
+instance Traversable Vertex3 where
+   traverse f (Vertex3 x y z) = pure Vertex3 <*> f x <*> f y <*> f z
+   sequenceA (Vertex3 x y z) =  pure Vertex3 <*> x <*> y <*> z
+   mapM f (Vertex3 x y z) = return Vertex3 `ap` f x `ap` f y `ap` f z
+   sequence (Vertex3 x y z) = return Vertex3 `ap` x `ap` y `ap` z
+
+instance Typeable a => Typeable (Vertex3 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vertex3 a) where
+   sizeOf ~(Vertex3 x _ _) = 3 * sizeOf x
+   alignment ~(Vertex3 x _ _) = alignment x
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+-- | A fully-fledged four-dimensional vertex.
+data Vertex4 a = Vertex4 !a !a !a !a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vertex4 where
+   fmap f (Vertex4 x y z w) = Vertex4 (f x) (f y) (f z) (f w)
+
+instance Applicative Vertex4 where
+   pure a = Vertex4 a a a a
+   Vertex4 f g h i <*> Vertex4 x y z w = Vertex4 (f x) (g y) (h z) (i w)
+
+instance Foldable Vertex4 where
+   foldr f a (Vertex4 x y z w) = x `f ` (y `f` (z `f` (w `f` a)))
+   foldl f a (Vertex4 x y z w) = (((a `f` x) `f` y) `f` z) `f` w
+   foldr1 f (Vertex4 x y z w) = x `f` (y `f` (z `f` w))
+   foldl1 f (Vertex4 x y z w) = ((x `f` y) `f` z) `f` w
+
+instance Traversable Vertex4 where
+   traverse f (Vertex4 x y z w) = pure Vertex4 <*> f x <*> f y <*> f z <*> f w
+   sequenceA (Vertex4 x y z w) =  pure Vertex4 <*> x <*> y <*> z <*> w
+   mapM f (Vertex4 x y z w) = return Vertex4 `ap` f x `ap` f y `ap` f z `ap` f w
+   sequence (Vertex4 x y z w) = return Vertex4 `ap` x `ap` y `ap` z `ap` w
+
+instance Typeable a => Typeable (Vertex4 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vertex4 a) where
+   sizeOf ~(Vertex4 x _ _ _) = 4 * sizeOf x
+   alignment ~(Vertex4 x _ _ _) = alignment x
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+-- | A one-dimensional vector.
+newtype Vector1 a = Vector1 a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vector1 where
+   fmap f (Vector1 x) = Vector1 (f x)
+
+instance Applicative Vector1 where
+   pure a = Vector1 a
+   Vector1 f <*> Vector1 x = Vector1 (f x)
+
+instance Foldable Vector1 where
+   foldr f a (Vector1 x) = x `f ` a
+   foldl f a (Vector1 x) = a `f` x
+   foldr1 _ (Vector1 x) = x
+   foldl1 _ (Vector1 x) = x
+
+instance Traversable Vector1 where
+   traverse f (Vector1 x) = pure Vector1 <*> f x
+   sequenceA (Vector1 x) =  pure Vector1 <*> x
+   mapM f (Vector1 x) = return Vector1 `ap` f x
+   sequence (Vector1 x) = return Vector1 `ap` x
+
+instance Typeable a => Typeable (Vector1 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vector1 a) where
+   sizeOf    ~(Vector1 s) = sizeOf s
+   alignment ~(Vector1 s) = alignment s
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+-- | A two-dimensional vector.
+data Vector2 a = Vector2 !a !a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vector2 where
+   fmap f (Vector2 x y) = Vector2 (f x) (f y)
+
+instance Applicative Vector2 where
+   pure a = Vector2 a a
+   Vector2 f g <*> Vector2 x y = Vector2 (f x) (g y)
+
+instance Foldable Vector2 where
+   foldr f a (Vector2 x y) = x `f ` (y `f` a)
+   foldl f a (Vector2 x y) = (a `f` x) `f` y
+   foldr1 f (Vector2 x y) = x `f` y
+   foldl1 f (Vector2 x y) = x `f` y
+
+instance Traversable Vector2 where
+   traverse f (Vector2 x y) = pure Vector2 <*> f x <*> f y
+   sequenceA (Vector2 x y) =  pure Vector2 <*> x <*> y
+   mapM f (Vector2 x y) = return Vector2 `ap` f x `ap` f y
+   sequence (Vector2 x y) = return Vector2 `ap` x `ap` y
+
+instance Typeable a => Typeable (Vector2 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vector2 a) where
+   sizeOf ~(Vector2 x _) = 2 * sizeOf x
+   alignment ~(Vector2 x _) = alignment x
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+-- | A three-dimensional vector.
+data Vector3 a = Vector3 !a !a !a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vector3 where
+   fmap f (Vector3 x y z) = Vector3 (f x) (f y) (f z)
+
+instance Applicative Vector3 where
+   pure a = Vector3 a a a
+   Vector3 f g h <*> Vector3 x y z = Vector3 (f x) (g y) (h z)
+
+instance Foldable Vector3 where
+   foldr f a (Vector3 x y z) = x `f ` (y `f` (z `f` a))
+   foldl f a (Vector3 x y z) = ((a `f` x) `f` y) `f` z
+   foldr1 f (Vector3 x y z) = x `f` (y `f` z)
+   foldl1 f (Vector3 x y z) = (x `f` y) `f` z
+
+instance Traversable Vector3 where
+   traverse f (Vector3 x y z) = pure Vector3 <*> f x <*> f y <*> f z
+   sequenceA (Vector3 x y z) =  pure Vector3 <*> x <*> y <*> z
+   mapM f (Vector3 x y z) = return Vector3 `ap` f x `ap` f y `ap` f z
+   sequence (Vector3 x y z) = return Vector3 `ap` x `ap` y `ap` z
+
+instance Typeable a => Typeable (Vector3 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vector3 a) where
+   sizeOf ~(Vector3 x _ _) = 3 * sizeOf x
+   alignment ~(Vector3 x _ _) = alignment x
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+-- | A four-dimensional vector.
+data Vector4 a = Vector4 !a !a !a !a
+   deriving (Eq, Ord, Ix, Bounded, Show, Read, Typeable)
+
+instance Functor Vector4 where
+   fmap f (Vector4 x y z w) = Vector4 (f x) (f y) (f z) (f w)
+
+instance Applicative Vector4 where
+   pure a = Vector4 a a a a
+   Vector4 f g h i <*> Vector4 x y z w = Vector4 (f x) (g y) (h z) (i w)
+
+instance Foldable Vector4 where
+   foldr f a (Vector4 x y z w) = x `f ` (y `f` (z `f` (w `f` a)))
+   foldl f a (Vector4 x y z w) = (((a `f` x) `f` y) `f` z) `f` w
+   foldr1 f (Vector4 x y z w) = x `f` (y `f` (z `f` w))
+   foldl1 f (Vector4 x y z w) = ((x `f` y) `f` z) `f` w
+
+instance Traversable Vector4 where
+   traverse f (Vector4 x y z w) = pure Vector4 <*> f x <*> f y <*> f z <*> f w
+   sequenceA (Vector4 x y z w) =  pure Vector4 <*> x <*> y <*> z <*> w
+   mapM f (Vector4 x y z w) = return Vector4 `ap` f x `ap` f y `ap` f z `ap` f w
+   sequence (Vector4 x y z w) = return Vector4 `ap` x `ap` y `ap` z `ap` w
+
+instance Typeable a => Typeable (Vector4 a) where
+   typeOf = typeOfDefault
+
+instance Storable a => Storable (Vector4 a) where
+   sizeOf ~(Vector4 x _ _ _) = 4 * sizeOf x
+   alignment ~(Vector4 x _ _ _) = alignment x
+   peek = peekApplicativeTraversable
+   poke = pokeFoldable
+
+--------------------------------------------------------------------------------
+
+peekApplicativeTraversable :: (Applicative t, Traversable t, Storable a) => Ptr (t a) -> IO (t a)
+peekApplicativeTraversable = Data.Traversable.mapM peek . addresses
+
+addresses :: (Applicative t, Traversable t, Storable a) => Ptr (t a) -> t (Ptr a)
+addresses = snd . mapAccumL nextPtr 0 . pure . castPtr
+
+nextPtr :: Storable a => Int -> Ptr a -> (Int, Ptr a)
+nextPtr offset ptr = (offset + 1, advancePtr ptr offset)
+
+--------------------------------------------------------------------------------
+
+pokeFoldable :: (Foldable t, Storable a) => Ptr (t a) -> t a -> IO ()
+pokeFoldable ptr xs = foldlM pokeAndAdvance (castPtr ptr) xs >> return ()
+
+pokeAndAdvance :: Storable a => Ptr a -> a -> IO (Ptr a)
+pokeAndAdvance ptr value = do
+   poke ptr value
+   return $ ptr `plusPtr` sizeOf value
diff --git a/Graphics/Rendering/OpenGL/GL/Texturing/Application.hs b/Graphics/Rendering/OpenGL/GL/Texturing/Application.hs
--- a/Graphics/Rendering/OpenGL/GL/Texturing/Application.hs
+++ b/Graphics/Rendering/OpenGL/GL/Texturing/Application.hs
@@ -17,7 +17,7 @@
    texture
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.Texturing.Specification
 
diff --git a/Graphics/Rendering/OpenGL/GL/Texturing/Environments.hs b/Graphics/Rendering/OpenGL/GL/Texturing/Environments.hs
--- a/Graphics/Rendering/OpenGL/GL/Texturing/Environments.hs
+++ b/Graphics/Rendering/OpenGL/GL/Texturing/Environments.hs
@@ -22,11 +22,11 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.BlendingFactor
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.Texturing.Parameters
diff --git a/Graphics/Rendering/OpenGL/GL/Texturing/Objects.hs b/Graphics/Rendering/OpenGL/GL/Texturing/Objects.hs
--- a/Graphics/Rendering/OpenGL/GL/Texturing/Objects.hs
+++ b/Graphics/Rendering/OpenGL/GL/Texturing/Objects.hs
@@ -21,9 +21,9 @@
 
 import Data.List
 import Data.Maybe (fromMaybe)
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Marshal.Array
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.GL.Texturing.TexParameter
diff --git a/Graphics/Rendering/OpenGL/GL/Texturing/Parameters.hs b/Graphics/Rendering/OpenGL/GL/Texturing/Parameters.hs
--- a/Graphics/Rendering/OpenGL/GL/Texturing/Parameters.hs
+++ b/Graphics/Rendering/OpenGL/GL/Texturing/Parameters.hs
@@ -23,7 +23,7 @@
    textureCompareFailValue, TextureCompareOperator(..), textureCompareOperator
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.ComparisonFunction
 import Graphics.Rendering.OpenGL.GL.CoordTrans
diff --git a/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs b/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
--- a/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
+++ b/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
@@ -20,8 +20,8 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
 import Foreign.Marshal.Alloc
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.PixelRectangles
diff --git a/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs b/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs
--- a/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs
+++ b/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs
@@ -40,8 +40,8 @@
   maxTextureSize
 ) where
 
-import Data.StateVar
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.CoordTrans
 import Graphics.Rendering.OpenGL.GL.PixelData
 import Graphics.Rendering.OpenGL.GL.PixelRectangles
diff --git a/Graphics/Rendering/OpenGL/GL/Texturing/TexParameter.hs b/Graphics/Rendering/OpenGL/GL/Texturing/TexParameter.hs
--- a/Graphics/Rendering/OpenGL/GL/Texturing/TexParameter.hs
+++ b/Graphics/Rendering/OpenGL/GL/Texturing/TexParameter.hs
@@ -19,11 +19,11 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget
diff --git a/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs b/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs
--- a/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs
+++ b/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs
@@ -31,12 +31,12 @@
    maxTransformFeedbackSeparateComponents
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Storable
 
 import Graphics.Rendering.OpenGL.Raw.Core32
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.DataType
 import Graphics.Rendering.OpenGL.GL.GLstring
 import Graphics.Rendering.OpenGL.GL.PrimitiveMode
diff --git a/Graphics/Rendering/OpenGL/GL/VertexArrayObjects.hs b/Graphics/Rendering/OpenGL/GL/VertexArrayObjects.hs
--- a/Graphics/Rendering/OpenGL/GL/VertexArrayObjects.hs
+++ b/Graphics/Rendering/OpenGL/GL/VertexArrayObjects.hs
@@ -17,10 +17,10 @@
    bindVertexArrayObject
 ) where
 
-import Data.ObjectName
-import Data.StateVar
 import Foreign.Marshal.Array
 
+import Graphics.Rendering.OpenGL.GL.ObjectName
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.Core31
diff --git a/Graphics/Rendering/OpenGL/GL/VertexArrays.hs b/Graphics/Rendering/OpenGL/GL/VertexArrays.hs
--- a/Graphics/Rendering/OpenGL/GL/VertexArrays.hs
+++ b/Graphics/Rendering/OpenGL/GL/VertexArrays.hs
@@ -35,10 +35,10 @@
    vertexAttribPointer, vertexAttribArray,
 ) where
 
-import Data.StateVar
 import Foreign.Marshal.Alloc
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.DataType
 import Graphics.Rendering.OpenGL.GL.GLboolean
diff --git a/Graphics/Rendering/OpenGL/GL/VertexSpec.hs b/Graphics/Rendering/OpenGL/GL/VertexSpec.hs
--- a/Graphics/Rendering/OpenGL/GL/VertexSpec.hs
+++ b/Graphics/Rendering/OpenGL/GL/VertexSpec.hs
@@ -58,11 +58,11 @@
    TextureUnit(..), maxTextureUnit
 ) where
 
-import Data.StateVar
-import Data.Tensor
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
+import Graphics.Rendering.OpenGL.GL.StateVar
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.QueryUtils
diff --git a/Graphics/Rendering/OpenGL/GLU/Errors.hs b/Graphics/Rendering/OpenGL/GLU/Errors.hs
--- a/Graphics/Rendering/OpenGL/GLU/Errors.hs
+++ b/Graphics/Rendering/OpenGL/GLU/Errors.hs
@@ -18,7 +18,7 @@
    Error(..), ErrorCategory(..), errors
 ) where
 
-import Data.StateVar
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
 
 --------------------------------------------------------------------------------
diff --git a/Graphics/Rendering/OpenGL/GLU/Initialization.hs b/Graphics/Rendering/OpenGL/GLU/Initialization.hs
--- a/Graphics/Rendering/OpenGL/GLU/Initialization.hs
+++ b/Graphics/Rendering/OpenGL/GLU/Initialization.hs
@@ -16,10 +16,10 @@
    gluVersion, gluExtensions
 ) where
 
-import Data.StateVar
 import Foreign.C.String
 import Foreign.Ptr
 import Graphics.Rendering.GLU.Raw
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.Rendering.OpenGL.GL.QueryUtils
 import Graphics.Rendering.OpenGL.Raw.Core31
 
diff --git a/Graphics/Rendering/OpenGL/GLU/Matrix.hs b/Graphics/Rendering/OpenGL/GLU/Matrix.hs
--- a/Graphics/Rendering/OpenGL/GLU/Matrix.hs
+++ b/Graphics/Rendering/OpenGL/GLU/Matrix.hs
@@ -17,12 +17,12 @@
    project, unProject, unProject4
 ) where
 
-import Data.Tensor
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Rendering.GLU.Raw
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.CoordTrans
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
diff --git a/Graphics/Rendering/OpenGL/GLU/NURBS.hs b/Graphics/Rendering/OpenGL/GLU/NURBS.hs
--- a/Graphics/Rendering/OpenGL/GLU/NURBS.hs
+++ b/Graphics/Rendering/OpenGL/GLU/NURBS.hs
@@ -31,7 +31,6 @@
 ) where
 
 import Control.Monad
-import Data.Tensor
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
@@ -39,6 +38,7 @@
    NURBSBeginCallback, NURBSVertexCallback, NURBSNormalCallback,
    NURBSColorCallback, NURBSEndCallback )
 import Graphics.Rendering.OpenGL.Raw.Core31
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.ControlPoint
 import Graphics.Rendering.OpenGL.GL.CoordTrans
diff --git a/Graphics/Rendering/OpenGL/GLU/Tessellation.hs b/Graphics/Rendering/OpenGL/GLU/Tessellation.hs
--- a/Graphics/Rendering/OpenGL/GLU/Tessellation.hs
+++ b/Graphics/Rendering/OpenGL/GLU/Tessellation.hs
@@ -38,7 +38,6 @@
 import Control.Monad ( foldM_, unless )
 import Data.IORef ( newIORef, readIORef, writeIORef, modifyIORef )
 import Data.Maybe ( fromJust, fromMaybe )
-import Data.Tensor
 import Foreign.Marshal.Alloc ( allocaBytes )
 import Foreign.Marshal.Array ( peekArray, pokeArray )
 import Foreign.Marshal.Pool ( Pool, withPool, pooledNew )
@@ -46,6 +45,7 @@
 import Foreign.Storable ( Storable(..) )
 import Graphics.Rendering.GLU.Raw
 import Graphics.Rendering.OpenGL.Raw.Core31
+import Graphics.Rendering.OpenGL.GL.Tensor
 import Graphics.Rendering.OpenGL.GL.EdgeFlag ( unmarshalEdgeFlag )
 import Graphics.Rendering.OpenGL.GL.Exception ( bracket )
 import Graphics.Rendering.OpenGL.GL.GLboolean ( marshalGLboolean )
diff --git a/OpenGL.cabal b/OpenGL.cabal
--- a/OpenGL.cabal
+++ b/OpenGL.cabal
@@ -1,8 +1,8 @@
 name: OpenGL
-version: 2.6.0.1
+version: 2.8.0.0
 license: BSD3
 license-file: LICENSE
-maintainer: Jason Dagit <dagitj@gmail.com>, Sven Panne <sven.panne@aedion.de>
+maintainer: Jason Dagit <dagitj@gmail.com>
 bug-reports: https://github.com/haskell-opengl/OpenGL/issues
 homepage: http://www.haskell.org/haskellwiki/Opengl
 category: Graphics
@@ -39,6 +39,7 @@
    Graphics.Rendering.OpenGL.GL.Hints,
    Graphics.Rendering.OpenGL.GL,
    Graphics.Rendering.OpenGL.GL.LineSegments,
+   Graphics.Rendering.OpenGL.GL.ObjectName,
    Graphics.Rendering.OpenGL.GL.PerFragment,
    Graphics.Rendering.OpenGL.GL.PixellikeObject,
    Graphics.Rendering.OpenGL.GL.PixelRectangles.ColorTable,
@@ -59,7 +60,9 @@
    Graphics.Rendering.OpenGL.GL.SavingState,
    Graphics.Rendering.OpenGL.GL.Selection,
    Graphics.Rendering.OpenGL.GL.Shaders,
+   Graphics.Rendering.OpenGL.GL.StateVar,
    Graphics.Rendering.OpenGL.GL.StringQueries,
+   Graphics.Rendering.OpenGL.GL.Tensor,
    Graphics.Rendering.OpenGL.GL.Texturing.Application,
    Graphics.Rendering.OpenGL.GL.Texturing.Environments,
    Graphics.Rendering.OpenGL.GL.Texturing,
@@ -79,8 +82,7 @@
    Graphics.Rendering.OpenGL.GL.VertexArrays,
    Graphics.Rendering.OpenGL.GL.VertexArrayObjects,
    Graphics.Rendering.OpenGL.GL.VertexSpec,
-   Graphics.Rendering.OpenGL
-  other-modules:
+   Graphics.Rendering.OpenGL,
    Graphics.Rendering.OpenGL.GL.BlendingFactor,
    Graphics.Rendering.OpenGL.GL.BufferMode,
    Graphics.Rendering.OpenGL.GL.Capability,
@@ -122,9 +124,9 @@
    Graphics.Rendering.OpenGL.GL.Texturing.TextureUnit,
    Graphics.Rendering.OpenGL.GL.VertexAttributes,
    Graphics.Rendering.OpenGL.GLU.ErrorsInternal
-  ghc-options: -Wall
+  ghc-options: -Wall -O2
   build-depends:
-   base >= 3 && < 5, OpenGLRaw >= 1.3.0.0, GLURaw >= 1.1.0.0, StateVar == 1.0.*, ObjectName == 1.0.*, Tensor == 1.0.*
+   base >= 3 && < 5, OpenGLRaw >= 1.3.0.0, GLURaw >= 1.1.0.0
 
 source-repository head
   type:     git
