diff --git a/frontend-js/.idea/workspace.xml b/frontend-js/.idea/workspace.xml
index d9343e2ca6e44381bc048c5e36621f30c5ee9d1c..8af6484888f36a43cfcc07185a070bac91a2149b 100644
--- a/frontend-js/.idea/workspace.xml
+++ b/frontend-js/.idea/workspace.xml
@@ -6,11 +6,8 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="c119f0dd-fdda-4d02-a51e-86bc6ef7e50c" name="Default" comment="">
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/map/data/IdentifiedElement.js" afterPath="$PROJECT_DIR$/src/main/js/map/data/IdentifiedElement.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/map/window/AbstractInfoWindow.js" afterPath="$PROJECT_DIR$/src/main/js/map/window/AbstractInfoWindow.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/map/window/AliasInfoWindow.js" afterPath="$PROJECT_DIR$/src/main/js/map/window/AliasInfoWindow.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/map/window/PointInfoWindow.js" afterPath="$PROJECT_DIR$/src/main/js/map/window/PointInfoWindow.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/map/window/ReactionInfoWindow.js" afterPath="$PROJECT_DIR$/src/main/js/map/window/ReactionInfoWindow.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js" afterPath="$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/gui/topMenu/TopMenu-test.js" afterPath="$PROJECT_DIR$/src/test/js/gui/topMenu/TopMenu-test.js" />
     </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
@@ -24,26 +21,6 @@
   </component>
   <component name="FileEditorManager">
     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="ServerConnector.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/main/js/ServerConnector.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="201">
-              <caret line="699" column="0" lean-forward="false" selection-start-line="699" selection-start-column="0" selection-end-line="699" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="ServerConnector-test.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/test/js/ServerConnector-test.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="405">
-              <caret line="99" column="45" lean-forward="false" selection-start-line="99" selection-start-column="45" selection-end-line="99" selection-end-column="45" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
       <file leaf-file-name="minerva.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/main/js/minerva.js">
           <provider selected="true" editor-type-id="text-editor">
@@ -61,22 +38,42 @@
       <file leaf-file-name="TopMenu.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="269">
-              <caret line="176" column="49" lean-forward="false" selection-start-line="176" selection-start-column="49" selection-end-line="176" selection-end-column="49" />
+            <state relative-caret-position="235">
+              <caret line="187" column="31" lean-forward="false" selection-start-line="187" selection-start-column="31" selection-end-line="187" selection-end-column="31" />
               <folding>
-                <marker date="1503674880088" expanded="true" signature="2338:2390" ph="..." />
-                <marker date="1503674880088" expanded="true" signature="4001:4033" ph="..." />
-                <marker date="1503674880088" expanded="true" signature="4435:4487" ph="..." />
+                <marker date="1503676564911" expanded="true" signature="2208:2260" ph="..." />
+                <marker date="1503676564911" expanded="true" signature="3751:3783" ph="..." />
+                <marker date="1503676564911" expanded="true" signature="4157:4209" ph="..." />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="AbstractInfoWindow.js" pinned="false" current-in-tab="true">
+      <file leaf-file-name="AbstractInfoWindow.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/main/js/map/window/AbstractInfoWindow.js">
           <provider selected="true" editor-type-id="text-editor">
             <state relative-caret-position="-1482">
-              <caret line="96" column="31" lean-forward="true" selection-start-line="96" selection-start-column="31" selection-end-line="96" selection-end-column="31" />
+              <caret line="96" column="31" lean-forward="false" selection-start-line="96" selection-start-column="31" selection-end-line="96" selection-end-column="31" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="TopMenu-test.js" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/test/js/gui/topMenu/TopMenu-test.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="485">
+              <caret line="52" column="47" lean-forward="false" selection-start-line="52" selection-start-column="47" selection-end-line="52" selection-end-column="47" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Legend.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/js/gui/Legend.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="459">
+              <caret line="34" column="5" lean-forward="true" selection-start-line="34" selection-start-column="5" selection-end-line="34" selection-end-column="5" />
               <folding />
             </state>
           </provider>
@@ -136,7 +133,6 @@
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>makeL</find>
       <find>trigger</find>
       <find>MakeL</find>
       <find>onSaveClicked</find>
@@ -166,6 +162,7 @@
       <find>getI</find>
       <find>getEl</find>
       <find>getIde</find>
+      <find>legend.sh</find>
     </findStrings>
     <replaceStrings>
       <replace>ValidationError</replace>
@@ -181,7 +178,6 @@
   <component name="IdeDocumentHistory">
     <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js" />
         <option value="$PROJECT_DIR$/src/test/js/gui/Panel-test.js" />
         <option value="$PROJECT_DIR$/src/main/js/gui/leftPanel/SubmapPanel.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/Submap.js" />
@@ -226,12 +222,13 @@
         <option value="$PROJECT_DIR$/src/test/js/ServerConnector-test.js" />
         <option value="$PROJECT_DIR$/src/main/js/ServerConnector.js" />
         <option value="$PROJECT_DIR$/src/main/js/minerva.js" />
-        <option value="$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/window/ReactionInfoWindow.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/window/PointInfoWindow.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/window/AliasInfoWindow.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/data/IdentifiedElement.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/window/AbstractInfoWindow.js" />
+        <option value="$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js" />
+        <option value="$PROJECT_DIR$/src/test/js/gui/topMenu/TopMenu-test.js" />
       </list>
     </option>
   </component>
@@ -314,16 +311,7 @@
               <item name="src" type="462c0819:PsiDirectoryNode" />
               <item name="main" type="462c0819:PsiDirectoryNode" />
               <item name="js" type="462c0819:PsiDirectoryNode" />
-              <item name="map" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="frontend-js" type="b2602c69:ProjectViewProjectNode" />
-              <item name="frontend-js" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="main" type="462c0819:PsiDirectoryNode" />
-              <item name="js" type="462c0819:PsiDirectoryNode" />
-              <item name="map" type="462c0819:PsiDirectoryNode" />
-              <item name="window" type="462c0819:PsiDirectoryNode" />
+              <item name="gui" type="462c0819:PsiDirectoryNode" />
             </path>
             <path>
               <item name="frontend-js" type="b2602c69:ProjectViewProjectNode" />
@@ -353,7 +341,7 @@
               <item name="test" type="462c0819:PsiDirectoryNode" />
               <item name="js" type="462c0819:PsiDirectoryNode" />
               <item name="gui" type="462c0819:PsiDirectoryNode" />
-              <item name="admin" type="462c0819:PsiDirectoryNode" />
+              <item name="topMenu" type="462c0819:PsiDirectoryNode" />
             </path>
             <path>
               <item name="frontend-js" type="b2602c69:ProjectViewProjectNode" />
@@ -407,7 +395,7 @@
       </list>
     </option>
   </component>
-  <component name="RunManager" selected="Node.js.test without coverage">
+  <component name="RunManager" selected="npm.test">
     <configuration name="AddProjectDialog" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
       <node-interpreter>project</node-interpreter>
       <node-options />
@@ -484,6 +472,21 @@
         <name value="default" />
       </test-names>
     </configuration>
+    <configuration name="TopMenu.toggleLegend" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST</test-kind>
+      <test-file>$PROJECT_DIR$/src/test/js/gui/topMenu/TopMenu-test.js</test-file>
+      <test-names>
+        <name value="TopMenu" />
+        <name value="toggleLegend" />
+      </test-names>
+    </configuration>
     <configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
       <node-interpreter>project</node-interpreter>
       <node-options />
@@ -564,17 +567,6 @@
         <profiling do-profile="true" />
       </EXTENSION>
     </configuration>
-    <configuration name="src\test\js\gui\admin\AddProjectDialog-test.js" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
-      <node-interpreter>project</node-interpreter>
-      <node-options />
-      <working-directory>$PROJECT_DIR$</working-directory>
-      <pass-parent-env>true</pass-parent-env>
-      <envs />
-      <ui>bdd</ui>
-      <extra-mocha-options />
-      <test-kind>TEST_FILE</test-kind>
-      <test-file>$PROJECT_DIR$/src/test/js/gui/admin/AddProjectDialog-test.js</test-file>
-    </configuration>
     <configuration name="test without coverage" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" path-to-js-file="node_modules/mocha/bin/_mocha" application-parameters="--recursive src/test" working-dir="$PROJECT_DIR$">
       <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
         <option name="envVars">
@@ -613,18 +605,18 @@
       <item index="2" class="java.lang.String" itemvalue="npm.build-deploy" />
       <item index="3" class="java.lang.String" itemvalue="npm.test" />
       <item index="4" class="java.lang.String" itemvalue="Mocha.AddProjectDialog" />
-      <item index="5" class="java.lang.String" itemvalue="Mocha.src\test\js\gui\admin\AddProjectDialog-test.js" />
-      <item index="6" class="java.lang.String" itemvalue="Mocha.ServerConnector.removeProject.default" />
-      <item index="7" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
-      <item index="8" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
+      <item index="5" class="java.lang.String" itemvalue="Mocha.ServerConnector.removeProject.default" />
+      <item index="6" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
+      <item index="7" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
+      <item index="8" class="java.lang.String" itemvalue="Mocha.TopMenu.toggleLegend" />
     </list>
     <recent_temporary>
       <list size="5">
-        <item index="0" class="java.lang.String" itemvalue="Mocha.ServerConnector.removeProject.default" />
-        <item index="1" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
-        <item index="2" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
-        <item index="3" class="java.lang.String" itemvalue="Mocha.AddProjectDialog" />
-        <item index="4" class="java.lang.String" itemvalue="Mocha.src\test\js\gui\admin\AddProjectDialog-test.js" />
+        <item index="0" class="java.lang.String" itemvalue="Mocha.TopMenu.toggleLegend" />
+        <item index="1" class="java.lang.String" itemvalue="Mocha.ServerConnector.removeProject.default" />
+        <item index="2" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
+        <item index="3" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
+        <item index="4" class="java.lang.String" itemvalue="Mocha.AddProjectDialog" />
       </list>
     </recent_temporary>
   </component>
@@ -646,29 +638,11 @@
       <workItem from="1503502231792" duration="5017000" />
       <workItem from="1503560609163" duration="22426000" />
       <workItem from="1503648028157" duration="9357000" />
-      <workItem from="1503673204553" duration="2778000" />
+      <workItem from="1503673204553" duration="3503000" />
     </task>
     <servers />
   </component>
   <component name="TestHistory">
-    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 46m 22s.xml">
-      <configuration name="AddProjectDialog" configurationId="mocha-javascript-test-runner" />
-    </history-entry>
-    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 46m 42s.xml">
-      <configuration name="AddProjectDialog" configurationId="mocha-javascript-test-runner" />
-    </history-entry>
-    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 34m 51s.xml">
-      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
-    </history-entry>
-    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 36m 31s.xml">
-      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
-    </history-entry>
-    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 36m 48s.xml">
-      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
-    </history-entry>
-    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 37m 17s.xml">
-      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
-    </history-entry>
     <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 37m 49s.xml">
       <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
@@ -681,9 +655,27 @@
     <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 42m 14s.xml">
       <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
+    <history-entry file="TopMenu_toggleLegend - 2017.08.25 at 17h 52m 36s.xml">
+      <configuration name="TopMenu.toggleLegend" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="TopMenu_toggleLegend - 2017.08.25 at 17h 53m 16s.xml">
+      <configuration name="TopMenu.toggleLegend" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="TopMenu_toggleLegend - 2017.08.25 at 17h 53m 32s.xml">
+      <configuration name="TopMenu.toggleLegend" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="TopMenu_toggleLegend - 2017.08.25 at 17h 53m 45s.xml">
+      <configuration name="TopMenu.toggleLegend" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="TopMenu_toggleLegend - 2017.08.25 at 17h 55m 56s.xml">
+      <configuration name="TopMenu.toggleLegend" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="TopMenu_toggleLegend - 2017.08.25 at 17h 56m 08s.xml">
+      <configuration name="TopMenu.toggleLegend" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="39731000" />
+    <option name="totallyTimeSpent" value="40456000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
@@ -695,7 +687,7 @@
       <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="V8 CPU Profiling" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.34489223" sideWeight="0.66197914" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.33833176" sideWeight="0.49791667" order="10" side_tool="false" content_ui="tabs" x="-170" y="502" width="1920" height="493" />
+      <window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.33833176" sideWeight="0.49791667" order="10" side_tool="false" content_ui="tabs" x="-170" y="502" width="1920" height="493" />
       <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
@@ -742,14 +734,6 @@
     <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/node_modules/bluebird/js/release/promise.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="216">
-          <caret line="681" column="45" lean-forward="false" selection-start-line="681" selection-start-column="45" selection-end-line="681" selection-end-column="45" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/isolate-0000000000455D70-v8-2017-08-24_16-56-20-.log" />
     <entry file="file://$PROJECT_DIR$/src/main/js/Admin.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="335">
@@ -1089,18 +1073,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="269">
-          <caret line="176" column="49" lean-forward="false" selection-start-line="176" selection-start-column="49" selection-end-line="176" selection-end-column="49" />
-          <folding>
-            <marker date="1503674880088" expanded="true" signature="2338:2390" ph="..." />
-            <marker date="1503674880088" expanded="true" signature="4001:4033" ph="..." />
-            <marker date="1503674880088" expanded="true" signature="4435:4487" ph="..." />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/map/AbstractCustomMap.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="226">
@@ -1144,7 +1116,35 @@
     <entry file="file://$PROJECT_DIR$/src/main/js/map/window/AbstractInfoWindow.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="-1482">
-          <caret line="96" column="31" lean-forward="true" selection-start-line="96" selection-start-column="31" selection-end-line="96" selection-end-column="31" />
+          <caret line="96" column="31" lean-forward="false" selection-start-line="96" selection-start-column="31" selection-end-line="96" selection-end-column="31" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="235">
+          <caret line="187" column="31" lean-forward="false" selection-start-line="187" selection-start-column="31" selection-end-line="187" selection-end-column="31" />
+          <folding>
+            <marker date="1503676564911" expanded="true" signature="2208:2260" ph="..." />
+            <marker date="1503676564911" expanded="true" signature="3751:3783" ph="..." />
+            <marker date="1503676564911" expanded="true" signature="4157:4209" ph="..." />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/js/gui/Legend.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="459">
+          <caret line="34" column="5" lean-forward="true" selection-start-line="34" selection-start-column="5" selection-end-line="34" selection-end-column="5" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/test/js/gui/topMenu/TopMenu-test.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="485">
+          <caret line="52" column="47" lean-forward="false" selection-start-line="52" selection-start-column="47" selection-end-line="52" selection-end-column="47" />
           <folding />
         </state>
       </provider>
diff --git a/frontend-js/src/main/js/gui/topMenu/TopMenu.js b/frontend-js/src/main/js/gui/topMenu/TopMenu.js
index 724a7391d339f1aad580032348bb0e3e59d20ab8..9fa110dd8f98fbc7182f4d3368ddde06aa2767b5 100644
--- a/frontend-js/src/main/js/gui/topMenu/TopMenu.js
+++ b/frontend-js/src/main/js/gui/topMenu/TopMenu.js
@@ -13,223 +13,228 @@ var Functions = require('../../Functions');
 var logger = require('../../logger');
 
 function TopMenu(params) {
-    AbstractGuiElement.call(this, params);
-    var self = this;
+  AbstractGuiElement.call(this, params);
+  var self = this;
 
-    self._createGui();
+  self._createGui();
 }
 
 TopMenu.prototype = Object.create(AbstractGuiElement.prototype);
 TopMenu.prototype.constructor = TopMenu;
 
 TopMenu.prototype._createGui = function () {
-    var self = this;
-
-    var overviewDialogDiv = Functions.createElement({
-        type: "div",
-        name: "overviewDialog"
-    });
-    self.getElement().appendChild(overviewDialogDiv);
-    self.setControlElement(PanelControlElementType.OVERVIEW_DIALOG_DIV, overviewDialogDiv);
-
-    var hideButtonDiv = Functions.createElement({
-        type: "div",
-        className: "headerHideDivButton"
-    });
-    self.getElement().appendChild(hideButtonDiv);
-
-    var hideButton = Functions.createElement({
-        type: "button",
-        className: "headerHideButton",
-        name: "hideButton",
-    });
-    hideButtonDiv.appendChild(hideButton);
-    self.setControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON, hideButton);
-
-    var hideButtonIcon = Functions.createElement({
-        type: "i",
-        className: "fa fa-chevron-left",
-        name: "hideButtonIcon",
-    });
-    hideButton.appendChild(hideButtonIcon);
-    self.setControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON_ICON, hideButtonIcon);
-
-    var versionDiv = Functions.createElement({
-        type: "div",
-        className: "headerTextBold",
-        name: "versionDiv"
-    });
-    self.getElement().appendChild(versionDiv);
-    self.setControlElement(PanelControlElementType.MENU_VERSION_DIV, versionDiv);
-
-    var showOverviewDiv = Functions.createElement({
-        type: "div",
-        style: "float: left;",
-    });
-    self.getElement().appendChild(showOverviewDiv);
-
-    var showOverviewButton = Functions.createElement({
-        type: "button",
-        className: "minerva-overview-button",
-        name: "showOverviewButton",
-        content: "<i class='fa fa-sitemap' style='font-size:18px; font-weight:400; padding-right:10px;'></i><span >SHOW OVERVIEW</span>",
-        style: "display:none",
-    });
-    showOverviewDiv.appendChild(showOverviewButton);
-    self.setControlElement(PanelControlElementType.MENU_SHOW_OVERVIEW_BUTTON, showOverviewButton);
-
-    var rightHeaderMenuDiv = Functions.createElement({
-        type: "div",
-        className: "rightHeaderMenu",
-    });
-    self.getElement().appendChild(rightHeaderMenuDiv);
-
-    var div4checkboxes = Functions.createElement({
-        type: "div",
-        className: "minerva-top-checkbox-div",
-    });
-    rightHeaderMenuDiv.appendChild(div4checkboxes);
-
-    var legendCheckbox = Functions.createElement({
-        type: "input",
-        inputType: "checkbox",
-        name: "legendCheckbox",
-    });
-    div4checkboxes.appendChild(legendCheckbox);
-    self.setControlElement(PanelControlElementType.MENU_LEGEND_CHECKBOX, legendCheckbox);
-
-    div4checkboxes.appendChild(Functions.createElement({
-        type: "label",
-        content: "LEGEND",
-    }));
-
-    var commentCheckbox = Functions.createElement({
-        type: "input",
-        inputType: "checkbox",
-        name: "commentCheckbox",
-    });
-    div4checkboxes.appendChild(commentCheckbox);
-    self.setControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX, commentCheckbox);
-
-    div4checkboxes.appendChild(Functions.createElement({
-        type: "label",
-        content: "COMMENTS",
-    }));
-
-    var refreshCommentButton = Functions.createElement({
-        type: "button",
-        className: "minerva-overview-button",
-        name: "refreshCommentButton",
-        content: "<i class='fa fa-refresh' style='font-size:21px; font-weight:400;'></i>",
-        style: "display:none",
-    });
-    div4checkboxes.appendChild(refreshCommentButton);
-    self.setControlElement(PanelControlElementType.MENU_REFRESH_COMMENTS_BUTTON, refreshCommentButton);
-
-    var clearButton = Functions.createElement({
-        type: "button",
-        className: "minerva-overview-button",
-        name: "clearButton",
-        content: "<i class='fa fa-times' style='font-size:18px; font-weight:300; padding-right:10px;'></i>CLEAR",
-    });
-    rightHeaderMenuDiv.appendChild(clearButton);
-    self.setControlElement(PanelControlElementType.MENU_CLEAR_BUTTON, clearButton);
+  var self = this;
+
+  var overviewDialogDiv = Functions.createElement({
+    type: "div",
+    name: "overviewDialog"
+  });
+  self.getElement().appendChild(overviewDialogDiv);
+  self.setControlElement(PanelControlElementType.OVERVIEW_DIALOG_DIV, overviewDialogDiv);
+
+  var hideButtonDiv = Functions.createElement({
+    type: "div",
+    className: "headerHideDivButton"
+  });
+  self.getElement().appendChild(hideButtonDiv);
+
+  var hideButton = Functions.createElement({
+    type: "button",
+    className: "headerHideButton",
+    name: "hideButton",
+  });
+  hideButtonDiv.appendChild(hideButton);
+  self.setControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON, hideButton);
+
+  var hideButtonIcon = Functions.createElement({
+    type: "i",
+    className: "fa fa-chevron-left",
+    name: "hideButtonIcon",
+  });
+  hideButton.appendChild(hideButtonIcon);
+  self.setControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON_ICON, hideButtonIcon);
+
+  var versionDiv = Functions.createElement({
+    type: "div",
+    className: "headerTextBold",
+    name: "versionDiv"
+  });
+  self.getElement().appendChild(versionDiv);
+  self.setControlElement(PanelControlElementType.MENU_VERSION_DIV, versionDiv);
+
+  var showOverviewDiv = Functions.createElement({
+    type: "div",
+    style: "float: left;",
+  });
+  self.getElement().appendChild(showOverviewDiv);
+
+  var showOverviewButton = Functions.createElement({
+    type: "button",
+    className: "minerva-overview-button",
+    name: "showOverviewButton",
+    content: "<i class='fa fa-sitemap' style='font-size:18px; font-weight:400; padding-right:10px;'></i><span >SHOW OVERVIEW</span>",
+    style: "display:none",
+  });
+  showOverviewDiv.appendChild(showOverviewButton);
+  self.setControlElement(PanelControlElementType.MENU_SHOW_OVERVIEW_BUTTON, showOverviewButton);
+
+  var rightHeaderMenuDiv = Functions.createElement({
+    type: "div",
+    className: "rightHeaderMenu",
+  });
+  self.getElement().appendChild(rightHeaderMenuDiv);
+
+  var div4checkboxes = Functions.createElement({
+    type: "div",
+    className: "minerva-top-checkbox-div",
+  });
+  rightHeaderMenuDiv.appendChild(div4checkboxes);
+
+  var legendCheckbox = Functions.createElement({
+    type: "input",
+    inputType: "checkbox",
+    name: "legendCheckbox",
+  });
+  div4checkboxes.appendChild(legendCheckbox);
+  self.setControlElement(PanelControlElementType.MENU_LEGEND_CHECKBOX, legendCheckbox);
+
+  div4checkboxes.appendChild(Functions.createElement({
+    type: "label",
+    content: "LEGEND",
+  }));
+
+  var commentCheckbox = Functions.createElement({
+    type: "input",
+    inputType: "checkbox",
+    name: "commentCheckbox",
+  });
+  div4checkboxes.appendChild(commentCheckbox);
+  self.setControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX, commentCheckbox);
+
+  div4checkboxes.appendChild(Functions.createElement({
+    type: "label",
+    content: "COMMENTS",
+  }));
+
+  var refreshCommentButton = Functions.createElement({
+    type: "button",
+    className: "minerva-overview-button",
+    name: "refreshCommentButton",
+    content: "<i class='fa fa-refresh' style='font-size:21px; font-weight:400;'></i>",
+    style: "display:none",
+  });
+  div4checkboxes.appendChild(refreshCommentButton);
+  self.setControlElement(PanelControlElementType.MENU_REFRESH_COMMENTS_BUTTON, refreshCommentButton);
+
+  var clearButton = Functions.createElement({
+    type: "button",
+    className: "minerva-overview-button",
+    name: "clearButton",
+    content: "<i class='fa fa-times' style='font-size:18px; font-weight:300; padding-right:10px;'></i>CLEAR",
+  });
+  rightHeaderMenuDiv.appendChild(clearButton);
+  self.setControlElement(PanelControlElementType.MENU_CLEAR_BUTTON, clearButton);
 
 };
 
 TopMenu.prototype.init = function () {
-    var self = this;
-    self.getControlElement(PanelControlElementType.MENU_LEGEND_CHECKBOX).onclick = function () {
-        var legend = self.getLegend();
-        if (this.checked) {
-            legend.show();
-        } else {
-            legend.hide();
-        }
+  var self = this;
+  self.getControlElement(PanelControlElementType.MENU_LEGEND_CHECKBOX).onclick = function () {
+    return self.toggleLegend();
+  };
+  var hideButton = self.getControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON);
+  var icon = self.getControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON_ICON);
+  hideButton.onclick = function () {
+    if (icon.className.indexOf("fa-chevron-left") >= 0) {
+      icon.className = "fa fa-chevron-right";
+      self.getLeftPanel().hide();
+    } else {
+      icon.className = "fa fa-chevron-left";
+      self.getLeftPanel().show();
+    }
+    google.maps.event.trigger(self.getMap().getGoogleMap(), 'resize');
+  };
+
+  var project = self.getMap().getProject();
+  self.getControlElement(PanelControlElementType.MENU_VERSION_DIV).innerHTML = project.getVersion();
+
+  var commentCheckbox = self.getControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX);
+  var refreshCommentButton = self.getControlElement(PanelControlElementType.MENU_REFRESH_COMMENTS_BUTTON);
+  commentCheckbox.onclick = function () {
+    ServerConnector.getSessionData(project).setShowComments(commentCheckbox.checked);
+    if (commentCheckbox.checked) {
+      refreshCommentButton.style.display = 'inline';
+    } else {
+      refreshCommentButton.style.display = 'none';
+    }
+    return self.getMap().refreshComments().then(null, GuiConnector.alert);
+  };
+  refreshCommentButton.onclick = (function () {
+    return function () {
+      self.getMap().refreshComments();
+      return false;
     };
-    var hideButton = self.getControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON);
-    var icon = self.getControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON_ICON);
-    hideButton.onclick = function () {
-        if (icon.className.indexOf("fa-chevron-left") >= 0) {
-            icon.className = "fa fa-chevron-right";
-            self.getLeftPanel().hide();
-        } else {
-            icon.className = "fa fa-chevron-left";
-            self.getLeftPanel().show();
-        }
-        google.maps.event.trigger(self.getMap().getGoogleMap(), 'resize');
+  })();
+
+  var clearButton = self.getControlElement(PanelControlElementType.MENU_CLEAR_BUTTON);
+  clearButton.onclick = (function () {
+    return function () {
+      return self.getMap().clearDbOverlays();
     };
+  })();
 
-    var project = self.getMap().getProject();
-    self.getControlElement(PanelControlElementType.MENU_VERSION_DIV).innerHTML = project.getVersion();
-
-    var commentCheckbox = self.getControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX);
-    var refreshCommentButton = self.getControlElement(PanelControlElementType.MENU_REFRESH_COMMENTS_BUTTON);
-    commentCheckbox.onclick = function () {
-        ServerConnector.getSessionData(project).setShowComments(commentCheckbox.checked);
-        if (commentCheckbox.checked) {
-            refreshCommentButton.style.display = 'inline';
-        } else {
-            refreshCommentButton.style.display = 'none';
-        }
-        return self.getMap().refreshComments().then(null, GuiConnector.alert);
+  if (project.getTopOverviewImage() !== undefined && project.getTopOverviewImage() !== null) {
+    self._overviewDialog = new OverviewDialog({
+      customMap: self.getMap(),
+      element: self.getControlElement(PanelControlElementType.OVERVIEW_DIALOG_DIV)
+    });
+    var showOverviewButton = self.getControlElement(PanelControlElementType.MENU_SHOW_OVERVIEW_BUTTON);
+    showOverviewButton.onclick = function () {
+      return self._overviewDialog.showOverview();
     };
-    refreshCommentButton.onclick = (function () {
-        return function () {
-            self.getMap().refreshComments();
-            return false;
-        };
-    })();
-
-    var clearButton = self.getControlElement(PanelControlElementType.MENU_CLEAR_BUTTON);
-    clearButton.onclick = (function () {
-        return function () {
-            return self.getMap().clearDbOverlays();
-        };
-    })();
-
-    if (project.getTopOverviewImage() !== undefined && project.getTopOverviewImage() !== null) {
-        self._overviewDialog = new OverviewDialog({
-            customMap: self.getMap(),
-            element: self.getControlElement(PanelControlElementType.OVERVIEW_DIALOG_DIV)
-        });
-        var showOverviewButton = self.getControlElement(PanelControlElementType.MENU_SHOW_OVERVIEW_BUTTON);
-        showOverviewButton.onclick = function () {
-            return self._overviewDialog.showOverview();
-        };
-        showOverviewButton.style.display = "";
-    }
+    showOverviewButton.style.display = "";
+  }
 
-    if (ServerConnector.getSessionData().getShowComments()) {
-        self.getControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX).checked = true;
-        return self.getMap().refreshComments();
-    } else {
-        return Promise.resolve();
-    }
+  if (ServerConnector.getSessionData().getShowComments()) {
+    self.getControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX).checked = true;
+    return self.getMap().refreshComments();
+  } else {
+    return Promise.resolve();
+  }
 };
 
 TopMenu.prototype.setLegend = function (legend) {
-    this._legend = legend;
+  this._legend = legend;
 };
 
 TopMenu.prototype.getLegend = function () {
-    return this._legend;
+  return this._legend;
 };
 
 TopMenu.prototype.setLeftPanel = function (leftPanel) {
-    this._leftPanel = leftPanel;
+  this._leftPanel = leftPanel;
 };
 
 TopMenu.prototype.getLeftPanel = function () {
-    return this._leftPanel;
+  return this._leftPanel;
 };
 
 TopMenu.prototype.destroy = function () {
-    var self = this;
-    if (self._overviewDialog !== undefined) {
-        self._overviewDialog.destroy();
-    }
-    return Promise.resolve();
+  var self = this;
+  if (self._overviewDialog !== undefined) {
+    self._overviewDialog.destroy();
+  }
+  return Promise.resolve();
 };
 
+TopMenu.prototype.toggleLegend = function () {
+  var self = this;
+  var legend = self.getLegend();
+  if (self.getControlElement(PanelControlElementType.MENU_LEGEND_CHECKBOX).checked) {
+    legend.show();
+  } else {
+    legend.hide();
+  }
+}
+
 module.exports = TopMenu;
\ No newline at end of file
diff --git a/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js b/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js
index 223975808184fe07a2ba6b753563dbd65affda56..65831942a8c30833c472234af814947229b8a566 100644
--- a/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js
+++ b/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js
@@ -4,36 +4,55 @@
 
 require('../../mocha-config.js');
 
+var Legend = require('../../../../main/js/gui/Legend');
 var TopMenu = require('../../../../main/js/gui/topMenu/TopMenu');
 
 var chai = require('chai');
 var assert = chai.assert;
 var logger = require('../../logger');
 
-describe('TopMenu', function() {
+describe('TopMenu', function () {
 
-  it('constructor', function() {
+  it('constructor', function () {
     var map = helper.createCustomMap();
 
     new TopMenu({
-      element : testDiv,
-      customMap : map
+      element: testDiv,
+      customMap: map
     });
 
     assert.equal(logger.getWarnings().length, 0);
 
   });
-  
-  it('init', function() {
+
+  it('init', function () {
     var map = helper.createCustomMap();
 
     var topMenu = new TopMenu({
-      element : testDiv,
-      customMap : map
+      element: testDiv,
+      customMap: map
     });
-    
+
     return topMenu.init();
 
   });
 
+  it('toggleLegend', function () {
+    var map = helper.createCustomMap();
+
+    var topMenu = new TopMenu({
+      element: testDiv,
+      customMap: map
+    });
+    var legend = new Legend({element: document.createElement("div"), customMap: map});
+    topMenu.setLegend(legend);
+    return topMenu.init().then(function () {
+      $("input", testDiv).prop('checked', true);
+      return topMenu.toggleLegend();
+    }).then(function () {
+      $("input", testDiv).prop('checked', false);
+      return topMenu.toggleLegend();
+    });
+  });
+
 });