diff --git a/Hevolisa.hs b/Hevolisa.hs
--- a/Hevolisa.hs
+++ b/Hevolisa.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE PatternGuards #-}
 --
 -- Module      : Hevolisa
 -- Copyright   : (c) Daniel Neun 2008
@@ -9,7 +10,37 @@
 module Main where
 
 import Hevolisa.Evolution (start)
+import System.Console.GetOpt
+import System.Environment (getArgs)
+import System.Exit (ExitCode(..),exitWith)
+import System.IO (hPutStrLn,stderr,stdout)
+import System.IO.Error
 
+data Flag = Help | F FilePath
+            deriving Eq
 
+options :: [OptDescr Flag]
+options = [ Option ['h'] ["help"] (NoArg Help)
+                   "Show this help message"]
+
+
 main :: IO ()
-main = start "mona_lisa_crop.png" >> return ()
+main = parseArgs >> return ()
+
+parseArgs = do
+  argv <- getArgs
+  case parse argv of
+    (opts,files,[])
+        | Help `elem` opts                 -> help
+        | not $ null files                 -> tryStart $ head files
+    (_,_,errs)                             -> die errs
+  where parse argv = getOpt Permute options argv
+        header = "Usage: hevolisa PNGFILE"
+        info = usageInfo header options
+        dump = hPutStrLn stderr
+        die errs = dump (concat errs ++ info) >> exitWith (ExitFailure 1)
+        help = dump info                      >> exitWith ExitSuccess
+        tryStart path = do result <- try (start path)
+                           case result of
+                             Left e   -> putStrLn $ show e
+                             Right _  -> return ()
diff --git a/Hevolisa/Renderer.hs b/Hevolisa/Renderer.hs
--- a/Hevolisa/Renderer.hs
+++ b/Hevolisa/Renderer.hs
@@ -12,6 +12,7 @@
 where
 
 import System.FilePath ((</>),(<.>))
+import System.IO.Error
 import Control.Monad
 import Data.ByteString (unpack)
 import Directory
@@ -80,7 +81,9 @@
 
 -- | Open an image file and apply the function
 withImageFromPNG :: FilePath -> ([Integer] -> IO a) -> IO a
-withImageFromPNG fp f = C.withImageSurfaceFromPNG fp unpackSurface >>= f
+withImageFromPNG fp f = do fileExists <- doesFileExist fp
+                           unless fileExists $ ioError $ userError ("File does not exist: " ++ fp)
+                           C.withImageSurfaceFromPNG fp unpackSurface >>= f
                  
 -- | Rasterize the drawing and save it to a file
 drawingToFile :: DnaDrawing -> Int -> IO ()
diff --git a/hevolisa.cabal b/hevolisa.cabal
--- a/hevolisa.cabal
+++ b/hevolisa.cabal
@@ -1,5 +1,5 @@
 Name:		hevolisa
-Version:	0.0
+Version:	0.0.1
 Cabal-Version:	>= 1.2
 License:	BSD3
 License-file:	LICENSE
