diff --git a/Defs/RecipeDefs/Recipes_RemoveEnemyImplants.xml b/Defs/RecipeDefs/Recipes_RemoveEnemyImplants.xml
index ad537dacb16cc18f26ea464b8154a9925859d42d..cea66cac337c5453583656a8e7f96f210136ea39 100644
--- a/Defs/RecipeDefs/Recipes_RemoveEnemyImplants.xml
+++ b/Defs/RecipeDefs/Recipes_RemoveEnemyImplants.xml
@@ -20,7 +20,7 @@
 		<workSkill>Medicine</workSkill>
 		<workSkillLearnFactor>1</workSkillLearnFactor>
 		<hideBodyPartNames>true</hideBodyPartNames>
-		<targetsBodyPart>false</targetsBodyPart>
+		<targetsBodyPart>true</targetsBodyPart>
 	</RecipeDef>
 
 	<RecipeDef Abstract="True" ParentName="RJW_RemoveEnemyImplants" Name="RJW_RemoveInsectEgg">
@@ -153,7 +153,7 @@
 		<defName>RJW_RemoveRestraints</defName>
 		<label>remove restraints</label>
 		<description>Removes restraints.</description>
-		<workerClass>Recipe_RemoveHediff</workerClass>
+		<workerClass>rjw.Recipe_RemoveRestraints</workerClass>
 		<jobString>Removing restraints.</jobString>
 		<workAmount>1000</workAmount>
 		<removesHediff>RJW_Restraints</removesHediff>
@@ -178,7 +178,7 @@
 		<defName>RJW_RemoveCocoon</defName>
 		<label>remove cocoon</label>
 		<description>Removes cocoon.</description>
-		<workerClass>Recipe_RemoveHediff</workerClass>
+		<workerClass>rjw.Recipe_RemoveRestraints</workerClass>
 		<jobString>Removing cocoon.</jobString>
 		<workAmount>1000</workAmount>
 		<removesHediff>RJW_Cocoon</removesHediff>
diff --git a/Source/Recipes/Recipe_Restraints.cs b/Source/Recipes/Recipe_Restraints.cs
new file mode 100644
index 0000000000000000000000000000000000000000..dd7d08c7770cb425728d39f5ffb24898b9a1b2d6
--- /dev/null
+++ b/Source/Recipes/Recipe_Restraints.cs
@@ -0,0 +1,32 @@
+using RimWorld;
+using System.Collections.Generic;
+using Verse;
+
+namespace rjw
+{
+	/// <summary>
+	/// Removes heddifs (restraints/cocoon)
+	/// </summary>
+	public class Recipe_RemoveRestraints : Recipe_RemoveHediff
+	{
+		public override IEnumerable<BodyPartRecord> GetPartsToApplyOn(Pawn pawn, RecipeDef recipe)
+		{
+			List<Hediff> allHediffs = pawn.health.hediffSet.hediffs;
+			int i = 0;
+			while (true)
+			{
+				if (i >= allHediffs.Count)
+				{
+					yield break;
+				}
+				if (allHediffs[i].def == recipe.removesHediff && allHediffs[i].Visible)
+				{
+					break;
+				}
+				i++;
+			}
+
+			yield return allHediffs[i].Part;
+		}
+	}
+}