diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java
index 13aac7e4274322704c0f9a06b4f4c245a59a844d..af923b647b8791a013b4a3e7c532d40c9e38c870 100644
--- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java
+++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java
@@ -1,9 +1,17 @@
 package lcsb.mapviewer.converter.graphics;
 
 import java.awt.Color;
+import java.awt.Desktop;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import lcsb.mapviewer.commands.ColorExtractor;
@@ -37,4 +45,42 @@ public class ConverterTest {
 		}
 	}
 
+	@Test
+	@Ignore("it's just code for generating scale")
+	public void testX() throws IOException {
+		BufferedImage tmpBI = new BufferedImage(900, 100, BufferedImage.TYPE_INT_ARGB);
+		Graphics2D tmpGraphics = tmpBI.createGraphics();
+		int startX = 10;
+		int startY = 15;
+		int stepSize = 40;
+		int height = 25;
+		tmpGraphics.setColor(Color.BLACK);
+		for (int i = 0; i < 21; i++) {
+			tmpGraphics.drawLine(startX + i * stepSize, height+startY, startX + i * stepSize, height*2);
+			String str = ""+((double)(i-10))/((double)(10));
+			tmpGraphics.drawString(str, startX + i * stepSize, height*2+startY);
+		}
+		for (int i = 0; i < 10 * stepSize; i++) {
+			double ratio = ((double) i) / ((double) (10 * stepSize));
+			tmpGraphics.setBackground(getColor(ratio, Color.BLUE, Color.WHITE));
+			tmpGraphics.setColor(getColor(ratio, Color.BLUE, Color.WHITE));
+			tmpGraphics.drawRect(startX + i, startY , 1, height);
+		}
+		for (int i = 0; i < 10 * stepSize; i++) {
+			double ratio = ((double) i) / ((double) (10 * stepSize));
+			tmpGraphics.setBackground(getColor(ratio, Color.WHITE, Color.RED));
+			tmpGraphics.setColor(getColor(ratio, Color.WHITE, Color.RED));
+			tmpGraphics.drawRect(10 * stepSize + startX + i, startY , 1, height);
+		}
+		ImageIO.write(tmpBI, "PNG", new File("tmp.png"));
+		Desktop.getDesktop().open(new File("tmp.png"));
+	}
+
+	private Color getColor(double d, Color startColor, Color endColor) {
+
+		return new Color((int) (startColor.getRed() + d * (endColor.getRed() - startColor.getRed())), //
+				(int) (startColor.getGreen() + d * (endColor.getGreen() - startColor.getGreen())), //
+				(int) (startColor.getBlue() + d * (endColor.getBlue() - startColor.getBlue())));
+	}
+
 }
diff --git a/frontend-js/.idea/dictionaries/piotr_gawron.xml b/frontend-js/.idea/dictionaries/piotr_gawron.xml
index 628347a73535f38a4fee58a4cd3a3add9a0caef5..c7f1009a8b722df266d5b5cc34e9a795c65480f1 100644
--- a/frontend-js/.idea/dictionaries/piotr_gawron.xml
+++ b/frontend-js/.idea/dictionaries/piotr_gawron.xml
@@ -26,6 +26,7 @@
       <w>jstree</w>
       <w>kegg</w>
       <w>lcsb</w>
+      <w>mailto</w>
       <w>mapviewer</w>
       <w>mirbase</w>
       <w>mirtarbase</w>
diff --git a/frontend-js/src/main/js/GuiConnector.js b/frontend-js/src/main/js/GuiConnector.js
index 8fdf977c82e8948b80656700626d808ee5e562cc..43406b51aa027a542c0a5c7bb22ae22653be023b 100644
--- a/frontend-js/src/main/js/GuiConnector.js
+++ b/frontend-js/src/main/js/GuiConnector.js
@@ -6,6 +6,8 @@ var Functions = require('./Functions');
 var SecurityError = require('./SecurityError');
 var ValidationError = require('./ValidationError');
 var GuiMessageError = require('./gui/GuiMessageError');
+var NetworkError = require('./NetworkError');
+
 
 /**
  * This static global object contains set of functions that returns/set data in
@@ -182,7 +184,9 @@ GuiConnector.prototype.alert = function (error) {
   }
   var message = error;
   if (message instanceof SecurityError) {
-    message = error.message + "<p>Please <a href=\"login.xhtml\">login</a> to access this resource.</p>";
+    message = error.message + "<p>Please <a href=\"login.xhtml\">login</a> to access this resource</p>";
+  } else if (message instanceof NetworkError && (error.message === "XHR error" || error.message === "Failed to fetch")) {
+    message = "File to big.<br>Please reduce file size or contact administrators.";
   } else if (message instanceof ValidationError) {
     message = error.message;
   } else if (message instanceof GuiMessageError) {
diff --git a/frontend-js/src/main/js/gui/AddOverlayDialog.js b/frontend-js/src/main/js/gui/AddOverlayDialog.js
index ef8a4e1f45e735e23b59ad9965ae0a1ea70f2940..937538e0ea799d3f991e4443b13b437429c77351 100644
--- a/frontend-js/src/main/js/gui/AddOverlayDialog.js
+++ b/frontend-js/src/main/js/gui/AddOverlayDialog.js
@@ -176,6 +176,8 @@ AddOverlayDialog.prototype.open = function() {
         var fileContent = self.getFileContent();
         if (fileContent === null) {
           GuiConnector.alert("Neither file was selected nor data was entered");
+        } else if (fileContent.length > 1024 * 256) {
+          GuiConnector.alert("File to big.<br>Please reduce file size or contact administrators.");
         } else {
           return self.addOverlay().then(function(result) {
             $(dialog).dialog("close");
diff --git a/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js b/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js
index b9302e8c6fe65e48cc7425277a1a736ace44db04..034f18ef03b5a51a6fd1484e6b536faa26d1b64f 100644
--- a/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js
@@ -10,11 +10,12 @@ var PanelControlElementType = require('../PanelControlElementType');
 
 function ChemicalPanel(params) {
     params.panelName = "chemical";
-    params.helpTip = '<p>source: Comparative Toxicogenomics Database <a target="_ctd" href="http://ctdbase.org/">ctdbase.org</a></p>'
-        + '<p>use only the full name of chemicals according to <a target="_ctd_chemicals" href="http://ctdbase.org/voc.go?type=chem"> ctdbase/chem</a> for search</p>'
-        + '<p>only curated associations between genes and chemicals with direct evidence to '
-        + 'Parkinson Disease (<a href="http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300" target="_blank">D010300</a>) are displayed</p>'
-        + '<p>separate multiple search by semicolon';
+  params.helpTip = '<p>source: Comparative Toxicogenomics Database <a target="_ctd" href="http://ctdbase.org/">ctdbase.org</a></p>'
+    + '<p>only associations between genes and chemicals with direct evidence to '
+    + 'Parkinson Disease (<a href="http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300" target="_blank">D010300</a>) are displayed</p>'
+    + '<p>use only the full name of chemicals according to <a target="_ctd_chemicals" href="http://ctdbase.org/voc.go?type=chem"> ctdbase/chem</a> for search</p>'
+    + 'if the chemical name includes comma(s), place a semicolon behind the name to avoid a segmentation of the name</p>'
+    + '<p>separate multiple search by semicolon';
     params.placeholder = "full chemical name (CTD)";
 
     AbstractDbPanel.call(this, params);
@@ -38,8 +39,7 @@ ChemicalPanel.prototype.createPreamble = function (chemical) {
         result.appendChild(guiUtils.createParamLine("Description: ", chemical.getDescription()));
         result.appendChild(guiUtils.createArrayParamLine("Synonyms: ", chemical.getSynonyms()));
         result.appendChild(guiUtils.createParamLine("Direct Evidence: ", chemical.getDirectEvidence()));
-        result.appendChild(guiUtils
-            .createAnnotations("Direct Evidence Publications: ", chemical.getDirectEvidenceReferences()));
+        result.appendChild(guiUtils.createAnnotations("Direct Evidence Publications: ", chemical.getDirectEvidenceReferences()));
         result.appendChild(guiUtils.createAnnotations("Sources: ", chemical.getReferences()));
         result.appendChild(guiUtils.createNewLine());
     }
diff --git a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
index 52dbe8ad181f0fe72c19dbba848b0aaab071a1ea..02a6ba3c99d4c402811aa41d33cea96fb902c9f9 100644
--- a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
@@ -316,7 +316,8 @@ ProjectInfoPanel.prototype._createUserDataTab = function () {
     className: "searchPanel",
     style: "display:none",
     content: '<h3><img src="./resources/images/profile.png" border="0" align="left"/>'
-    + '<br/>User data</h3><br/>YOU ARE NOT LOGGED IN.<br/>' + '<center><button>LOGIN</button></center>',
+    + '<br/>User data</h3><br/>YOU ARE NOT LOGGED IN.<br/>' + '<center><button>LOGIN</button></center>' +
+    '<br/><a hreg="#" name="requestAccount">Request an account</a>',
   });
   $(loginTabDiv).find("button")[0].onclick = function () {
     return self.getParent().getLoginDialog().open();
@@ -353,7 +354,12 @@ ProjectInfoPanel.prototype.showUserProfilePage = function (user) {
 };
 
 ProjectInfoPanel.prototype.init = function () {
-  return this.refresh();
+  var self = this;
+  return ServerConnector.getConfigurationParam(ConfigurationType.REQUEST_ACCOUNT_EMAIL).then(function (value) {
+    var link = $("[name=requestAccount]", self.getElement());
+    link.attr("href", "mailto:" + value + "?subject=MINERVA account request");
+    return self.refresh();
+  });
 };
 
 ProjectInfoPanel.prototype.destroy = function () {