diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,27 +1,30 @@
-Copyright (c) Amy de Buitléir 2010-2015
+Copyright Amy de Buitléir (c) 2016
+
 All rights reserved.
 
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions 
-are met:
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright 
-  notice, this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright
-  notice, this list of conditions and the following disclaimer in the
-  documentation and/or other materials provided with the distribution.
-* Neither the name of the author nor the names of other contributors
-  may be used to endorse or promote products derived from this software
-  without specific prior written permission.
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Amy de Buitléir nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/grid.cabal b/grid.cabal
--- a/grid.cabal
+++ b/grid.cabal
@@ -1,71 +1,67 @@
-Name:              grid
-Version:           7.8.6
-Stability:         experimental
-Synopsis:          Tools for working with regular grids (graphs, lattices).
-Description:       Provides tools for working with regular arrangements
-                   of tiles, such as might be used in a board game or some
-                   other type of grid map. Currently supports triangular,
-                   square, and hexagonal tiles, with various 2D and
-                   toroidal layouts.
-                   The userguide is available at
-                   <https://github.com/mhwombat/grid/wiki>.
-Category:          Math
-License:           BSD3
-License-file:      LICENSE
-Copyright:         (c) Amy de Buitléir 2010-2016
-Homepage:          https://github.com/mhwombat/grid
-Bug-reports:       https://github.com/mhwombat/grid/issues
-Author:            Amy de Buitléir
-Maintainer:        amy@nualeargais.ie
-Build-Type:        Simple
-Cabal-Version:     >=1.8
-
-source-repository head
-  type:     git
-  location: https://github.com/mhwombat/grid.git
-
-source-repository this
-  type:     git
-  location: https://github.com/mhwombat/grid.git
-  tag:      7.8.5
-
+name:                grid
+version:             7.8.7
+synopsis:            Tools for working with regular grids (graphs, lattices).
+description:         Provides tools for working with regular arrangements
+                     of tiles, such as might be used in a board game or some
+                     other type of grid map. Currently supports triangular,
+                     square, and hexagonal tiles, with various 2D and
+                     toroidal layouts.
+                     The userguide is available at
+                     <https://github.com/mhwombat/grid/wiki>.
+homepage:            https://github.com/mhwombat/grid#readme
+bug-reports:         https://github.com/mhwombat/grid/issues
+license:             BSD3
+license-file:        LICENSE
+author:              Amy de Buitléir
+maintainer:          amy@nualeargais.ie
+copyright:           (c) Amy de Buitléir 2010-2016
+category:            Math
+build-type:          Simple
+-- extra-source-files:
+cabal-version:       >=1.10
 
 library
-  hs-source-dirs:  src
-  build-depends:   base ==4.*,
-                   cereal >=0.4 && < 0.6,
-                   containers ==0.5.*
-  ghc-options:     -Wall
-  exposed-modules: Math.Geometry.Grid,
-                   Math.Geometry.Grid.Triangular,
-                   Math.Geometry.Grid.Square,
-                   Math.Geometry.Grid.Hexagonal,
-                   Math.Geometry.Grid.Hexagonal2,
-                   Math.Geometry.Grid.Octagonal,
-                   Math.Geometry.GridInternal,
-                   Math.Geometry.Grid.TriangularInternal,
-                   Math.Geometry.Grid.SquareInternal,
-                   Math.Geometry.Grid.HexagonalInternal,
-                   Math.Geometry.Grid.HexagonalInternal2,
-                   Math.Geometry.Grid.OctagonalInternal,
-                   Math.Geometry.GridMap,
-                   Math.Geometry.GridMap.Lazy
+  hs-source-dirs:      src
+  exposed-modules:     Math.Geometry.Grid,
+                       Math.Geometry.Grid.Triangular,
+                       Math.Geometry.Grid.Square,
+                       Math.Geometry.Grid.Hexagonal,
+                       Math.Geometry.Grid.Hexagonal2,
+                       Math.Geometry.Grid.Octagonal,
+                       Math.Geometry.GridInternal,
+                       Math.Geometry.Grid.TriangularInternal,
+                       Math.Geometry.Grid.SquareInternal,
+                       Math.Geometry.Grid.HexagonalInternal,
+                       Math.Geometry.Grid.HexagonalInternal2,
+                       Math.Geometry.Grid.OctagonalInternal,
+                       Math.Geometry.GridMap,
+                       Math.Geometry.GridMap.Lazy
+  ghc-options:         -Wall
+  build-depends:       base >= 4.7 && < 5,
+                       cereal >=0.4 && <0.6,
+                       containers ==0.5.*
+  default-language:    Haskell2010
 
-test-suite grid-tests
-  type:            exitcode-stdio-1.0
-  build-depends:   base ==4.*,
-                   containers ==0.5.*,
-                   test-framework-quickcheck2 ==0.3.*,
-                   QuickCheck ==2.8.*,
-                   test-framework ==0.8.*,
-                   grid
-  hs-source-dirs:  test
-  ghc-options:     -Wall
-  main-is:         Main.hs
-  other-modules:   Math.Geometry.GridQC,
-                   Math.Geometry.Grid.Hexagonal2QC,
-                   Math.Geometry.Grid.HexagonalQC,
-                   Math.Geometry.Grid.OctagonalQC,
-                   Math.Geometry.Grid.SquareQC,
-                   Math.Geometry.Grid.TriangularQC
-                   Math.Geometry.GridMap.LazyQC
+test-suite grid-test
+  type:                exitcode-stdio-1.0
+  hs-source-dirs:      test
+  main-is:             TestMain.hs
+  other-modules:       Math.Geometry.GridQC,
+                       Math.Geometry.Grid.Hexagonal2QC,
+                       Math.Geometry.Grid.HexagonalQC,
+                       Math.Geometry.Grid.OctagonalQC,
+                       Math.Geometry.Grid.SquareQC,
+                       Math.Geometry.Grid.TriangularQC
+                       Math.Geometry.GridMap.LazyQC
+  build-depends:       base,
+                       grid,
+                       containers,
+                       test-framework ==0.8.*,
+                       test-framework-quickcheck2 ==0.3.*,
+                       QuickCheck >=2.8 && <2.10
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
+  default-language:    Haskell2010
+
+source-repository head
+  type:     git
+  location: https://github.com/mhwombat/grid
diff --git a/src/Math/Geometry/GridMap/Lazy.hs b/src/Math/Geometry/GridMap/Lazy.hs
--- a/src/Math/Geometry/GridMap/Lazy.hs
+++ b/src/Math/Geometry/GridMap/Lazy.hs
@@ -52,7 +52,7 @@
   where kvs' = Prelude.filter (validIndex . fst) kvs
         validIndex k = g `G.contains` k
 
-empty :: G.Grid g => g -> LGridMap g v
+empty :: g -> LGridMap g v
 empty g = LGridMap g M.empty
 
 instance (G.Grid g, Ord (G.Index g)) => Functor (LGridMap g) where
diff --git a/test/Main.hs b/test/Main.hs
deleted file mode 100644
--- a/test/Main.hs
+++ /dev/null
@@ -1,36 +0,0 @@
-------------------------------------------------------------------------
--- |
--- Module      :  Math.Geometry.Grid.Main
--- Copyright   :  (c) Amy de Buitléir 2012-2016
--- License     :  BSD-style
--- Maintainer  :  amy@nualeargais.ie
--- Stability   :  experimental
--- Portability :  portable
---
--- QuickCheck tests.
---
-------------------------------------------------------------------------
-module Main where
-
-import Math.Geometry.Grid.TriangularQC ( test )
-import Math.Geometry.Grid.SquareQC ( test )
-import Math.Geometry.Grid.HexagonalQC ( test )
-import Math.Geometry.Grid.Hexagonal2QC ( test )
-import Math.Geometry.Grid.OctagonalQC ( test )
-import Math.Geometry.GridMap.LazyQC (test)
-
-import Test.Framework ( defaultMain, Test )
-
-tests :: [Test]
-tests = 
-  [ 
-    Math.Geometry.Grid.TriangularQC.test,
-    Math.Geometry.Grid.SquareQC.test,
-    Math.Geometry.Grid.HexagonalQC.test,
-    Math.Geometry.Grid.Hexagonal2QC.test,
-    Math.Geometry.Grid.OctagonalQC.test,
-    Math.Geometry.GridMap.LazyQC.test
-  ]
-
-main :: IO ()
-main = defaultMain tests
diff --git a/test/Math/Geometry/GridQC.hs b/test/Math/Geometry/GridQC.hs
--- a/test/Math/Geometry/GridQC.hs
+++ b/test/Math/Geometry/GridQC.hs
@@ -215,10 +215,9 @@
         (a:bs) = points t
 
 gridProperties 
-  :: (TestData t, Grid (BaseGrid t), Arbitrary t, 
-    Eq (Index (BaseGrid t)), Ord (Index (BaseGrid t)), 
-    Eq (Direction (BaseGrid t))) 
-    => String -> [(String, t -> Property)]
+  :: (TestData t, Grid (BaseGrid t), Eq (Index (BaseGrid t)),
+    Ord (Index (BaseGrid t)), Eq (Direction (BaseGrid t))) 
+      => String -> [(String, t -> Property)]
 gridProperties s = 
   [
     ("prop_indices_are_contained: " ++ s, prop_indices_are_contained),
@@ -246,7 +245,7 @@
   maxDistance :: t -> Int
 
 prop_tile_count_correct
-  :: (TestData t, TestDataF t, Grid (BaseGrid t), Ord (Index (BaseGrid t)))
+  :: (TestData t, TestDataF t, Grid (BaseGrid t))
     => t -> Property
 prop_tile_count_correct t = nonNull g ==>
   tileCount g == expectedTileCount t 
@@ -259,7 +258,7 @@
   where g = grid t
 
 prop_distance_in_bounds
-  :: (TestData t, TestDataF t, Grid (BaseGrid t), Ord (Index (BaseGrid t)))
+  :: (TestData t, TestDataF t, Grid (BaseGrid t))
     => t -> Property
 prop_distance_in_bounds t = nonNull g ==> 
   0 <= n && n <= maxDistance t
@@ -316,7 +315,7 @@
         (a:b:_) = points t
 
 prop_distance_le_maxPossibleDistance
-  :: (TestData t, TestDataF t, FiniteGrid (BaseGrid t), Ord (Index (BaseGrid t)))
+  :: (TestData t, FiniteGrid (BaseGrid t))
     => t -> Property
 prop_distance_le_maxPossibleDistance t = nonNull g ==>
   distance g a b <= maxPossibleDistance g
@@ -335,7 +334,7 @@
         dMax = maxPossibleDistance g
 
 finiteGridProperties 
-  :: (TestData t, TestDataF t, FiniteGrid (BaseGrid t), Arbitrary t, 
+  :: (TestData t, TestDataF t, FiniteGrid (BaseGrid t),
     Eq (Index (BaseGrid t)), Ord (Index (BaseGrid t))) 
     => String -> [(String, t -> Property)]
 finiteGridProperties s = 
@@ -431,7 +430,7 @@
         d = direction t
 
 prop_custom_isAdjacent_eq_default
-  :: (TestData t, Grid (BaseGrid t), Ord (Index (BaseGrid t)))
+  :: (TestData t, Grid (BaseGrid t))
     => t -> Property
 prop_custom_isAdjacent_eq_default t = nonNull g ==>
   isAdjacent g a b == defaultIsAdjacent g a b
@@ -439,7 +438,7 @@
         (a:b:_) = points t
 
 boundedGridProperties 
-  :: (TestData t, TestDataB t, BoundedGrid (BaseGrid t), Arbitrary t, 
+  :: (TestData t, TestDataB t, BoundedGrid (BaseGrid t),
     Eq (Index (BaseGrid t)), Ord (Index (BaseGrid t)),
     Eq (Direction (BaseGrid t))) 
     => String -> [(String, t -> Property)]
@@ -491,9 +490,7 @@
         bs = boundary g
 
 boundedGridProperties2
-  :: (TestData t, TestDataB t, BoundedGrid (BaseGrid t), Arbitrary t, 
-    Eq (Index (BaseGrid t)), Ord (Index (BaseGrid t)),
-    Eq (Direction (BaseGrid t))) 
+  :: (TestData t, BoundedGrid (BaseGrid t), Ord (Index (BaseGrid t))) 
     => String -> [(String, t -> Property)]
 boundedGridProperties2 s = 
   [
diff --git a/test/TestMain.hs b/test/TestMain.hs
new file mode 100644
--- /dev/null
+++ b/test/TestMain.hs
@@ -0,0 +1,36 @@
+------------------------------------------------------------------------
+-- |
+-- Module      :  Math.Geometry.Grid.Main
+-- Copyright   :  (c) Amy de Buitléir 2012-2016
+-- License     :  BSD-style
+-- Maintainer  :  amy@nualeargais.ie
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- QuickCheck tests.
+--
+------------------------------------------------------------------------
+module Main where
+
+import Math.Geometry.Grid.TriangularQC ( test )
+import Math.Geometry.Grid.SquareQC ( test )
+import Math.Geometry.Grid.HexagonalQC ( test )
+import Math.Geometry.Grid.Hexagonal2QC ( test )
+import Math.Geometry.Grid.OctagonalQC ( test )
+import Math.Geometry.GridMap.LazyQC (test)
+
+import Test.Framework ( defaultMain, Test )
+
+tests :: [Test]
+tests = 
+  [ 
+    Math.Geometry.Grid.TriangularQC.test,
+    Math.Geometry.Grid.SquareQC.test,
+    Math.Geometry.Grid.HexagonalQC.test,
+    Math.Geometry.Grid.Hexagonal2QC.test,
+    Math.Geometry.Grid.OctagonalQC.test,
+    Math.Geometry.GridMap.LazyQC.test
+  ]
+
+main :: IO ()
+main = defaultMain tests
