Index: binaries/data/mods/public/gui/page_summary.xml
===================================================================
--- binaries/data/mods/public/gui/page_summary.xml	(revision 8505)
+++ binaries/data/mods/public/gui/page_summary.xml	(working copy)
@@ -5,5 +5,6 @@
     <include>common/sprite1.xml</include>
     <include>common/init.xml</include>
     <include>summary/summary.xml</include>
+	<include>summary/sprites.xml</include>
     <include>common/global.xml</include>
 </page>
Index: binaries/data/mods/public/gui/session_new/session.js
===================================================================
--- binaries/data/mods/public/gui/session_new/session.js	(revision 8505)
+++ binaries/data/mods/public/gui/session_new/session.js	(working copy)
@@ -114,8 +114,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/sprites.xml
===================================================================
--- binaries/data/mods/public/gui/summary/sprites.xml	(revision 0)
+++ binaries/data/mods/public/gui/summary/sprites.xml	(revision 0)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<sprites>
+	<sprite name="bgInfoHeading">
+		<image 	backcolor="0 0 0 150" size="0 0 100% 100%" />
+	</sprite>
+	
+	<sprite name="bgInfoBox">
+		<image 	backcolor="120 70 0 100" size="0 0 100% 100%" />
+	</sprite>
+</sprites>
Index: binaries/data/mods/public/gui/summary/summary.js
===================================================================
--- binaries/data/mods/public/gui/summary/summary.js	(revision 8505)
+++ binaries/data/mods/public/gui/summary/summary.js	(working copy)
@@ -1,4 +1,165 @@
+// 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 = "bgInfoHeading";
+		}
+		else
+		{	
+			getGUIObjectByName(panelNames[i]).hidden = false;
+			getGUIObjectByName(panelButtonNames[i]).sprite = "bgInfoBox";
+		}
+	}
+}
+
 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;
+	
+	// align headers
+	var left = 50; 
+	var width = 100;
+	getGUIObjectByName("playerNameHeading").size 				= left + " 26 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("unitsTrainedHeading").size 				= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("unitsLostHeading").size 				= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("enemyUnitsKilledHeading").size 			= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("buildingsConstructedHeading").size 		= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("buildingsLostHeading").size 			= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("enemyBuildingsDestroyedHeading").size 	= left +  " 6 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("civCentresBuildHeading").size 			= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("enemyCivCentresDestroyedHeading").size 	= left +  " 6 " + (left + width) + " 100%"; left += width;
+	
+	var left = 50; 
+	getGUIObjectByName("playerName2Heading").size 		= left + " 26 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("foodGatheredHeading").size 		= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("vegetarianRatioHeading").size 	= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("woodGatheredHeading").size 		= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("metalGatheredHeading").size 	= left + " 16 " + (left + width) + " 100%"; left += width;
+	getGUIObjectByName("stoneGatheredHeading").size 	= left + " 16 " + (left + width) + " 100%"; left += width;
+	
+	// Show counters
+	for (var i = 0; i < MAX_SLOTS; ++i)
+	{		
+		if (i < maxPlayers)
+		{
+			var playerState = data.playerStates[i+1];
+		
+			for (var k = 0; k < panelNames.length; ++k)
+			{
+				var playerBox = getGUIObjectByName("playerBox"+k+"["+i+"]");
+				playerBox.hidden = false;		
+				
+				var colourString = "colour: " + playerState.colour.r * 255 + " " + playerState.colour.g * 255 + " " + playerState.colour.b * 255;
+				playerBox.sprite = colourString + " 32";
+				var playerColourBox = getGUIObjectByName("playerColourBox"+k+"["+i+"]");
+				playerColourBox.sprite = colourString + " 255";
+			
+				var playerName = getGUIObjectByName("playerName"+k+"["+i+"]");
+				playerName.caption = playerState.name;
+			}
+			
+			var unitsTrained         		= getGUIObjectByName("unitsTrained["+i+"]");
+			var unitsLost            		= getGUIObjectByName("unitsLost["+i+"]");
+			var enemyUnitsKilled     		= getGUIObjectByName("enemyUnitsKilled["+i+"]");
+			var buildingsConstructed 		= getGUIObjectByName("buildingsConstructed["+i+"]");
+			var buildingsLost        		= getGUIObjectByName("buildingsLost["+i+"]");
+			var enemyBuildingsDestroyed 	= getGUIObjectByName("enemyBuildingsDestroyed["+i+"]");
+			var civCentresBuild       		= getGUIObjectByName("civCentresBuild["+i+"]");
+			var enemyCivCentresDestroyed 	= getGUIObjectByName("enemyCivCentresDestroyed["+i+"]");
+			
+			var foodGathered         		= getGUIObjectByName("foodGathered["+i+"]");
+			var vegetarianRatio      		= getGUIObjectByName("vegetarianRatio["+i+"]");
+			var woodGathered         		= getGUIObjectByName("woodGathered["+i+"]");
+			var metalGathered        		= getGUIObjectByName("metalGathered["+i+"]");
+			var stoneGathered        		= getGUIObjectByName("stoneGathered["+i+"]");
+			
+			// align counters
+			
+			var left = 140;
+			var width = 100;
+			unitsTrained.size				= left + " 2 " + (left + width) + " 100%"; left += width;
+			unitsLost.size 					= left + " 2 " + (left + width) + " 100%"; left += width;
+			enemyUnitsKilled.size 			= left + " 2 " + (left + width) + " 100%"; left += width;
+			buildingsConstructed.size 		= left + " 2 " + (left + width) + " 100%"; left += width;
+			buildingsLost.size 				= left + " 2 " + (left + width) + " 100%"; left += width;
+			enemyBuildingsDestroyed.size 	= left + " 2 " + (left + width) + " 100%"; left += width;
+			civCentresBuild.size 			= left + " 2 " + (left + width) + " 100%"; left += width;
+			enemyCivCentresDestroyed.size 	= left + " 2 " + (left + width) + " 100%"; left += width;
+			var size = getGUIObjectByName("playerBox0["+i+"]").size;
+			size.right = left + 10;
+			getGUIObjectByName("playerBox0["+i+"]").size = size;
+			
+			
+			var left = 140;
+			foodGathered.size       = left + " 2 " + (left + width) + " 100%"; left += width;
+			vegetarianRatio.size 	= left + " 2 " + (left + width) + " 100%"; left += width;
+			woodGathered.size       = left + " 2 " + (left + width) + " 100%"; left += width;
+			metalGathered.size      = left + " 2 " + (left + width) + " 100%"; left += width;
+			stoneGathered.size      = left + " 2 " + (left + width) + " 100%"; left += width;
+			var size = getGUIObjectByName("playerBox1["+i+"]").size;
+			size.right = left + 10;
+			getGUIObjectByName("playerBox1["+i+"]").size = size;
+			
+			// display counters
+			unitsTrained.caption         		= playerState.statistics.unitsTrained;
+			unitsLost.caption            		= playerState.statistics.unitsLost;
+			enemyUnitsKilled.caption     		= playerState.statistics.enemyUnitsKilled;
+			buildingsConstructed.caption 		= playerState.statistics.buildingsConstructed;
+			buildingsLost.caption        		= playerState.statistics.buildingsLost;
+			enemyBuildingsDestroyed.caption 	= playerState.statistics.enemyBuildingsDestroyed;
+			civCentresBuild.caption      		= playerState.statistics.civCentresBuild;
+			enemyCivCentresDestroyed.caption    = playerState.statistics.enemyCivCentresDestroyed;
+			
+			foodGathered.caption         = playerState.statistics.resourcesGathered.food;
+			vegetarianRatio.caption      = Math.floor(playerState.statistics.resourcesGathered.food > 0 ? 
+				(playerState.statistics.resourcesGathered.vegetarianFood / playerState.statistics.resourcesGathered.food) * 100 : 0) + "%";
+			woodGathered.caption         = playerState.statistics.resourcesGathered.wood;
+			metalGathered.caption        = playerState.statistics.resourcesGathered.metal;
+			stoneGathered.caption        = playerState.statistics.resourcesGathered.stone;
+		}
+		else
+		{
+			// hide player boxes
+			for (var k = 0; k < panelNames.length; ++k)
+			{
+				var playerBox = getGUIObjectByName("playerBox"+k+"["+i+"]");
+				playerBox.hidden = true;
+			}
+		}
+	}
 }
Index: binaries/data/mods/public/gui/summary/summary.xml
===================================================================
--- binaries/data/mods/public/gui/summary/summary.xml	(revision 8505)
+++ binaries/data/mods/public/gui/summary/summary.xml	(working copy)
@@ -11,21 +11,133 @@
 	<object type="image" sprite="bkFillBlack">
 
 		<object type="image"
-			style="wheatWindowGranite"
+			style="wheatWindow"
 			size="25 35 100%-25 100%-25"
 		>
 			<object type="button" style="wheatWindowTitleBar">
 				Summary
 			</object>
 			
-			<object name="summaryText"
-				type="text"
-				size="50 50 100%-50 100%-200"
-				font="serif-16"
-				text_align="center"
-				text_valign="center"
-			/>
+			<object type="image" sprite="bgInfoHeading" size="0 10 100% 40">				
+				<object 
+					name="summaryText"
+					type="text"
+					size="50 0 100%-50 30"
+					font="serif-bold-18"
+					textcolor="255 255 255"
+					text_align="center"
+				/>
 			
+				<object 
+					name="timeElapsed"
+					type="text"
+					size="100%-200 0 100%-10 30"
+					font="serif-16"
+					textcolor="255 255 255"
+					text_align="center"
+				/>
+ 			</object>
+			
+			
+			<object name="unitsBuildingsPanelButton" type="button" sprite="bgInfoBox" text_align="center" size="10 75 160 101">
+				<action on="Press">selectPanel(0);</action>
+				Units/buildings
+			</object>
+			<object name="resourcesPanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="160 75 310 101">
+				<action on="Press">selectPanel(1);</action>
+				Resources
+			</object>
+			<object name="unitsBuildingsPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50">
+				
+				<object size="0 0 100% 100%-50">
+					<object name="playerNameHeading" type="text" text_align="left" font="serif-bold-14"	>
+						Player name
+					</object>
+					<object name="unitsTrainedHeading" type="text" text_align="center" font="serif-bold-14" >
+						Units&#10;trained
+					</object>
+					<object name="unitsLostHeading" type="text" text_align="center" font="serif-bold-14" >
+						Units&#10;lost
+					</object>
+					<object name="enemyUnitsKilledHeading" type="text" text_align="center" font="serif-bold-14" >
+						Enemy units&#10;killed
+					</object>
+					<object name="buildingsConstructedHeading" type="text" text_align="center" font="serif-bold-14" >
+						Buildings&#10;constructed
+					</object>
+					<object name="buildingsLostHeading" type="text" text_align="center" font="serif-bold-14" >
+						Buildings&#10;lost
+					</object>
+					<object name="enemyBuildingsDestroyedHeading" type="text" text_align="center" font="serif-bold-14" >
+						Enemy&#10;buildings&#10;destroyed
+					</object>
+					<object name="civCentresBuildHeading" type="text" text_align="center" font="serif-bold-14" >
+						Civ centres&#10;build
+					</object>
+					<object name="enemyCivCentresDestroyedHeading" type="text" text_align="center" font="serif-bold-14" >
+						Enemy&#10;civ centres&#10;destroyed
+					</object>
+					
+				</object>	
+				
+				<object size="0 65 100% 100%-50">
+					<repeat count="8">
+						<object type="image" name="playerBox0[n]" size="10 0 10 30" hidden="true">
+							<object name="playerColourBox0[n]"     		type="image" size="10 4 30 24" />
+							<object name="playerName0[n]"          		type="text" text_align="left"  size="40 2 140 100%" />
+							<object name="unitsTrained[n]"         		type="text" text_align="center" />
+							<object name="unitsLost[n]"            		type="text" text_align="center" />
+							<object name="enemyUnitsKilled[n]"     		type="text" text_align="center" />
+							<object name="buildingsConstructed[n]" 		type="text" text_align="center" />
+							<object name="buildingsLost[n]"        		type="text" text_align="center" />
+							<object name="enemyBuildingsDestroyed[n]"   type="text" text_align="center" />
+							<object name="civCentresBuild[n]"      		type="text" text_align="center" />
+							<object name="enemyCivCentresDestroyed[n]" 	type="text" text_align="center" />
+						</object>
+					</repeat>
+				</object>
+			
+			</object>
+			<object name="resourcesPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
+			
+				<object size="0 0 100% 100%-50">
+					<object name="playerName2Heading" type="text" text_align="left" font="serif-bold-14" >
+						Player name
+					</object>
+					<object name="foodGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
+						Food&#10;gathered
+					</object>
+					<object name="vegetarianRatioHeading" type="text" text_align="center" font="serif-bold-14" >
+						Vegetarian&#10;ratio
+					</object>
+					<object name="woodGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
+						Wood&#10;gathered
+					</object>
+					<object name="metalGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
+						Metal&#10;gathered
+					</object>
+					<object name="stoneGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
+						Stone&#10;gathered
+					</object>
+					
+				</object>	
+				
+				<object size="0 65 100% 100%-50">
+					<repeat count="8">
+						<object type="image" name="playerBox1[n]" size="10 0 10 30" hidden="true">
+							<object name="playerColourBox1[n]" type="image" size="10 4 30 24" />
+							<object name="playerName1[n]"      type="text" text_align="left"  size="40 2 140 100%" />
+							<object name="foodGathered[n]"     type="text" text_align="center" />
+							<object name="vegetarianRatio[n]"  type="text" text_align="center" />
+							<object name="woodGathered[n]"     type="text" text_align="center" />
+							<object name="metalGathered[n]"    type="text" text_align="center" />
+							<object name="stoneGathered[n]"    type="text" text_align="center" />
+						</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/Armour.js
===================================================================
--- binaries/data/mods/public/simulation/components/Armour.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/Armour.js	(working copy)
@@ -33,7 +33,7 @@
 
 	// Reduce health
 	var cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
-	cmpHealth.Reduce(total);
+	return cmpHealth.Reduce(total);
 };
 
 Armour.prototype.GetArmourStrengths = function()
Index: binaries/data/mods/public/simulation/components/Attack.js
===================================================================
--- binaries/data/mods/public/simulation/components/Attack.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/Attack.js	(working copy)
@@ -212,7 +212,13 @@
 	var cmpDamageReceiver = Engine.QueryInterface(data.target, IID_DamageReceiver);
 	if (!cmpDamageReceiver)
 		return;
-	cmpDamageReceiver.TakeDamage(strengths.hack, strengths.pierce, strengths.crush);
+	var targetState = cmpDamageReceiver.TakeDamage(strengths.hack, strengths.pierce, strengths.crush);
+	// if target killed pick up loot and credit experience
+	if (targetState.killed == true)
+	{
+		var cmpLooter = Engine.QueryInterface(SYSTEM_ENTITY, IID_Looter);
+		cmpLooter.TargetKilled(this.entity, data.target);
+	}
 
 	Engine.PostMessage(data.target, MT_Attacked,
 		{ "attacker": this.entity, "target": data.target });
Index: binaries/data/mods/public/simulation/components/Foundation.js
===================================================================
--- binaries/data/mods/public/simulation/components/Foundation.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/Foundation.js	(working copy)
@@ -107,7 +107,15 @@
 		var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
 		var cmpBuildingOwnership = Engine.QueryInterface(building, IID_Ownership);
 		cmpBuildingOwnership.SetOwner(cmpOwnership.GetOwner());
-
+		
+		var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
+		var playerEntityId = cmpPlayerManager.GetPlayerByID(cmpOwnership.GetOwner());
+		var cmpPlayer = Engine.QueryInterface(playerEntityId, IID_Player);
+		cmpPlayer.IncreaseConstructedBuildingsCounter();
+		
+		var cmpIdentity = Engine.QueryInterface(building, IID_Identity);
+		if (cmpIdentity.GetClassesList().indexOf("CivCentre") != -1) cmpPlayer.IncreaseBuildCivCentresCounter();
+		
 		var cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
 		var cmpBuildingHealth = Engine.QueryInterface(building, IID_Health);
 		cmpBuildingHealth.SetHitpoints(cmpHealth.GetHitpoints());
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js	(revision 8505)
+++ 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)
@@ -41,6 +45,7 @@
 			"team": cmpPlayer.GetTeam(),
 			"diplomacy": cmpPlayer.GetDiplomacy(),
 			"phase": cmpPlayer.GetPhase(),
+			"statistics": cmpPlayer.GetStatistics() 
 		};
 		ret.players.push(playerData);
 	}
Index: binaries/data/mods/public/simulation/components/Health.js
===================================================================
--- binaries/data/mods/public/simulation/components/Health.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/Health.js	(working copy)
@@ -79,6 +79,7 @@
 
 Health.prototype.Reduce = function(amount)
 {
+	var state = { "killed": false };
 	if (amount >= this.hitpoints)
 	{
 		// If this is the first time we reached 0, then die.
@@ -86,6 +87,8 @@
 		// might get called multiple times)
 		if (this.hitpoints)
 		{
+			state.killed = true;
+			
 			PlaySound("death", this.entity);
 
 			if (this.template.DeathType == "corpse")
@@ -121,6 +124,7 @@
 
 		Engine.PostMessage(this.entity, MT_HealthChanged, { "from": old, "to": this.hitpoints });
 	}
+	return state;
 };
 
 Health.prototype.Increase = function(amount)
Index: binaries/data/mods/public/simulation/components/Identity.js
===================================================================
--- binaries/data/mods/public/simulation/components/Identity.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/Identity.js	(working copy)
@@ -73,6 +73,7 @@
 						"<value>Organic</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/Looter.js
===================================================================
--- binaries/data/mods/public/simulation/components/Looter.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/Looter.js	(working copy)
@@ -1,11 +1,38 @@
 function Looter() {}
 
 Looter.prototype.Schema =
-	"<empty/>";
+	"<a:component type='system'/><empty/>";
 
-/*
- * TODO: this all needs to be designed and implemented
- */
+// called when some units kills something (another unit, building, animal etc)
+// updating player statistics only for now
+Looter.prototype.TargetKilled = function(killerEntity, targetEntity)
+{
+	var cmpTargetIdentity = Engine.QueryInterface(targetEntity, IID_Identity);
+	if (cmpTargetIdentity)
+	{
+		var classes = cmpTargetIdentity.GetClassesList();
+		// we want to deal only with real structures, not foundations
+		var cmpFoundation = Engine.QueryInterface(targetEntity, IID_Foundation);
+		var targetIsStructure = classes.indexOf("Structure") != -1 && cmpFoundation == null;
+		var targetIsUnit = classes.indexOf("Unit") != -1;
+		var targetIsCivCentre = classes.indexOf("CivCentre") != -1;
+		
+		var cmpKillerOwnership = Engine.QueryInterface(killerEntity, IID_Ownership);
+		var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
+		var killerPlayerEntityId = cmpPlayerManager.GetPlayerByID(cmpKillerOwnership.GetOwner());
+		var cmpKillerPlayer = Engine.QueryInterface(killerPlayerEntityId, IID_Player);
+		
+		var cmpTargetOwnership = Engine.QueryInterface(targetEntity, IID_Ownership);
+		
+		// don't increase counters if target player is gaia (player 0)
+		if (cmpTargetOwnership.GetOwner() != 0)
+		{
+			if (targetIsUnit) cmpKillerPlayer.IncreaseEnemyUnitsKilledCounter();
+			if (targetIsStructure) cmpKillerPlayer.IncreaseEnemyBuildingsDestroyedCounter();
+			if (targetIsCivCentre) cmpKillerPlayer.IncreaseEnemyCivCentresDestroyedCounter();
+		}
+	}
+}
 
 Engine.RegisterComponentType(IID_Looter, "Looter", Looter);
 
Index: binaries/data/mods/public/simulation/components/Player.js
===================================================================
--- binaries/data/mods/public/simulation/components/Player.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/Player.js	(working copy)
@@ -24,6 +24,28 @@
 	this.state = "active"; // game state - one of "active", "defeated", "won"
 	this.diplomacy = [];	// array of diplomatic stances for this player with respect to other players (including self)
 	this.conquestCriticalEntitiesCount = 0; // number of owned units with ConquestCritical class
+	// statistics
+	// units
+	this.statistics = {
+		"unitsTrained" : 0,
+		"unitsLost" : 0,
+		"enemyUnitsKilled" : 0,
+		//buildings
+		"buildingsConstructed" : 0,
+		"buildingsLost" : 0,
+		"enemyBuildingsDestroyed" : 0,
+		// civ centres
+		"civCentresBuild" : 0,
+		"enemyCivCentresDestroyed" : 0,
+		// resources
+		"resourcesGathered" : {
+			"food": 0,	
+			"wood": 0,	
+			"metal": 0,	
+			"stone": 0,
+			"vegetarianFood": 0
+		}
+	};
 	this.phase = "village";
 };
 
@@ -121,15 +143,22 @@
 	return this.resourceCount;
 };
 
-Player.prototype.AddResource = function(type, amount)
+/* last param should be passed only from ResourceGatherer.PerformGather */
+Player.prototype.AddResource = function(type, amount, specificType)
 {
 	this.resourceCount[type] += (+amount);
+	this.statistics.resourcesGathered[type] += amount;
+	
+	if (type == "food" && (specificType == "fruit" || specificType == "grain"))
+		this.statistics.resourcesGathered["vegetarianFood"] += amount;
 };
 
 Player.prototype.AddResources = function(amounts)
 {
 	for (var type in amounts)
+	{
 		this.resourceCount[type] += (+amounts[type]);
+	}
 };
 
 Player.prototype.TrySubtractResources = function(amounts)
@@ -177,6 +206,7 @@
 	return this.conquestCriticalEntitiesCount;
 };
 
+
 Player.prototype.GetTeam = function()
 {
 	return this.team;
@@ -207,24 +237,72 @@
 	this.phase = p;
 };
 
+Player.prototype.GetStatistics = function()
+{
+	return this.statistics;
+};
+
+Player.prototype.IncreaseTrainedUnitsCounter = function()
+{
+	return this.statistics.unitsTrained++;
+};
+
+Player.prototype.IncreaseEnemyUnitsKilledCounter = function()
+{
+	return this.statistics.enemyUnitsKilled++;
+};
+
+Player.prototype.IncreaseConstructedBuildingsCounter = function()
+{
+	return this.statistics.buildingsConstructed++;
+};
+
+Player.prototype.IncreaseEnemyBuildingsDestroyedCounter = function()
+{
+	return this.statistics.enemyBuildingsDestroyed++;
+};
+
+Player.prototype.IncreaseBuildCivCentresCounter = function()
+{
+	return this.statistics.civCentresBuild++;
+};
+
+Player.prototype.IncreaseEnemyCivCentresDestroyedCounter = function()
+{
+	return this.statistics.enemyCivCentresDestroyed++;
+};
+
 // 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;
 
 	// 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;
+		}
 	}
-
+	
 	if (msg.from == this.playerID)
 	{
-		if (classes.indexOf("ConquestCritical") != -1)
-			this.conquestCriticalEntitiesCount--;
+		if (isConquestCritical)
+			this.conquestCriticalEntitiesCount--;	
+		if (isStructure)
+			this.statistics.buildingsLost++;
+		if (isUnit)
+			this.statistics.unitsLost++;
 
 		var cost = Engine.QueryInterface(msg.entity, IID_Cost);
 		if (cost)
@@ -236,9 +314,9 @@
 	
 	if (msg.to == this.playerID)
 	{
-		if (classes.indexOf("ConquestCritical") != -1)
+		if (isConquestCritical)
 			this.conquestCriticalEntitiesCount++;
-
+			
 		var cost = Engine.QueryInterface(msg.entity, IID_Cost);
 		if (cost)
 		{
Index: binaries/data/mods/public/simulation/components/ResourceGatherer.js
===================================================================
--- binaries/data/mods/public/simulation/components/ResourceGatherer.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/ResourceGatherer.js	(working copy)
@@ -74,7 +74,7 @@
 	var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
 	var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
 	var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(cmpOwnership.GetOwner()), IID_Player);
-	cmpPlayer.AddResource(type.generic, status.amount);
+	cmpPlayer.AddResource(type.generic, status.amount, type.specific);
 
 	// Tell the target we're gathering from it
 	Engine.PostMessage(target, MT_ResourceGather,
Index: binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js	(working copy)
@@ -41,6 +41,13 @@
 	GetTeam: function() { return -1; },
 	GetDiplomacy: function() { return []; },
 	GetPhase: function() { return ""; },
+	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, {
@@ -55,6 +62,13 @@
 	GetTeam: function() { return -1; },
 	GetDiplomacy: function() { return [1]; },
 	GetPhase: function() { return "village"; },
+	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(), {
@@ -71,6 +85,18 @@
 			team: -1,
 			diplomacy: [],
 			phase: "",
+			conquestCriticalEntitiesCount = 1;
+			unitsTrained = 10;
+			unitsLost = 9;
+			buildingsConstructed = 5;
+			buildingsLost = 4;
+			civCentresBuild = 1;
+			resourcesGathered = {
+				"food": 100,	
+				"wood": 0,	
+				"metal": 0,	
+				"stone": 0	
+			},
 		},
 		{
 			name: "Player 2",
@@ -84,6 +110,18 @@
 			team: -1,
 			diplomacy: [1],
 			phase: "village",
+			conquestCriticalEntitiesCount = 1;
+			unitsTrained = 10;
+			unitsLost = 9;
+			buildingsConstructed = 5;
+			buildingsLost = 4;
+			civCentresBuild = 1;
+			resourcesGathered = {
+				"food": 100,	
+				"wood": 0,	
+				"metal": 0,	
+				"stone": 0	
+			},
 		}
 	],
 	circularMap: false,
Index: binaries/data/mods/public/simulation/components/TrainingQueue.js
===================================================================
--- binaries/data/mods/public/simulation/components/TrainingQueue.js	(revision 8505)
+++ binaries/data/mods/public/simulation/components/TrainingQueue.js	(working copy)
@@ -218,7 +218,12 @@
 
 		var cmpNewOwnership = Engine.QueryInterface(ent, IID_Ownership);
 		cmpNewOwnership.SetOwner(cmpOwnership.GetOwner());
-
+		
+		var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
+		var playerEntityId = cmpPlayerManager.GetPlayerByID(cmpOwnership.GetOwner());
+		var cmpPlayer = Engine.QueryInterface(playerEntityId, IID_Player);
+		cmpPlayer.IncreaseTrainedUnitsCounter();
+		
 		ents.push(ent);
 
 		// Play a sound, but only for the first in the batch (to avoid nasty phasing effects)
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 8505)
+++ binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml	(working copy)
@@ -3,7 +3,11 @@
   <Identity>
     <GenericName>Civic Centre</GenericName>
     <Tooltip>Build upon a settlement to capture territory.</Tooltip>
-    <Classes datatype="tokens">Village Defensive</Classes>
+    <Classes datatype="tokens">
+		Village 
+		Defensive
+		CivCentre
+	</Classes>
     <Icon>structures/civic_centre.png</Icon>
   </Identity>
   <BuildRestrictions>
Index: source/simulation2/Simulation2.cpp
===================================================================
--- source/simulation2/Simulation2.cpp	(revision 8505)
+++ source/simulation2/Simulation2.cpp	(working copy)
@@ -100,6 +100,7 @@
 			LOAD_SCRIPTED_COMPONENT("PlayerManager");
 			LOAD_SCRIPTED_COMPONENT("Timer");
 			LOAD_SCRIPTED_COMPONENT("EndGameManager");
+			LOAD_SCRIPTED_COMPONENT("Looter");
 
 #undef LOAD_SCRIPTED_COMPONENT
 		}
