diff --git a/dbmigrations.cabal b/dbmigrations.cabal
--- a/dbmigrations.cabal
+++ b/dbmigrations.cabal
@@ -1,5 +1,5 @@
 Name:                dbmigrations
-Version:             1.1
+Version:             1.1.1
 Synopsis:            An implementation of relational database "migrations"
 Description:         A library and program for the creation,
                      management, and installation of schema updates
diff --git a/src/Database/Schema/Migrations.hs b/src/Database/Schema/Migrations.hs
--- a/src/Database/Schema/Migrations.hs
+++ b/src/Database/Schema/Migrations.hs
@@ -20,7 +20,6 @@
 import qualified Database.Schema.Migrations.Store as S
 import Database.Schema.Migrations.Migration
     ( Migration(..)
-    , newMigration
     )
 
 -- |Given a 'B.Backend' and a 'S.MigrationMap', query the backend and
diff --git a/src/Moo/CommandUtils.hs b/src/Moo/CommandUtils.hs
--- a/src/Moo/CommandUtils.hs
+++ b/src/Moo/CommandUtils.hs
@@ -10,6 +10,7 @@
        , getCurrentTimestamp
        ) where
 
+import Control.Applicative
 import Control.Exception ( bracket )
 import Control.Monad ( when, forM_, unless )
 import Control.Monad.Reader ( asks )
diff --git a/src/Moo/Core.hs b/src/Moo/Core.hs
--- a/src/Moo/Core.hs
+++ b/src/Moo/Core.hs
@@ -16,7 +16,7 @@
 
 import Data.List.Split (wordsBy)
 import Data.Char (isSpace)
-import Control.Applicative ((<$>), (<*>))
+import Control.Applicative
 import Control.Monad.Reader (ReaderT)
 import qualified Data.Configurator as C
 import Data.Configurator.Types (Config, Configured)
@@ -25,7 +25,7 @@
 import Database.HDBC.PostgreSQL (connectPostgreSQL)
 import Database.HDBC.Sqlite3 (connectSqlite3)
 import System.Environment (getEnvironment)
-import Data.Maybe (isJust, fromMaybe)
+import Data.Maybe (fromMaybe)
 import qualified Database.MySQL.Simple as MySQL
 import qualified Database.MySQL.Base as MySQLB
 
@@ -79,15 +79,15 @@
 newLoadConfig :: LoadConfig
 newLoadConfig = LoadConfig Nothing Nothing Nothing Nothing Nothing
 
-isValidConfig :: LoadConfig -> Bool
-isValidConfig (LoadConfig a b c _ _) = all isJust [a, b, c]
-
-loadConfigToConfig :: LoadConfig -> Configuration
-loadConfigToConfig (LoadConfig (Just cs) (Just dt) (Just msp) lm ts) =
-  Configuration cs dt msp
-    (fromMaybe False lm)
-    (fromMaybe False ts)
-loadConfigToConfig _ = error "LoadConfig is invalid!"
+validateLoadConfig :: LoadConfig -> Either String Configuration
+validateLoadConfig (LoadConfig Nothing _ _ _ _) =
+    Left "Invalid configuration: connection string not specified"
+validateLoadConfig (LoadConfig _ Nothing _ _ _) =
+    Left "Invalid configuration: database type not specified"
+validateLoadConfig (LoadConfig _ _ Nothing _ _) =
+    Left "Invalid configuration: migration store path not specified"
+validateLoadConfig (LoadConfig (Just cs) (Just dt) (Just msp) lm ts) =
+    Right $ Configuration cs dt msp (fromMaybe False lm) (fromMaybe False ts)
 
 -- |Setters for fields of 'LoadConfig'.
 lcConnectionString, lcDatabaseType, lcMigrationStorePath
@@ -98,6 +98,8 @@
 
 lcLinearMigrations :: LoadConfig -> Maybe Bool -> LoadConfig
 lcLinearMigrations c v   = c { _lcLinearMigrations   = v }
+
+lcTimestampFilenames :: LoadConfig -> Maybe Bool -> LoadConfig
 lcTimestampFilenames c v = c { _lcTimestampFilenames = v }
 
 
@@ -144,9 +146,7 @@
     env <- getEnvironment
     cfg <- applyConfigFile file newLoadConfig >>= applyEnvironment env
 
-    if isValidConfig cfg
-       then return $ Right $ loadConfigToConfig cfg
-       else return $ Left "Configuration is invalid, check if everything is set."
+    return $ validateLoadConfig cfg
 
 -- |Converts @Just "on"@ and @Just "true"@ (case insensitive) to @True@,
 -- anything else to @False@.
@@ -195,8 +195,8 @@
         [(map toLower (trimlr k),trimlr v) | kvPair <-
                                               wordsBy (== ';') connectionString :: [String]
                                            , let (k,v) = case wordsBy (== '=') kvPair of
-                                                           (k:v:_) -> (k,v)
-                                                           [k] -> (k,"")
+                                                           (k':v':_) -> (k',v')
+                                                           [k'] -> (k',"")
                                                            [] -> error "impossible"]
       trimlr = takeWhile (not . isSpace) . dropWhile isSpace
       connInfo =
