diff --git a/mods/screwdriver/init.lua b/mods/screwdriver/init.lua
index 2a53ae377ffab174d8711915f1e58e047e8f2c54..e76f0545f1c419e6054ce72e536b8c36b9cdc3c3 100644
--- a/mods/screwdriver/init.lua
+++ b/mods/screwdriver/init.lua
@@ -98,12 +98,17 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses)
 	end
 	-- can we rotate this paramtype2?
 	local fn = screwdriver.rotate[ndef.paramtype2]
-	if not fn then
+	if not fn and not ndef.on_rotate then
 		return itemstack
 	end
 
 	local should_rotate = true
-	local new_param2 = fn(pos, node, mode)
+	local new_param2
+	if fn then
+		new_param2 = fn(pos, node, mode)
+	else
+		new_param2 = node.param2
+	end
 
 	-- Node provides a handler, so let the handler decide instead if the node can be rotated
 	if ndef.on_rotate then
@@ -122,7 +127,7 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses)
 		return itemstack
 	end
 
-	if should_rotate then
+	if should_rotate and new_param2 ~= node.param2 then
 		node.param2 = new_param2
 		minetest.swap_node(pos, node)
 		minetest.check_for_falling(pos)