diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua
index a19da64..8f73374 100644
--- a/mods/carts/cart_entity.lua
+++ b/mods/carts/cart_entity.lua
@@ -58,7 +58,8 @@ end
 
 function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
 	local pos = self.object:getpos()
-	if not self.railtype then
+	local vel = self.object:getvelocity()
+	if not self.railtype or vector.equals(vel, {x=0, y=0, z=0}) then
 		local node = minetest.get_node(pos).name
 		self.railtype = minetest.get_item_group(node, "connect_to_raillike")
 	end
@@ -105,7 +106,6 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
 		return
 	end
 	-- Player punches cart to alter velocity
-	local vel = self.object:getvelocity()
 	if puncher:get_player_name() == self.driver then
 		if math.abs(vel.x + vel.z) > carts.punch_speed_max then
 			return
diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua
index a471719..96a12d2 100644
--- a/mods/carts/functions.lua
+++ b/mods/carts/functions.lua
@@ -211,7 +211,12 @@ end
 
 function carts:get_rail_groups(additional_groups)
 	-- Get the default rail groups and add more when a table is given
-	local groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1}
+	local groups = {
+		dig_immediate = 2,
+		attached_node = 1,
+		rail = 1,
+		connect_to_raillike = minetest.raillike_group("rail")
+	}
 	if type(additional_groups) == "table" then
 		for k, v in pairs(additional_groups) do
 			groups[k] = v