diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceResolverService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceResolverService.java
index 786a53a96d4caa597bc18535205c7776ce5d0ffe..a6f07d1c36bf13aa3a82a0cc5d38ec3c71dbe13e 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceResolverService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceResolverService.java
@@ -139,7 +139,7 @@ public class ResourceResolverService {
             LOG.debug("Got subresource [{}]", subresource);
             if (subresource == null) {
                 if (resourceRequest.getAction() != ResourceAction.CREATE_UPDATE) {
-                    throw new SMPRuntimeException(ErrorCode.METADATA_NOT_EXISTS, resource.getIdentifierValue(), resource.getIdentifierScheme(), resourceId.getValue(), resourceId.getScheme());
+                    throw new SMPRuntimeException(ErrorCode.METADATA_NOT_EXISTS, resource.getIdentifierValue(), resource.getIdentifierScheme(), subResourceId.getValue(), subResourceId.getScheme());
                 }
                 subresource = createNewSubResource(subResourceId, resource, subresourceDef);
             }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/resource/ResourceResolverServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/resource/ResourceResolverServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..38da422a3eff6091c8ca4fa8eb0efd642014a698
--- /dev/null
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/resource/ResourceResolverServiceTest.java
@@ -0,0 +1,111 @@
+package eu.europa.ec.edelivery.smp.services.resource;
+
+import eu.europa.ec.edelivery.smp.auth.SMPUserDetails;
+import eu.europa.ec.edelivery.smp.config.ConversionTestConfig;
+import eu.europa.ec.edelivery.smp.data.dao.SubresourceDao;
+import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
+import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource;
+import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
+import eu.europa.ec.edelivery.smp.services.AbstractServiceIntegrationTest;
+import eu.europa.ec.edelivery.smp.servlet.ResourceAction;
+import eu.europa.ec.edelivery.smp.servlet.ResourceRequest;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.platform.commons.util.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+
+@ContextConfiguration(classes = {ResourceResolverService.class, ConversionTestConfig.class})
+public class ResourceResolverServiceTest extends AbstractServiceIntegrationTest {
+
+
+    @Autowired
+    protected ResourceResolverService testInstance;
+
+    @Autowired
+    protected SubresourceDao subresourceDao;
+
+    @Before
+    public void prepareDatabase() {
+        // setup initial data!
+        testUtilsDao.clearData();
+        testUtilsDao.createSubresources();
+    }
+
+    @Test
+    public void tesValidateRequestDataInvalid() {
+
+        List<Object[]> faileTestData = Arrays.asList(
+                new Object[]{new ResourceRequest(null, null, null, null), "Resource Location vector coordinates must not be null"},
+                new Object[]{new ResourceRequest(null, null, Collections.emptyList(), null), "Resource Location vector coordinates must not be null"},
+                new Object[]{new ResourceRequest(null, null, Arrays.asList("1", "2", "3", "4", "5", "6"), null), "More than max. count (5) of Resource Location vector coordinates!"},
+                new Object[]{new ResourceRequest(null, null, Arrays.asList("1", "2", "3"), null), "Can not resolve resource for unknown domain!"}
+        );
+
+        for (Object[] testData : faileTestData) {
+            ResourceRequest req = (ResourceRequest) testData[0];
+            String expectedMessage = (String) testData[1];
+
+            SMPRuntimeException runtimeException = assertThrows(SMPRuntimeException.class, () -> testInstance.validateRequestData(req));
+            MatcherAssert.assertThat(runtimeException.getMessage(), CoreMatchers.containsString(expectedMessage));
+        }
+    }
+
+    @Test
+    public void testResolveAndAuthorizeRequestForResource() {
+        // given
+        SMPUserDetails user = new SMPUserDetails(null, null, null);
+        DBResource resource = testUtilsDao.getResourceD1G1RD1();
+        ResourceRequest req = createResourceRequest(resource);
+        req.setAuthorizedDomain(testUtilsDao.getD1());
+
+        // when
+        ResolvedData result = testInstance.resolveAndAuthorizeRequest(user, req);
+        // then
+        assertNotNull(result);
+        assertEquals(resource, result.getResource());
+        assertNull(result.getSubresource());
+    }
+
+    @Test
+    @Ignore
+    public void testResolveAndAuthorizeRequestForSubresource() {
+        // given
+        SMPUserDetails user = new SMPUserDetails(null, null, null);
+
+        DBSubresource subresource = testUtilsDao.getSubresourceD1G1RD1_S1();
+        ResourceRequest req = createResourceRequest(subresource);
+        req.setAuthorizedDomain(subresource.getResource().getDomainResourceDef().getDomain());
+        // when
+        ResolvedData result = testInstance.resolveAndAuthorizeRequest(user, req);
+        // then
+        assertNotNull(result);
+        assertEquals(subresource.getResource(), result.getResource());
+        assertEquals(subresource, result.getSubresource());
+    }
+
+    public static ResourceRequest createResourceRequest(DBResource resource) {
+        return new ResourceRequest(ResourceAction.READ, null, Arrays.asList(resource.getIdentifierScheme() + "::" + resource.getIdentifierValue()), null);
+    }
+
+    public static ResourceRequest createResourceRequest(DBSubresource subresource) {
+        DBResource res = subresource.getResource();
+        return new ResourceRequest(ResourceAction.READ, null,
+
+                Arrays.asList((StringUtils.isNotBlank(res.getIdentifierScheme())? res.getIdentifierScheme()+ "::":"") + subresource.getResource().getIdentifierValue(),
+                        subresource.getSubresourceDef().getUrlSegment(),
+                        (StringUtils.isNotBlank(subresource.getIdentifierScheme())? subresource.getIdentifierScheme()+ "::":"") + subresource.getIdentifierValue()),
+                null);
+    }
+}
+
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java
index 946b5a0f61583f979abb799150069e2d81b22770..e60d188ac77d584a79c2256e16cd534d16346514 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java
@@ -18,7 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.convert.ConversionService;
 import org.springframework.test.context.ContextConfiguration;
 
-import java.util.Optional;
 import java.util.UUID;
 
 import static eu.europa.ec.edelivery.smp.testutil.TestConstants.TEST_SG_SCHEMA_1;
@@ -44,19 +43,19 @@ public class UIResourceServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    public void  testGetGroupResources() {
-        ServiceResult<ResourceRO> result =  testInstance.getGroupResources(testUtilsDao.getGroupD1G1().getId(), -1, -1, null);
+    public void testGetGroupResources() {
+        ServiceResult<ResourceRO> result = testInstance.getGroupResources(testUtilsDao.getGroupD1G1().getId(), -1, -1, null);
         // one resource is expected  - see the data in testUtilsDao.createResources()
         assertNotNull(result);
         assertEquals(1, result.getCount().intValue());
     }
 
     @Test
-    public void  testGetResourcesForUserAndGroup() {
-        ServiceResult<ResourceRO> resultAdmin =  testInstance.getResourcesForUserAndGroup(testUtilsDao.getUser1().getId(), MembershipRoleType.ADMIN,
+    public void testGetResourcesForUserAndGroup() {
+        ServiceResult<ResourceRO> resultAdmin = testInstance.getResourcesForUserAndGroup(testUtilsDao.getUser1().getId(), MembershipRoleType.ADMIN,
                 testUtilsDao.getGroupD1G1().getId(), -1, -1, null);
 
-        ServiceResult<ResourceRO> resultViewer =  testInstance.getResourcesForUserAndGroup(testUtilsDao.getUser1().getId(), MembershipRoleType.VIEWER,
+        ServiceResult<ResourceRO> resultViewer = testInstance.getResourcesForUserAndGroup(testUtilsDao.getUser1().getId(), MembershipRoleType.VIEWER,
                 testUtilsDao.getGroupD1G1().getId(), -1, -1, null);
         // see the data in testUtilsDao.createResourceMemberships()
         assertEquals(1, resultAdmin.getCount().intValue());
@@ -64,14 +63,14 @@ public class UIResourceServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    public void testCreateResourceForGroup(){
+    public void testCreateResourceForGroup() {
         // given
         ResourceRO testResource = TestROUtils.createResource(UUID.randomUUID().toString(), TEST_SG_SCHEMA_1,
                 testUtilsDao.getDomainResourceDefD1R1().getResourceDef().getIdentifier());
 
         // when
         ResourceRO result = testInstance.createResourceForGroup(testResource, testUtilsDao.getGroupD1G1().getId(),
-                testUtilsDao.getD1().getId(),testUtilsDao.getUser1().getId());
+                testUtilsDao.getD1().getId(), testUtilsDao.getUser1().getId());
         // then
         assertNotNull(result);
         assertEquals(testResource.getIdentifierValue(), result.getIdentifierValue());
@@ -79,16 +78,16 @@ public class UIResourceServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    public void testUpdateResourceForGroup(){
+    public void testUpdateResourceForGroup() {
         // given
         DBResource dbResource = testUtilsDao.getResourceD1G1RD1();
-        ResourceRO testResource = TestROUtils.createResource( dbResource.getIdentifierValue(), dbResource.getIdentifierScheme(),dbResource.getDomainResourceDef().getResourceDef().getIdentifier());
+        ResourceRO testResource = TestROUtils.createResource(dbResource.getIdentifierValue(), dbResource.getIdentifierScheme(), dbResource.getDomainResourceDef().getResourceDef().getIdentifier());
         assertNotEquals(dbResource.getVisibility(), VisibilityType.PRIVATE);
         testResource.setVisibility(VisibilityType.PRIVATE);
 
         // when
         ResourceRO result = testInstance.updateResourceForGroup(testResource, dbResource.getId(),
-                testUtilsDao.getGroupD1G1().getId(),testUtilsDao.getD1().getId());
+                testUtilsDao.getGroupD1G1().getId(), testUtilsDao.getD1().getId());
         // then
         assertNotNull(result);
         assertEquals(testResource.getIdentifierValue(), result.getIdentifierValue());
@@ -97,26 +96,26 @@ public class UIResourceServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    public void testDeleteResourceFromGroup(){
+    public void testDeleteResourceFromGroup() {
         // given
         ResourceRO testResource = TestROUtils.createResource(UUID.randomUUID().toString(), TEST_SG_SCHEMA_1,
                 testUtilsDao.getDomainResourceDefD1R1().getResourceDef().getIdentifier());
         ResourceRO result = testInstance.createResourceForGroup(testResource, testUtilsDao.getGroupD1G1().getId(),
-                testUtilsDao.getD1().getId(),testUtilsDao.getUser1().getId());
+                testUtilsDao.getD1().getId(), testUtilsDao.getUser1().getId());
         Long resourceId = new Long(result.getResourceId());
         assertNotNull(resourceDao.find(resourceId));
         // when
-        testInstance.deleteResourceFromGroup(resourceId, testUtilsDao.getGroupD1G1().getId(),testUtilsDao.getD1().getId());
+        testInstance.deleteResourceFromGroup(resourceId, testUtilsDao.getGroupD1G1().getId(), testUtilsDao.getD1().getId());
         // then
         assertNull(resourceDao.find(resourceId));
     }
 
     @Test
-    public void testGetResourceMembers(){
+    public void testGetResourceMembers() {
         // given
         // see the data in testUtilsDao.createResourceMemberships()
         // when
-        ServiceResult<MemberRO> resourceMembers = testInstance.getResourceMembers(testUtilsDao.getResourceD1G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(),-1,-1, null);
+        ServiceResult<MemberRO> resourceMembers = testInstance.getResourceMembers(testUtilsDao.getResourceD1G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(), -1, -1, null);
         // then
         assertNotNull(resourceMembers);
         assertEquals(1, resourceMembers.getCount().intValue());
@@ -124,7 +123,7 @@ public class UIResourceServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    public void testAddUpdateMemberToResourceUpdate(){
+    public void testAddUpdateMemberToResourceUpdate() {
         // given
         // see the data in testUtilsDao.createResourceMemberships()
         DBResourceMember resourceMember = testUtilsDao.getResourceMemberU1R1_D2G1RD1_Admin();
@@ -139,9 +138,9 @@ public class UIResourceServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    public void testAddUpdateMemberToResourceUAdd(){
+    public void testAddUpdateMemberToResourceUAdd() {
         // given
-        int memberCount = testInstance.getResourceMembers(testUtilsDao.getResourceD1G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(),-1,-1, null).getCount().intValue();
+        int memberCount = testInstance.getResourceMembers(testUtilsDao.getResourceD1G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(), -1, -1, null).getCount().intValue();
         DBResourceMember dbMember = new DBResourceMember();
         dbMember.setRole(MembershipRoleType.VIEWER);
         dbMember.setUser(testUtilsDao.getUser2());
@@ -151,7 +150,7 @@ public class UIResourceServiceTest extends AbstractServiceIntegrationTest {
         // when
         testInstance.addUpdateMemberToResource(testUtilsDao.getResourceD1G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(), member, null);
         // then
-        ServiceResult<MemberRO> resourceMembers = testInstance.getResourceMembers(testUtilsDao.getResourceD1G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(),-1,-1, null);
-        assertEquals(memberCount+1, resourceMembers.getCount().intValue());
+        ServiceResult<MemberRO> resourceMembers = testInstance.getResourceMembers(testUtilsDao.getResourceD1G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(), -1, -1, null);
+        assertEquals(memberCount + 1, resourceMembers.getCount().intValue());
     }
 }