diff --git a/linear-opengl.cabal b/linear-opengl.cabal
--- a/linear-opengl.cabal
+++ b/linear-opengl.cabal
@@ -1,5 +1,5 @@
 name:                linear-opengl
-version:             0.2.0.10
+version:             0.3.0.0
 synopsis:            Isomorphisms between linear and OpenGL types
 description:         This provides various useful utilities for mapping OpenGL vectors, vertices, and matrices to their analogues in the `linear` package
 homepage:            http://www.github.com/bgamari/linear-opengl
@@ -19,12 +19,12 @@
 library
   exposed-modules:     Linear.OpenGL
   other-modules:       Linear.OpenGL.MatrixUniforms
-  build-depends:       base >=4.6 && <4.9,
+  build-depends:       base >=4.6 && <4.10,
                        linear >=1.10 && <1.21,
-                       lens >=4.2 && <4.14,
-                       distributive >=0.4 && <0.5,
+                       lens >=4.2 && <4.15,
+                       distributive >=0.4 && <0.6,
                        tagged >= 0.7 && < 0.9,
-                       OpenGL >=2.9 && <2.14,
-                       OpenGLRaw >= 1.5 && <2.7
+                       OpenGL >=2.9 && <3.1,
+                       OpenGLRaw >= 1.5 && <3.3
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/Linear/OpenGL/MatrixUniforms.hs b/src/Linear/OpenGL/MatrixUniforms.hs
--- a/src/Linear/OpenGL/MatrixUniforms.hs
+++ b/src/Linear/OpenGL/MatrixUniforms.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE CPP #-}
 
 module Linear.OpenGL.MatrixUniforms () where
 
@@ -9,10 +10,19 @@
 import Foreign
 
 import Graphics.Rendering.OpenGL.GL hiding (Proxy)
+#if MIN_VERSION_OpenGLRaw(3,2,0)
+import Graphics.GL.Core31
+#else
 import Graphics.Rendering.OpenGL.Raw.Core31
+#endif
 
 import Data.Distributive
 import Linear
+
+#if MIN_VERSION_OpenGLRaw(3,2,0)
+gl_CURRENT_PROGRAM :: GLenum
+gl_CURRENT_PROGRAM = GL_CURRENT_PROGRAM
+#endif
 
 maxComponentSize :: Int
 maxComponentSize = sizeOf (undefined :: GLint) `max` sizeOf (undefined :: GLfloat)
