diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 
 `lua` uses [PVP Versioning][1].
 
+## lua 2.0.2
+
+Released 2021-11-26.
+
+- Make sure lualib.h is available through this package. The header
+  file contains info on how and under which name the standard
+  library is loaded.
+
 ## lua 2.0.1
 
 Released 2021-11-03.
diff --git a/cbits/hslua/hslua.c b/cbits/hslua/hslua.c
--- a/cbits/hslua/hslua.c
+++ b/cbits/hslua/hslua.c
@@ -76,7 +76,11 @@
   lua_pushcfunction(L, hslua__getglobal);
   lua_pushglobaltable(L);
   lua_pushlstring(L, name, len);
-  *status = lua_pcall(L, 2, 1, 0);
+  if (status == NULL) {
+    lua_pcall(L, 2, 1, 0);
+  } else {
+    *status = lua_pcall(L, 2, 1, 0);
+  }
   return lua_type(L, -1);
 }
 
@@ -96,7 +100,11 @@
   lua_pushvalue(L, index);
   lua_pushcfunction(L, hslua__gettable);
   lua_insert(L, -3);
-  *status = lua_pcall(L, 2, 1, 0);
+  if (status == NULL) {
+    lua_pcall(L, 2, 1, 0);
+  } else {
+    *status = lua_pcall(L, 2, 1, 0);
+  }
   return lua_type(L, -1);
 }
 
@@ -121,7 +129,11 @@
   lua_pushlstring(L, name, len);
   lua_pushcfunction(L, hslua__setglobal);
   lua_insert(L, -4);
-  *status = lua_pcall(L, 3, 0, 0);
+  if (status == NULL) {
+    lua_pcall(L, 3, 0, 0);
+  } else {
+    *status = lua_pcall(L, 3, 0, 0);
+  }
 }
 
 
diff --git a/lua.cabal b/lua.cabal
--- a/lua.cabal
+++ b/lua.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                lua
-version:             2.0.1
+version:             2.0.2
 synopsis:            Lua, an embeddable scripting language
 description:         This package provides bindings and types to bridge
                      Haskell and <https://www.lua.org/ Lua>.
@@ -144,6 +144,7 @@
   includes:            lua.h
                      , luaconf.h
                      , lauxlib.h
+                     , lualib.h
   if flag(system-lua) || flag(pkg-config)
     if flag(pkg-config)
       pkgconfig-depends: lua5.3
@@ -154,6 +155,7 @@
     install-includes:    lua.h
                        , luaconf.h
                        , lauxlib.h
+                       , lualib.h
     c-sources:           cbits/lua-5.3.6/lapi.c
                        , cbits/lua-5.3.6/lcode.c
                        , cbits/lua-5.3.6/lctype.c
@@ -207,7 +209,8 @@
   type:                exitcode-stdio-1.0
   main-is:             test-lua.hs
   hs-source-dirs:      test
-  other-modules:       Lua.UnsafeTests
+  other-modules:       Lua.ErsatzTests
+                     , Lua.UnsafeTests
   build-depends:       lua
                      , tasty                >= 0.11
                      , tasty-hunit          >= 0.9
diff --git a/src/Lua/Primary.hs b/src/Lua/Primary.hs
--- a/src/Lua/Primary.hs
+++ b/src/Lua/Primary.hs
@@ -438,7 +438,7 @@
 -- table at the given index (the \"next\" pair after the given key). If
 -- there are no more elements in the table, then
 -- <https://www.lua.org/manual/5.3/manual.html#lua_next lua_next>
--- returns 'FALSE' (and pushes nothing).
+-- returns 'Lua.FALSE' (and pushes nothing).
 --
 -- A typical traversal looks like this:
 --
diff --git a/test/Lua/ErsatzTests.hs b/test/Lua/ErsatzTests.hs
new file mode 100644
--- /dev/null
+++ b/test/Lua/ErsatzTests.hs
@@ -0,0 +1,52 @@
+{-|
+Module      : Lua.ErsatzTests
+Copyright   : © 2021 Albert Krewinkel
+License     : MIT
+Maintainer  : Albert Krewinkel <tarleb+hslua@zeitkraut.de>
+Stability   : beta
+
+Tests for Lua bindings.
+-}
+module Lua.ErsatzTests (tests) where
+
+import Control.Monad (void)
+import Foreign.C.String (withCStringLen)
+import Foreign.Ptr (nullPtr)
+import Lua
+import Test.Tasty (TestTree, testGroup)
+import Test.Tasty.HUnit (Assertion, HasCallStack, testCase, (@=?) )
+
+-- | Tests for unsafe methods.
+tests :: TestTree
+tests = testGroup "ersatz"
+  [ testGroup "global"
+    [ "set and get global field" =: do
+        (42, LUA_TNUMBER) `shouldBeResultOf` \l -> do
+          lua_pushinteger l 42
+          tp <- withCStringLen "ups" $ \(name, nameLen) -> do
+            hslua_setglobal l name (fromIntegral nameLen) nullPtr
+            hslua_getglobal l name (fromIntegral nameLen) nullPtr
+          i  <- lua_tointegerx l top nullPtr
+          return (i, tp)
+
+    , "get value from table" =: do
+        (-23, LUA_TNUMBER) `shouldBeResultOf` \l -> do
+          withCStringLen "return {[5] = -23}" $ \(name, len) -> void $
+            luaL_loadbuffer l name (fromIntegral len) name
+          LUA_OK <- lua_pcall l 0 1 0
+          lua_pushinteger l 5
+          ty <- hslua_gettable l (nth 2) nullPtr
+          i  <- lua_tointegerx l top nullPtr
+          return (i, ty)
+    ]
+  ]
+
+infix  3 =:
+(=:) :: String -> Assertion -> TestTree
+(=:) = testCase
+
+shouldBeResultOf :: (HasCallStack, Eq a, Show a)
+                 => a -> (State -> IO a) -> Assertion
+shouldBeResultOf expected luaOp = do
+  result <- withNewState luaOp
+  expected @=? result
diff --git a/test/test-lua.hs b/test/test-lua.hs
--- a/test/test-lua.hs
+++ b/test/test-lua.hs
@@ -24,6 +24,7 @@
 import Lua
 import Test.Tasty (TestTree, defaultMain, testGroup)
 import Test.Tasty.HUnit (Assertion, HasCallStack, assertBool, testCase, (@=?))
+import qualified Lua.ErsatzTests
 import qualified Lua.UnsafeTests
 
 -- | Runs tests.
@@ -390,6 +391,7 @@
     ]
 
   , Lua.UnsafeTests.tests
+  , Lua.ErsatzTests.tests
   ]
 
 infix  3 =:
