diff --git a/gettext-th.cabal b/gettext-th.cabal
--- a/gettext-th.cabal
+++ b/gettext-th.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               gettext-th
-version:            0.2.0.0
+version:            0.2.0.1
 
 synopsis: gettext-th can internationalise a haskell program without runtime dependencies
 
@@ -40,4 +40,4 @@
     hs-source-dirs:   src
     default-language: Haskell2010
     ghc-options: -Wall -fwarn-tabs 
-    default-extensions: TemplateHaskell, TupleSections, DeriveLift, RecordWildCards, QuasiQuotes, OverloadedStrings, FlexibleContexts
+    default-extensions: TemplateHaskell, TupleSections, DeriveLift, RecordWildCards, QuasiQuotes, OverloadedStrings, FlexibleContexts, ScopedTypeVariables
diff --git a/src/I18N/Gettext/TH.hs b/src/I18N/Gettext/TH.hs
--- a/src/I18N/Gettext/TH.hs
+++ b/src/I18N/Gettext/TH.hs
@@ -17,7 +17,10 @@
 import Data.Set (Set)
 import qualified Data.Set as S
 
+--import Control.Exception (catch, IOException)
+
 import qualified Data.ByteString as B
+import Data.Text (Text)
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as TL
 import Data.Text.Encoding (encodeUtf8)
@@ -42,8 +45,11 @@
 moFileName = replaceExtension potFileName ".mo"
 
 {-# NOINLINE catalog #-}
-catalog :: Catalog
-catalog = unsafePerformIO $ loadCatalog moFileName
+catalog :: Maybe Catalog
+catalog = unsafePerformIO $ do
+  fe <- doesFileExist moFileName
+  if fe then Just <$> loadCatalog moFileName
+   else return Nothing
 
 
 header :: String
@@ -86,13 +92,19 @@
         renameFile potFileName (potFileName ++ ".bak")
 
       writeFileUtf8 potFileName WriteMode header
-      makeAbsolute moFileName
-  addDependentFile fn
+      moE <- doesFileExist moFileName
+      if moE then makeAbsolute moFileName
+        else return ""
+  when (not $ null fn) $ addDependentFile fn
 
 
 packStr :: String -> B.ByteString
 packStr = encodeUtf8 . T.pack
 
+lookupText :: String -> Text
+lookupText str = maybe (T.pack str) (\ c -> TL.toStrict $ G.gettext c $ packStr str) catalog
+  
+
 gettextQ  :: String -> Q Exp
 gettextQ str = do
   kmsgs <- runIO $ do
@@ -104,7 +116,7 @@
   when (str `S.notMember` kmsgs) $ do
     loc <- location
     runIO $ writeFileUtf8 potFileName AppendMode $ unlines $ poEntry loc str
-  let trans = TL.toStrict $ G.gettext catalog (packStr str)
+  let trans =  lookupText str
   [| trans |]
 
 quote :: String -> String
@@ -137,7 +149,7 @@
   runIO $ writeFileUtf8 potFileName AppendMode $ unlines $ concat [ poEntry loc msg | (_, msg) <- msgs, msg `S.notMember` kmsgs ]    
 
   forM msgs $ \ (key, msg) ->
-              let trans = TL.toStrict $ G.gettext catalog (packStr msg) in do
+              let trans = lookupText msg in do
                  funD (mkName key) [clause [] (normalB [| trans |]) []]
                  
 
