diff --git a/README.md b/README.md
index 0b926c40b477736b21e4803ff97ba2ae1bd1483b..80cf1856301116acd816775d5ebb20a9c7624335 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ Go get it!
 
 [DOWNLOAD IT NOW](https://github.com/minetest-mods/mesecons/archive/master.zip)
 
-Now go ahead and install it like any other Minetest mod. Don't know how? Check out [the wonderful page about it](http://wiki.minetest.com/wiki/Mods) over at the Minetest Wiki. For your convenience, here's a quick summary:
+Now go ahead and install it like any other Minetest mod. Don't know how? Check out [the wonderful page about it](https://wiki.minetest.net/Mods) over at the official Minetest Wiki. For your convenience, here's a quick summary:
 
 1. If Mesecons is still in a ZIP file, extract the folder inside to somewhere on the computer.
 2. Make sure that when you open the folder, you can directly find `README.md` in the listing. If you just see another folder, move that folder up one level and delete the old one.
@@ -43,6 +43,8 @@ Or maybe a [comprehensive reference](http://mesecons.net/items.html) is your sty
 
 An overview for the very newest of new beginners? How does [this one](http://uberi.mesecons.net/projects/MeseconsBasics/index.html) look?
 
+There is also a [wiki page](https://wiki.minetest.net/Mods/Mesecons) dedicated to this mod.
+
 Want to get more into building? Why not check out the [Mesecons Laboratory](http://uberi.mesecons.net/), a website dedicated to advanced Mesecons builders?
 
 Want to contribute to Mesecons itself? Check out the [source code](https://github.com/minetest-mods/mesecons)!
diff --git a/mesecons/oldwires.lua b/mesecons/oldwires.lua
index 43bf3025a40a732e83c443767bcd7d2de2ad6fb1..8d6c6b1f87e4477241f0082d262b5da073fb6226 100644
--- a/mesecons/oldwires.lua
+++ b/mesecons/oldwires.lua
@@ -30,7 +30,7 @@ minetest.register_node("mesecons:mesecon_on", {
 	},
 	groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1},
 	drop = "mesecons:mesecon_off 1",
-	light_source = default.LIGHT_MAX-11,
+	light_source = minetest.LIGHT_MAX-11,
 	mesecons = {conductor={
 		state = mesecon.state.on,
 		offstate = "mesecons:mesecon_off"
diff --git a/mesecons/settings.lua b/mesecons/settings.lua
index 1ebbfde4004ad78f192655f5b2f58f1e296167e6..02207073c524c54a735d8a09db52a0291cbed96b 100644
--- a/mesecons/settings.lua
+++ b/mesecons/settings.lua
@@ -1,15 +1,15 @@
 -- SETTINGS
 function mesecon.setting(setting, default)
 	if type(default) == "boolean" then
-		local read = minetest.setting_getbool("mesecon."..setting)
+		local read = minetest.settings:get_bool("mesecon."..setting)
 		if read == nil then
 			return default
 		else
 			return read
 		end
 	elseif type(default) == "string" then
-		return minetest.setting_get("mesecon."..setting) or default
+		return minetest.settings:get("mesecon."..setting) or default
 	elseif type(default) == "number" then
-		return tonumber(minetest.setting_get("mesecon."..setting) or default)
+		return tonumber(minetest.settings:get("mesecon."..setting) or default)
 	end
 end
diff --git a/mesecons_button/init.lua b/mesecons_button/init.lua
index 104fc5bb6a027b2319ab0819faef21caca721019..8764fbc7a49758da5668e89f1943ee72bdbe5603 100644
--- a/mesecons_button/init.lua
+++ b/mesecons_button/init.lua
@@ -73,7 +73,7 @@ minetest.register_node("mesecons_button:button_on", {
 	legacy_wallmounted = true,
 	walkable = false,
 	on_rotate = false,
-	light_source = default.LIGHT_MAX-7,
+	light_source = minetest.LIGHT_MAX-7,
 	sunlight_propagates = true,
 	selection_box = {
 		type = "fixed",
diff --git a/mesecons_delayer/init.lua b/mesecons_delayer/init.lua
index 0cbfd42c035fa5d2e56fbbcadc7a6ebf3023e25f..94450db820053fa6f141e25e12bba4c74796e500 100644
--- a/mesecons_delayer/init.lua
+++ b/mesecons_delayer/init.lua
@@ -158,6 +158,7 @@ minetest.register_node("mesecons_delayer:delayer_on_"..tostring(i), {
 	end,
 	delayer_time = delaytime,
 	delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i),
+	sounds = default.node_sound_stone_defaults(),
 	mesecons = {
 		receptor =
 		{
diff --git a/mesecons_extrawires/corner.lua b/mesecons_extrawires/corner.lua
index 8dc98667d4963f3ba951440061d018d0210f88ae..d33447a776e7169d08a2f5515dd6732c1503a306 100644
--- a/mesecons_extrawires/corner.lua
+++ b/mesecons_extrawires/corner.lua
@@ -2,13 +2,14 @@ local screwdriver_exists = minetest.global_exists("screwdriver")
 
 local corner_nodebox = {
 	type = "fixed",
+	-- ±0.001 is to prevent z-fighting
 	fixed = {{ -16/32-0.001, -17/32, -3/32, 0, -13/32, 3/32 },
 		   { -3/32, -17/32, -16/32+0.001, 3/32, -13/32, 3/32}}
 }
 
 local corner_selectionbox = {
 		type = "fixed",
-		fixed = { -16/32-0.001, -18/32, -16/32, 5/32, -12/32, 5/32 },
+		fixed = { -16/32, -16/32, -16/32, 5/32, -12/32, 5/32 },
 }
 
 local corner_get_rules = function (node)
@@ -42,6 +43,7 @@ minetest.register_node("mesecons_extrawires:corner_on", {
 	node_box = corner_nodebox,
 	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 	drop = "mesecons_extrawires:corner_off",
+	sounds = default.node_sound_defaults(),
 	mesecons = {conductor =
 	{
 		state = mesecon.state.on,
@@ -71,6 +73,7 @@ minetest.register_node("mesecons_extrawires:corner_off", {
 	selection_box = corner_selectionbox,
 	node_box = corner_nodebox,
 	groups = {dig_immediate = 3},
+	sounds = default.node_sound_defaults(),
 	mesecons = {conductor =
 	{
 		state = mesecon.state.off,
diff --git a/mesecons_extrawires/crossover.lua b/mesecons_extrawires/crossover.lua
index 4aefbbcec50fe220dc4cb1f768b867dc8249e5f8..2656d6129e72f923a7d023e54b4a09444db83e1b 100644
--- a/mesecons_extrawires/crossover.lua
+++ b/mesecons_extrawires/crossover.lua
@@ -32,8 +32,9 @@ minetest.register_node("mesecons_extrawires:crossover_off", {
 	is_ground_content = false,
 	walkable = false,
 	stack_max = 99,
-	selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
+	selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
 	groups = {dig_immediate=3, mesecon=3},
+	sounds = default.node_sound_defaults(),
 	mesecons = {
 		conductor = {
 			states = crossover_states,
@@ -58,8 +59,9 @@ minetest.register_node("mesecons_extrawires:crossover_01", {
 	is_ground_content = false,
 	walkable = false,
 	stack_max = 99,
-	selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
+	selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
 	groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
+	sounds = default.node_sound_defaults(),
 	mesecons = {
 		conductor = {
 			states = crossover_states,
@@ -84,8 +86,9 @@ minetest.register_node("mesecons_extrawires:crossover_10", {
 	is_ground_content = false,
 	walkable = false,
 	stack_max = 99,
-	selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
+	selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
 	groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
+	sounds = default.node_sound_defaults(),
 	mesecons = {
 		conductor = {
 			states = crossover_states,
@@ -110,8 +113,9 @@ minetest.register_node("mesecons_extrawires:crossover_on", {
 	is_ground_content = false,
 	walkable = false,
 	stack_max = 99,
-	selection_box = {type="fixed", fixed={-16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001}},
+	selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}},
 	groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
+	sounds = default.node_sound_defaults(),
 	mesecons = {
 		conductor = {
 			states = crossover_states,
diff --git a/mesecons_extrawires/tjunction.lua b/mesecons_extrawires/tjunction.lua
index 53a69f6709aede8ae39ab38c8e71a3972fe4d7b4..77c42906777882ff3b973d90c6562538bc8dbeba 100644
--- a/mesecons_extrawires/tjunction.lua
+++ b/mesecons_extrawires/tjunction.lua
@@ -2,13 +2,14 @@ local screwdriver_exists = minetest.global_exists("screwdriver")
 
 local tjunction_nodebox = {
 	type = "fixed",
+	-- ±0.001 is to prevent z-fighting
 	fixed = {{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 },
 		 { -3/32, -17/32, -16/32+0.001, 3/32, -13/32, -3/32},}
 }
 
 local tjunction_selectionbox = {
 		type = "fixed",
-		fixed = { -16/32-0.001, -18/32, -16/32, 16/32+0.001, -12/32, 7/32 },
+		fixed = { -16/32, -16/32, -16/32, 16/32, -12/32, 7/32 },
 }
 
 local tjunction_get_rules = function (node)
@@ -43,6 +44,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", {
 	node_box = tjunction_nodebox,
 	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 	drop = "mesecons_extrawires:tjunction_off",
+	sounds = default.node_sound_defaults(),
 	mesecons = {conductor =
 	{
 		state = mesecon.state.on,
@@ -72,6 +74,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
 	selection_box = tjunction_selectionbox,
 	node_box = tjunction_nodebox,
 	groups = {dig_immediate = 3},
+	sounds = default.node_sound_defaults(),
 	mesecons = {conductor =
 	{
 		state = mesecon.state.off,
diff --git a/mesecons_extrawires/vertical.lua b/mesecons_extrawires/vertical.lua
index 1cff013d29d9c75e6c12b08cbed96504a1ec34eb..1543194ea4422c82390b7d2455e567151c0fb451 100644
--- a/mesecons_extrawires/vertical.lua
+++ b/mesecons_extrawires/vertical.lua
@@ -88,7 +88,8 @@ mesecon.register_node("mesecons_extrawires:vertical", {
 	is_vertical_conductor = true,
 	drop = "mesecons_extrawires:vertical_off",
 	after_place_node = vertical_update,
-	after_dig_node = vertical_update
+	after_dig_node = vertical_update,
+	sounds = default.node_sound_defaults(),
 },{
 	tiles = {"mesecons_wire_off.png"},
 	groups = {dig_immediate=3},
@@ -121,7 +122,8 @@ mesecon.register_node("mesecons_extrawires:vertical_top", {
 	is_vertical_conductor = true,
 	drop = "mesecons_extrawires:vertical_off",
 	after_place_node = vertical_update,
-	after_dig_node = vertical_update
+	after_dig_node = vertical_update,
+	sounds = default.node_sound_defaults(),
 },{
 	tiles = {"mesecons_wire_off.png"},
 	mesecons = {conductor = {
@@ -152,7 +154,8 @@ mesecon.register_node("mesecons_extrawires:vertical_bottom", {
 	is_vertical_conductor = true,
 	drop = "mesecons_extrawires:vertical_off",
 	after_place_node = vertical_update,
-	after_dig_node = vertical_update
+	after_dig_node = vertical_update,
+	sounds = default.node_sound_defaults(),
 },{
 	tiles = {"mesecons_wire_off.png"},
 	mesecons = {conductor = {
diff --git a/mesecons_hydroturbine/init.lua b/mesecons_hydroturbine/init.lua
index 395b8f6e2dc303a921a2f4a0415a4d5d2018285a..afa21e97479acf89fcead2c32f06e7275b65a6b4 100644
--- a/mesecons_hydroturbine/init.lua
+++ b/mesecons_hydroturbine/init.lua
@@ -22,7 +22,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", {
 		type = "fixed",
 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 },
 	},
-	sounds = default.node_sound_stone_defaults(),
+	sounds = default.node_sound_metal_defaults(),
 	mesecons = {receptor = {
 		state = mesecon.state.off
 	}},
@@ -51,7 +51,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", {
 		type = "fixed",
 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 },
 	},
-	sounds = default.node_sound_stone_defaults(),
+	sounds = default.node_sound_metal_defaults(),
 	mesecons = {receptor = {
 		state = mesecon.state.on
 	}},
diff --git a/mesecons_insulated/init.lua b/mesecons_insulated/init.lua
index 92ff639da4945ad41cd73a972f2018e05f3ac089..ca55b9ab6bd990072cc389728141e7df04323ab6 100644
--- a/mesecons_insulated/init.lua
+++ b/mesecons_insulated/init.lua
@@ -27,14 +27,16 @@ minetest.register_node("mesecons_insulated:insulated_on", {
 	sunlight_propagates = true,
 	selection_box = {
 		type = "fixed",
-		fixed = { -16/32-0.001, -18/32, -7/32, 16/32+0.001, -12/32, 7/32 }
+		fixed = { -16/32, -16/32, -7/32, 16/32, -12/32, 7/32 }
 	},
 	node_box = {
 		type = "fixed",
+		-- ±0.001 is to prevent z-fighting
 		fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }
 	},
 	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 	drop = "mesecons_insulated:insulated_off",
+	sounds = default.node_sound_defaults(),
 	mesecons = {conductor = {
 		state = mesecon.state.on,
 		offstate = "mesecons_insulated:insulated_off",
@@ -62,13 +64,15 @@ minetest.register_node("mesecons_insulated:insulated_off", {
 	sunlight_propagates = true,
 	selection_box = {
 		type = "fixed",
-		fixed = { -16/32-0.001, -18/32, -7/32, 16/32+0.001, -12/32, 7/32 }
+		fixed = { -16/32, -16/32, -7/32, 16/32, -12/32, 7/32 }
 	},
 	node_box = {
 		type = "fixed",
+		-- ±0.001 is to prevent z-fighting
 		fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }
 	},
 	groups = {dig_immediate = 3},
+	sounds = default.node_sound_defaults(),
 	mesecons = {conductor = {
 		state = mesecon.state.off,
 		onstate = "mesecons_insulated:insulated_on",
diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua
index 325e16fcf96ab202dd2492adb55fdda42d8c3e9e..e91d460c230b00f5bc0cc8f11c1abd0f7a1c2a92 100644
--- a/mesecons_luacontroller/init.lua
+++ b/mesecons_luacontroller/init.lua
@@ -198,7 +198,11 @@ end
 -------------------------
 
 local function safe_print(param)
+	local string_meta = getmetatable("")
+	local sandbox = string_meta.__index
+	string_meta.__index = string -- Leave string sandbox temporarily
 	print(dump(param))
+	string_meta.__index = sandbox -- Restore string sandbox
 end
 
 local function safe_date()
@@ -548,6 +552,7 @@ local function save_memory(pos, meta, mem)
 
 	if (#memstring <= memsize_max) then
 		meta:set_string("lc_memory", memstring)
+		meta:mark_as_private("lc_memory")
 	else
 		print("Error: Luacontroller memory overflow. "..memsize_max.." bytes available, "
 				..#memstring.." required. Controller overheats.")
@@ -611,6 +616,7 @@ end
 
 local function reset_formspec(meta, code, errmsg)
 	meta:set_string("code", code)
+	meta:mark_as_private("code")
 	code = minetest.formspec_escape(code or "")
 	errmsg = minetest.formspec_escape(tostring(errmsg or ""))
 	meta:set_string("formspec", "size[12,10]"..
@@ -718,7 +724,7 @@ local function on_receive_fields(pos, form_name, fields, sender)
 	local ok, err = set_program(pos, fields.code)
 	if not ok then
 		-- it's not an error from the server perspective
-		minetest.log("action", "Lua controller programming error: " .. err)
+		minetest.log("action", "Lua controller programming error: " .. tostring(err))
 	end
 end
 
diff --git a/mesecons_microcontroller/init.lua b/mesecons_microcontroller/init.lua
index 46272b99ca819efc7604b6e5704e4a9de68dd5d7..9b1bf3b7edabbb0f2c4bc08667e70d59d2ee69ae 100644
--- a/mesecons_microcontroller/init.lua
+++ b/mesecons_microcontroller/init.lua
@@ -103,6 +103,12 @@ minetest.register_node(nodename, {
 		meta:set_string("eeprom", r)
 	end,
 	on_receive_fields = function(pos, formanme, fields, sender)
+		local player_name = sender:get_player_name()
+		if minetest.is_protected(pos, player_name) and
+				not minetest.check_player_privs(player_name, {protection_bypass=true}) then
+			minetest.record_protection_violation(pos, player_name)
+			return
+		end
 		local meta = minetest.get_meta(pos)
 		if fields.band then
 			fields.code = "sbi(C, A&B) :A and B are inputs, C is output"
@@ -272,7 +278,7 @@ yc.parsecode = function(code, pos)
 end
 
 yc.parse_get_command = function(code, starti)
-	i = starti
+	local i = starti
 	local s
 	while s ~= "" do
 		s = string.sub(code, i, i)
@@ -298,7 +304,7 @@ yc.parse_get_command = function(code, starti)
 end
 
 yc.parse_get_params = function(code, starti)
-	i = starti
+	local i = starti
 	local s
 	local params = {}
 	local is_string = false
@@ -321,7 +327,7 @@ yc.parse_get_params = function(code, starti)
 end
 
 yc.parse_get_eeprom_param = function(cond, starti)
-	i = starti
+	local i = starti
 	local s
 	local addr
 	while s ~= "" do
@@ -488,7 +494,7 @@ end
 
 --Condition parsing
 yc.command_if_getcondition = function(code, starti)
-	i = starti
+	local i = starti
 	local s
 	local brackets = 1 --1 Bracket to close
 	while s ~= "" do
diff --git a/mesecons_movestones/init.lua b/mesecons_movestones/init.lua
index 76fd3cd35b7351857676c1084b86dbc61fa69d43..cd8229405398cb8a34c159ce75209799d1985f75 100644
--- a/mesecons_movestones/init.lua
+++ b/mesecons_movestones/init.lua
@@ -60,14 +60,16 @@ function mesecon.register_movestone(name, def, is_sticky, is_vertical)
 		minetest.get_node_timer(frontpos):start(timer_interval)
 
 		-- ### Step 3: If sticky, pull stack behind ###
-		if not is_sticky then
-			return
-		end
-		local backpos = vector.subtract(pos, direction)
-		success, stack, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull)
-		if success then
-			mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1)
+		if is_sticky then
+			local backpos = vector.subtract(pos, direction)
+			success, stack, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull)
+			if success then
+				mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1)
+			end
 		end
+
+		-- ### Step 4: Let things fall ###
+		minetest.check_for_falling(vector.add(pos, {x=0, y=1, z=0}))
 	end
 
 	def.is_ground_content = false
@@ -141,12 +143,12 @@ mesecon.register_movestone("mesecons_movestones:movestone_vertical", {
 
 mesecon.register_movestone("mesecons_movestones:sticky_movestone_vertical", {
 	tiles = {
-		"jeija_movestone_side.png",
-		"jeija_movestone_side.png",
-		"jeija_sticky_movestone.png^[transformFXR90",
-		"jeija_sticky_movestone.png^[transformR90",
-		"jeija_sticky_movestone.png^[transformFXR90",
-		"jeija_sticky_movestone.png^[transformR90",
+		"jeija_movestone_side.png^(mesecons_glue.png^[opacity:127)",
+		"jeija_movestone_side.png^(mesecons_glue.png^[opacity:127)",
+		"jeija_movestone_arrows.png^[transformFXR90",
+		"jeija_movestone_arrows.png^[transformR90",
+		"jeija_movestone_arrows.png^[transformFXR90",
+		"jeija_movestone_arrows.png^[transformR90",
 	},
 	groups = {cracky = 3},
     description = "Vertical Sticky Movestone",
diff --git a/mesecons_noteblock/init.lua b/mesecons_noteblock/init.lua
index 9fa59eaf7d9072a9f4f0a027e03d3d2b20c7ff28..22755ef28f485f771732f970cdc2ce39c542ece5 100644
--- a/mesecons_noteblock/init.lua
+++ b/mesecons_noteblock/init.lua
@@ -45,7 +45,7 @@ local soundnames = {
 local node_sounds = {
 	["default:glass"] = "mesecons_noteblock_hihat",
 	["default:stone"] = "mesecons_noteblock_kick",
-	["default:lava_source"] = "fire_large",
+	["default:lava_source"] = "fire_fire",
 	["default:chest"] = "mesecons_noteblock_snare",
 	["default:tree"] = "mesecons_noteblock_crash",
 	["default:wood"] = "mesecons_noteblock_litecrash",
diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua
index e10b604c055ba2a92288560e65658e80be1d23b9..386cffa252f064a8f0bbd5210a99f984073cfc37 100644
--- a/mesecons_pistons/init.lua
+++ b/mesecons_pistons/init.lua
@@ -326,6 +326,7 @@ minetest.register_node("mesecons_pistons:piston_pusher_normal", {
 	node_box = piston_pusher_box,
 	on_rotate = piston_rotate_pusher,
 	drop = "",
+	sounds = default.node_sound_wood_defaults(),
 })
 
 -- Sticky ones
@@ -403,6 +404,7 @@ minetest.register_node("mesecons_pistons:piston_pusher_sticky", {
 	node_box = piston_pusher_box,
 	on_rotate = piston_rotate_pusher,
 	drop = "",
+	sounds = default.node_sound_wood_defaults(),
 })
 
 
diff --git a/mesecons_powerplant/init.lua b/mesecons_powerplant/init.lua
index 28cad2590c0cd1c9d727f4949edee69bc7ba5784..356fb12ad57ed5173e835ac285f807ce2d2819c2 100644
--- a/mesecons_powerplant/init.lua
+++ b/mesecons_powerplant/init.lua
@@ -10,7 +10,7 @@ minetest.register_node("mesecons_powerplant:power_plant", {
 	is_ground_content = false,
 	walkable = false,
 	groups = {dig_immediate=3, mesecon = 2},
-	light_source = default.LIGHT_MAX-9,
+	light_source = minetest.LIGHT_MAX-9,
     	description="Power Plant",
 	selection_box = {
 		type = "fixed",
diff --git a/mesecons_pressureplates/init.lua b/mesecons_pressureplates/init.lua
index b44736a82ffdcf814b0e7ad31af2081df7e99cf2..f5411e84a01e6a66e49afbfc5061ce81b8599a39 100644
--- a/mesecons_pressureplates/init.lua
+++ b/mesecons_pressureplates/init.lua
@@ -42,8 +42,18 @@ end
 -- tiles_on:	textures of the pressure plate when active
 -- image:	inventory and wield image of the pressure plate
 -- recipe:	crafting recipe of the pressure plate
+-- groups:	groups
+-- sounds:	sound table
+
+function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe, groups, sounds)
+	local groups_off, groups_on
+	if not groups then
+		groups = {}
+	end
+	local groups_off = table.copy(groups)
+	local groups_on = table.copy(groups)
+	groups_on.not_in_creative_inventory = 1
 
-function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe)
 	mesecon.register_node(basename, {
 		drawtype = "nodebox",
 		inventory_image = image_i,
@@ -56,17 +66,18 @@ function mesecon.register_pressure_plate(basename, description, textures_off, te
 		on_construct = function(pos)
 			minetest.get_node_timer(pos):start(mesecon.setting("pplate_interval", 0.1))
 		end,
+		sounds = sounds,
 	},{
 		mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.pplate }},
 		node_box = pp_box_off,
 		selection_box = pp_box_off,
-		groups = {snappy = 2, oddly_breakable_by_hand = 3},
+		groups = groups_off,
 		tiles = textures_off
 	},{
 		mesecons = {receptor = { state = mesecon.state.on, rules = mesecon.rules.pplate }},
 		node_box = pp_box_on,
 		selection_box = pp_box_on,
-		groups = {snappy = 2, oddly_breakable_by_hand = 3, not_in_creative_inventory = 1},
+		groups = groups_on,
 		tiles = textures_on
 	})
 
@@ -83,7 +94,9 @@ mesecon.register_pressure_plate(
 	{"jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on.png","jeija_pressure_plate_wood_on_edges.png"},
 	"jeija_pressure_plate_wood_wield.png",
 	"jeija_pressure_plate_wood_inv.png",
-	{{"default:mese_crystal_fragment", "group:wood", "default:mese_crystal_fragment"}})
+	{{"default:mese_crystal_fragment", "group:wood", "default:mese_crystal_fragment"}},
+	{ choppy = 3, oddly_breakable_by_hand = 3 },
+	default.node_sound_wood_defaults())
 
 mesecon.register_pressure_plate(
 	"mesecons_pressureplates:pressure_plate_stone",
@@ -92,4 +105,6 @@ mesecon.register_pressure_plate(
 	{"jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on_edges.png"},
 	"jeija_pressure_plate_stone_wield.png",
 	"jeija_pressure_plate_stone_inv.png",
-	{{"default:mese_crystal_fragment", "default:cobble", "default:mese_crystal_fragment"}})
+	{{"default:mese_crystal_fragment", "default:cobble", "default:mese_crystal_fragment"}},
+	{ cracky = 3, oddly_breakable_by_hand = 3 },
+	default.node_sound_stone_defaults())
diff --git a/mesecons_receiver/init.lua b/mesecons_receiver/init.lua
index edf6622cd780e8f58e9841af6b19832ef08bde0f..476131de7ad9b6f34fa40552e4dd8036205db7fb 100644
--- a/mesecons_receiver/init.lua
+++ b/mesecons_receiver/init.lua
@@ -56,6 +56,7 @@ mesecon.register_node("mesecons_receiver:receiver", {
 	},
 	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 	drop = "mesecons:wire_00000000_off",
+	sounds = default.node_sound_defaults(),
 }, {
 	tiles = {
 		"receiver_top_off.png",
@@ -104,6 +105,7 @@ mesecon.register_node("mesecons_receiver:receiver_up", {
 	},
 	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 	drop = "mesecons:wire_00000000_off",
+	sounds = default.node_sound_defaults(),
 }, {
 	tiles = {"mesecons_wire_off.png"},
 	mesecons = {conductor = {
@@ -148,6 +150,7 @@ mesecon.register_node("mesecons_receiver:receiver_down", {
 	},
 	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 	drop = "mesecons:wire_00000000_off",
+	sounds = default.node_sound_defaults(),
 }, {
 	tiles = {"mesecons_wire_off.png"},
 	mesecons = {conductor = {
@@ -206,7 +209,6 @@ function mesecon.receiver_place(rcpt_pos)
 	local param2 = minetest.dir_to_facedir(minetest.facedir_to_dir(node.param2))
 
 	if string.find(nn.name, "mesecons:wire_") ~= nil then
-		minetest.dig_node(pos)
 		minetest.set_node(pos, {name = rcvtype, param2 = param2})
 		mesecon.on_placenode(pos, nn)
 	end
@@ -215,8 +217,7 @@ end
 function mesecon.receiver_remove(rcpt_pos, dugnode)
 	local pos = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, dugnode.param2)
 	local nn = minetest.get_node(pos)
-	if string.find(nn.name, "mesecons_receiver:receiver_") ~=nil then
-		minetest.dig_node(pos)
+	if string.find(nn.name, "mesecons_receiver:receiver_") ~= nil then
 		local node = {name = "mesecons:wire_00000000_off"}
 		minetest.set_node(pos, node)
 		mesecon.on_placenode(pos, node)
diff --git a/mesecons_torch/init.lua b/mesecons_torch/init.lua
index 5f1d25a84bbb38d154e12d76a8eec7270863292d..867c9098b5ac385aa7743ecf6f16c99cff74be85 100644
--- a/mesecons_torch/init.lua
+++ b/mesecons_torch/init.lua
@@ -60,6 +60,7 @@ minetest.register_node("mesecons_torch:mesecon_torch_off", {
 	selection_box = torch_selectionbox,
 	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 	drop = "mesecons_torch:mesecon_torch_on",
+	sounds = default.node_sound_defaults(),
 	mesecons = {receptor = {
 		state = mesecon.state.off,
 		rules = torch_get_output_rules
@@ -79,8 +80,9 @@ minetest.register_node("mesecons_torch:mesecon_torch_on", {
 	paramtype2 = "wallmounted",
 	selection_box = torch_selectionbox,
 	groups = {dig_immediate=3},
-	light_source = default.LIGHT_MAX-5,
+	light_source = minetest.LIGHT_MAX-5,
 	description="Mesecon Torch",
+	sounds = default.node_sound_defaults(),
 	mesecons = {receptor = {
 		state = mesecon.state.on,
 		rules = torch_get_output_rules
diff --git a/mesecons_wires/init.lua b/mesecons_wires/init.lua
index 1766a993e33e01e3c01f21604fa12cfd1155d16e..3ca9cbcc44915f621d890288a414b0c053bf2d80 100644
--- a/mesecons_wires/init.lua
+++ b/mesecons_wires/init.lua
@@ -215,6 +215,7 @@ local function register_wires()
 			walkable = false,
 			drop = "mesecons:wire_00000000_off",
 			mesecon_wire = true,
+			sounds = default.node_sound_defaults(),
 			on_rotate = false,
 		}, {tiles = tiles_off, mesecons = meseconspec_off, groups = groups_off},
 		{tiles = tiles_on, mesecons = meseconspec_on, groups = groups_on})
diff --git a/screenshot.png b/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f1bae5d1117876b63339eb861a40bd46b87f407
Binary files /dev/null and b/screenshot.png differ
diff --git a/settingtypes.txt b/settingtypes.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8be7be61bbb6c13fb5aff9dc41b13cb194b59784
--- /dev/null
+++ b/settingtypes.txt
@@ -0,0 +1,43 @@
+[mesecons]
+
+mesecon.resumetime (Startup delay) int 4 1 10
+mesecon.overheat_max (Device heat limit) int 20 1 100
+mesecon.cooldown_time (Device cooldown time) float 2.0 0.1 10.0
+mesecon.cooldown_granularity (Cooldown step length) float 0.5 0.0 1.0
+
+
+[mesecons_blinkyplant]
+
+mesecon.blinky_plant_interval (Plant blinking interval) int 3 1 5
+
+
+[mesecons_detector]
+
+mesecon.detector_radius (Player detector scanning radius) int 6 3 16
+mesecon.node_detector_distance_max (Node detector distance limit) int 10 1 16
+
+
+[mesecons_luacontroller]
+
+mesecon.luacontroller_string_rep_max (string:rep result length limit) int 64000 1000 1000000
+mesecon.luacontroller_digiline_maxlen (Digiline message size limit) int 50000 1000 1000000
+mesecon.luacontroller_maxevents (Controller execution time limit) int 10000 1000 100000
+mesecon.luacontroller_memsize (Controller memory limit) int 100000 10000 1000000
+
+
+[mesecons_movestones]
+
+mesecon.movestone_speed (Speed) int 3 1 10
+mesecon.movestone_max_push (Max push) int 50 1 100
+mesecon.movestone_max_pull (Max pull) int 50 1 100
+
+
+[mesecons_pistons]
+
+mesecon.piston_max_push (Max push) int 15 1 100
+mesecon.piston_max_pull (Max pull) int 15 1 100
+
+
+[mesecons_pressureplates]
+
+mesecon.pplate_interval (Check interval) float 0.1 0.1 1.0