diff --git a/binaries/data/mods/public/gui/session/minimap_panel.xml b/binaries/data/mods/public/gui/session/minimap_panel.xml
index ae8d207..f0639f9 100644
--- a/binaries/data/mods/public/gui/session/minimap_panel.xml
+++ b/binaries/data/mods/public/gui/session/minimap_panel.xml
@@ -19,6 +19,17 @@
 			<action on="MouseLeftRelease">if (g_HasIdleWorker) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle-highlight.png";</action>
 		</object>
 	</object>
+
+	<!-- select option -->
+	<object size="5 5 80 80">
+		<object type="button"
+			name="selectButton"
+			tooltip_style="sessionToolTip"
+		>
+			<action on="Press">Engine.GetGUIObjectByName("minimapDetailsPanel").hidden = !Engine.GetGUIObjectByName("minimapDetailsPanel").hidden</action>
+		</object>
+	</object>
+
 	<!-- Minimap -->
 	<object name="minimap"
 		type="minimap" z="20"
@@ -29,4 +40,29 @@
 	<!-- Overlays -->
 	<object name="minimapOverlay" size="4 4 100%-4 100%-4" type="image" sprite="stretched:session/minimap_circle_modern.png" ghost="true"/>
 	<object name="idleOverlay" z="100" size="100%-125 100%-125 100%-5 100%-5" type="image" sprite="stretched:session/minimap-idle.png" ghost="true"/>
+
+<object
+	name="minimapDetailsPanel"
+	size="0 100%-400 212 100%-212"
+	type="image"
+	sprite="supplementalDetailsPanel"
+	hidden="true"
+>
+	<object name="minimapLayerResourcesCheckbox" size="0 0 100% 20" type="checkbox" style="ModernTickBox" checked="true">
+		<action on="Press">Engine.GetGUIObjectByName("minimap").show_resources = !Engine.GetGUIObjectByName("minimap").show_resources;</action>
+	</object>
+	<object name="minimapLayerResourcesLabel" size="20 0 100%-20 20" type="text" style="ModernLabelText" text_align="left">
+			<translatableAttribute id="caption">Resources</translatableAttribute>
+	</object>
+	<object name="minimapLayerResourcesSoloButton" size="100%-20 0 100% 20" type="image" sprite="iconInfoWhite"/><!-- TODO: add a magnifying glass sprite or something -->
+
+	<object name="minimapLayerUnitsCheckbox" size="0 24 100% 44" type="checkbox" style="ModernTickBox" checked="true">
+		<action on="Press">Engine.GetGUIObjectByName("minimap").show_units = !Engine.GetGUIObjectByName("minimap").show_units;</action>
+	</object>
+	<object name="minimapLayerUnitsLabel" size="20 24 100%-20 44" type="text" style="ModernLabelText" text_align="left">
+			<translatableAttribute id="caption">Units</translatableAttribute>
+	</object>
+	<object name="minimapLayerUnitsSoloButton" size="100%-20 24 100% 44" type="image" sprite="iconInfoWhite"/><!-- TODO: add a magnifying glass sprite or something -->
+</object>
+
 </object>
diff --git a/source/gui/MiniMap.cpp b/source/gui/MiniMap.cpp
index d15f150..c71fbc0 100644
--- a/source/gui/MiniMap.cpp
+++ b/source/gui/MiniMap.cpp
@@ -70,6 +70,15 @@ CMiniMap::CMiniMap() :
 	AddSetting(GUIST_CColor,	"fov_wedge_color");
 	AddSetting(GUIST_CStrW,		"tooltip");
 	AddSetting(GUIST_CStr,		"tooltip_style");
+
+	AddSetting(GUIST_bool,		"show_resources");
+	AddSetting(GUIST_bool,		"show_units");
+
+	GUI<bool>::SetSetting(this, "show_resources", true);
+	GUI<bool>::SetSetting(this, "show_units", true);
+
+	GUI<bool>::GetSetting(this, "show_units", m_ShowUnits);
+	GUI<bool>::GetSetting(this, "show_resources", m_ShowResources);
 	m_Clicking = false;
 	m_MouseHovering = false;
 
@@ -143,6 +152,10 @@ void CMiniMap::HandleMessage(SGUIMessage& Message)
 {
 	switch (Message.type)
 	{
+	case GUIM_SETTINGS_UPDATED:
+		GUI<bool>::GetSetting(this, "show_units", m_ShowUnits);
+		GUI<bool>::GetSetting(this, "show_resources", m_ShowResources);
+		break;
 	case GUIM_MOUSE_PRESS_LEFT:
 		if (m_MouseHovering)
 		{
@@ -529,6 +542,8 @@ void CMiniMap::Draw()
 		for (CSimulation2::InterfaceList::const_iterator it = ents.begin(); it != ents.end(); ++it)
 		{
 			ICmpMinimap* cmpMinimap = static_cast<ICmpMinimap*>(it->second);
+			if (!cmpMinimap->ShouldRender(m_ShowResources, m_ShowUnits))
+				continue;
 			if (cmpMinimap->GetRenderData(v.r, v.g, v.b, posX, posZ))
 			{
 				ICmpRangeManager::ELosVisibility vis = cmpRangeManager->GetLosVisibility(it->first, g_Game->GetSimulation2()->GetSimContext().GetCurrentDisplayedPlayer());
diff --git a/source/gui/MiniMap.h b/source/gui/MiniMap.h
index 17f76c5..804b839 100644
--- a/source/gui/MiniMap.h
+++ b/source/gui/MiniMap.h
@@ -107,6 +107,10 @@ protected:
 	double m_HalfBlinkDuration;
 	double m_NextBlinkTime;
 	bool m_BlinkState;
+
+	// activate/deactivate layers
+	bool m_ShowResources;
+	bool m_ShowUnits;
 };
 
 #endif // INCLUDED_MINIMAP
diff --git a/source/simulation2/components/CCmpMinimap.cpp b/source/simulation2/components/CCmpMinimap.cpp
index 045573d..a1cc126 100644
--- a/source/simulation2/components/CCmpMinimap.cpp
+++ b/source/simulation2/components/CCmpMinimap.cpp
@@ -45,11 +45,26 @@ public:
 
 	u8 m_R, m_G, m_B; // static template state if m_UsePlayerColor false; dynamic state if true
 
+	enum Type: u8
+	{
+		FOOD,
+		WOOD,
+		STONE,
+		METAL,
+		STRUCTURE,
+		SETTLEMENT,
+		UNIT,
+		SUPPORT,
+		HERO
+	};
+
 	// Dynamic state:
 
 	bool m_Active;
 	entity_pos_t m_X, m_Z; // cache the latest position for more efficient rendering; only valid when m_Active true
 
+	Type m_Type;
+
 	// Not serialized (based on renderer timing):
 	// TODO: eventually ping state should be serialized and tied into simulation time, but currently lag causes too many problems
 	double m_PingEndTime;
@@ -108,6 +123,12 @@ public:
 			m_G = 0;
 			m_B = 255;
 		}
+		CStr type = paramNode.GetChild("Type").ToUTF8();
+		if (type == "food" || type == "wood" || type == "stone" || type=="metal")
+			m_Type = Type::FOOD;
+		else
+			m_Type = Type::HERO;
+		std::cout << m_Type << std::endl;
 	}
 
 	virtual void Deinit()
@@ -220,6 +241,15 @@ public:
 		return true;
 	}
 
+	virtual bool ShouldRender(bool showResources, bool showUnits)
+	{
+		if (m_Type == Type::FOOD && !showResources)
+			return false;
+		else if (m_Type != Type::FOOD && !showUnits)
+			return false;
+		return true;
+	}
+
 	virtual bool CheckPing(double currentTime, double pingDuration)
 	{
 		if (!m_Active || !m_IsPinging)
diff --git a/source/simulation2/components/ICmpMinimap.h b/source/simulation2/components/ICmpMinimap.h
index 2cfeab3..9b38936 100644
--- a/source/simulation2/components/ICmpMinimap.h
+++ b/source/simulation2/components/ICmpMinimap.h
@@ -35,6 +35,8 @@ public:
 	 */
 	virtual bool GetRenderData(u8& r, u8& g, u8& b, entity_pos_t& x, entity_pos_t& z) = 0;
 
+	virtual bool ShouldRender(bool showResources, bool showUnits) = 0;
+
 	/**
 	 * Return true if entity is actively pinging based on the current time
 	 */
