diff --git a/hi.cabal b/hi.cabal
--- a/hi.cabal
+++ b/hi.cabal
@@ -1,5 +1,5 @@
 name:                hi
-version:             0.0.2
+version:             0.0.3
 synopsis:            Generate scaffold for cabal project
 license:             BSD3
 license-file:        LICENSE
diff --git a/src/Distribution/Hi/Config.hs b/src/Distribution/Hi/Config.hs
--- a/src/Distribution/Hi/Config.hs
+++ b/src/Distribution/Hi/Config.hs
@@ -40,7 +40,7 @@
 configFile :: Parser [(String, String)]
 configFile = catMaybes <$> many line <* eof
 
-parseConfig :: String -> IO [Arg]
+parseConfig :: String -> [Arg]
 parseConfig x = case parse configFile "ERROR" x of -- TODO Error message
       Left  l  -> error $ show l
-      Right xs -> return $ map (uncurry Val) xs
+      Right xs -> map (uncurry Val) xs
diff --git a/src/Distribution/Hi/Option.hs b/src/Distribution/Hi/Option.hs
--- a/src/Distribution/Hi/Option.hs
+++ b/src/Distribution/Hi/Option.hs
@@ -7,16 +7,20 @@
     ) where
 
 import           Control.Applicative
+import           Control.Exception      (IOException, catch)
 import           Data.Time.Calendar     (toGregorian)
 import           Data.Time.Clock        (getCurrentTime, utctDay)
 import           Distribution.Hi.Config (parseConfig)
 import           Distribution.Hi.Flag   (extractInitFlags)
 import           Distribution.Hi.Types
+import           Prelude                hiding (catch)
 import           System.Console.GetOpt
 import           System.Directory       (getHomeDirectory)
 import           System.Environment     (getArgs)
 import           System.FilePath        (joinPath)
+import           System.IO              (hPutStr, stderr)
 
+
 -- | Available options.
 options :: [OptDescr Arg]
 options =
@@ -39,24 +43,30 @@
       RunWithNoConfigurationFile -> runWithNoConfigurationFile
       _                          -> error "Unexpected run mode"
   where
-    runWithNoConfigurationFile = getInitFlagsPure =<< getArgs
+    runWithNoConfigurationFile = getInitFlags' =<< getArgs
     runWithConfigurationFile   = do
         (xs,_) <- parseArgs <$> getArgs
-        ys     <- addYear =<< parseConfig =<< readFile =<< getConfigFileName
+        ys     <- addYear <$> parseConfig =<< readFile' =<< getConfigFileName
         return $ extractInitFlags (ys ++ xs)
+    readFile' f = catch (readFile f)
+                  (\e -> do let err = show (e :: IOException)
+                            hPutStr stderr ("Warning: Couldn't open " ++ f ++ ": " ++ err)
+                            return "")
 
-getInitFlagsPure :: [String] -> IO InitFlags
-getInitFlagsPure args = extractInitFlags <$> (addYear . fst . parseArgs $ args)
+-- | Returns `InitFlags` from given args, attaching year if it's missing in
+-- args
+getInitFlags' :: [String] -> IO InitFlags
+getInitFlags' args = extractInitFlags <$> (addYear . fst . parseArgs $ args)
 
 -- | Returns 'Mode'.
 getMode :: IO Mode
 getMode = do
-    args <- fst <$> parseArgs <$> getArgs
-    return $ if any id [True |Version <- args]
-               then ShowVersion
-               else if any id [True |NoConfigurationFile <- args]
-                      then RunWithNoConfigurationFile
-                      else Run
+    go . fst . parseArgs <$> getArgs
+  where
+    go []                      = Run
+    go (Version:_)             = ShowVersion
+    go (NoConfigurationFile:_) = RunWithNoConfigurationFile
+    go (_:xs)                  = go xs
 
 parseArgs :: [String] -> ([Arg], [String])
 parseArgs argv =
@@ -77,8 +87,7 @@
 
 getConfigFileName :: IO FilePath
 getConfigFileName = do
-    args <- (fst . parseArgs) <$> getArgs
-    go args
+    go =<< (fst . parseArgs) <$> getArgs
   where
     go []                       = defaultConfigFilePath
     go ((Val "configFile" p):_) = return p
diff --git a/src/Distribution/Hi/Version.hs b/src/Distribution/Hi/Version.hs
--- a/src/Distribution/Hi/Version.hs
+++ b/src/Distribution/Hi/Version.hs
@@ -4,4 +4,4 @@
     ) where
 
 version :: String
-version = "0.0.2"
+version = "0.0.3"
