diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 5f6184ec92948d559b931c02f12a5e921b1b12f4..d46d72ced258a7bc889551645543eeca98a21eb2 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -88,6 +88,9 @@ window.CategoryAssociatedGroup = Object.freeze({
 		'slaveAssignmentConcubine',
 		'slaveAssignmentMastersuite'
 		],
+	AGENT: [
+		'slaveAssignmentAgent'
+		],
 	ARCADE: [
 		'arcade',
 		'slaveAssignmentArcade'
diff --git a/src/uncategorized/costsBudget.js b/src/uncategorized/costsBudget.js
index 8338b3d079bb502f4c7ee6b505bd202a9f4a9dc5..e71a2af9274d4b90aaec32b5f410042404a3dd8f 100644
--- a/src/uncategorized/costsBudget.js
+++ b/src/uncategorized/costsBudget.js
@@ -563,205 +563,209 @@ App.UI.Budget.Cost = function() {
 	createSectionHeader("Facilities");
 
 	// PENTHOUSE
-	generateRowShowTotal("Penthouse", "PENTHOUSE");
-	generateRowTracking("Rest", "slaveAssignmentRest");
-	generateRowTracking("RestVign", "slaveAssignmentRestVign");
-	generateRowTracking("Fucktoy", "slaveAssignmentFucktoy");
-	generateRowTracking("Classes", "slaveAssignmentClasses");
-	generateRowTracking("House", "slaveAssignmentHouse");
-	generateRowTracking("HouseVign", "slaveAssignmentHouseVign");
-	generateRowTracking("Whore", "slaveAssignmentWhore");
-	generateRowTracking("WhoreVign", "slaveAssignmentWhoreVign");
-	generateRowTracking("Public", "slaveAssignmentPublic");
-	generateRowTracking("PublicVign", "slaveAssignmentPublicVign");
-	generateRowTracking("Subordinate", "slaveAssignmentSubordinate");
-	generateRowTracking("Milked", "slaveAssignmentMilked");
-	generateRowTracking("MilkedVign", "slaveAssignmentMilkedVign");
-	generateRowTracking("ExtraMilk", "slaveAssignmentExtraMilk");
-	generateRowTracking("ExtraMilkVign", "slaveAssignmentExtraMilkVign");
-	generateRowTracking("Gloryhole", "slaveAssignmentGloryhole");
-	generateRowTracking("Confinement", "slaveAssignmentConfinement");
+	generateRowGroup("Penthouse", "PENTHOUSE");
+	generateRowCategory("Rest", "slaveAssignmentRest");
+	generateRowCategory("RestVign", "slaveAssignmentRestVign");
+	generateRowCategory("Fucktoy", "slaveAssignmentFucktoy");
+	generateRowCategory("Classes", "slaveAssignmentClasses");
+	generateRowCategory("House", "slaveAssignmentHouse");
+	generateRowCategory("HouseVign", "slaveAssignmentHouseVign");
+	generateRowCategory("Whore", "slaveAssignmentWhore");
+	generateRowCategory("WhoreVign", "slaveAssignmentWhoreVign");
+	generateRowCategory("Public", "slaveAssignmentPublic");
+	generateRowCategory("PublicVign", "slaveAssignmentPublicVign");
+	generateRowCategory("Subordinate", "slaveAssignmentSubordinate");
+	generateRowCategory("Milked", "slaveAssignmentMilked");
+	generateRowCategory("MilkedVign", "slaveAssignmentMilkedVign");
+	generateRowCategory("ExtraMilk", "slaveAssignmentExtraMilk");
+	generateRowCategory("ExtraMilkVign", "slaveAssignmentExtraMilkVign");
+	generateRowCategory("Gloryhole", "slaveAssignmentGloryhole");
+	generateRowCategory("Confinement", "slaveAssignmentConfinement");
 
 	// LEADERSHIP ROLES
 
 	// HEAD GIRL
 	// find passage name for HGSuite
-	generateRowShowTotal(V.HGSuiteNameCaps, "HEADGIRLSUITE", V.HGSuite, null, V.HGSuiteiIDs.length);
-	generateRowTracking("Head Girl", "slaveAssignmentHeadgirl");
-	generateRowTracking("Head Girl Fucktoys", "slaveAssignmentHeadgirlsuite");
+	generateRowGroup(V.HGSuiteNameCaps, "HEADGIRLSUITE", V.HGSuite, null, V.HGSuiteiIDs.length);
+	generateRowCategory("Head Girl", "slaveAssignmentHeadgirl");
+	generateRowCategory("Head Girl Fucktoys", "slaveAssignmentHeadgirlsuite");
 
 	// RECRUITER
-	generateRowShowTotal("Recruiter", "RECRUITER");
-	generateRowTracking("Recruiter", "slaveAssignmentRecruiter");
+	generateRowGroup("Recruiter", "RECRUITER");
+	generateRowCategory("Recruiter", "slaveAssignmentRecruiter");
 
 	// BODYGUARD
 	// find passage name for Armory
-	generateRowShowTotal("Armory", "DOJO", V.dojo, null, null);
-	generateRowTracking("Bodyguard", "slaveAssignmentBodyguard");
+	generateRowGroup("Armory", "DOJO", V.dojo, null, null);
+	generateRowCategory("Bodyguard", "slaveAssignmentBodyguard");
 
 	// CONCUBINE
-	generateRowShowTotal("Master Suite", "MASTERSUITE", V.masterSuite, "Master Suite", V.MastSiIDs.length);
-	generateRowTracking("Master Suite Maintenance", "masterSuite");
-	generateRowTracking("Master Suite Concubine", "slaveAssignmentConcubine");
-	generateRowTracking("Master Suite Fucktoys", "slaveAssignmentMastersuite");
+	generateRowGroup("Master Suite", "MASTERSUITE", V.masterSuite, "Master Suite", V.MastSiIDs.length);
+	generateRowCategory("Master Suite Maintenance", "masterSuite");
+	generateRowCategory("Master Suite Concubine", "slaveAssignmentConcubine");
+	generateRowCategory("Master Suite Fucktoys", "slaveAssignmentMastersuite");
+
+	// AGENT
+	generateRowGroup("Agent", "AGENT");
+	generateRowCategory("Agent", "slaveAssignmentAgent");
 
 	// ARCADE
-	generateRowShowTotal(V.arcadeNameCaps, "ARCADE", V.arcade, "Arcade", V.ArcadeiIDs.length);
-	generateRowTracking("Arcade Maintenance", "arcade");
-	generateRowTracking("Arcade Fuckdolls", "slaveAssignmentArcade");
+	generateRowGroup(V.arcadeNameCaps, "ARCADE", V.arcade, "Arcade", V.ArcadeiIDs.length);
+	generateRowCategory("Arcade Maintenance", "arcade");
+	generateRowCategory("Arcade Fuckdolls", "slaveAssignmentArcade");
 
 	// BROTHEL
-	generateRowShowTotal(V.brothelNameCaps, "BROTHEL", V.brothel, "Brothel", V.BrothiIDs.length);
-	generateRowTracking("Brothel Maintenance", "brothel");
-	generateRowTracking("Brothel Madam", "slaveAssignmentMadam");
-	generateRowTracking("Brothel MadamVign", "slaveAssignmentMadamVign");
-	generateRowTracking("Brothel Whore", "slaveAssignmentBrothel");
-	generateRowTracking("Brothel WhoreVign", "slaveAssignmentBrothelVign");
-	generateRowTracking("Brothel Ads", "brothelAds");
+	generateRowGroup(V.brothelNameCaps, "BROTHEL", V.brothel, "Brothel", V.BrothiIDs.length);
+	generateRowCategory("Brothel Maintenance", "brothel");
+	generateRowCategory("Brothel Madam", "slaveAssignmentMadam");
+	generateRowCategory("Brothel MadamVign", "slaveAssignmentMadamVign");
+	generateRowCategory("Brothel Whore", "slaveAssignmentBrothel");
+	generateRowCategory("Brothel WhoreVign", "slaveAssignmentBrothelVign");
+	generateRowCategory("Brothel Ads", "brothelAds");
 
 	// CELLBLOCK
-	generateRowShowTotal(V.cellblockNameCaps, "CELLBLOCK", V.cellblock, "Cellblock", V.CellBiIDs.length);
-	generateRowTracking("Cellblock Maintenance", "cellblock");
-	generateRowTracking("Cellblock Warden", "slaveAssignmentWarden");
-	generateRowTracking("Cellblock Slaves", "slaveAssignmentCellblock");
+	generateRowGroup(V.cellblockNameCaps, "CELLBLOCK", V.cellblock, "Cellblock", V.CellBiIDs.length);
+	generateRowCategory("Cellblock Maintenance", "cellblock");
+	generateRowCategory("Cellblock Warden", "slaveAssignmentWarden");
+	generateRowCategory("Cellblock Slaves", "slaveAssignmentCellblock");
 
 	// CLUB
-	generateRowShowTotal(V.clubNameCaps, "CLUB", V.club, "Club", V.ClubiIDs.length);
-	generateRowTracking("Club Maintenance", "club");
-	generateRowTracking("Club DJ", "slaveAssignmentDj");
-	generateRowTracking("Club Public", "slaveAssignmentClub");
-	generateRowTracking("Club PublicVign", "slaveAssignmentClubVign");
-	generateRowTracking("Club Ads", "clubAds");
+	generateRowGroup(V.clubNameCaps, "CLUB", V.club, "Club", V.ClubiIDs.length);
+	generateRowCategory("Club Maintenance", "club");
+	generateRowCategory("Club DJ", "slaveAssignmentDj");
+	generateRowCategory("Club Public", "slaveAssignmentClub");
+	generateRowCategory("Club PublicVign", "slaveAssignmentClubVign");
+	generateRowCategory("Club Ads", "clubAds");
 
 	// CLINIC
-	generateRowShowTotal(V.clinicNameCaps, "CLINIC", V.club, "Club", V.ClubiIDs.length);
-	generateRowTracking("Clinic Maintenance", "clinic");
-	generateRowTracking("Clinic Nurse", "slaveAssignmentNurse");
-	generateRowTracking("Clinic Slaves", "slaveAssignmentClinic");
+	generateRowGroup(V.clinicNameCaps, "CLINIC", V.club, "Club", V.ClubiIDs.length);
+	generateRowCategory("Clinic Maintenance", "clinic");
+	generateRowCategory("Clinic Nurse", "slaveAssignmentNurse");
+	generateRowCategory("Clinic Slaves", "slaveAssignmentClinic");
 
 	// DAIRY
-	generateRowShowTotal(V.dairyNameCaps, "DAIRY", V.dairy, "Dairy", V.DairyiIDs.length);
-	generateRowTracking("Dairy Maintenance", "dairy");
-	generateRowTracking("Dairy Milkmaid", "slaveAssignmentMilkmaid");
-	generateRowTracking("Dairy Cows", "slaveAssignmentDairy");
-	generateRowTracking("Dairy Cows", "slaveAssignmentDairyVign");
+	generateRowGroup(V.dairyNameCaps, "DAIRY", V.dairy, "Dairy", V.DairyiIDs.length);
+	generateRowCategory("Dairy Maintenance", "dairy");
+	generateRowCategory("Dairy Milkmaid", "slaveAssignmentMilkmaid");
+	generateRowCategory("Dairy Cows", "slaveAssignmentDairy");
+	generateRowCategory("Dairy Cows", "slaveAssignmentDairyVign");
 
 	// FARMYARD
-	generateRowShowTotal(V.farmyardNameCaps, "FARMYARD", V.farmyard, "Farmyard", V.FarmyardiIDs.length);
-	generateRowTracking("Farmyard Maintenance", "farmyard");
-	generateRowTracking("Farmyard Farmer", "slaveAssignmentFarmer");
-	generateRowTracking("Farmyard Farmhands", "slaveAssignmentFarmyard");
-	generateRowTracking("Farmyard FarmhandsVign", "slaveAssignmentFarmyardVign");
+	generateRowGroup(V.farmyardNameCaps, "FARMYARD", V.farmyard, "Farmyard", V.FarmyardiIDs.length);
+	generateRowCategory("Farmyard Maintenance", "farmyard");
+	generateRowCategory("Farmyard Farmer", "slaveAssignmentFarmer");
+	generateRowCategory("Farmyard Farmhands", "slaveAssignmentFarmyard");
+	generateRowCategory("Farmyard FarmhandsVign", "slaveAssignmentFarmyardVign");
 
 	// INCUBATOR
 	// TODO: Differentiate between standard upkeep, and slaves in incubator cost.
-	generateRowShowTotal(V.incubatorNameCaps, "INCUBATOR", V.incubator, "Incubator", V.incubatorSlaves);
-	generateRowTracking("Incubator Maintenance", "incubator");
+	generateRowGroup(V.incubatorNameCaps, "INCUBATOR", V.incubator, "Incubator", V.incubatorSlaves);
+	generateRowCategory("Incubator Maintenance", "incubator");
 
 	// NURSERY
-	generateRowShowTotal(V.nurseryNameCaps, "NURSERY", V.nursery, "Nursery", V.NurseryiIDs.length);
-	generateRowTracking("Nursery Maintenance", "nursery");
-	generateRowTracking("Nursery Matron", "slaveAssignmentMatron");
-	generateRowTracking("Nursery Nannies", "slaveAssignmentNursery");
-	generateRowTracking("Nursery NanniesVign", "slaveAssignmentNurseryVign");
+	generateRowGroup(V.nurseryNameCaps, "NURSERY", V.nursery, "Nursery", V.NurseryiIDs.length);
+	generateRowCategory("Nursery Maintenance", "nursery");
+	generateRowCategory("Nursery Matron", "slaveAssignmentMatron");
+	generateRowCategory("Nursery Nannies", "slaveAssignmentNursery");
+	generateRowCategory("Nursery NanniesVign", "slaveAssignmentNurseryVign");
 
 	// PIT
-	generateRowShowTotal(V.pitNameCaps, "PIT", V.pit, "Pit", V.fighterIDs.length);
-	generateRowTracking("Pit Maintenance", "pit");
+	generateRowGroup(V.pitNameCaps, "PIT", V.pit, "Pit", V.fighterIDs.length);
+	generateRowCategory("Pit Maintenance", "pit");
 
 	// PROSTHETIC LAB
-	generateRowShowTotal("Prosthetic Lab", "PROSTHETICLAB", V.researchLab.level, "Prosthetic Lab", null);
-	generateRowTracking("Prosthetic Lab Maintenance", "lab");
-	generateRowTracking("Prostethic Lab Research", "labResearch");
-	generateRowTracking("Prostethic Lab Scientists", "labScientists");
-	generateRowTracking("Prostethic Lab Menials", "labMenials");
+	generateRowGroup("Prosthetic Lab", "PROSTHETICLAB", V.researchLab.level, "Prosthetic Lab", null);
+	generateRowCategory("Prosthetic Lab Maintenance", "lab");
+	generateRowCategory("Prostethic Lab Research", "labResearch");
+	generateRowCategory("Prostethic Lab Scientists", "labScientists");
+	generateRowCategory("Prostethic Lab Menials", "labMenials");
 
 	// SCHOOLROOM
-	generateRowShowTotal(V.schoolroomNameCaps, "SCHOOLROOM", V.schoolroom, "Schoolroom", V.SchlRiIDs.length);
-	generateRowTracking("Schoolroom Maintenance", "school");
-	generateRowTracking("Schoolroom Teacher", "slaveAssignmentTeacher");
-	generateRowTracking("Schoolroom Students", "slaveAssignmentSchool");
+	generateRowGroup(V.schoolroomNameCaps, "SCHOOLROOM", V.schoolroom, "Schoolroom", V.SchlRiIDs.length);
+	generateRowCategory("Schoolroom Maintenance", "school");
+	generateRowCategory("Schoolroom Teacher", "slaveAssignmentTeacher");
+	generateRowCategory("Schoolroom Students", "slaveAssignmentSchool");
 
 	// SERVANTS' QUARTERS
-	generateRowShowTotal(V.servantsQuartersNameCaps, "SERVANTSQUARTERS", V.servantsQuarters, "Servants' Quarters", V.ServQiIDs.length);
-	generateRowTracking("Servants' Quarters Maintenance", "servantsQuarters");
-	generateRowTracking("Servants' Quarters Steward", "slaveAssignmentSteward");
-	generateRowTracking("Servants' Quarters Servants", "slaveAssignmentQuarter");
-	generateRowTracking("Servants' Quarters ServantsVign", "slaveAssignmentQuarterVign");
+	generateRowGroup(V.servantsQuartersNameCaps, "SERVANTSQUARTERS", V.servantsQuarters, "Servants' Quarters", V.ServQiIDs.length);
+	generateRowCategory("Servants' Quarters Maintenance", "servantsQuarters");
+	generateRowCategory("Servants' Quarters Steward", "slaveAssignmentSteward");
+	generateRowCategory("Servants' Quarters Servants", "slaveAssignmentQuarter");
+	generateRowCategory("Servants' Quarters ServantsVign", "slaveAssignmentQuarterVign");
 
 	// SPA
-	generateRowShowTotal(V.spaNameCaps, "SPA", V.spa, "Spa", V.SpaiIDs.length);
-	generateRowTracking("Spa Maintenance", "spa");
-	generateRowTracking("Spa Attendant", "slaveAssignmentAttendant");
-	generateRowTracking("Spa Slaves", "slaveAssignmentSpa");
+	generateRowGroup(V.spaNameCaps, "SPA", V.spa, "Spa", V.SpaiIDs.length);
+	generateRowCategory("Spa Maintenance", "spa");
+	generateRowCategory("Spa Attendant", "slaveAssignmentAttendant");
+	generateRowCategory("Spa Slaves", "slaveAssignmentSpa");
 
 	// HEADER: ARCOLOGY
 	createSectionHeader("Arcology");
 
 	// SLAVES
-	generateRowShowTotal("Miscellaneous Slave Income and Expenses", "SLAVES");
-	generateRowTracking("Slave Porn", "porn");
-	generateRowTracking("Slave Modifcations", "slaveMod");
-	generateRowTracking("Slave Surgery", "slaveSurgery");
-	generateRowTracking("Slave Birhting", "birth");
+	generateRowGroup("Miscellaneous Slave Income and Expenses", "SLAVES");
+	generateRowCategory("Slave Porn", "porn");
+	generateRowCategory("Slave Modifcations", "slaveMod");
+	generateRowCategory("Slave Surgery", "slaveSurgery");
+	generateRowCategory("Slave Birhting", "birth");
 
 	// MENIAL LABOR
 	// TODO: Differentiate between selling and weekly income for menial slaves.
-	generateRowShowTotal("Menial Labor", "LABOR");
-	generateRowTracking("Menials: Slaves", "menialTrades");
-	generateRowTracking("Menials: Fuckdolls", "fuckdolls");
-	generateRowTracking("Menials: Bioreactors", "menialBioreactors");
+	generateRowGroup("Menial Labor", "LABOR");
+	generateRowCategory("Menials: Slaves", "menialTrades");
+	generateRowCategory("Menials: Fuckdolls", "fuckdolls");
+	generateRowCategory("Menials: Bioreactors", "menialBioreactors");
 
 	// FLIPPING
-	generateRowShowTotal("Flipping", "FLIPPING");
-	generateRowTracking("Slave Transfer", "slaveTransfer");
+	generateRowGroup("Flipping", "FLIPPING");
+	generateRowCategory("Slave Transfer", "slaveTransfer");
 	// Menial Transfer
 	// Fuckdoll Transfer
 	// Bioreactor transfer
-	generateRowTracking("Scientist Transfer", "labScientistsTransfer");
-	generateRowTracking("Assistant: Menials", "menialTransfer");
-	generateRowTracking("Assistant: Fuckdolls", "fuckdollsTransfer");
-	generateRowTracking("Assistant: Bioreactors", "menialBioreactorsTransfer");
-	generateRowTracking("Slave Babies", "babyTransfer");
+	generateRowCategory("Scientist Transfer", "labScientistsTransfer");
+	generateRowCategory("Assistant: Menials", "menialTransfer");
+	generateRowCategory("Assistant: Fuckdolls", "fuckdollsTransfer");
+	generateRowCategory("Assistant: Bioreactors", "menialBioreactorsTransfer");
+	generateRowCategory("Slave Babies", "babyTransfer");
 
 	// FINANCIALS
-	generateRowShowTotal("Financials", "FINANCIALS");
-	generateRowTracking("Weather", "weather");
-	generateRowTracking("Rents", "rents");
-	generateRowTracking("Fines", "fines");
-	generateRowTracking("Events", "event");
-	generateRowTracking("Capital Expenses", "capEx");
-	generateRowTracking("Future Society Shaping", "futureSocieties");
-	generateRowTracking("School Subsidy", "schoolBacking")
-	generateRowTracking("Arcology conflict", "war");
-	generateRowTracking("Cheating", "cheating");
+	generateRowGroup("Financials", "FINANCIALS");
+	generateRowCategory("Weather", "weather");
+	generateRowCategory("Rents", "rents");
+	generateRowCategory("Fines", "fines");
+	generateRowCategory("Events", "event");
+	generateRowCategory("Capital Expenses", "capEx");
+	generateRowCategory("Future Society Shaping", "futureSocieties");
+	generateRowCategory("School Subsidy", "schoolBacking")
+	generateRowCategory("Arcology conflict", "war");
+	generateRowCategory("Cheating", "cheating");
 
 	// POLICIES
-	generateRowShowTotal("Policies", "POLICIES");
-	generateRowTracking("Policies", "policies");
+	generateRowGroup("Policies", "POLICIES");
+	generateRowCategory("Policies", "policies");
 
 	// EDICTS
-	generateRowShowTotal("Edicts", "EDICTS");
-	generateRowTracking("Edicts", "edicts");
+	generateRowGroup("Edicts", "EDICTS");
+	generateRowCategory("Edicts", "edicts");
 
 	// PERSONAL FINANCE
-	generateRowShowTotal("Personal Finance", "PERSONALFINANCE");
-	generateRowTracking("Personal Business", "personalBusiness");
-	generateRowTracking("Personal Living Expenses", "personalLivingExpenses");
-	generateRowTracking("Your skills", "PCSkills");
-	generateRowTracking("Your training expenses", "PCtraining");
-	generateRowTracking("Your medical expenses", "PCmedical");
-	generateRowTracking("Citizen Orphanage", "citizenOrphanage");
-	generateRowTracking("Private Orphanage", "privateOrphanage");
-	generateRowTracking("Stock dividents", "stocks");
-	generateRowTracking("Stock trading", "stocksTraded");
+	generateRowGroup("Personal Finance", "PERSONALFINANCE");
+	generateRowCategory("Personal Business", "personalBusiness");
+	generateRowCategory("Personal Living Expenses", "personalLivingExpenses");
+	generateRowCategory("Your skills", "PCSkills");
+	generateRowCategory("Your training expenses", "PCtraining");
+	generateRowCategory("Your medical expenses", "PCmedical");
+	generateRowCategory("Citizen Orphanage", "citizenOrphanage");
+	generateRowCategory("Private Orphanage", "privateOrphanage");
+	generateRowCategory("Stock dividents", "stocks");
+	generateRowCategory("Stock trading", "stocksTraded");
 
 	// SECURITY
-	generateRowShowTotal("Security", "SECURITY");
-	generateRowTracking("Mercenaries", "mercenaries");
-	generateRowTracking("Security Expansion", "securityExpansion");
-	generateRowTracking("Special Forces", "specialForces");
-	generateRowTracking("Peacekeepers", "peacekeepers");
+	generateRowGroup("Security", "SECURITY");
+	generateRowCategory("Mercenaries", "mercenaries");
+	generateRowCategory("Security Expansion", "securityExpansion");
+	generateRowCategory("Special Forces", "specialForces");
+	generateRowCategory("Peacekeepers", "peacekeepers");
 
 	// BUDGET REPORT
 	createSectionHeader("Budget Report");
@@ -841,7 +845,7 @@ App.UI.Budget.Cost = function() {
 		cell.append(headline);
 	}
 
-	function generateRowTracking(node, category) {
+	function generateRowCategory(node, category) {
 		if (category === "") {
 			row = table.insertRow();
 			row.append(document.createElement('br'));
@@ -866,7 +870,7 @@ App.UI.Budget.Cost = function() {
 		}
 	}
 
-	function generateRowShowTotal(title, group, structure, passage, occupancy) {
+	function generateRowGroup(title, group, structure, passage, occupancy) {
 		if (F[group].income || F[group].expenses || V.showAllEntries.costsBudget) {
 			row = table.insertRow();
 			cell = row.insertCell();