diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Dino Morelli 2010-2015
+Copyright Dino Morelli 2010-2016
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -73,23 +73,16 @@
 ## Getting source
 
 - Download the cabalized source package [from Hackage](http://hackage.haskell.org/package/epub-metadata)
-- Get the source with cabal-install: `$ cabal get epub-metadata`
 - Get the source with darcs: `$ darcs get http://hub.darcs.net/dino/epub-metadata`
+- Get the source with cabal-install: `$ cabal get epub-metadata`
+- Get the source with stack: `$ stack unpack epub-metadata`
 - If you're just looking, [browse the source](http://hub.darcs.net/dino/epub-metadata)
 
 And once you have it, building the usual way:
 
-    $ cabal configure --enable-tests
-    $ cabal build
-    $ cabal test
-    $ cabal haddock
-    $ cabal install
-
-
-## Installing
-
-Build and install with cabal-install:
-  `$ cabal update ; cabal install epub-metadata`
+    $ stack build
+    $ stack test
+    $ stack haddock
 
 
 ## Contact
diff --git a/app/epub-metadata-example.hs b/app/epub-metadata-example.hs
new file mode 100644
--- /dev/null
+++ b/app/epub-metadata-example.hs
@@ -0,0 +1,50 @@
+{-
+   This is a small app for maintaining the example code that
+   goes into the Haddock docs for Codec.Epub
+-}
+
+import Codec.Epub
+import Codec.Epub.Data.Package
+import Control.Monad.Except
+
+
+main :: IO ()
+main = do
+   -- epub-metadata actions are in MonadIO and MonadError, so we're
+   -- using ErrorT here
+
+   result <- runExceptT $ do
+
+      -- Use the getPkgXmlFromZip action to extract the Package
+      -- Document as an XML string. There are also other actions
+      -- for reading from ByteStringS and directories.
+      --
+      -- See Codec.Epub.IO
+
+      xmlString <- getPkgXmlFromZip "/path/to/book.epub"
+
+      -- Now the sections of meta-information about the book can
+      -- be extracted from that XML using functions like getPackage,
+      -- getMetadata, etc.
+      --
+      -- See Codec.Epub.Parse
+
+      pkg <- getPackage xmlString  -- :: Codec.Epub.Data.Package
+      meta <- getMetadata xmlString  -- :: Codec.Epub.Data.Metadata
+
+      -- Parts of these data structures can be used from here
+      -- as needed
+      --
+      -- See Codec.Epub.Data.Package for pkgVersion below
+      -- and the others in Codec.Epub.Data.*
+
+      liftIO $ putStrLn $ pkgVersion pkg
+
+      -- There is also pretty-print formatting of these data types
+      -- in Codec.Epub.Data through the Formattable typeclass
+      --
+      -- See Codec.Epub.Format
+
+      liftIO $ putStr $ format meta
+
+   either putStrLn return result
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,14 @@
+4.4 (2016-10-11)
+
+   * Removed defunct cabal stability field
+   * Moved copyright dates up to 2016
+   * Moved tested-with up to GHC 8.0.1
+   * Removed GHC switch simpl-tick-factor
+   * Moved cabal-version up to >= 1.10
+   * Project now builds with stack
+   * Fixed failing damaged zip file unit test
+
+
 4.3 (2015-05-25)
 
    * Replaced deprecated Control.Monad.Error with
diff --git a/doc/examples/README b/doc/examples/README
deleted file mode 100644
--- a/doc/examples/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This is a small project for maintaining the example code that goes into the Haddock docs for Codec.Epub
-
-To build it, you'll need to install epub-metadata as it's called for by this example code's cabal file.
diff --git a/doc/examples/Setup.hs b/doc/examples/Setup.hs
deleted file mode 100644
--- a/doc/examples/Setup.hs
+++ /dev/null
@@ -1,6 +0,0 @@
-#! /usr/bin/env runhaskell
-
-import Distribution.Simple
-
-
-main = defaultMain
diff --git a/doc/examples/epub-metadata-example.cabal b/doc/examples/epub-metadata-example.cabal
deleted file mode 100644
--- a/doc/examples/epub-metadata-example.cabal
+++ /dev/null
@@ -1,11 +0,0 @@
-name:                epub-metadata-example
-version:             1.0
-cabal-version:       >= 1.8
-build-type:          Simple
-
-executable           epub-metadata-example
-   main-is:          epub-metadata-example.hs
-   build-depends:    base >= 3 && < 5,
-                     epub-metadata,
-                     mtl
-   ghc-options:      -Wall
diff --git a/doc/examples/epub-metadata-example.hs b/doc/examples/epub-metadata-example.hs
deleted file mode 100644
--- a/doc/examples/epub-metadata-example.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-import Codec.Epub
-import Codec.Epub.Data.Package
-import Control.Monad.Error
-
-
-main :: IO ()
-main = do
-   -- epub-metadata actions are in MonadIO and MonadError, so we're
-   -- using ErrorT here
-
-   result <- runErrorT $ do
-
-      -- Use the getPkgXmlFromZip action to extract the Package
-      -- Document as an XML string. There are also other actions
-      -- for reading from ByteStringS and directories.
-      --
-      -- See Codec.Epub.IO
-
-      xmlString <- getPkgXmlFromZip "/path/to/book.epub"
-
-      -- Now the sections of meta-information about the book can
-      -- be extracted from that XML using functions like getPackage,
-      -- getMetadata, etc.
-      --
-      -- See Codec.Epub.Parse
-
-      pkg <- getPackage xmlString  -- :: Codec.Epub.Data.Package
-      meta <- getMetadata xmlString  -- :: Codec.Epub.Data.Metadata
-
-      -- Parts of these data structures can be used from here
-      -- as needed
-      --
-      -- See Codec.Epub.Data.Package for pkgVersion below
-      -- and the others in Codec.Epub.Data.*
-
-      liftIO $ putStrLn $ pkgVersion pkg
-
-      -- There is also pretty-print formatting of these data types
-      -- in Codec.Epub.Data through the Formattable typeclass
-      --
-      -- See Codec.Epub.Format
-
-      liftIO $ putStr $ format meta
-
-   either putStrLn return result
diff --git a/epub-metadata.cabal b/epub-metadata.cabal
--- a/epub-metadata.cabal
+++ b/epub-metadata.cabal
@@ -1,27 +1,24 @@
 name:                epub-metadata
-version:             4.3
-cabal-version:       >= 1.8
+version:             4.4
+cabal-version:       >= 1.10
 build-type:          Simple
 license:             BSD3
 license-file:        LICENSE
-copyright:           2010-2015 Dino Morelli
+copyright:           2010-2016 Dino Morelli
 author:              Dino Morelli
 maintainer:          Dino Morelli <dino@ui3.info>
-stability:           experimental
 homepage:            http://hub.darcs.net/dino/epub-metadata
 synopsis:            Library for parsing epub document metadata
 description:         Library for parsing and manipulating epub document metadata. Supports epub versions 2 and 3.
 
                      This library was constructed by studying the IDPF specifications for epub documents found here <http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm> and here <http://www.idpf.org/epub/30/spec/epub30-publications.html>
 category:            Codec, Text
-tested-with:         GHC >= 7.10.1
+tested-with:         GHC >= 8.0.1
 extra-source-files:  changelog.md
                      doc/dev/notes
-                     doc/examples/README
-                     doc/examples/*.cabal
-                     doc/examples/*.hs
                      doc/hcar/epubmetadata-De.tex
                      README.md
+                     stack.yaml
                      testsuite/*.epub
                      testsuite/*.hs
                      testsuite/*.opf
@@ -74,7 +71,8 @@
                      regex-compat,
                      zip-archive
    hs-source-dirs:   src
-   ghc-options:      -Wall -fsimpl-tick-factor=200
+   ghc-options:      -Wall
+   default-language: Haskell2010
 
 test-suite           test-epub-metadata
    type:             exitcode-stdio-1.0
@@ -89,4 +87,37 @@
                      regex-compat,
                      zip-archive
    hs-source-dirs:   src testsuite
-   ghc-options:      -Wall -fsimpl-tick-factor=200
+   other-modules:    Archive
+                     Codec.Epub.Data.Common
+                     Codec.Epub.Data.Guide
+                     Codec.Epub.Data.Manifest
+                     Codec.Epub.Data.Metadata
+                     Codec.Epub.Data.Package
+                     Codec.Epub.Data.Spine
+                     Codec.Epub.IO
+                     Codec.Epub.Parse
+                     Codec.Epub.Parse.Guide
+                     Codec.Epub.Parse.Manifest
+                     Codec.Epub.Parse.Metadata
+                     Codec.Epub.Parse.Package
+                     Codec.Epub.Parse.Refinements
+                     Codec.Epub.Parse.Spine
+                     Codec.Epub.Parse.Util
+                     Codec.Epub.Util
+                     Epub2.ParseGuide
+                     Epub2.ParseMetadata
+                     Epub3.ParseMetadata
+                     ParseManifest
+                     ParsePackage
+                     ParseSpine
+   ghc-options:      -Wall
+   default-language: Haskell2010
+
+executable           epub-metadata-example
+   main-is:          epub-metadata-example.hs
+   build-depends:    base >= 3 && < 5,
+                     epub-metadata,
+                     mtl
+   hs-source-dirs:   app
+   ghc-options:      -Wall
+   default-language: Haskell2010
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,3 @@
+resolver: lts-7.3
+packages:
+- '.'
diff --git a/testsuite/Archive.hs b/testsuite/Archive.hs
--- a/testsuite/Archive.hs
+++ b/testsuite/Archive.hs
@@ -7,6 +7,7 @@
 
 import Codec.Archive.Zip
 import Control.Monad.Except
+import Data.List ( isPrefixOf )
 import System.Directory
 import System.FilePath
 import Test.HUnit
@@ -42,10 +43,14 @@
    a fatal exception.
 -}
 testDamagedZip :: Test
-testDamagedZip = TestLabel "damaged zip" $ TestCase $ do
+testDamagedZip = TestCase $ do
+   let label = "damaged zip"
+   let expectedErrorPrefix = "Data.Binary.Get.runGet at position 138: Did not find end of central directory signature"
    actual <- runExceptT $ getPkgXmlFromZip $ "testsuite"
       </> "damagedZipCentralDir.epub"
-   actual @?= Left "Data.Binary.Get.runGet at position 138: Did not find end of central directory signature"
+   case actual of
+      Left actualMessage -> assertBool label $ isPrefixOf expectedErrorPrefix actualMessage
+      Right _ -> assertFailure label
 
 
 {- Found books coming from Barnes & Noble (for their NOOK reader) to
diff --git a/util/prefs/boring b/util/prefs/boring
--- a/util/prefs/boring
+++ b/util/prefs/boring
@@ -1,7 +1,7 @@
 # This file contains a list of extended regular expressions, one per
 # line. A file path matching any of these expressions will be filtered
 # out during `darcs add', or when the `--look-for-adds' flag is passed
-# to `darcs whatsnew' and `record'.  The entries in ~/.darcs/boring (if
+# to `darcs whatsnew' and `record'. The entries in ~/.darcs/boring (if
 # it exists) supplement those in this file.
 # 
 # Blank lines, and lines beginning with an octothorpe (#) are ignored.
@@ -45,11 +45,8 @@
 # cabal intermediates
 \.installed-pkg-config
 \.setup-config
-# cabal sandbox
-^\.cabal-sandbox(/|$)
-cabal\.sandbox\.config
 # standard cabal build dir, might not be boring for everybody
-^dist(/|$)
+# ^dist(/|$)
 # autotools
 (^|/)autom4te\.cache($|/)
 (^|/)config\.(log|status)$
@@ -121,3 +118,7 @@
 (^|/)\.lock-wscript$
 # mac os finder
 (^|/)\.DS_Store$
+# emacs saved sessions (desktops)
+(^|.*/)\.emacs\.desktop(\.lock)?$
+
+(^|/).stack-work($|/)
