Index: source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Object/Object.cpp
===================================================================
--- source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Object/Object.cpp	(revision 16244)
+++ source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Object/Object.cpp	(working copy)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014 Wildfire Games.
+/* Copyright (C) 2015 Wildfire Games.
  * This file is part of 0 A.D.
  *
  * 0 A.D. is free software: you can redistribute it and/or modify
@@ -71,6 +72,7 @@
 
 	void OnFirstDisplay();
 	void ShowActorViewer(bool show);
+	void OnSelectedObjectsChange(const std::vector<AtlasMessage::ObjectID>& selectedObjects);
 
 private:
 	void OnViewerSetting(wxCommandEvent& evt);
@@ -88,9 +90,9 @@
 	int m_ViewerPropPointsMode; // 0 disabled, 1 for point markers, 2 for point markers + axes
 
 	wxPanel* m_ViewerPanel;
+	wxScrolledWindow* m_TemplateNames;
 
 	ObjectSidebarImpl* p;
-
 	DECLARE_EVENT_TABLE();
 };
 
@@ -462,10 +511,66 @@
 	mainSizer->Add(playerVariationSizer, wxSizerFlags().Expand());
 
 	// ----------------------------------------------------------------------------------
+	// --- display template name
+	wxSizer* displaySizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Selected entity templates"));
+	m_TemplateNames = new wxScrolledWindow(this);
+	m_TemplateNames->SetMinSize(wxSize(250, -1));
+	m_TemplateNames->SetScrollRate(0, 5);
+	wxSizer* scrollwindowSizer = new wxBoxSizer(wxVERTICAL);
+	m_TemplateNames->SetSizer(scrollwindowSizer);
+	displaySizer->Add(m_TemplateNames, wxSizerFlags().Proportion(1).Expand());
+	m_TemplateNames->Layout();
+	mainSizer->AddSpacer(3);
+	mainSizer->Add(displaySizer, wxSizerFlags().Proportion(1).Expand());
 
+	g_SelectedObjects.RegisterObserver(0, &ObjectBottomBar::OnSelectedObjectsChange, this);
+
 	SetSizer(mainSizer);
 }
 
+static wxControl* CreateTemplateNameObject(wxWindow* parent, const std::string templateName, int counterTemplate)
+{
+	wxString idTemplate(templateName.c_str());
+	if (counterTemplate > 1)
+		idTemplate.Append(wxString::Format(wxT(" (%i)"), counterTemplate));
+
+	wxStaticText* templateNameObject= new wxStaticText(parent, wxID_ANY, idTemplate);
+	return templateNameObject;
+}
+void ObjectBottomBar::OnSelectedObjectsChange(const std::vector<AtlasMessage::ObjectID>& selectedObjects)
+{
+	Freeze();
+	wxSizer* sizer = m_TemplateNames->GetSizer();
+	sizer->Clear(true);
+	AtlasMessage::qGetSelectedObjectsTemplateNames objectTemplatesName(selectedObjects);
+	objectTemplatesName.Post();
+	std::vector<std::string> names = *objectTemplatesName.names;
+	int counterTemplate = 0;
+	std::string lastTemplateName = "";
+	for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); ++it)
+	{
+		if (lastTemplateName == "")
+			lastTemplateName = (*it);
+
+		if (lastTemplateName == (*it))
+		{
+			++counterTemplate;
+			continue;
+		}
+
+		sizer->Add(CreateTemplateNameObject(m_TemplateNames, lastTemplateName, counterTemplate), wxSizerFlags().Align(wxALIGN_LEFT));
+
+		lastTemplateName = (*it);
+		counterTemplate = 1;
+	}
+
+	//add the last template
+	sizer->Add(CreateTemplateNameObject(m_TemplateNames, lastTemplateName, counterTemplate), wxSizerFlags().Align(wxALIGN_LEFT));
+
+	Thaw();
+	sizer->FitInside(m_TemplateNames);
+}
+
 void ObjectBottomBar::OnFirstDisplay()
 {
 	// We use messages here because the simulation is not init'd otherwise (causing a crash)
Index: source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp
===================================================================
--- source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp	(revision 16244)
+++ source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp	(working copy)
@@ -975,4 +1149,22 @@
 	AtlasView::GetView_Game()->SetBandbox(msg->show, (float)msg->sx0, (float)msg->sy0, (float)msg->sx1, (float)msg->sy1);
 }
 
+QUERYHANDLER(GetSelectedObjectsTemplateNames)
+{
+	std::vector<entity_id_t> ids = *msg->ids;
+	std::vector<std::string> names;
+
+	CmpPtr<ICmpTemplateManager> cmpTemplateManager(*g_Game->GetSimulation2(), SYSTEM_ENTITY);
+	ENSURE(cmpTemplateManager);
+
+	for (size_t i = 0; i < ids.size(); ++i)
+	{
+		entity_id_t id = (entity_id_t)ids[i];
+		std::string templateName = cmpTemplateManager->GetCurrentTemplateName(id);
+		names.push_back(templateName);
+	}
+
+	std::sort(names.begin(), names.end());
+	msg->names = names;
 }
+}
Index: source/tools/atlas/GameInterface/Messages.h
===================================================================
--- source/tools/atlas/GameInterface/Messages.h	(revision 16244)
+++ source/tools/atlas/GameInterface/Messages.h	(working copy)
@@ -693,7 +712,13 @@
 		((Position, position))
 		);
 
+QUERY(GetSelectedObjectsTemplateNames,
+		((std::vector<ObjectID>, ids))
+		,
+		((std::vector<std::string>, names))
+		);
 
+
 #ifndef MESSAGES_SKIP_SETUP
 #include "MessagesSetup.h"
 #endif