diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1363abaa73a608f1e0e329c1ecb656edd58da1f9..e07b99e61d370a89a344ab1e67739c7a22cd3960 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
 ### Changed
 
 - The minimum supported Minetest version is now 5.0.0.
+- Copper rails are now registered using functions from the `carts` mod,
+  making them interoperate seamlessly with default rails.
+  - Copper rails can no longer be placed in the air.
 
 ## [1.1.0] - 2019-03-23
 
diff --git a/init.lua b/init.lua
index d3b1cc0bea9a25177ad873dd298d024448aef375..839c370988c257279b9be4350850a15046b8f1bf 100644
--- a/init.lua
+++ b/init.lua
@@ -329,45 +329,20 @@ else
 end
 
 -- Copper rail (unique node)
-minetest.register_node("moreores:copper_rail", {
-	description = S("Copper Rail"),
-	drawtype = "raillike",
-	tiles = {
-		"moreores_copper_rail.png",
-		"moreores_copper_rail_curved.png",
-		"moreores_copper_rail_t_junction.png",
-		"moreores_copper_rail_crossing.png",
-	},
-	inventory_image = "moreores_copper_rail.png",
-	wield_image = "moreores_copper_rail.png",
-	paramtype = "light",
-	sunlight_propagates = true,
-	walkable = false,
-	selection_box = {
-		type = "fixed",
-		fixed = {
-			-1/2,
-			-1/2,
-			-1/2,
-			1/2,
-			-1/2 + 1/16,
-			1/2,
-		},
-	},
-	sounds = default_metal_sounds,
-	groups = {bendy = 2, snappy = 1, dig_immediate = 2, rail = 1, connect_to_raillike = 1},
-	mesecons = {
-		effector = {
-			action_on = function(pos, node)
-				minetest.get_meta(pos):set_string("cart_acceleration", "0.5")
-			end,
-
-			action_off = function(pos, node)
-				minetest.get_meta(pos):set_string("cart_acceleration", "0")
-			end,
+if minetest.get_modpath("carts") then
+	carts:register_rail("moreores:copper_rail", {
+		description = S("Copper Rail"),
+		tiles = {
+			"moreores_copper_rail.png",
+			"moreores_copper_rail_curved.png",
+			"moreores_copper_rail_t_junction.png",
+			"moreores_copper_rail_crossing.png",
 		},
-	},
-})
+		inventory_image = "moreores_copper_rail.png",
+		wield_image = "moreores_copper_rail.png",
+		groups = carts:get_rail_groups(),
+	}, {})
+end
 
 minetest.register_craft({
 	output = "moreores:copper_rail 24",
diff --git a/mod.conf b/mod.conf
index 2b961612f03b1854c0d06d2984fdfcf15bf28df8..04a353a45820fb72a69862fa779ba8f215c41513 100644
--- a/mod.conf
+++ b/mod.conf
@@ -1,4 +1,4 @@
 name = moreores
 description = Adds new ore types.
 depends = default
-optional_depends = farming,intllib,mg
+optional_depends = carts,farming,intllib,mg