i thought i left a comment
You should use the is_sharp flag, so instead of just checking istype scalpel, its
if(is_sharp(W))
new runtime pelt etc

this lets all items defined as sharp do it, so it's not snowflakey