diff --git a/game_api.txt b/game_api.txt
index 634b7f2993f41c608a4871ebed3dd5b92a709cad..93cf05273854477aea9e9da39b31e3e9a23bb665 100644
--- a/game_api.txt
+++ b/game_api.txt
@@ -343,7 +343,7 @@ delivered with Minetest Game, to keep them compatible with other mods.
 
  * Registers a stair.
  * `subname`: Basically the material name (e.g. cobble) used for the stair name. Nodename pattern: "stairs:stair_subname"
- * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble"
+ * `recipeitem`: Item used in the craft recipe, e.g. "default:cobble", may be `nil`
  * `groups`: see [Known damage and digging time defining groups]
  * `images`: see [Tile definition]
  * `description`: used for the description field in the stair's definition
diff --git a/mods/default/functions.lua b/mods/default/functions.lua
index 7e594b31abe73dc3a03699b6ccf12a3c4152239b..f3bb97cdd5664a8ca8595f7b8f39aaf56745140d 100644
--- a/mods/default/functions.lua
+++ b/mods/default/functions.lua
@@ -466,12 +466,18 @@ minetest.register_abm({
 --
 
 minetest.register_abm({
-	nodenames = {"default:cobble"},
+	nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble"},
 	neighbors = {"group:water"},
 	interval = 16,
 	chance = 200,
 	catch_up = false,
 	action = function(pos, node)
-		minetest.set_node(pos, {name = "default:mossycobble"})
+		if node.name == "default:cobble" then
+			minetest.set_node(pos, {name = "default:mossycobble"})
+		elseif node.name == "stairs:slab_cobble" then
+			minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2})
+		elseif node.name == "stairs:stair_cobble" then
+			minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2})
+		end
 	end
 })
diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua
index 7c28fa4f10ff072e65a43154397ca16fae254ae5..2195e4d42c880340f7df0b0921536769eabed9be 100644
--- a/mods/stairs/init.lua
+++ b/mods/stairs/init.lua
@@ -87,24 +87,26 @@ function stairs.register_stair(subname, recipeitem, groups, images, description,
 		})
 	end
 
-	minetest.register_craft({
-		output = 'stairs:stair_' .. subname .. ' 6',
-		recipe = {
-			{recipeitem, "", ""},
-			{recipeitem, recipeitem, ""},
-			{recipeitem, recipeitem, recipeitem},
-		},
-	})
+	if recipeitem then
+		minetest.register_craft({
+			output = 'stairs:stair_' .. subname .. ' 6',
+			recipe = {
+				{recipeitem, "", ""},
+				{recipeitem, recipeitem, ""},
+				{recipeitem, recipeitem, recipeitem},
+			},
+		})
 
-	-- Flipped recipe for the silly minecrafters
-	minetest.register_craft({
-		output = 'stairs:stair_' .. subname .. ' 6',
-		recipe = {
-			{"", "", recipeitem},
-			{"", recipeitem, recipeitem},
-			{recipeitem, recipeitem, recipeitem},
-		},
-	})
+		-- Flipped recipe for the silly minecrafters
+		minetest.register_craft({
+			output = 'stairs:stair_' .. subname .. ' 6',
+			recipe = {
+				{"", "", recipeitem},
+				{"", recipeitem, recipeitem},
+				{recipeitem, recipeitem, recipeitem},
+			},
+		})
+	end
 end
 
 
@@ -218,12 +220,14 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
 		})
 	end
 
-	minetest.register_craft({
-		output = 'stairs:slab_' .. subname .. ' 6',
-		recipe = {
-			{recipeitem, recipeitem, recipeitem},
-		},
-	})
+	if recipeitem then
+		minetest.register_craft({
+			output = 'stairs:slab_' .. subname .. ' 6',
+			recipe = {
+				{recipeitem, recipeitem, recipeitem},
+			},
+		})
+	end
 end
 
 
@@ -310,6 +314,13 @@ stairs.register_stair_and_slab("cobble", "default:cobble",
 		"Cobblestone Slab",
 		default.node_sound_stone_defaults())
 
+stairs.register_stair_and_slab("mossycobble", nil,
+		{cracky = 3},
+		{"default_mossycobble.png"},
+		"Mossy Cobblestone Stair",
+		"Mossy Cobblestone Slab",
+		default.node_sound_stone_defaults())
+
 stairs.register_stair_and_slab("stonebrick", "default:stonebrick",
 		{cracky = 3},
 		{"default_stone_brick.png"},