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
@@ -361,7 +361,7 @@
 mapBufferRange t o l b =
    fmap (maybeNullPtr Nothing Just) $ mapBufferRange_ t o l b
 
-flushMappedBufferRange :: BufferTarget -> Offset -> Length -> IO()
+flushMappedBufferRange :: BufferTarget -> Offset -> Length -> IO ()
 flushMappedBufferRange t = glFlushMappedBufferRange (marshalBufferTarget t)
 
 --------------------------------------------------------------------------------
@@ -373,62 +373,71 @@
 type BufferRange = (BufferObject, RangeStartIndex, RangeSize)
 
 data IndexedBufferTarget =
-     IndexedTransformFeedbackBuffer
---marshaling
+     IndexedAtomicCounterBuffer
+   | IndexedShaderStorageBuffer
+   | IndexedTransformFeedbackBuffer
+   | IndexedUniformBuffer
+   deriving ( Eq, Ord, Show )
+
 marshalIndexedBufferTarget :: IndexedBufferTarget -> IPName1I
 marshalIndexedBufferTarget x = case x of
+   IndexedAtomicCounterBuffer -> GetAtomicCounterBuffer
+   IndexedShaderStorageBuffer -> GetShaderStorageBuffer
    IndexedTransformFeedbackBuffer -> GetTransformFeedbackBuffer
-
-marshalIndexedBufferStart :: IndexedBufferTarget -> IPName1I
-marshalIndexedBufferStart x = case x of
-   IndexedTransformFeedbackBuffer -> GetTransformFeedbackBufferStart
-
-marshalIndexedBufferSize :: IndexedBufferTarget -> IPName1I
-marshalIndexedBufferSize x = case x of
-   IndexedTransformFeedbackBuffer -> GetTransformFeedbackBufferSize
-
-getIndexed :: Num a => IPName1I -> BufferIndex -> GettableStateVar a
-getIndexed e i = makeGettableStateVar $ getInteger1i fromIntegral e i
+   IndexedUniformBuffer -> GetUniformBuffer
 
---buffer
 bindBufferBase :: IndexedBufferTarget -> BufferIndex -> StateVar (Maybe BufferObject)
 bindBufferBase t i = makeStateVar (getIndexedBufferBinding t i) (setIndexedBufferBase t i)
 
-setIndexedBufferBase :: IndexedBufferTarget -> BufferIndex -> Maybe BufferObject -> IO ()
-setIndexedBufferBase t i buf=
-   case marshalGetPName . marshalIndexedBufferTarget $ t of
-      Nothing -> recordInvalidEnum
-      Just t' ->
-         glBindBufferBase t' i . bufferID . fromMaybe noBufferObject $ buf
-
 getIndexedBufferBinding :: IndexedBufferTarget -> BufferIndex -> IO (Maybe BufferObject)
 getIndexedBufferBinding t i = do
    buf <- getInteger1i (BufferObject . fromIntegral) (marshalIndexedBufferTarget t) i
    return $ if buf == noBufferObject then Nothing else Just buf
 
+setIndexedBufferBase :: IndexedBufferTarget -> BufferIndex -> Maybe BufferObject -> IO ()
+setIndexedBufferBase t i buf =
+   case marshalGetPName . marshalIndexedBufferTarget $ t of
+      Nothing -> recordInvalidEnum
+      Just t' -> glBindBufferBase t' i . bufferID . fromMaybe noBufferObject $ buf
+
 bindBufferRange :: IndexedBufferTarget -> BufferIndex -> StateVar (Maybe BufferRange)
 bindBufferRange t i = makeStateVar (getIndexedBufferRange t i) (setIndexedBufferRange t i)
 
+getIndexedBufferRange :: IndexedBufferTarget -> BufferIndex -> IO (Maybe BufferRange)
+getIndexedBufferRange t i = do
+  buf <- getInteger1i (BufferObject . fromIntegral) (marshalIndexedBufferTarget t) i
+  if buf == noBufferObject
+     then return Nothing
+     else do start <- get $ indexedBufferStart t i
+             size <- get $ indexedBufferSize t i
+             return $ Just (buf, start, size)
+
 setIndexedBufferRange :: IndexedBufferTarget -> BufferIndex -> Maybe BufferRange -> IO ()
-setIndexedBufferRange t i (Just (buf, start, range)) =
+setIndexedBufferRange t i br =
    case marshalGetPName . marshalIndexedBufferTarget $ t of
       Nothing -> recordInvalidEnum
       Just t' -> glBindBufferRange t' i (bufferID buf) start range
-setIndexedBufferRange t i Nothing = setIndexedBufferBase t i Nothing
+   where (buf, start, range) = fromMaybe (noBufferObject, 0, 0) br
 
-getIndexedBufferRange :: IndexedBufferTarget -> BufferIndex -> IO(Maybe BufferRange)
-getIndexedBufferRange t i = do
-  buf <- getInteger1i (BufferObject . fromIntegral) (marshalIndexedBufferTarget t) i
-  if buf == noBufferObject
-     then return Nothing
-     else do
-        start <- get $ indexedBufferStart t i
-        size <- get $ indexedBufferSize t i
-        return $ Just (buf, start, size)
+getIndexed :: Num a => IPName1I -> BufferIndex -> GettableStateVar a
+getIndexed e i = makeGettableStateVar $ getInteger641i fromIntegral e i
 
+marshalIndexedBufferStart :: IndexedBufferTarget -> IPName1I
+marshalIndexedBufferStart x = case x of
+   IndexedAtomicCounterBuffer -> GetAtomicCounterBufferStart
+   IndexedShaderStorageBuffer -> GetShaderStorageBufferStart
+   IndexedTransformFeedbackBuffer -> GetTransformFeedbackBufferStart
+   IndexedUniformBuffer -> GetUniformBufferStart
 
 indexedBufferStart :: IndexedBufferTarget -> BufferIndex -> GettableStateVar RangeStartIndex
 indexedBufferStart = getIndexed . marshalIndexedBufferStart
+
+marshalIndexedBufferSize :: IndexedBufferTarget -> IPName1I
+marshalIndexedBufferSize x = case x of
+   IndexedAtomicCounterBuffer -> GetAtomicCounterBufferSize
+   IndexedShaderStorageBuffer -> GetShaderStorageBufferSize
+   IndexedTransformFeedbackBuffer -> GetTransformFeedbackBufferSize
+   IndexedUniformBuffer -> GetUniformBufferSize
 
 indexedBufferSize :: IndexedBufferTarget -> BufferIndex -> GettableStateVar RangeSize
 indexedBufferSize = getIndexed . marshalIndexedBufferSize
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
@@ -467,6 +467,7 @@
      ClampVertexColor
    | ClampFragmentColor
    | ClampReadColor
+   deriving ( Eq, Ord, Show )
 
 marshalClampTarget :: ClampTarget -> GLenum
 marshalClampTarget x = case x of
@@ -480,13 +481,13 @@
    ClampVertexColor -> GetVertexColorClamp
    ClampReadColor -> GetReadColorClamp
 
-
 --------------------------------------------------------------------------------
 
 data ClampMode =
      ClampOn
    | FixedOnly
    | ClampOff
+   deriving ( Eq, Ord, Show )
 
 marshalClampMode :: ClampMode -> GLenum
 marshalClampMode x = case x of
@@ -505,5 +506,5 @@
 
 clampColor :: ClampTarget -> StateVar ClampMode
 clampColor ct = makeStateVar (getClampColor ct) (setClampColor ct)
-   where setClampColor t = glClampColor (marshalClampTarget t) . marshalClampMode
-         getClampColor = getEnum1 unmarshalClampMode . marshalClampTargetToPName
+   where getClampColor = getEnum1 unmarshalClampMode . marshalClampTargetToPName
+         setClampColor t = glClampColor (marshalClampTarget t) . marshalClampMode
diff --git a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObject.hs b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObject.hs
--- a/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObject.hs
+++ b/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObject.hs
@@ -25,6 +25,7 @@
 --------------------------------------------------------------------------------
 
 data RenderbufferObject = RenderbufferObject { renderbufferID :: GLuint}
+   deriving ( Eq, Ord, Show )
 
 instance ObjectName RenderbufferObject where
    isObjectName = fmap unmarshalGLboolean . glIsRenderbuffer . renderbufferID
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
@@ -1,7 +1,7 @@
 {-# OPTIONS_HADDOCK hide #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      :  Graphics.Rendering.OpenGL.GL.FramebufferObjects.RendebufferObjects
+-- Module      :  Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects
 -- Copyright   :  (c) Sven Panne, Lars Corbijn 2011-2013
 -- License     :  BSD3
 --
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
@@ -43,6 +43,7 @@
    | GToG
    | BToB
    | AToA
+   deriving ( Eq, Ord, Show )
 
 marshalPixelMapTarget :: PixelMapTarget -> GLenum
 marshalPixelMapTarget x = case x of
diff --git a/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs b/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs
--- a/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs
+++ b/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs
@@ -69,6 +69,9 @@
 getIntegeriv :: GetPName p => p -> GLuint -> Ptr GLint -> IO ()
 getIntegeriv p i =  makeGetter (\e -> glGetIntegeri_v e i) p
 
+getInteger64iv :: GetPName p => p -> GLuint -> Ptr GLint64 -> IO ()
+getInteger64iv p i =  makeGetter (\e -> glGetInteger64i_v e i) p
+
 -----------------------------------------------------------------------------
 
 {-# INLINE makeGetter #-}
@@ -128,6 +131,9 @@
     getSizei1i :: (GLsizei -> a) -> p -> GLuint -> IO a
     getSizei1i = get1i getIntegeriv
 
+    getInteger641i :: (GLint64 -> a) -> p -> GLuint -> IO a
+    getInteger641i = get1i getInteger64iv
+
 -- Indexed helper
 get1i :: (Storable b, Storable c, GetPName p)
     => (p -> GLuint -> Ptr c -> IO ())
@@ -948,18 +954,36 @@
 
 -----------------------------------------------------------------------------
 
-data IPName1I
-    =  GetTransformFeedbackBuffer
+data IPName1I =
+      GetAtomicCounterBuffer
+    | GetAtomicCounterBufferStart
+    | GetAtomicCounterBufferSize
+    | GetShaderStorageBuffer
+    | GetShaderStorageBufferStart
+    | GetShaderStorageBufferSize
+    | GetTransformFeedbackBuffer
     | GetTransformFeedbackBufferStart
     | GetTransformFeedbackBufferSize
+    | GetUniformBuffer
+    | GetUniformBufferStart
+    | GetUniformBufferSize
 
 instance GetIPName1I IPName1I where
 
 instance GetPName IPName1I where
     marshalGetPName pn = case pn of
+        GetAtomicCounterBuffer -> Just gl_ATOMIC_COUNTER_BUFFER
+        GetAtomicCounterBufferStart -> Just gl_ATOMIC_COUNTER_BUFFER_START
+        GetAtomicCounterBufferSize -> Just gl_ATOMIC_COUNTER_BUFFER_SIZE
+        GetShaderStorageBuffer -> Just gl_SHADER_STORAGE_BUFFER
+        GetShaderStorageBufferStart -> Just gl_SHADER_STORAGE_BUFFER_START
+        GetShaderStorageBufferSize -> Just gl_SHADER_STORAGE_BUFFER_SIZE
         GetTransformFeedbackBuffer -> Just gl_TRANSFORM_FEEDBACK_BUFFER
-        GetTransformFeedbackBufferSize -> Just gl_TRANSFORM_FEEDBACK_BUFFER_SIZE
         GetTransformFeedbackBufferStart -> Just gl_TRANSFORM_FEEDBACK_BUFFER_START
+        GetTransformFeedbackBufferSize -> Just gl_TRANSFORM_FEEDBACK_BUFFER_SIZE
+        GetUniformBuffer -> Just gl_UNIFORM_BUFFER
+        GetUniformBufferStart -> Just gl_UNIFORM_BUFFER_START
+        GetUniformBufferSize -> Just gl_UNIFORM_BUFFER_SIZE
 
 -----------------------------------------------------------------------------
 
@@ -1058,6 +1082,7 @@
     = GetColorWritemask         -- ^ bool
 
 instance GetPName4I  PName4ISemiIndexed where
+
 instance GetIPName4I PName4ISemiIndexed where
 
 instance GetPName PName4ISemiIndexed where
@@ -1129,6 +1154,7 @@
     | GetProgramBinaryFormats
 
 instance GetPNameNI PNameNI where
+
 instance GetPName   PNameNI where
    marshalGetPName pn = case pn of
       GetCompressedTextureFormats -> Just gl_COMPRESSED_TEXTURE_FORMATS
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
@@ -16,7 +16,8 @@
 module Graphics.Rendering.OpenGL.GL.Texturing.Objects (
    TextureObject(TextureObject), textureBinding,
    textureResident, areTexturesResident,
-   TexturePriority, texturePriority, prioritizeTextures
+   TexturePriority, texturePriority, prioritizeTextures,
+   generateMipmap'
 ) where
 
 import Data.List
@@ -74,3 +75,12 @@
    withArrayLen (map (textureID . fst) tps) $ \len texObjsBuf ->
       withArray (map snd tps) $
          glPrioritizeTextures (fromIntegral len) texObjsBuf
+
+--------------------------------------------------------------------------------
+
+-- | Generate mipmaps for the specified texture target. Note that from OpenGL
+-- 3.1 onwards you should use this function instead of the texture parameter
+-- 'Graphics.Rendering.OpenGL.GL.Texturing.Parameters.generateMipmap'.
+
+generateMipmap' :: ParameterizedTextureTarget t => t -> IO ()
+generateMipmap' = glGenerateMipmap . marshalParameterizedTextureTarget
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
@@ -140,6 +140,9 @@
 
 --------------------------------------------------------------------------------
 
+-- | Note: OpenGL 3.1 deprecated this texture parameter, use
+-- 'Graphics.Rendering.OpenGL.GL.Texturing.Objects.generateMipmap'' instead.
+
 generateMipmap :: ParameterizedTextureTarget t => t -> StateVar Capability
 generateMipmap = texParami unmarshal marshal GenerateMipmap
    where unmarshal = unmarshalCapability . fromIntegral
diff --git a/OpenGL.cabal b/OpenGL.cabal
--- a/OpenGL.cabal
+++ b/OpenGL.cabal
@@ -1,5 +1,5 @@
 name: OpenGL
-version: 2.9.1.0
+version: 2.9.2.0
 license: BSD3
 license-file: LICENSE
 maintainer: Sven Panne <svenpanne@gmail.com>, Jason Dagit <dagitj@gmail.com>
@@ -143,7 +143,7 @@
    Graphics.Rendering.OpenGL.GLU.ErrorsInternal
   ghc-options: -Wall -O2
   build-depends:
-   base >= 3 && < 5, bytestring, text, OpenGLRaw >= 1.4.0.0, GLURaw >= 1.3.0.0
+   base >= 3 && < 5, bytestring, text, OpenGLRaw >= 1.4.1.0, GLURaw >= 1.3.0.0
 
 source-repository head
   type:     git
