diff --git a/examples/lexpr.pd_lua b/examples/lexpr.pd_lua
index 487c87e28decef0236ef97bf3812a0e18f8d8731..98ee8e1b115a1e78404df0cbe5cf6d6c8453e1ee 100644
--- a/examples/lexpr.pd_lua
+++ b/examples/lexpr.pd_lua
@@ -1,5 +1,24 @@
 local lexpr = pd.Class:new():register("lexpr")
 
+-- AG: Lua 5.2 compatibility (cf. https://stackoverflow.com/a/14554565)
+if not setfenv then -- Lua 5.2
+  -- based on http://lua-users.org/lists/lua-l/2010-06/msg00314.html
+  -- this assumes f is a function
+  local function findenv(f)
+    local level = 1
+    repeat
+      local name, value = debug.getupvalue(f, level)
+      if name == '_ENV' then return level, value end
+      level = level + 1
+    until name == nil
+    return nil end
+  getfenv = function (f) return(select(2, findenv(f)) or _G) end
+  setfenv = function (f, t)
+    local level = findenv(f)
+    if level then debug.setupvalue(f, level, t) end
+    return f end
+end
+
 local function sandbox(e, f) -- only supports nullary f() with one return
   local g = getfenv(f)
   setfenv(f, e)