Index: binaries/data/mods/public/gui/session_new/session.js
===================================================================
--- binaries/data/mods/public/gui/session_new/session.js	(revision 8322)
+++ binaries/data/mods/public/gui/session_new/session.js	(working copy)
@@ -106,8 +106,11 @@
 	stopMusic();
 	endGame();
 	
-	Engine.SwitchGuiPage("page_summary.xml", { "gameResult" : gameResult });
-	
+	Engine.SwitchGuiPage("page_summary.xml", 
+							{ "gameResult"  : gameResult, 
+							  "timeElapsed" : simState.timeElapsed, 
+							  "playerStates": simState.players 
+						    });
 }
 
 // Return some data that we'll use when hotloading this file after changes
Index: binaries/data/mods/public/gui/summary/summary.js
===================================================================
--- binaries/data/mods/public/gui/summary/summary.js	(revision 8322)
+++ binaries/data/mods/public/gui/summary/summary.js	(working copy)
@@ -1,4 +1,95 @@
+// Max player slots for any map (should read from config)
+const MAX_SLOTS = 8;
+
+var panelNames = [ 'unitsBuildingsPanel', 'resourcesPanel' ];
+var panelButtonNames = [ 'unitsBuildingsPanelButton', 'resourcesPanelButton' ];
+
+
+function /* string */ timeToString(/* int */ time /* in milliseconds */)
+{
+	var hours   = Math.floor(time / 1000 / 60 / 60);
+	var minutes = Math.floor(time / 1000 / 60) % 60;
+	var seconds = Math.floor(time / 1000) % 60;
+	return hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);
+}
+
+function selectPanel(/*int*/ panelNumber)
+{
+	for (var i = 0; i < panelNames.length; i++)
+	{
+		if (i != panelNumber)
+		{
+			getGUIObjectByName(panelNames[i]).hidden = true;
+			getGUIObjectByName(panelButtonNames[i]).sprite = "wheatIndentFillLight";
+		}
+		else
+		{	
+			getGUIObjectByName(panelNames[i]).hidden = false;
+			getGUIObjectByName(panelButtonNames[i]).sprite = "wheatIndentFillVeryLight";
+		}
+	}
+}
+
 function init(data)
 {
+	getGUIObjectByName("timeElapsed").caption = "Time elapsed: " + timeToString(data.timeElapsed);
+
 	getGUIObjectByName("summaryText").caption = data.gameResult;
+	
+	//Space player boxes
+	var boxSpacing = 32;
+	for (var i = 0; i < panelNames.length; ++i)
+		for (var j = 0; j < MAX_SLOTS; ++j)
+		{
+			var box = getGUIObjectByName("playerBox"+i+"["+j+"]");
+			var boxSize = box.size;
+			var h = boxSize.bottom - boxSize.top;
+			boxSize.top = j * boxSpacing;
+			boxSize.bottom = j * boxSpacing + h;
+			box.size = boxSize;
+		}
+	
+	// TODO set mapPlayers as playerCounters.length 
+	var maxPlayers = data.playerStates.length - 1;
+	
+	// Show counters
+	for (var i = 0; i < MAX_SLOTS; ++i)
+	{
+		// Show only needed player slots
+		for (var k = 0; k < panelNames.length; ++k)
+		{
+			getGUIObjectByName("playerBox"+k+"["+i+"]").hidden = (i >= maxPlayers);
+		}
+		
+		if (i < maxPlayers)
+		{
+			var playerState = data.playerStates[i+1];
+		
+			for (var k = 0; k < panelNames.length; ++k)
+			{
+				var playerName = getGUIObjectByName("playerName"+k+"["+i+"]");
+				playerName.caption = playerState.name;
+			}
+			
+			var unitsTrained         = getGUIObjectByName("unitsTrained["+i+"]");
+			var unitsLost            = getGUIObjectByName("unitsLost["+i+"]");
+			var buildingsConstructed = getGUIObjectByName("buildingsConstructed["+i+"]");
+			var buildingsLost        = getGUIObjectByName("buildingsLost["+i+"]");
+			var civCentresBuild      = getGUIObjectByName("civCentresBuild["+i+"]");
+			var foodGathered         = getGUIObjectByName("foodGathered["+i+"]");
+			var woodGathered         = getGUIObjectByName("woodGathered["+i+"]");
+			var metalGathered        = getGUIObjectByName("metalGathered["+i+"]");
+			var stoneGathered        = getGUIObjectByName("stoneGathered["+i+"]");
+			
+			unitsTrained.caption         = playerState.unitsTrained;
+			unitsLost.caption            = playerState.unitsLost;
+			buildingsConstructed.caption = playerState.buildingsConstructed;
+			buildingsLost.caption        = playerState.buildingsLost;
+			civCentresBuild.caption      = playerState.civCentresBuild;
+			foodGathered.caption         = playerState.resourcesGathered.food;
+			woodGathered.caption         = playerState.resourcesGathered.wood;
+			metalGathered.caption        = playerState.resourcesGathered.metal;
+			stoneGathered.caption        = playerState.resourcesGathered.stone;
+		}
+	}
 }
Index: binaries/data/mods/public/gui/summary/summary.xml
===================================================================
--- binaries/data/mods/public/gui/summary/summary.xml	(revision 8322)
+++ binaries/data/mods/public/gui/summary/summary.xml	(working copy)
@@ -20,12 +20,121 @@
 			
 			<object name="summaryText"
 				type="text"
-				size="50 50 100%-50 100%-200"
+				size="50 10 100%-50 80"
+				font="serif-bold-18"
+				text_align="center"
+			/>
+			
+			<object name="timeElapsed"
+				type="text"
+				size="100%-200 10 100%-10 50"
 				font="serif-16"
 				text_align="center"
-				text_valign="center"
 			/>
 			
+			<object name="unitsBuildingsPanelButton" type="button" sprite="wheatIndentFillVeryLight" size="50 75 200 101">
+				<action on="Press">selectPanel(0);</action>
+				Units/buildings
+			</object>
+			<object name="resourcesPanelButton" type="button" sprite="wheatIndentFillLight" size="200 75 350 101">
+				<action on="Press">selectPanel(1);</action>
+				Resources
+			</object>
+			<object name="unitsBuildingsPanel" type="image" sprite="wheatIndentFillVeryLight" size="50 100 100%-50 100%-50">
+			
+				<object size="50 0 100%-50 100%-50">
+					<object name="playerNameHeading" type="text" text_align="left"  
+						size="0 16 100 100%" font="serif-bold-14"
+					>
+						Player name
+					</object>
+					<object name="unitsTrainedHeading" type="text" text_align="center" 
+						size="200 6 300 100%" font="serif-bold-14"
+					>
+						Units&#10;trained
+					</object>
+					<object name="unitsLostHeading" type="text" text_align="center" 
+						size="300 6 400 100%" font="serif-bold-14"
+					>
+						Units&#10;lost
+					</object>
+					<object name="buildingsConstructedHeading" type="text" text_align="center" 
+						size="400 6 500 100%" font="serif-bold-14"
+					>
+						Buildings&#10;constructed
+					</object>
+					<object name="buildingsLostHeading" type="text" text_align="center" 
+						size="500 6 600 100%" font="serif-bold-14"
+					>
+						Buildings&#10;lost
+					</object>
+					<object name="civCentresBuildHeading" type="text" text_align="center" 
+						size="600 6 700 100%" font="serif-bold-14"
+					>
+						CivCentres&#10;build
+					</object>
+					
+				</object>	
+				
+				<object size="50 50 100%-50 100%-50">
+					<repeat count="8">
+						<object name="playerBox0[n]" size="0 0 100% 30" hidden="true">
+							<object name="playerName0[n]"          type="text" text_align="left"  size="0 2 100 100%" />
+							<object name="unitsTrained[n]"         type="text" text_align="center" size="200 2 300 100%"/>
+							<object name="unitsLost[n]"            type="text" text_align="center" size="300 2 400 100%"/>
+							<object name="buildingsConstructed[n]" type="text" text_align="center" size="400 2 500 100%"/>
+							<object name="buildingsLost[n]"        type="text" text_align="center" size="500 2 600 100%"/>
+							<object name="civCentresBuild[n]"      type="text" text_align="center" size="600 2 700 100%"/>
+						</object>
+					</repeat>
+				</object>
+			
+			</object>
+			<object name="resourcesPanel" type="image" sprite="wheatIndentFillVeryLight" size="50 100 100%-50 100%-50" hidden="true">
+			
+				<object size="50 0 100%-50 100%-50">
+					<object name="playerName2Heading" type="text" text_align="left"  
+						size="0 16 100 100%" font="serif-bold-14"
+					>
+						Player name
+					</object>
+					<object name="foodGatheredHeading" type="text" text_align="center" 
+						size="200 6 300 100%" font="serif-bold-14"
+					>
+						Food&#10;gathered
+					</object>
+					<object name="woodGatheredHeading" type="text" text_align="center" 
+						size="300 6 400 100%" font="serif-bold-14"
+					>
+						Wood&#10;gathered
+					</object>
+					<object name="metalGatheredHeading" type="text" text_align="center" 
+						size="400 6 500 100%" font="serif-bold-14"
+					>
+						Metal&#10;gathered
+					</object>
+					<object name="stoneGatheredHeading" type="text" text_align="center" 
+						size="500 6 600 100%" font="serif-bold-14"
+					>
+						Stone&#10;gathered
+					</object>
+					
+				</object>	
+				
+				<object size="50 50 100%-50 100%-50">
+					<repeat count="8">
+						<object name="playerBox1[n]" size="0 0 100% 30" hidden="true">
+							<object name="playerName1[n]"   type="text" text_align="left"  size="0 2 100 100%" />
+							<object name="foodGathered[n]"  type="text" text_align="center" size="200 2 300 100%"/>
+							<object name="woodGathered[n]"  type="text" text_align="center" size="300 2 400 100%"/>
+							<object name="metalGathered[n]" type="text" text_align="center" size="400 2 500 100%"/>
+							<object name="stoneGathered[n]" type="text" text_align="center" size="500 2 600 100%"/>
+						</object>
+					</repeat>
+				</object>
+			
+			</object>
+			
 			<object type="button" style="wheatButton" size="100%-150 100%-40 100% 100%">
 				Main menu
 				<action on="Press"><![CDATA[
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js	(revision 8322)
+++ binaries/data/mods/public/simulation/components/GuiInterface.js	(working copy)
@@ -20,9 +20,13 @@
 GuiInterface.prototype.GetSimulationState = function(player)
 {
 	var ret = {
-		"players": []
+		"players": [],
+		"timeElapsed": 0	
 	};
 
+	var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
+	ret.timeElapsed = cmpTimer.GetTime();
+	
 	var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
 	var n = cmpPlayerMan.GetNumPlayers();
 	for (var i = 0; i < n; ++i)
@@ -37,7 +41,13 @@
 			"popLimit": cmpPlayer.GetPopulationLimit(),
 			"resourceCounts": cmpPlayer.GetResourceCounts(),
 			"trainingQueueBlocked": cmpPlayer.IsTrainingQueueBlocked(),
-			"state": cmpPlayer.GetState()
+			"state": cmpPlayer.GetState(),
+			"unitsTrained": cmpPlayer.GetUnitsTrained(),
+			"unitsLost": cmpPlayer.GetUnitsLost(),
+			"buildingsConstructed": cmpPlayer.GetBuildingsConstructed(),
+			"buildingsLost": cmpPlayer.GetBuildingsLost(),
+			"civCentresBuild": cmpPlayer.GetCivCentresBuild(),
+			"resourcesGathered": cmpPlayer.GetResourcesGathered()
 		};
 		ret.players.push(playerData);
 	}
Index: binaries/data/mods/public/simulation/components/Identity.js
===================================================================
--- binaries/data/mods/public/simulation/components/Identity.js	(revision 8322)
+++ binaries/data/mods/public/simulation/components/Identity.js	(working copy)
@@ -66,8 +66,10 @@
 						"<value>Mechanical</value>" +
 						"<value>Super</value>" +
 						"<value>Hero</value>" +
+						"<value>Unit</value>" +
 						"<value>Structure</value>" +
 						"<value>Civic</value>" +
+						"<value>CivCentre</value>" +
 						"<value>Economic</value>" +
 						"<value>Defensive</value>" +
 						"<value>Village</value>" +
Index: binaries/data/mods/public/simulation/components/Player.js
===================================================================
--- binaries/data/mods/public/simulation/components/Player.js	(revision 8322)
+++ binaries/data/mods/public/simulation/components/Player.js	(working copy)
@@ -20,7 +20,24 @@
 		"stone": 1000	
 	};
 	this.state = "active"; // game state - one of "active", "defeated", "won"
-	this.conquestCriticalEntitiesCount = 0; // number of owned units with ConquestCritical class
+	this.conquestCriticalEntitiesCount = 0; // number of owned units and buildings with ConquestCritical class
+	
+	// statistics
+	// units
+	this.unitsTrained = 0;
+	this.unitsLost = 0;
+	//buildings
+	this.buildingsConstructed = 0;
+	this.buildingsLost = 0;
+	// civ centres
+	this.civCentresBuild = 0;
+	// resources
+	this.resourcesGathered = {
+		"food": 0,	
+		"wood": 0,	
+		"metal": 0,	
+		"stone": 0	
+	};
 };
 
 Player.prototype.SetPlayerID = function(id)
@@ -110,12 +127,16 @@
 Player.prototype.AddResource = function(type, amount)
 {
 	this.resourceCount[type] += (+amount);
+	this.resourcesGathered[type] += amount;
 };
 
 Player.prototype.AddResources = function(amounts)
 {
 	for (var type in amounts)
+	{
 		this.resourceCount[type] += (+amounts[type]);
+		this.resourcesGathered[type] += amounts[type];
+	}
 };
 
 Player.prototype.TrySubtractResources = function(amounts)
@@ -163,24 +184,69 @@
 	return this.conquestCriticalEntitiesCount;
 };
 
+Player.prototype.GetUnitsTrained = function()
+{
+	return this.unitsTrained;
+};
+
+Player.prototype.GetUnitsLost = function()
+{
+	return this.unitsLost;
+};
+
+Player.prototype.GetBuildingsConstructed = function()
+{
+	return this.buildingsConstructed;
+};
+
+Player.prototype.GetBuildingsLost = function()
+{
+	return this.buildingsLost;
+};
+
+Player.prototype.GetCivCentresBuild = function()
+{
+	return this.civCentresBuild;
+};
+
+Player.prototype.GetResourcesGathered = function()
+{
+	return this.resourcesGathered;
+};
+
 // Keep track of population effects of all entities that
 // become owned or unowned by this player
 Player.prototype.OnGlobalOwnershipChanged = function(msg)
 {
-	var classes = [];
+	var isConquestCritical = false;
+	var isStructure = false;
+	var isUnit = false;
+	var isCivCentre = false;
 
 	// Load class list only if we're going to need it
 	if (msg.from == this.playerID || msg.to == this.playerID)
 	{
 		var cmpIdentity = Engine.QueryInterface(msg.entity, IID_Identity);
 		if (cmpIdentity)
-			classes = cmpIdentity.GetClassesList();
+		{
+			var classes = cmpIdentity.GetClassesList();
+			isConquestCritical = classes.indexOf("ConquestCritical") != -1;
+			// we want to count only real structures, not foundations
+			var cmpFoundation = Engine.QueryInterface(msg.entity, IID_Foundation);
+			isStructure = classes.indexOf("Structure") != -1 && cmpFoundation == null;
+			isUnit = classes.indexOf("Unit") != -1;
+			isCivCentre = classes.indexOf("CivCentre") != -1;
+		}
 	}
 
 	if (msg.from == this.playerID)
 	{
-		if (classes.indexOf("ConquestCritical") != -1)
-			this.conquestCriticalEntitiesCount--;
+		if (isConquestCritical)
+			this.conquestCriticalEntitiesCount--;	
+		if (isStructure)
+			this.buildingsLost++;
+		if (isUnit)
+			this.unitsLost++;
 
 		var cost = Engine.QueryInterface(msg.entity, IID_Cost);
 		if (cost)
@@ -192,8 +258,12 @@
 	
 	if (msg.to == this.playerID)
 	{
-		if (classes.indexOf("ConquestCritical") != -1)
+		if (isConquestCritical)
 			this.conquestCriticalEntitiesCount++;
+		if (isStructure)
+			this.buildingsConstructed++;
+		if (isUnit)
+			this.unitsTrained++;
 
 		var cost = Engine.QueryInterface(msg.entity, IID_Cost);
 		if (cost)
Index: binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(revision 8322)
+++ binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(working copy)
@@ -36,6 +36,13 @@
 	GetResourceCounts: function() { return { food: 100 }; },
 	IsTrainingQueueBlocked: function() { return false; },
 	GetState: function() { return "active"; },
+	GetConquestCriticalEntitiesCount: function() { return 1; },
+	GetUnitsTrained: function() { return 10; },
+	GetUnitsLost: function() { return 9; },
+	GetBuildingsConstructed: function() { return 5; },
+	GetBuildingsLost: function() { return 4; },
+	GetCivCentresBuild: function() { return 1; },
+	GetResourcesGathered: function() { return { food: 100 }; },
 });
 
 AddMock(101, IID_Player, {
@@ -47,6 +54,13 @@
 	GetResourceCounts: function() { return { food: 200 }; },
 	IsTrainingQueueBlocked: function() { return false; },
 	GetState: function() { return "active"; },
+	GetConquestCriticalEntitiesCount: function() { return 1; },
+	GetUnitsTrained: function() { return 10; },
+	GetUnitsLost: function() { return 9; },
+	GetBuildingsConstructed: function() { return 5; },
+	GetBuildingsLost: function() { return 4; },
+	GetCivCentresBuild: function() { return 1; },
+	GetResourcesGathered: function() { return { food: 100 }; },
 });
 
 TS_ASSERT_UNEVAL_EQUALS(cmp.GetSimulationState(), {
@@ -60,6 +74,18 @@
 			resourceCounts: { food: 100 },
 			trainingQueueBlocked: false,
 			state: "active",
+			conquestCriticalEntitiesCount = 1;
+			unitsTrained = 10;
+			unitsLost = 9;
+			buildingsConstructed = 5;
+			buildingsLost = 4;
+			civCentresBuild = 1;
+			resourcesGathered = {
+				"food": 100,	
+				"wood": 0,	
+				"metal": 0,	
+				"stone": 0	
+			},
 		},
 		{
 			name: "Player 2",
@@ -70,6 +96,18 @@
 			resourceCounts: { food: 200 },
 			trainingQueueBlocked: false,
 			state: "active",
+			conquestCriticalEntitiesCount = 1;
+			unitsTrained = 10;
+			unitsLost = 9;
+			buildingsConstructed = 5;
+			buildingsLost = 4;
+			civCentresBuild = 1;
+			resourcesGathered = {
+				"food": 100,	
+				"wood": 0,	
+				"metal": 0,	
+				"stone": 0	
+			},
 		}
 	]
 });
Index: binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml	(revision 8322)
+++ binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml	(working copy)
@@ -4,7 +4,11 @@
     <GenericName>Civic Centre</GenericName>
     <IconCell>1</IconCell>
     <Tooltip>Build upon a settlement to capture territory.</Tooltip>
-    <Classes datatype="tokens">Village Defensive</Classes>
+    <Classes datatype="tokens">
+		Village 
+		Defensive
+		CivCentre
+	</Classes>
   </Identity>
   <BuildRestrictions>
     <PlacementType>settlement</PlacementType>
Index: binaries/data/mods/public/simulation/templates/template_unit.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit.xml	(revision 8322)
+++ binaries/data/mods/public/simulation/templates/template_unit.xml	(working copy)
@@ -3,6 +3,7 @@
   <Identity>
     <GenericName>Unit</GenericName>
     <Classes datatype="tokens">
+	  Unit
       ConquestCritical
     </Classes>
   </Identity>
