diff --git a/src/endWeek/economics/arcmgmt.js b/src/endWeek/economics/arcmgmt.js
index d375d958b333d3b7d6003751f8f72c4c60647939..9a406bbaf46b13c11ae68964007e38dc92c2838d 100644
--- a/src/endWeek/economics/arcmgmt.js
+++ b/src/endWeek/economics/arcmgmt.js
@@ -80,6 +80,8 @@ globalThis.arcmgmt = function() {
 
 	expiration();
 
+	denseapartments();
+
 	citizenToSlave();
 
 	V.GDP = Math.trunc(((V.NPCSlaves + V.menials) * 0.35 * _slaveProductivity) + (V.lowerClass * 0.35) + (V.middleClass * 0.75) + (V.upperClass * 2) + (V.topClass * 10)) / 10;
@@ -1859,6 +1861,18 @@ globalThis.arcmgmt = function() {
 		App.Events.addParagraph(el, r);
 	}
 
+	function denseapartments() {
+		/* increases lowerclass attraction based on number of dense apartments */
+	V.building.findCells(cell => !(cell instanceof App.Arcology.Cell.Penthouse))
+		.forEach(cell => {
+			if (cell instanceof App.Arcology.Cell.Apartment) {
+					 if (cell.type === 3) {
+					_lowerClass += 200
+				}
+			}
+		});
+	}
+
 	function getBanishRatio() {
 		/* Some proportion of newly-enslaved citizens might instead be banished, if you don't keep old menials.
 		 * This should probably use an actuarial age distribution instead of this piecewise function. */
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 3747ccb3dd7661708a02b4a550806ca1d7aa2d8a..28a85dd937dbc5588f064c3162864b53e4f18dd3 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -2376,8 +2376,6 @@ globalThis.SectorCounts = function() {
 					V.AProsperityCap += 10;
 				} else if (cell.type === 2) {
 					V.AProsperityCap += 5;
-				} else if (cell.type === 3) {
-					V.lowerClass += 40;
 				}
 			} else if (cell instanceof App.Arcology.Cell.Shop) {
 				if (cell.type !== "Club" && cell.type !== "Brothel") {