diff --git a/MANUAL.txt b/MANUAL.txt
index 7e9f9f85a..dc973f958 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -6596,9 +6596,9 @@ is available by default. To see a sample custom reader:
 
     pandoc --print-default-data-file reader.lua
 
-Reader options are available via the global variable
-`PANDOC_READER_OPTIONS`, as expalined in the [Lua filters
-documentation].
+If you want your custom reader to have access to reader options
+(e.g. the tab stop setting), you give your Reader function a
+second `options` parameter.
 
 A custom writer is a Lua script that defines a function
 that specifies how to render each element in a Pandoc AST.
diff --git a/data/reader.lua b/data/reader.lua
index 5cc2dfc0c..e466e6ea1 100644
--- a/data/reader.lua
+++ b/data/reader.lua
@@ -82,6 +82,6 @@ G = P{ "Pandoc",
   Special = S"`\\" / pandoc.Str;
 }
 
-function Reader(input)
+function Reader(input, opts)
   return lpeg.match(G, input)
 end
diff --git a/src/Text/Pandoc/Readers/Custom.hs b/src/Text/Pandoc/Readers/Custom.hs
index 83d82a9cc..d7336012b 100644
--- a/src/Text/Pandoc/Readers/Custom.hs
+++ b/src/Text/Pandoc/Readers/Custom.hs
@@ -33,9 +33,7 @@ readCustom :: (PandocMonad m, MonadIO m, ToSources s)
             => FilePath -> ReaderOptions -> s -> m Pandoc
 readCustom luaFile opts sources = do
   let input = sourcesToText $ toSources sources
-  let globals = [ PANDOC_SCRIPT_FILE luaFile
-                , PANDOC_READER_OPTIONS opts
-                ]
+  let globals = [ PANDOC_SCRIPT_FILE luaFile ]
   res <- runLua $ do
     setGlobals globals
     stat <- dofileWithTraceback luaFile
@@ -43,13 +41,14 @@ readCustom luaFile opts sources = do
     -- to handle this more gracefully):
     when (stat /= Lua.OK)
       Lua.throwErrorAsException
-    parseCustom input
+    parseCustom input opts
   case res of
     Left msg -> throw msg
     Right doc -> return doc
 
 parseCustom :: forall e. PeekError e
             => Text
+            -> ReaderOptions
             -> LuaE e Pandoc
 parseCustom = invoke @e "Reader"