Index: binaries/data/mods/public/gui/common/tooltips.js
===================================================================
--- binaries/data/mods/public/gui/common/tooltips.js	(revision 17539)
+++ binaries/data/mods/public/gui/common/tooltips.js	(working copy)
@@ -229,19 +229,16 @@
 	return attacks.join("\n");
 }
 
-function getRepairRatioTooltip(ratio)
+function getRepairRateTooltip(rate)
 {
-	let unit = sprintf(translate("%(health)s / %(second)s / %(worker)s"), {
+	let detail = Math.round(rate * 10) / 10;
+	return "\n" + sprintf(translate("%(repairRateLabel)s %(detail)s %(health)s / %(second)s / %(worker)s"), {
+		"repairRateLabel": g_TooltipTextFormats.header[0] + translate("Repair Rate:") + g_TooltipTextFormats.header[1],
+		"detail": detail,
 		"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]
 	});
-
-	return "\n" + sprintf(translate("%(repairRateLabel)s %(detail)s %(unit)s"), {
-		"repairRateLabel": g_TooltipTextFormats.header[0] + translate("Repair Rate:") + g_TooltipTextFormats.header[1],
-		"detail": ratio,
-		"unit": unit
-	});
 }
 
 /**
Index: binaries/data/mods/public/gui/session/selection_details.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_details.js	(revision 17539)
+++ binaries/data/mods/public/gui/session/selection_details.js	(working copy)
@@ -262,8 +262,8 @@
 	Engine.GetGUIObjectByName("attackAndArmorStats").tooltip = entState.attack ? (getAttackTooltip(entState) + "\n" + armorString) : armorString;
 
 	// Repair Rate
-	if (entState.repairRatio)
-		Engine.GetGUIObjectByName("attackAndArmorStats").tooltip += getRepairRatioTooltip(entState.repairRatio);
+	if (entState.repairRate)
+		Engine.GetGUIObjectByName("attackAndArmorStats").tooltip += getRepairRateTooltip(entState.repairRate);
 
 	// Icon Tooltip
 	let iconTooltip = "";
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js	(revision 17539)
+++ binaries/data/mods/public/simulation/components/GuiInterface.js	(working copy)
@@ -404,7 +404,7 @@
 		"obstruction": null,
 		"turretParent":null,
 		"promotion": null,
-		"repairTime": null,
+		"repairRate": null,
 		"resourceDropsite": null,
 		"resourceGatherRates": null,
 		"resourceSupply": null,
@@ -487,7 +487,7 @@
 
 	let cmpRepairable = Engine.QueryInterface(ent, IID_Repairable);
 	if (cmpRepairable)
-		ret.repairRatio = cmpRepairable.GetRepairRatio();
+		ret.repairRate = cmpRepairable.GetRepairRate();
 
 	let cmpResourceSupply = QueryMiragedInterface(ent, IID_ResourceSupply);
 	if (cmpResourceSupply)
Index: binaries/data/mods/public/simulation/components/Repairable.js
===================================================================
--- binaries/data/mods/public/simulation/components/Repairable.js	(revision 17539)
+++ binaries/data/mods/public/simulation/components/Repairable.js	(working copy)
@@ -62,10 +62,7 @@
 		return;
 
 	// Calculate the amount of hitpoints that will be added (using diminushing rate when several builders)
-	let work = rate * this.buildMultiplier;
-	let repairTime = this.repairTimeRatio * cmpCost.GetBuildTime();
-	if (repairTime)
-		work *= (cmpHealth.GetMaxHitpoints() / repairTime);
+	let work = rate * this.buildMultiplier * this.GetRepairRate();
 	let amount = Math.min(damage, work);
 	cmpHealth.Increase(amount);
 
@@ -74,13 +71,12 @@
 		Engine.PostMessage(this.entity, MT_ConstructionFinished, { "entity": this.entity, "newentity": this.entity });
 };
 
-Repairable.prototype.GetRepairRatio = function()
+Repairable.prototype.GetRepairRate = function()
 {
 	let cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
 	let cmpCost = Engine.QueryInterface(this.entity, IID_Cost);
 	let repairTime = this.repairTimeRatio * cmpCost.GetBuildTime();
-	let repairRatio = (cmpHealth.GetMaxHitpoints() / repairTime);
-	return (Math.round(repairRatio * 10 ) / 10);
+	return repairTime ? cmpHealth.GetMaxHitpoints() / repairTime : 1;
 };
 
 Engine.RegisterComponentType(IID_Repairable, "Repairable", Repairable);
Index: binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(revision 17539)
+++ binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(working copy)
@@ -510,7 +510,7 @@
 	obstruction: null,
 	turretParent: null,
 	promotion: null,
-	repairTime: null,
+	repairRate: null,
 	resourceDropsite: null,
 	resourceGatherRates: null,
 	resourceSupply: null,
