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 c3d03a474bc9045b303be89f53270b268b087ba1..fc7c624afd6cbe1f53dbbd915d7ebd23cb1884cf 100644
--- a/mods/default/functions.lua
+++ b/mods/default/functions.lua
@@ -455,12 +455,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 53a8088cdc1c322f717d695997bdc32aedbd24e9..5d53b08d0797a978e3aa57c60803c511b543207a 100644
--- a/mods/stairs/init.lua
+++ b/mods/stairs/init.lua
@@ -90,24 +90,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
 
 
@@ -221,12 +223,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
 
 
@@ -313,6 +317,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"},