diff --git a/mods/ITEMS/mcl_stonecutter/init.lua b/mods/ITEMS/mcl_stonecutter/init.lua
index 8f4f24aa1..b32cf14fe 100644
--- a/mods/ITEMS/mcl_stonecutter/init.lua
+++ b/mods/ITEMS/mcl_stonecutter/init.lua
@@ -15,8 +15,12 @@ mcl_stonecutter.registered_recipes = {}
 --   - defaults to 1
 --   - non-int rounded down
 function mcl_stonecutter.register_recipe(input, output, count)
-	if not (minetest.registered_items[input] and minetest.registered_items[output]) then
-		error("Input or output is not a registered item")
+	if mcl_stonecutter.registered_recipes[input] and mcl_stonecutter.registered_recipes[input][output] then return end
+	if not minetest.registered_items[input] then
+		error("Input is not a registered item: ".. input)
+	end
+	if not minetest.registered_items[output] then
+		error("Output is not a registered item: ".. output)
 	end
 	local n = count
 	if type(count) ~= "number" then
@@ -27,6 +31,21 @@ function mcl_stonecutter.register_recipe(input, output, count)
 		mcl_stonecutter.registered_recipes[input] = {}
 	end
 	mcl_stonecutter.registered_recipes[input][output] = n
+
+	local fallthrough = mcl_stonecutter.registered_recipes[output]
+	if fallthrough then
+		for o, c in pairs(fallthrough) do
+			mcl_stonecutter.register_recipe(input, o, c)
+		end
+	end
+
+	for i, recipes in pairs(mcl_stonecutter.registered_recipes) do
+		for name, c in pairs(recipes) do
+			if name == input then
+				mcl_stonecutter.register_recipe(i, output, c*n)
+			end
+		end
+	end
 end
 
 -- formspecs
@@ -88,6 +107,7 @@ local function update_stonecutter_slots(pos, str)
 		end
 	else
 		meta:set_string("formspec", show_stonecutter_formspec(nil))
+		inv:set_stack("output", 1, "")
 	end
 end