diff --git a/Source/Harmony/SexualityCardInternal.cs b/Source/Harmony/SexualityCardInternal.cs
index c41245c471875429331047f68c3de94f3433b286..edd969fe7eaf34766a4d8837b759e1e7d6048c7e 100644
--- a/Source/Harmony/SexualityCardInternal.cs
+++ b/Source/Harmony/SexualityCardInternal.cs
@@ -2,6 +2,9 @@ using System.Text;
 using RimWorld;
 using UnityEngine;
 using Verse;
+using System;
+using System.Collections.Generic;
+using System.Linq;
 
 namespace rjw
 {
@@ -14,6 +17,70 @@ namespace rjw
 			pawn = editFor;
 		}
 
+		public static breasts Breasts;
+		public enum breasts
+		{
+			selectone,
+			none,
+			featureless_chest,
+			flat_breasts,
+			small_breasts,
+			average_breasts,
+			large_breasts,
+			huge_breasts,
+			slime_breasts,
+		};
+
+		public static anuses Anuses;
+		public enum anuses
+		{
+			selectone,
+			none,
+			micro_anus,
+			tight_anus,
+			average_anus,
+			loose_anus,
+			gaping_anus,
+			slime_anus,
+		};
+
+		public static vaginas Vaginas;
+		public enum vaginas
+		{
+			selectone,
+			none,
+			micro_vagina,
+			tight_vagina,
+			average_vagina,
+			loose_vagina,
+			gaping_vagina,
+			slime_vagina,
+			feline_vagina,
+			canine_vagina,
+			equine_vagina,
+			dragon_vagina,
+		};
+
+		public static penises Penises;
+		public enum penises
+		{
+			selectone,
+			none,
+			micro_penis,
+			small_penis,
+			average_penis,
+			big_penis,
+			huge_penis,
+			slime_penis,
+			feline_penis,
+			canine_penis,
+			equine_penis,
+			dragon_penis,
+			raccoon_penis,
+			hemipenis,
+			crocodilian_penis,
+		};
+
 		public void SexualityCard(Rect rect, Pawn pawn)
 		{
 			CompRJW comp = pawn.TryGetComp<CompRJW>();
@@ -27,8 +94,13 @@ namespace rjw
 			Rect row1 = new Rect(10f, num, rect.width - 8f, 24f);
 			Rect row2 = new Rect(10f, num + 24, rect.width - 8f, 24f);
 			Rect row3 = new Rect(10f, num + 48, rect.width - 8f, 24f);
-			Rect button1 = new Rect(10f, rect1.height - 10f, rect.width - 8f, 24f);
-			Rect button2 = new Rect(10f, rect1.height - 34f, rect.width - 8f, 24f);
+			Rect button1 = new Rect(10f, rect1.height - 10f, rect.width - 8f, 24f);//re sexualize
+			Rect button2 = new Rect(10f, rect1.height - 34f, rect.width - 8f, 24f);//archtech toggle
+			Rect button3 = new Rect(10f, rect1.height - 58f, rect.width - 8f, 24f);//breast
+			Rect button4 = new Rect(10f, rect1.height - 82f, rect.width - 8f, 24f);//anus
+			Rect button5 = new Rect(10f, rect1.height - 106f, rect.width - 8f, 24f);//vagina
+			Rect button6 = new Rect(10f, rect1.height - 130f, rect.width - 8f, 24f);//penis 1
+			Rect button7 = new Rect(10f, rect1.height - 154f, rect.width - 8f, 24f);//penis 2
 
 			string price;
 			string sexuality;
@@ -184,6 +256,315 @@ namespace rjw
 					pawn.health.AddHediff(HediffDef.Named("ImpregnationBlocker"), genitalia);
 				}
 			}
+			if (xxx.is_slime(pawn) && (pawn.IsColonistPlayerControlled || pawn.IsPrisonerOfColony))
+			{
+				BodyPartRecord bpr_genitalia = Genital_Helper.get_genitals(pawn);
+				BodyPartRecord bpr_breasts = Genital_Helper.get_breasts(pawn);
+				BodyPartRecord bpr_anus = Genital_Helper.get_anus(pawn);
+				BodyPartRecord bpr = null;
+				HediffDef hed = null;
+
+				if (Widgets.ButtonText(button3, "Morph breasts"))
+				{
+					Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
+				{
+					new FloatMenuOption("none", (() => Breasts = breasts.none), MenuOptionPriority.Default),
+					new FloatMenuOption(Genital_Helper.featureless_chest.label.CapitalizeFirst(), (() => Breasts = breasts.featureless_chest), MenuOptionPriority.Default),
+					new FloatMenuOption(Genital_Helper.flat_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.flat_breasts), MenuOptionPriority.Default),
+					new FloatMenuOption(Genital_Helper.small_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.small_breasts), MenuOptionPriority.Default),
+					new FloatMenuOption(Genital_Helper.average_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.average_breasts), MenuOptionPriority.Default),
+					new FloatMenuOption(Genital_Helper.large_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.large_breasts), MenuOptionPriority.Default),
+					new FloatMenuOption(Genital_Helper.huge_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.huge_breasts), MenuOptionPriority.Default),
+					new FloatMenuOption(Genital_Helper.slime_breasts.label.CapitalizeFirst(), (() => Breasts = breasts.slime_breasts), MenuOptionPriority.Default),
+				}));
+				}
+				switch (Breasts)
+				{
+					case breasts.none:
+						bpr = bpr_breasts;
+						break;
+					case breasts.featureless_chest:
+						bpr = bpr_breasts;
+						hed = Genital_Helper.featureless_chest;
+						break;
+					case breasts.flat_breasts:
+						bpr = bpr_breasts;
+						hed = Genital_Helper.flat_breasts;
+						break;
+					case breasts.small_breasts:
+						bpr = bpr_breasts;
+						hed = Genital_Helper.small_breasts;
+						break;
+					case breasts.average_breasts:
+						bpr = bpr_breasts;
+						hed = Genital_Helper.average_breasts;
+						break;
+					case breasts.large_breasts:
+						bpr = bpr_breasts;
+						hed = Genital_Helper.large_breasts;
+						break;
+					case breasts.huge_breasts:
+						bpr = bpr_breasts;
+						hed = Genital_Helper.huge_breasts;
+						break;
+					case breasts.slime_breasts:
+						bpr = bpr_breasts;
+						hed = Genital_Helper.slime_breasts;
+						break;
+					default:
+						break;
+				}
+
+				if (Widgets.ButtonText(button4, "Morph anus"))
+				{
+					Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
+					{
+						new FloatMenuOption("none", (() => Anuses = anuses.none), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.micro_anus.label.CapitalizeFirst(), (() => Anuses = anuses.micro_anus), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.tight_anus.label.CapitalizeFirst(), (() => Anuses = anuses.tight_anus), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.average_anus.label.CapitalizeFirst(), (() => Anuses = anuses.average_anus), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.loose_anus.label.CapitalizeFirst(), (() => Anuses = anuses.loose_anus), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.gaping_anus.label.CapitalizeFirst(), (() => Anuses = anuses.gaping_anus), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.slime_anus.label.CapitalizeFirst(), (() => Anuses = anuses.slime_anus), MenuOptionPriority.Default),
+					}));
+				}
+				switch (Anuses)
+				{
+					case anuses.none:
+						bpr = bpr_anus;
+						break;
+					case anuses.micro_anus:
+						bpr = bpr_anus;
+						hed = Genital_Helper.micro_anus;
+						break;
+					case anuses.tight_anus:
+						bpr = bpr_anus;
+						hed = Genital_Helper.tight_anus;
+						break;
+					case anuses.average_anus:
+						bpr = bpr_anus;
+						hed = Genital_Helper.average_anus;
+						break;
+					case anuses.loose_anus:
+						bpr = bpr_anus;
+						hed = Genital_Helper.loose_anus;
+						break;
+					case anuses.gaping_anus:
+						bpr = bpr_anus;
+						hed = Genital_Helper.gaping_anus;
+						break;
+					case anuses.slime_anus:
+						bpr = bpr_anus;
+						hed = Genital_Helper.slime_anus;
+						break;
+					default:
+						break;
+				}
+
+				if (Widgets.ButtonText(button5, "Morph vagina"))
+				{
+					Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
+					{
+						new FloatMenuOption("none", (() => Vaginas = vaginas.none), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.micro_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.micro_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.tight_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.tight_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.average_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.average_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.loose_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.loose_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.gaping_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.gaping_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.slime_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.slime_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.feline_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.feline_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.canine_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.canine_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.equine_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.equine_vagina), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.dragon_vagina.label.CapitalizeFirst(), (() => Vaginas = vaginas.dragon_vagina), MenuOptionPriority.Default),
+					}));
+				}
+				switch (Vaginas)
+				{
+					case vaginas.none:
+						bpr = bpr_genitalia;
+						break;
+					case vaginas.micro_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.micro_vagina;
+						break;
+					case vaginas.tight_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.tight_vagina;
+						break;
+					case vaginas.average_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.average_vagina;
+						break;
+					case vaginas.loose_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.loose_vagina;
+						break;
+					case vaginas.gaping_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.gaping_vagina;
+						break;
+					case vaginas.slime_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.slime_vagina;
+						break;
+					case vaginas.feline_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.feline_vagina;
+						break;
+					case vaginas.canine_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.canine_vagina;
+						break;
+					case vaginas.equine_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.equine_vagina;
+						break;
+					case vaginas.dragon_vagina:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.dragon_vagina;
+						break;
+					default:
+						break;
+				}
+
+				if (Widgets.ButtonText(button6, "Morph penis"))
+				{
+					Find.WindowStack.Add(new FloatMenu(new List<FloatMenuOption>()
+					{
+						new FloatMenuOption("none", (() => Penises = penises.none), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.micro_penis.label.CapitalizeFirst(), (() => Penises = penises.micro_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.small_penis.label.CapitalizeFirst(), (() => Penises = penises.small_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.average_penis.label.CapitalizeFirst(), (() => Penises = penises.average_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.big_penis.label.CapitalizeFirst(), (() => Penises = penises.big_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.huge_penis.label.CapitalizeFirst(), (() => Penises = penises.huge_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.slime_penis.label.CapitalizeFirst(), (() => Penises = penises.slime_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.feline_penis.label.CapitalizeFirst(), (() => Penises = penises.feline_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.canine_penis.label.CapitalizeFirst(), (() => Penises = penises.canine_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.equine_penis.label.CapitalizeFirst(), (() => Penises = penises.equine_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.dragon_penis.label.CapitalizeFirst(), (() => Penises = penises.dragon_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.raccoon_penis.label.CapitalizeFirst(), (() => Penises = penises.raccoon_penis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.hemipenis.label.CapitalizeFirst(), (() => Penises = penises.hemipenis), MenuOptionPriority.Default),
+						new FloatMenuOption(Genital_Helper.crocodilian_penis.label.CapitalizeFirst(), (() => Penises = penises.crocodilian_penis), MenuOptionPriority.Default),
+					}));
+				}
+				switch (Penises)
+				{
+					case penises.none:
+						bpr = bpr_genitalia;
+						break;
+					case penises.micro_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.micro_penis;
+						break;
+					case penises.small_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.small_penis;
+						break;
+					case penises.average_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.average_penis;
+						break;
+					case penises.big_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.big_penis;
+						break;
+					case penises.huge_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.huge_penis;
+						break;
+					case penises.slime_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.slime_penis;
+						break;
+					case penises.feline_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.feline_penis;
+						break;
+					case penises.canine_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.canine_penis;
+						break;
+					case penises.equine_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.equine_penis;
+						break;
+					case penises.dragon_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.dragon_penis;
+						break;
+					case penises.raccoon_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.raccoon_penis;
+						break;
+					case penises.hemipenis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.hemipenis;
+						break;
+					case penises.crocodilian_penis:
+						bpr = bpr_genitalia;
+						hed = Genital_Helper.crocodilian_penis;
+						break;
+					default:
+						break;
+				}
+
+				if (bpr != null)
+				{
+					//Log.Message("start ");
+					if (bpr != bpr_genitalia)
+					{
+						if (pawn.needs.TryGetNeed<Need_Food>().CurLevel > 0.5f)
+						{
+							pawn.needs.food.CurLevel -= 0.5f;
+							pawn.health.RestorePart(bpr);
+							if (hed != null)
+								pawn.health.AddHediff(hed, bpr);
+						}
+						Anuses = anuses.selectone;
+						Breasts = breasts.selectone;
+					}
+					else if (bpr == bpr_genitalia && Vaginas != vaginas.selectone)
+					{
+						if (pawn.needs.TryGetNeed<Need_Food>().CurLevel > 0.5f)
+						{
+							pawn.needs.food.CurLevel -= 0.5f;
+							List<Hediff> list = new List<Hediff>();
+							foreach (Hediff heddif in pawn.health.hediffSet.hediffs.Where(x =>
+									x.Part == bpr &&
+									x.def.defName.ToLower().Contains("vagina")))
+								list.Add(heddif);
+
+							foreach (Hediff heddif in list)
+								pawn.health.hediffSet.hediffs.Remove(heddif);
+
+							if (hed != null)
+								pawn.health.AddHediff(hed, bpr);
+						}
+						Vaginas = vaginas.selectone;
+					}
+					else if (bpr == bpr_genitalia && Penises != penises.selectone)
+					{
+						if (pawn.needs.TryGetNeed<Need_Food>().CurLevel > 0.5f)
+						{
+							pawn.needs.food.CurLevel -= 0.5f;
+							List<Hediff> list = new List<Hediff>();
+							foreach (Hediff heddif in pawn.health.hediffSet.hediffs.Where(x =>
+									x.Part == bpr &&
+									x.def.defName.ToLower().Contains("penis") ||
+									x.def.defName.ToLower().Contains("tentacle")))
+								list.Add(heddif);
+
+							foreach (Hediff heddif in list)
+								pawn.health.hediffSet.hediffs.Remove(heddif);
+
+							if (hed != null)
+								pawn.health.AddHediff(hed, bpr);
+						}
+						Penises = penises.selectone;
+					}
+					//Log.Message("end ");
+				}
+			}
 		}
 
 		public override void DoWindowContents(Rect inRect)