diff --git a/src/endWeek/economics/personalNotes.js b/src/endWeek/economics/personalNotes.js
new file mode 100644
index 0000000000000000000000000000000000000000..46d54b6885b24ec64dd7a1703b433d115c176f9e
--- /dev/null
+++ b/src/endWeek/economics/personalNotes.js
@@ -0,0 +1,489 @@
+/**
+ * @returns {DocumentFragment}
+ */
+App.EndWeek.personalNotes = function() {
+	const el = new DocumentFragment();
+	let r = [];
+	let _milk;
+	let _milkSale;
+	if (V.useTabs === 0) {
+		App.UI.DOM.appendNewElement("h2", el, `Personal Notes`);
+	}
+	// <br>
+	if (V.playerAging !== 0) {
+		r.push(`Your birthday is `);
+		if (V.PC.birthWeek === 51) {
+			r.push(`next week`);
+			if (V.playerAging === 2) {
+				r.push(`; you'll be turning ${V.PC.actualAge + 1}`);
+			}
+		} else {
+			r.push(`in ${52 - V.PC.birthWeek} weeks`);
+		}
+		r.push(`.`);
+	}
+	r.push(App.Desc.Player.boobs());
+	r.push(App.Desc.Player.belly());
+	r.push(App.Desc.Player.crotch());
+	r.push(App.Desc.Player.butt());
+	if (V.PC.lactation > 0) {
+		if (V.PC.rules.lactation !== "none" && V.PC.rules.lactation !== "induce") {
+			V.PC.lactationDuration = 2;
+			if (V.PC.rules.lactation === "sell") {
+				/* watch this be a disaster */
+				_milk = milkAmount(V.PC);
+				r.push(`Whenever you have a free moment and a chest swollen with milk, you spend your time attached to the nearest milker. As a result, you produce${_milk} liters of sellable milk over the week.`);
+				if (V.arcologies[0].FSPastoralistLaw === 1) {
+					_milkSale = _milk * (28 + Math.trunc(V.arcologies[0].FSPastoralist / 30));
+					r.push(`Since breast milk is ${V.arcologies[0].name}'s only legal dairy product, and yours is in a class all of its own, society can't get enough of it and you make <span class="yellowgreen">${cashFormat(_milkSale)}.</span>`);
+				} else if ((V.arcologies[0].FSPastoralist !== "unset")) {
+					_milkSale = _milk * (12 + Math.trunc(V.arcologies[0].FSPastoralist / 30));
+					r.push(`Since milk is fast becoming a major part of the ${V.arcologies[0].name}'s dietary culture, and yours is in a class all of its own, you make <span class="yellowgreen">${cashFormat(_milkSale)}.</span>`);
+				} else {
+					_milkSale = _milk * 8;
+					r.push(`Your milk is sold for <span class="yellowgreen">${cashFormat(_milkSale)}.</span>`);
+				}
+				cashX(_milkSale, "personalBusiness");
+			} else {
+				r.push(`You regularly see to your breasts to make sure your milk production doesn't dry up; be it by hand, milker, or mouth, you keep yourself comfortably drained.`);
+			}
+		} else {
+			if (V.PC.belly < 1500) {
+				V.PC.lactationDuration--;
+				if (V.PC.lactationDuration === 0) {
+					r.push(`With no reason to continue production, your <span class="yellow">lactation has stopped.</span>`);
+					V.PC.lactation = 0;
+				}
+			}
+		}
+	}
+	if (V.PC.preg > 0) {
+		const _oldCount = V.PC.pregType;
+		if (V.PC.preg <= 2) {
+			fetalSplit(V.PC, 1000);
+			WombCleanYYFetuses(V.PC);
+		}
+		if (V.pregnancyMonitoringUpgrade === 1) {
+			if (_oldCount < V.PC.pregType) {
+				r.push(`While making use of the advanced pregnancy monitoring equipment, you are surprised to find <span class="lime">your womb is a little more occupied than last checkup.</span>`);
+			} else if (_oldCount > V.PC.pregType) {
+				r.push(`While making use of the advanced pregnancy monitoring equipment, you are surprised to find <span class="orange">your womb houses less life than last checkup.</span>`);
+				if (V.PC.pregType === 0) {
+					r.push(`For all intents and purposes, <span class="yellow">you are no longer pregnant.</span>`);
+					TerminatePregnancy(V.PC);
+				}
+			}
+		} else if (_oldCount > V.PC.pregType && V.PC.pregType === 0) {
+			TerminatePregnancy(V.PC);
+		}
+		if (V.PC.preg === 15) {
+			if (V.PC.pregKnown === 0) {
+				r.push(`Your areolae have gotten dark. Some cursory tests reveal <span class="lime">you are about fifteen weeks pregnant.</span> How did that manage to slip past you?`);
+				V.PC.pregKnown = 1;
+			} else {
+				r.push(`Your areolae have gotten dark. Just another step along your pregnancy.`);
+			}
+		} else if (V.PC.belly >= 1500) {
+			if ((V.PC.preg > 20) && (V.PC.lactation === 0)) {
+				if (V.PC.preg > random(18, 30)) {
+					r.push(`A moist sensation on your breasts draws your attention; <span class="lime">your milk has come in.</span>`);
+					V.PC.lactation = 1;
+				}
+			}
+			if (V.PC.lactation === 1) {
+				V.PC.lactationDuration = 2;
+			}
+		}
+		if (V.PC.preg >= V.PC.pregData.normalBirth / 4) {
+			const _gigantomastiaMod = V.PC.geneticQuirks.gigantomastia === 2 ? (V.PC.geneticQuirks.macromastia === 2 ? 3 : 2) : 1;
+			/* trim this down */
+			let _boobTarget;
+			if (V.PC.geneMods.NCS === 1) {
+				_boobTarget = 100;
+			} else if (V.PC.geneticQuirks.androgyny === 2) {
+				_boobTarget = 400;
+			} else if (V.PC.physicalAge >= 18) {
+				if (V.PC.pregType >= 8) {
+					_boobTarget = 1500;
+					/* 2000 */
+				} else if (V.PC.pregType >= 5) {
+					_boobTarget = 1400;
+				} else if (V.PC.pregType >= 2) {
+					_boobTarget = 1000;
+				} else {
+					_boobTarget = 800;
+				}
+			} else if (V.PC.physicalAge >= 13) {
+				if (V.PC.pregType >= 8) {
+					_boobTarget = 1500;
+					/* 1800 */
+				} else if (V.PC.pregType >= 5) {
+					_boobTarget = 1400;
+				} else if (V.PC.pregType >= 2) {
+					_boobTarget = 1000;
+				} else {
+					_boobTarget = 800;
+				}
+			} else if (V.PC.physicalAge >= 8) {
+				if (V.PC.pregType >= 8) {
+					_boobTarget = 1400;
+				} else if (V.PC.pregType >= 5) {
+					_boobTarget = 1000;
+				} else if (V.PC.pregType >= 2) {
+					_boobTarget = 800;
+				} else {
+					_boobTarget = 600;
+				}
+			} else {
+				if (V.PC.pregType >= 8) {
+					_boobTarget = 1000;
+				} else if (V.PC.pregType >= 5) {
+					_boobTarget = 8000;
+				} else if (V.PC.pregType >= 2) {
+					_boobTarget = 600;
+				} else {
+					_boobTarget = 400;
+				}
+			}
+			/* _boobTarget *= _gigantomastiaMod;*/
+			if (V.PC.geneMods.NCS === 0) {
+				/*
+				if (V.PC.pregType >= 30) {
+					if (V.PC.weight <= 65) {
+						r.push(`${He} has <span class="lime">gained weight</span> in order to better sustain ${himself} and ${his} children.`);
+						V.PC.weight += 1;
+					}
+					if (random(1,100) > 60) {
+						if ((V.PC.boobs - V.PC.boobsImplant) < _boobTarget) {
+							r.push(`${His} breasts <span class="lime">greatly swell</span> to meet the upcoming demand.`);
+							V.PC.boobs += 100;
+							if (V.PC.boobShape !== "saggy" && V.PC.preg > V.PC.pregData.normalBirth/1.25 && (V.PC.breastMesh !== 1) && (V.PC.drugs !== "sag-B-gone")) {
+								r.push(`${His} immensely engorged <span class="orange">breasts become saggy</span> in the last stages of ${his} pregnancy as ${his} body undergoes changes in anticipation of the forthcoming birth.`);
+								V.PC.boobShape = "saggy";
+							}
+						}
+						if (V.PC.geneticQuirks.androgyny !== 2) {
+							if (V.PC.hips < 2) {
+								r.push(`${His} hips <span class="lime">widen</span> for ${his} upcoming birth.`);
+								V.PC.hips += 1;
+							}
+							if (V.PC.butt < 14) {
+								r.push(`${His} butt <span class="lime">swells with added fat</span> from ${his} changing body.`);
+								V.PC.butt += 1;
+							}
+						}
+					}
+				} else if ((V.PC.pregType >= 10)) {
+					if (random(1,100) > 80 && ((V.PC.boobs - V.PC.boobsImplant) < _boobTarget)) {
+						V.PC.boobs += 50;
+						if (V.PC.boobShape !== "saggy" && (V.PC.breastMesh !== 1) && (V.PC.drugs !== "sag-B-gone")) {
+							if (V.PC.preg > random(V.PC.pregData.normalBirth/1.25, V.PC.pregData.normalBirth*2.05)) {
+								r.push(`${His} swollen <span class="orange">breasts become saggy</span> in the last stages of ${his} pregnancy as ${his} body undergoes changes in anticipation of the forthcoming birth.`);
+								V.PC.boobShape = "saggy";
+							}
+						}
+					}
+				}
+				*/
+				if ((V.PC.boobs - V.PC.boobsImplant) < _boobTarget) {
+					if (V.PC.boobs >= 1400) {
+						if (random(1, 100) > 90) {
+							r.push(`Unsurprisingly, your cow tits <span class="lime">have swollen even larger</span> with your pregnancy.`);
+							V.PC.boobs += 25;
+						}
+					} else if (V.PC.boobs >= 1200) {
+						if (random(1, 100) > 90) {
+							r.push(`Your already huge breasts have <span class="lime">grown even heavier</span> with your pregnancy.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 1400) {
+								r.push(`Your desk is steadily starting to disappear; <span class="lime">H-cups will do that.</span>`);
+							}
+						}
+					} else if (V.PC.boobs >= 1000) {
+						if (random(1, 100) > 75) {
+							r.push(`Your already large breasts have <span class="lime">grown even larger</span> with your pregnancy.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 1200) {
+								r.push(`Nothing fits comfortably now; your tailor says <span class="lime">it's your G-cup knockers.</span> Your back agrees.`);
+							}
+						}
+					} else if (V.PC.boobs >= 800) {
+						if (random(1, 100) > 75) {
+							r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming child`);
+							if (V.PC.pregType > 1) {
+								r.push(`ren`);
+							}
+							r.push(`.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 1000) {
+								r.push(`You popped your bra when you put it on; <span class="lime">time to order some F-cups.</span>`);
+							}
+						}
+					} else if (V.PC.boobs >= 650) {
+						if (random(1, 100) > 80) {
+							r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming child`);
+							if (V.PC.pregType > 1) {
+								r.push(`ren`);
+							}
+							r.push(`.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 800) {
+								r.push(`Their prominence, and a quick measuring, reveals <span class="lime">you now sport DDs.</span>`);
+							}
+						}
+					} else if (V.PC.boobs >= 500) {
+						if (random(1, 100) > 80) {
+							r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming child`);
+							if (V.PC.pregType > 1) {
+								r.push(`ren`);
+							}
+							r.push(`.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 650) {
+								r.push(`They're big, sensitive, <span class="lime">and now a D-cup.</span>`);
+							}
+						}
+					} else if (V.PC.boobs >= 400) {
+						if (random(1, 100) > 80) {
+							r.push(`Your breasts have <span class="lime">gotten heavier</span> alongside your pregnancy.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 500) {
+								r.push(`They spill dramatically out of your bra now, which means <span class="lime">you've graduated to a C-cup.</span>`);
+							}
+						}
+					} else if (V.PC.boobs >= 300) {
+						if (random(1, 100) > 75) {
+							r.push(`Your breasts have <span class="lime">swollen</span> alongside your pregnancy.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 400) {
+								r.push(`A quick measuring after your top started to feel too constricting reveals <span class="lime">you are now a B-cup!</span>`);
+							}
+						}
+					} else {
+						if (random(1, 100) > 75) {
+							r.push(`Your chest <span class="lime">has filled out slightly</span> with your pregnancy.`);
+							V.PC.boobs += 25;
+							if (V.PC.boobs >= 300) {
+								r.push(`They've gotten so big that <span class="lime">you can now fill an A-cup bra.</span>`);
+							}
+						}
+					}
+					if (_sagCheck) {
+						if (V.PC.boobShape !== "saggy" && V.PC.preg > random(V.PC.pregData.normalBirth / 1.25, V.PC.pregData.normalBirth * 2.5) && (V.PC.breastMesh !== 1) && (V.PC.drugs !== "sag-B-gone")) {
+							r.push(`${His} <span class="orange">breasts become saggy</span> in the last stages of ${his} pregnancy as ${his} body undergoes changes in anticipation of the forthcoming birth.`);
+							V.PC.boobShape = "saggy";
+						}
+					}
+				}
+				/*
+				if (V.PC.preg > V.PC.pregData.normalBirth/1.25 && V.PC.physicalAge >= 18 && V.PC.hips === 1 && V.PC.hipsImplant === 0 && random(1,100) > 90) {
+					r.push(`${His} hips <span class="lime">widen</span> to better support ${his} gravidity.`);
+					V.PC.hips += 1;
+				} else if (V.PC.preg > V.PC.pregData.normalBirth/1.42 && V.PC.physicalAge >= 18 && V.PC.hips === 0 && V.PC.hipsImplant === 0 && random(1,100) > 70) {
+					r.push(`${His} hips <span class="lime">widen</span> to better support ${his} gravidity.`);
+					V.PC.hips += 1;
+				}
+				*/
+			}
+		}
+		/* --------------- main labor triggers: -------- */
+		if (V.PC.preg > V.PC.pregData.normalBirth / 8) {
+			if (WombBirthReady(V.PC, V.PC.pregData.normalBirth * 1.075) > 0) { // check for really ready fetuses - 43 weeks - max, overdue
+				V.PC.labor = 1;
+			} else if (WombBirthReady(V.PC, V.PC.pregData.normalBirth) > 0 && (random(1, 100) > 50)) { // check for really ready fetuses - 40 weeks - normal*/
+				V.PC.labor = 1;
+			} else if (WombBirthReady(V.PC, V.PC.pregData.normalBirth / 1.1111) > 0 && (random(1, 100) > 90)) { // check for really ready fetuses - 36 weeks minimum */
+				V.PC.labor = 1;
+			}
+			if (V.PC.labor === 1) {
+				// <br>
+				if (V.PC.birthsTotal > 0) {
+					r.push(`<span class="red">A dull cramp runs down your middle.</span> You'll be giving birth soon.`);
+				} else {
+					r.push(`You begin to experience <span class="red">odd cramps</span> in your lower body. Contractions, more than likely.`);
+				}
+			}
+			/*
+			if (V.dangerousPregnancy === 1 && V.PC.labor !== 1) {
+				if (V.PC.pregAdaptation < 500) {
+					_miscarriageChance = -10;
+					_miscarriageChance += ((V.PC.bellyPreg/1000)-V.PC.pregAdaptation);
+		r.push(` // this could use to not be linear`);
+					if (V.PC.inflation > 0) {
+						_miscarriageChance += 10;
+					}
+					_miscarriageChance -= (V.PC.curatives === 1 ? 100 : 0);
+					if (V.PC.health.health < -20) {
+						_miscarriageChance -= (V.PC.health.health);
+					} else if (V.PC.health.health > 80) {
+						_miscarriageChance -= (V.PC.health.health/10);
+					}
+					if (V.PC.weight < -50) {
+						_miscarriageChance -= (V.PC.weight);
+					}
+					if (V.PC.bellyAccessory === "a support band") {
+						_miscarriageChance -= 30;
+					}
+					_miscarriageChance = Math.round(_miscarriageChance);
+					if (_miscarriageChance > random(0,100)) {
+						_chance = random(1,100);
+						if (V.PC.preg >= V.PC.pregData.normalBirth/1.33) {
+							V.PC.labor = 1, V.birthee = 1;
+							_miscarriage = 1;
+						} else if (V.PC.preg > V.PC.pregData.normalBirth/1.48) {
+							V.PC.labor = 1, V.PC.prematureBirth = 1;
+							_miscarriage = 1;
+						} else if (V.PC.preg > V.PC.pregData.normalBirth/1.6 && _chance > 10) {
+							V.PC.labor = 1, V.PC.prematureBirth = 1;
+							_miscarriage = 1;
+						} else if (V.PC.preg > V.PC.pregData.normalBirth/1.73 && _chance > 40) {
+							V.PC.labor = 1, V.PC.prematureBirth = 1;
+							_miscarriage = 1;
+						} else if (V.PC.preg > V.PC.pregData.normalBirth/1.81 && _chance > 75) {
+							V.PC.labor = 1, V.PC.prematureBirth = 1;
+							_miscarriage = 1;
+						} else {
+							r.push(`${His} overwhelmed body has <span class="orange">forced ${him} to miscarry,</span> possibly saving ${his} life.`);
+							V.PC.preg = 0;
+							if (V.PC.sexualFlaw === "breeder") {
+								r.push(`${He} is <span class="mediumorchid">filled with violent, all-consuming hatred</span> at ${himself} for failing to carry to term and you for allowing this to happen.`);
+								if (V.PC.pregType > 4) {
+									r.push(`The loss of so many children at once <span class="red">shatters the distraught breeder's mind.</span>`);
+									V.PC.fetish = "mindbroken", V.PC.behavioralQuirk = "none", V.PC.behavioralFlaw = "none", V.PC.sexualQuirk = "none", V.PC.sexualFlaw = "none", V.PC.devotion = 0, V.PC.trust = 0;
+								} else {
+									r.push(`${He} cares little for what punishment awaits ${his} actions.`);
+									V.PC.devotion -= 25*V.PC.pregType;
+								}
+							} else if (V.PC.devotion < -50) {
+								r.push(`${He} is <span class="mediumorchid">filled with violent, consuming hatred</span> and <span class="gold">fear.</span> Even though ${he} knew ${his} bab`);
+	if (V.PC.pregType > 1) {
+		r.push(`ies were`);
+	} else {
+		r.push(`y was`);
+	}
+		r.push(` likely destined for a slave orphanage, it seems ${he} cared for `);
+	if (V.PC.pregType > 1) {
+		r.push(`them`);
+	} else {
+		r.push(`it`);
+	}
+		r.push(` and blames you for the loss.`);
+								V.PC.devotion -= 25, V.PC.trust -= 25;
+							} else if (V.PC.devotion < -20) {
+								r.push(`${He} is <span class="mediumorchid">afflicted by desperate, inconsolable grief</span> and <span class="gold">horror.</span> Even though ${he} knew ${his} bab`);
+	if (V.PC.pregType > 1) {
+		r.push(`ies were`);
+	} else {
+		r.push(`y was`);
+	}
+		r.push(` likely destined for a slave orphanage, it seems ${he} cared for `);
+	if (V.PC.pregType > 1) {
+		r.push(`them`);
+	} else {
+		r.push(`it`);
+	}
+		r.push(`.`);
+								V.PC.devotion -= 10, V.PC.trust -= 20;
+							} else if (V.PC.fetish === "pregnancy") {
+								r.push(`${He} is <span class="mediumorchid">filled with deep regret</span> and <span class="gold">fear.</span>`);
+								if (V.PC.fetishKnown === 1) {
+									r.push(`To a pregnancy fetishist, ending it like this hurts far worse than birth ever would.`);
+								} else {
+									r.push(`It appears ${he} was more attached to ${his} baby bump than ${he} let on and is hurting even more for it.`);
+								}
+								_fetishModifier = V.PC.fetishStrength/2;
+								V.PC.devotion -= 1*_fetishModifier, V.PC.trust -= 1*_fetishModifier;
+							} else if (V.PC.devotion <= 20) {
+								r.push(`${He} is <span class="mediumorchid">consumed by enduring sorrow</span> and <span class="gold">horror.</span> Even though ${he} knew ${his} bab`);
+	if (V.PC.pregType > 1) {
+		r.push(`ies were`);
+	} else {
+		r.push(`y was`);
+	}
+		r.push(` likely destined for a slave orphanage, it seems ${he} cared for `);
+	if (V.PC.pregType > 1) {
+		r.push(`them`);
+	} else {
+		r.push(`it`);
+	}
+		r.push(`.`);
+								V.PC.devotion -= 5, V.PC.trust -= 5;
+							} else if (V.PC.devotion <= 50) {
+								r.push(`${He} is dully obedient. ${He} has been broken to slave life so thoroughly that even this is neither surprising nor affecting.`);
+							} else {
+								r.push(`${He} is <span class="mediumorchid">disappointed by this development</span> and <span class="gold">afraid</span> of your reaction. By failing to carry to term, ${he} has failed your will.`);
+								V.PC.devotion -= 10, V.PC.trust -= 10;
+							}
+							TerminatePregnancy(V.PC);
+							actX(V.PC, "abortions");
+							if (V.PC.abortionTat > -1) {
+								V.PC.abortionTat++;
+								r.push(`The temporary tattoo of a child has been replaced with ${his} `);
+	V.ordinalSuffix(V.PC.abortionTat)
+		r.push(` crossed out infant.`);
+								cashX(forceNeg(V.modCost), "slaveMod", V.PC);
+							}
+							_miscarriage = 1;
+						}
+					}
+				}
+				if (V.seeExtreme === 1) {
+					if (_miscarriage !== 1 && V.PC.bellyPreg >= 100000 && V.PC.geneMods.rapidCellGrowth !== 1) {
+		r.push(` // If ${he} can't relieve the pressure that way, will ${he} hold?`);
+						if (V.PC.bellyPreg >= 500000 || V.PC.wombImplant !== "restraint") {
+							if ((V.PC.belly > (V.PC.pregAdaptation*3200)) || V.PC.bellyPreg >= 500000) {
+								_burstChance = -80;
+								_burstChance += ((V.PC.belly/1000)-V.PC.pregAdaptation);
+		r.push(` // this could use to not be linear`);
+								if (V.PC.health.health < -20) {
+									_burstChance -= (V.PC.health.health);
+								} else if (V.PC.health.health > 80) {
+									_burstChance -= (V.PC.health.health/10);
+								}
+								if (V.PC.weight < 0) {
+									_burstChance -= V.PC.weight;
+								}
+								_burstChance -= V.PC.bellySag;
+								_burstChance -= V.PC.muscles;
+								if (V.PC.bellyAccessory === "a support band") {
+									_burstChance -= 10;
+								}
+								if (V.PC.pregControl === "slow gestation") {
+									_burstChance -= 20;
+								}
+								if (V.PC.assignment === "get treatment in the clinic") {
+									if (S.Nurse) {
+										_burstChance -= 100;
+									} else {
+										_burstChance -= 30;
+									}
+								} else if (V.PC.assignment === "work in the dairy" && V.dairyPregSetting === 3) {
+									_burstChance -= 250;
+								}
+								if (V.PC.pregControl === "speed up") {
+									if (_burstChance > 0) {
+										_burstChance *= 4;
+									}
+								}
+								_burstChance = Math.round(_burstChance);
+								if (_burstChance > random(0,100)) {
+									V.PC.burst = 1;
+								} else {
+									r.push(`Constant <span class="red">`);
+	if (V.PC.geneticQuirks.uterineHypersensitivity === 2) {
+		r.push(`painful orgasms`);
+	} else {
+		r.push(`sharp pains`);
+	}
+		r.push(`</span> from ${his} womb strongly suggest <span class="red">${his} body is beginning to break.</span>`);
+								}
+							}
+						}
+					}
+				}
+			}
+			*/
+		}
+	}
+	return el;
+};