Index: binaries/data/mods/public/gui/common/tooltips.js
===================================================================
--- binaries/data/mods/public/gui/common/tooltips.js	(revision 17005)
+++ binaries/data/mods/public/gui/common/tooltips.js	(working copy)
@@ -157,7 +157,7 @@
 	else
 		var rateLabel = txtFormats.header[0] + translate("Rate:") + txtFormats.header[1];
 
-	for (var type in template.attack)
+	for (let type in template.attack)
 	{
 		if (type == "Slaughter")
 			continue; // Slaughter is not a real attack, so do not show it.
@@ -219,6 +219,25 @@
 	return attacks.join("\n");
 }
 
+function getRepairTimeRatioTooltip(ratio)
+{
+	var hp = txtFormats.unit[0] + translate("hp") + txtFormats.unit[1];
+	var second = txtFormats.unit[0] + translate("second") + txtFormats.unit[1];
+	var worker = txtFormats.unit[0] + translate("worker") + txtFormats.unit[1];
+
+	var rate = sprintf(translate("%(hp)s/%(second)s/%(worker)s"), {
+				hp: txtFormats.unit[0] + translate("hp") + txtFormats.unit[1],
+				second: txtFormats.unit[0] + translate("second") + txtFormats.unit[1],
+				worker: txtFormats.unit[0] + translate("worker") + txtFormats.unit[1]
+			});
+
+	return "\n" + sprintf(translate("%(repairRateLabel)s %(detail)s %(rate)s"), {
+				repairRateLabel: txtFormats.header[0] + translate("Repair rate:") + txtFormats.header[1],
+				detail: ratio,
+				rate: rate
+			});
+}
+
 /**
  * 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 17005)
+++ binaries/data/mods/public/gui/session/selection_details.js	(working copy)
@@ -259,6 +259,10 @@
 	else
 		Engine.GetGUIObjectByName("attackAndArmorStats").tooltip = armorString;
 
+	// Repair Rate
+	if ("repairTimeRatio" in entState && entState.repairTimeRatio)
+		Engine.GetGUIObjectByName("attackAndArmorStats").tooltip += getRepairTimeRatioTooltip(entState.repairTimeRatio);
+
 	// Icon Tooltip
 	var iconTooltip = "";
 
Index: binaries/data/mods/public/gui/session/unit_actions.js
===================================================================
--- binaries/data/mods/public/gui/session/unit_actions.js	(revision 17005)
+++ binaries/data/mods/public/gui/session/unit_actions.js	(working copy)
@@ -677,7 +677,7 @@
 					count += state.garrisonHolder.entities.length;
 			}
 			return {
-				"tooltip": translate("Unload All"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Unload All") + "[/font]\n" + translate("Release all garrisoned units"),
 				"icon": "garrison-out.png",
 				"count": count,
 			};
@@ -705,7 +705,7 @@
 					
 
 			return {
-				"tooltip": translate("Delete"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Delete") + "[/font]\n" + translate("Destroy everything selected"),
 				"icon": "kill_small.png"
 			};
 		},
@@ -731,7 +731,7 @@
 			if (!entState.unitAI)
 				return false;
 			return {
-				"tooltip": translate("Stop"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Stop") + "[/font]\n" + translate("Make the selected units idle"),
 				"icon": "stop.png"
 			};
 		},
@@ -749,7 +749,7 @@
 			if (!entState.unitAI || entState.turretParent)
 				return false;
 			return {
-				"tooltip": translate("Garrison"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Garrison") + "[/font]\n" + translate("Lock selected units inside"),
 				"icon": "garrison.png"
 			};
 		},
@@ -770,7 +770,7 @@
 			if (!p.garrisonHolder || p.garrisonHolder.entities.indexOf(entState.id) == -1)
 				return false;
 			return {
-				"tooltip": translate("Unload"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Unload") + "[/font]\n" + translate("Release one unit"),
 				"icon": "garrison-out.png"
 			};
 		},
@@ -786,7 +786,7 @@
 			if (!entState.builder)
 				return false;
 			return {
-				"tooltip": translate("Repair"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Repair") + "[/font]\n" + translate("Restore hitpoints, faster for ships then for buildings"),
 				"icon": "repair.png"
 			};
 		},
@@ -826,7 +826,7 @@
 			if (!entState.unitAI || !entState.unitAI.hasWorkOrders)
 				return false;
 			return {
-				"tooltip": translate("Back to Work"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Back to Work") + "[/font]\n" + translate("Order unit the last given task"),
 				"icon": "production.png"
 			};
 		},
@@ -842,7 +842,7 @@
 			if (!entState.unitAI || !entState.unitAI.canGuard || entState.unitAI.isGuarding)
 				return false;
 			return {
-				"tooltip": translate("Guard"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Guard") + "[/font]\n" + translate("Follow another entity, repair/heal it and protect when attacked"),
 				"icon": "add-guard.png"
 			};
 		},
@@ -859,7 +859,7 @@
 			if (!entState.unitAI || !entState.unitAI.isGuarding)
 				return false;
 			return {
-				"tooltip": translate("Remove guard"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Remove guard") +"[/font]\n" + translate("Stop guarding"),
 				"icon": "remove-guard.png"
 			};
 		},
@@ -910,7 +910,7 @@
 				}
 			}
 			return {
-				"tooltip": translate("Unload All"),
+				"tooltip": '[font="sans-bold-16"]' + translate("Unload All") + "[/font]\n" + translate("Release all garrisoned units"),
 				"icon": "garrison-out.png",
 				"count": count,
 			};
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js	(revision 17005)
+++ binaries/data/mods/public/simulation/components/GuiInterface.js	(working copy)
@@ -343,15 +343,11 @@
     
 	var cmpOwnership = Engine.QueryInterface(ent, IID_Ownership);
 	if (cmpOwnership)
-	{
 		ret.player = cmpOwnership.GetOwner();
-	}
 
 	var cmpRallyPoint = Engine.QueryInterface(ent, IID_RallyPoint);
 	if (cmpRallyPoint)
-	{
 		ret.rallyPoint = {'position': cmpRallyPoint.GetPositions()[0]}; // undefined or {x,z} object
-	}
 
 	var cmpGarrisonHolder = Engine.QueryInterface(ent, IID_GarrisonHolder);
 	if (cmpGarrisonHolder)
@@ -433,6 +429,7 @@
 		"obstruction": null,
 		"turretParent":null,
 		"promotion": null,
+		"repairTimeRatio": null,
 		"resourceDropsite": null,
 		"resourceGatherRates": null,
 		"resourceSupply": null,
@@ -489,15 +486,11 @@
 
 	var cmpArmour = Engine.QueryInterface(ent, IID_DamageReceiver);
 	if (cmpArmour)
-	{
 		ret.armour = cmpArmour.GetArmourStrengths();
-	}
 
 	var cmpAuras = Engine.QueryInterface(ent, IID_Auras)
 	if (cmpAuras)
-	{
 		ret.auras = cmpAuras.GetDescriptions();
-	}
 
 	var cmpBuildingAI = Engine.QueryInterface(ent, IID_BuildingAI);
 	if (cmpBuildingAI)
@@ -523,6 +516,10 @@
 	if (cmpPosition && cmpPosition.GetTurretParent() != INVALID_ENTITY)
 		ret.turretParent = cmpPosition.GetTurretParent();
 
+	var cmpRepairTimeRatio = Engine.QueryInterface(ent, IID_Repairable);
+		if (cmpRepairTimeRatio)
+			ret.repairTimeRatio = cmpRepairTimeRatio.GetRepairTimeRatio();
+
 	var cmpResourceSupply = QueryMiragedInterface(ent, IID_ResourceSupply);
 	if (cmpResourceSupply)
 	{
@@ -539,9 +536,7 @@
 
 	var cmpResourceGatherer = Engine.QueryInterface(ent, IID_ResourceGatherer);
 	if (cmpResourceGatherer)
-	{
 		ret.resourceGatherRates = cmpResourceGatherer.GetGatherRates();
-	}
 	
 	var cmpResourceDropsite = Engine.QueryInterface(ent, IID_ResourceDropsite);
 	if (cmpResourceDropsite)
Index: binaries/data/mods/public/simulation/components/Repairable.js
===================================================================
--- binaries/data/mods/public/simulation/components/Repairable.js	(revision 17005)
+++ binaries/data/mods/public/simulation/components/Repairable.js	(working copy)
@@ -74,4 +74,9 @@
 		Engine.PostMessage(this.entity, MT_ConstructionFinished, { "entity": this.entity, "newentity": this.entity });
 };
 
+Repairable.prototype.GetRepairTimeRatio = function()
+{
+	return this.repairTimeRatio;
+};
+
 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 17005)
+++ binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(working copy)
@@ -508,6 +508,7 @@
 	obstruction: null,
 	turretParent: null,
 	promotion: null,
+	repairTimeRatio: null,
 	resourceDropsite: null,
 	resourceGatherRates: null,
 	resourceSupply: null,
