diff --git a/OpenGL.cabal b/OpenGL.cabal
--- a/OpenGL.cabal
+++ b/OpenGL.cabal
@@ -1,5 +1,5 @@
 name: OpenGL
-version: 2.10.0.0
+version: 2.10.0.1
 synopsis: A binding for the OpenGL graphics system
 description:
   A Haskell binding for the OpenGL graphics system (GL, version 4.4) and its
diff --git a/src/Graphics/Rendering/OpenGL/GL/BufferObjects.hs b/src/Graphics/Rendering/OpenGL/GL/BufferObjects.hs
--- a/src/Graphics/Rendering/OpenGL/GL/BufferObjects.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/BufferObjects.hs
@@ -42,8 +42,8 @@
 ) where
 
 import Data.Maybe
-import Foreign.Marshal.Alloc
 import Foreign.Marshal.Array
+import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Rendering.OpenGL.GL.Exception
@@ -278,7 +278,7 @@
    GetBufferMapped -> gl_BUFFER_MAPPED
 
 getBufferParameter :: BufferTarget -> (GLenum -> a) -> GetBufferPName -> IO a
-getBufferParameter t f p = alloca $ \buf -> do
+getBufferParameter t f p = with 0 $ \buf -> do
    glGetBufferParameteriv (marshalBufferTarget t)
                           (marshalGetBufferPName p) buf
    peek1 (f . fromIntegral) buf
@@ -286,7 +286,7 @@
 --------------------------------------------------------------------------------
 
 getBufferPointer :: BufferTarget -> IO (Ptr a)
-getBufferPointer t = alloca $ \buf -> do
+getBufferPointer t = with nullPtr $ \buf -> do
    glGetBufferPointerv (marshalBufferTarget t) gl_BUFFER_MAP_POINTER buf
    peek buf
 
diff --git a/src/Graphics/Rendering/OpenGL/GL/Evaluators.hs b/src/Graphics/Rendering/OpenGL/GL/Evaluators.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Evaluators.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Evaluators.hs
@@ -47,8 +47,8 @@
 import Control.Monad
 import Data.List
 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.Capability
@@ -198,7 +198,7 @@
    domain <- allocaArray 2 $ \ptr -> do
       glGetMapv target (marshalGetMapQuery Domain) ptr
       peek2 (,) ptr
-   order <- alloca $ \ptr -> do
+   order <- with 0 $ \ptr -> do
       glGetMapiv target (marshalGetMapQuery Order) ptr
       fmap fromIntegral $ peek ptr
    withNewMap1 (MapDescriptor domain (numComponents dummyControlPoint) order numComp) $
@@ -297,7 +297,7 @@
    (uDomain, vDomain) <- allocaArray 4 $ \ptr -> do
       glGetMapv target (marshalGetMapQuery Domain) ptr
       peek4 (\u1 u2 v1 v2 -> ((u1, u2), (v1, v2))) ptr
-   (uOrder, vOrder) <- allocaArray 2 $ \ptr -> do
+   (uOrder, vOrder) <- withArray [0,0] $ \ptr -> do
       glGetMapiv target (marshalGetMapQuery Order) ptr
       peek2 (,) ptr
    let vStride = numComponents dummyControlPoint
diff --git a/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjectAttachment.hs b/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjectAttachment.hs
--- a/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjectAttachment.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjectAttachment.hs
@@ -98,7 +98,7 @@
 
 getFBAParameteriv :: FramebufferAttachment fba => FramebufferTarget -> fba
     -> (GLint -> a) -> GLenum -> IO a
-getFBAParameteriv fbt fba f p = alloca $ \buf -> do
+getFBAParameteriv fbt fba f p = with 0 $ \buf -> do
    glGetFramebufferAttachmentParameteriv (marshalFramebufferTarget fbt)
       mfba p buf
    peek1 f buf
diff --git a/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferTarget.hs b/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferTarget.hs
--- a/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferTarget.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferTarget.hs
@@ -34,7 +34,7 @@
 
 getRBParameteriv :: RenderbufferTarget -> (GLint -> a) -> GLenum -> IO a
 getRBParameteriv rbt f p =
-   alloca $ \buf -> do
+   with 0 $ \buf -> do
       glGetRenderbufferParameteriv (marshalRenderbufferTarget rbt) p buf
       peek1 f buf
 -----------------------------------------------------------------------------
diff --git a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs
--- a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs
@@ -213,7 +213,7 @@
 
 getColorTableParameteri :: (GLint -> a) -> ColorTable -> ColorTablePName -> IO a
 getColorTableParameteri f ct p =
-   alloca $ \buf -> do
+   with 0 $ \buf -> do
       glGetColorTableParameteriv
          (marshalColorTable ct)
          (marshalColorTablePName p)
diff --git a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs
--- a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs
@@ -184,7 +184,7 @@
 getConvolutionParameteri ::
    (GLint -> a) -> ConvolutionTarget -> ConvolutionParameter -> IO a
 getConvolutionParameteri f t p =
-   alloca $ \buf -> do
+   with 0 $ \buf -> do
       glGetConvolutionParameteriv
          (marshalConvolutionTarget t) (marshalConvolutionParameter p) buf
       peek1 f buf
diff --git a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs
--- a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs
@@ -18,7 +18,7 @@
    histogramRGBASizes, histogramLuminanceSize
 ) where
 
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.PixelData
@@ -63,7 +63,7 @@
 getHistogramParameteri ::
    (GLint -> a) -> Proxy -> GetHistogramParameterPName -> IO a
 getHistogramParameteri f proxy p =
-   alloca $ \buf -> do
+   with 0 $ \buf -> do
       glGetHistogramParameteriv
          (marshalHistogramTarget (proxyToHistogramTarget proxy))
          (marshalGetHistogramParameterPName p)
diff --git a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs
--- a/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs
@@ -17,7 +17,7 @@
    minmax, getMinmax, resetMinmax
 ) where
 
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Graphics.Rendering.OpenGL.GL.Capability
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.PixelData
@@ -81,7 +81,7 @@
 
 getMinmaxParameteri :: (GLint -> a) -> GetMinmaxParameterPName -> IO a
 getMinmaxParameteri f p =
-   alloca $ \buf -> do
+   with 0 $ \buf -> do
       glGetMinmaxParameteriv
          (marshalMinmaxTarget Minmax)
          (marshalGetMinmaxParameterPName p)
diff --git a/src/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs b/src/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs
--- a/src/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs
@@ -15,7 +15,7 @@
   PixellikeObjectTarget(pixellikeObjTarParam),
 ) where
 
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObjectAttachment
 import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget
 import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget
@@ -77,6 +77,6 @@
       DepthSize -> gl_TEXTURE_DEPTH_SIZE
       StencilSize -> gl_TEXTURE_STENCIL_SIZE
    pixObjTarQueryFunc (TextureTargetFull t level) p =
-      alloca $ \buf -> do
+      with 0 $ \buf -> do
       glGetTexLevelParameteriv (marshalQueryableTextureTarget t) level p buf
       peek1 id buf
diff --git a/src/Graphics/Rendering/OpenGL/GL/QueryObjects.hs b/src/Graphics/Rendering/OpenGL/GL/QueryObjects.hs
--- a/src/Graphics/Rendering/OpenGL/GL/QueryObjects.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/QueryObjects.hs
@@ -31,6 +31,7 @@
 ) where
 
 import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Rendering.OpenGL.GL.Exception
@@ -111,7 +112,7 @@
 getQueryi :: (GLint -> a) -> GetQueryPName -> QueryTarget -> GettableStateVar a
 getQueryi f p t =
    makeGettableStateVar $
-      alloca $ \buf -> do
+      with 0 $ \buf -> do
          getQueryiv' t p buf
          peek1 f buf
 
diff --git a/src/Graphics/Rendering/OpenGL/GL/QueryUtils/VertexAttrib.hs b/src/Graphics/Rendering/OpenGL/GL/QueryUtils/VertexAttrib.hs
--- a/src/Graphics/Rendering/OpenGL/GL/QueryUtils/VertexAttrib.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/QueryUtils/VertexAttrib.hs
@@ -19,6 +19,7 @@
 ) where
 
 import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Rendering.OpenGL.GL.PeekPoke
@@ -55,7 +56,7 @@
 --------------------------------------------------------------------------------
 
 getVertexAttribInteger1 :: (GLint -> b) -> AttribLocation -> GetVertexAttribPName -> IO b
-getVertexAttribInteger1 f (AttribLocation location) n = alloca $ \buf -> do
+getVertexAttribInteger1 f (AttribLocation location) n = with 0 $ \buf -> do
    glGetVertexAttribiv location (marshalGetVertexAttribPName n) buf
    peek1 f buf
 
@@ -92,6 +93,6 @@
 --------------------------------------------------------------------------------
 
 getVertexAttribPointer :: AttribLocation -> GetVertexAttribPointerPName -> IO (Ptr a)
-getVertexAttribPointer (AttribLocation location) n = alloca $ \buf -> do
+getVertexAttribPointer (AttribLocation location) n = with nullPtr $ \buf -> do
    glGetVertexAttribPointerv location (marshalGetVertexAttribPointerPName n) buf
    peek buf
diff --git a/src/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs b/src/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs
@@ -20,7 +20,7 @@
    programVar1, programVar3
 ) where
 
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.ObjectName
@@ -63,7 +63,7 @@
    | TessGenSpacing
    | TessGenVertexOrder
    | TessGenPointMode
-   | ComputeLocalWorkSize  -- 3 integers!
+   | ComputeWorkGroupSize  -- 3 integers!
    | ProgramSeparable
    | ProgramBinaryRetrievableHint
    | ActiveAtomicCounterBuffers
@@ -94,7 +94,7 @@
    TessGenSpacing -> gl_TESS_GEN_SPACING
    TessGenVertexOrder -> gl_TESS_GEN_VERTEX_ORDER
    TessGenPointMode -> gl_TESS_GEN_POINT_MODE
-   ComputeLocalWorkSize -> gl_COMPUTE_LOCAL_WORK_SIZE
+   ComputeWorkGroupSize ->  0x8267 -- gl_COMPUTE_WORK_GROUP_SIZE a.k.a. gl_COMPUTE_LOCAL_WORK_SIZE
    ProgramSeparable -> gl_PROGRAM_SEPARABLE
    ProgramBinaryRetrievableHint -> gl_PROGRAM_BINARY_RETRIEVABLE_HINT
    ActiveAtomicCounterBuffers -> gl_ACTIVE_ATOMIC_COUNTER_BUFFERS
@@ -109,6 +109,6 @@
 programVarN :: (Ptr GLint -> IO a) -> GetProgramPName -> Program -> GettableStateVar a
 programVarN f p program =
    makeGettableStateVar $
-      alloca $ \buf -> do
+      with 0 $ \buf -> do
          glGetProgramiv (programID program) (marshalGetProgramPName p) buf
          f buf
diff --git a/src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderObjects.hs b/src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderObjects.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderObjects.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderObjects.hs
@@ -153,7 +153,7 @@
 shaderVar :: (GLint -> a) -> GetShaderPName -> Shader -> GettableStateVar a
 shaderVar f p shader =
    makeGettableStateVar $
-      alloca $ \buf -> do
+      with 0 $ \buf -> do
          glGetShaderiv (shaderID shader) (marshalGetShaderPName p) buf
          peek1 f buf
 
diff --git a/src/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs b/src/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs
@@ -19,7 +19,7 @@
 ) where
 
 import Control.Monad
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Rendering.OpenGL.GL.ByteString
@@ -150,9 +150,9 @@
    makeGettableStateVar $ do
       numActiveVars <- get (numVars p)
       maxLen <- get (maxLength p)
-      alloca $ \nameLengthBuf ->
-         alloca $ \sizeBuf ->
-            alloca $ \typeBuf ->
+      with 0 $ \nameLengthBuf ->
+         with 0 $ \sizeBuf ->
+            with 0 $ \typeBuf ->
                let ixs = if numActiveVars > 0 then [0 .. numActiveVars-1] else []
                in forM ixs $ \i -> do
                   n <- createAndTrimByteString maxLen $ \nameBuf -> do
diff --git a/src/Graphics/Rendering/OpenGL/GL/SyncObjects.hs b/src/Graphics/Rendering/OpenGL/GL/SyncObjects.hs
--- a/src/Graphics/Rendering/OpenGL/GL/SyncObjects.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/SyncObjects.hs
@@ -25,7 +25,7 @@
    SyncStatus(..), syncStatus
 ) where
 
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.ObjectName
@@ -108,6 +108,6 @@
 syncStatus :: SyncObject -> GettableStateVar SyncStatus
 syncStatus syncObject =
    makeGettableStateVar $
-      alloca $ \buf -> do
+      with 0 $ \buf -> do
          glGetSynciv (syncID syncObject) gl_SYNC_STATUS 1 nullPtr buf
          peek1 (unmarshalSyncStatus . fromIntegral) buf
diff --git a/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs b/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs
@@ -20,7 +20,7 @@
 ) where
 
 import Control.Monad
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Graphics.Rendering.OpenGL.GL.GLboolean
 import Graphics.Rendering.OpenGL.GL.PeekPoke
 import Graphics.Rendering.OpenGL.GL.PixelRectangles
@@ -157,6 +157,6 @@
 
 getTexLevelParameteri :: (GLint -> a) -> GLenum -> Level -> TexLevelParameter -> IO a
 getTexLevelParameteri f t level p =
-   alloca $ \buf -> do
+   with 0 $ \buf -> do
       glGetTexLevelParameteriv t level (marshalTexLevelParameter p) buf
       peek1 f buf
diff --git a/src/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs b/src/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs
--- a/src/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs
@@ -299,7 +299,7 @@
                       -> IO ()
 texImage2DMultisample target proxy (Samples s) int (TextureSize2D w h) loc =
    glTexImage2DMultisample
-      (marshalMultisample proxy target) s (marshalPixelInternalFormat int)
+      (marshalMultisample proxy target) s (fromIntegral (marshalPixelInternalFormat int))
       w h (marshalSampleLocations loc)
 
 marshalMultisample :: ParameterizedTextureTarget t => Proxy -> t -> GLenum
@@ -316,7 +316,7 @@
                       -> IO ()
 texImage3DMultisample target proxy (Samples s) int (TextureSize3D w h d) loc =
    glTexImage3DMultisample
-      (marshalMultisample proxy target) s (marshalPixelInternalFormat int)
+      (marshalMultisample proxy target) s (fromIntegral (marshalPixelInternalFormat int))
       w h d (marshalSampleLocations loc)
 
 --------------------------------------------------------------------------------
diff --git a/src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs b/src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs
--- a/src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs
+++ b/src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs
@@ -35,7 +35,7 @@
    vertexAttribPointer, vertexAttribArray,
 ) where
 
-import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Rendering.OpenGL.GL.Capability
@@ -438,7 +438,7 @@
 --------------------------------------------------------------------------------
 
 getPointer :: GetPointervPName -> IO (Ptr a)
-getPointer n = alloca $ \buf -> do
+getPointer n = with nullPtr $ \buf -> do
    glGetPointerv (marshalGetPointervPName n) buf
    peek buf
 
