diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua
index 01f58789fa32872c384f89135f554fb6b202f99e..458286f365778e1731d824015b0fe38230d2b4e1 100644
--- a/mesecons_luacontroller/init.lua
+++ b/mesecons_luacontroller/init.lua
@@ -508,10 +508,15 @@ local digiline = {
 		end
 	}
 }
-local function on_receive_fields(pos, form_name, fields)
+local function on_receive_fields(pos, form_name, fields, sender)
 	if not fields.program then
 		return
 	end
+	local name = sender:get_player_name()
+	if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, {protection_bypass=true}) then
+		minetest.record_protection_violation(pos, name)
+		return
+	end
 	reset(pos)
 	reset_meta(pos, fields.code)
 	local err = run(pos, {type="program"})