diff --git a/gruff.cabal b/gruff.cabal
--- a/gruff.cabal
+++ b/gruff.cabal
@@ -1,5 +1,5 @@
 Name:                gruff
-Version:             0.3.4
+Version:             0.4
 Synopsis:            fractal explorer GUI using the ruff library
 Description:
     Mandelbrot Set fractal explorer using the ruff library.
@@ -13,6 +13,8 @@
     @cabal install gruff -fmpfr@.
     Note that the default setting for this flag has changed since gruff-0.2.
     .
+    gruff-0.4 updates for ghc-8.0.
+    .
     gruff-0.3.4 updates dependencies for ghc-7.8.  Colouring is improved.
     .
     gruff-0.3.3 relaxes dependencies for ghc-7.6.
@@ -76,7 +78,7 @@
 License:             GPL-2
 License-file:        LICENSE
 Author:              Claude Heiland-Allen
-Maintainer:          claudiusmaximus@goto10.org
+Maintainer:          claude@mathr.co.uk
 Category:            Graphics
 
 Build-type:          Simple
@@ -94,7 +96,7 @@
   Hs-source-dirs:     src
   Exposed-modules:    Fractal.GRUFF
   Build-depends:      base >= 3 && < 5,
-                      ruff >= 0.3.2 && < 0.4
+                      ruff >= 0.4 && < 0.5
   GHC-options:        -Wall
 
 Executable gruff
@@ -113,23 +115,23 @@
                       Tile
                       Utils
                       View
-  Build-depends:      gruff == 0.3.4,
+  Build-depends:      gruff == 0.4,
                       base >= 4 && < 6,
                       containers >= 0 && < 1,
                       directory >= 1 && < 2,
                       filepath >= 1 && < 2,
                       FTGL == 2.0,
-                      gtk >= 0.11 && < 0.13,
-                      gtkglext >= 0.11 && < 0.13,
+                      gtk >= 0.14 && < 0.15,
+                      gtkglext >= 0.13 && < 0.14,
                       old-locale >= 1 && < 2,
-                      OpenGL >= 2.9 && < 2.10,
-                      OpenGLRaw >= 1.1 && < 2,
+                      OpenGL >= 3.0 && < 3.1,
+                      OpenGLRaw >= 3.2 && < 3.3,
                       parallel >= 3.1 && < 3.3,
                       qd >= 1 && < 2,
                       qd-vec >= 1 && < 2,
                       time >= 1 && < 2,
                       Vec >= 0.9 && < 2,
-                      ruff >= 0.3.2 && < 0.4,
+                      ruff >= 0.4 && < 0.5,
                       bytestring,
                       mtl
   if (flag(mpfr))
@@ -138,14 +140,14 @@
     CC-options:       -DHAVE_MPFR
   C-sources:          src/compute.cc, src/rts.c
   CC-options:         -O3 -Wall -pedantic -Wextra
-  GHC-options:        -O2 -Wall -threaded -rtsopts
-  GHC-Prof-Options:   -prof -auto-all -caf-all
+  GHC-options:        -Wall -threaded -rtsopts
+  extra-libraries:    stdc++
 
 source-repository head
   type:     git
-  location: git://gitorious.org/ruff/gruff.git
+  location: http://code.mathr.co.uk/gruff.git
 
 source-repository this
   type:     git
-  location: git://gitorious.org/ruff/gruff.git
-  tag:      v0.3.4
+  location: http://code.mathr.co.uk/gruff.git
+  tag:      v0.4
diff --git a/src/Browser.hs b/src/Browser.hs
--- a/src/Browser.hs
+++ b/src/Browser.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE PatternSynonyms #-}
 module Browser (Browser(..), browserNew, browserRenders) where
 
 import Prelude hiding (log, lines)
@@ -18,13 +19,13 @@
 import Graphics.Rendering.OpenGL hiding
   ( viewport, Angle, Color, Point, Position, Size, S, R )
 import qualified Graphics.Rendering.OpenGL as GL
-import Graphics.Rendering.OpenGL.Raw
-  ( glTexImage2D, gl_TEXTURE_2D, gl_LUMINANCE32F, gl_RGBA, gl_LUMINANCE
-  , gl_FLOAT, gl_UNSIGNED_BYTE, gl_FALSE, glClampColor
-  , gl_CLAMP_VERTEX_COLOR, gl_CLAMP_READ_COLOR, gl_CLAMP_FRAGMENT_COLOR
+import Graphics.GL
+  ( glTexImage2D, pattern GL_TEXTURE_2D, pattern GL_R32F, pattern GL_RGBA, pattern GL_RED
+  , pattern GL_FLOAT, pattern GL_UNSIGNED_BYTE, pattern GL_FALSE, glClampColor
+  , pattern GL_CLAMP_VERTEX_COLOR, pattern GL_CLAMP_READ_COLOR, pattern GL_CLAMP_FRAGMENT_COLOR
   , glGenFramebuffers, glBindFramebuffer, glFramebufferTexture2D
-  , gl_FRAMEBUFFER, gl_COLOR_ATTACHMENT0, glGenerateMipmap
-  , gl_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus
+  , pattern GL_FRAMEBUFFER, pattern GL_COLOR_ATTACHMENT0, glGenerateMipmap
+  , pattern GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus
   , glGetError
   )
 import Graphics.UI.Gtk hiding
@@ -283,7 +284,7 @@
   checkError "clearSheet fbo unbind"
   textureBinding Texture2D $= Just tsheet
   checkError "clearSheet tex bind"
-  glGenerateMipmap gl_TEXTURE_2D
+  glGenerateMipmap GL_TEXTURE_2D
   checkError "clearSheet tex mipmap"
   textureBinding Texture2D $= Nothing
   checkError "clearSheet tex unbind"
@@ -345,7 +346,7 @@
     when (upped > 0) $ do
       textureBinding Texture2D $= Just tsheet
       checkError "renderSheet tex bind"
-      glGenerateMipmap gl_TEXTURE_2D
+      glGenerateMipmap GL_TEXTURE_2D
       checkError "renderSheet tex mipmap"
       textureBinding Texture2D $= Nothing
       checkError "renderSheet tex unbind"
@@ -550,9 +551,9 @@
   checkError "upload 2"
   textureBinding Texture2D $= Just tex
   checkError "upload 3"
-  glTexImage2D gl_TEXTURE_2D 0 (fromIntegral gl_LUMINANCE32F)
+  glTexImage2D GL_TEXTURE_2D 0 (fromIntegral GL_R32F)
     (fromIntegral tileSize) (fromIntegral tileSize) 0
-      gl_LUMINANCE gl_FLOAT p
+      GL_RED GL_FLOAT p
   checkError "upload 4"
   textureFilter Texture2D $= ((Nearest, Nothing), Nearest)
   checkError "upload 5"
@@ -717,11 +718,11 @@
   log s Debug "realizeCallback"
   drawBuffer $= BackBuffers
   checkError "realize db"
-  glClampColor gl_CLAMP_VERTEX_COLOR gl_FALSE
+  glClampColor GL_CLAMP_VERTEX_COLOR $ fromIntegral GL_FALSE
   checkError "realize clv"
-  glClampColor gl_CLAMP_READ_COLOR gl_FALSE
+  glClampColor GL_CLAMP_READ_COLOR $ fromIntegral GL_FALSE
   checkError "realize clr"
-  glClampColor gl_CLAMP_FRAGMENT_COLOR gl_FALSE
+  glClampColor GL_CLAMP_FRAGMENT_COLOR $ fromIntegral GL_FALSE
   checkError "realize clf"
   f <- getDataFileName "minimal.frag"
   prog' <- shader Nothing (Just f)
@@ -734,7 +735,7 @@
   [tsheet0', tsheet1'] <- genObjectNames 2
   checkError "realize sheets"
   -- FIXME hardcoded font path
-  font' <- createTextureFont "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf"
+  font' <- createTextureFont "/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf"
   -- FIXME destroyFont (font s) at exit
   _ <- setFontFaceSize font' 16 72
   ps <- replicateM numCapabilities $ do
@@ -768,8 +769,8 @@
     checkError "reallocate 1"
     textureBinding Texture2D $= Just t
     checkError "reallocate 2"
-    glTexImage2D gl_TEXTURE_2D 0 (fromIntegral gl_RGBA)
-      (fromIntegral tw) (fromIntegral th) 0 gl_RGBA gl_UNSIGNED_BYTE
+    glTexImage2D GL_TEXTURE_2D 0 (fromIntegral GL_RGBA)
+      (fromIntegral tw) (fromIntegral th) 0 GL_RGBA GL_UNSIGNED_BYTE
       nullPtr
     checkError "reallocate 3"
     textureFilter Texture2D $= ((Linear', Just Linear'), Linear')
@@ -792,21 +793,21 @@
 bindFBO :: GLuint -> TextureObject -> IO ()
 bindFBO f (TextureObject t) = do
   checkError "bindFBO begin"
-  glBindFramebuffer gl_FRAMEBUFFER f
+  glBindFramebuffer GL_FRAMEBUFFER f
   checkError "bindFBO 1"
-  glFramebufferTexture2D gl_FRAMEBUFFER gl_COLOR_ATTACHMENT0 gl_TEXTURE_2D t 0
+  glFramebufferTexture2D GL_FRAMEBUFFER GL_COLOR_ATTACHMENT0 GL_TEXTURE_2D t 0
   checkError "bindFBO 2"
-  err <- glCheckFramebufferStatus gl_FRAMEBUFFER
-  when (err /= gl_FRAMEBUFFER_COMPLETE) $
+  err <- glCheckFramebufferStatus GL_FRAMEBUFFER
+  when (err /= GL_FRAMEBUFFER_COMPLETE) $
     putStrLn ("OpenGL framebuffer error: " ++ show err)
   checkError "bindFBO end"
 
 unbindFBO :: IO ()
 unbindFBO = do
   checkError "unbindFBO begin"
-  glFramebufferTexture2D gl_FRAMEBUFFER gl_COLOR_ATTACHMENT0 gl_TEXTURE_2D 0 0
+  glFramebufferTexture2D GL_FRAMEBUFFER GL_COLOR_ATTACHMENT0 GL_TEXTURE_2D 0 0
   checkError "unbindFBO 1"
-  glBindFramebuffer gl_FRAMEBUFFER 0
+  glBindFramebuffer GL_FRAMEBUFFER 0
   checkError "unbindFBO end"
 
 checkError :: String -> IO ()
diff --git a/src/Fractal/GRUFF.hs b/src/Fractal/GRUFF.hs
--- a/src/Fractal/GRUFF.hs
+++ b/src/Fractal/GRUFF.hs
@@ -3,7 +3,7 @@
 Copyright   :  (c) Claude Heiland-Allen 2011
 License     :  GPL-2
 
-Maintainer  :  claudiusmaximus@goto10.org
+Maintainer  :  claude@mathr.co.uk
 Stability   :  unstable
 Portability :  portable
 
diff --git a/src/Logger.hs b/src/Logger.hs
--- a/src/Logger.hs
+++ b/src/Logger.hs
@@ -4,7 +4,7 @@
 import Control.Concurrent (forkIO, newChan, readChan, writeChan)
 import Control.Monad (when)
 import Data.Time (formatTime, getCurrentTime, UTCTime)
-import System.Locale (defaultTimeLocale)
+import Data.Time.Format (defaultTimeLocale)
 import System.FilePath ((</>), (<.>))
 import System.IO (openFile, IOMode(WriteMode), hPutStrLn, hClose, hFlush)
 
