diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2008-2014 Dino Morelli
+Copyright (c) 2008-2015 Dino Morelli
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -16,52 +16,52 @@
 
 Here's an example of epubmeta output:
 
->     $ epubmeta Kelly_Kessel_Lethem-NinetyPercentOfEverything.epub
->
->     package
->        version: 2.0
->        unique-identifier: calibre_id
->     identifier
->        id: calibre_id
->        scheme: calibre
->        text: b1026732-69a5-4a05-a8d9-a1701685f6fa
->     identifier
->        scheme: ISBN
->        text: 1-590620-00-3
->     title: Ninety Percent of Everything
->     language: en-us
->     contributor
->        text: calibre (0.5.1) [http://calibre.kovidgoyal.net]
->        file-as: calibre
->        role: bkp
->     creator
->        text: James Patrick Kelly
->        file-as: Kelly, James Patrick
->        role: aut
->     creator
->        text: John Kessel
->        role: aut
->     creator
->        text: Jonathan Lethem
->        role: aut
->     date: 2001-03-25T00:00:00
->     publisher: www.Fictionwise.com
->     subject: Science Fiction/Fantasy
+      $ epubmeta Kelly_Kessel_Lethem-NinetyPercentOfEverything.epub
 
+      package
+         version: 2.0
+         unique-identifier: calibre_id
+      identifier
+         id: calibre_id
+         scheme: calibre
+         text: b1026732-69a5-4a05-a8d9-a1701685f6fa
+      identifier
+         scheme: ISBN
+         text: 1-590620-00-3
+      title: Ninety Percent of Everything
+      language: en-us
+      contributor
+         text: calibre (0.5.1) [http://calibre.kovidgoyal.net]
+         file-as: calibre
+         role: bkp
+      creator
+         text: James Patrick Kelly
+         file-as: Kelly, James Patrick
+         role: aut
+      creator
+         text: John Kessel
+         role: aut
+      creator
+         text: Jonathan Lethem
+         role: aut
+      date: 2001-03-25T00:00:00
+      publisher: www.Fictionwise.com
+      subject: Science Fiction/Fantasy
+
 ### epubname
 
 epubname is a command-line utility for renaming epub ebook files based on their OPF Package metadata. It tries to use author names and title info to construct a sensible name.
 
 Using it looks like this:
 
->     $ epubname poorly-named-book.epub
->
->     poorly-named-book.epub -> WattsPeter-Blindsight_2006.epub
->
->     $ epubname another-poorly-named-book.epub
->
->     another-poorly-named-book.epub -> Kelly_Kessel_Lethem-NinetyPercentOfEverything.epub
+      $ epubname poorly-named-book.epub
 
+      poorly-named-book.epub -> WattsPeter-Blindsight_2006.epub
+
+      $ epubname another-poorly-named-book.epub
+
+      another-poorly-named-book.epub -> Kelly_Kessel_Lethem-NinetyPercentOfEverything.epub
+
 ### epubzip
 
 epubzip is a handy utility for zipping up the files that comprise an epub into an .epub zip file. Using the same technology as epubname, it can try to make a meaningful filename for the book.
@@ -73,15 +73,15 @@
 - Download the cabalized source tarball [from here](http://ui3.info/d/proj/epub-tools/epub-tools-2.5.tar.gz)
 - epub-tools is available for Arch Linux [from the AUR](http://aur.archlinux.org/packages/epub-tools/)
 - Download [binaries for Windows](http://ui3.info/d/proj/epub-tools/epub-tools-2.5-win.zip)
-- Get the source with darcs: `$ darcs get http://ui3.info/darcs/epub-tools`
-- If you're just looking, [browse the source](http://ui3.info/darcs/epub-tools)
+- Get the source with darcs: `$ darcs get http://hub.darcs.net/dino/epub-tools`
+- If you're just looking, [browse the source](http://hub.darcs.net/dino/epub-tools)
 
 And once you have it, building the usual way:
 
->     $ cabal configure --enable-tests
->     $ cabal build
->     $ cabal test
->     $ cabal install
+      $ cabal configure --enable-tests
+      $ cabal build
+      $ cabal test
+      $ cabal install
 
 
 ## Installing
diff --git a/TODO b/TODO
deleted file mode 100644
--- a/TODO
+++ /dev/null
@@ -1,43 +0,0 @@
------
-general
-
-- Some notes in README about installing epubcheck if possible
-
-- Would like to way to be able to insert a publishing year tag into the OPF data like these:
-   <dc:date opf:event="publication">2011</dc:date>
-   <dc:date opf:event="original-publication">2011</dc:date>
-   <dc:subject>anthology</dc:subject>
-
-   Perhaps as part of epubmeta?
-
-- Perform util/win-dist.sh behavior in post-build step of Setup.hs? I think it makes sense.
-
------
-epubmeta
-
-- When a backup is made during -e[SUF], make a note of it on stdout
-
-- Maybe more options for modifying metadata from the command-line
-
-- Ability to dump the actual Haskell Metadata structure out. Could be used to make unit tests for epubname.
-
------
-epubname
-
-- Add info in the usage about submitting metadata to me using epubmeta when there are problems.
-
-- Rethink that Publisher business, maybe get rid of it.
-
-- I'd like to see the author name formatting be more flexible so you can opt to not have it call scrubString as is mandatory now.
-
-- Try to make tests of formatters into a conf file thing as well. This is kind of important. Not part of HUnit or QC
-   module hierarchy:
-      EpubName/
-         Test/
-            Compile
-            Test
-
-- Can possibly parallelize book renaming, each book is an atomic operation. Look into it.
-
------
-epubzip
diff --git a/TODO.md b/TODO.md
new file mode 100644
--- /dev/null
+++ b/TODO.md
@@ -0,0 +1,47 @@
+## general
+
+- README.md changes:
+   - installing epubcheck if possible
+   - less-obscure example book naming sessions
+   - demonstration of interactive mode
+   - encourage users to contact the developer (see below in epubname as well)
+- Windows binary docs:
+   - make INSTALL more nicely worded
+   - add information or maybe a batch file for assisting with globs and cmd
+- Use Paths_epub_tools version instead of hard-coded version in the Opts modules. Test this on Windows.
+- Would like to way to be able to insert a publishing year tag into the OPF data
+   - like these:
+      - `<dc:date opf:event="publication">2011</dc:date>`
+      - `<dc:date opf:event="original-publication">2011</dc:date>`
+      - `<dc:subject>anthology</dc:subject>`
+   - Perhaps as part of epubmeta?
+- Perform util/win-dist.sh behavior in post-build step of Setup.hs? I think it makes sense.
+
+
+## epubmeta
+
+- When a backup is made during `-e[SUF]`, make a note of it on stdout
+- Maybe more options for modifying metadata from the command-line
+- Ability to dump the actual Haskell Metadata structure out. Could be used to make unit tests for epubname.
+
+
+## epubname
+
+- in usage, encourage users to contact the developer
+- Add info in the usage about submitting metadata to me using epubmeta when there are problems.
+- Rethink that Publisher business, maybe get rid of it.
+- I'd like to see the author name formatting be more flexible so you can opt to not have it call scrubString as is mandatory now.
+- Can possibly parallelize book renaming, each book is an atomic operation. Look into it.
+- Not testing improper name instruction function arguments (such as: an index that doesn't exist in a match with `idx`)
+   - This is tricky as we're using the stock set of rules that are deployed for the real app for all testing. Need to redesign `testsuite/EpubTools/test-epubname.main` to be able to load a different set of rules.
+- Why is the verbosity Opts value a Maybe Int? Couldn't it just have been an Int (0, 1 or 2) where 0 is the old Nothing? Or even better, explicit values like: `data Verbosity = Minimum | ShowFormatter | Maximum`  Think about it more
+
+- Try to make tests of formatters into a conf file thing as well. This is kind of important. Not part of HUnit or QC. module hierarchy:
+
+      EpubName/
+         Test/
+            Compile
+            Test
+
+
+## epubzip
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,14 +1,25 @@
+2.6 (2015-05-25)
+
+   * Fixed an error in bad DSL command index reporting
+   * Replaced deprecated Control.Monad.Error with
+     Control.Monad.Except
+   * Replaced deprecated System.Cmd with System.Process
+   * Removed useless import of Control.Applicative
+   * Updated cabal homepage, tested-with and source-repository
+   * Removed unused path to rules file in unit tests
+   * Reformatted TODO and development notes into Markdown documents
+   * Updated boringfile with cabal sandbox filespecs
+   * Switched over to using Data.Version instead of hard-coded
+     version string
+
+
 2.5 (2014-04-04)
 
    * Additions and modifications to the stock rules to both support
      more books and also use more generic rules than before
-
    * Added code to set proper case for Roman numerals in titles
-
    * Added code to handle file-as names with parenthesized name info
-
    * Simplified and consolidated special-character filtering code
-
    * Added support for multiline fields in the Metadata
 
 
@@ -16,19 +27,14 @@
 
    * Fixed problem in Windows cmd shell with missing UNIX HOME
      env variable
-
    * Now gracefully handling last-name-first creators. For books
      with no file-as and the Creator text arranged last-name-first
      with a comma, do the right thing.
-
    * Added a new rule for generically-titled magazines with an issue
-
    * Incorporated project website info into README.md and
      changelog.md files. This information is now in source control
      where it belongs.
-
    * Added missing files to .cabal for sdist
-
    * Changed copyright date range to 2014
 
 
diff --git a/doc/dev/notes b/doc/dev/notes
deleted file mode 100644
--- a/doc/dev/notes
+++ /dev/null
@@ -1,13 +0,0 @@
------
-This project may benefit from the use of some other tools out here
-such as epubcheck, zip and unzip
-
-- Tools unzipping can try to fall back on unzip upon failure
-
-- epubmeta needs write capability
-
-- epub creation, think about this
-
-- always release Windows binaries
-
-- OSX too?
diff --git a/doc/dev/notes.md b/doc/dev/notes.md
new file mode 100644
--- /dev/null
+++ b/doc/dev/notes.md
@@ -0,0 +1,25 @@
+## general
+
+This project may benefit from the use of some other tools out here
+such as epubcheck, zip and unzip
+
+- Tools unzipping can try to fall back on unzip upon failure
+- epubmeta needs write capability
+- epub creation, think about this
+- always release Windows binaries
+- OSX too?
+
+
+## Found some old notesbook notes about the DSL:
+
+I think this was maybe about a less-flat more language-like DSL with recursive interpretation. But this is not how the software runs today. Maybe it should in the future?
+
+    aut  (aut)
+    idx  (idx 2)
+    lit  some string
+    mnum (mnum (idx 2))
+    pad  (pad 2 (idx 1))
+    publ (publ)
+    scr  (scr (idx 3))
+    wnum (wnum 3 (idx 4))
+    year (year)
diff --git a/doc/hcar/epubtoolsCommandlineepubU-De.tex b/doc/hcar/epubtoolsCommandlineepubU-De.tex
--- a/doc/hcar/epubtoolsCommandlineepubU-De.tex
+++ b/doc/hcar/epubtoolsCommandlineepubU-De.tex
@@ -1,7 +1,7 @@
 % epubtoolsCommandlineepubU-De.tex
 \begin{hcarentry}{epub-tools (Command-line epub Utilities)}
 \label{epubtools}
-\report{Dino Morelli}%11/12
+\report{Dino Morelli}%11/13
 \status{stable, actively developed}
 \makeheader
 
@@ -15,7 +15,7 @@
 
 This project is built on the latest epub-metadata library and so supports epub3 for the first time.
 
-See also epub-metadata.
+See also epub-metadata \cref{epub-metadata}.
 
 epub-tools is available from Hackage and the Darcs repository below.
 
diff --git a/epub-tools.cabal b/epub-tools.cabal
--- a/epub-tools.cabal
+++ b/epub-tools.cabal
@@ -1,34 +1,34 @@
 name:                epub-tools
 cabal-version:       >= 1.8
-version:             2.5
+version:             2.6
 build-type:          Simple
 license:             BSD3
 license-file:        LICENSE
-copyright:           2008-2014 Dino Morelli
+copyright:           2008-2015 Dino Morelli
 author:              Dino Morelli 
 maintainer:          Dino Morelli <dino@ui3.info>
 stability:           stable
-homepage:            http://ui3.info/d/proj/epub-tools.html
+homepage:            http://hub.darcs.net/dino/epub-tools
 synopsis:            Command line utilities for working with epub files
 description:         A suite of command-line utilities for creating and manipulating epub book files. Included are: epubmeta, epubname, epubzip
 category:            Application, Console
-tested-with:         GHC >= 7.6.2
+tested-with:         GHC >= 7.10.1
 
 extra-source-files:  changelog.md
-                     doc/dev/notes
+                     doc/dev/notes.md
                      doc/hcar/epubtoolsCommandlineepubU-De.tex
                      doc/INSTALL
                      README.md
                      testsuite/EpubTools/*.hs
                      testsuite/EpubTools/Test/EpubName/*.hs
-                     TODO
+                     TODO.md
                      util/all-books.hs
                      util/prefs/boring
                      util/win-dist.sh
 
 source-repository    head
    type:             darcs
-   location:         http://ui3.info/darcs/epub-tools/
+   location:         http://hub.darcs.net/dino/epub-tools
 
 executable           epubmeta
    main-is:          EpubTools/epubmeta.hs
diff --git a/src/EpubTools/EpubMeta/Edit.hs b/src/EpubTools/EpubMeta/Edit.hs
--- a/src/EpubTools/EpubMeta/Edit.hs
+++ b/src/EpubTools/EpubMeta/Edit.hs
@@ -9,11 +9,11 @@
 
 import Control.Exception
 import Control.Monad
-import System.Cmd
 import System.Directory
 import System.FilePath
 import System.Environment
 import System.Exit
+import System.Process ( system )
 import Text.Printf
 
 import EpubTools.EpubMeta.Export
diff --git a/src/EpubTools/EpubMeta/Opts.hs b/src/EpubTools/EpubMeta/Opts.hs
--- a/src/EpubTools/EpubMeta/Opts.hs
+++ b/src/EpubTools/EpubMeta/Opts.hs
@@ -9,6 +9,8 @@
    )
    where
 
+import Data.Version ( showVersion )
+import Paths_epub_tools ( version )
 import System.Console.GetOpt
 
 import EpubTools.EpubMeta.Util
@@ -105,5 +107,5 @@
          , "   epub3: http://www.idpf.org/epub/30/spec/epub30-publications.html"
          , ""
          , ""
-         , "Version 2.5  Dino Morelli <dino@ui3.info>"
+         , "Version " ++ (showVersion version) ++ "  Dino Morelli <dino@ui3.info>"
          ]
diff --git a/src/EpubTools/EpubMeta/Util.hs b/src/EpubTools/EpubMeta/Util.hs
--- a/src/EpubTools/EpubMeta/Util.hs
+++ b/src/EpubTools/EpubMeta/Util.hs
@@ -8,10 +8,10 @@
    )
    where
 
-import Control.Monad.Error
+import Control.Monad.Except
 
 
-type EM a = (ErrorT String IO) a
+type EM a = (ExceptT String IO) a
 
 runEM :: EM a -> IO (Either String a)
-runEM = runErrorT
+runEM = runExceptT
diff --git a/src/EpubTools/EpubName/Format/Author.hs b/src/EpubTools/EpubName/Format/Author.hs
--- a/src/EpubTools/EpubName/Format/Author.hs
+++ b/src/EpubTools/EpubName/Format/Author.hs
@@ -105,8 +105,7 @@
          matchRegex (mkRegex re) di
 
    md <- asks gMetadata
-   unless (any isJust $ map authorMatches' $ justAuthors md) $
-      throwError "Specific author string not found"
+   unless (any isJust $ map authorMatches' $ justAuthors md) $ throwError ""
 
 
 {- Author names with a postfix like II, III, Jr. or Sr.
diff --git a/src/EpubTools/EpubName/Format/Format.hs b/src/EpubTools/EpubName/Format/Format.hs
--- a/src/EpubTools/EpubName/Format/Format.hs
+++ b/src/EpubTools/EpubName/Format/Format.hs
@@ -15,9 +15,9 @@
    where
 
 import Codec.Epub.Data.Metadata
-import Control.Monad.Error
+import Control.Monad.Except
 import Data.List ( isPrefixOf )
-import Data.Maybe ( isJust )
+import Data.Maybe ( isJust, listToMaybe )
 import Text.Printf
 import Text.Regex
 
@@ -51,27 +51,27 @@
 -}
 
 
-{- Wrapper functions to perform some basic operations in the Error
+{- Wrapper functions to perform some basic operations in the Except
    String monad
 -}
 
--- general purpose read in the Error String monad
+-- general purpose read in the Except String monad
 readE :: (MonadError String m, Read a) => String -> String -> m a
 readE msg s = case reads s of
    [(x, "")] -> return x
    _         -> throwError msg
 
 
--- read an Int in the Error String monad
+-- read an Int in the Except String monad
 readIntE :: MonadError String m => String -> m Int
 readIntE = readE "Not a number"
 
 
--- get list element at a specific index in the Error String monad
+-- get list element at a specific index in the Except String monad
 elemE :: MonadError String m => [a] -> Int -> m a
 elemE l i
    | i < length l = return $ l !! i
-   | otherwise    = throwError $ "Bad array index: " ++ show i
+   | otherwise    = throwError $ "Bad array index: " ++ show (i + 1)
 
 
 {- Instructions in the book naming DSL. These instructions are used from
@@ -147,7 +147,7 @@
 subjectMatches re = do
    subjects <- asks $ metaSubjects . gMetadata
    unless (any isJust $ map (matchRegex (mkRegex re)) subjects) $
-      throwError "Subject string not found"
+      throwError ""
 
 
 {- This is used by the titlePat command to construct a title pattern
@@ -157,13 +157,11 @@
 extractTitle re = do
    md <- asks gMetadata
 
-   (Title _ _ _ oldTitle) <- case metaTitles md of
-      [] -> throwError "format failed, no title present"
-      ts -> return . head $ ts
+   let titleMatch =
+         (matchRegex $ mkRegexWithOpts re False True) =<<
+         titleText `fmap` (listToMaybe $ metaTitles md)
 
-   case matchRegex (mkRegexWithOpts re False True) oldTitle of
-      Just matches -> return matches
-      Nothing      -> throwError $ printf "extract title failed: %s" re
+   maybe (throwError "") return titleMatch
 
 
 {- This is used by the name command to execute a series of the DSL
diff --git a/src/EpubTools/EpubName/Format/Util.hs b/src/EpubTools/EpubName/Format/Util.hs
--- a/src/EpubTools/EpubName/Format/Util.hs
+++ b/src/EpubTools/EpubName/Format/Util.hs
@@ -13,7 +13,7 @@
 
 import Codec.Epub.Data.Metadata
 import Codec.Epub.Data.Package
-import Control.Monad.Error
+import Control.Monad.Except
 import Control.Monad.Identity
 import Control.Monad.Reader
 import Data.Char
@@ -29,10 +29,10 @@
    , gMetadata :: Metadata
    }
 
-type EN a = ReaderT Globals (ErrorT String Identity) a
+type EN a = ReaderT Globals (ExceptT String Identity) a
 
 runEN :: Globals -> EN a -> Either String a
-runEN env ev = runIdentity (runErrorT (runReaderT ev env))
+runEN env ev = runIdentity (runExceptT (runReaderT ev env))
 
 
 {- Convenience function to make a regex replacer for a given pattern 
diff --git a/src/EpubTools/EpubName/Main.hs b/src/EpubTools/EpubName/Main.hs
--- a/src/EpubTools/EpubName/Main.hs
+++ b/src/EpubTools/EpubName/Main.hs
@@ -9,7 +9,7 @@
    )
    where
 
-import Control.Monad.Error
+import Control.Monad.Except
 import System.Directory ( doesFileExist )
 import System.Exit
 import Text.Printf
@@ -19,14 +19,6 @@
 import EpubTools.EpubName.Format.Format
 import EpubTools.EpubName.Opts
 import EpubTools.EpubName.Util
-
-
-instance Error ExitCode where
-    -- noMsg  :: a
-    noMsg  = strMsg ""
-
-    -- strMsg :: String -> a
-    strMsg = const exitInitFailure
 
 
 initialize :: (MonadError ExitCode m, MonadIO m) =>
diff --git a/src/EpubTools/EpubName/Opts.hs b/src/EpubTools/EpubName/Opts.hs
--- a/src/EpubTools/EpubName/Opts.hs
+++ b/src/EpubTools/EpubName/Opts.hs
@@ -10,8 +10,10 @@
    )
    where
 
-import Control.Monad.Error
+import Control.Monad.Except
 import Data.Maybe
+import Data.Version ( showVersion )
+import Paths_epub_tools ( version )
 import System.Console.GetOpt
 import System.Environment
 import System.Exit
@@ -219,5 +221,5 @@
          , "   epub3: http://www.idpf.org/epub/30/spec/epub30-publications.html"
          , ""
          , ""
-         , "Version 2.5  Dino Morelli <dino@ui3.info>"
+         , "Version " ++ (showVersion version) ++ "  Dino Morelli <dino@ui3.info>"
          ]
diff --git a/src/EpubTools/EpubZip/Opts.hs b/src/EpubTools/EpubZip/Opts.hs
--- a/src/EpubTools/EpubZip/Opts.hs
+++ b/src/EpubTools/EpubZip/Opts.hs
@@ -7,6 +7,8 @@
    )
    where
 
+import Data.Version ( showVersion )
+import Paths_epub_tools ( version )
 import System.Console.GetOpt
 
 
@@ -70,5 +72,5 @@
          , "   epub3: http://www.idpf.org/epub/30/spec/epub30-publications.html"
          , ""
          , ""
-         , "Version 2.5  Dino Morelli <dino@ui3.info>"
+         , "Version " ++ (showVersion version) ++ "  Dino Morelli <dino@ui3.info>"
          ]
diff --git a/src/EpubTools/epubname.hs b/src/EpubTools/epubname.hs
--- a/src/EpubTools/epubname.hs
+++ b/src/EpubTools/epubname.hs
@@ -6,9 +6,8 @@
 import Codec.Epub
 import Codec.Epub.Data.Metadata
 import Codec.Epub.Data.Package
-import Control.Applicative
 import Control.Monad
-import Control.Monad.Error
+import Control.Monad.Except
 import System.Directory ( doesDirectoryExist, doesFileExist, renameFile )
 import System.Environment ( getArgs )
 import System.FilePath
@@ -64,14 +63,14 @@
    return priRes
 
 processBook opts formatters (oldPath:paths) _     priRes = do
-   result <- runErrorT $ do
+   result <- runExceptT $ do
       {- Parse the book's metadata
          The reason for the nested runErrorT block is, if there is
          failure during parsing, we need to mark the result up with the
          file path. Failures here will otherwise get lost in the output
          when multiple books are processed at once.
       -}
-      epm <- runErrorT $ do
+      epm <- runExceptT $ do
          xml <- getPkgXmlFromZip oldPath
          (,) <$> getPackage xml <*> getMetadata xml
       (pkg, md) <- either
@@ -118,7 +117,7 @@
    -- No buffering, it messes with the order of output
    mapM_ (flip hSetBuffering NoBuffering) [ stdout, stderr, stdin ]
 
-   either exitWith exitWith =<< (runErrorT $ do
+   either exitWith exitWith =<< (runExceptT $ do
       -- Parse command-line arguments
       (opts, paths) <- (liftIO getArgs) >>= parseOpts
 
diff --git a/src/EpubTools/epubzip.hs b/src/EpubTools/epubzip.hs
--- a/src/EpubTools/epubzip.hs
+++ b/src/EpubTools/epubzip.hs
@@ -3,7 +3,7 @@
 
 import Codec.Epub
 import Control.Monad
-import Control.Monad.Error
+import Control.Monad.Except
 import System.Directory
 import System.Environment
 import System.Exit
@@ -25,7 +25,7 @@
    -- No buffering, it messes with the order of output
    mapM_ (flip hSetBuffering NoBuffering) [ stdout, stderr ]
 
-   either exitWith exitWith =<< (runErrorT $ do
+   either exitWith exitWith =<< (runExceptT $ do
       -- Parse command-line arguments
       (opts, paths) <- liftIO $ getArgs >>= parseOpts
 
@@ -41,7 +41,7 @@
             then do
                dos <- liftIO EN.defaultOptions
                fs <- initialize dos
-               runErrorT $ do
+               runExceptT $ do
                   xml <- snd `fmap` getPkgPathXmlFromDir "."
                   pkg <- getPackage xml
                   metadata <- getMetadata xml
diff --git a/testsuite/EpubTools/Test/EpubName/Format.hs b/testsuite/EpubTools/Test/EpubName/Format.hs
--- a/testsuite/EpubTools/Test/EpubName/Format.hs
+++ b/testsuite/EpubTools/Test/EpubName/Format.hs
@@ -8,7 +8,7 @@
 
 import Codec.Epub.Data.Metadata
 import Codec.Epub.Data.Package
-import Control.Monad.Error
+import Control.Monad.Except
 import Test.HUnit ( Test (..), assertEqual )
 import Test.HUnit.Base ( Assertion )
 
@@ -110,7 +110,7 @@
 assertNewName :: Globals -> [Formatter] -> String
    -> (String, String) -> Assertion
 assertNewName globals fs desc expected = do
-   result <- runErrorT $ tryFormatting globals fs ""
+   result <- runExceptT $ tryFormatting globals fs ""
    let actual = either (\em -> ("NO FORMATTER", em)) id result
    assertEqual desc expected actual
 
diff --git a/testsuite/EpubTools/test-epubname.hs b/testsuite/EpubTools/test-epubname.hs
--- a/testsuite/EpubTools/test-epubname.hs
+++ b/testsuite/EpubTools/test-epubname.hs
@@ -4,7 +4,7 @@
 module Main
    where
 
-import Control.Monad.Error
+import Control.Monad.Except
 import System.Exit
 import Test.HUnit ( Counts (..), Test (..), runTestTT )
 
@@ -18,8 +18,8 @@
 main :: IO ()
 main = do
    dos <- defaultOptions
-   let testOpts = dos { optRulesPaths = ["resources/default.rules"] }
-   ir <- runErrorT $ initialize testOpts
+   let testOpts = dos  -- Can use this to adjust the options with dos { ... }
+   ir <- runExceptT $ initialize testOpts
    either (exitWith) (runTests testOpts) ir
    
 
diff --git a/util/prefs/boring b/util/prefs/boring
--- a/util/prefs/boring
+++ b/util/prefs/boring
@@ -1,69 +1,123 @@
-# Boring file regexps:
+# 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
+# it exists) supplement those in this file.
+# 
+# Blank lines, and lines beginning with an octothorpe (#) are ignored.
+# See regex(7) for a description of extended regular expressions.
+
+### compiler and interpreter intermediate files
+# haskell (ghc) interfaces
 \.hi$
 \.hi-boot$
 \.o-boot$
+# object files
 \.o$
 \.o\.cmd$
+# profiling haskell
 \.p_hi$
 \.p_o$
-\.installed-pkg-config
-\.setup-config
-\.setup-config^dist(/|$)
-# *.ko files aren't boring by default because they might
-# be Korean translations rather than kernel modules.
-# \.ko$
+# haskell program coverage resp. profiling info
+\.tix$
+\.prof$
+# fortran module files
+\.mod$
+# linux kernel
 \.ko\.cmd$
 \.mod\.c$
 (^|/)\.tmp_versions($|/)
+# *.ko files aren't boring by default because they might
+# be Korean translations rather than kernel modules
+# \.ko$
+# python, emacs, java byte code
+\.py[co]$
+\.elc$
+\.class$
+# objects and libraries; lo and la are libtool things
+\.(obj|a|exe|so|lo|la)$
+# compiled zsh configuration files
+\.zwc$
+# Common LISP output files for CLISP and CMUCL
+\.(fas|fasl|sparcf|x86f)$
+
+### build and packaging systems
+# 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(/|$)
+# autotools
+(^|/)autom4te\.cache($|/)
+(^|/)config\.(log|status)$
+# microsoft web expression, visual studio metadata directories
+\_vti_cnf$
+\_vti_pvt$
+# gentoo tools
+\.revdep-rebuild.*
+# generated dependencies
+^\.depend$
+
+### version control systems
+# cvs
 (^|/)CVS($|/)
 \.cvsignore$
+# cvs, emacs locks
 ^\.#
+# rcs
 (^|/)RCS($|/)
 ,v$
+# subversion
 (^|/)\.svn($|/)
+# mercurial
 (^|/)\.hg($|/)
+# git
 (^|/)\.git($|/)
+# bzr
 \.bzr$
+# sccs
 (^|/)SCCS($|/)
-~$
+# darcs
 (^|/)_darcs($|/)
 (^|/)\.darcsrepo($|/)
-\.bak$
-\.BAK$
-\.orig$
-\.rej$
+^\.darcs-temp-mail$
+-darcs-backup[[:digit:]]+$
+# gnu arch
+(^|/)(\+|,)
 (^|/)vssver\.scc$
 \.swp$
 (^|/)MT($|/)
 (^|/)\{arch\}($|/)
 (^|/).arch-ids($|/)
-(^|/),
-\.prof$
-(^|/)\.DS_Store$
+# bitkeeper
 (^|/)BitKeeper($|/)
 (^|/)ChangeSet($|/)
-\.py[co]$
-\.elc$
-\.class$
-\.zwc$
-\.revdep-rebuild.*
+
+### miscellaneous
+# backup files
+~$
+\.bak$
+\.BAK$
+# patch originals and rejects
+\.orig$
+\.rej$
+# X server
 \..serverauth.*
+# image spam
 \#
 (^|/)Thumbs\.db$
-(^|/)autom4te\.cache($|/)
-(^|/)config\.(log|status)$
-^\.depend$
+# vi, emacs tags
 (^|/)(tags|TAGS)$
 #(^|/)\.[^/]
+# core dumps
 (^|/|\.)core$
-\.(obj|a|exe|so|lo|la)$
-^\.darcs-temp-mail$
--darcs-backup[[:digit:]]+$
-\.(fas|fasl|sparcf|x86f)$
+# partial broken files (KIO copy operations)
 \.part$
+# waf files, see http://code.google.com/p/waf/
 (^|/)\.waf-[[:digit:].]+-[[:digit:]]+($|/)
 (^|/)\.lock-wscript$
-^\.darcs-temp-mail$
-\_vti_cnf$
-\_vti_pvt$
-(^|/)dist($|/)
+# mac os finder
+(^|/)\.DS_Store$
