diff --git a/frontend-js/.idea/workspace.xml b/frontend-js/.idea/workspace.xml
index fc209a9c34080f88de96c1b1847c47ba7de4ed70..a11a9ae9ffcde5a4d3e412621966562eada1077c 100644
--- a/frontend-js/.idea/workspace.xml
+++ b/frontend-js/.idea/workspace.xml
@@ -6,9 +6,9 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="c119f0dd-fdda-4d02-a51e-86bc6ef7e50c" name="Default" comment="">
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
-      <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/test/js/map/window/AliasInfoWindow-test.js" afterPath="$PROJECT_DIR$/src/test/js/map/window/AliasInfoWindow-test.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/map/TouchMap.js" afterPath="$PROJECT_DIR$/src/main/js/map/TouchMap.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/google-map-mock.js" afterPath="$PROJECT_DIR$/src/test/js/google-map-mock.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/map/TouchMap-test.js" afterPath="$PROJECT_DIR$/src/test/js/map/TouchMap-test.js" />
     </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
@@ -68,8 +68,18 @@
       <file leaf-file-name="TouchMap.js" pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/src/main/js/map/TouchMap.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="306">
-              <caret line="18" column="11" lean-forward="true" selection-start-line="18" selection-start-column="11" selection-end-line="18" selection-end-column="11" />
+            <state relative-caret-position="405">
+              <caret line="181" column="0" lean-forward="false" selection-start-line="181" selection-start-column="0" selection-end-line="181" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="TouchMap-test.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/test/js/map/TouchMap-test.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="34">
+              <caret line="2" column="27" lean-forward="false" selection-start-line="2" selection-start-column="27" selection-end-line="2" selection-end-column="27" />
               <folding />
             </state>
           </provider>
@@ -95,47 +105,10 @@
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MapsAdminPanel.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="206">
-              <caret line="126" column="0" lean-forward="false" selection-start-line="126" selection-start-column="0" selection-end-line="126" selection-end-column="0" />
-              <folding>
-                <marker date="1503586944911" expanded="true" signature="1612:1618" ph=" " />
-                <marker date="1503586944911" expanded="true" signature="1922:1928" ph=" " />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Admin.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/main/js/Admin.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="335">
-              <caret line="150" column="0" lean-forward="false" selection-start-line="150" selection-start-column="0" selection-end-line="150" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="CommentsAdminPanel.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/CommentsAdminPanel.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="233">
-              <caret line="120" column="0" lean-forward="false" selection-start-line="120" selection-start-column="0" selection-end-line="120" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
     </leaf>
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>TopMen</find>
-      <find>getProject</find>
-      <find>touch</find>
-      <find>session d</find>
       <find>session da</find>
       <find>data</find>
       <find>CommentsAdminPanel</find>
@@ -162,6 +135,10 @@
       <find>resize</find>
       <find>init</find>
       <find>createCha</find>
+      <find>zoom</find>
+      <find>Zoom</find>
+      <find>zoomM</find>
+      <find>logger</find>
     </findStrings>
     <dirStrings>
       <dir>C:\Users\piotr.gawron\workspace\MapViewer-parent\frontend-js\src\main\js\gui\leftPanel</dir>
@@ -214,6 +191,8 @@
         <option value="$PROJECT_DIR$/src/test/js/gui/admin/EditProjectDialog-test.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/window/AliasInfoWindow.js" />
         <option value="$PROJECT_DIR$/src/test/js/map/window/AliasInfoWindow-test.js" />
+        <option value="$PROJECT_DIR$/src/test/js/google-map-mock.js" />
+        <option value="$PROJECT_DIR$/src/test/js/map/TouchMap-test.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/TouchMap.js" />
       </list>
     </option>
@@ -371,7 +350,7 @@
       </list>
     </option>
   </component>
-  <component name="RunManager" selected="Mocha.AliasInfoWindow.createChartDiv ">
+  <component name="RunManager" selected="Mocha.TouchMap.zoomMap">
     <configuration name="AliasInfoWindow.createChartDiv " type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
       <node-interpreter>project</node-interpreter>
       <node-options />
@@ -401,7 +380,7 @@
         <name value="MapsAdminPanel" />
       </test-names>
     </configuration>
-    <configuration name="MapsAdminPanel.onAddClicked" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
+    <configuration name="TouchMap.zoomMap" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
       <node-interpreter>project</node-interpreter>
       <node-options />
       <working-directory>$PROJECT_DIR$</working-directory>
@@ -409,11 +388,11 @@
       <envs />
       <ui>bdd</ui>
       <extra-mocha-options />
-      <test-kind>SUITE</test-kind>
-      <test-file>$PROJECT_DIR$/src/test/js/gui/admin/MapsAdminPanel-test.js</test-file>
+      <test-kind>TEST</test-kind>
+      <test-file>$PROJECT_DIR$/src/test/js/map/TouchMap-test.js</test-file>
       <test-names>
-        <name value="MapsAdminPanel" />
-        <name value="onAddClicked" />
+        <name value="TouchMap" />
+        <name value="zoomMap" />
       </test-names>
     </configuration>
     <configuration name="Unnamed" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" path-to-js-file="node_modules/mocha/bin/_mocha" application-parameters="--recursive src/test --grep &quot;create Admin&quot;" working-dir="$PROJECT_DIR$">
@@ -524,19 +503,19 @@
     <list size="7">
       <item index="0" class="java.lang.String" itemvalue="Node.js.Unnamed" />
       <item index="1" class="java.lang.String" itemvalue="npm.test" />
-      <item index="2" class="java.lang.String" itemvalue="Mocha.MapsAdminPanel.onAddClicked" />
-      <item index="3" class="java.lang.String" itemvalue="Mocha.MapsAdminPanel" />
-      <item index="4" class="java.lang.String" itemvalue="Mocha.minerva global" />
-      <item index="5" class="java.lang.String" itemvalue="Mocha.src\test\js\GuiConnector-test.js" />
-      <item index="6" class="java.lang.String" itemvalue="Mocha.AliasInfoWindow.createChartDiv " />
+      <item index="2" class="java.lang.String" itemvalue="Mocha.MapsAdminPanel" />
+      <item index="3" class="java.lang.String" itemvalue="Mocha.minerva global" />
+      <item index="4" class="java.lang.String" itemvalue="Mocha.src\test\js\GuiConnector-test.js" />
+      <item index="5" class="java.lang.String" itemvalue="Mocha.AliasInfoWindow.createChartDiv " />
+      <item index="6" class="java.lang.String" itemvalue="Mocha.TouchMap.zoomMap" />
     </list>
     <recent_temporary>
       <list size="5">
-        <item index="0" class="java.lang.String" itemvalue="Mocha.AliasInfoWindow.createChartDiv " />
-        <item index="1" class="java.lang.String" itemvalue="Mocha.src\test\js\GuiConnector-test.js" />
-        <item index="2" class="java.lang.String" itemvalue="Mocha.minerva global" />
-        <item index="3" class="java.lang.String" itemvalue="Mocha.MapsAdminPanel" />
-        <item index="4" class="java.lang.String" itemvalue="Mocha.MapsAdminPanel.onAddClicked" />
+        <item index="0" class="java.lang.String" itemvalue="Mocha.TouchMap.zoomMap" />
+        <item index="1" class="java.lang.String" itemvalue="Mocha.AliasInfoWindow.createChartDiv " />
+        <item index="2" class="java.lang.String" itemvalue="Mocha.src\test\js\GuiConnector-test.js" />
+        <item index="3" class="java.lang.String" itemvalue="Mocha.minerva global" />
+        <item index="4" class="java.lang.String" itemvalue="Mocha.MapsAdminPanel" />
       </list>
     </recent_temporary>
   </component>
@@ -556,20 +535,11 @@
       <workItem from="1503501472332" duration="132000" />
       <workItem from="1503501772627" duration="21000" />
       <workItem from="1503502231792" duration="5017000" />
-      <workItem from="1503560609163" duration="19206000" />
+      <workItem from="1503560609163" duration="19657000" />
     </task>
     <servers />
   </component>
   <component name="TestHistory">
-    <history-entry file="AliasInfoWindow_createChartDiv_ - 2017.08.24 at 17h 16m 50s.xml">
-      <configuration name="AliasInfoWindow.createChartDiv " configurationId="mocha-javascript-test-runner" />
-    </history-entry>
-    <history-entry file="AliasInfoWindow_createChartDiv_ - 2017.08.24 at 17h 17m 24s.xml">
-      <configuration name="AliasInfoWindow.createChartDiv " configurationId="mocha-javascript-test-runner" />
-    </history-entry>
-    <history-entry file="AliasInfoWindow_createChartDiv_ - 2017.08.24 at 17h 17m 37s.xml">
-      <configuration name="AliasInfoWindow.createChartDiv " configurationId="mocha-javascript-test-runner" />
-    </history-entry>
     <history-entry file="AliasInfoWindow_createChartDiv_ - 2017.08.24 at 17h 18m 09s.xml">
       <configuration name="AliasInfoWindow.createChartDiv " configurationId="mocha-javascript-test-runner" />
     </history-entry>
@@ -591,9 +561,18 @@
     <history-entry file="AliasInfoWindow_createChartDiv_ - 2017.08.24 at 17h 22m 49s.xml">
       <configuration name="AliasInfoWindow.createChartDiv " configurationId="mocha-javascript-test-runner" />
     </history-entry>
+    <history-entry file="AliasInfoWindow_createChartDiv_ - 2017.08.24 at 17h 31m 09s.xml">
+      <configuration name="AliasInfoWindow.createChartDiv " configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="TouchMap_zoomMap - 2017.08.24 at 17h 31m 12s.xml">
+      <configuration name="TouchMap.zoomMap" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="TouchMap_zoomMap - 2017.08.24 at 17h 32m 03s.xml">
+      <configuration name="TouchMap.zoomMap" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="24376000" />
+    <option name="totallyTimeSpent" value="24827000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
@@ -631,30 +610,6 @@
     <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/leftPanel/ChemicalPanel.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1224">
-          <caret line="72" column="0" lean-forward="false" selection-start-line="69" selection-start-column="0" selection-end-line="72" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/leftPanel/DrugPanel.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1071">
-          <caret line="63" column="0" lean-forward="false" selection-start-line="60" selection-start-column="0" selection-end-line="63" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/leftPanel/MiRnaPanel.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1071">
-          <caret line="63" column="0" lean-forward="false" selection-start-line="60" selection-start-column="0" selection-end-line="63" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/gui/leftPanel/SearchPanel.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="2669">
@@ -923,14 +878,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/js/map/CustomMap.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="558">
-          <caret line="739" column="17" lean-forward="false" selection-start-line="739" selection-start-column="17" selection-end-line="739" selection-end-column="17" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/ObjectWithListeners.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="170">
@@ -1064,10 +1011,42 @@
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/src/test/js/google-map-mock.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="315">
+          <caret line="190" column="27" lean-forward="true" selection-start-line="190" selection-start-column="27" selection-end-line="190" selection-end-column="27" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/js/map/CustomMap.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="269">
+          <caret line="451" column="23" lean-forward="false" selection-start-line="451" selection-start-column="9" selection-end-line="451" selection-end-column="23" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/test/js/helper.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="311">
+          <caret line="361" column="24" lean-forward="false" selection-start-line="361" selection-start-column="24" selection-end-line="361" selection-end-column="24" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/test/js/map/TouchMap-test.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="34">
+          <caret line="2" column="27" lean-forward="false" selection-start-line="2" selection-start-column="27" selection-end-line="2" selection-end-column="27" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/map/TouchMap.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="306">
-          <caret line="18" column="11" lean-forward="true" selection-start-line="18" selection-start-column="11" selection-end-line="18" selection-end-column="11" />
+        <state relative-caret-position="405">
+          <caret line="181" column="0" lean-forward="false" selection-start-line="181" selection-start-column="0" selection-end-line="181" selection-end-column="0" />
           <folding />
         </state>
       </provider>
diff --git a/frontend-js/src/main/js/map/TouchMap.js b/frontend-js/src/main/js/map/TouchMap.js
index 8cf49856b5c3b7a4090d686c5ea883d1302beb24..bdc9954b222d60bad3106f4acfdfdfb3124c754c 100644
--- a/frontend-js/src/main/js/map/TouchMap.js
+++ b/frontend-js/src/main/js/map/TouchMap.js
@@ -166,27 +166,19 @@ TouchMap.prototype.moveMap = function(dx, dy) {
 TouchMap.prototype.zoomMap = function(pointX, pointY, zoomLevel) {
   var self = this;
   if (self.lastZoom !== zoomLevel) {
-    logger.debug(this.getMap().getDiv());
-    logger.debug(this.getMap().getDiv().id);
     var div = this.getMap().getDiv();
     self.lastZoom = zoomLevel;
-    logger.debug("zoom6: " + zoomLevel);
-    logger.debug("zoom6: " + $(div));
     var topPos = $(div).offset().top;
     var leftPos = $(div).offset().left;
-    logger.debug("rel: " + leftPos + " - " + topPos);
     pointX -= leftPos;
     pointY -= topPos;
     var height = $(div).height();
     var width = $(div).width();
-    logger.debug(pointX + " - " + pointY);
-    logger.debug(width + " - " + height);
     var dx = width / 2 - pointX;
     var dy = height / 2 - pointY;
     self.getMap().panBy(-dx, -dy);
     self.getMap().setZoom(zoomLevel);
     self.getMap().panBy(dx, dy);
-    logger.debug(dx + " - " + dy + " - " + zoomLevel);
   }
 };
 
diff --git a/frontend-js/src/test/js/google-map-mock.js b/frontend-js/src/test/js/google-map-mock.js
index 9db90a0a3a54e0ad45053aa394fcd35148c1086f..7b8d8245c3e23fc6edef5ff075b094afd85484ae 100644
--- a/frontend-js/src/test/js/google-map-mock.js
+++ b/frontend-js/src/test/js/google-map-mock.js
@@ -7,20 +7,20 @@ var Promise = require("bluebird");
 var logger = require('./logger');
 
 var google = {
-  maps : {
-    event : {
-      _data : [],
-      addListener : function(object, type, fun) {
+  maps: {
+    event: {
+      _data: [],
+      addListener: function (object, type, fun) {
         google.maps.event._data.push({
-          object : object,
-          type : type,
-          fun : fun
+          object: object,
+          type: type,
+          fun: fun
         });
       },
-      addDomListener : function(object, type, fun) {
+      addDomListener: function (object, type, fun) {
         object.addEventListener(type, fun);
       },
-      trigger : function(object, type, param) {
+      trigger: function (object, type, param) {
         var promises = [];
         for (var i = 0; i < google.maps.event._data.length; i++) {
           var e = google.maps.event._data[i];
@@ -31,62 +31,62 @@ var google = {
         return Promise.all(promises);
       },
     },
-    drawing : {
-      DrawingManager : function(options) {
+    drawing: {
+      DrawingManager: function (options) {
         this.options = options;
         if (this.options === undefined) {
           this.options = {};
         }
-        this.setMap = function(map) {
+        this.setMap = function (map) {
           this.options.map = map;
         };
-        this.setDrawingMode = function(mode) {
+        this.setDrawingMode = function (mode) {
           this.options.drawingMode = mode;
         };
-        this.getDrawingMode = function() {
+        this.getDrawingMode = function () {
           return this.options.drawingMode;
         };
       },
-      OverlayType : {
-        MARKER : "MARKER",
+      OverlayType: {
+        MARKER: "MARKER",
       },
     },
 
-    ControlPosition : {
-      TOP_LEFT : "TOP_LEFT",
-      LEFT_BOTTOM : "LEFT_BOTTOM",
-      RIGHT_BOTTOM : "RIGHT_BOTTOM",
+    ControlPosition: {
+      TOP_LEFT: "TOP_LEFT",
+      LEFT_BOTTOM: "LEFT_BOTTOM",
+      RIGHT_BOTTOM: "RIGHT_BOTTOM",
     },
-    LatLng : function(lat, lng) {
+    LatLng: function (lat, lng) {
       this.latitude = parseFloat(lat);
       this.longitude = parseFloat(lng);
 
-      this.lat = function() {
+      this.lat = function () {
         return this.latitude;
       };
-      this.lng = function() {
+      this.lng = function () {
         return this.longitude;
       };
     },
-    LatLngBounds : function(ne, sw) {
+    LatLngBounds: function (ne, sw) {
       var data = {
-        ne : ne,
-        sw : sw
+        ne: ne,
+        sw: sw
       };
       return {
-        getSouthWest : function() {
+        getSouthWest: function () {
           return data.sw;
         },
-        getNorthEast : function() {
+        getNorthEast: function () {
           return data.ne;
         },
-        getCenter : function() {
+        getCenter: function () {
           return new google.maps.LatLng((data.ne.lat() + data.sw.lat()) / 2, (data.ne.lng() + data.sw.lng()) / 2);
         },
-        isEmpty : function() {
+        isEmpty: function () {
           return data.ne === data.sw || (data.ne.lat() === data.sw.lat() && data.ne.lng() === data.sw.lng());
         },
-        extend : function(arg) {
+        extend: function (arg) {
           if (data.sw === undefined) {
             data.sw = new google.maps.LatLng(arg.lat(), arg.lng());
           } else {
@@ -112,47 +112,47 @@ var google = {
 
       };
     },
-    OverlayView : function() {
+    OverlayView: function () {
       return {};
     },
-    ImageMapType : function() {
+    ImageMapType: function () {
       return {};
     },
-    InfoWindow : function(options) {
+    InfoWindow: function (options) {
       this.options = options;
       if (this.options === undefined) {
         this.options = {};
       }
-      this.getMap = function() {
+      this.getMap = function () {
         return this.options.map;
       };
-      this.setMap = function(map) {
+      this.setMap = function (map) {
         this.options.map = map;
       };
-      this.open = function(map) {
+      this.open = function (map) {
         this.setMap(map);
       };
-      this.setContent = function() {
+      this.setContent = function () {
       };
     },
-    Marker : function(options) {
+    Marker: function (options) {
       this.options = options;
       this.position = options.position;
-      this.getMap = function() {
+      this.getMap = function () {
         return this.options.map;
       };
-      this.setMap = function(map) {
+      this.setMap = function (map) {
         this.options.map = map;
       };
-      this.setIcon = function(icon) {
+      this.setIcon = function (icon) {
         this.options.icon = icon;
       };
     },
 
-    MarkerImage : function() {
+    MarkerImage: function () {
       return {};
     },
-    Map : function(div, options) {
+    Map: function (div, options) {
       var data = {};
       if (options !== undefined) {
         data = options;
@@ -166,89 +166,97 @@ var google = {
       }
 
       return {
-        controls : {
-          "TOP_LEFT" : [],
-          "LEFT_BOTTOM" : [],
-          "RIGHT_BOTTOM" : [],
+        controls: {
+          "TOP_LEFT": [],
+          "LEFT_BOTTOM": [],
+          "RIGHT_BOTTOM": [],
         },
-        getDiv : function() {
+        getDiv: function () {
           return data.div;
         },
-        mapTypes : {
-          set : function() {
+        mapTypes: {
+          set: function () {
           },
         },
-        getMapTypeId : function() {
+        getMapTypeId: function () {
           return data.mapTypeId;
         },
-        setMapTypeId : function(id) {
+        setMapTypeId: function (id) {
           data.mapTypeId = id;
           google.maps.event.trigger(this, "maptypeid_changed", id);
         },
-        setOptions : function() {
+        setOptions: function () {
         },
-        getZoom : function() {
+        getZoom: function () {
           return data.zoom;
         },
-        setZoom : function(zoom) {
+        setZoom: function (zoom) {
           data.zoom = zoom;
           return google.maps.event.trigger(this, "zoom_changed", zoom);
         },
-        getCenter : function() {
+        getCenter: function () {
           return data.center;
         },
-        setCenter : function(center) {
+        panBy: function (x, y) {
+          if (data.center !== undefined) {
+            data.center.x += x;
+            data.center.y += y;
+          } else {
+            data.center = new google.maps.Point(x, y);
+          }
+        },
+        setCenter: function (center) {
           data.center = center;
           return google.maps.event.trigger(this, "center_changed", center);
         },
-        getBounds : function() {
+        getBounds: function () {
           return data.bounds;
         },
-        setBounds : function(bounds) {
+        setBounds: function (bounds) {
           data.bounds = bounds;
         },
-        fitBounds : function(bounds) {
+        fitBounds: function (bounds) {
           this.setBounds(bounds);
           this.setCenter(bounds.getCenter());
         },
       };
     },
-    MVCArray : function(data) {
+    MVCArray: function (data) {
       if (data !== undefined) {
         this.data = data;
       } else {
         this.data = [];
       }
-      this.getLength = function() {
+      this.getLength = function () {
         return this.data.length;
       };
       this.length = this.data.length;
-      this.getAt = function(index) {
+      this.getAt = function (index) {
         return this.data[index];
       };
     },
-    Point : function(x, y) {
+    Point: function (x, y) {
       this.x = x;
       this.y = y;
     },
-    Polyline : function(options) {
+    Polyline: function (options) {
       this.options = options;
       if (this.options === undefined) {
         this.options = {};
       }
-      this.setOptions = function() {
+      this.setOptions = function () {
       };
-      this.getPath = function() {
+      this.getPath = function () {
         return new google.maps.MVCArray();
       };
-      this.getMap = function() {
+      this.getMap = function () {
         return this.options.map;
       };
-      this.setMap = function(map) {
+      this.setMap = function (map) {
         this.options.map = map;
       };
     },
-    Polygon : function(options) {
+    Polygon: function (options) {
       this.options = options;
       if (this.options.paths !== undefined) {
         this.options.path = new google.maps.MVCArray(this.options.paths);
@@ -256,49 +264,49 @@ var google = {
       if (this.options.path === undefined) {
         this.options.path = new google.maps.MVCArray();
       }
-      this.getPath = function() {
+      this.getPath = function () {
         return this.options.path;
       };
-      this.getMap = function() {
+      this.getMap = function () {
         return this.options.map;
       };
-      this.setMap = function(map) {
+      this.setMap = function (map) {
         this.options.map = map;
       };
     },
-    Rectangle : function(options) {
+    Rectangle: function (options) {
       this.options = options;
       if (this.options === undefined) {
         this.options = {};
       }
-      this.getMap = function() {
+      this.getMap = function () {
         return this.options.map;
       };
-      this.setMap = function(map) {
+      this.setMap = function (map) {
         this.options.map = map;
       };
-      this.setOptions = function(options) {
-        for ( var attrname in options) {
+      this.setOptions = function (options) {
+        for (var attrname in options) {
           this.options[attrname] = options[attrname];
         }
       };
-      this.getBounds = function() {
+      this.getBounds = function () {
         return this.options.bounds;
       };
-      this.setBounds = function(bounds) {
+      this.setBounds = function (bounds) {
         this.options.bounds = bounds;
       };
     },
-    Size : function() {
+    Size: function () {
       return {};
     },
-    ZoomControlStyle : {
-      LARGE : "LARGE",
+    ZoomControlStyle: {
+      LARGE: "LARGE",
     },
   }
 };
 
-google.maps.Map.prototype.fitBounds = function() {
+google.maps.Map.prototype.fitBounds = function () {
 };
 
 module.exports = google;
diff --git a/frontend-js/src/test/js/map/TouchMap-test.js b/frontend-js/src/test/js/map/TouchMap-test.js
index f162c2574365b4b53a1c36047a62f7da780d7978..d310858228d6c7aaf20dfd29cd53e82eba612c1d 100644
--- a/frontend-js/src/test/js/map/TouchMap-test.js
+++ b/frontend-js/src/test/js/map/TouchMap-test.js
@@ -1,17 +1,19 @@
 "use strict";
 
+require("../mocha-config");
+
 var TouchMap = require('../../../main/js/map/TouchMap');
 var chai = require('chai');
 var assert = chai.assert;
 
-describe('TouchMap', function() {
-  it("simple contructor", function() {
+describe('TouchMap', function () {
+  it("constructor", function () {
     var map = helper.createCustomMap();
     var touchMap = new TouchMap(map);
     assert.ok(touchMap);
   });
 
-  it("TouchMap handleStart", function() {
+  it("handleStart", function () {
     var map = helper.createCustomMap();
     var touchMap = new TouchMap(map);
 
@@ -20,19 +22,19 @@ describe('TouchMap', function() {
     var evt = document.createEvent('UIEvent');
     evt.initUIEvent('touchstart', true, true, window, null);
 
-    evt.changedTouches = [ {
-      pageX : 200,
-      pageY : 200,
-      identifier : 1,
-      clientX : 100,
-      clientY : 100
-    } ];
+    evt.changedTouches = [{
+      pageX: 200,
+      pageY: 200,
+      identifier: 1,
+      clientX: 100,
+      clientY: 100
+    }];
 
     touchMap.handleStart(evt);
     assert.ok(touchMap.firstFingerId);
   });
 
-  it("TouchMap updateCoordinates", function() {
+  it("updateCoordinates", function () {
     var map = helper.createCustomMap();
     var touchMap = new TouchMap(map);
     touchMap.firstFingerId = 1;
@@ -40,13 +42,13 @@ describe('TouchMap', function() {
     var evt = document.createEvent('UIEvent');
     evt.initUIEvent('touchstart', true, true, window, null);
 
-    evt.changedTouches = [ {
-      pageX : 200,
-      pageY : 200,
-      identifier : 1,
-      clientX : 100,
-      clientY : 100
-    } ];
+    evt.changedTouches = [{
+      pageX: 200,
+      pageY: 200,
+      identifier: 1,
+      clientX: 100,
+      clientY: 100
+    }];
 
     assert.notOk(touchMap.firstEndX);
     assert.notOk(touchMap.firstEndY);
@@ -55,11 +57,19 @@ describe('TouchMap', function() {
     assert.ok(touchMap.firstEndY);
   });
 
-  it("TouchMap lineDistance", function() {
+  it("lineDistance", function () {
     var map = helper.createCustomMap();
     var touchMap = new TouchMap(map);
 
     var dist = touchMap.lineDistance(1, 1, 4, 5);
     assert.equal(5, dist);
   });
+
+  it("zoomMap", function () {
+    var map = helper.createCustomMap();
+    var touchMap = new TouchMap(map);
+
+    touchMap.zoomMap(1, 2, 4);
+    assert.equal(map.getGoogleMap().getZoom(), 4);
+  });
 });