diff --git a/Defs/RecordDefs/Records.xml b/Defs/RecordDefs/Records.xml
index aca5b6ea76007820884aabd6c79095448975704a..86ae118a03ed069a68a8c99242aec1d4d6dc94f4 100644
--- a/Defs/RecordDefs/Records.xml
+++ b/Defs/RecordDefs/Records.xml
@@ -112,8 +112,8 @@
 
 	<RecordDef>
 		<defName>GetRapedAsComfortPrisoner</defName>
-		<label>rapes experienced as a designation target</label>
-		<description>The number of times I got raped as a comfort prisoner/colonist.</description>
+		<label>rapes experienced as a comfort target</label>
+		<description>The number of times I was used to comfort someone.</description>
 		<type>Int</type>
 	</RecordDef>
 
diff --git a/Defs/ThoughtDefs/Thoughts_Virgin.xml b/Defs/ThoughtDefs/Thoughts_Virgin.xml
index e50c560caa203dbe9a27c7f1e882f236831ae856..f74790367d3f3c9bbbd853db5c55ff84db794b1e 100644
--- a/Defs/ThoughtDefs/Thoughts_Virgin.xml
+++ b/Defs/ThoughtDefs/Thoughts_Virgin.xml
@@ -27,4 +27,17 @@
 			</li>
 		</stages>
 	</ThoughtDef>
+	
+	<ThoughtDef>
+		<defName>TookVirginity</defName>
+		<thoughtClass>Thought_Memory</thoughtClass>
+		<durationDays>10.0</durationDays>
+		<stages>
+			<li>
+				<label>Took virginity</label>
+				<description>I've taken someone's virginity.</description>
+				<baseMoodEffect>10</baseMoodEffect>
+			</li>
+		</stages>
+	</ThoughtDef>
 </Defs>
diff --git a/Source/Common/SexUtility.cs b/Source/Common/SexUtility.cs
index cdef2318b26170ef0db33182a8d239a50bce9ebc..e8327f18ea852c8177e09aca285c93763f96782a 100644
--- a/Source/Common/SexUtility.cs
+++ b/Source/Common/SexUtility.cs
@@ -341,9 +341,7 @@ namespace rjw
 			//apply cum to body:
 			SemenHelper.calculateAndApplySemen(pawn, partner, sextype);
 
-
 			//--Log.Message("SexUtility::aftersex( " + pawn_name + ", " + partner_name + " ) - checking satisfaction");
-			Satisfy(pawn, partner, sextype, rape, isCoreLovin);
 
 			if (!pawn.Dead && !partner.Dead)
 			{
@@ -355,6 +353,7 @@ namespace rjw
 			}
 
 			xxx.UpdateRecords(pawn, partner, sextype, rape, isCoreLovin);
+			Satisfy(pawn, partner, sextype, rape, isCoreLovin);
 
 			CheckTraitGain(pawn);
 			CheckTraitGain(partner);
@@ -376,8 +375,8 @@ namespace rjw
 			SemenHelper.calculateAndApplySemen(pawn, null, sextype);
 
 			//--Log.Message("SexUtility::aftersex( " + pawn_name + ", " + partner_name + " ) - checking satisfaction");
-			Satisfy(pawn, null, sextype);
 			xxx.UpdateRecords(pawn, null, sextype);
+			Satisfy(pawn, null, sextype);
 
 			// No traits from solo. Enable if some are edded. (Voyerism?)
 			//check_trait_gain(pawn);
diff --git a/Source/Common/xxx.cs b/Source/Common/xxx.cs
index 5bf0d51079dec76ce263611d8b967cb91ccfac6a..25b7015d19ecddf322515ecf667abd764be3981b 100644
--- a/Source/Common/xxx.cs
+++ b/Source/Common/xxx.cs
@@ -447,6 +447,26 @@ namespace rjw
 
 		public static bool is_Virgin(Pawn pawn)
 		{
+			/*
+			Log.Message("xxx::is_Virgin( " + xxx.get_pawnname(pawn));
+			Log.Message("xxx::is_Virgin( GetRapedAsComfortPrisoner " + pawn.records.GetValue(GetRapedAsComfortPrisoner));
+			Log.Message("xxx::is_Virgin( GetRapedAsComfortPrisoner " + pawn.records.GetValue(GetRapedAsComfortPrisoner));
+			Log.Message("xxx::is_Virgin( CountOfSex " + pawn.records.GetValue(CountOfSex));
+			Log.Message("xxx::is_Virgin( CountOfSexWithHumanlikes " + pawn.records.GetValue(CountOfSexWithHumanlikes));
+			Log.Message("xxx::is_Virgin( CountOfSexWithAnimals " + pawn.records.GetValue(CountOfSexWithAnimals));
+			Log.Message("xxx::is_Virgin( CountOfSexWithInsects " + pawn.records.GetValue(CountOfSexWithInsects));
+			Log.Message("xxx::is_Virgin( CountOfSexWithOthers " + pawn.records.GetValue(CountOfSexWithOthers));
+			Log.Message("xxx::is_Virgin( CountOfSexWithCorpse " + pawn.records.GetValue(CountOfSexWithCorpse));
+			Log.Message("xxx::is_Virgin( CountOfWhore " + pawn.records.GetValue(CountOfWhore));
+			Log.Message("xxx::is_Virgin( CountOfRapedHumanlikes " + pawn.records.GetValue(CountOfRapedHumanlikes));
+			Log.Message("xxx::is_Virgin( CountOfBeenRapedByHumanlikes " + pawn.records.GetValue(CountOfBeenRapedByHumanlikes));
+			Log.Message("xxx::is_Virgin( CountOfRapedAnimals " + pawn.records.GetValue(CountOfRapedAnimals));
+			Log.Message("xxx::is_Virgin( CountOfBeenRapedByAnimals " + pawn.records.GetValue(CountOfBeenRapedByAnimals));
+			Log.Message("xxx::is_Virgin( CountOfRapedInsects " + pawn.records.GetValue(CountOfRapedInsects));
+			Log.Message("xxx::is_Virgin( CountOfBeenRapedByInsects " + pawn.records.GetValue(CountOfBeenRapedByInsects));
+			Log.Message("xxx::is_Virgin( CountOfRapedOthers " + pawn.records.GetValue(CountOfRapedOthers));
+			Log.Message("xxx::is_Virgin( CountOfBeenRapedByOthers " + pawn.records.GetValue(CountOfBeenRapedByOthers));
+			*/
 			//Inaccurate, because of how relatives and ex-lovers and such are generated
 			return pawn.records.GetValue(GetRapedAsComfortPrisoner) == 0 &&
 					pawn.records.GetValue(CountOfSex) == 0 &&
@@ -1607,9 +1627,19 @@ namespace rjw
 					pawn.records.Increment(pawnIsRaper ? CountOfRapedOthers : CountOfBeenRapedByOthers);
 				}
 			}
-			if (isVirginSex && currentThought != null && !is_animal(pawn))
+			
+			/*
+			Log.Message("xxx::UpdateRecordsInternal( " + xxx.get_pawnname(pawn));
+			Log.Message("xxx::UpdateRecordsInternal( " + xxx.get_pawnname(partner));
+			Log.Message("xxx::UpdateRecordsInternal( isRape " + isRape);
+			Log.Message("xxx::UpdateRecordsInternal( isLoveSex " + isLoveSex);
+			Log.Message("xxx::UpdateRecordsInternal( isVirginSex " + isVirginSex);
+			Log.Message("xxx::UpdateRecordsInternal( pawnIsRaper " + pawnIsRaper);
+			Log.Message("xxx::UpdateRecordsInternal( currentThought " + currentThought);
+			Log.Message("");
+			*/
+			if (!is_animal(pawn) && isVirginSex && currentThought != null) //&& (sextype == rjwSextype.Vaginal || sextype == rjwSextype.DoublePenetration))
 			{
-				//added by Hoge. This works fine, but need balance and discuss about need this or not
 				pawn.needs.mood.thoughts.memories.TryGainMemory((Thought_Memory)ThoughtMaker.MakeThought(currentThought), partner);
 			}
 		}
@@ -1705,17 +1735,12 @@ namespace rjw
 			}
 			return stage > 1;
 		}
-		//add variant for eggs
+		//add variant for eggs?
 		public static void processBrokenPawn(Pawn pawn)
 		{
-			// Ed86:
 			// Called after rape/breed
 			if (pawn is null)
-			{
-				//Log.Error("xxx::processBrokenPawn - pawn is null");
 				return;
-			}
-			pawn.records.Increment(GetRapedAsComfortPrisoner);
 
 			if (is_human(pawn) && !pawn.Dead && pawn.records != null)
 			{
diff --git a/Source/Comps/CompRJW.cs b/Source/Comps/CompRJW.cs
index 67d4fbacf52190b7eeddac3ed3a37a5dc044d294..6be8ab1790e0c0b808e5beddac9bad854b24af65 100644
--- a/Source/Comps/CompRJW.cs
+++ b/Source/Comps/CompRJW.cs
@@ -262,6 +262,7 @@ namespace rjw
 
 			//roll random RJW orientation
 			Comp(pawn).orientation = xxx.is_animal(pawn) ? RollAnimalOrientation() : RollOrientation();
+			//Asexual nymp re-roll
 			if (xxx.is_nympho(pawn))
 				while (Comp(pawn).orientation == Orientation.Asexual)
 				{
diff --git a/Source/JobDrivers/JobDriver_PrisonerComfortRapin.cs b/Source/JobDrivers/JobDriver_PrisonerComfortRapin.cs
index 7e2e56f81373664dcf471ab2c69af37b50b740e2..87df4f76740d89f9ce2d9c63b1de3daa889a743c 100644
--- a/Source/JobDrivers/JobDriver_PrisonerComfortRapin.cs
+++ b/Source/JobDrivers/JobDriver_PrisonerComfortRapin.cs
@@ -148,6 +148,7 @@ namespace rjw
 				{
 					// Trying to add some interactions and social logs
 					SexUtility.ProcessSex(pawn, Target, true);
+					Target.records.Increment(xxx.GetRapedAsComfortPrisoner);
 				},
 				defaultCompleteMode = ToilCompleteMode.Instant
 			};