diff --git a/hgettext.cabal b/hgettext.cabal
--- a/hgettext.cabal
+++ b/hgettext.cabal
@@ -1,5 +1,5 @@
 Name:                   hgettext
-Version:                0.1.9
+Version:                0.1.10
 Cabal-Version:          >= 1.6
 
 License:                BSD3
@@ -25,5 +25,6 @@
         Main-Is:                hgettext.hs
         Extensions:             TemplateHaskell
         Hs-Source-Dirs:         src        
-        Build-Depends:          base>=3.0.3.0, uniplate, haskell-src
+        Build-Depends:          base>=3.0.3.0, uniplate, haskell-src-exts
+        Other-Modules:          Paths_hgettext
 
diff --git a/src/hgettext.hs b/src/hgettext.hs
--- a/src/hgettext.hs
+++ b/src/hgettext.hs
@@ -1,6 +1,5 @@
 
-import Language.Haskell.Parser
-import Language.Haskell.Syntax
+import qualified Language.Haskell.Exts as H 
 
 import System.Environment
 import System.Console.GetOpt
@@ -13,9 +12,13 @@
 import Data.Char
 import System.FilePath
 
+import Paths_hgettext (version)
+import Data.Version (showVersion)
+
 data Options = Options {
       outputFile :: String,
-      keyword :: String
+      keyword :: String,
+      printVersion :: Bool
     } deriving Show
 
 options :: [OptDescr (Options->Options)]
@@ -29,11 +32,14 @@
             "use NAME.po instead of messages.po",
      Option ['k'] ["keyword"] 
             (ReqArg (\d opts -> opts {keyword = d}) "WORD")
-            "function name, in which wrapped searched words"
+            "function name, in which wrapped searched words",
+     Option [] ["version"]
+            (NoArg (\opts -> opts {printVersion = True}))
+            "print version of hgettexts"
     ]
 
 
-defaultOptions = Options "messages.po" "__"
+defaultOptions = Options "messages.po" "__" False
 
 parseArgs :: [String] -> IO (Options, [String])
 parseArgs args = 
@@ -43,8 +49,8 @@
     where header = "Usage: hgettext [OPTION] [INPUTFILE] ..."
 
 
-toTranslate :: String -> ParseResult HsModule -> [(Int, String)]
-toTranslate f (ParseOk z) = nub [ (0, s) | HsApp (HsVar (UnQual (HsIdent x))) (HsLit (HsString s)) <- universeBi z, x == f]
+toTranslate :: String -> H.ParseResult H.Module -> [(Int, String)]
+toTranslate f (H.ParseOk z) = nub [ (0, s) | H.App (H.Var (H.UnQual (H.Ident x))) (H.Lit (H.String s)) <- universeBi z, x == f]
 toTranslate _ _ = []
 
 -- Create list of messages from a single file
@@ -77,16 +83,14 @@
                                ""]
 
 process :: Options -> [String] -> IO ()
+process Options{printVersion = True} _ = 
+    putStrLn $ "hgettext, version " ++ (showVersion version)
+
 process opts fl = do
   t <- mapM read' fl
-  writeFile (outputFile opts) $ writePOTFile $ map (\(n,c) -> formatMessages n $ toTranslate (keyword opts) $ parseModule c) t
-    where read' "-" = getContents >>= \c -> return ("-", c)
-          read' s = do 
-                    c <- readFile s
-                    -- test for literate haskell file
-                    if map toLower (takeExtension s) == ".lhs" 
-                       then return (s, either id (\_ -> "") (unlit s c))
-                       else return (s, c)
+  writeFile (outputFile opts) $ writePOTFile $ map (\(n,c) -> formatMessages n $ toTranslate (keyword opts) c) t
+    where read' "-" = getContents >>= \c -> return ("-", H.parseFileContents c)
+          read' f = H.parseFile f >>= \m -> return (f, m)
 
 main = 
     getArgs >>= parseArgs >>= uncurry process
