diff --git a/cabal-debian.cabal b/cabal-debian.cabal
--- a/cabal-debian.cabal
+++ b/cabal-debian.cabal
@@ -1,5 +1,5 @@
 Name:           cabal-debian
-Version:        3.8.3
+Version:        3.9
 License:        BSD3
 License-File:   debian/copyright
 Author:         David Fox <dsf@seereason.com>
@@ -13,14 +13,12 @@
   changelog,
   debian/Debianize.hs
 Description:
- Tool for creating debianizations of Haskell packages based on the
- .cabal file.  If apt-file is installed it will use it to discover
- what is the debian package name of a C library.  Basic usage is via
- the cabal-debian executable.  A more powerful but still undocumented
- programmatic interface is also provided.  Normal usage for this is to
- put a script in debian/Debianize.hs (such as the one in this source
- package) which is run to create the debianization.
-
+ This package provides two methods for generating the debianization
+ (i.e. the contents of the 'debian' subdirectory) for a cabal package.
+ An executable named cabal-debian, and a library API to handle more
+ complex packaging issues.  For documentation of the executable run
+ @cabal-debian --help@, for documentation of the library API follow
+ the link to the @Debian.Debianize@ module below.
 Flag tests
   Description: enable the unit test executable (disabled by default because it has a lot of wacky dependencies.)
   Default: False
@@ -71,7 +69,6 @@
    Debian.Debianize.Input
    Debian.Debianize.Options
    Debian.Debianize.SubstVars
-   Debian.Debianize.Tests
    Debian.Debianize.Types
    Debian.Debianize.Types.VersionSplits
    Debian.Debianize.Utility
@@ -89,6 +86,30 @@
    cabal-debian,
    containers,
    data-lens
+
+Executable cabal-debian-tests
+ Main-is: src/Debian/Debianize/Tests.hs
+ ghc-options: -threaded -Wall -O2
+ Build-Depends:
+   ansi-wl-pprint,
+   base,
+   Cabal,
+   cabal-debian,
+   containers,
+   data-lens,
+   debian,
+   filepath,
+   hsemail,
+   HUnit,
+   mtl,
+   parsec >= 3,
+   process,
+   pureMD5,
+   regex-tdfa,
+   syb,
+   text,
+   unix,
+   utf8-string
 
 -- Executable cabal-debian-tests
 --  Main-Is: src/Tests.hs
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,16 @@
+haskell-cabal-debian (3.9) unstable; urgency=low
+
+  * Clean up documentation
+  * Allow more than one utility package name, each of which will
+    get copies of the data-files and leftover executables.
+  * Make the --debianize option a no-op, the behavior is now the
+    default.
+  * Update the unit tests and build an executable to run them.
+  * Copy debian/changelog to top directory at beginning of build
+    so hackage will see it.
+
+ -- David Fox <dsf@seereason.com>  Tue, 05 Nov 2013 11:34:48 -0800
+
 haskell-cabal-debian (3.8.3) unstable; urgency=low
 
   * Add an ifdef for compatibility with GHC-7.4.1.
diff --git a/debian/Debianize.hs b/debian/Debianize.hs
--- a/debian/Debianize.hs
+++ b/debian/Debianize.hs
@@ -7,16 +7,16 @@
 import Debian.Debianize as Atoms
 import Debian.Changes (ChangeLog(..), ChangeLogEntry(..))
 import Debian.Debianize.Details (seereasonDefaultAtoms)
-import Debian.Relation (BinPkgName(BinPkgName), Relation(Rel), VersionReq(SLT))
+import Debian.Relation (BinPkgName(BinPkgName), Relation(Rel), VersionReq(SLT, GRE))
 import Debian.Version (parseDebianVersion)
 import Prelude hiding (log)
+import System.Directory (copyFile)
 
 main :: IO ()
 main =
-    do -- The official changelog was moved to the top directory so
-       -- that hackage will see it, so copy it before building the
-       -- debianization.
-       copyFile "changelog" "debian/changelog"
+    do -- Copy the changelog into the top directory so that hackage
+       -- will see it.
+       copyFile "debian/changelog" "changelog"
        log <- inputChangeLog (Top ".")
        new <- debianization (Top ".") (return . customize . setL changelog (Just log)) seereasonDefaultAtoms
        old <- inputDebianization (Top ".")
@@ -33,10 +33,13 @@
                 setL standards (Just (StandardsVersion 3 9 3 Nothing)) .
                 setL sourceFormat (Just Native3) .
                 -- modL extraDevDeps (Set.insert (BinPkgName "debian-policy")) .
-                setL utilsPackageName (Just (BinPkgName "cabal-debian")) .
+                setL utilsPackageNames (Just (singleton (BinPkgName "cabal-debian"))) .
+                modL installCabalExec (Map.insertWith union (BinPkgName "cabal-debian-tests") (singleton ("cabal-debian-tests", "/usr/bin"))) .
                 modL depends (Map.insertWith union (BinPkgName "cabal-debian") (singleton (Rel (BinPkgName "apt-file") Nothing Nothing))) .
                 modL Atoms.depends (Map.insertWith union (BinPkgName "cabal-debian") (singleton (Rel (BinPkgName "debian-policy") Nothing Nothing))) .
                 modL Atoms.depends (Map.insertWith union (BinPkgName "libghc-cabal-debian-dev") (singleton (Rel (BinPkgName "debian-policy") Nothing Nothing))) .
+                modL Atoms.depends (Map.insertWith union (BinPkgName "cabal-debian") (singleton (Rel (BinPkgName "debhelper") Nothing Nothing))) .
+                modL Atoms.depends (Map.insertWith union (BinPkgName "cabal-debian") (singleton (Rel (BinPkgName "haskell-devscripts") (Just (GRE (parseDebianVersion ("0.8.19" :: String)))) Nothing))) .
                 modL conflicts (Map.insertWith union (BinPkgName "cabal-debian") (singleton (Rel (BinPkgName "haskell-debian-utils") (Just (SLT (parseDebianVersion ("3.59" :: String)))) Nothing))) .
                 modL description (Map.insertWith (error "test7") (BinPkgName "cabal-debian")
                                         (Text.intercalate "\n"
diff --git a/src/Debian/Debianize.hs b/src/Debian/Debianize.hs
--- a/src/Debian/Debianize.hs
+++ b/src/Debian/Debianize.hs
@@ -58,7 +58,6 @@
     , module Debian.Debianize.Interspersed
     , module Debian.Debianize.Options
     , module Debian.Debianize.SubstVars
-    , module Debian.Debianize.Tests
     , module Debian.Debianize.Types
     , module Debian.Debianize.Utility
     , module Debian.Policy
@@ -75,7 +74,6 @@
 import Debian.Debianize.Interspersed
 import Debian.Debianize.Options
 import Debian.Debianize.SubstVars
-import Debian.Debianize.Tests
 import Debian.Debianize.Types
 import Debian.Debianize.ControlFile hiding (depends, conflicts, maintainer, description, section)
 import Debian.Debianize.Utility
diff --git a/src/Debian/Debianize/Atoms.hs b/src/Debian/Debianize/Atoms.hs
--- a/src/Debian/Debianize/Atoms.hs
+++ b/src/Debian/Debianize/Atoms.hs
@@ -28,7 +28,7 @@
     , backups
     , apacheSite
     , missingDependencies
-    , utilsPackageName
+    , utilsPackageNames
     , sourcePackageName
     , revision
     , debVersion
@@ -150,7 +150,7 @@
                                                   -- from DebRulesFragment values in the atom list.
     | DebRulesFragment Text                       -- ^ A Fragment of debian/rules
     | Warning Text                                -- ^ A warning to be reported later
-    | UtilsPackageName BinPkgName                 -- ^ Name to give the package for left-over data files and executables
+    | UtilsPackageNames (Set BinPkgName)          -- ^ Names of the packages that will get left-over data files and executables
     | DebChangeLog ChangeLog			  -- ^ The changelog, first entry contains the source package name and version
     | DebLogComments [[Text]]			  -- ^ Each element is a comment to be added to the changelog, where the
                                                   -- element's text elements are the lines of the comment.
@@ -562,18 +562,20 @@
             p Source (MissingDependency _) = True
             p _ _ = False
 
--- | Override the package name used to hold left over data files and executables
-utilsPackageName :: Lens Atoms (Maybe BinPkgName)
-utilsPackageName = lens g s
+-- | Override the package name used to hold left over data files and executables.
+-- Usually only one package is specified, but if more then one are they will each
+-- receive the same list of files.
+utilsPackageNames :: Lens Atoms (Maybe (Set BinPkgName))
+utilsPackageNames = lens g s
     where
       g atoms = foldAtoms from Nothing atoms
           where
-            from Source (UtilsPackageName x') (Just x) | x /= x' = error $ "Conflicting compat values:" ++ show (x, x')
-            from Source (UtilsPackageName x) _ = Just x
-            from _ _ x = x
-      s x atoms = modifyAtoms' f (const (maybe Set.empty (singleton . (Source,) . UtilsPackageName) x)) atoms
+            from Source (UtilsPackageNames xs') (Just xs) | xs /= xs' = error $ "Conflicting compat values:" ++ show (xs, xs')
+            from Source (UtilsPackageNames xs) _ = Just xs
+            from _ _ xs = xs
+      s xs atoms = modifyAtoms' f (const (maybe Set.empty (singleton . (Source,) . UtilsPackageNames) xs)) atoms
           where
-            f Source (UtilsPackageName y) = Just y
+            f Source (UtilsPackageNames ys) = Just ys
             f _ _ = Nothing
 
 -- | Override the debian source package name constructed from the cabal name
@@ -1207,7 +1209,7 @@
 defaultFlags =
     Flags {
       verbosity_ = 1
-    , debAction_ = Usage
+    , debAction_ = Debianize
     , dryRun_ = False
     , validate_ = False
     }
diff --git a/src/Debian/Debianize/Debianize.hs b/src/Debian/Debianize/Debianize.hs
--- a/src/Debian/Debianize/Debianize.hs
+++ b/src/Debian/Debianize/Debianize.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances, OverloadedStrings, ScopedTypeVariables, StandaloneDeriving, TupleSections, TypeSynonymInstances, CPP #-}
+{-# LANGUAGE FlexibleInstances, OverloadedStrings, ScopedTypeVariables, StandaloneDeriving, TupleSections, TypeSynonymInstances #-}
 {-# OPTIONS -Wall -fno-warn-name-shadowing -fno-warn-orphans #-}
 
 -- | Generate a package Debianization from Cabal data and command line
@@ -73,7 +73,17 @@
         Debianize -> debianize (Top ".") return defaultAtoms
         Usage -> do
           progName <- getProgName
-          let info = "Usage: " ++ progName ++ " [FLAGS]\n"
+          let info = unlines [ "Typical usage is to cd to the top directory of the package's unpacked source and run: "
+                             , ""
+                             , "    " ++ progName ++ " --maintainer 'Maintainer Name <maintainer@email>'."
+                             , ""
+                             , "This will read the package's cabal file and any existing debian/changelog file and"
+                             , "deduce what it can about the debianization, then it will create or modify files in"
+                             , "the debian subdirectory.  Note that it will not remove any files in debian, and"
+                             , "these could affect the operation of the debianization in unknown ways.  For this"
+                             , "reason I recommend either using a pristine unpacked directory each time, or else"
+                             , "using a revision control system to revert the package to a known state before running."
+                             , "The following additional options are available:" ]
           putStrLn (usageInfo info options)
 
 compileEnvironmentArgs :: Atoms -> IO Atoms
diff --git a/src/Debian/Debianize/Finalize.hs b/src/Debian/Debianize/Finalize.hs
--- a/src/Debian/Debianize/Finalize.hs
+++ b/src/Debian/Debianize/Finalize.hs
@@ -19,7 +19,7 @@
     (Atoms, packageDescription, control, binaryArchitectures, rulesFragments, website, serverInfo, link,
      backups, executable, sourcePriority, sourceSection, binaryPriorities, binarySections, description,
      install, installTo, installData, installCabalExecTo, noProfilingLibrary, noDocumentationLibrary,
-     utilsPackageName, extraDevDeps, installData, installCabalExec, file, apacheSite, installDir, buildDir,
+     utilsPackageNames, extraDevDeps, installData, installCabalExec, file, apacheSite, installDir, buildDir,
      dataDir, intermediateFiles)
 import Debian.Debianize.ControlFile as Debian (SourceDebDescription(..), BinaryDebDescription(..), PackageRelations(..),
                                                newBinaryDebDescription, modifyBinaryDeb,
@@ -148,10 +148,14 @@
     case (Set.difference availableData installedData, Set.difference availableExec installedExec) of
       (datas, execs) | Set.null datas && Set.null execs -> deb
       (datas, execs) ->
-          let p = fromMaybe (debianName deb Utilities (Cabal.package pkgDesc)) (getL utilsPackageName deb)
-              deb' = setL packageDescription (Just pkgDesc) . makeUtilsAtoms p datas execs $ deb in
-          modL control (\ y -> modifyBinaryDeb p (f deb' p (if Set.null execs then All else Any)) y) deb'
+          let ps = fromMaybe (singleton (debianName deb Utilities (Cabal.package pkgDesc))) (getL utilsPackageNames deb)
+              deb' = Set.fold (h datas execs) deb ps in
+              -- deb' = setL packageDescription (Just pkgDesc) (makeUtilsAtoms p datas execs deb) in
+          Set.fold (g execs) deb' ps
+          -- modL control (\ y -> modifyBinaryDeb p (f deb' p (if Set.null execs then All else Any)) y) deb'
     where
+      h datas execs p deb' = setL packageDescription (Just pkgDesc) (makeUtilsAtoms p datas execs deb')
+      g execs p deb' = modL control (\ y -> modifyBinaryDeb p (f deb' p (if Set.null execs then All else Any)) y) deb'
       f _ _ _ (Just bin) = bin
       f deb' p arch Nothing =
           let bin = newBinaryDebDescription p arch in
diff --git a/src/Debian/Debianize/Options.hs b/src/Debian/Debianize/Options.hs
--- a/src/Debian/Debianize/Options.hs
+++ b/src/Debian/Debianize/Options.hs
@@ -37,60 +37,78 @@
 options :: [OptDescr (Atoms -> Atoms)]
 options =
     [ Option "v" ["verbose"] (ReqArg (\ s atoms -> setL verbosity (read' (\ s' -> error $ "verbose: " ++ show s') s) atoms) "n")
-             "Change build verbosity",
+             "Change the amount of progress messages generated",
       Option "n" ["dry-run", "compare"] (NoArg (\ atoms -> setL dryRun True atoms))
              "Just compare the existing debianization to the one we would generate.",
       Option "h?" ["help"] (NoArg (\ atoms -> setL debAction Usage atoms))
              "Show this help text",
-      Option "" ["debianize"] (NoArg (\ atoms -> setL debAction Debianize atoms))
-             "Generate a new debianization, replacing any existing one.  One of --debianize or --substvar is required.",
-      Option "" ["substvar"] (ReqArg (\ name atoms -> setL debAction (SubstVar (read' (\ s -> error $ "substvar: " ++ show s) name)) atoms) "Doc, Prof, or Dev")
-             (unlines ["Write out the list of dependencies required for the dev, prof or doc package depending",
-                       "on the argument.  This value can be added to the appropriate substvars file."]),
       Option "" ["executable"] (ReqArg (\ path x -> executableOption path (\ bin e -> doExecutable bin e x)) "SOURCEPATH or SOURCEPATH:DESTDIR")
-             "Create individual eponymous executable packages for these executables.  Other executables and data files are gathered into a single utils package.",
+             (unlines [ "Create an individual binary package to hold this executable.  Other executables "
+                      , " and data files are gathered into a single utils package named 'haskell-packagename-utils'."]),
       Option "" ["ghc-version"] (ReqArg (\ ver x -> setL compilerVersion (Just (last (map fst (readP_to_S parseVersion ver)))) x) "VERSION")
-             "Version of GHC in build environment",
+             (unlines [ "Version of GHC in build environment.  Without this option it is assumed that"
+                      , "the version of GHC in the build environment is the same as the one in the"
+                      , "environment in which cabal-debian is running. (the usual case.)  The GHC"
+                      , "version is used to determine which packages are bundled with GHC - if a"
+                      , "package is bundled with GHC it is not necessary to add a build dependency for"
+                      , "that package to the debian/control file."]),
       Option "" ["disable-haddock"] (NoArg (setL noDocumentationLibrary True))
-             "Don't generate API documentation.  Use this if build is crashing due to a haddock error.",
+             (unlines [ "Don't generate API documentation packages, usually named"
+                      , "libghc-packagename-doc.  Use this if your build is crashing due to a"
+                      , "haddock bug."]),
       Option "" ["missing-dependency"] (ReqArg (\ name atoms -> modL missingDependencies (insert (BinPkgName name)) atoms) "DEB")
-             "Mark a package missing, do not add it to any dependency lists in the debianization.",
+             (unlines [ "This is the counterpart to --disable-haddock.  It prevents a package"
+                      , "from being added to the build dependencies.  This is necessary, for example,"
+                      , "when a dependency package was built with the --disable-haddock option, because"
+                      , "normally cabal-debian assumes that the -doc package exists and adds it as a"
+                      , "build dependency."]),
       Option "" ["source-package-name"] (ReqArg (\ name x -> setL sourcePackageName (Just (SrcPkgName name)) x) "NAME")
-             "Use this name for the debian source package.  Default is haskell-<cabalname>, where the cabal package name is downcased.",
+             (unlines [ "Use this name for the debian source package, the name in the Source field at the top of the"
+                      , "debian control file, and also at the very beginning of the debian/changelog file.  By default"
+                      , "this is haskell-<cabalname>, where the cabal package name is downcased."]),
       Option "" ["disable-library-profiling"] (NoArg (setL noProfilingLibrary True))
-             "Don't generate profiling libraries",
-      Option "f" ["flags"] (ReqArg (\ fs atoms -> modL cabalFlagAssignments (union (fromList (flagList fs))) atoms) "FLAGS")
-             "Set given flags in Cabal conditionals",
+             (unlines [ "Don't generate profiling (-prof) library packages.  This has been used in one case"
+                      , "where the package code triggered a compiler bug."]),
       Option "" ["maintainer"] (ReqArg (\ maint x -> setL maintainer (either (error ("Invalid maintainer string: " ++ show maint)) Just (parseMaintainer maint)) x) "Maintainer Name <email addr>")
-             "Override the Maintainer name and email in $DEBEMAIL/$EMAIL/$DEBFULLNAME/$FULLNAME",
+             (unlines [ "Override the Maintainer name and email given in $DEBEMAIL or $EMAIL or $DEBFULLNAME or $FULLNAME"]),
       Option "" ["build-dep"]
                  (ReqArg (\ name atoms ->
                               modL buildDeps
                                        (case parseRelations name of
                                           Right rss -> Set.insert rss
                                           Left err -> error ("cabal-debian option --build-dep " ++ show name ++ ": " ++ show err)) atoms) "Debian package relations")
-                 "Specify a package to add to the build dependency list for this source package, e.g. '--build-dep libglib2.0-dev'.",
+                 (unlines [ "Add a dependency relation to the Build-Depends: field for this source package, e.g."
+                          , ""
+                          , "     --build-dep libglib2.0-dev"
+                          , "     --build-dep 'libglib2.0-dev >= 2.2'" ]),
       Option "" ["build-dep-indep"]
                  (ReqArg (\ name atoms ->
                               modL buildDepsIndep
                                        (case parseRelations name of
                                           Right rss -> Set.insert rss
                                           Left err -> error ("cabal-debian option --build-dep-indep " ++ show name ++ ": " ++ show err)) atoms) "Debian binary package name")
-                 "Specify a package to add to the architecture independent build dependency list for this source package, e.g. '--build-dep-indep perl'.",
+                 (unlines [ "Similar to --build-dep, but the dependencies are added to Build-Depends-Indep, e.g.:"
+                          , ""
+                          , "    --build-dep-indep perl" ]),
       Option "" ["dev-dep"] (ReqArg (\ name atoms -> modL extraDevDeps (Set.insert (Rel (BinPkgName name) Nothing Nothing)) atoms) "Debian binary package name")
-             "Specify a package to add to the Depends: list of the -dev package, e.g. '--dev-dep libncurses5-dev'.  It might be good if this implied --build-dep.",
+             (unlines [ "Add an entry to the Depends: field of the -dev package, e.g."
+                      , "'--dev-dep libncurses5-dev'.  It might be good if this implied --build-dep."]),
       Option "" ["depends"] (ReqArg (\ arg atoms -> foldr (\ (p, r) atoms' -> modL depends (Map.insertWith union p (singleton r)) atoms') atoms (parseDeps arg)) "deb:deb,deb:deb,...")
-             "Generalized --dev-dep - specify pairs A:B of debian binary package names, each A gets a Depends: B",
+             (unlines [ "Generalized --dev-dep - specify pairs A:B of debian binary package names, each"
+                      , "A gets a Depends: B.  Note that B can have debian style version relations"]),
       Option "" ["conflicts"] (ReqArg (\ arg atoms -> foldr (\ (p, r) atoms' -> modL conflicts (Map.insertWith union p (singleton r)) atoms') atoms (parseDeps arg)) "deb:deb,deb:deb,...")
-             "Specify pairs A:B of debian binary package names, each A gets a Conflicts: B.  Note that B can have debian style version relations",
+             "Like --depends, modifies the Conflicts field.",
       Option "" ["replaces"] (ReqArg (\ arg atoms -> foldr (\ (p, r) atoms' -> modL replaces (Map.insertWith union p (singleton r)) atoms') atoms (parseDeps arg)) "deb:deb,deb:deb,...")
-             "Specify pairs A:B of debian binary package names, each A gets a Replaces: B.  Note that B can have debian style version relations",
+             "Like --depends, modifies the Replaces field.",
       Option "" ["provides"] (ReqArg (\ arg atoms -> foldr (\ (p, r) atoms' -> modL provides (Map.insertWith union p (singleton r)) atoms') atoms (parseDeps arg)) "deb:deb,deb:deb,...")
-             "Specify pairs A:B of debian binary package names, each A gets a Provides: B.  Note that B can have debian style version relations",
+             "Like --depends, modifies the Provides field.",
       Option "" ["map-dep"] (ReqArg (\ pair atoms -> case break (== '=') pair of
                                                        (cab, (_ : deb)) -> modL extraLibMap (Map.insertWith Set.union cab (singleton (rels deb))) atoms
                                                        (_, "") -> error "usage: --map-dep CABALNAME=RELATIONS") "CABALNAME=RELATIONS")
-             "Specify a mapping from the name appearing in the Extra-Library field of the cabal file to a debian binary package name, e.g. --dep-map cryptopp=libcrypto-dev",
+             (unlines [ "Specify what debian package name corresponds with a name that appears in"
+                      , "the Extra-Library field of a cabal file, e.g. --map-dep cryptopp=libcrypto-dev."
+                      , "I think this information is present somewhere in the packaging system, but"
+                      , "I'm not sure of the details."]),
       Option "" ["deb-version"] (ReqArg (\ version atoms -> setL debVersion (Just (parseDebianVersion version)) atoms) "VERSION")
              "Specify the version number for the debian package.  This will pin the version and should be considered dangerous.",
       Option "" ["revision"] (ReqArg (setL revision . Just) "REVISION")
@@ -105,11 +123,29 @@
                                                      _ -> error "usage: --exec-map EXECNAME=RELATIONS") "EXECNAME=RELATIONS")
              "Specify a mapping from the name appearing in the Build-Tool field of the cabal file to a debian binary package name, e.g. --exec-map trhsx=haskell-hsx-utils",
       Option "" ["omit-lt-deps"] (NoArg (setL omitLTDeps True))
-             "Don't generate the << dependency when we see a cabal equals dependency.",
+             (unlines [ "Remove all less-than dependencies from the generated control file.  Less-than"
+                      , "dependencies are less useful and more troublesome for debian packages than cabal,"
+                      , "because you can't install multiple versions of a given debian package.  For more"
+                      , "google 'cabal hell'."]),
       Option "" ["quilt"] (NoArg (setL sourceFormat (Just Quilt3)))
              "The package has an upstream tarball, write '3.0 (quilt)' into source/format.",
       Option "" ["builddir"] (ReqArg (\ s atoms -> setL buildDir (Just (s </> "build")) atoms) "PATH")
-             "Subdirectory where cabal does its build, dist/build by default, dist-ghc when run by haskell-devscripts.  The build subdirectory is added to match the behavior of the --builddir option in the Setup script."
+             (unlines [ "Subdirectory where cabal does its build, dist/build by default, dist-ghc when"
+                      , "run by haskell-devscripts.  The build subdirectory is added to match the"
+                      , "behavior of the --builddir option in the Setup script."]),
+
+      Option "f" ["flags"] (ReqArg (\ fs atoms -> modL cabalFlagAssignments (union (fromList (flagList fs))) atoms) "FLAGS")
+             (unlines [ "Flags to pass to the finalizePackageDescription function in"
+                      , "Distribution.PackageDescription.Configuration when loading the cabal file."]),
+
+      Option "" ["debianize"] (NoArg (\ atoms -> setL debAction Debianize atoms))
+             "Deprecated - formerly used to get what is now the normal benavior.",
+      Option "" ["substvar"] (ReqArg (\ name atoms -> setL debAction (SubstVar (read' (\ s -> error $ "substvar: " ++ show s) name)) atoms) "Doc, Prof, or Dev")
+             (unlines [ "With this option no debianization is generated.  Instead, the list"
+                      , "of dependencies required for the dev, prof or doc package (depending"
+                      , "on the argument) is printed to standard output.  These can be added"
+                      , "to the appropriate substvars file.  (This is an option whose use case"
+                      , "is lost in the mists of time.)"])
     ]
 
 anyrel :: BinPkgName -> Relation
diff --git a/src/Debian/Debianize/SubstVars.hs b/src/Debian/Debianize/SubstVars.hs
--- a/src/Debian/Debianize/SubstVars.hs
+++ b/src/Debian/Debianize/SubstVars.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, ScopedTypeVariables, TupleSections, TypeSynonymInstances #-}
+{-# LANGUAGE ScopedTypeVariables, TupleSections, TypeSynonymInstances #-}
 {-# OPTIONS -Wall -fno-warn-name-shadowing #-}
 
 -- | Support for generating Debianization from Cabal data.
diff --git a/src/Debian/Debianize/Tests.hs b/src/Debian/Debianize/Tests.hs
--- a/src/Debian/Debianize/Tests.hs
+++ b/src/Debian/Debianize/Tests.hs
@@ -1,7 +1,8 @@
 {-# LANGUAGE OverloadedStrings, RankNTypes, ScopedTypeVariables, StandaloneDeriving #-}
 {-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
-module Debian.Debianize.Tests
+module Main
     ( tests
+    , main
     ) where
 
 import Data.Algorithm.Diff.Context (contextDiff)
@@ -20,7 +21,7 @@
 import Debian.Debianize.Debianize (debianization)
 import Debian.Debianize.Atoms as Atoms
     (Atoms, rulesHead, compat, sourceFormat, changelog, control, missingDependencies, revision,
-     binaryArchitectures, copyright, debVersion, execMap, buildDeps, utilsPackageName, description,
+     binaryArchitectures, copyright, debVersion, execMap, buildDeps, utilsPackageNames, description,
      depends, installData, epochMap {-, sourcePackageName, install, buildDepsIndep-})
 import Debian.Debianize.ControlFile as Deb (SourceDebDescription(..), BinaryDebDescription(..), PackageRelations(..), VersionControlSpec(..))
 import Debian.Debianize.Dependencies (getRulesHead)
@@ -341,7 +342,7 @@
                            modL binaryArchitectures (Map.insert (BinPkgName "creativeprompts-data") All) .
                            modL binaryArchitectures (Map.insert (BinPkgName "creativeprompts-development") All) .
                            modL binaryArchitectures (Map.insert (BinPkgName "creativeprompts-production") All) .
-                           setL utilsPackageName (Just (BinPkgName "creativeprompts-data")) .
+                           setL utilsPackageNames (Just (singleton (BinPkgName "creativeprompts-data"))) .
                            modL Atoms.description (Map.insertWith (error "test5") (BinPkgName "creativeprompts-data")
                                                     (T.intercalate "\n" [ "creativeprompts.com data files"
                                                                , "  Static data files for creativeprompts.com"])) .
@@ -530,3 +531,7 @@
                                 , "    files that were supposed to be installed into packages."
                                 , ""
                                 , " -- David Fox <dsf@seereason.com>  Thu, 20 Dec 2012 06:49:25 -0800" ]))
+
+main :: IO ()
+main = runTestTT tests >>= putStrLn . show
+
diff --git a/src/Debian/Orphans.hs b/src/Debian/Orphans.hs
--- a/src/Debian/Orphans.hs
+++ b/src/Debian/Orphans.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, DeriveDataTypeable, FlexibleInstances, StandaloneDeriving #-}
+{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, StandaloneDeriving #-}
 {-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
 module Debian.Orphans where
 
@@ -114,9 +114,6 @@
 instance Pretty License where
     pretty (GPL _) = text "GPL"
     pretty (LGPL _) = text "LGPL"
-#if MIN_VERSION_Cabal(1,16,0)
-    pretty (Apache _) = text "Apache"
-#endif
     pretty BSD3 = text "BSD"
     pretty BSD4 = text "BSD-like"
     pretty PublicDomain = text "Public Domain"
@@ -124,6 +121,7 @@
     pretty OtherLicense = text "Non-distributable"
     pretty MIT = text "MIT"
     pretty (UnknownLicense _) = text "Unknown"
+    pretty x = text (show x)
 
 deriving instance Data NameAddr
 deriving instance Typeable NameAddr
