diff --git a/Nasal/io.nas b/Nasal/io.nas
index c188eb749..2ea7f840a 100644
--- a/Nasal/io.nas
+++ b/Nasal/io.nas
@@ -210,7 +210,7 @@ var writexml = func(path, node, indent = "\t", prefix = "___") {
 # Redefine io.open() such that files can only be opened under authorized directories.
 #
 _setlistener("/sim/signals/nasal-dir-initialized", func {
-    var self = thisfunc();
+    var thislistener = thisfunc();
     var root = string.fixpath(getprop("/sim/fg-root"));
     var home = string.fixpath(getprop("/sim/fg-home"));
     var config = "Nasal/IOrules";
@@ -267,6 +267,7 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
     var fixpath = string.fixpath;  # safe copies
     var match = string.match;
     var die = die;
+    var caller = caller;
 
     var valid = func(path, rules) {
         var fpath = fixpath(path);
@@ -291,7 +292,7 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
 
     var _closure = globals.closure;
     globals.closure = func(fn, level = 0) {
-        if(fn != self and fn != thisfunc() and fn != io_open)
+        if(fn != thislistener and fn != caller(0)[1] and fn != io_open)
             return _closure(fn, level);
 
         die("closure(): query denied (unauthorized access)\n ");
diff --git a/Nasal/string.nas b/Nasal/string.nas
index f1569217b..03424b2cb 100644
--- a/Nasal/string.nas
+++ b/Nasal/string.nas
@@ -140,7 +140,7 @@ match = func(str, patt) {
 				return 1;
 
 			for (; s < size(str); s += 1)
-				if (thisfunc()(substr(str, s), substr(patt, p)))
+				if (caller(0)[1](substr(str, s), substr(patt, p)))
 					return 1;
 			continue;