Index: binaries/data/mods/public/gui/common/tooltips.js
===================================================================
--- binaries/data/mods/public/gui/common/tooltips.js	(revision 17580)
+++ binaries/data/mods/public/gui/common/tooltips.js	(working copy)
@@ -233,7 +233,7 @@
 {
 	return "\n" + sprintf(translate("%(repairRateLabel)s %(value)s %(health)s / %(second)s / %(worker)s"), {
 		"repairRateLabel": g_TooltipTextFormats.header[0] + translate("Repair Rate:") + g_TooltipTextFormats.header[1],
-		"value": Math.round(rate * 10 ) / 10,
+		"value": Math.round(rate * 10) / 10,
 		"health": g_TooltipTextFormats.unit[0] + translate("health") + g_TooltipTextFormats.unit[1],
 		"second": g_TooltipTextFormats.unit[0] + translate("second") + g_TooltipTextFormats.unit[1],
 		"worker": g_TooltipTextFormats.unit[0] + translate("worker") + g_TooltipTextFormats.unit[1]
@@ -240,6 +240,17 @@
 	});
 }
 
+function getBuildRateTooltip(rate)
+{
+	return "\n" + sprintf(translate("%(buildRateLabel)s %(value)s %(health)s / %(second)s / %(worker)s"), {
+		"buildRateLabel": g_TooltipTextFormats.header[0] + translate("Build Rate:") + g_TooltipTextFormats.header[1],
+		"value": Math.round(rate * 10) / 10,
+		"health": g_TooltipTextFormats.unit[0] + translate("health") + g_TooltipTextFormats.unit[1],
+		"second": g_TooltipTextFormats.unit[0] + translate("second") + g_TooltipTextFormats.unit[1],
+		"worker": g_TooltipTextFormats.unit[0] + translate("worker") + g_TooltipTextFormats.unit[1]
+	});
+}
+
 /**
  * Translates a cost component identifier as they are used internally
  * (e.g. "population", "food", etc.) to proper display names.
Index: binaries/data/mods/public/gui/session/selection_details.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_details.js	(revision 17580)
+++ binaries/data/mods/public/gui/session/selection_details.js	(working copy)
@@ -265,6 +265,10 @@
 	if (entState.repairRate)
 		Engine.GetGUIObjectByName("attackAndArmorStats").tooltip += getRepairRateTooltip(entState.repairRate);
 
+	// Build Rate
+	if (entState.buildRate)
+		Engine.GetGUIObjectByName("attackAndArmorStats").tooltip += getBuildRateTooltip(entState.buildRate);
+
 	// Icon Tooltip
 	let iconTooltip = "";
 
Index: binaries/data/mods/public/simulation/components/Foundation.js
===================================================================
--- binaries/data/mods/public/simulation/components/Foundation.js	(revision 17580)
+++ binaries/data/mods/public/simulation/components/Foundation.js	(working copy)
@@ -247,18 +247,12 @@
 		this.committed = true;
 	}
 
-	// Calculate the amount of progress that will be added (where 1.0 = completion)
-	var cmpCost = Engine.QueryInterface(this.entity, IID_Cost);
-	var amount = work / cmpCost.GetBuildTime();
-
 	// Add an appropriate proportion of hitpoints
 	var cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
 	var maxHealth = cmpHealth.GetMaxHitpoints();
-	var deltaHP = Math.max(work, Math.min(maxHealth, Math.floor(maxHealth * (amount * this.buildMultiplier))));
+	var deltaHP = Math.max(work, Math.min(maxHealth, Math.floor(work * this.GetBuildRate() * this.buildMultiplier)));
 	if (deltaHP > 0)
-	{
 		cmpHealth.Increase(deltaHP);
-	}
 
 	var progress = this.GetBuildProgress();
 
@@ -344,5 +338,13 @@
 	}
 };
 
+Foundation.prototype.GetBuildRate = function() 
+{ 
+	let cmpHealth = Engine.QueryInterface(this.entity, IID_Health); 
+	let cmpCost = Engine.QueryInterface(this.entity, IID_Cost); 
+	let buildRate = cmpHealth.GetMaxHitpoints() / cmpCost.GetBuildTime(); 
+	return buildRate; 
+}; 
+
 Engine.RegisterComponentType(IID_Foundation, "Foundation", Foundation);
 
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js	(revision 17580)
+++ binaries/data/mods/public/simulation/components/GuiInterface.js	(working copy)
@@ -405,6 +405,7 @@
 		"turretParent":null,
 		"promotion": null,
 		"repairRate": null,
+		"buildRate": null,
 		"resourceDropsite": null,
 		"resourceGatherRates": null,
 		"resourceSupply": null,
@@ -489,6 +490,10 @@
 	if (cmpRepairable)
 		ret.repairRate = cmpRepairable.GetRepairRate();
 
+	let cmpFoundation = Engine.QueryInterface(ent, IID_Foundation);
+	if (cmpFoundation)
+		ret.buildRate = cmpFoundation.GetBuildRate();
+
 	let cmpResourceSupply = QueryMiragedInterface(ent, IID_ResourceSupply);
 	if (cmpResourceSupply)
 		ret.resourceSupply = {
Index: binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(revision 17580)
+++ binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(working copy)
@@ -513,6 +513,7 @@
 	turretParent: null,
 	promotion: null,
 	repairRate: null,
+	buildRate: null,
 	resourceDropsite: null,
 	resourceGatherRates: null,
 	resourceSupply: null,
