diff --git a/Nasal/debug.nas b/Nasal/debug.nas
index dd707fae2..dbb730ffe 100644
--- a/Nasal/debug.nas
+++ b/Nasal/debug.nas
@@ -46,7 +46,7 @@
 #       set property /sim/startup/terminal-ansi-colors=0
 #
 
-# for color codes see  $ man console_codes
+# ANSI color code wrappers  (see  $ man console_codes)
 #
 var _title       = func(s) globals.string.color("33;42;1", s); # backtrace header
 var _section     = func(s) globals.string.color("37;41;1", s); # backtrace frame
@@ -315,6 +315,38 @@ var printerror = func(err) {
 }
 
 
+var error = func(msg, level = 2) {
+	var c = caller(level);
+	print(msg, ":\n  at ", c[2], ", line ", c[3]);
+	while ((c = caller(level += 1)) != nil)
+		print("  called from: ", c[2], ", line ", c[3]);
+}
+
+
 var isnan = (func { var nan = 1 / 0; func(d) num(d) == nil ? nil : d == nan; })();
 
 
+
+# --prop:debug=1 enables debug mode with additional warnings
+#
+_setlistener("sim/signals/nasal-dir-initialized", func {
+	if (!getprop("debug"))
+		return;
+	var warn = func(f, p, r) {
+		if (!r)
+			error("Warning: " ~ f ~ " -> writing to " ~ p ~ " failed", 3);
+		return r;
+	}
+	setprop = (func { var _ = setprop; func warn("setprop",
+			globals.string.join("", arg[:-1]), call(_, arg)) })();
+	props.Node.setDoubleValue = func warn("setDoubleValue",
+			me.getPath(), props._setDoubleValue(me._g, arg));
+	props.Node.setBoolValue = func warn("setBoolValue",
+			me.getPath(), props._setBoolValue(me._g, arg));
+	props.Node.setIntValue = func warn("setIntValue",
+			me.getPath(), props._setIntValue(me._g, arg));
+	props.Node.setValue = func warn("setValue",
+			me.getPath(), props._setValue(me._g, arg));
+});
+
+