diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.9.0
+
+* OpenGL 3 dependency bump
+
 # 0.8.8
 
 * Update to `hpp-0.3.0`
diff --git a/GLUtil.cabal b/GLUtil.cabal
--- a/GLUtil.cabal
+++ b/GLUtil.cabal
@@ -1,5 +1,5 @@
 Name:                GLUtil
-Version:             0.8.8
+Version:             0.9.0
 Synopsis:            Miscellaneous OpenGL utilities.
 License:             BSD3
 License-file:        LICENSE
@@ -53,8 +53,8 @@
                        filepath,
                        linear >= 1.1.3,
                        JuicyPixels >= 3,
-                       OpenGLRaw >= 1.1,
-                       OpenGL >= 2.9.2 && < 2.14,
+                       OpenGLRaw >= 3.0 && < 3.2,
+                       OpenGL >= 3 && < 3.1,
                        transformers >= 0.3,
                        vector >= 0.7
   if impl(ghc >= 7.10.1)
diff --git a/src/Graphics/GLUtil/JuicyTextures.hs b/src/Graphics/GLUtil/JuicyTextures.hs
--- a/src/Graphics/GLUtil/JuicyTextures.hs
+++ b/src/Graphics/GLUtil/JuicyTextures.hs
@@ -1,10 +1,12 @@
-{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE CPP, RankNTypes #-}
 -- | Uses the @JuicyPixels@ package to load images that are then used
 -- to create OpenGL textuers.
 module Graphics.GLUtil.JuicyTextures where
 import Codec.Picture (readImage, DynamicImage(..), Image(..))
 import Codec.Picture.Types (convertImage)
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative ((<$>))
+#endif
 import Graphics.GLUtil.Textures
 import Graphics.Rendering.OpenGL (TextureObject)
 
diff --git a/src/Graphics/GLUtil/Linear.hs b/src/Graphics/GLUtil/Linear.hs
--- a/src/Graphics/GLUtil/Linear.hs
+++ b/src/Graphics/GLUtil/Linear.hs
@@ -7,7 +7,7 @@
 import Foreign.Marshal.Utils (with)
 import Foreign.Ptr (Ptr, castPtr)
 import Graphics.Rendering.OpenGL
-import Graphics.Rendering.OpenGL.Raw.Core31
+import Graphics.GL.Core31
 import Linear
 import Unsafe.Coerce (unsafeCoerce)
 
diff --git a/src/Graphics/GLUtil/ShaderProgram.hs b/src/Graphics/GLUtil/ShaderProgram.hs
--- a/src/Graphics/GLUtil/ShaderProgram.hs
+++ b/src/Graphics/GLUtil/ShaderProgram.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -- |Convenience interface for working with GLSL shader
 -- programs. Provides an interface for setting attributes and
 -- uniforms.
@@ -14,7 +15,9 @@
    -- * Working with ShaderProgram parameters
    getAttrib, enableAttrib, setAttrib, setUniform, getUniform) where
 import Prelude hiding (lookup)
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative ((<$>), (<*>))
+#endif
 import qualified Data.ByteString as BS
 import Data.List (find, findIndex, isSuffixOf)
 import Data.Map.Strict (Map, fromList, lookup)
diff --git a/src/Graphics/GLUtil/Shaders.hs b/src/Graphics/GLUtil/Shaders.hs
--- a/src/Graphics/GLUtil/Shaders.hs
+++ b/src/Graphics/GLUtil/Shaders.hs
@@ -1,13 +1,13 @@
 -- |Utilities for working with fragment and vertex shader programs.
 module Graphics.GLUtil.Shaders (loadShader, loadShaderBS,
                                 linkShaderProgram, linkShaderProgramWith,
-                                namedUniform, 
-                                uniformScalar, uniformVec, uniformMat, 
+                                namedUniform,
+                                uniformScalar, uniformVec, uniformMat,
                                 namedUniformMat, uniformGLMat4) where
 import Control.Monad (unless)
 import qualified Data.ByteString as BS
 import Graphics.Rendering.OpenGL
-import Graphics.Rendering.OpenGL.Raw.Core31
+import Graphics.GL.Core31
 import Graphics.GLUtil.GLError
 import Foreign.Ptr (Ptr)
 import Unsafe.Coerce (unsafeCoerce)
@@ -108,7 +108,7 @@
                        case length mat of
                          4 -> glUniformMatrix4fv loc' 1 1 ptr
                          3 -> glUniformMatrix3fv loc' 1 1 ptr
-                         _ -> ioError . userError $ 
+                         _ -> ioError . userError $
                               "Only 3x3 and 4x4 matrices are supported"
         loc' = unUL loc
 
diff --git a/src/Graphics/GLUtil/TypeMapping.hs b/src/Graphics/GLUtil/TypeMapping.hs
--- a/src/Graphics/GLUtil/TypeMapping.hs
+++ b/src/Graphics/GLUtil/TypeMapping.hs
@@ -18,22 +18,14 @@
   variableType :: a -> VariableType
 
 instance HasVariableType Float where variableType _ = Float'
-instance HasVariableType GLfloat where variableType _ = Float'
-instance HasVariableType GLint where variableType _ = Int'
 instance HasVariableType Int32 where variableType _ = Int'
 instance HasVariableType Word32 where variableType _ = UnsignedInt'
-instance HasVariableType GLuint where variableType _ = UnsignedInt'
 
 instance HasVariableType (V1 GLfloat) where variableType _ = Float'
 instance HasVariableType (V2 GLfloat) where variableType _ = FloatVec2
 instance HasVariableType (V3 GLfloat) where variableType _ = FloatVec3
 instance HasVariableType (V4 GLfloat) where variableType _ = FloatVec4
 
-instance HasVariableType (V1 GLint) where variableType _ = Int'
-instance HasVariableType (V2 GLint) where variableType _ = IntVec2
-instance HasVariableType (V3 GLint) where variableType _ = IntVec3
-instance HasVariableType (V4 GLint) where variableType _ = IntVec4
-
 instance HasVariableType (V1 Int32) where variableType _ = Int'
 instance HasVariableType (V2 Int32) where variableType _ = IntVec2
 instance HasVariableType (V3 Int32) where variableType _ = IntVec3
@@ -44,16 +36,11 @@
 instance HasVariableType (V3 Word32) where variableType _ = UnsignedIntVec3
 instance HasVariableType (V4 Word32) where variableType _ = UnsignedIntVec4
 
-instance HasVariableType (V1 GLuint) where variableType _ = UnsignedInt'
-instance HasVariableType (V2 GLuint) where variableType _ = UnsignedIntVec2
-instance HasVariableType (V3 GLuint) where variableType _ = UnsignedIntVec3
-instance HasVariableType (V4 GLuint) where variableType _ = UnsignedIntVec4
-
 instance HasVariableType (M22 GLfloat) where variableType _ = FloatMat2
 instance HasVariableType (M33 GLfloat) where variableType _ = FloatMat3
 instance HasVariableType (M44 GLfloat) where variableType _ = FloatMat4
 
-instance forall t. HasVariableType t => HasVariableType [t] where 
+instance forall t. HasVariableType t => HasVariableType [t] where
   variableType _ = variableType (undefined::t)
 
 -- | Maps each 'VariableType' to its corresponding
@@ -94,6 +81,4 @@
 instance HasGLType Word8 where glType _ = GL.UnsignedByte
 instance HasGLType Word16 where glType _ = GL.UnsignedShort
 instance HasGLType Word32 where glType _ = GL.UnsignedInt
-instance HasGLType GLuint where glType _ = GL.UnsignedInt
 instance HasGLType Float where glType _ = GL.Float
-instance HasGLType GLfloat where glType _ = GL.Float
diff --git a/src/Graphics/GLUtil/VertexArrayObjects.hs b/src/Graphics/GLUtil/VertexArrayObjects.hs
--- a/src/Graphics/GLUtil/VertexArrayObjects.hs
+++ b/src/Graphics/GLUtil/VertexArrayObjects.hs
@@ -1,8 +1,8 @@
 -- | A thin layer over OpenGL 3.1+ vertex array objects.
-module Graphics.GLUtil.VertexArrayObjects 
+module Graphics.GLUtil.VertexArrayObjects
   (makeVAO, withVAO, deleteVAO, deleteVAOs, VAO) where
 import Graphics.Rendering.OpenGL
-import Graphics.Rendering.OpenGL.Raw.Core31 (glDeleteVertexArrays)
+import Graphics.GL.Core31 (glDeleteVertexArrays)
 import Foreign.Marshal.Array (withArrayLen)
 import Foreign.Marshal.Utils (with)
 import Unsafe.Coerce (unsafeCoerce)
@@ -34,6 +34,6 @@
 
 -- | Delete a list of 'VertexArrayObject's.
 deleteVAOs :: [VertexArrayObject] -> IO ()
-deleteVAOs vaos = withArrayLen (map vaoID vaos) $ 
+deleteVAOs vaos = withArrayLen (map vaoID vaos) $
                     glDeleteVertexArrays . fromIntegral
   where vaoID = unsafeCoerce :: VertexArrayObject -> GLuint
