I think I've found a bug in the C loader/seracher of Lua 5.1: With the current version of require51 found at https://gist.github.com/pygy/7d7d0209767a2d1c593a/f10fdaff5f391b0a6ccfde0a6d52408582176051, if the sentinel is a table, it ends up being populated by the C loader as if it were the module. For eample, requiring lpeg twice triggers the cycle detection code. If the sentinel has another type, the error does not occur. However it is nowhere passed as a parameter to anything... I suppose it is left on the stack and coopted by the loader. —Pierre-Yves