diff --git a/examples/lexpr.pd_lua b/examples/lexpr.pd_lua
index 98ee8e1b115a1e78404df0cbe5cf6d6c8453e1ee..94c23961b631a4ef0dd8bafc1d591642d93589f2 100644
--- a/examples/lexpr.pd_lua
+++ b/examples/lexpr.pd_lua
@@ -19,6 +19,10 @@ if not setfenv then -- Lua 5.2
     return f end
 end
 
+if not loadstring then -- Lua 5.3
+   loadstring = load
+end
+
 local function sandbox(e, f) -- only supports nullary f() with one return
   local g = getfenv(f)
   setfenv(f, e)
diff --git a/examples/ltabfill.pd_lua b/examples/ltabfill.pd_lua
index 56ef81be4c8ae0623742c553673a781368ae4156..d81c5cb6ded3496878914e7507e701a8fbfa4d6f 100644
--- a/examples/ltabfill.pd_lua
+++ b/examples/ltabfill.pd_lua
@@ -1,5 +1,28 @@
 local ltabfill = pd.Class:new():register("ltabfill")
 
+-- 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
+
+if not loadstring then -- Lua 5.3
+   loadstring = load
+end
+
 local function sandbox(e, f, x) -- only supports unary f() with one return
   local g = getfenv(f)
   setfenv(f, e)