diff --git a/src/Text/Pandoc.hs b/src/Text/Pandoc.hs
index 6a019bc3f..06bfd128f 100644
--- a/src/Text/Pandoc.hs
+++ b/src/Text/Pandoc.hs
@@ -100,6 +100,8 @@ module Text.Pandoc
                -- * Version
                , pandocVersion
                -- * Miscellaneous
+               , getReader
+               , getWriter
                , rtfEmbedImage
                , jsonFilter
                , ToJsonFilter(..)
@@ -222,6 +224,35 @@ writers = [
   ,("asciidoc"     , PureStringWriter writeAsciiDoc)
   ]
 
+getReader :: String -> Either String (ReaderOptions -> String -> Pandoc)
+getReader s =
+  case parseFormatSpec s of
+       Left e  -> Left $ show e
+       Right (readerName, setExts) ->
+           case lookup readerName readers of
+                   Nothing  -> Left $ "Unknown reader: " ++ readerName
+                   Just  r  -> Right $ \o ->
+                                  r o{ readerExtensions = setExts $
+                                            readerExtensions o }
+
+-- | Retrieve writer based on formatSpec (format+extensions).
+getWriter :: String -> Either String Writer
+getWriter s =
+  case parseFormatSpec s of
+       Left e  -> Left $ show e
+       Right (writerName, setExts) ->
+           case lookup writerName writers of
+                   Nothing  -> Left $ "Unknown writer: " ++ writerName
+                   Just (PureStringWriter r) -> Right $ PureStringWriter $
+                           \o -> r o{ writerExtensions = setExts $
+                                            writerExtensions o }
+                   Just (IOStringWriter r) -> Right $ IOStringWriter $
+                           \o -> r o{ writerExtensions = setExts $
+                                            writerExtensions o }
+                   Just (IOByteStringWriter r) -> Right $ IOByteStringWriter $
+                           \o -> r o{ writerExtensions = setExts $
+                                            writerExtensions o }
+
 {-# DEPRECATED jsonFilter "Use toJsonFilter instead" #-}
 -- | Converts a transformation on the Pandoc AST into a function
 -- that reads and writes a JSON-encoded string.  This is useful