diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -1,7 +1,6 @@
 module Main where
 import Text.Mustache
 import qualified Text.Show.Pretty as Pr
-import System.Environment
 import Data.Aeson
 import qualified Data.Text.Lazy.IO as TL
 import qualified Data.ByteString.Lazy.Char8 as BL
@@ -10,28 +9,33 @@
 import Data.Maybe
 import qualified Text.Show.Pretty as Pr
 import Options.Applicative
+import System.Directory
 
-data Options = Options Bool FilePath deriving (Show)
+data Options = Options Bool (Maybe FilePath) FilePath deriving (Show)
 
 parseOpts :: Parser Options
 parseOpts = Options 
     <$> (flag False True (short 'c' <> help "Just output parse tree of template file"))
-    <*> (argument str (metavar "FILE"))
+    <*> (Just <$> (strOption (short 'd' <> metavar "TEMPLATE_DIRECTORY" <> help "Template directory")) <|> pure Nothing)
+    <*> (argument str (metavar "TEMPLATE_FILE"))
 
 opts = info 
           (helper <*> parseOpts)
           (fullDesc 
             <> progDesc "A Haskell implementation of Mustache templates.\nOn STDIN provide the JSON to insert into the template."
-            <> header "mus v0.1.0.1")
+            <> header "mus v0.1.0.2")
 
 main = do
     opts' <- execParser opts 
     case opts' of
-      Options True file -> do
+      Options _ (Just dir) _ -> setCurrentDirectory dir
+      _ -> return ()
+    case opts' of
+      Options True _ file -> do
         s <- readFile file
         xs <- readTemplate s
         putStrLn $ Pr.ppShow xs
-      Options False file -> do
+      Options False _ file -> do
         s <- readFile file
         chunks <- readTemplate s
         input <- BL.getContents
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -31,15 +31,16 @@
 ```
 
 ```
-mus v0.1.0.0
+mus v0.1.0.2
 
-Usage: mus [-c] FILE
+Usage: mus [-c] [-d TEMPLATE_DIRECTORY] TEMPLATE_FILE
   A Haskell implementation of Mustache templates. On STDIN provide the JSON to
   insert into the template.
 
 Available options:
   -h,--help                Show this help text
   -c                       Just output parse tree of template file
+  -d TEMPLATE_DIRECTORY    Template directory
 ```
 
 ## List separator syntax
diff --git a/Text/Mustache/Parse.hs b/Text/Mustache/Parse.hs
--- a/Text/Mustache/Parse.hs
+++ b/Text/Mustache/Parse.hs
@@ -29,12 +29,17 @@
 
 loadPartial :: Chunk -> IO [Chunk]
 loadPartial (Partial path) = do
-      e <- doesFileExist path
-      if e 
-      then do
-        s <- readFile path
-        return $ runParse s 
-      else error $ "Partial file missing: " ++ path
+  file <- do e <- doesFileExist path
+             if e 
+             then return path
+             else do
+               let path' = path ++ ".mustache"
+               e' <- doesFileExist path'
+               if e'
+               then return path'
+               else error $ "Partial file missing: " ++ path
+  s <- readFile file
+  return $ runParse s 
 loadPartial (Section k cs sep) = do
       cs' <- mapM loadPartial cs
       return [Section k (concat cs') sep]
diff --git a/mustache-haskell.cabal b/mustache-haskell.cabal
--- a/mustache-haskell.cabal
+++ b/mustache-haskell.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                mustache-haskell 
-version:             0.1.0.1
+version:             0.1.0.2
 synopsis:            Straight implementation of mustache templates
 description:         Straight implementation of mustache templates 
 homepage:            https://github.com/danchoi/mustache-haskell
