diff --git a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
index c2357d11fcf7df0234ec5282594c99f6a75ddd74..7c7fe4c9cd50d83ea20e24b2518511d96a2582ef 100644
--- a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
@@ -6,9 +6,11 @@ var ConfigurationType = require('../../ConfigurationType');
 
 var Functions = require('../../Functions');
 var GuiConnector = require('../../GuiConnector');
+var NetworkError = require('../../NetworkError');
 var ValidationError = require('../../ValidationError');
 
 var logger = require('../../logger');
+var HttpStatus = require('http-status-codes');
 
 var Promise = require("bluebird");
 var xss = require("xss");
@@ -253,9 +255,11 @@ ConfigurationAdminPanel.prototype.saveOption = function (type) {
     value = element.val();
   }
 
+  var oldVal;
   GuiConnector.showProcessing();
   return self.getServerConnector().getConfiguration().then(function (configuration) {
     option = configuration.getOption(type);
+    oldVal = option.getValue();
     if (option === undefined) {
       return Promise.reject(new ValidationError("Unknown configuration type: " + type));
     }
@@ -317,7 +321,16 @@ ConfigurationAdminPanel.prototype.saveOption = function (type) {
         }
       });
     }
-  }).catch(GuiConnector.alert).finally(GuiConnector.hideProcessing);
+  }).catch(function (e) {
+    if (e instanceof NetworkError && e.statusCode === HttpStatus.BAD_REQUEST) {
+      var content = e.content;
+      GuiConnector.alert(new ValidationError(content.reason));
+      option.setValue(oldVal);
+      element.val(oldVal);
+    } else {
+      GuiConnector.alert(e);
+    }
+  }).finally(GuiConnector.hideProcessing);
 };
 
 /**
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java b/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
index 7bc7a6182d8300741589675c677f06342c3be029..68c9d13003cf879cc578b75285a8656fb1de9cbc 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
@@ -3,8 +3,9 @@ package lcsb.mapviewer.api;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-import java.util.TreeMap;
+import java.util.HashMap;
 import java.util.Map;
+import java.util.TreeMap;
 
 import org.apache.log4j.Logger;
 import org.springframework.http.HttpHeaders;
@@ -37,7 +38,8 @@ public abstract class BaseController {
     } else if (e instanceof ObjectExistsException) {
       return createErrorResponse("Object already exists.", e.getMessage(), new HttpHeaders(), HttpStatus.CONFLICT);
     } else if (e instanceof OperationNotAllowedException) {
-      return createErrorResponse("Operation not allowed.", e.getMessage(), new HttpHeaders(), HttpStatus.METHOD_NOT_ALLOWED);
+      return createErrorResponse("Operation not allowed.", e.getMessage(), new HttpHeaders(),
+          HttpStatus.METHOD_NOT_ALLOWED);
     } else if (e instanceof QueryException) {
       logger.error(e, e);
       return createErrorResponse("Query server error.", e.getMessage(), new HttpHeaders(), HttpStatus.BAD_REQUEST);
@@ -53,8 +55,10 @@ public abstract class BaseController {
   private ResponseEntity<Object> createErrorResponse(String errorMessage, String error, HttpHeaders httpHeaders,
       HttpStatus status) {
 
-    return new ResponseEntity<Object>(
-        "{\"error\" : \"" + errorMessage + "\",\"reason\":" + new Gson().toJson(error) + "}", httpHeaders, status);
+    Map<String, String> response = new HashMap<>();
+    response.put("error", errorMessage);
+    response.put("reason", error);
+    return new ResponseEntity<Object>(new Gson().toJson(response), httpHeaders, status);
   }
 
   public Map<String, Object> parseBody(String body) throws IOException, JsonParseException, JsonMappingException {
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
index 326e146520f042e5f901211200d4c09a4576e18b..e956cad4a284812fe45d30d88be6fb94e7d8718a 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
@@ -293,7 +293,7 @@ public class ConfigurationRestImpl extends BaseRestImpl {
     try {
       configurationService.setConfigurationValue(type, value);
     } catch (InvalidArgumentException e) {
-      throw new QueryException(e);
+      throw new QueryException(e.getMessage(), e);
     }
     return optionToMap(configurationService.getValue(type));
   }