diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -539,6 +539,15 @@
 
 `pandoc -F pandoc-crossref.hs -M "crossrefYaml=$HOME/misc/pandoc-crossref-es.yaml"`
 
+You can also use global configuration files, which are expected in `$HOME/.pandoc-crossref/config.yaml` and `$HOME/.pandoc-crossref/config-$FORMAT.yaml`, where `$FORMAT` is output format, f.ex. `latex` or `epub`. On Windows, `$HOME` in general resolves to user's root directory, e.g. `C:\Users\username\`.
+
+Priorities are as follows (from highest to lowest):
+
+- document metadata
+- `crossrefYaml`/`$CWD/pandoc-crossref.yaml`
+- `$HOME/.pandoc-crossref/config-$FORMAT.yaml`
+- `$HOME/.pandoc-crossref/config.yaml`
+
 # License
 
 This software is licensed under GNU GPL 2. See [LICENSE.md](https://github.com/lierdakil/pandoc-crossref/blob/master/LICENSE.md) for details.
diff --git a/lib/Text/Pandoc/CrossRef.hs b/lib/Text/Pandoc/CrossRef.hs
--- a/lib/Text/Pandoc/CrossRef.hs
+++ b/lib/Text/Pandoc/CrossRef.hs
@@ -133,7 +133,7 @@
 file specified by crossrefYaml metadata field. -}
 runCrossRefIO :: forall a b. Meta -> Maybe Format -> (a -> CrossRefM b) -> a -> IO b
 runCrossRefIO meta fmt action arg = do
-  settings <- getSettings meta
+  settings <- getSettings fmt meta
   let
     env = CrossRefEnv {
             creSettings = settings
diff --git a/lib/Text/Pandoc/CrossRef/Util/Settings.hs b/lib/Text/Pandoc/CrossRef/Util/Settings.hs
--- a/lib/Text/Pandoc/CrossRef/Util/Settings.hs
+++ b/lib/Text/Pandoc/CrossRef/Util/Settings.hs
@@ -8,14 +8,27 @@
 import Text.Pandoc.CrossRef.Util.Settings.Gen
 import Text.Pandoc.CrossRef.Util.Meta
 import Text.Pandoc.CrossRef.Util.PandocOrphans()
+import System.Directory
+import System.FilePath
 
-getSettings :: Meta -> IO Meta
-getSettings meta = do
-  let handler :: IOException -> IO String
-      handler _ = return []
-  yaml <- handle handler $ readFile (getMetaString "crossrefYaml" (meta <> defaultMeta))
-  let Pandoc dtve _ = readMarkdown def ("---\n" ++ yaml ++ "\n---")
-  return $ meta <> dtve <> defaultMeta
+getSettings :: Maybe Format -> Meta -> IO Meta
+getSettings fmt meta = do
+  dirConfig <- readConfig (getMetaString "crossrefYaml" (meta <> defaultMeta))
+  home <- getHomeDirectory
+  globalConfig <- readConfig (home </> ".pandoc-crossref" </> "config.yaml")
+  formatConfig <- maybe (return nullMeta) (readFmtConfig home) fmt
+  return $ meta <> dirConfig <> formatConfig <> globalConfig <> defaultMeta
+  where
+    readConfig path =
+      handle handler $ do
+        yaml <- readFile path
+        let Pandoc meta' _ = readMarkdown def ("---\n" ++ yaml ++ "\n---")
+        return meta'
+    readFmtConfig home fmt' = readConfig (home </> ".pandoc-crossref" </> "config-" ++ fmtStr fmt' ++ ".yaml")
+    handler :: IOException -> IO Meta
+    handler _ = return nullMeta
+    fmtStr (Format fmtstr) = fmtstr
+
 
 defaultMeta :: Meta
 defaultMeta =
diff --git a/pandoc-crossref.cabal b/pandoc-crossref.cabal
--- a/pandoc-crossref.cabal
+++ b/pandoc-crossref.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                pandoc-crossref
-version:             0.2.4.2
+version:             0.2.5.0
 synopsis:            Pandoc filter for cross-references
 description:         pandoc-crossref is a pandoc filter for numbering figures, equations, tables and cross-references to them.
 license:             GPL-2
@@ -40,7 +40,7 @@
 source-repository this
   type: git
   location: https://github.com/lierdakil/pandoc-crossref
-  tag: v0.2.4.2
+  tag: v0.2.5.0
 
 library
   exposed-modules:     Text.Pandoc.CrossRef
@@ -62,7 +62,7 @@
                        Text.Pandoc.CrossRef.Util.Gap
                        Text.Pandoc.CrossRef.Util.PandocOrphans
   build-depends:       base >=4.8 && <5
-                     , pandoc >= 1.17.1 && <1.19
+                     , pandoc >= 1.17.1 && <1.20
                      , pandoc-types >= 1.16 && < 1.18
                      , mtl >= 1.1 && <2.3
                      , containers >= 0.1 && <0.6
@@ -74,6 +74,8 @@
                      , roman-numerals == 0.5.*
                      , syb >= 0.4 && < 0.7
                      , utility-ht >= 0.0.11 && < 0.1.0
+                     , directory >= 1 && < 1.4
+                     , filepath >= 1.1 && < 1.5
   hs-source-dirs:      lib
   if impl(ghc >= 8.0.1)
     hs-source-dirs:      ghc-8
@@ -114,6 +116,8 @@
                  , template-haskell
                  , utility-ht
                  , data-accessor
+                 , directory
+                 , filepath
                  , data-accessor-transformers
   other-modules:
                 Native
diff --git a/test/test-integrative.hs b/test/test-integrative.hs
--- a/test/test-integrative.hs
+++ b/test/test-integrative.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 import Test.Hspec
 import Text.Pandoc
 import Text.Pandoc.CrossRef
@@ -16,7 +17,11 @@
   | otherwise =
   describe dir $ do
     input <- runIO $ readFile ("test" </> "m2m" </> dir </> "input.md")
+#if MIN_VERSION_pandoc(1,19,0)
+    expect_md <- runIO $ readFile ("test" </> "m2m" </> dir </> "expect-1.19.md")
+#else
     expect_md <- runIO $ readFile ("test" </> "m2m" </> dir </> "expect.md")
+#endif
     expect_tex <- runIO $ readFile ("test" </> "m2m" </> dir </> "expect.tex")
     p@(Pandoc meta _) <- either (fail . show) return $ readMarkdown def input
     let actual_md = writeMarkdown def $ runCrossRef meta (Just $ Format "markdown") defaultCrossRefAction p
