diff --git a/frontend-js/src/main/css/global.css b/frontend-js/src/main/css/global.css
index d447dad5d5ce0fcbf819255c75637a7f1038da18..42a3dc229f40cc0f47404140b4d8b9f2d509db65 100644
--- a/frontend-js/src/main/css/global.css
+++ b/frontend-js/src/main/css/global.css
@@ -148,6 +148,32 @@
     border-right: 1px solid #9DE1F8;
 }
 
+.minerva-session-expire {
+    background: #EE0000;
+    display: inline;
+    width: auto;
+    height: 36px;
+    float: left;
+    line-height: 34px;
+    padding: 0 0 0 17px;
+    color: #FFFFFF;
+    font-weight: 900;
+    font-size: 13px;
+    text-align: center;
+    border-right: 1px solid #9DE1F8;
+}
+
+.minerva-extend-session-button {
+    background-color: #CC0000;
+    margin-left: 10px;
+    border: 0px;
+}
+
+.minerva-extend-session-button:hover {
+    background-color: #880000;
+    transition: background-color 0.4s ease-in-out 0s;
+}
+
 .minerva-legend {
     position: absolute;
     bottom: 10px;
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 8370ffc24f3599f347b9439e87530d36eb7411e6..638708d5374ac01c555a4556a635cb7c9e4f6cb3 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -489,7 +489,7 @@ ServerConnector.getReferenceGenomeUrl = function (queryParams, filterParams) {
 
     return this.getApiUrl({
       type: "genomics/taxonomies/" + queryParams.organism + "/genomeTypes/" + queryParams.type + "/versions/" + version
-      + "/",
+        + "/",
       params: filterParams
     });
   }
@@ -539,7 +539,7 @@ ServerConnector.getReferenceGenomeGeneMappingsUrl = function (queryParams, filte
 ServerConnector.getAvailableGenomeUrlsUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
     type: "genomics/taxonomies/" + queryParams.organism.getResource() + "/genomeTypes/" + queryParams.type + "/versions/" + queryParams.version
-    + ":getAvailableRemoteUrls",
+      + ":getAvailableRemoteUrls",
     params: filterParams
   });
 };
@@ -933,6 +933,14 @@ ServerConnector.getConfiguration = function () {
   }
 };
 
+/**
+ *
+ * @returns {Promise}
+ */
+ServerConnector.extendSession = function () {
+  return this.sendGetRequest(this.getConfigurationUrl())
+};
+
 ServerConnector.getConfigurationParam = function (paramId) {
   if (paramId === undefined) {
     return Promise.reject(new Error("Unknown param type"));
diff --git a/frontend-js/src/main/js/gui/topMenu/TopMenu.js b/frontend-js/src/main/js/gui/topMenu/TopMenu.js
index 7d00779651ff9295e9d51b764098fadc248a114e..713ea5cbc2161f165f2af1bba5b8199f1e8354ac 100644
--- a/frontend-js/src/main/js/gui/topMenu/TopMenu.js
+++ b/frontend-js/src/main/js/gui/topMenu/TopMenu.js
@@ -81,6 +81,12 @@ TopMenu.prototype._createGui = function () {
   self.getElement().appendChild(versionDiv);
   self.setControlElement(PanelControlElementType.MENU_VERSION_DIV, versionDiv);
 
+  self.getElement().appendChild(Functions.createElement({
+    type: "div",
+    className: "minerva-session-expire",
+    style: "display:none;"
+  }));
+
   var showOverviewDiv = Functions.createElement({
     type: "div",
     style: "float: left;"
@@ -299,10 +305,12 @@ TopMenu.prototype.checkIfSessionIsGoingToExpire = function () {
   //if session is going to expire in 10 minutes show information
   if (sessionExpireTimestamp - currentTimestamp < 10 * 60) {
     self.showSessionExpire(sessionExpireTimestamp - currentTimestamp);
+  } else {
+    self.hideSessionExpire();
   }
 
-  //if session expired 10 seconds ago force logout
-  if (sessionExpireTimestamp < currentTimestamp - 10) {
+  //if session expired
+  if (sessionExpireTimestamp < currentTimestamp) {
     return self.getServerConnector().logout();
   }
   return Promise.resolve();
@@ -310,9 +318,29 @@ TopMenu.prototype.checkIfSessionIsGoingToExpire = function () {
 
 /**
  *
+ * @param {number} timeInSeconds
  */
 TopMenu.prototype.showSessionExpire = function (timeInSeconds) {
-  console.log("Session is going to expire in " + timeInSeconds + " seconds");
+  var self = this;
+  var minutes = Math.floor(timeInSeconds / 60);
+  var seconds = Math.floor(timeInSeconds - minutes * 60);
+  var message = "Session expires in " + minutes + " minutes " + seconds + " seconds";
+  var button = Functions.createElement({
+    type: "button",
+    content: "EXTEND",
+    className: "minerva-extend-session-button",
+    onclick: function () {
+      return self.getServerConnector().extendSession();
+    }
+  });
+  $(".minerva-session-expire", self.getElement()).empty().append("<span>" + message + "</span>").append(button).show();
+};
+
+/**
+ *
+ */
+TopMenu.prototype.hideSessionExpire = function () {
+  $(".minerva-session-expire", this.getElement()).empty().hide();
 };
 
 module.exports = TopMenu;
\ No newline at end of file