diff --git a/frontend-js/src/main/js/ConfigurationType.js b/frontend-js/src/main/js/ConfigurationType.js
index 59a19146abf9109dc49dc3f7e0cd038277c22e93..bb4cc6b271011fa703430c6cf220b7a0980d8dc6 100644
--- a/frontend-js/src/main/js/ConfigurationType.js
+++ b/frontend-js/src/main/js/ConfigurationType.js
@@ -1,6 +1,7 @@
 "use strict";
 
 var ConfigurationType = {
+
   DEFAULT_MAP : "DEFAULT_MAP",
   GOOGLE_ANALYTICS_IDENTIFIER : "GOOGLE_ANALYTICS_IDENTIFIER",
   LOGO_IMG : "LOGO_IMG",
@@ -8,6 +9,7 @@ var ConfigurationType = {
   LEGEND_FILES : "LEGEND_FILES",
   MIN_COLOR_VAL : "MIN_COLOR_VAL",
   MAX_COLOR_VAL : "MAX_COLOR_VAL",
+  USER_MANUAL_FILE : "USER_MANUAL_FILE",
 };
 
 module.exports = ConfigurationType;
diff --git a/frontend-js/src/main/js/gui/Footer.js b/frontend-js/src/main/js/gui/Footer.js
new file mode 100644
index 0000000000000000000000000000000000000000..c4da8a5433f16c221c22a6d206263f1e1c8eccbd
--- /dev/null
+++ b/frontend-js/src/main/js/gui/Footer.js
@@ -0,0 +1,59 @@
+"use strict";
+
+/* exported logger */
+
+var AbstractGuiElement = require('./AbstractGuiElement');
+var ConfigurationType = require('../ConfigurationType');
+var Functions = require('../Functions');
+
+var logger = require('../logger');
+
+function Footer(params) {
+  AbstractGuiElement.call(this, params);
+  var self = this;
+
+  self._createFooterGui();
+}
+
+Footer.prototype = Object.create(AbstractGuiElement.prototype);
+Footer.prototype.constructor = Footer;
+
+Footer.prototype._createFooterGui = function(message) {
+  var self = this;
+  var projectId = self.getMap().getProject().getProjectId();
+
+  var link = Functions.createElement({
+    type : "a",
+    name : "footerAdminLink",
+    style : "float:left; padding-left:25px;",
+    content : '<i class="fa fa-lock" style="font-size:17px"></i> &nbsp;ADMIN',
+  });
+  link.href = ServerConnector.getServerBaseUrl() + "/admin.xhtml?id=" + projectId;
+  self.getElement().appendChild(link);
+  
+  link = Functions.createElement({
+    type : "a",
+    name : "footerManualLink",
+    style : "float:left; padding-left:25px;",
+    content : '<i class="fa fa-lock" style="font-size:17px"></i> &nbsp;MANUAL',
+  });
+  link.href = "#";
+  link.onclick = function() {
+    return ServerConnector.getConfigurationParam(ConfigurationType.USER_MANUAL_FILE).then(function(manualFileUrl){
+      var win = window.open(manualFileUrl, '_user_manual_');
+      win.focus();
+    });
+  }
+  self.getElement().appendChild(link);
+
+  link = Functions.createElement({
+    type : "a",
+    name : "footerAdminLink",
+    style : "float:right; padding-right:25px;",
+    content : 'EXPORT&nbsp; <i class="fa fa-mail-forward" style="font-size:17px"></i>',
+  });
+  link.href = ServerConnector.getServerBaseUrl() + "/export.xhtml?id=" + projectId;
+  self.getElement().appendChild(link);
+};
+
+module.exports = Footer;
diff --git a/frontend-js/src/test/js/gui/Footer-test.js b/frontend-js/src/test/js/gui/Footer-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..935d4bc502f5ac57029b14357af55ebe912b3b67
--- /dev/null
+++ b/frontend-js/src/test/js/gui/Footer-test.js
@@ -0,0 +1,60 @@
+"use strict";
+
+/* exported logger */
+
+var Helper = require('../helper');
+
+require("../mocha-config.js");
+
+var Footer = require('../../../main/js/gui/Footer');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('Footer', function() {
+
+  var helper;
+  before(function() {
+    helper = new Helper();
+  });
+
+  it('constructor', function() {
+    var div = helper.createSearchTab();
+
+    var map = helper.createCustomMap();
+
+    new Footer({
+      element : div,
+      customMap : map
+    });
+
+    assert.equal(logger.getWarnings().length, 0);
+
+  });
+
+  it('link clicks', function() {
+    var div = helper.createSearchTab();
+
+    var map = helper.createCustomMap();
+
+    new Footer({
+      element : div,
+      customMap : map
+    });
+
+    var promises = [];
+    $("a", div).each(function(index, element) {
+      promises.push(new Promise(function(resolve, reject) {
+        var fun = element.onclick;
+        if (fun) { 
+          resolve(fun());
+        } else {
+          resolve(null);
+        }
+      })
+    )});
+    return Promise.all(promises);
+  });
+
+});
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 00fea2820eb4afaa1d4857f9fe458e7f561b0ff9..91c6b7e1d43c1591fb9adcaa8bb20b4b812937af 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -16,7 +16,16 @@ global.$ = require('jQuery');
 global.jQuery = $;
 global.window.$ = $;
 
+//additions to jsdom implementations:
 global.Option = window.Option;
+window.open = function(){
+  var result = {};
+  result.focus = function(){
+    
+  };
+  return result;
+}
+//---
 
 require('jquery-ui-dist/jquery-ui.js');