diff --git a/train.lua b/train.lua
index 5e7a32618de2b5cde10f022de521de15da972d89..ec16060e2435a64f12d6e5e4c44afd3f4419017a 100644
--- a/train.lua
+++ b/train.lua
@@ -34,55 +34,30 @@ minetest.register_node("mapserver:train", {
 	groups = {cracky=3,oddly_breakable_by_hand=3},
 	sounds = moditems.sound_glass(),
 	can_dig = mapserver.can_interact,
-	after_place_node = mapserver.after_place_node,
 
-	on_construct = function(pos)
+	after_place_node = function(pos, placer, itemstack, pointed_thing)
 		local meta = minetest.get_meta(pos)
 
-		local find_nearest_player = function(block_pos, radius)
-			-- adapted from https://forum.minetest.net/viewtopic.php?t=23319
-
-			local closest_d = radius+1
-			local closest_name
-
-			for i, obj in ipairs(minetest.get_objects_inside_radius(block_pos, radius)) do
-				-- 0.4.x compatibility:
-				--if obj:get_player_name() ~= "" then
-
-				-- 5.0.0+ method:
-				if minetest.is_player(obj) then
-					local distance = vector.distance(obj:get_pos(), block_pos)
-					if distance < closest_d then
-						closest_d = distance
-						closest_name = obj:get_player_name()
-					end
-				end
-			end
-
-			-- if 'closest_name' is nil, there's no player inside that radius
-			return closest_name
-		end
-
-		-- 10 should be the max possible interaction distance
-		local name = find_nearest_player(pos, 10)
-
 		local last_index = 0
 		local last_line = ""
 		local last_color = ""
 
-		if name ~= nil then
-			name = string.lower(name)
-			if last_set_by[name] ~= nil then
-				last_index = last_set_by[name].index + 5
-				last_line = last_set_by[name].line
-				last_color = last_set_by[name].color
-			else
-				last_set_by[name] = {}
-			end
+		if minetest.is_player(placer) then
+			local name = placer:get_player_name()
+			if name ~= nil then
+				name = string.lower(name)
+				if last_set_by[name] ~= nil then
+					last_index = last_set_by[name].index + 5
+					last_line = last_set_by[name].line
+					last_color = last_set_by[name].color
+				else
+					last_set_by[name] = {}
+				end
 
-			last_set_by[name].index = last_index
-			last_set_by[name].line = last_line
-			last_set_by[name].color = last_color
+				last_set_by[name].index = last_index
+				last_set_by[name].line = last_line
+				last_set_by[name].color = last_color
+			end
 		end
 
 		meta:set_string("station", "")
@@ -91,6 +66,9 @@ minetest.register_node("mapserver:train", {
 		meta:set_string("color", last_color)
 
 		update_formspec(meta)
+
+
+		return mapserver.after_place_node(pos, placer, itemstack, pointed_thing)
 	end,
 
 	on_receive_fields = function(pos, formname, fields, sender)