diff --git a/cabal.project.local b/cabal.project.local
--- a/cabal.project.local
+++ b/cabal.project.local
@@ -1,5 +1,2 @@
-constraints: hgis +development +cairo
-with-compiler: ghc-8.2.2
+constraints: hgis +development +cairo +diagrams
 optimization: 2
-documentation: true
-tests: true
diff --git a/hgis.cabal b/hgis.cabal
--- a/hgis.cabal
+++ b/hgis.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: hgis
-version: 1.0.0.0
+version: 1.0.0.1
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2016-2018 Vanessa McHale
@@ -15,7 +15,6 @@
 build-type: Simple
 extra-source-files:
     cabal.project.local
-    stack.yaml
 extra-doc-files: README.md
                  docs/manual.tex
                  src/depends/readshp/LICENSE
@@ -33,14 +32,16 @@
 flag cairo
     description:
         Enable build using cairo backend, allowing generation of PNGs
-    default: True
 
+flag diagrams
+    description:
+        Enable build using diagrams backend, allowing generation of SVGs
+
 library
     exposed-modules:
         GIS.Math.Projections
         GIS.Math.Spherical
         GIS.Hylo
-        GIS.Graphics.PlotSVG
     hs-source-dirs: src src/depends/readshp
     other-modules:
         GIS.Graphics.Types
@@ -56,11 +57,13 @@
         Geometry.Shapefile.Internal
     default-language: Haskell2010
     default-extensions: DeriveGeneric OverloadedStrings
-    ghc-options: -Wall
+    other-extensions: RankNTypes TemplateHaskell FlexibleInstances
+                      RecordWildCards
+    ghc-options: -Wall -Wincomplete-uni-patterns
+                 -Wincomplete-record-updates -Wmissing-export-lists
     build-depends:
-        base >=4.7 && <5,
+        base >=4.11 && <5,
         Chart -any,
-        Chart-diagrams -any,
         lens -any,
         composition-prelude >=1.1.0.1,
         ansi-wl-pprint -any,
@@ -77,15 +80,20 @@
         exposed-modules:
             GIS.Graphics.PlotPNG
     
+    if flag(diagrams)
+        exposed-modules:
+            GIS.Graphics.PlotSVG
+    
     if flag(cairo)
         build-depends:
             Chart-cairo -any
     
+    if flag(diagrams)
+        build-depends:
+            Chart-diagrams -any
+    
     if flag(development)
         ghc-options: -Werror
-    
-    if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
 
 test-suite hgis-test
     type: exitcode-stdio-1.0
@@ -93,6 +101,8 @@
     hs-source-dirs: test
     default-language: Haskell2010
     ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
+                 -Wincomplete-uni-patterns -Wincomplete-record-updates
+                 -Wmissing-export-lists
     build-depends:
         base -any,
         hgis -any,
@@ -100,6 +110,3 @@
     
     if flag(development)
         ghc-options: -Werror
-    
-    if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
diff --git a/src/GIS/Graphics/Plot.hs b/src/GIS/Graphics/Plot.hs
--- a/src/GIS/Graphics/Plot.hs
+++ b/src/GIS/Graphics/Plot.hs
@@ -2,7 +2,14 @@
 {-# LANGUAGE RecordWildCards #-}
 
 -- | Module containing renderable objects and plots for our maps
-module GIS.Graphics.Plot where
+module GIS.Graphics.Plot ( mkMapR
+                         , mkRenderablePlots
+                         , mkRenderableLens
+                         , mkRenderableLabelled
+                         , plotDataPoints
+                         , labelByLens
+                         , plotLabels
+                         ) where
 
 import           Control.Arrow
 import           Data.Colour.Names
diff --git a/src/GIS/Graphics/PlotPNG.hs b/src/GIS/Graphics/PlotPNG.hs
--- a/src/GIS/Graphics/PlotPNG.hs
+++ b/src/GIS/Graphics/PlotPNG.hs
@@ -1,10 +1,14 @@
 {-# LANGUAGE RankNTypes #-}
 
 -- | Module to generate PNGs from shapefiles
-module GIS.Graphics.PlotPNG where
+module GIS.Graphics.PlotPNG ( fileOptions
+                            , mkMap
+                            , mkLensMap
+                            , mkMapPng
+                            , makeLensMapPng
+                            ) where
 
 import           Control.Lens                           hiding (lens)
-import           Data.Semigroup
 import           GIS.Graphics.Plot
 import           GIS.Graphics.PlotSVG                   hiding (fileOptions)
 import           GIS.Graphics.Types                     hiding (title)
@@ -12,6 +16,8 @@
 import           GIS.Utils
 import           Graphics.Rendering.Chart.Backend.Cairo
 import           Graphics.Rendering.Chart.Easy          hiding (lens)
+
+-- FIXME allow all for cairo
 
 -- | Default file options: PNG output and 1920x1080. To change the file size,
 -- you can do e.g.
diff --git a/src/GIS/Graphics/PlotSVG.hs b/src/GIS/Graphics/PlotSVG.hs
--- a/src/GIS/Graphics/PlotSVG.hs
+++ b/src/GIS/Graphics/PlotSVG.hs
@@ -1,9 +1,11 @@
 {-# LANGUAGE RankNTypes #-}
 
 -- | Module to generate SVGs from shapefiles.
-module GIS.Graphics.PlotSVG where
+module GIS.Graphics.PlotSVG ( fileOptions
+                            , mkMapSVG
+                            , makeLensMapSVG
+                            ) where
 
-import           Data.Semigroup
 import           GIS.Graphics.Plot
 import           GIS.Graphics.Types                        hiding (title)
 import           GIS.Types
diff --git a/src/GIS/Graphics/Types.hs b/src/GIS/Graphics/Types.hs
--- a/src/GIS/Graphics/Types.hs
+++ b/src/GIS/Graphics/Types.hs
@@ -1,16 +1,21 @@
 {-# LANGUAGE TemplateHaskell #-}
 
--- | Module for types associated with generating maps. Includes lenses. 
-module GIS.Graphics.Types where
+-- | Module for types associated with generating maps. Includes lenses.
+module GIS.Graphics.Types ( Map (..)
+                          , projection
+                          , title
+                          , labelEntities
+                          , labelledDistricts
+                          ) where
 
-import Data.Default
-import GIS.Types
-import Control.Lens
+import           Control.Lens
+import           Data.Default
+import           GIS.Types
 
 -- | Data type for a map
-data Map = Map { _projection :: Projection
-               , _title :: String
-               , _labelEntities :: Bool -- whether to label districts
+data Map = Map { _projection        :: Projection
+               , _title             :: String
+               , _labelEntities     :: Bool -- whether to label districts
                , _labelledDistricts :: [([Polygon], String)] -- the data we actually want to map
                }
 
diff --git a/src/GIS/Hylo.hs b/src/GIS/Hylo.hs
--- a/src/GIS/Hylo.hs
+++ b/src/GIS/Hylo.hs
@@ -2,13 +2,22 @@
 {-# LANGUAGE RecordWildCards #-}
 
 -- | Module to transform shapefiles.
-module GIS.Hylo where
+module GIS.Hylo ( districtArea
+                , districtPerimeter
+                , districtCompactness
+                , districtToMapP
+                , districtToMapLensP
+                , districtToMapLens
+                , districtToMap
+                , districtToMapFilesP
+                , getDistricts
+                , getPolygon
+                ) where
 
 import           Control.Lens                   hiding (lens)
 import           Data.Default
 import           Data.List
 import           Data.Maybe
-import           Data.Semigroup
 import           Geometry.Shapefile.MergeShpDbf
 import           Geometry.Shapefile.ReadShp
 import           Geometry.Shapefile.Types
diff --git a/src/GIS/Math/Projections.hs b/src/GIS/Math/Projections.hs
--- a/src/GIS/Math/Projections.hs
+++ b/src/GIS/Math/Projections.hs
@@ -79,10 +79,10 @@
           phi2 = radians 50
           (referenceLong, referenceLat) = referencePoint
 
--- | Helper to project given a `Polygon`.
+-- | Project given a `Polygon`.
 project :: Projection -> Polygon -> Polygon
 project f = fmap (f . toRadians)
 
--- | Helper to apply a projection given a `Map`.
+-- | Apply a given projection a `Map`.
 projectMap :: Projection -> Map -> Map
 projectMap p = over labelledDistricts (fmap (first (fmap (project p))))
diff --git a/src/GIS/Math/Spherical.hs b/src/GIS/Math/Spherical.hs
--- a/src/GIS/Math/Spherical.hs
+++ b/src/GIS/Math/Spherical.hs
@@ -59,7 +59,8 @@
 perimeterPolygon (x1:x2:points) = perimeterPolygon (x2:points) + distance x1 x2
 perimeterPolygon _ = error "Attempted to take area of polygon with no points"
 
--- | Find the area of a polygon with rectangular coördinates given.
+-- | Find the area of a polygon with rectangular coördinates given. This
+-- function will error if given a polygon with no points.
 areaPolyRectangular :: Polygon -> Double
 areaPolyRectangular (pt:pts) = abs . (*0.5) . fst $ foldr areaPolyCalc (0,pt) pts
     where areaPolyCalc (x2, y2) (sum',(x1,y1)) = (sum' + (x1 * y2 - x2 * y1),(x2,y2))
diff --git a/src/GIS/Utils.hs b/src/GIS/Utils.hs
--- a/src/GIS/Utils.hs
+++ b/src/GIS/Utils.hs
@@ -1,9 +1,14 @@
 -- | Miscellaneous utils and helper functions.
-module GIS.Utils where
+module GIS.Utils ( stripExt
+                 , getExt
+                 , labels
+                 , flatten
+                 ) where
 
 import           Control.Composition
 import           Data.Char
 
+-- TODO replace this with something better
 -- | Strip extension from a filepath
 stripExt :: String -> String
 stripExt = reverse . drop 1 . dropWhile (/='.') . reverse
diff --git a/src/depends/readshp/Geometry/Shapefile/Internal.hs b/src/depends/readshp/Geometry/Shapefile/Internal.hs
--- a/src/depends/readshp/Geometry/Shapefile/Internal.hs
+++ b/src/depends/readshp/Geometry/Shapefile/Internal.hs
@@ -4,10 +4,21 @@
 Author      : Sam van Herwaarden <samvherwaarden@gmail.com>
 -}
 
-module Geometry.Shapefile.Internal where
+module Geometry.Shapefile.Internal ( getInt8
+                                   , getIntBE
+                                   , getInt16BE
+                                   , getIntLE
+                                   , getInt16LE
+                                   , getString
+                                   , getPoint
+                                   , getCharVal
+                                   , getPointList
+                                   , steps
+                                   , Point
+                                   ) where
 
 import           Control.Monad         (replicateM)
-import           Data.Binary.Get
+import           Data.Binary.Get hiding (getInt8)
 import           Data.Binary.IEEE754   (getFloat64le)
 import qualified Data.ByteString.Char8 as C
 
diff --git a/src/depends/readshp/Geometry/Shapefile/MergeShpDbf.hs b/src/depends/readshp/Geometry/Shapefile/MergeShpDbf.hs
--- a/src/depends/readshp/Geometry/Shapefile/MergeShpDbf.hs
+++ b/src/depends/readshp/Geometry/Shapefile/MergeShpDbf.hs
@@ -7,7 +7,6 @@
 module Geometry.Shapefile.MergeShpDbf ( readShpWithDbf ) where
 
 import qualified Data.ByteString.Lazy       as BL
-import           Data.Semigroup
 import           Geometry.Shapefile.ReadDbf
 import           Geometry.Shapefile.ReadShp
 import           Geometry.Shapefile.Types
diff --git a/src/depends/readshp/Geometry/Shapefile/ReadShp.hs b/src/depends/readshp/Geometry/Shapefile/ReadShp.hs
--- a/src/depends/readshp/Geometry/Shapefile/ReadShp.hs
+++ b/src/depends/readshp/Geometry/Shapefile/ReadShp.hs
@@ -13,10 +13,7 @@
 import           Control.Monad.Loops         (whileM)
 import           Data.Binary.Get
 import           Data.Binary.IEEE754         (getFloat64le)
-import           Data.Semigroup
-
 import qualified Data.ByteString.Lazy        as BL
-
 import           Geometry.Shapefile.Internal
 import           Geometry.Shapefile.Types
 
diff --git a/src/depends/readshp/Geometry/Shapefile/Types.hs b/src/depends/readshp/Geometry/Shapefile/Types.hs
--- a/src/depends/readshp/Geometry/Shapefile/Types.hs
+++ b/src/depends/readshp/Geometry/Shapefile/Types.hs
@@ -7,7 +7,20 @@
 Author      : Sam van Herwaarden <samvherwaarden@gmail.com>
 -}
 
-module Geometry.Shapefile.Types where
+module Geometry.Shapefile.Types ( ShpData (..)
+                                , ShpHeader (..)
+                                , ShpType (..)
+                                , zTypes
+                                , mTypes
+                                , shpTypeFromId
+                                , RecBBox (..)
+                                , RecContents (..)
+                                , ShpRec (..)
+                                , ShpBBox (..)
+                                , DbfFieldDesc (..)
+                                , DbfData (..)
+                                , DbfRecord (..)
+                                ) where
 
 import qualified Data.ByteString as BS
 
diff --git a/stack.yaml b/stack.yaml
deleted file mode 100644
--- a/stack.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-resolver: lts-11.6
-extra-deps:
-  - Chart-diagrams-1.8.3
-  - composition-prelude-1.3.0.8
-  - SVGFonts-1.6.0.3
-  - diagrams-core-1.4.0.1
-  - diagrams-lib-1.4.2
-  - diagrams-postscript-1.4
-  - diagrams-svg-1.4.1.1
-  - diagrams-solve-0.1.1
-  - dual-tree-0.2.1.1
-  - lens-4.15.4
-  - free-4.12.4
