diff --git a/data/builtin.lua b/data/builtin.lua
index 2f167acfababb4e1ecd78db22e8c312d6312b9ff..555cc3ab83e5026f84fe9723eaf0aaac794d0121 100644
--- a/data/builtin.lua
+++ b/data/builtin.lua
@@ -97,7 +97,6 @@ minetest.register_nodedef_defaults({
 	post_effect_color = {a=0, r=0, g=0, b=0},
 	paramtype = "none",
 	is_ground_content = false,
-	light_propagates = false,
 	sunlight_propagates = false,
 	walkable = true,
 	pointable = true,
@@ -133,7 +132,6 @@ minetest.register_nodedef_defaults({
 minetest.register_node("air", {
 	drawtype = "airlike",
 	paramtype = "light",
-	light_propagates = true,
 	sunlight_propagates = true,
 	walkable = false,
 	pointable = false,
@@ -145,7 +143,6 @@ minetest.register_node("air", {
 minetest.register_node("ignore", {
 	drawtype = "airlike",
 	paramtype = "none",
-	light_propagates = false,
 	sunlight_propagates = false,
 	walkable = false,
 	pointable = false,
diff --git a/data/mods/default/init.lua b/data/mods/default/init.lua
index 100b9f1c83431edc4a0546466b2fc25356d254af..a843063ef40b917b8cd3c11d8907a8afd9552e3b 100644
--- a/data/mods/default/init.lua
+++ b/data/mods/default/init.lua
@@ -261,7 +261,6 @@
 --     post_effect_color = {a=0, r=0, g=0, b=0},
 --     paramtype = "none",
 --     is_ground_content = false,
---     light_propagates = false,
 --     sunlight_propagates = false,
 --     walkable = true,
 --     pointable = true,
@@ -889,7 +888,6 @@ minetest.register_node("default:junglegrass", {
 	visual_scale = 1.3,
 	tile_images = {"default_junglegrass.png"},
 	inventory_image = "default_junglegrass.png",
-	light_propagates = true,
 	paramtype = "light",
 	walkable = false,
 	material = minetest.digprop_leaveslike(1.0),
@@ -901,7 +899,6 @@ minetest.register_node("default:leaves", {
 	visual_scale = 1.3,
 	tile_images = {"default_leaves.png"},
 	inventory_image = minetest.inventorycube("default_leaves.png"),
-	light_propagates = true,
 	paramtype = "light",
 	material = minetest.digprop_leaveslike(1.0),
 	extra_dug_item = 'node "sapling" 1',
@@ -921,7 +918,6 @@ minetest.register_node("default:papyrus", {
 	drawtype = "plantlike",
 	tile_images = {"default_papyrus.png"},
 	inventory_image = "default_papyrus.png",
-	light_propagates = true,
 	paramtype = "light",
 	is_ground_content = true,
 	walkable = false,
@@ -941,7 +937,6 @@ minetest.register_node("default:glass", {
 	drawtype = "glasslike",
 	tile_images = {"default_glass.png"},
 	inventory_image = minetest.inventorycube("default_glass.png"),
-	light_propagates = true,
 	paramtype = "light",
 	sunlight_propagates = true,
 	is_ground_content = true,
@@ -952,7 +947,6 @@ minetest.register_node("default:fence_wood", {
 	drawtype = "fencelike",
 	tile_images = {"default_wood.png"},
 	inventory_image = "default_fence.png",
-	light_propagates = true,
 	paramtype = "light",
 	is_ground_content = true,
 	selection_box = {
@@ -967,7 +961,6 @@ minetest.register_node("default:rail", {
 	drawtype = "raillike",
 	tile_images = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
 	inventory_image = "default_rail.png",
-	light_propagates = true,
 	paramtype = "light",
 	is_ground_content = true,
 	walkable = false,
@@ -982,7 +975,6 @@ minetest.register_node("default:ladder", {
 	drawtype = "signlike",
 	tile_images = {"default_ladder.png"},
 	inventory_image = "default_ladder.png",
-	light_propagates = true,
 	paramtype = "light",
 	is_ground_content = true,
 	wall_mounted = true,
@@ -1026,7 +1018,6 @@ minetest.register_node("default:water_flowing", {
 	alpha = WATER_ALPHA,
 	inventory_image = minetest.inventorycube("default_water.png"),
 	paramtype = "light",
-	light_propagates = true,
 	walkable = false,
 	pointable = false,
 	diggable = false,
@@ -1048,7 +1039,6 @@ minetest.register_node("default:water_source", {
 	alpha = WATER_ALPHA,
 	inventory_image = minetest.inventorycube("default_water.png"),
 	paramtype = "light",
-	light_propagates = true,
 	walkable = false,
 	pointable = false,
 	diggable = false,
@@ -1069,7 +1059,6 @@ minetest.register_node("default:lava_flowing", {
 	tile_images = {"default_lava.png"},
 	inventory_image = minetest.inventorycube("default_lava.png"),
 	paramtype = "light",
-	light_propagates = false,
 	light_source = LIGHT_MAX - 1,
 	walkable = false,
 	pointable = false,
@@ -1092,7 +1081,6 @@ minetest.register_node("default:lava_source", {
 	tile_images = {"default_lava.png"},
 	inventory_image = minetest.inventorycube("default_lava.png"),
 	paramtype = "light",
-	light_propagates = false,
 	light_source = LIGHT_MAX - 1,
 	walkable = false,
 	pointable = false,
@@ -1116,7 +1104,6 @@ minetest.register_node("default:torch", {
 	tile_images = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
 	inventory_image = "default_torch_on_floor.png",
 	paramtype = "light",
-	light_propagates = true,
 	sunlight_propagates = true,
 	walkable = false,
 	wall_mounted = true,
@@ -1136,7 +1123,6 @@ minetest.register_node("default:sign_wall", {
 	tile_images = {"default_sign_wall.png"},
 	inventory_image = "default_sign_wall.png",
 	paramtype = "light",
-	light_propagates = true,
 	sunlight_propagates = true,
 	walkable = false,
 	wall_mounted = true,
@@ -1224,7 +1210,6 @@ minetest.register_node("default:sapling", {
 	tile_images = {"default_sapling.png"},
 	inventory_image = "default_sapling.png",
 	paramtype = "light",
-	light_propagates = true,
 	walkable = false,
 	material = minetest.digprop_constanttime(0.0),
 	furnace_burntime = 10,
@@ -1236,7 +1221,6 @@ minetest.register_node("default:apple", {
 	tile_images = {"default_apple.png"},
 	inventory_image = "default_apple.png",
 	paramtype = "light",
-	light_propagates = true,
 	sunlight_propagates = true,
 	walkable = false,
 	dug_item = 'craft "apple" 1',
diff --git a/src/script.cpp b/src/script.cpp
index 8b1b7013e9ff7210854c9fefde58ca57f1b4b701..14c23e009f7728b380a4fa838281d627018f3f50 100644
--- a/src/script.cpp
+++ b/src/script.cpp
@@ -35,13 +35,19 @@ LuaError::LuaError(lua_State *L, const std::string &s)
 {
 	m_s = "LuaError: ";
 	m_s += s + "\n";
+	m_s += script_get_backtrace(L);
+}
+
+std::string script_get_backtrace(lua_State *L)
+{
+	std::string s;
 	lua_getfield(L, LUA_GLOBALSINDEX, "debug");
 	if(lua_istable(L, -1)){
 		lua_getfield(L, -1, "traceback");
 		if(lua_isfunction(L, -1)){
 			lua_call(L, 0, 1);
 			if(lua_isstring(L, -1)){
-				m_s += lua_tostring(L, -1);
+				s += lua_tostring(L, -1);
 			}
 			lua_pop(L, 1);
 		}
@@ -50,6 +56,7 @@ LuaError::LuaError(lua_State *L, const std::string &s)
 		}
 	}
 	lua_pop(L, 1);
+	return s;
 }
 
 void script_error(lua_State *L, const char *fmt, ...)
diff --git a/src/script.h b/src/script.h
index 3c056ae35a1a6694c55fa090f09ab7dea73641c2..3bf5342f5e29c7558fcb7e2123a71400fa4866d8 100644
--- a/src/script.h
+++ b/src/script.h
@@ -41,6 +41,7 @@ class LuaError : public std::exception
 
 lua_State* script_init();
 void script_deinit(lua_State *L);
+std::string script_get_backtrace(lua_State *L);
 void script_error(lua_State *L, const char *fmt, ...);
 bool script_load(lua_State *L, const char *path);
 
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index d7382b98bc73348e44a2cedfc97fb4493d6ee0bd..ffbce916797d1e11ba9b66ef876cb6e12d3c6794 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -455,6 +455,18 @@ static void setfloatfield(lua_State *L, int table,
 	lua_setfield(L, table, fieldname);
 }
 
+static void warn_if_field_exists(lua_State *L, int table,
+		const char *fieldname, const std::string &message)
+{
+	lua_getfield(L, table, fieldname);
+	if(!lua_isnil(L, -1)){
+		infostream<<script_get_backtrace(L)<<std::endl;
+		infostream<<"WARNING: field \""<<fieldname<<"\": "
+				<<message<<std::endl;
+	}
+	lua_pop(L, 1);
+}
+
 /*
 	Inventory stuff
 */
@@ -1019,7 +1031,9 @@ static int l_register_node(lua_State *L)
 	
 	// True for all ground-like things like stone and mud, false for eg. trees
 	getboolfield(L, nodedef_table, "is_ground_content", f.is_ground_content);
-	getboolfield(L, nodedef_table, "light_propagates", f.light_propagates);
+	f.light_propagates = (f.param_type == CPT_LIGHT);
+	warn_if_field_exists(L, nodedef_table, "light_propagates",
+			"deprecated: determined from paramtype");
 	getboolfield(L, nodedef_table, "sunlight_propagates", f.sunlight_propagates);
 	// This is used for collision detection.
 	// Also for general solidness queries.