diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2007-2011 Dino Morelli
+Copyright (c) 2007-2012 Dino Morelli
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/README b/README
deleted file mode 100644
--- a/README
+++ /dev/null
@@ -1,27 +0,0 @@
-photoname
-----------
-
-author: Dino Morelli <dino@ui3.info>
-
-
-*about*
-
-photoname is a command-line utility for renaming/moving photo image
-files. The new folder location and naming are determined by the the
-photo shoot date information contained within the file's EXIF tags.
-
-This program is known to build with GHC 6.12.3
-
-
-*install*
-
-With cabal-install, get it directly from Hackage:
-
-   $ cabal install photoname
-
-Or manually after unpacking source:
-
-   $ runhaskell Setup.lhs configure
-   $ runhaskell Setup.lhs build
-   $ runhaskell Setup.lhs test
-   $ runhaskell Setup.lhs install
diff --git a/TODO b/TODO
deleted file mode 100644
--- a/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-- Allow user to specify permissions for newly-created dirs and files. Bonus points for parsing the octal codes everyone knows and loves.
-
-- Add a --force switch to disregard existing links.
-
-- Deal gracefully with unknown dates. This means not just putting pictures into the 0000/0000-00-00 directory, but making sure that the _### serial number part is incremented from the highest one in there.
diff --git a/doc/dev/notes b/doc/dev/notes
deleted file mode 100644
--- a/doc/dev/notes
+++ /dev/null
@@ -1,41 +0,0 @@
------
-- To change the app version:
-   - Edit photoname.cabal
-   - Edit src/Photoname/Opts.hs, usageText near the bottom of footer
-
-   I'd like to make a script in util/ to automate this.
-   After such a script has been made, may want to put developer notes on using it in doc/dev/<somefile>
-
-----------
-File naming format:
-
-yyyymmdd_[oth_]nnn[-e[n]].jpg
-yyyymmdd-hhmmss[_oth][_ss].jpg
-
-date: year month day
-time: hour minute second
-oth: could be photographer: 2 or 3 character initials
-ss: edited or sized, optional number for more than one
-   _sp _ep : sized/edited for printing
-   _sd1920x1080 _ed : sized/edited for desktop
-   _sw _ew : sized/edited for web
-
-
-These files are arranged into a dir structure
-
-top-level/
-   0000/
-      0000-00-00/
-         00000000_001.jpg   -- Unknown pictures
-         00000000_002.jpg
-   2006/
-      2006-10-13/
-         20061013_431.jpg
-         20061013_509.jpg
-   2007/
-      2007-01-30/
-         20070130_002.jpg
-         20070130_119-ew.jpg
-      2007-04-19/
-         20070419_bmd_323.jpg
-         20070419_bmd_325-sd.jpg
diff --git a/doc/hcar-photoname.tex b/doc/hcar-photoname.tex
deleted file mode 100644
--- a/doc/hcar-photoname.tex
+++ /dev/null
@@ -1,21 +0,0 @@
-\begin{hcarentry}{photoname}
-\label{photoname}
-\report{Dino Morelli}%11/08
-\status{stable, maintained}
-\makeheader
-
-photoname is a command-line utility for renaming/moving photo image files. The new folder location and naming are determined by the EXIF photo shoot date and the usually-camera-assigned serial number, often appearing in the filename.
-
-photoname is on Hackage and can be acquired using darcs or other methods. See the project page below for more.
-
-\FurtherReading
-\begin{compactitem}
-\item Project page:
-
-\url{http://ui3.info/d/proj/photoname.html}
-
-\item Source repository:
-
-\texttt{darcs get} \url{http://ui3.info/darcs/photoname}
-\end{compactitem}
-\end{hcarentry}
diff --git a/photoname.cabal b/photoname.cabal
--- a/photoname.cabal
+++ b/photoname.cabal
@@ -1,10 +1,10 @@
 name:                photoname
-cabal-version:       >= 1.2
-version:             3.0.0
+cabal-version:       >= 1.8
+version:             3.0.1
 build-type:          Simple
 license:             BSD3
 license-file:        LICENSE
-copyright:           2007-2011 Dino Morelli 
+copyright:           2007-2012 Dino Morelli 
 author:              Dino Morelli 
 maintainer:          Dino Morelli <dino@ui3.info>
 stability:           stable
@@ -14,11 +14,31 @@
    Command-line utility for renaming/moving photo image files based on 
    EXIF tags.
 category:            Application, Console
-tested-with:         GHC>=6.8.2
+tested-with:         GHC >= 7.6.1
 
+extra-source-files:  testsuite/resources/*.jpg
+
 executable           photoname
    main-is:          photoname.hs
    build-depends:    base >= 3 && < 5, directory, exif, filepath, mtl, 
                      old-locale, parsec, time, unix
-   ghc-options:      -Wall
+   other-modules:    Photoname.Common
+                     Photoname.DateFormat
+                     Photoname.Date
+                     Photoname.Exif
+                     Photoname.Opts
+                     Photoname.SerialFormat
    hs-source-dirs:   src
+   ghc-options:      -Wall
+
+test-suite           photoname-tests
+   type:             exitcode-stdio-1.0
+   main-is:          runtests.hs
+   build-depends:    base, directory, exif, filepath, HUnit, mtl,
+                     old-locale, parsec, process, regex-posix, time,
+                     unix
+   other-modules:    TestHelp
+                     TestLink
+                     Util
+   hs-source-dirs:   src testsuite
+   ghc-options:      -Wall
diff --git a/src/Photoname/Common.hs b/src/Photoname/Common.hs
--- a/src/Photoname/Common.hs
+++ b/src/Photoname/Common.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
diff --git a/src/Photoname/Date.hs b/src/Photoname/Date.hs
--- a/src/Photoname/Date.hs
+++ b/src/Photoname/Date.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
diff --git a/src/Photoname/DateFormat.hs b/src/Photoname/DateFormat.hs
--- a/src/Photoname/DateFormat.hs
+++ b/src/Photoname/DateFormat.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
diff --git a/src/Photoname/Exif.hs b/src/Photoname/Exif.hs
--- a/src/Photoname/Exif.hs
+++ b/src/Photoname/Exif.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
@@ -7,6 +7,7 @@
 module Photoname.Exif
    where
 
+import Control.Exception
 import Control.Monad.Error
 import Graphics.Exif ( fromFile, getTag, Exif )
 import System.IO.Error
diff --git a/src/Photoname/Opts.hs b/src/Photoname/Opts.hs
--- a/src/Photoname/Opts.hs
+++ b/src/Photoname/Opts.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
@@ -149,7 +149,7 @@
          , "A photo shot on 2002-May-02 01:23:07 PM:"
          , "   img_1790.jpg -> <PARENTDIR>/2002/2002-05-02/20020502-132307.jpg"
          , ""
-         , "The EXIF date/time stamp used for naming is the first of these fields to be found: DateTimeDigitized, DateTimeOriginal, DateTime"
+         , "The EXIF date/time stamp used for naming is the first of these fields to be found: Exif.Photo.DateTimeDigitized, Exif.Photo.DateTimeOriginal, Exif.Image.DateTime"
          , ""
          , "The <PARENTDIR> is the one given by the --parent-dir switch and represents the top-level of where you're storing photos."
          , ""
@@ -183,5 +183,5 @@
          , "photoname invoked with --suffix=_dwm :"
          , "   20020502-132307_dwm.jpg"
          , ""
-         , "Version 3.0.0  Dino Morelli <dino@ui3.info>"
+         , "Version 3.0.1  Dino Morelli <dino@ui3.info>"
          ]
diff --git a/src/Photoname/SerialFormat.hs b/src/Photoname/SerialFormat.hs
--- a/src/Photoname/SerialFormat.hs
+++ b/src/Photoname/SerialFormat.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
diff --git a/src/photoname.hs b/src/photoname.hs
--- a/src/photoname.hs
+++ b/src/photoname.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
diff --git a/testsuite/TestHelp.hs b/testsuite/TestHelp.hs
--- a/testsuite/TestHelp.hs
+++ b/testsuite/TestHelp.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
@@ -8,7 +8,7 @@
    where
 
 import qualified Util
-import Test.HUnit ( Test (..), assertBool, assertEqual )
+import Test.HUnit ( Test (..), assertEqual )
 
 
 testHelpAll :: Test
diff --git a/testsuite/TestLink.hs b/testsuite/TestLink.hs
--- a/testsuite/TestLink.hs
+++ b/testsuite/TestLink.hs
@@ -1,7 +1,9 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
+{-# OPTIONS_GHC -fno-warn-unused-do-bind #-}
+
 module TestLink (
    testLinkAll
 )
@@ -11,7 +13,7 @@
 import System.FilePath.Posix ( (</>), (<.>) )
 import System.Posix.Files ( fileExist )
 import System.Process ( waitForProcess )
-import Test.HUnit ( Test (..), assertBool, assertString )
+import Test.HUnit ( Test (..), assertBool )
 import Text.Regex.Posix ( (=~) )
 import qualified Util
 
@@ -36,6 +38,8 @@
    , TestLabel "testDirForFile" testDirForFile
    ]
 
+
+topDir, oldPath, newLinkPathDate, newLinkPathSerial :: FilePath
 
 topDir = Util.resourcesPath </> "foo"
 oldPath = Util.resourcesPath </> "img_1220.jpg"
diff --git a/testsuite/Util.hs b/testsuite/Util.hs
--- a/testsuite/Util.hs
+++ b/testsuite/Util.hs
@@ -1,4 +1,4 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
@@ -28,8 +28,8 @@
    XXX Move this somewhere logical like Photoname.Util
 -}
 getProcessOutput :: FilePath -> [String] -> IO (String, ProcessHandle)
-getProcessOutput path args = do
-   (_, outH, _, procH) <- runInteractiveProcess path args Nothing Nothing
+getProcessOutput path' args = do
+   (_, outH, _, procH) <- runInteractiveProcess path' args Nothing Nothing
    output <- hGetContents outH
    return (output, procH)
 
diff --git a/testsuite/runtests.hs b/testsuite/runtests.hs
--- a/testsuite/runtests.hs
+++ b/testsuite/runtests.hs
@@ -1,19 +1,29 @@
--- Copyright: 2007-2011 Dino Morelli
+-- Copyright: 2007-2012 Dino Morelli
 -- License: BSD3 (see LICENSE)
 -- Author: Dino Morelli <dino@ui3.info>
 
 module Main
    where
 
-import Test.HUnit
+import System.Exit
+import Test.HUnit ( Counts (..), Test (..), runTestTT )
 import TestHelp
 import TestLink
 
 
 main :: IO ()
 main = do
-   runTestTT tests
-   return ()
+   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
diff --git a/util/post-get b/util/post-get
deleted file mode 100644
--- a/util/post-get
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /bin/sh
-
-ln -s dist/build/photoname/photoname
diff --git a/util/prefs/boring b/util/prefs/boring
deleted file mode 100644
--- a/util/prefs/boring
+++ /dev/null
@@ -1,37 +0,0 @@
-# Boring file regexps:
-\.hi$
-\.o$
-\.o\.cmd$
-# *.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($|/)
-(^|/)RCS($|/)
-~$
-#(^|/)\.[^/]
-(^|/)_darcs($|/)
-\.bak$
-\.BAK$
-\.orig$
-(^|/)vssver\.scc$
-\.swp$
-(^|/)MT($|/)
-(^|/)\{arch\}($|/)
-(^|/).arch-ids($|/)
-(^|/),
-\.class$
-\.prof$
-(^|/)\.DS_Store$
-(^|/)BitKeeper($|/)
-(^|/)ChangeSet($|/)
-(^|/)\.svn($|/)
-\.py[co]$
-\#
-\.cvsignore$
-(^|/)Thumbs\.db$
-(^|/)autom4te\.cache($|/)
-(^|/)dist($|/)
-\.setup-config$
diff --git a/util/resources/test.conf b/util/resources/test.conf
deleted file mode 100644
--- a/util/resources/test.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-move
-old-style
-parent-dir=~/mypics
-suffix=_dwm
