diff --git a/pom.xml b/pom.xml
index 230bba27a16089e9510fc013aeff6d9b6e5aabb7..bb4ccab815f041d29b7a48d7debed83f0498a2f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@
         <project.scm.id>edelivery-scm</project.scm.id>
         <sonar.host.url>http://edelquality.westeurope.cloudapp.azure.com:9000/sonar/</sonar.host.url>
         <sonar.exclusions>**/smp/data/model/*,**/smp/data/ui/*, **/smp/ui/exception/*,**/smp/services/ui/filters/*,
-            **/smp/exceptions/*, **/to_be_removed/*
+            **/smp/exceptions/*, **/smp/data/ui/enums/*, **/to_be_removed/*
         </sonar.exclusions>
         <sonar.language>java</sonar.language>
         <!-- jacoco remote agent settings start -->
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ApplicationResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ApplicationResource.java
index 0d79da20d1464700373288fc1d84e9088e19e01d..6d094c76ccf130319dbac6f0163d2d65c78a3bf3 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ApplicationResource.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ApplicationResource.java
@@ -4,7 +4,9 @@ package eu.europa.ec.edelivery.smp.ui;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceGroupRO;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceResult;
 import eu.europa.ec.edelivery.smp.data.ui.SmpInfoRO;
+import eu.europa.ec.edelivery.smp.services.SMLIntegrationService;
 import eu.europa.ec.edelivery.smp.services.ui.UIServiceGroupService;
+import eu.europa.ec.edelivery.smp.sml.SmlConnector;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +32,9 @@ public class ApplicationResource {
     @Autowired
     private Environment env;
 
+    @Autowired
+    SmlConnector smlConnector;
+
     @Value("${smp.artifact.name:eDelivery SMP}")
     String artifactName;
     @Value("${smp.artifact.version:}")
@@ -37,9 +42,6 @@ public class ApplicationResource {
     @Value("${smp.artifact.build.time:}")
     String buildTime;
 
-    @Value("${bdmsl.integration.enabled}")
-    boolean smlIntegrationEnabled;
-
 
     @RequestMapping(method = RequestMethod.GET, path = "name")
     public  String getName() {
@@ -55,7 +57,7 @@ public class ApplicationResource {
     public SmpInfoRO getApplicationInfo() {
         SmpInfoRO info = new SmpInfoRO();
         info.setVersion(getDisplayVersion());
-        info.setSmlIntegrationOn(smlIntegrationEnabled);
+        info.setSmlIntegrationOn(smlConnector.isSmlIntegrationEnabled());
         info.setContextPath(getRootContext());
         return info;
     }
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/DomainResourceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/DomainResourceTest.java
index 3c091601d1b7ca250c2fa3a06e92bae4ad693c77..4e6d99fb826f3f25e7f64113305e91c616456c5a 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/DomainResourceTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/DomainResourceTest.java
@@ -64,7 +64,6 @@ public class DomainResourceTest {
     DomainDao domainDao;
 
     private MockMvc mvc;
-    private static final RequestPostProcessor ADMIN_CREDENTIALS = httpBasic("smp_admin", "test123");
     private static final RequestPostProcessor SYSTEM_CREDENTIALS = httpBasic("sys_admin", "test123");
 
     @Before
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/KeystoreResourceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/KeystoreResourceTest.java
index 8e5bdc2da79ccd0a3815fffe3e0cc19636b90b6c..fae6f05276fe53a5f9fc778654c783786a6d7317 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/KeystoreResourceTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/KeystoreResourceTest.java
@@ -6,7 +6,9 @@ import eu.europa.ec.edelivery.smp.config.PropertiesTestConfig;
 import eu.europa.ec.edelivery.smp.config.SmpAppConfig;
 import eu.europa.ec.edelivery.smp.config.SmpWebAppConfig;
 import eu.europa.ec.edelivery.smp.config.SpringSecurityConfig;
-import eu.europa.ec.edelivery.smp.data.ui.SmpInfoRO;
+import eu.europa.ec.edelivery.smp.data.ui.*;
+import eu.europa.ec.edelivery.smp.services.ui.UIKeystoreService;
+import org.apache.commons.io.FileUtils;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -20,6 +22,7 @@ import org.springframework.test.context.jdbc.SqlConfig;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.web.WebAppConfiguration;
 import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
 import org.springframework.test.web.servlet.request.RequestPostProcessor;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import org.springframework.web.context.ContextLoaderListener;
@@ -28,9 +31,18 @@ import org.springframework.web.context.WebApplicationContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 
@@ -51,16 +63,18 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
         "bdmsl.integration.enabled=true"})
 
 public class KeystoreResourceTest {
-    private static final String PATH = "/ui/rest/application";
+    private static final String PATH = "/ui/rest/keystore";
+
+    Path resourceDirectory = Paths.get("src", "test", "resources",  "keystores", "smp-keystore.jks");
 
     @Autowired
     private WebApplicationContext webAppContext;
 
-
-
+    @Autowired
+    private UIKeystoreService uiKeystoreService;
 
     private MockMvc mvc;
-    private static final RequestPostProcessor ADMIN_CREDENTIALS = httpBasic("smp_admin", "test123");
+    private static final RequestPostProcessor SYSTEM_CREDENTIALS = httpBasic("sys_admin", "test123");
 
     @Before
     public void setup() {
@@ -79,11 +93,78 @@ public class KeystoreResourceTest {
     }
 
     @Test
-    public void getKeyCertificateList() {
+    public void getKeyCertificateList() throws Exception {
+        // given when
+        int countStart = uiKeystoreService.getKeystoreEntriesList().size();
+        MvcResult result = mvc.perform(get(PATH).with(SYSTEM_CREDENTIALS)).
+                andExpect(status().isOk()).andReturn();
+
+        //them
+        ObjectMapper mapper = new ObjectMapper();
+        ServiceResult res = mapper.readValue(result.getResponse().getContentAsString(), ServiceResult.class);
+
+
+        assertNotNull(res);
+        assertEquals(countStart, res.getServiceEntities().size());
+        res.getServiceEntities().forEach(sgMap -> {
+            CertificateRO cert = mapper.convertValue(sgMap, CertificateRO.class);
+            assertNotNull(cert.getAlias());
+            assertNotNull(cert.getCertificateId());
+            assertNotNull(cert.getBlueCoatHeader());
+            assertNull(cert.getEncodedValue()); // submit only metadata
+        });
+    }
+
+    @Test
+    public void uploadKeystoreFailed() throws Exception {
+        // given when
+        MvcResult result = mvc.perform(post(PATH+"/3/upload/JKS/test123")
+                .with(SYSTEM_CREDENTIALS)
+                .content("invalid keystore")).
+                andExpect(status().isOk()).andReturn();
+
+        //them
+        ObjectMapper mapper = new ObjectMapper();
+        KeystoreImportResult res = mapper.readValue(result.getResponse().getContentAsString(), KeystoreImportResult.class);
+
+        assertNotNull(res);
+        assertEquals("IOException occurred while reading the keystore: Invalid keystore format", res.getErrorMessage());
+    }
+
+    @Test
+    public void uploadKeystoreInvalidPassword() throws Exception {
+
+        // given when
+        MvcResult result = mvc.perform(post(PATH+"/3/upload/JKS/NewPassword1234")
+                .with(SYSTEM_CREDENTIALS)
+                .content(Files.readAllBytes(resourceDirectory)) )
+                .andExpect(status().isOk()).andReturn();
+
+        //them
+        ObjectMapper mapper = new ObjectMapper();
+        KeystoreImportResult res = mapper.readValue(result.getResponse().getContentAsString(), KeystoreImportResult.class);
+
+        assertNotNull(res);
+        assertEquals("IOException occurred while reading the keystore: Keystore was tampered with, or password was incorrect", res.getErrorMessage());
     }
 
     @Test
-    public void uploadKeystore() {
+    public void uploadKeystoreOK() throws Exception {
+
+        int countStart = uiKeystoreService.getKeystoreEntriesList().size();
+        // given when
+        MvcResult result = mvc.perform(post(PATH+"/3/upload/JKS/test123")
+                .with(SYSTEM_CREDENTIALS)
+                .content(Files.readAllBytes(resourceDirectory)) )
+                .andExpect(status().isOk()).andReturn();
+
+        //them
+        ObjectMapper mapper = new ObjectMapper();
+        KeystoreImportResult res = mapper.readValue(result.getResponse().getContentAsString(), KeystoreImportResult.class);
+
+        assertNotNull(res);
+        assertNull(res.getErrorMessage());
+        assertEquals(countStart+1, uiKeystoreService.getKeystoreEntriesList().size());
     }
 
 
diff --git a/smp-webapp/src/test/resources/keystores/smp-keystore_multiple_domains.jks b/smp-webapp/src/test/resources/keystores/smp-keystore_multiple_domains.jks
index 75810c018b1203530f3d02fff46545cf184a71da..716ca6ad4f15ec132c0bc17648b0eafb2cd2ee9f 100644
Binary files a/smp-webapp/src/test/resources/keystores/smp-keystore_multiple_domains.jks and b/smp-webapp/src/test/resources/keystores/smp-keystore_multiple_domains.jks differ