diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index c2b258c9df331d0117442c7d28766a7ef1943ee7..ed71b6879ef27b60dd014ef3400ec88753cf6c64 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -965,9 +965,10 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) {
     coordinates = this.fromPointToLatLng(coordinates);
   }
   if (this.initialized) {
-    this.getGoogleMap().setCenter(coordinates);
+    return Promise.resolve(this.getGoogleMap().setCenter(coordinates));
   } else {
     logger.warn("cannot center map that is not opened yet");
+    return Promise.resolve();
   }
 };
 
@@ -981,9 +982,10 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) {
  */
 AbstractCustomMap.prototype.setZoom = function(zoom) {
   if (this.initialized) {
-    this.getGoogleMap().setZoom(zoom);
+    return Promise.resolve(this.getGoogleMap().setZoom(zoom));
   } else {
     logger.warn("cannot center map that is not opened yet");
+    return Promise.resolve();
   }
 };
 
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index fbfa2cc70091f192b3eeb34ffcacd2706bb9caf3..e0902caddd9c4bc365f6fdbede0188ff7f6aeecb 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -237,6 +237,20 @@ function createResult(customMap) {
         return customMap.getOverlayByName("user").removeSurface(surfaceElements);
       })
     },
+    setCenter : function(params) {
+      var submap = customMap.getSubmapById(params.modelId);
+      if (submap === null) {
+        throw new Error("Unknown modelId: " + params.modelId);
+      }
+      return submap.setCenter(new google.maps.Point(params.x, params.y));
+    },
+    setZoom : function(params) {
+      var submap = customMap.getSubmapById(params.modelId);
+      if (submap === null) {
+        throw new Error("Unknown modelId: " + params.modelId);
+      }
+      return submap.setZoom(params.zoom);
+    },
   };
 }
 
diff --git a/frontend-js/src/test/js/google-map-mock.js b/frontend-js/src/test/js/google-map-mock.js
index 365bef56a1fec31fffac2fef9618fa70602ace22..4c30bd8636998902e51bad71ffe212fdc6c11436 100644
--- a/frontend-js/src/test/js/google-map-mock.js
+++ b/frontend-js/src/test/js/google-map-mock.js
@@ -186,14 +186,14 @@ var google = {
         },
         setZoom : function(zoom) {
           data.zoom = zoom;
-          google.maps.event.trigger(this, "zoom_changed", zoom);
+          return google.maps.event.trigger(this, "zoom_changed", zoom);
         },
         getCenter : function() {
           return data.center;
         },
         setCenter : function(center) {
           data.center = center;
-          google.maps.event.trigger(this, "center_changed", center);
+          return google.maps.event.trigger(this, "center_changed", center);
         },
         getBounds : function() {
           return data.bounds;
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index 772c4724cef350cbc28b2c9b1369d58dccd8c8fb..af1eec90f6e5f61263436d1160408f73943073d7 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -265,26 +265,26 @@ describe('minerva global', function() {
     };
     var globalResult;
     var elementToShow = {
-        element : {
-          id : 329171,
-          modelId : 15781,
-          type : "ALIAS"
-        },
-        options : {
-          type: "ICON"
-        }
-      };
-    
+      element : {
+        id : 329171,
+        modelId : 15781,
+        type : "ALIAS"
+      },
+      options : {
+        type : "ICON"
+      }
+    };
+
     var elementToShow2 = {
-        element : {
-          id : 329171,
-          modelId : 15781,
-          type : "ALIAS"
-        },
-        options : {
-          type: "SURFACE"
-        }
-      };
+      element : {
+        id : 329171,
+        modelId : 15781,
+        type : "ALIAS"
+      },
+      options : {
+        type : "SURFACE"
+      }
+    };
     return minerva.create(options).then(function(result) {
       globalResult = result;
       return globalResult.showElement(elementToShow);
@@ -299,4 +299,49 @@ describe('minerva global', function() {
     });
   });
 
+  it("setCenter", function() {
+    var options = {
+      projectId : "sample",
+      element : testDiv
+    };
+    var globalResult;
+    return minerva.create(options).then(function(result) {
+      globalResult = result;
+      return result.setCenter({
+        modelId : 15781,
+        x : 10,
+        y : 20,
+      });
+    }).then(function() {
+      var sessionData = ServerConnectorMock.getSessionData(globalResult.getProject());
+      var center = sessionData.getCenter(globalResult.getProject().getModel());
+      assert.ok(center instanceof google.maps.Point);
+      assert.closeTo(parseFloat(center.x), 10, EPSILON);
+      assert.closeTo(parseFloat(center.y), 20, EPSILON);
+    }).then(function() {
+      globalResult.destroy();
+    });
+  });
+
+  it("setZoom", function() {
+    var options = {
+      projectId : "sample",
+      element : testDiv
+    };
+    var globalResult;
+    return minerva.create(options).then(function(result) {
+      globalResult = result;
+      return result.setZoom({
+        modelId : 15781,
+        zoom : 10,
+      });
+    }).then(function() {
+      var sessionData = ServerConnectorMock.getSessionData(globalResult.getProject());
+      var zoom = sessionData.getZoomLevel(globalResult.getProject().getModel());
+      assert.equal(zoom, 10);
+    }).then(function() {
+      globalResult.destroy();
+    });
+  });
+
 });
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 9267f8971083fd37b4e436283281ec2d59bea323..b1db324c214c2ee703ad1eab8dec5c9b712dbefe 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -21,6 +21,8 @@ global.$ = require('jQuery');
 global.jQuery = $;
 global.window.$ = $;
 
+global.EPSILON = 1e-6;
+
 // additions to jsdom implementations:
 global.Option = window.Option;
 window.open = function() {