diff --git a/caramia.cabal b/caramia.cabal
--- a/caramia.cabal
+++ b/caramia.cabal
@@ -1,5 +1,5 @@
 name:                caramia
-version:             0.7.2.1
+version:             0.7.2.2
 synopsis:            High-level OpenGL bindings
 homepage:            https://github.com/Noeda/caramia/
 license:             MIT
@@ -12,7 +12,7 @@
 stability:           experimental
 bug-reports:         https://github.com/Noeda/caramia/issues/
 cabal-version:       >=1.10
-extra-source-files:  README.md
+extra-source-files:  README.md changelog.md
 
 description:
     This is a highish-level OpenGL bindings library for real-time graphics for
@@ -134,7 +134,7 @@
                       ,containers   >=0.5 && <1.0
                       ,exceptions   >=0.6 && <1.0
                       ,lens         >=4.6  && <5.0
-                      ,linear       >=1.15 && <2.0
+                      ,linear       >=1.18 && <2.0
                       ,mtl          >=2.1 && <3.0
                       ,semigroups   >=0.15 && <1.0
                       ,text         >=0.9 && <2.0
@@ -160,8 +160,8 @@
   build-depends:       base, caramia
                       ,containers >=0.5.5 && <1.0
                       ,HUnit >=1.2.5.2 && <2.0
-                      ,linear >=1.15 && <2.0
-                      ,sdl2 >= 2.0 && <3.0
+                      ,linear >=1.18 && <2.0
+                      ,sdl2 >=1.3 && <2.0
                       ,test-framework >=0.8.1 && <1.0
                       ,test-framework-hunit >=0.3.0.1 && <1.0
   default-language:    Haskell2010
@@ -173,8 +173,8 @@
   hs-source-dirs:      tests/shader
   build-depends:       base, caramia
                       ,HUnit >=1.2.5.2 && <2.0
-                      ,linear >=1.15 && <2.0
-                      ,sdl2 >= 2.0 && <3.0
+                      ,linear >=1.18 && <2.0
+                      ,sdl2 >=1.3 && <2.0
                       ,test-framework >=0.8.1 && <1.0
                       ,test-framework-hunit >=0.3.0.1 && <1.0
   default-language:    Haskell2010
@@ -187,8 +187,8 @@
   build-depends:       base, caramia
                       ,containers >=0.5.5 && <1.0
                       ,HUnit >=1.2.5.2 && <2.0
-                      ,linear >=1.15 && <2.0
-                      ,sdl2 >= 2.0 && <3.0
+                      ,linear >=1.18 && <2.0
+                      ,sdl2 >=1.3 && <2.0
                       ,test-framework >=0.8.1 && <1.0
                       ,test-framework-hunit >=0.3.0.1 && <1.0
                       ,transformers >=0.3 && <1.0
@@ -200,7 +200,7 @@
   ghc-options:         -Wall -fno-warn-name-shadowing -threaded -rtsopts -with-rtsopts=-N
   hs-source-dirs:      tests/color
   build-depends:       base, caramia
-                      ,linear >=1.15 && <2.0
+                      ,linear >=1.18 && <2.0
                       ,test-framework >=0.8.1 && <1.0
                       ,test-framework-quickcheck2 >=0.3.0.3 && <1.0
   default-language:    Haskell2010
@@ -213,8 +213,8 @@
   hs-source-dirs:      demos/smoke-test
   if flag(build-toys)
     build-depends:       base, caramia
-                        ,linear >=1.15 && <2.0
-                        ,sdl2 ==1.2.*
+                        ,linear >=1.18 && <2.0
+                        ,sdl2 >=1.3 && <2.0
                         ,text >=0.9 && <2.0
   else
     buildable:          False
@@ -227,7 +227,7 @@
   hs-source-dirs:      demos/memory-info
   if flag(build-toys)
     build-depends:       base, caramia
-                        ,sdl2 ==1.2.*
+                        ,sdl2 >=1.3 && <2.0
   else
     buildable:           False
   default-language:    Haskell2010
@@ -238,8 +238,8 @@
   ghc-options:         -Wall -fno-warn-name-shadowing -threaded -rtsopts -with-rtsopts=-N
   hs-source-dirs:      demos/gl-info
   if flag(build-toys)
-    build-depends:       base
-                        ,sdl2 ==1.2.*
+    build-depends:       base, caramia
+                        ,sdl2 >=1.3 && <2.0
                         ,OpenGLRaw >=1.5
   else
     buildable:           False
@@ -251,7 +251,7 @@
   hs-source-dirs:      demos/query-objects
   if flag(build-toys)
     build-depends:       base, caramia
-                        ,sdl2 ==1.2.*
+                        ,sdl2 >=1.3 && <2.0
                         ,text >=0.9 && <2.0
                         ,transformers >=0.3 && <1.0
                         ,vector >=0.10 && <1.0
@@ -265,7 +265,7 @@
   hs-source-dirs:      demos/textures
   if flag(build-toys)
     build-depends:       base, caramia
-                        ,sdl2 ==1.2.*
+                        ,sdl2 >=1.3 && <2.0
   else
     buildable:           False
   default-language:    Haskell2010
diff --git a/changelog.md b/changelog.md
new file mode 100644
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,7 @@
+0.7.2.1 -> 0.7.2.2
+-------------------
+
+ - 'linear' dependency bumped to >=1.18.
+
+ - 'sdl2' dependency in tests downgraded to 1.3 from 2.0.
+
diff --git a/demos/gl-info/Main.hs b/demos/gl-info/Main.hs
--- a/demos/gl-info/Main.hs
+++ b/demos/gl-info/Main.hs
@@ -1,11 +1,11 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 module Main ( main ) where
 
-import Prelude hiding (init )
 import Graphics.UI.SDL
 import Graphics.Rendering.OpenGL.Raw
 import Data.Bits
-import Control.Applicative
-import Control.Monad
+import Graphics.Caramia.Prelude hiding ( init )
 import Foreign.C.String
 import Foreign.Storable
 import Foreign.Marshal.Alloc
@@ -15,14 +15,14 @@
 main =
     withCString "gl-test" $ \cstr -> do
         let errCheck s x = unless (x == 0) $ error s
-        errCheck "Can't initialize SDL" =<< init initFlagVideo
-        errCheck "Can't set major version" =<< glSetAttribute glAttrContextMajorVersion 3
-        errCheck "Can't set minor version" =<< glSetAttribute glAttrContextMinorVersion 3
-        errCheck "Can't set profile mask" =<< glSetAttribute glAttrContextProfileMask glProfileCore
-        window <- createWindow cstr windowPosUndefined windowPosUndefined
+        errCheck "Can't initialize SDL" =<< init SDL_INIT_VIDEO
+        errCheck "Can't set major version" =<< glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+        errCheck "Can't set minor version" =<< glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+        errCheck "Can't set profile mask" =<< glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+        window <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
                                     500 500
-                                    (windowFlagOpenGL .|.
-                                     windowFlagShown)
+                                    (SDL_WINDOW_OPENGL .|.
+                                     SDL_WINDOW_SHOWN)
         c <- glCreateContext window
         _ <- glMakeCurrent window c
         (major1, minor1) <- alloca $ \major_ptr -> alloca $ \minor_ptr -> do
diff --git a/demos/memory-info/Main.hs b/demos/memory-info/Main.hs
--- a/demos/memory-info/Main.hs
+++ b/demos/memory-info/Main.hs
@@ -10,15 +10,15 @@
 main :: IO ()
 main = 
     withCString "smoke-test" $ \cstr -> do
-        void $ init initFlagVideo
-        _ <- glSetAttribute glAttrContextMajorVersion 3
-        _ <- glSetAttribute glAttrContextMinorVersion 3
-        _ <- glSetAttribute glAttrContextProfileMask glProfileCore
-        _ <- glSetAttribute glAttrContextFlags glContextFlagDebug
-        window <- createWindow cstr windowPosUndefined windowPosUndefined
+        void $ init SDL_INIT_VIDEO
+        _ <- glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+        _ <- glSetAttribute  SDL_GL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
+        window <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
                                     500 500
-                                    (windowFlagOpenGL .|.
-                                     windowFlagShown)
+                                    (SDL_WINDOW_OPENGL .|.
+                                     SDL_WINDOW_SHOWN)
         _ <- glCreateContext window
         giveContext $ do
             putStrLn "Attempting to retrieve GPU memory information..."
diff --git a/demos/query-objects/Main.hs b/demos/query-objects/Main.hs
--- a/demos/query-objects/Main.hs
+++ b/demos/query-objects/Main.hs
@@ -19,15 +19,14 @@
 main :: IO ()
 main =
     withCString "query-objects" $ \cstr -> do
-        void $ init initFlagVideo
-        _ <- glSetAttribute glAttrContextMajorVersion 3
-        _ <- glSetAttribute glAttrContextMinorVersion 3
-        _ <- glSetAttribute glAttrContextProfileMask glProfileCore
-        _ <- glSetAttribute glAttrContextFlags glContextFlagDebug
-        window <- createWindow cstr windowPosUndefined windowPosUndefined
+        _ <- glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+        _ <- glSetAttribute  SDL_GL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
+        window <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
                                     500 500
-                                    (windowFlagOpenGL .|.
-                                     windowFlagShown)
+                                    (SDL_WINDOW_OPENGL .|.
+                                     SDL_WINDOW_SHOWN)
         _ <- glCreateContext window
         giveContext $ do
             color_program <- newPipelineVF passThroughVertex2DShader
diff --git a/demos/smoke-test/Main.hs b/demos/smoke-test/Main.hs
--- a/demos/smoke-test/Main.hs
+++ b/demos/smoke-test/Main.hs
@@ -10,7 +10,6 @@
 import Graphics.Caramia.Prelude hiding ( init )
 import Graphics.Caramia
 import Graphics.UI.SDL
-import qualified Graphics.UI.SDL as SDL
 import Linear.Matrix
 import System.Mem
 
@@ -26,22 +25,21 @@
     putStrLn "Press enter to start the smoke test."
     _ <- getLine
     putStrLn "Running the smoke test..."
-    bracket_ (SDL.init initFlagVideo)
+    bracket_ (init SDL_INIT_VIDEO)
              quit
              program
 
 program :: IO ()
 program =
     withCString "smoke-test" $ \cstr -> do
-        void $ init initFlagVideo
-        _ <- glSetAttribute glAttrContextMajorVersion 3
-        _ <- glSetAttribute glAttrContextMinorVersion 3
-        _ <- glSetAttribute glAttrContextProfileMask glProfileCore
-        _ <- glSetAttribute glAttrContextFlags glContextFlagDebug
-        window <- createWindow cstr windowPosUndefined windowPosUndefined
+        _ <- glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+        _ <- glSetAttribute  SDL_GL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
+        window <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
                                     500 500
-                                    (windowFlagOpenGL .|.
-                                     windowFlagShown)
+                                    (SDL_WINDOW_OPENGL .|.
+                                     SDL_WINDOW_SHOWN)
         _ <- glCreateContext window
         giveContext $ do
             -- Make some buffers.
@@ -66,16 +64,16 @@
                 sh1 <- newShader fragmentShaderSrc Fragment
                 pipeline <- newPipeline [sh1] mempty
                 loc <- getUniformLocation "tutturuu" pipeline
-                setUniform (transpose eye4 :: M44 CFloat)
+                setUniform (transpose identity :: M44 CFloat)
                            loc
                            pipeline
-                setUniform (eye4 :: M44 CDouble)
+                setUniform (identity :: M44 CDouble)
                            loc
                            pipeline
-                setUniform (eye3 :: M33 Float)
+                setUniform (identity :: M33 Float)
                            loc
                            pipeline
-                setUniform (transpose eye3 :: M33 Double)
+                setUniform (transpose identity :: M33 Double)
                            loc
                            pipeline
 
diff --git a/demos/textures/Main.hs b/demos/textures/Main.hs
--- a/demos/textures/Main.hs
+++ b/demos/textures/Main.hs
@@ -11,15 +11,14 @@
 main :: IO ()
 main = 
     withCString "smoke-test" $ \cstr -> do
-        void $ init initFlagVideo
-        _ <- glSetAttribute glAttrContextMajorVersion 3
-        _ <- glSetAttribute glAttrContextMinorVersion 3
-        _ <- glSetAttribute glAttrContextProfileMask glProfileCore
-        _ <- glSetAttribute glAttrContextFlags glContextFlagDebug
-        window <- createWindow cstr windowPosUndefined windowPosUndefined
+        _ <- glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+        _ <- glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+        _ <- glSetAttribute  SDL_GL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
+        window <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
                                     500 500
-                                    (windowFlagOpenGL .|.
-                                     windowFlagShown)
+                                    (SDL_WINDOW_OPENGL .|.
+                                     SDL_WINDOW_SHOWN)
         _ <- glCreateContext window
         giveContext $ do
             putStrLn "Attempting to create all sorts of textures..."
diff --git a/src/Graphics/Caramia/Internal/OpenGLVersion.hs b/src/Graphics/Caramia/Internal/OpenGLVersion.hs
--- a/src/Graphics/Caramia/Internal/OpenGLVersion.hs
+++ b/src/Graphics/Caramia/Internal/OpenGLVersion.hs
@@ -14,15 +14,17 @@
 {-# LANGUAGE CPP #-}
 
 module Graphics.Caramia.Internal.OpenGLVersion
-  ( openGLVersion
+  ( vendor
+  , renderer
+  , gles
+  , openGLVersion
   , OpenGLVersion(..)
   , shadingLanguageVersion
   , shadingLanguageVersions
   ) where
 
-
+import Control.Applicative
 import Control.Monad
-import Data.Functor
 import Data.List (isPrefixOf)
 import Data.Maybe
 import Data.Set as Set
diff --git a/tests/buffer/Main.hs b/tests/buffer/Main.hs
--- a/tests/buffer/Main.hs
+++ b/tests/buffer/Main.hs
@@ -4,6 +4,8 @@
 
 module Main ( main ) where
 
+import Foreign.C.String
+import Data.Bits
 import Control.Concurrent
 import Control.Exception
 import qualified Data.Set as S
@@ -12,9 +14,8 @@
 import Foreign.Ptr
 import Foreign.Storable
 import Graphics.Caramia
-import Graphics.Caramia.Prelude
-import Linear.V2
-import SDL
+import Graphics.Caramia.Prelude hiding ( init )
+import Graphics.UI.SDL
 import System.IO.Unsafe ( unsafePerformIO )
 import Test.Framework
 import Test.Framework.Providers.HUnit
@@ -28,15 +29,16 @@
 {-# NOINLINE sdlLock #-}
 
 setup :: IO a -> IO a
-setup action = runInBoundThread $ withMVar sdlLock $ \_ -> do
-    initialize [InitEverything]
-    let glconfig = defaultOpenGL {
-                    glProfile = Core Normal 3 3
-                    }
-    w <- createWindow "buffer" defaultWindow {
-            windowOpenGL = Just glconfig
-        , windowSize = V2 1500 1000
-        }
+setup action = runInBoundThread $ withMVar sdlLock $ \_ -> withCString "buffer" $ \cstr -> do
+    _ <- init SDL_INIT_VIDEO
+    _ <- glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+    _ <- glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+    _ <- glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+    _ <- glSetAttribute SDL_GL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
+    w <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
+                           1500 1000
+                           (SDL_WINDOW_OPENGL .|.
+                            SDL_WINDOW_SHOWN)
     ctx <- glCreateContext w
     finally (giveContext action) $ do
         glDeleteContext ctx
diff --git a/tests/shader/Main.hs b/tests/shader/Main.hs
--- a/tests/shader/Main.hs
+++ b/tests/shader/Main.hs
@@ -4,12 +4,13 @@
 
 module Main ( main ) where
 
+import Foreign.C.String
+import Data.Bits
 import Control.Concurrent
 import Control.Exception
-import Linear.V2
 import Graphics.Caramia
-import Graphics.Caramia.Prelude
-import SDL
+import Graphics.Caramia.Prelude hiding ( init )
+import Graphics.UI.SDL
 import System.IO.Unsafe ( unsafePerformIO )
 import Test.Framework
 import Test.Framework.Providers.HUnit
@@ -19,15 +20,16 @@
 {-# NOINLINE sdlLock #-}
 
 setup :: IO a -> IO a
-setup action = runInBoundThread $ withMVar sdlLock $ \_ -> do
-    initialize [InitEverything]
-    let glconfig = defaultOpenGL {
-                    glProfile = Core Normal 3 3
-                    }
-    w <- createWindow "buffer" defaultWindow {
-            windowOpenGL = Just glconfig
-        , windowSize = V2 1500 1000
-        }
+setup action = runInBoundThread $ withMVar sdlLock $ \_ -> withCString "shader" $ \cstr -> do
+    _ <- init SDL_INIT_VIDEO
+    _ <- glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+    _ <- glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+    _ <- glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+    _ <- glSetAttribute SDL_GL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
+    w <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
+                           1500 1000
+                           (SDL_WINDOW_OPENGL .|.
+                            SDL_WINDOW_SHOWN)
     ctx <- glCreateContext w
     finally (giveContext action) $ do
         glDeleteContext ctx
diff --git a/tests/texture/Main.hs b/tests/texture/Main.hs
--- a/tests/texture/Main.hs
+++ b/tests/texture/Main.hs
@@ -4,15 +4,16 @@
 
 module Main ( main ) where
 
+import Foreign.C.String
+import Data.Bits
 import Control.Concurrent
 import Control.Exception
 import Control.Monad.IO.Class ( liftIO )
 import qualified Data.IntMap.Strict as IM
-import Linear.V2
 import Graphics.Caramia
 import Graphics.Caramia.Internal.OpenGLCApi
-import Graphics.Caramia.Prelude
-import SDL
+import Graphics.Caramia.Prelude hiding ( init )
+import Graphics.UI.SDL
 import System.IO.Unsafe ( unsafePerformIO )
 import Test.Framework
 import Test.Framework.Providers.HUnit
@@ -23,15 +24,16 @@
 {-# NOINLINE sdlLock #-}
 
 setup :: IO a -> IO a
-setup action = runInBoundThread $ withMVar sdlLock $ \_ -> do
-    initialize [InitEverything]
-    let glconfig = defaultOpenGL {
-                    glProfile = Core Normal 3 3
-                    }
-    w <- createWindow "texture" defaultWindow {
-            windowOpenGL = Just glconfig
-        , windowSize = V2 1500 1000
-        }
+setup action = runInBoundThread $ withMVar sdlLock $ \_ -> withCString "texture" $ \cstr -> do
+    _ <- init SDL_INIT_VIDEO
+    _ <- glSetAttribute SDL_GL_CONTEXT_MAJOR_VERSION 3
+    _ <- glSetAttribute SDL_GL_CONTEXT_MINOR_VERSION 3
+    _ <- glSetAttribute SDL_GL_CONTEXT_PROFILE_MASK SDL_GL_CONTEXT_PROFILE_CORE
+    _ <- glSetAttribute SDL_GL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
+    w <- createWindow cstr SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED
+                           1500 1000
+                           (SDL_WINDOW_OPENGL .|.
+                            SDL_WINDOW_SHOWN)
     ctx <- glCreateContext w
     finally (giveContext action) $ do
         glDeleteContext ctx
