diff --git a/builtin/falling.lua b/builtin/falling.lua
index d3af36f2934c823225a28076ad8b3d52d85e31fd..1c09f98560fb298338f56e31e0b72c3d93eaa643 100644
--- a/builtin/falling.lua
+++ b/builtin/falling.lua
@@ -57,6 +57,10 @@ minetest.register_entity("__builtin:falling_node", {
 		-- Note: walkable is in the node definition, not in item groups
 		if minetest.registered_nodes[bcn.name] and
 				minetest.registered_nodes[bcn.name].walkable then
+			if minetest.registered_nodes[bcn.name].buildable_to then
+				minetest.env:remove_node(bcp)
+				return
+			end
 			local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
 			-- Check what's here
 			local n2 = minetest.env:get_node(np)
@@ -80,6 +84,7 @@ minetest.register_entity("__builtin:falling_node", {
 			-- Create node and remove entity
 			minetest.env:add_node(np, {name=self.nodename})
 			self.object:remove()
+			nodeupdate(np)
 		else
 			-- Do nothing
 		end
@@ -144,7 +149,8 @@ function nodeupdate_single(p)
 		n_bottom = minetest.env:get_node(p_bottom)
 		-- Note: walkable is in the node definition, not in item groups
 		if minetest.registered_nodes[n_bottom.name] and
-				not minetest.registered_nodes[n_bottom.name].walkable then
+				(not minetest.registered_nodes[n_bottom.name].walkable or 
+					minetest.registered_nodes[n_bottom.name].buildable_to) then
 			minetest.env:remove_node(p)
 			spawn_falling_node(p, n.name)
 			nodeupdate(p)