diff --git a/GLUT.cabal b/GLUT.cabal
--- a/GLUT.cabal
+++ b/GLUT.cabal
@@ -1,8 +1,8 @@
 name: GLUT
-version: 2.3.1.0
+version: 2.4.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/GLUT/issues
 homepage: http://www.haskell.org/haskellwiki/Opengl
 category: Graphics
@@ -135,8 +135,7 @@
       Graphics.UI.GLUT.Objects,
       Graphics.UI.GLUT.Overlay,
       Graphics.UI.GLUT.State,
-      Graphics.UI.GLUT.Window
-   other-modules:
+      Graphics.UI.GLUT.Window,
       Graphics.UI.GLUT.Callbacks.Registration,
       Graphics.UI.GLUT.QueryUtils,
       Graphics.UI.GLUT.Raw,
@@ -153,8 +152,8 @@
       build-depends: base >= 3 && < 5, array >= 0.3 && < 0.5, containers >= 0.3 && < 0.6
    else
       build-depends: base < 3
-   build-depends: OpenGL == 2.6.*, OpenGLRaw == 1.3.*, StateVar == 1.0.*, Tensor == 1.0.*
-   ghc-options: -Wall
+   build-depends: OpenGL == 2.8.*, OpenGLRaw == 1.3.*
+   ghc-options: -Wall -O2
    if os(windows) && flag(UseNativeWindowsLibraries)
       cpp-options: "-DCALLCONV=stdcall"
       cc-options: "-DUSE_GETPROCADDRESS"
diff --git a/Graphics/UI/GLUT/Begin.hs b/Graphics/UI/GLUT/Begin.hs
--- a/Graphics/UI/GLUT/Begin.hs
+++ b/Graphics/UI/GLUT/Begin.hs
@@ -22,8 +22,8 @@
    ActionOnWindowClose(..), actionOnWindowClose
 ) where
 
-import Data.StateVar
 import Foreign.C.Types
+import Graphics.Rendering.OpenGL.GL.StateVar
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
 
diff --git a/Graphics/UI/GLUT/Callbacks/Global.hs b/Graphics/UI/GLUT/Callbacks/Global.hs
--- a/Graphics/UI/GLUT/Callbacks/Global.hs
+++ b/Graphics/UI/GLUT/Callbacks/Global.hs
@@ -22,9 +22,10 @@
 ) where
 
 import Control.Monad.Fix
-import Data.StateVar
 import Foreign.C.Types
-import Graphics.Rendering.OpenGL ( Position(..) )
+import Graphics.Rendering.OpenGL ( Position(..)
+                                 , SettableStateVar
+                                 , makeSettableStateVar )
 import Graphics.UI.GLUT.Callbacks.Registration
 import Graphics.UI.GLUT.Raw
 
diff --git a/Graphics/UI/GLUT/Callbacks/Registration.hs b/Graphics/UI/GLUT/Callbacks/Registration.hs
--- a/Graphics/UI/GLUT/Callbacks/Registration.hs
+++ b/Graphics/UI/GLUT/Callbacks/Registration.hs
@@ -23,8 +23,8 @@
 import Data.IORef
 import qualified Data.Map as Map ( empty, lookup, insert, delete )
 import Data.Map ( Map )
-import Data.StateVar
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL ( get )
 import Graphics.UI.GLUT.Raw
 import Graphics.UI.GLUT.Window
 
diff --git a/Graphics/UI/GLUT/Callbacks/Window.hs b/Graphics/UI/GLUT/Callbacks/Window.hs
--- a/Graphics/UI/GLUT/Callbacks/Window.hs
+++ b/Graphics/UI/GLUT/Callbacks/Window.hs
@@ -63,9 +63,9 @@
 import Data.Bits hiding ( shift )
 import Data.Char
 import Data.Maybe
-import Data.StateVar
 import Foreign.C.Types
-import Graphics.Rendering.OpenGL ( Position(..), Size(..) )
+import Graphics.Rendering.OpenGL ( Position(..), Size(..)
+                                 , SettableStateVar, makeSettableStateVar )
 import Graphics.UI.GLUT.Callbacks.Registration
 import Graphics.UI.GLUT.Raw
 import Graphics.UI.GLUT.State
diff --git a/Graphics/UI/GLUT/Colormap.hs b/Graphics/UI/GLUT/Colormap.hs
--- a/Graphics/UI/GLUT/Colormap.hs
+++ b/Graphics/UI/GLUT/Colormap.hs
@@ -41,9 +41,10 @@
    transparentIndex
 ) where
 
-import Data.StateVar
 import Foreign.C.Types
-import Graphics.Rendering.OpenGL ( GLfloat, GLint, Color3(..), Index1(..) )
+import Graphics.Rendering.OpenGL ( GLfloat, GLint, Color3(..), Index1(..)
+                                 , StateVar, makeStateVar, GettableStateVar
+                                 , makeGettableStateVar )
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
 import Graphics.UI.GLUT.Types
diff --git a/Graphics/UI/GLUT/Debugging.hs b/Graphics/UI/GLUT/Debugging.hs
--- a/Graphics/UI/GLUT/Debugging.hs
+++ b/Graphics/UI/GLUT/Debugging.hs
@@ -17,8 +17,7 @@
    reportErrors
 ) where
 
-import Data.StateVar
-import Graphics.Rendering.OpenGL ( Error(..), errors )
+import Graphics.Rendering.OpenGL ( Error(..), errors, get )
 import System.Environment
 import System.IO
 
diff --git a/Graphics/UI/GLUT/DeviceControl.hs b/Graphics/UI/GLUT/DeviceControl.hs
--- a/Graphics/UI/GLUT/DeviceControl.hs
+++ b/Graphics/UI/GLUT/DeviceControl.hs
@@ -19,8 +19,8 @@
    forceJoystickCallback
 ) where
 
-import Data.StateVar
 import Foreign.C.Types
+import Graphics.Rendering.OpenGL ( StateVar, makeStateVar )
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
 
diff --git a/Graphics/UI/GLUT/GameMode.hs b/Graphics/UI/GLUT/GameMode.hs
--- a/Graphics/UI/GLUT/GameMode.hs
+++ b/Graphics/UI/GLUT/GameMode.hs
@@ -31,9 +31,12 @@
 ) where
 
 import Data.List
-import Data.StateVar
 import Foreign.C.String
-import Graphics.Rendering.OpenGL ( GLenum, Size(..) )
+import Graphics.Rendering.OpenGL ( GLenum, Size(..)
+                                 , GettableStateVar
+                                 , SettableStateVar
+                                 , makeGettableStateVar
+                                 , makeSettableStateVar )
 import Graphics.UI.GLUT.Raw
 import Graphics.UI.GLUT.Types
 
diff --git a/Graphics/UI/GLUT/Initialization.hs b/Graphics/UI/GLUT/Initialization.hs
--- a/Graphics/UI/GLUT/Initialization.hs
+++ b/Graphics/UI/GLUT/Initialization.hs
@@ -52,14 +52,17 @@
 import Control.Monad
 import Data.Bits
 import Data.List
-import Data.StateVar
 import Foreign.C.String
 import Foreign.C.Types
 import Foreign.Marshal.Array
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
-import Graphics.Rendering.OpenGL ( Position(..), Size(..) )
+import Graphics.Rendering.OpenGL ( Position(..), Size(..)
+                                 , StateVar, GettableStateVar, get
+                                 , SettableStateVar, makeStateVar, ($=)
+                                 , makeGettableStateVar
+                                 , makeSettableStateVar )
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
 import Graphics.UI.GLUT.Types
@@ -146,7 +149,7 @@
 -- | Controls the /initial window position/.  Windows created by
 -- 'Graphics.UI.GLUT.Window.createWindow' will be requested to be created with
 -- the current /initial window position/. The initial value of the /initial
--- window position/ GLUT state is @'Size' (-1) (-1)@. If either the X or Y
+-- window position/ GLUT state is @'Position' (-1) (-1)@. If either the X or Y
 -- component of the /initial window position/ is negative, the actual window
 -- position is left to the window system to determine.
 --
diff --git a/Graphics/UI/GLUT/Menu.hs b/Graphics/UI/GLUT/Menu.hs
--- a/Graphics/UI/GLUT/Menu.hs
+++ b/Graphics/UI/GLUT/Menu.hs
@@ -27,10 +27,12 @@
 import qualified Data.Map as Map ( empty, lookup, insert, delete )
 import Control.Monad
 import Data.Map ( Map )
-import Data.StateVar
 import Foreign.C.String
 import Foreign.C.Types
 import Foreign.Ptr
+import Graphics.Rendering.OpenGL ( get, ($=), StateVar
+                                 , makeStateVar, GettableStateVar
+                                 , makeGettableStateVar )
 import Graphics.UI.GLUT.Callbacks.Registration
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
diff --git a/Graphics/UI/GLUT/Objects.hs b/Graphics/UI/GLUT/Objects.hs
--- a/Graphics/UI/GLUT/Objects.hs
+++ b/Graphics/UI/GLUT/Objects.hs
@@ -33,11 +33,10 @@
    renderObject
 ) where
 
-import Data.Tensor
 import Foreign.C.Types
 import Foreign.Marshal.Utils
 import Foreign.Ptr
-import Graphics.Rendering.OpenGL ( Height, Radius, Slices, Stacks, GLint, GLdouble )
+import Graphics.Rendering.OpenGL ( Height, Radius, Slices, Stacks, GLint, GLdouble, Vertex3(..) )
 import Graphics.UI.GLUT.Raw
 
 --------------------------------------------------------------------------------
diff --git a/Graphics/UI/GLUT/Overlay.hs b/Graphics/UI/GLUT/Overlay.hs
--- a/Graphics/UI/GLUT/Overlay.hs
+++ b/Graphics/UI/GLUT/Overlay.hs
@@ -30,8 +30,9 @@
    postOverlayRedisplay
 ) where
 
-import Data.StateVar
-import Graphics.Rendering.OpenGL ( GLenum )
+import Graphics.Rendering.OpenGL ( GLenum, StateVar, makeStateVar
+                                 , GettableStateVar, makeGettableStateVar
+                                 , SettableStateVar, makeSettableStateVar )
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
 import Graphics.UI.GLUT.Types
diff --git a/Graphics/UI/GLUT/State.hs b/Graphics/UI/GLUT/State.hs
--- a/Graphics/UI/GLUT/State.hs
+++ b/Graphics/UI/GLUT/State.hs
@@ -48,13 +48,14 @@
 ) where
 
 import Control.Monad
-import Data.StateVar
 import Foreign.C.Types
 import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
 import Foreign.Ptr
 import Foreign.Storable
-import Graphics.Rendering.OpenGL ( GLenum, Size(..) )
+import Graphics.Rendering.OpenGL ( GLenum, Size(..)
+                                 , StateVar, makeStateVar
+                                 , GettableStateVar, makeGettableStateVar )
 import Graphics.UI.GLUT.Overlay
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
diff --git a/Graphics/UI/GLUT/Window.hs b/Graphics/UI/GLUT/Window.hs
--- a/Graphics/UI/GLUT/Window.hs
+++ b/Graphics/UI/GLUT/Window.hs
@@ -52,10 +52,12 @@
    Cursor(..), cursor, pointerPosition
 ) where
 
-import Data.StateVar
 import Foreign.C.String
 import Foreign.C.Types
-import Graphics.Rendering.OpenGL ( Position(..), Size(..) )
+import Graphics.Rendering.OpenGL ( Position(..), Size(..)
+                                 , StateVar, makeStateVar
+                                 , GettableStateVar, makeGettableStateVar
+                                 , SettableStateVar, makeSettableStateVar )
 import Graphics.UI.GLUT.QueryUtils
 import Graphics.UI.GLUT.Raw
 import Graphics.UI.GLUT.Types
