diff --git a/Angel/Config.hs b/Angel/Config.hs
--- a/Angel/Config.hs
+++ b/Angel/Config.hs
@@ -1,6 +1,5 @@
 module Angel.Config where
 
-import Data.Maybe (isJust)
 import Control.Exception (try, SomeException)
 import qualified Data.Map as M
 import Control.Monad (when, mapM_)
@@ -45,34 +44,20 @@
     checkProgram p = void $ when (exec p == Nothing) $ error $ name p ++ " does not have an 'exec' specification"
 
 modifyProg :: Program -> String -> Value -> Program
-modifyProg prog "exec" (String s) | isJust (exec prog) = 
-    error $ "redefinition of '" ++ (name prog) ++ ".exec'"
-                                  | otherwise          = 
-    prog{exec = Just (T.unpack s)}
+modifyProg prog "exec" (String s) = prog{exec = Just (T.unpack s)}
 modifyProg prog "exec" _ = error "wrong type for field 'exec'; string required"
 
-modifyProg prog "delay" (Number n) | isJust (delay prog) =
-    error $ "redefinition of '" ++ (name prog) ++ ".prog'"
-                                   | n < 0     = error "delay value must be >= 0"
+modifyProg prog "delay" (Number n) | n < 0     = error "delay value must be >= 0"
                                    | otherwise = prog{delay = Just $ round n}
 modifyProg prog "delay" _ = error "wrong type for field 'delay'; integer"
 
-modifyProg prog "stdout" (String s) | isJust (stdout prog) =
-    error $ "redefinition of '" ++ (name prog) ++ ".stdout'"
-                                    | otherwise = 
-    prog{stdout = Just (T.unpack s)}
+modifyProg prog "stdout" (String s) = prog{stdout = Just (T.unpack s)}
 modifyProg prog "stdout" _ = error "wrong type for field 'stdout'; string required"
 
-modifyProg prog "stderr" (String s) | isJust (stderr prog) = 
-    error $ "redefinition of '" ++ (name prog) ++ ".stderr'"
-                                    | otherwise =
-    prog{stderr = Just (T.unpack s)}
+modifyProg prog "stderr" (String s) = prog{stderr = Just (T.unpack s)}
 modifyProg prog "stderr" _ = error "wrong type for field 'stderr'; string required"
 
-modifyProg prog "directory" (String s) | isJust (workingDir prog) = 
-    error $ "redefinition of '" ++ (name prog) ++ ".directory'"
-                                       | otherwise =
-    prog{workingDir = (Just $ T.unpack s)}
+modifyProg prog "directory" (String s) = prog{workingDir = (Just $ T.unpack s)}
 modifyProg prog "directory" _ = error "wrong type for field 'directory'; string required"
 
 modifyProg prog n _ = prog
diff --git a/Angel/Files.hs b/Angel/Files.hs
--- a/Angel/Files.hs
+++ b/Angel/Files.hs
@@ -1,5 +1,6 @@
 module Angel.Files (getFile, startFileManager) where
 
+import Control.Exception (try, SomeException)
 import Control.Concurrent.STM
 import Control.Concurrent.STM.TChan (readTChan, writeTChan, TChan, newTChan, newTChanIO)
 import Control.Monad (forever)
@@ -13,13 +14,13 @@
 fileManager :: TChan FileRequest -> IO ()
 fileManager req = do 
     (path, resp) <- atomically $ readTChan req
-    mh <- catch  (openFile path AppendMode >>= \h-> return $ Just h) (\e-> return Nothing)
+    mh <- try $ openFile path AppendMode
     case mh of
-        Just hand -> do
+        Right hand -> do
             hand' <- hDuplicate hand
             hClose hand
             atomically $ writeTChan resp (Just hand')
-        Nothing -> atomically $ writeTChan resp Nothing
+        Left (e :: SomeException) -> atomically $ writeTChan resp Nothing
     fileManager req
 
 getFile :: String -> GroupConfig -> IO Handle
diff --git a/Angel/Log.hs b/Angel/Log.hs
--- a/Angel/Log.hs
+++ b/Angel/Log.hs
@@ -1,17 +1,19 @@
 module Angel.Log where
 
+import Data.Time.LocalTime (ZonedTime(..),
+                            getZonedTime)
+import Data.Time.Format (formatTime)
+
 import Text.Printf (printf)
-import System.Time (getClockTime, toCalendarTime, CalendarTime(..), formatCalendarTime)
 import System.Locale (defaultTimeLocale)
 
 -- |provide a clean, ISO-ish format for timestamps in logs
-cleanCalendar :: CalendarTime -> String
-cleanCalendar ct = formatCalendarTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" ct
+cleanCalendar :: ZonedTime -> String
+cleanCalendar = formatTime defaultTimeLocale "%Y/%m/%d %H:%M:%S"
 
 -- |log a line to stdout; indented for use with partial application for 
 -- |"local log"-type macroing
 logger :: String -> String -> IO ()
 logger lname msg = do 
-    tm <- getClockTime
-    ct <- toCalendarTime tm
-    printf "[%s] {%s} %s\n" (cleanCalendar ct) lname msg
+    zt <- getZonedTime
+    printf "[%s] {%s} %s\n" (cleanCalendar zt) lname msg
diff --git a/angel.cabal b/angel.cabal
--- a/angel.cabal
+++ b/angel.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.3.3
+Version:             0.3.4
 
 -- A short (one-line) description of the package.
 -- Synopsis:            
@@ -54,7 +54,7 @@
 -- Extra-source-files:  
 
 -- Constraint on the version of Cabal needed to build this package.
-Cabal-version:       >=1.6
+Cabal-version:       >=1.10
 
 
 source-repository head
@@ -75,7 +75,7 @@
   Build-depends: containers >= 0.3
   Build-depends: unordered-containers >= 0.1.4
   Build-depends: unix >= 2.4
-  Build-depends: old-time
+  Build-depends: time
   Build-depends: old-locale
   Build-depends: text>=0.11
 
@@ -92,6 +92,17 @@
   -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
   -- Build-tools:         
 
-  Extensions: OverloadedStrings,ScopedTypeVariables,BangPatterns,ViewPatterns
+  Default-Extensions: OverloadedStrings,ScopedTypeVariables,BangPatterns,ViewPatterns
+  Default-Language: Haskell2010
   
   Ghc-Options: -threaded 
+
+test-suite spec
+  Type:           exitcode-stdio-1.0
+  Main-Is:        Spec.hs
+  Hs-Source-Dirs: ., test
+  Build-Depends:  base
+  Build-Depends:  hspec
+  Build-depends:  time
+  Default-Extensions: OverloadedStrings,ScopedTypeVariables,BangPatterns,ViewPatterns
+  Default-Language: Haskell2010
diff --git a/test/Spec.hs b/test/Spec.hs
new file mode 100644
--- /dev/null
+++ b/test/Spec.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
