diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,19 +1,10 @@
 #! /usr/bin/env runhaskell
 
--- Copyright: 2008-2011 Dino Morelli
+-- Copyright: 2008, 2011 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
 import Distribution.Simple
-import System.Cmd ( system )
 
 
-main = defaultMainWithHooks (simpleUserHooks 
-   { runTests = testRunner
-   } )
-
-   where
-      -- Target for running all unit tests
-      testRunner _ _ _ _ = do
-         system $ "runhaskell -isrc testsuite/runtests.hs"
-         return ()
+main = defaultMain
diff --git a/TODO b/TODO
deleted file mode 100644
--- a/TODO
+++ /dev/null
@@ -1,11 +0,0 @@
------
-general
-
-- Some notes in README about installing epubcheck if possible
-
-
------
-epubmeta
-
-- Maybe more options for modifying metadata from the command-line
-
diff --git a/doc/INSTALL b/doc/INSTALL
deleted file mode 100644
--- a/doc/INSTALL
+++ /dev/null
@@ -1,24 +0,0 @@
-Installation information for the Windows binary distribution
-
-
-First, understand that this is command-line software. You don't run
-it with the mouse. There is no icon. It's not going in your Start
-menu. It's to be run from within a command shell.
-
-
-These epub tools will run from the Windows cmd.exe shell.
-
-Even better, what I would do is install the cygwin tools and run
-them from a bash or similar shell. Having cygwin in place, I would
-place the binaries in /usr/local/bin, which should be on your PATH
-in cygwin shells. And you're good to go.
-
-
-For help, try this in your shell:
-
-   > epubmeta.exe --help
-   > epubname.exe --help
-   > epubzip.exe --help
-
-
-And if you find bugs or problems, email: dino@ui3.info
diff --git a/doc/dev/notes b/doc/dev/notes
deleted file mode 100644
--- a/doc/dev/notes
+++ /dev/null
@@ -1,12 +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/epub-tools.cabal b/epub-tools.cabal
--- a/epub-tools.cabal
+++ b/epub-tools.cabal
@@ -1,6 +1,6 @@
 name:                epub-tools
-cabal-version:       >= 1.2
-version:             1.0.0.0
+cabal-version:       >= 1.8
+version:             1.0.0.1
 build-type:          Simple
 license:             BSD3
 license-file:        LICENSE
@@ -12,15 +12,27 @@
 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 >= 6.12.3
+tested-with:         GHC >= 7.0.3
+extra-source-files:  testsuite/*.hs
 
+source-repository    head
+   type:             darcs
+   location:         http://ui3.info/darcs/epub-tools/
+
 executable           epubmeta
    main-is:          EpubTools/epubmeta.hs
-   build-depends:    base >= 3 && < 5, bytestring, epub-metadata >= 2.2, 
-                     process, zip-archive
+   build-depends:    base >= 3 && < 5, bytestring, directory,
+                     epub-metadata >= 2.2, filepath, mtl, process,
+                     zip-archive
    hs-source-dirs:   src
+   other-modules:    EpubTools.EpubMeta.Display
+                     EpubTools.EpubMeta.Edit
+                     EpubTools.EpubMeta.Export
+                     EpubTools.EpubMeta.Import
+                     EpubTools.EpubMeta.Opts
+                     EpubTools.EpubMeta.Util
 
-   -- To strip debug symbols from the binary, for Windows, not portable
+   -- Strip symbols from binary, for Windows, not portable, see [1] below
    --ghc-options:      -Wall -optl-s
    ghc-options:      -Wall
 
@@ -29,16 +41,57 @@
    build-depends:    base >= 3 && < 5, directory, epub-metadata >= 2.2, 
                      mtl, regex-compat
    hs-source-dirs:   src
+   other-modules:    EpubTools.EpubName.Format.Anonymous
+                     EpubTools.EpubName.Format.AuthorBasic
+                     EpubTools.EpubName.Format.AuthorDouble
+                     EpubTools.EpubName.Format.AuthorSt
+                     EpubTools.EpubName.Format.AuthorThird
+                     EpubTools.EpubName.Format.MagAeon
+                     EpubTools.EpubName.Format.MagAnalog
+                     EpubTools.EpubName.Format.MagApex
+                     EpubTools.EpubName.Format.MagBcs
+                     EpubTools.EpubName.Format.MagChallengingDestiny
+                     EpubTools.EpubName.Format.MagClarkesworld
+                     EpubTools.EpubName.Format.MagEclipse
+                     EpubTools.EpubName.Format.MagFsf
+                     EpubTools.EpubName.Format.MagFutureOrbits
+                     EpubTools.EpubName.Format.MagGud
+                     EpubTools.EpubName.Format.MagInterzone
+                     EpubTools.EpubName.Format.MagLightspeed
+                     EpubTools.EpubName.Format.MagNameIssue
+                     EpubTools.EpubName.Format.MagNemesis
+                     EpubTools.EpubName.Format.MagRageMachine
+                     EpubTools.EpubName.Format.MagSomethingWicked
+                     EpubTools.EpubName.Format.MagUniverse
+                     EpubTools.EpubName.Format.SFBestOf
+                     EpubTools.EpubName.Formatters
+                     EpubTools.EpubName.Format.Util
+                     EpubTools.EpubName.Opts
+                     EpubTools.EpubName.Util
 
-   -- To strip debug symbols from the binary, for Windows, not portable
+   -- Strip symbols from binary, for Windows, not portable, see [1] below
    --ghc-options:      -Wall -optl-s
    ghc-options:      -Wall
 
+test-suite           epubname-tests
+   type:             exitcode-stdio-1.0
+   main-is:          epubname.hs
+   build-depends:    base, epub-metadata >= 2.2, HUnit, mtl, regex-compat
+   hs-source-dirs:   src testsuite
+   ghc-options:      -Wall
+
 executable           epubzip
    main-is:          EpubTools/epubzip.hs
-   build-depends:    base >= 3 && < 5, epub-metadata >= 2.2, filepath
+   build-depends:    base >= 3 && < 5, directory, epub-metadata >= 2.2,
+                     filepath, mtl, regex-compat
    hs-source-dirs:   src
+   other-modules:    EpubTools.EpubZip.Opts
 
-   -- To strip debug symbols from the binary, for Windows, not portable
+   -- Strip symbols from binary, for Windows, not portable, see [1] below
    --ghc-options:      -Wall -optl-s
    ghc-options:      -Wall
+
+
+-- [1] The right way to handle this should be an if os(windows) block
+--     but that makes this package unacceptable to Hackage. Sorry,
+--     you'll have to use comments to switch this on.
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
@@ -103,5 +103,5 @@
          , ""
          , "For more information please see the IDPF OPF specification found here: http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm"
          , ""
-         , "Version 1.0.0.0  Dino Morelli <dino@ui3.info>"
+         , "Version 1.0.0.1  Dino Morelli <dino@ui3.info>"
          ]
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
@@ -110,5 +110,5 @@
          , ""
          , "For more information please see the IDPF OPF specification found here: http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm"
          , ""
-         , "Version 1.0.0.0  Dino Morelli <dino@ui3.info>"
+         , "Version 1.0.0.1  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
@@ -68,5 +68,5 @@
          , ""
          , "For more information please see the IDPF OPF specification found here: http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm"
          , ""
-         , "Version 1.0.0.0  Dino Morelli <dino@ui3.info>"
+         , "Version 1.0.0.1  Dino Morelli <dino@ui3.info>"
          ]
diff --git a/testsuite/epubname.hs b/testsuite/epubname.hs
new file mode 100644
--- /dev/null
+++ b/testsuite/epubname.hs
@@ -0,0 +1,795 @@
+-- Copyright: 2008-2011 Dino Morelli
+-- License: BSD3 (see LICENSE)
+-- Author: Dino Morelli <dino@ui3.info>
+
+module Main
+   where
+
+import Codec.Epub.Opf.Package.Metadata
+import System.Exit
+import Test.HUnit ( Counts (..), Test (..), assertEqual, runTestTT )
+import Test.HUnit.Base ( Assertion )
+
+import EpubTools.EpubName.Formatters ( tryFormatting )
+import EpubTools.EpubName.Opts
+import EpubTools.EpubName.Util
+
+
+main :: IO ()
+main = do
+   counts <- runTestTT tests
+   exit $ testsPassed counts
+
+
+exit :: Bool -> IO ()
+exit True  = exitWith ExitSuccess
+exit False = exitWith $ ExitFailure 1
+
+
+testsPassed :: Counts -> Bool
+testsPassed (Counts _ _ e f) = (e == 0) && (f == 0)
+
+
+tests :: Test
+tests = TestList
+   [ testAuthorMinimal
+   , testAuthorRole
+   , testAuthorFileas
+   , testAuthorFull
+   , testAuthorDoubleAnd
+   , testNoAuthor
+   , testNoAuthorPubDate
+   , testCapsTitle
+   , testColon
+   , testBracketTitle
+   , testNoTitle
+   , testAllPunctuation
+   , testPubYear
+   , testPubYearUnwanted
+   , testMagAeon
+   , testMagAEon
+   , testMagApexLong
+   , testMagApexShort
+   , testChallengingDestinyShort
+   , testChallengingDestinyLong
+   , testChallengingDestinyPub
+   , testAnalog
+   , testAsimovs
+   , testFsfShort
+   , testFsfLong
+   , testMagFutureOrbits
+   , testGudShort
+   , testGudLong
+   , testInterzoneShort
+   , testInterzoneLong
+   , testNemesisShort
+   , testNemesisLong
+   , testMagSomethingWicked
+   , testSFBestOf
+   , testMagBlackStatic
+   , testRageMachineMag
+   , testEclipseMag
+   , testBcs
+   , testBkpFileAs
+   , testBkpText
+   , testBkpMissing
+   , testMagUniverse
+   , testMagClarkesworld
+   ]
+
+
+assertNewNameOpts :: Options -> String -> Metadata 
+   -> (String, String) -> Assertion
+assertNewNameOpts opts desc meta expected = do
+   result <- runEN opts $ tryFormatting ("", meta)
+   let actual = either (\em -> ("NO FORMATTER", em)) id result
+   assertEqual desc expected actual
+
+
+assertNewName :: String -> Metadata -> (String, String) -> Assertion
+assertNewName = assertNewNameOpts defaultOptions
+
+
+testAuthorMinimal :: Test
+testAuthorMinimal = TestCase $
+   assertNewName "minimal author" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "Herman Melville"]
+         , metaTitles = [MetaTitle Nothing "Moby Dick"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MelvilleHerman-MobyDick.epub"
+         )
+
+
+testAuthorRole :: Test
+testAuthorRole = TestCase $
+   assertNewName "author with role" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut") Nothing
+            "Herman Melville"]
+         , metaTitles = [MetaTitle Nothing "Moby Dick"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MelvilleHerman-MobyDick.epub"
+         )
+
+
+testAuthorFileas :: Test
+testAuthorFileas = TestCase $
+   assertNewName "author with file-as" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing
+            (Just "Melville, Herman")
+            "Herman Melville"]
+         , metaTitles = [MetaTitle Nothing "Moby Dick"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MelvilleHerman-MobyDick.epub"
+         )
+
+
+testAuthorFull :: Test
+testAuthorFull = TestCase $
+   assertNewName "author fully filled out" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut")
+            (Just "Melville, Herman")
+            "Herman Melville"]
+         , metaTitles = [MetaTitle Nothing "Moby Dick"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MelvilleHerman-MobyDick.epub"
+         )
+
+
+testNoAuthor :: Test
+testNoAuthor = TestCase $
+   assertNewName "no author(s) at all" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators =
+            [ MetaCreator (Just "edt") Nothing
+               "Graham Spindlewest"
+            , MetaCreator (Just "ill") Nothing
+               "Eva Tunglewacker"
+            ]
+         , metaTitles = [MetaTitle Nothing
+            "Some Collection of Fine Stories, Volume 1"]
+         }
+      expected =
+         ( "SFBestOf"
+         , "SomeCollectionOfFineStoriesVolume1.epub"
+         )
+
+
+testNoAuthorPubDate :: Test
+testNoAuthorPubDate = TestCase $
+   assertNewName "no author(s) at all, with publication date" 
+      meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators =
+            [ MetaCreator (Just "edt") Nothing
+               "Graham Spindlewest"
+            , MetaCreator (Just "ill") Nothing
+               "Eva Tunglewacker"
+            ]
+         , metaTitles = [MetaTitle Nothing
+            "Some Collection of Fine Stories, Volume 1"]
+         , metaDates = [MetaDate (Just "original-publication")
+            "2008"]
+         }
+      expected =
+         ( "SFBestOf"
+         , "SomeCollectionOfFineStoriesVolume1_2008.epub"
+         )
+
+
+testAuthorDoubleAnd :: Test
+testAuthorDoubleAnd = TestCase $
+   assertNewName "two authors separated by and" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing
+            "Kevin J. Anderson and Rebecca Moesta"]
+         , metaTitles = [MetaTitle Nothing "Rough Draft"]
+         }
+      expected =
+         ( "AuthorDouble"
+         , "Anderson_Moesta-RoughDraft.epub"
+         )
+
+
+testCapsTitle :: Test
+testCapsTitle = TestCase $
+   assertNewName "title all caps" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "Greg Bear"]
+         , metaTitles = [MetaTitle Nothing "EON"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "BearGreg-Eon.epub"
+         )
+
+
+testColon :: Test
+testColon = TestCase $
+   assertNewName "colon becomes underscore" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "Ed Howdershelt"]
+         , metaTitles = [MetaTitle Nothing 
+            "Book 1: 3rd World Products, Inc."]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "HowdersheltEd-Book1_3rdWorldProductsInc.epub"
+         )
+
+
+testBracketTitle :: Test
+testBracketTitle = TestCase $
+   assertNewName "title with brackets" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "Mercedes Lackey"]
+         , metaTitles = [MetaTitle Nothing "SKitty [Shipscat series #1]"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "LackeyMercedes-Skitty_ShipscatSeries1.epub"
+         )
+
+
+testNoTitle :: Test
+testNoTitle = TestCase $
+   assertNewName "missing title" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing
+            "Nobody McCrankypants"]
+         }
+      expected =
+         ( "NO FORMATTER"
+         , " [ERROR No formatter found]"
+         )
+
+
+testAllPunctuation :: Test
+testAllPunctuation = TestCase $
+   assertNewName "big test of all punctuation" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing
+            "Dino Morelli"]
+         , metaTitles = [MetaTitle Nothing
+            "The *crazy*: Sand-box. Of Smedley's discontent, fear & Malnourishment? (Maybe not!); [Part #2]"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MorelliDino-TheCrazy_SandBoxOfSmedleysDiscontentFearAndMalnourishmentMaybeNot_Part2.epub"
+         )
+
+
+testPubYear :: Test
+testPubYear = TestCase $
+   assertNewName "book with a publication year" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "Jim Jones"]
+         , metaTitles = [MetaTitle Nothing "A Timeless Story"]
+         , metaDates = [MetaDate (Just "original-publication") "2003"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "JonesJim-ATimelessStory_2003.epub"
+         )
+
+
+testPubYearUnwanted :: Test
+testPubYearUnwanted = TestCase $
+   assertNewNameOpts opts
+      "book with a publication year but we don't want"
+      meta expected
+   where
+      opts = defaultOptions { optYear = False }
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "Jim Jones"]
+         , metaTitles = [MetaTitle Nothing "A Timeless Story"]
+         , metaDates = [MetaDate (Just "original-publication") "2003"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "JonesJim-ATimelessStory.epub"
+         )
+
+
+testMagAeon :: Test
+testMagAeon = TestCase $
+   assertNewName "Aeon magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "Aeon Authors"]
+         , metaTitles = [MetaTitle Nothing "Aeon Eight"]
+         }
+      expected =
+         ( "MagAeon"
+         , "AeonMagazine08.epub"
+         )
+
+
+testMagAEon :: Test
+testMagAEon = TestCase $
+   assertNewName "AEon magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing "AEon Authors"]
+         , metaTitles = [MetaTitle Nothing "Aeon Thirteen"]
+         }
+      expected =
+         ( "MagAeon"
+         , "AeonMagazine13.epub"
+         )
+
+
+testMagApexLong :: Test
+testMagApexLong = TestCase $
+   assertNewName "Apex Magazine, older, long title" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut") Nothing
+            "Apex Authors"]
+         , metaTitles = [MetaTitle Nothing
+            "Apex Science Fiction and Horror Digest #9"]
+         }
+      expected =
+         ( "MagApex"
+         , "ApexMagazine009.epub"
+         )
+
+
+testMagApexShort :: Test
+testMagApexShort = TestCase $
+   assertNewName "Apex Magazine, newer, short title" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut") Nothing
+            "Apex Authors"]
+         , metaTitles = [MetaTitle Nothing
+            "Apex Magazine Issue 17"]
+         }
+      expected =
+         ( "MagApex"
+         , "ApexMagazine017.epub"
+         )
+
+
+testChallengingDestinyShort :: Test
+testChallengingDestinyShort = TestCase $
+   assertNewName "Challenging Destiny Magazine, short" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing
+            "Crystalline Sphere Authors"]
+         , metaTitles = [MetaTitle Nothing
+            "Challenging Destiny #23"]
+         }
+      expected =
+         ( "MagChallengingDestiny"
+         , "ChallengingDestinyMagazine023.epub"
+         )
+
+
+testChallengingDestinyLong :: Test
+testChallengingDestinyLong = TestCase $
+   assertNewName "Challenging Destiny Magazine, long" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Crystalline Sphere Authors"]
+         , metaTitles = [MetaTitle Nothing 
+            "Challenging Destiny #24: August 2007"]
+         }
+      expected =
+         ( "MagChallengingDestiny"
+         , "ChallengingDestinyMagazine024.epub"
+         )
+
+
+testChallengingDestinyPub :: Test
+testChallengingDestinyPub = TestCase $
+   assertNewName "Challenging Destiny Magazine, Publishing in author"
+      meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Crystalline Sphere Publishing"]
+         , metaTitles = [MetaTitle Nothing 
+            "Challenging Destiny #18"]
+         }
+      expected =
+         ( "MagChallengingDestiny"
+         , "ChallengingDestinyMagazine018.epub"
+         )
+
+
+testAnalog :: Test
+testAnalog = TestCase $
+   assertNewName "Analog" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing
+            "Dell Magazine Authors"]
+         , metaTitles = [MetaTitle Nothing
+            "Analog SFF, July-August 2003"]
+         }
+      expected =
+         ( "MagAnalog"
+         , "AnalogSF2003-07_08.epub"
+         )
+
+
+testAsimovs :: Test
+testAsimovs = TestCase $
+   assertNewName "Asimovs" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing
+            "Dell Magazine Authors"]
+         , metaTitles = [MetaTitle Nothing
+            "Asimov's SF, August 2003"]
+         }
+      expected =
+         ( "MagAnalog"
+         , "AsimovsSF2003-08.epub"
+         )
+
+
+testFsfShort :: Test
+testFsfShort = TestCase $
+   assertNewName "FSF Magazine, short" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing
+            "Spilogale Authors"]
+         , metaTitles = [MetaTitle Nothing "FSF, April 2008"]
+         }
+      expected =
+         ( "MagFsf"
+         , "FantasyScienceFiction2008-04.epub"
+         )
+
+
+testFsfLong :: Test
+testFsfLong = TestCase $
+   assertNewName "FSF Magazine, long" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Spilogale Authors"]
+         , metaTitles = [MetaTitle Nothing 
+            "FSF Magazine, April 2006"]
+         }
+      expected =
+         ( "MagFsf"
+         , "FantasyScienceFiction2006-04.epub"
+         )
+
+
+testMagFutureOrbits :: Test
+testMagFutureOrbits = TestCase $
+   assertNewName "testMagFutureOrbits" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Vander Neut Publications, L.L.C."]
+         , metaTitles = [MetaTitle Nothing 
+            "Future Orbits Issue 5, June/July 2002"]
+         }
+      expected =
+         ( "MagFutureOrbits"
+         , "FutureOrbitsMagazine05_2002-06_07.epub"
+         )
+
+
+testGudShort :: Test
+testGudShort = TestCase $
+   assertNewName "Gud Magazine, short" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "GUD Magazine Authors"]
+         , metaTitles = [MetaTitle Nothing 
+            "GUD Magazine Issue 0 :: Spring 2007"]
+         }
+      expected =
+         ( "MagGud"
+         , "GUDMagazine00.epub"
+         )
+
+
+testGudLong :: Test
+testGudLong = TestCase $
+   assertNewName "Gud Magazine, long" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "GUD Magazine Authors, Jeff Somers, Jeremy Shipp"]
+         , metaTitles = [MetaTitle Nothing 
+            "GUD Magazine Issue 2 :: Spring 2008"]
+         }
+      expected =
+         ( "MagGud"
+         , "GUDMagazine02.epub"
+         )
+
+
+testInterzoneShort :: Test
+testInterzoneShort = TestCase $
+   assertNewName "Interzone Magazine, short" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "TTA Press Authors"]
+         , metaTitles = [MetaTitle Nothing 
+            "Interzone SFF #212"]
+         }
+      expected =
+         ( "MagInterzone"
+         , "InterzoneSFF212.epub"
+         )
+
+
+testInterzoneLong :: Test
+testInterzoneLong = TestCase $
+   assertNewName "Interzone Magazine, long" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "TTA Press Authors"]
+         , metaTitles = [MetaTitle Nothing 
+            "Interzone Science Fiction and Fantasy Magazine #216"]
+         }
+      expected =
+         ( "MagInterzone"
+         , "InterzoneSFF216.epub"
+         )
+
+
+testNemesisShort :: Test
+testNemesisShort = TestCase $
+   assertNewName "Nemesis Magazine, short" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Stephen Adams"]
+         , metaTitles = [MetaTitle Nothing 
+            "Nemesis Magazine #2"]
+         }
+      expected =
+         ( "MagNemesis"
+         , "NemesisMag002.epub"
+         )
+
+
+testNemesisLong :: Test
+testNemesisLong = TestCase $
+   assertNewName "Nemesis Magazine, long" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Stephen Adams"]
+         , metaTitles = [MetaTitle Nothing 
+            "Nemesis Magazine #7: Featuring Victory Rose in Death Stalks the Ruins"]
+         }
+      expected =
+         ( "MagNemesis"
+         , "NemesisMag007.epub"
+         )
+
+
+testMagSomethingWicked :: Test
+testMagSomethingWicked = TestCase $
+   assertNewName "Something Wicked Magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Something Wicked Authors"]
+         , metaTitles = [MetaTitle Nothing 
+            "Something Wicked SF and Horror Magazine #5"]
+         }
+      expected =
+         ( "MagSomethingWicked"
+         , "SomethingWickedMagazine05.epub"
+         )
+
+
+testSFBestOf :: Test
+testSFBestOf = TestCase $
+   assertNewName "Science Fiction: The Best of the Year" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "Rich Horton"]
+         , metaTitles = [MetaTitle Nothing 
+            "Science Fiction: The Best of the Year, 2007 Edition"]
+         }
+      expected =
+         ( "SFBestOf"
+         , "ScienceFiction_TheBestOfTheYear2007Edition.epub"
+         )
+
+
+testMagBlackStatic :: Test
+testMagBlackStatic = TestCase $
+   assertNewName "Black Static Magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator Nothing Nothing 
+            "TTA Press Authors"]
+         , metaTitles = [MetaTitle Nothing 
+            "Black Static Horror Magazine #5"]
+         }
+      expected =
+         ( "MagNameIssue"
+         , "BlackStaticHorrorMagazine05.epub"
+         )
+
+
+testRageMachineMag :: Test
+testRageMachineMag = TestCase $
+   assertNewName "Rage Machine Magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "edt") Nothing 
+            "G. W. Thomas"]
+         , metaTitles = [MetaTitle Nothing 
+            "Rage Machine Magazine #1--December 2005"]
+         }
+      expected =
+         ( "MagRageMachine"
+         , "RageMachineMagazine1_2005-12.epub"
+         )
+
+
+testEclipseMag :: Test
+testEclipseMag = TestCase $
+   assertNewName "Eclipse Magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut")
+            (Just "Strahan, Jonathan")
+            "Jonathan Strahan"]
+         , metaTitles = [MetaTitle Nothing 
+            "Eclipse One"]
+         }
+      expected =
+         ( "MagEclipse"
+         , "Eclipse01.epub"
+         )
+
+
+testBcs :: Test
+testBcs = TestCase $
+   assertNewName "Beneath Ceaseless Skies Magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = 
+            [ MetaCreator (Just "aut")
+               (Just "Tidwell, Erin A.")
+               "Hoover, Kenneth Mark"
+            , MetaCreator (Just "aut")
+               (Just "Tidwell, Erin A.")
+               "Tidwell, Erin A."
+            ]
+         , metaTitles = [MetaTitle Nothing 
+            "Beneath Ceaseless Skies #32"]
+         }
+      expected =
+         ( "MagBcs"
+         , "BeneathCeaselessSkies_Issue032.epub"
+         )
+
+
+testBkpFileAs :: Test
+testBkpFileAs = TestCase $
+   assertNewNameOpts opts 
+      "book publisher suffix requested and present in file-as"
+      meta expected
+   where
+      opts = defaultOptions { optPublisher = True }
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut") Nothing
+            "Herman Melville"]
+         , metaContributors = [MetaCreator (Just "bkp") (Just "acme") 
+            "Acme Publishing, Inc."]
+         , metaTitles = [MetaTitle Nothing "Moby Dick"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MelvilleHerman-MobyDick_acme.epub"
+         )
+
+
+testBkpText :: Test
+testBkpText = TestCase $
+   assertNewNameOpts opts 
+      "book publisher suffix requested and present in text"
+      meta expected
+   where
+      opts = defaultOptions { optPublisher = True }
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut") Nothing
+            "Herman Melville"]
+         , metaContributors = [MetaCreator (Just "bkp") Nothing
+            "Acme Publishing, Inc."]
+         , metaTitles = [MetaTitle Nothing "Moby Dick"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MelvilleHerman-MobyDick.epub"
+         )
+
+
+testBkpMissing :: Test
+testBkpMissing = TestCase $
+   assertNewNameOpts opts 
+      "book publisher suffix requested and not present"
+      meta expected
+   where
+      opts = defaultOptions { optPublisher = True }
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut") Nothing
+            "Herman Melville"]
+         , metaTitles = [MetaTitle Nothing "Moby Dick"]
+         }
+      expected =
+         ( "AuthorBasic"
+         , "MelvilleHerman-MobyDick.epub"
+         )
+
+
+testMagUniverse :: Test
+testMagUniverse = TestCase $
+   assertNewNameOpts opts 
+      "Jim Baen's Universe Magazine"
+      meta expected
+   where
+      opts = defaultOptions { optPublisher = True }
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut") Nothing
+            "Jim Baen's Universe"]
+         , metaTitles = [MetaTitle Nothing "Jim Baen's Universe-Vol 4 Num 6"]
+         }
+      expected =
+         ( "MagUniverse"
+         , "JimBaensUniverseVol04Num06.epub"
+         )
+
+
+testMagClarkesworld :: Test
+testMagClarkesworld = TestCase $
+   assertNewName "Clarkesworld Magazine" meta expected
+   where
+      meta = emptyMetadata
+         { metaCreators = [MetaCreator (Just "aut")
+            (Just "Kowal, Mary Robinette")
+            "Mary Robinette Kowal"]
+         , metaTitles = [MetaTitle Nothing
+            "Clarkesworld Magazine - Issue 21"]
+         }
+      expected =
+         ( "MagClarkesworld"
+         , "Clarkesworld021.epub"
+         )
diff --git a/testsuite/runtests.hs b/testsuite/runtests.hs
deleted file mode 100644
--- a/testsuite/runtests.hs
+++ /dev/null
@@ -1,786 +0,0 @@
--- Copyright: 2008-2011 Dino Morelli
--- License: BSD3 (see LICENSE)
--- Author: Dino Morelli <dino@ui3.info>
-
-module Main
-   where
-
-import Codec.Epub.Opf.Package.Metadata
-import Control.Monad.Error
-import Test.HUnit ( Counts, Test (..), assertEqual, runTestTT )
-import Test.HUnit.Base ( Assertion )
-
-import EpubTools.EpubName.Formatters ( tryFormatting )
-import EpubTools.EpubName.Opts
-import EpubTools.EpubName.Util
-
-
-assertNewNameOpts :: Options -> String -> Metadata 
-   -> (String, String) -> Assertion
-assertNewNameOpts opts desc meta expected = do
-   result <- runEN opts $ tryFormatting ("", meta)
-   let actual = either (\em -> ("NO FORMATTER", em)) id result
-   assertEqual desc expected actual
-
-
-assertNewName :: String -> Metadata -> (String, String) -> Assertion
-assertNewName = assertNewNameOpts defaultOptions
-
-
-main :: IO ()
-main = do
-   runTestTT tests
-   return ()
-
-
-tests :: Test
-tests = TestList
-   [ testAuthorMinimal
-   , testAuthorRole
-   , testAuthorFileas
-   , testAuthorFull
-   , testAuthorDoubleAnd
-   , testNoAuthor
-   , testNoAuthorPubDate
-   , testCapsTitle
-   , testColon
-   , testBracketTitle
-   , testNoTitle
-   , testAllPunctuation
-   , testPubYear
-   , testPubYearUnwanted
-   , testMagAeon
-   , testMagAEon
-   , testMagApexLong
-   , testMagApexShort
-   , testChallengingDestinyShort
-   , testChallengingDestinyLong
-   , testChallengingDestinyPub
-   , testAnalog
-   , testAsimovs
-   , testFsfShort
-   , testFsfLong
-   , testMagFutureOrbits
-   , testGudShort
-   , testGudLong
-   , testInterzoneShort
-   , testInterzoneLong
-   , testNemesisShort
-   , testNemesisLong
-   , testMagSomethingWicked
-   , testSFBestOf
-   , testMagBlackStatic
-   , testRageMachineMag
-   , testEclipseMag
-   , testBcs
-   , testBkpFileAs
-   , testBkpText
-   , testBkpMissing
-   , testMagUniverse
-   , testMagClarkesworld
-   ]
-
-
-testAuthorMinimal :: Test
-testAuthorMinimal = TestCase $
-   assertNewName "minimal author" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "Herman Melville"]
-         , metaTitles = [MetaTitle Nothing "Moby Dick"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MelvilleHerman-MobyDick.epub"
-         )
-
-
-testAuthorRole :: Test
-testAuthorRole = TestCase $
-   assertNewName "author with role" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut") Nothing
-            "Herman Melville"]
-         , metaTitles = [MetaTitle Nothing "Moby Dick"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MelvilleHerman-MobyDick.epub"
-         )
-
-
-testAuthorFileas :: Test
-testAuthorFileas = TestCase $
-   assertNewName "author with file-as" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing
-            (Just "Melville, Herman")
-            "Herman Melville"]
-         , metaTitles = [MetaTitle Nothing "Moby Dick"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MelvilleHerman-MobyDick.epub"
-         )
-
-
-testAuthorFull :: Test
-testAuthorFull = TestCase $
-   assertNewName "author fully filled out" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut")
-            (Just "Melville, Herman")
-            "Herman Melville"]
-         , metaTitles = [MetaTitle Nothing "Moby Dick"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MelvilleHerman-MobyDick.epub"
-         )
-
-
-testNoAuthor :: Test
-testNoAuthor = TestCase $
-   assertNewName "no author(s) at all" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators =
-            [ MetaCreator (Just "edt") Nothing
-               "Graham Spindlewest"
-            , MetaCreator (Just "ill") Nothing
-               "Eva Tunglewacker"
-            ]
-         , metaTitles = [MetaTitle Nothing
-            "Some Collection of Fine Stories, Volume 1"]
-         }
-      expected =
-         ( "SFBestOf"
-         , "SomeCollectionOfFineStoriesVolume1.epub"
-         )
-
-
-testNoAuthorPubDate :: Test
-testNoAuthorPubDate = TestCase $
-   assertNewName "no author(s) at all, with publication date" 
-      meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators =
-            [ MetaCreator (Just "edt") Nothing
-               "Graham Spindlewest"
-            , MetaCreator (Just "ill") Nothing
-               "Eva Tunglewacker"
-            ]
-         , metaTitles = [MetaTitle Nothing
-            "Some Collection of Fine Stories, Volume 1"]
-         , metaDates = [MetaDate (Just "original-publication")
-            "2008"]
-         }
-      expected =
-         ( "SFBestOf"
-         , "SomeCollectionOfFineStoriesVolume1_2008.epub"
-         )
-
-
-testAuthorDoubleAnd :: Test
-testAuthorDoubleAnd = TestCase $
-   assertNewName "two authors separated by and" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing
-            "Kevin J. Anderson and Rebecca Moesta"]
-         , metaTitles = [MetaTitle Nothing "Rough Draft"]
-         }
-      expected =
-         ( "AuthorDouble"
-         , "Anderson_Moesta-RoughDraft.epub"
-         )
-
-
-testCapsTitle :: Test
-testCapsTitle = TestCase $
-   assertNewName "title all caps" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "Greg Bear"]
-         , metaTitles = [MetaTitle Nothing "EON"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "BearGreg-Eon.epub"
-         )
-
-
-testColon :: Test
-testColon = TestCase $
-   assertNewName "colon becomes underscore" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "Ed Howdershelt"]
-         , metaTitles = [MetaTitle Nothing 
-            "Book 1: 3rd World Products, Inc."]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "HowdersheltEd-Book1_3rdWorldProductsInc.epub"
-         )
-
-
-testBracketTitle :: Test
-testBracketTitle = TestCase $
-   assertNewName "title with brackets" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "Mercedes Lackey"]
-         , metaTitles = [MetaTitle Nothing "SKitty [Shipscat series #1]"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "LackeyMercedes-Skitty_ShipscatSeries1.epub"
-         )
-
-
-testNoTitle :: Test
-testNoTitle = TestCase $
-   assertNewName "missing title" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing
-            "Nobody McCrankypants"]
-         }
-      expected =
-         ( "NO FORMATTER"
-         , " [ERROR No formatter found]"
-         )
-
-
-testAllPunctuation :: Test
-testAllPunctuation = TestCase $
-   assertNewName "big test of all punctuation" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing
-            "Dino Morelli"]
-         , metaTitles = [MetaTitle Nothing
-            "The *crazy*: Sand-box. Of Smedley's discontent, fear & Malnourishment? (Maybe not!); [Part #2]"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MorelliDino-TheCrazy_SandBoxOfSmedleysDiscontentFearAndMalnourishmentMaybeNot_Part2.epub"
-         )
-
-
-testPubYear :: Test
-testPubYear = TestCase $
-   assertNewName "book with a publication year" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "Jim Jones"]
-         , metaTitles = [MetaTitle Nothing "A Timeless Story"]
-         , metaDates = [MetaDate (Just "original-publication") "2003"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "JonesJim-ATimelessStory_2003.epub"
-         )
-
-
-testPubYearUnwanted :: Test
-testPubYearUnwanted = TestCase $
-   assertNewNameOpts opts
-      "book with a publication year but we don't want"
-      meta expected
-   where
-      opts = defaultOptions { optYear = False }
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "Jim Jones"]
-         , metaTitles = [MetaTitle Nothing "A Timeless Story"]
-         , metaDates = [MetaDate (Just "original-publication") "2003"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "JonesJim-ATimelessStory.epub"
-         )
-
-
-testMagAeon :: Test
-testMagAeon = TestCase $
-   assertNewName "Aeon magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "Aeon Authors"]
-         , metaTitles = [MetaTitle Nothing "Aeon Eight"]
-         }
-      expected =
-         ( "MagAeon"
-         , "AeonMagazine08.epub"
-         )
-
-
-testMagAEon :: Test
-testMagAEon = TestCase $
-   assertNewName "AEon magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing "AEon Authors"]
-         , metaTitles = [MetaTitle Nothing "Aeon Thirteen"]
-         }
-      expected =
-         ( "MagAeon"
-         , "AeonMagazine13.epub"
-         )
-
-
-testMagApexLong :: Test
-testMagApexLong = TestCase $
-   assertNewName "Apex Magazine, older, long title" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut") Nothing
-            "Apex Authors"]
-         , metaTitles = [MetaTitle Nothing
-            "Apex Science Fiction and Horror Digest #9"]
-         }
-      expected =
-         ( "MagApex"
-         , "ApexMagazine009.epub"
-         )
-
-
-testMagApexShort :: Test
-testMagApexShort = TestCase $
-   assertNewName "Apex Magazine, newer, short title" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut") Nothing
-            "Apex Authors"]
-         , metaTitles = [MetaTitle Nothing
-            "Apex Magazine Issue 17"]
-         }
-      expected =
-         ( "MagApex"
-         , "ApexMagazine017.epub"
-         )
-
-
-testChallengingDestinyShort :: Test
-testChallengingDestinyShort = TestCase $
-   assertNewName "Challenging Destiny Magazine, short" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing
-            "Crystalline Sphere Authors"]
-         , metaTitles = [MetaTitle Nothing
-            "Challenging Destiny #23"]
-         }
-      expected =
-         ( "MagChallengingDestiny"
-         , "ChallengingDestinyMagazine023.epub"
-         )
-
-
-testChallengingDestinyLong :: Test
-testChallengingDestinyLong = TestCase $
-   assertNewName "Challenging Destiny Magazine, long" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Crystalline Sphere Authors"]
-         , metaTitles = [MetaTitle Nothing 
-            "Challenging Destiny #24: August 2007"]
-         }
-      expected =
-         ( "MagChallengingDestiny"
-         , "ChallengingDestinyMagazine024.epub"
-         )
-
-
-testChallengingDestinyPub :: Test
-testChallengingDestinyPub = TestCase $
-   assertNewName "Challenging Destiny Magazine, Publishing in author"
-      meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Crystalline Sphere Publishing"]
-         , metaTitles = [MetaTitle Nothing 
-            "Challenging Destiny #18"]
-         }
-      expected =
-         ( "MagChallengingDestiny"
-         , "ChallengingDestinyMagazine018.epub"
-         )
-
-
-testAnalog :: Test
-testAnalog = TestCase $
-   assertNewName "Analog" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing
-            "Dell Magazine Authors"]
-         , metaTitles = [MetaTitle Nothing
-            "Analog SFF, July-August 2003"]
-         }
-      expected =
-         ( "MagAnalog"
-         , "AnalogSF2003-07_08.epub"
-         )
-
-
-testAsimovs :: Test
-testAsimovs = TestCase $
-   assertNewName "Asimovs" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing
-            "Dell Magazine Authors"]
-         , metaTitles = [MetaTitle Nothing
-            "Asimov's SF, August 2003"]
-         }
-      expected =
-         ( "MagAnalog"
-         , "AsimovsSF2003-08.epub"
-         )
-
-
-testFsfShort :: Test
-testFsfShort = TestCase $
-   assertNewName "FSF Magazine, short" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing
-            "Spilogale Authors"]
-         , metaTitles = [MetaTitle Nothing "FSF, April 2008"]
-         }
-      expected =
-         ( "MagFsf"
-         , "FantasyScienceFiction2008-04.epub"
-         )
-
-
-testFsfLong :: Test
-testFsfLong = TestCase $
-   assertNewName "FSF Magazine, long" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Spilogale Authors"]
-         , metaTitles = [MetaTitle Nothing 
-            "FSF Magazine, April 2006"]
-         }
-      expected =
-         ( "MagFsf"
-         , "FantasyScienceFiction2006-04.epub"
-         )
-
-
-testMagFutureOrbits :: Test
-testMagFutureOrbits = TestCase $
-   assertNewName "testMagFutureOrbits" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Vander Neut Publications, L.L.C."]
-         , metaTitles = [MetaTitle Nothing 
-            "Future Orbits Issue 5, June/July 2002"]
-         }
-      expected =
-         ( "MagFutureOrbits"
-         , "FutureOrbitsMagazine05_2002-06_07.epub"
-         )
-
-
-testGudShort :: Test
-testGudShort = TestCase $
-   assertNewName "Gud Magazine, short" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "GUD Magazine Authors"]
-         , metaTitles = [MetaTitle Nothing 
-            "GUD Magazine Issue 0 :: Spring 2007"]
-         }
-      expected =
-         ( "MagGud"
-         , "GUDMagazine00.epub"
-         )
-
-
-testGudLong :: Test
-testGudLong = TestCase $
-   assertNewName "Gud Magazine, long" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "GUD Magazine Authors, Jeff Somers, Jeremy Shipp"]
-         , metaTitles = [MetaTitle Nothing 
-            "GUD Magazine Issue 2 :: Spring 2008"]
-         }
-      expected =
-         ( "MagGud"
-         , "GUDMagazine02.epub"
-         )
-
-
-testInterzoneShort :: Test
-testInterzoneShort = TestCase $
-   assertNewName "Interzone Magazine, short" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "TTA Press Authors"]
-         , metaTitles = [MetaTitle Nothing 
-            "Interzone SFF #212"]
-         }
-      expected =
-         ( "MagInterzone"
-         , "InterzoneSFF212.epub"
-         )
-
-
-testInterzoneLong :: Test
-testInterzoneLong = TestCase $
-   assertNewName "Interzone Magazine, long" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "TTA Press Authors"]
-         , metaTitles = [MetaTitle Nothing 
-            "Interzone Science Fiction and Fantasy Magazine #216"]
-         }
-      expected =
-         ( "MagInterzone"
-         , "InterzoneSFF216.epub"
-         )
-
-
-testNemesisShort :: Test
-testNemesisShort = TestCase $
-   assertNewName "Nemesis Magazine, short" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Stephen Adams"]
-         , metaTitles = [MetaTitle Nothing 
-            "Nemesis Magazine #2"]
-         }
-      expected =
-         ( "MagNemesis"
-         , "NemesisMag002.epub"
-         )
-
-
-testNemesisLong :: Test
-testNemesisLong = TestCase $
-   assertNewName "Nemesis Magazine, long" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Stephen Adams"]
-         , metaTitles = [MetaTitle Nothing 
-            "Nemesis Magazine #7: Featuring Victory Rose in Death Stalks the Ruins"]
-         }
-      expected =
-         ( "MagNemesis"
-         , "NemesisMag007.epub"
-         )
-
-
-testMagSomethingWicked :: Test
-testMagSomethingWicked = TestCase $
-   assertNewName "Something Wicked Magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Something Wicked Authors"]
-         , metaTitles = [MetaTitle Nothing 
-            "Something Wicked SF and Horror Magazine #5"]
-         }
-      expected =
-         ( "MagSomethingWicked"
-         , "SomethingWickedMagazine05.epub"
-         )
-
-
-testSFBestOf :: Test
-testSFBestOf = TestCase $
-   assertNewName "Science Fiction: The Best of the Year" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "Rich Horton"]
-         , metaTitles = [MetaTitle Nothing 
-            "Science Fiction: The Best of the Year, 2007 Edition"]
-         }
-      expected =
-         ( "SFBestOf"
-         , "ScienceFiction_TheBestOfTheYear2007Edition.epub"
-         )
-
-
-testMagBlackStatic :: Test
-testMagBlackStatic = TestCase $
-   assertNewName "Black Static Magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator Nothing Nothing 
-            "TTA Press Authors"]
-         , metaTitles = [MetaTitle Nothing 
-            "Black Static Horror Magazine #5"]
-         }
-      expected =
-         ( "MagNameIssue"
-         , "BlackStaticHorrorMagazine05.epub"
-         )
-
-
-testRageMachineMag :: Test
-testRageMachineMag = TestCase $
-   assertNewName "Rage Machine Magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "edt") Nothing 
-            "G. W. Thomas"]
-         , metaTitles = [MetaTitle Nothing 
-            "Rage Machine Magazine #1--December 2005"]
-         }
-      expected =
-         ( "MagRageMachine"
-         , "RageMachineMagazine1_2005-12.epub"
-         )
-
-
-testEclipseMag :: Test
-testEclipseMag = TestCase $
-   assertNewName "Eclipse Magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut")
-            (Just "Strahan, Jonathan")
-            "Jonathan Strahan"]
-         , metaTitles = [MetaTitle Nothing 
-            "Eclipse One"]
-         }
-      expected =
-         ( "MagEclipse"
-         , "Eclipse01.epub"
-         )
-
-
-testBcs :: Test
-testBcs = TestCase $
-   assertNewName "Beneath Ceaseless Skies Magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = 
-            [ MetaCreator (Just "aut")
-               (Just "Tidwell, Erin A.")
-               "Hoover, Kenneth Mark"
-            , MetaCreator (Just "aut")
-               (Just "Tidwell, Erin A.")
-               "Tidwell, Erin A."
-            ]
-         , metaTitles = [MetaTitle Nothing 
-            "Beneath Ceaseless Skies #32"]
-         }
-      expected =
-         ( "MagBcs"
-         , "BeneathCeaselessSkies_Issue032.epub"
-         )
-
-
-testBkpFileAs :: Test
-testBkpFileAs = TestCase $
-   assertNewNameOpts opts 
-      "book publisher suffix requested and present in file-as"
-      meta expected
-   where
-      opts = defaultOptions { optPublisher = True }
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut") Nothing
-            "Herman Melville"]
-         , metaContributors = [MetaCreator (Just "bkp") (Just "acme") 
-            "Acme Publishing, Inc."]
-         , metaTitles = [MetaTitle Nothing "Moby Dick"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MelvilleHerman-MobyDick_acme.epub"
-         )
-
-
-testBkpText :: Test
-testBkpText = TestCase $
-   assertNewNameOpts opts 
-      "book publisher suffix requested and present in text"
-      meta expected
-   where
-      opts = defaultOptions { optPublisher = True }
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut") Nothing
-            "Herman Melville"]
-         , metaContributors = [MetaCreator (Just "bkp") Nothing
-            "Acme Publishing, Inc."]
-         , metaTitles = [MetaTitle Nothing "Moby Dick"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MelvilleHerman-MobyDick.epub"
-         )
-
-
-testBkpMissing :: Test
-testBkpMissing = TestCase $
-   assertNewNameOpts opts 
-      "book publisher suffix requested and not present"
-      meta expected
-   where
-      opts = defaultOptions { optPublisher = True }
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut") Nothing
-            "Herman Melville"]
-         , metaTitles = [MetaTitle Nothing "Moby Dick"]
-         }
-      expected =
-         ( "AuthorBasic"
-         , "MelvilleHerman-MobyDick.epub"
-         )
-
-
-testMagUniverse :: Test
-testMagUniverse = TestCase $
-   assertNewNameOpts opts 
-      "Jim Baen's Universe Magazine"
-      meta expected
-   where
-      opts = defaultOptions { optPublisher = True }
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut") Nothing
-            "Jim Baen's Universe"]
-         , metaTitles = [MetaTitle Nothing "Jim Baen's Universe-Vol 4 Num 6"]
-         }
-      expected =
-         ( "MagUniverse"
-         , "JimBaensUniverseVol04Num06.epub"
-         )
-
-
-testMagClarkesworld :: Test
-testMagClarkesworld = TestCase $
-   assertNewName "Clarkesworld Magazine" meta expected
-   where
-      meta = emptyMetadata
-         { metaCreators = [MetaCreator (Just "aut")
-            (Just "Kowal, Mary Robinette")
-            "Mary Robinette Kowal"]
-         , metaTitles = [MetaTitle Nothing
-            "Clarkesworld Magazine - Issue 21"]
-         }
-      expected =
-         ( "MagClarkesworld"
-         , "Clarkesworld021.epub"
-         )
diff --git a/util/all-books.sh b/util/all-books.sh
deleted file mode 100644
--- a/util/all-books.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#! /bin/bash
-
-# Copyright: 2008-2011 Dino Morelli
-# License: BSD3 (see LICENSE)
-# Author: Dino Morelli <dino@ui3.info>
-
-
-cd /var/local/archive/doc/books/fiction
-
-tempDir="/home/dino/temp"
-allFile="epubname-all"
-
-find . -name '*.epub' | xargs -n 30 epubname -n -v1 > $tempDir/$allFile
-
-cd $tempDir
-
-grep -v 'No-action' $allFile | grep -v 'formatter:' | sed -e 's/.*\///' | perl -ne '($o, $n) = /(.*) -> (.*)/; if ($o ne $n) { print $_ }' | sort > epubname-changed
diff --git a/util/prefs/boring b/util/prefs/boring
deleted file mode 100644
--- a/util/prefs/boring
+++ /dev/null
@@ -1,69 +0,0 @@
-# Boring file regexps:
-\.hi$
-\.hi-boot$
-\.o-boot$
-\.o$
-\.o\.cmd$
-\.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$
-\.ko\.cmd$
-\.mod\.c$
-(^|/)\.tmp_versions($|/)
-(^|/)CVS($|/)
-\.cvsignore$
-^\.#
-(^|/)RCS($|/)
-,v$
-(^|/)\.svn($|/)
-(^|/)\.hg($|/)
-(^|/)\.git($|/)
-\.bzr$
-(^|/)SCCS($|/)
-~$
-(^|/)_darcs($|/)
-(^|/)\.darcsrepo($|/)
-\.bak$
-\.BAK$
-\.orig$
-\.rej$
-(^|/)vssver\.scc$
-\.swp$
-(^|/)MT($|/)
-(^|/)\{arch\}($|/)
-(^|/).arch-ids($|/)
-(^|/),
-\.prof$
-(^|/)\.DS_Store$
-(^|/)BitKeeper($|/)
-(^|/)ChangeSet($|/)
-\.py[co]$
-\.elc$
-\.class$
-\.zwc$
-\.revdep-rebuild.*
-\..serverauth.*
-\#
-(^|/)Thumbs\.db$
-(^|/)autom4te\.cache($|/)
-(^|/)config\.(log|status)$
-^\.depend$
-(^|/)(tags|TAGS)$
-#(^|/)\.[^/]
-(^|/|\.)core$
-\.(obj|a|exe|so|lo|la)$
-^\.darcs-temp-mail$
--darcs-backup[[:digit:]]+$
-\.(fas|fasl|sparcf|x86f)$
-\.part$
-(^|/)\.waf-[[:digit:].]+-[[:digit:]]+($|/)
-(^|/)\.lock-wscript$
-^\.darcs-temp-mail$
-\_vti_cnf$
-\_vti_pvt$
-(^|/)dist($|/)
diff --git a/util/win-dist.sh b/util/win-dist.sh
deleted file mode 100644
--- a/util/win-dist.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#! /bin/bash
-
-if [ -z "$1" ]
-then
-   echo "ERROR: Please give basename for zip file"
-   echo "example: ./util/win-dist.sh epub-tools-1.0.0.0-win"
-   exit 1
-fi
-
-zipFile="$1.zip"
-
-rm $zipFile
-
-buildDir="dist/build"
-zip -j $zipFile doc/INSTALL $buildDir/epubmeta/epubmeta.exe $buildDir/epubname/epubname.exe $buildDir/epubzip/epubzip.exe
