diff --git a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java
index 8b801b5eca5afcda07811e96e149d2117835fe47..440e2308919bc09137b4124c917b77243a299d27 100644
--- a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java
+++ b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPJsonResourceExample.java
@@ -52,7 +52,7 @@ public class DomiSMPJsonResourceExample implements ResourceDefinitionSpi {
     }
 
     @Override
-    public List<SubresourceDefinitionSpi> getSuresourceSpiList() {
+    public List<SubresourceDefinitionSpi> getSubresourceSpiList() {
         return Collections.emptyList();
     }
 
diff --git a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java
index 61f0d29a179e2be4be02eaa3f1fdae2e64697905..d98bea29567f7de29945ec98448de73bc619e12b 100644
--- a/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java
+++ b/smp-examples/resource-spi-example/src/main/java/eu/europa/ec/smp/spi/examples/def/DomiSMPPropertyResourceExample.java
@@ -52,7 +52,7 @@ public class DomiSMPPropertyResourceExample implements ResourceDefinitionSpi {
     }
 
     @Override
-    public List<SubresourceDefinitionSpi> getSuresourceSpiList() {
+    public List<SubresourceDefinitionSpi> getSubresourceSpiList() {
         return Collections.emptyList();
     }
 
diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java b/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java
index f919d7818133f475de5d9cede9e7b3e75a5cdc58..abcf6f400b21285bdb6a4a6a085d7f1b03da63cd 100644
--- a/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java
+++ b/smp-resource-extensions/oasis-cppa3-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocument.java
@@ -52,7 +52,7 @@ public class OasisCppaCppDocument implements ResourceDefinitionSpi {
     }
 
     @Override
-    public List<SubresourceDefinitionSpi> getSuresourceSpiList() {
+    public List<SubresourceDefinitionSpi> getSubresourceSpiList() {
         return Collections.emptyList();
     }
 
diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/OasisCPPA3ExtensionTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/OasisCPPA3ExtensionTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..216c5792b1afc14d92cbd9e0668659f1925d068b
--- /dev/null
+++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/OasisCPPA3ExtensionTest.java
@@ -0,0 +1,54 @@
+package eu.europa.ec.smp.spi;
+
+import eu.europa.ec.smp.spi.def.OasisCppaCppDocument;
+import eu.europa.ec.smp.spi.resource.ResourceDefinitionSpi;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class OasisCPPA3ExtensionTest {
+    OasisCppaCppDocument mockOasisCppaCppDocument = Mockito.mock(OasisCppaCppDocument.class);
+
+    OasisCPPA3Extension testInstance = new OasisCPPA3Extension(mockOasisCppaCppDocument);
+    @Test
+    void testIdentifier() {
+
+        String result = testInstance.identifier();
+
+        assertEquals("edelivery-oasis-cppa3-extension", result);
+    }
+
+    @Test
+    void testName() {
+        String result = testInstance.name();
+        assertEquals("Oasis CPPA 3.0", result);
+    }
+
+    @Test
+    void testDescription() {
+        String result = testInstance.description();
+        assertEquals("The extension implements Oasis CPPA-CPP document handlers", result);
+    }
+
+    @Test
+    void testVersion() {
+        String  result = testInstance.version();
+        assertEquals("1.0", result);
+    }
+
+    @Test
+    void testResourceTypes() {
+        List<ResourceDefinitionSpi> result = testInstance.resourceTypes();
+        assertEquals(1, result.size());
+        assertEquals(mockOasisCppaCppDocument, result.get(0));
+    }
+
+    @Test
+    void testPayloadValidators() {
+        List<PayloadValidatorSpi> result = testInstance.payloadValidators();
+        assertEquals(0, result.size());
+    }
+}
diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocumentTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocumentTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad2430b6f485a90f8510add210e8d21aad29d765
--- /dev/null
+++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisCppaCppDocumentTest.java
@@ -0,0 +1,76 @@
+package eu.europa.ec.smp.spi.def;
+
+import eu.europa.ec.smp.spi.OasisCPPA3Extension;
+import eu.europa.ec.smp.spi.handler.OasisCppa3CppHandler;
+import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi;
+import eu.europa.ec.smp.spi.resource.SubresourceDefinitionSpi;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class OasisCppaCppDocumentTest {
+
+    OasisCppa3CppHandler mockOasisCppa3CppHandler = Mockito.mock(OasisCppa3CppHandler.class);
+    OasisCppaCppDocument testInstance = new OasisCppaCppDocument(mockOasisCppa3CppHandler);
+
+    @Test
+    void identifier() {
+        String result = testInstance.identifier();
+
+        assertEquals("edelivery-oasis-cppa-3.0-cpp", result);
+    }
+
+    @Test
+    void defaultUrlSegment() {
+        String result = testInstance.defaultUrlSegment();
+
+        assertEquals("cpp", result);
+    }
+
+    @Test
+    void name() {
+        String result = testInstance.name();
+
+        assertEquals("Oasis CPPA3 CPP document", result);
+    }
+
+    @Test
+    void description() {
+        String result = testInstance.description();
+
+        assertEquals("Oasis CPPA-CPP document", result);
+    }
+
+    @Test
+    void mimeType() {
+        String result = testInstance.mimeType();
+
+        assertEquals("text/xml", result);
+    }
+
+    @Test
+    void getSubresourceSpiList() {
+        List<SubresourceDefinitionSpi> result = testInstance.getSubresourceSpiList();
+
+        assertTrue(result.isEmpty());
+    }
+
+    @Test
+    void getResourceHandler() {
+        ResourceHandlerSpi result = testInstance.getResourceHandler();
+
+        assertEquals(mockOasisCppa3CppHandler, result);
+    }
+
+    @Test
+    void testToString() {
+        String result = testInstance.toString();
+
+        MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-cppa-3.0-cpp"));
+    }
+}
diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb26f7f5ab13439249712e8b920be471d668de1f
--- /dev/null
+++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/AbstractHandlerTest.java
@@ -0,0 +1,112 @@
+package eu.europa.ec.smp.spi.handler;
+
+import eu.europa.ec.smp.spi.api.SmpDataServiceApi;
+import eu.europa.ec.smp.spi.api.SmpIdentifierServiceApi;
+import eu.europa.ec.smp.spi.api.SmpXmlSignatureApi;
+import eu.europa.ec.smp.spi.api.model.RequestData;
+import eu.europa.ec.smp.spi.api.model.ResourceIdentifier;
+import eu.europa.ec.smp.spi.api.model.ResponseData;
+import eu.europa.ec.smp.spi.exceptions.ResourceException;
+import org.mockito.Mockito;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Collections;
+
+import static org.junit.Assert.assertTrue;
+
+abstract class AbstractHandlerTest {
+    protected SmpDataServiceApi mockSmpDataApi = Mockito.mock(SmpDataServiceApi.class);
+    protected SmpIdentifierServiceApi mockSmpIdentifierServiceApi = Mockito.mock(SmpIdentifierServiceApi.class);
+    protected SmpXmlSignatureApi mockSignatureApi = Mockito.mock(SmpXmlSignatureApi.class);
+
+
+    protected RequestData requestData = Mockito.mock(RequestData.class);
+    protected ResponseData responseData = Mockito.mock(ResponseData.class);
+
+    void readResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException {
+        readResourceAction(resourceName, resourceIdentifier, null);
+    }
+
+    void readResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Mockito.doReturn(baos).when(responseData).getOutputStream();
+        Mockito.doReturn(AbstractHandlerTest.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+        }
+
+        Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+        getTestInstance().readResource(requestData, responseData);
+
+        assertTrue(baos.size() > 0);
+    }
+
+    void storeResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException {
+        storeResourceAction(resourceName, resourceIdentifier, null);
+    }
+
+    void storeResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Mockito.doReturn(baos).when(responseData).getOutputStream();
+        Mockito.doReturn(AbstractHandlerTest.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+            Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+        }
+        Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+
+        getTestInstance().storeResource(requestData, responseData);
+    }
+
+    void validateResourceAction(String resourceName, ResourceIdentifier resourceIdentifier) throws ResourceException {
+        validateResourceAction(resourceName, resourceIdentifier, null);
+    }
+
+    void validateResourceAction(String resourceName, ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+        // validate
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+            Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+        }
+        Mockito.doReturn(AbstractHandlerTest.class.getResourceAsStream(resourceName)).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        Mockito.when(mockSmpIdentifierServiceApi.normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+
+
+
+        getTestInstance().validateResource(requestData);
+    }
+
+
+    void generateResourceAction(ResourceIdentifier resourceIdentifier) throws ResourceException {
+        generateResourceAction(resourceIdentifier, null);
+    }
+
+    void generateResourceAction(ResourceIdentifier resourceIdentifier, ResourceIdentifier subresourceIdentifier) throws ResourceException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
+        if (subresourceIdentifier != null) {
+            Mockito.doReturn(subresourceIdentifier).when(requestData).getSubresourceIdentifier();
+            Mockito.when(mockSmpIdentifierServiceApi.normalizeSubresourceIdentifier(Mockito.anyString(), Mockito.anyString())).thenAnswer(i -> new ResourceIdentifier((String) i.getArguments()[0], (String) i.getArguments()[1]));
+
+        }
+        Mockito.doReturn(baos).when(responseData).getOutputStream();
+
+        getTestInstance().generateResource(requestData, responseData, Collections.emptyList());
+        assertTrue(baos.size() > 0);
+
+        // The generated resource should be valid
+        ByteArrayInputStream bios = new ByteArrayInputStream(baos.toByteArray());
+        Mockito.doReturn(bios).when(requestData).getResourceInputStream();
+        Mockito.doReturn(resourceIdentifier).when(mockSmpIdentifierServiceApi).normalizeResourceIdentifier(Mockito.anyString(), Mockito.anyString());
+
+        getTestInstance().validateResource(requestData);
+    }
+
+    abstract AbstractHandler getTestInstance();
+}
diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java
index 7c07518fc10daa131cb1604239a5959c93c749ad..2b0799338688c2625b1137588a80c58f0f8755b7 100644
--- a/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java
+++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/java/eu/europa/ec/smp/spi/handler/OasisCppa3CppHandlerTest.java
@@ -6,8 +6,10 @@ import eu.europa.ec.smp.spi.api.SmpXmlSignatureApi;
 import eu.europa.ec.smp.spi.api.model.RequestData;
 import eu.europa.ec.smp.spi.api.model.ResourceIdentifier;
 import eu.europa.ec.smp.spi.api.model.ResponseData;
+import eu.europa.ec.smp.spi.exceptions.CPPARuntimeException;
 import eu.europa.ec.smp.spi.exceptions.ResourceException;
-import org.junit.Test;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.xml.sax.SAXParseException;
@@ -18,48 +20,70 @@ import java.util.Collections;
 
 import static org.junit.Assert.*;
 
-public class OasisCppa3CppHandlerTest {
+public class OasisCppa3CppHandlerTest extends AbstractHandlerTest{
 
 
-    SmpDataServiceApi smpDataApi = Mockito.mock(SmpDataServiceApi.class);
-    SmpIdentifierServiceApi smpIdentifierServiceApi = Mockito.mock(SmpIdentifierServiceApi.class);
-    SmpXmlSignatureApi smpXmlSignatureApi = Mockito.mock(SmpXmlSignatureApi.class);
-    OasisCppa3CppHandler testInstance = new OasisCppa3CppHandler(smpDataApi, smpIdentifierServiceApi, smpXmlSignatureApi);
+    @Override
+    AbstractHandler getTestInstance() {
+        return  new OasisCppa3CppHandler(mockSmpDataApi, mockSmpIdentifierServiceApi, mockSignatureApi);
+    }
 
+    @Test
+    void testGenerateResource() throws ResourceException {
 
-    RequestData requestData =  Mockito.mock(RequestData.class);
-    ResponseData responseData =  Mockito.mock(ResponseData.class);
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("test-identifier", "test-test-test");
 
+        generateResourceAction(resourceIdentifier);
+    }
 
     @Test
-    public void generateAndValidateResource() throws ResourceException {
-        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("test-identifier", "test-test-test");
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
-        Mockito.doReturn(baos).when(responseData).getOutputStream();
-
-        testInstance.generateResource(requestData, responseData, Collections.emptyList());
+    void validateResourceOK() throws ResourceException {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa");
+        // validate
+        validateResourceAction("/examples/signed-cpp.xml", resourceIdentifier);
+    }
 
-        Mockito.doReturn(resourceIdentifier).when(requestData).getResourceIdentifier();
-        Mockito.doReturn(baos).when(responseData).getOutputStream();
-        assertTrue(baos.size()>0);
+    @Test
+    void validateResourceDisallowedDocType() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa");
+        // validate
+        CPPARuntimeException result = assertThrows(CPPARuntimeException.class,
+                () -> validateResourceAction("/examples/signed-cpp-With-DOCTYPE.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("DOCTYPE is disallowed"));
+    }
 
+    @Test
+    void validateResourceInvalidIdentifier() {
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("urn:poland:ncpb:utestt", "ehealth-actorid-qns");
         // validate
-        ByteArrayInputStream bios = new ByteArrayInputStream(baos.toByteArray());
-        Mockito.doReturn(bios).when(requestData).getResourceInputStream();
-        Mockito.doReturn(resourceIdentifier).when(smpIdentifierServiceApi).normalizeResourceIdentifier(Mockito.anyString(),Mockito.anyString());
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/signed-cpp.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Non of participant identifiers match to URL parameter "));
+    }
 
-        testInstance.validateResource(requestData);
+    @Test
+    void validateResourceInvalidScheme() {
+
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa");
+        // validate
+        ResourceException result = assertThrows(ResourceException.class,
+                () -> validateResourceAction("/examples/signed-cpp-invalid.xml", resourceIdentifier));
+        MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("SAXParseException"));
     }
 
     @Test
-    public void validateOasisCPPASchema() throws ResourceException {
-        OasisCppa3CppHandler.validateOasisCPPASchema(OasisCppa3CppHandlerTest.class.getResourceAsStream("/examples/signed-cpp.xml"));
+    void readResourceOK() throws ResourceException {
+        String resourceName = "/examples/signed-cpp.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa");
+
+        readResourceAction(resourceName, resourceIdentifier);
     }
+
     @Test
-    public void validateOasisCPPASchemaInvalid()  {
+    void storeResourceOK() throws ResourceException {
+        String resourceName = "/examples/signed-cpp.xml";
+        ResourceIdentifier resourceIdentifier = new ResourceIdentifier("cppa", "aa-aa-aa");
 
-        ResourceException exception  = assertThrows(ResourceException.class, ()-> OasisCppa3CppHandler.validateOasisCPPASchema(OasisCppa3CppHandlerTest.class.getResourceAsStream("/examples/signed-cpp-invalid.xml")));
-        assertEquals(SAXParseException.class, exception.getCause().getClass());
+        storeResourceAction(resourceName, resourceIdentifier);
     }
 }
diff --git a/smp-resource-extensions/oasis-cppa3-spi/src/test/resources/examples/signed-cpp-With-DOCTYPE.xml b/smp-resource-extensions/oasis-cppa3-spi/src/test/resources/examples/signed-cpp-With-DOCTYPE.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5f2a3e952b7c1717e185fdc788a5d3676be0ab90
--- /dev/null
+++ b/smp-resource-extensions/oasis-cppa3-spi/src/test/resources/examples/signed-cpp-With-DOCTYPE.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE testingxxe [<!ENTITY value "SAMPLE VALUE" >]>
+<CPP xmlns="http://docs.oasis-open.org/ebcore/ns/cppa/v3.0" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://www.w3.org/2002/03/xkms#" xmlns:ns4="http://www.w3.org/2001/04/xmlenc#">
+    <ProfileInfo>
+        <ProfileIdentifier>TestProfileId</ProfileIdentifier>
+        <Description>Test profile</Description>
+    </ProfileInfo>
+    <PartyInfo>
+        <PartyName>cppa</PartyName>
+        <PartyId type="aa-aa-aa">cppa</PartyId>
+        <Certificate id="sing-cert-001">
+            <ns2:KeyInfo Id="sing-keyInfo-001">
+                <ns2:KeyName>cn=sing-keyInfo-001</ns2:KeyName>
+                <ns2:X509Data>
+                    <ns2:X509Certificate>UmVwbGFjZSBzaW5nLWtleUluZm8tMDAxIHRoaXMgd2l0aCByZWFsIGNlcnRpZmljYXRlIQ==</ns2:X509Certificate>
+                </ns2:X509Data>
+            </ns2:KeyInfo>
+        </Certificate>
+        <Certificate id="enc-cert-001">
+            <ns2:KeyInfo Id="enc-keyInfo-001">
+                <ns2:KeyName>cn=enc-keyInfo-001</ns2:KeyName>
+                <ns2:X509Data>
+                    <ns2:X509Certificate>UmVwbGFjZSBlbmMta2V5SW5mby0wMDEgdGhpcyB3aXRoIHJlYWwgY2VydGlmaWNhdGUh</ns2:X509Certificate>
+                </ns2:X509Data>
+            </ns2:KeyInfo>
+        </Certificate>
+        <CertificateDefaults>
+            <SigningCertificateRef certId="enc-cert-001"/>
+            <EncryptionCertificateRef certId="enc-cert-001"/>
+        </CertificateDefaults>
+    </PartyInfo>
+    <ServiceSpecification name="MailService">
+        <PartyRole name="MailSender"/>
+        <CounterPartyRole name="MailReceiver"/>
+        <ServiceBinding>
+            <Service>SubmitMail</Service>
+            <ActionBinding action="SubmitMail" id="SubmitMailId" sendOrReceive="send">
+                <ChannelId>eDeliverAS4ChannelId</ChannelId>
+                <PayloadProfileId>mailProfileId</PayloadProfileId>
+            </ActionBinding>
+        </ServiceBinding>
+    </ServiceSpecification>
+    <ebMS3Channel id="eDeliverAS4ChannelId" transport="eDeliverAS4EndpointId">
+        <ChannelProfile>bdxr-transport-ebms3-as4-v1p0</ChannelProfile>
+    </ebMS3Channel>
+    <HTTPTransport id="eDeliverAS4EndpointId">
+        <Endpoint>http://localhost:8080/domibus/msh</Endpoint>
+        <ChunkedTransferCoding>true</ChunkedTransferCoding>
+    </HTTPTransport>
+    <PayloadProfile id="mailProfileId">
+        <Description>Example mail profile</Description>
+        <PayloadPart maxOccurs="100" minOccurs="1">
+            <PartName>MailPart</PartName>
+            <MIMEContentType>text/plain</MIMEContentType>
+        </PayloadPart>
+    </PayloadProfile>
+    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>GLti4rdP0gxEtQ5cd3sahiLpELAnxOZUAA01TLHAmnA=</DigestValue></Reference></SignedInfo><SignatureValue>XS9mKQaOxDcD98rAdexLl0/UAHp+V0PmXZeAcw85ma2h12LWbQ0kdi0jdC6yci6RCg8RA1AvAoLY&#13;
+        zVdhaIhlg/wbWzi7cGOZHtG0xyF0DXPk7GnIekeqn8urtVswixe27cUUZrvwzn5z56qTtj1uhJ11&#13;
+        eNi0x1p3W0kIgCkTGvyCS1gaAUouXO+L+s5i7Svs207s4V63xnwHJoGH1DRuRAr5p/7sSxUqGfyf&#13;
+        rig8UIZM65mC2dZsWXehzHZylaebdn64MMSy97tgLuwYWPvjNO+uEjhisoT28a5Ut3JskzaqvnMd&#13;
+        bKJMUNPDPUZ742UqawcXMVkJc1bzi8WQ9xTF/Q==</SignatureValue><KeyInfo><X509Data><X509SubjectName>C=BE,O=DIGITAL,OU=eDelivery,CN=SMP_TEST-PRE-SET-EXAMPLE</X509SubjectName><X509Certificate>MIIDQjCCAiqgAwIBAgIBCjANBgkqhkiG9w0BAQsFADBfMRMwEQYDVQQDDApyb290Q05UZXN0MQsw&#13;
+        CQYDVQQLDAJCNDEOMAwGA1UECgwFRElHSVQxETAPBgNVBAcMCEJydXNzZWxzMQswCQYDVQQIDAJC&#13;
+        RTELMAkGA1UEBhMCQkUwHhcNMjMwNDA2MTgzMDM1WhcNMjgwNDA3MTgzMDM1WjBWMSEwHwYDVQQD&#13;
+        DBhTTVBfVEVTVC1QUkUtU0VULUVYQU1QTEUxEjAQBgNVBAsMCWVEZWxpdmVyeTEQMA4GA1UECgwH&#13;
+        RElHSVRBTDELMAkGA1UEBhMCQkUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCSZvO3&#13;
+        izuDjKDrKIuY2lJpLybb5u9DIQ0545YQjpNaZ6c2+KGWnzvT30WFKYKij/7y1+asf/b94Rjtb+hP&#13;
+        Bw4yhazToemv9RxBg66DqBh0JDPfXbPavJMnzlqE9FroUtu6ylbPG6xAj2Zo4G/sBJ8nXfvCKvT3&#13;
+        gz5/fA4Zb3ezsPk8//duQdeun0ZiKXo6xHoIEhjuG28Av4T9Y4QK2OEYPp51wGZMWujRglUBuOcS&#13;
+        fCEWEDFkl7ygxTFyazwvnEbGdMPPQahmoNagwN7vR3JEpbZYPMAykSptWkLEKa7VD889fGE+G/5I&#13;
+        FRMhDgCWKv3S7HZXTN8vQJumJXJ+NjuNAgMBAAGjEjAQMA4GA1UdDwEB/wQEAwIC9DANBgkqhkiG&#13;
+        9w0BAQsFAAOCAQEAhkCt7zSXPPqoOqtganfw7mlOnDFaL2BZMZGtHzfnuLkZ7MJKfuxvAbKP2Hs6&#13;
+        PNFwIJg8MnRUT1gLYjrow3o97uAfSWuOANUDwtyUMQf2jie6AmXNLzn4I4HwGCx1Kka/4gAHxjrT&#13;
+        GePO9GD8edtvX1l+osHUGv/0/cgoY4LZkJoddVRI8nkCw4Fxh2hnDOKKW7/HMm/Og5jCp6GJkTQh&#13;
+        oLowOc7inm0c9J/2WmhMYoLBpADul8xpWhkfB/d5cLxzh6OVGzJCnAEnjOu5JMLNOdutojBZSfFQ&#13;
+        IbocwAz3mTbPuo+tb7rA+GofflA+TiHU3sBTtwftVZIHF6jj6wPL+Q==</X509Certificate></X509Data></KeyInfo></Signature></CPP>
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java
index 15a1c9e8b2e892b21e11632577cb21c561a045b4..47ed80237a0fd729fbe24dceaa2b5f71c55169c2 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10.java
@@ -54,7 +54,7 @@ public class OasisSMPServiceGroup10 implements ResourceDefinitionSpi {
     }
 
     @Override
-    public List<SubresourceDefinitionSpi> getSuresourceSpiList() {
+    public List<SubresourceDefinitionSpi> getSubresourceSpiList() {
         return Collections.singletonList(oasisSMPServiceMetadata10);
     }
 
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java
index 1f52a5f8af2017b6ee47cfe09e37d4b5b7fca745..5a0cf129416f03d53e01dd5ad1b69ec83d733ebf 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20.java
@@ -54,7 +54,7 @@ public class OasisSMPServiceGroup20 implements ResourceDefinitionSpi {
     }
 
     @Override
-    public List<SubresourceDefinitionSpi> getSuresourceSpiList() {
+    public List<SubresourceDefinitionSpi> getSubresourceSpiList() {
         return Collections.singletonList(oasisSMPServiceMetadata20);
     }
 
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java
index 12390650c9b057b6c4a52fc43a948faa01c3d86d..5bde0bc27ab644836ac35bb21c38fd76f8af9713 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20.java
@@ -35,7 +35,7 @@ public class OasisSMPServiceMetadata20 implements SubresourceDefinitionSpi {
 
     @Override
     public String name() {
-        return "Oasis SMP 2.0 ServiceGroup";
+        return "Oasis SMP 2.0 ServiceMetadata";
     }
 
     @Override
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..60b7b7f692486725ed0cc28b01f3f0ef9dc32ae4
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup10Test.java
@@ -0,0 +1,79 @@
+package eu.europa.ec.smp.spi.def;
+
+import eu.europa.ec.smp.spi.handler.OasisSMPServiceGroup10Handler;
+import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi;
+import eu.europa.ec.smp.spi.resource.SubresourceDefinitionSpi;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class OasisSMPServiceGroup10Test {
+
+    OasisSMPServiceGroup10Handler mockOasisSMPServiceGroup10Handler  = Mockito.mock(OasisSMPServiceGroup10Handler.class);;
+    OasisSMPServiceMetadata10 mockOasisSMPServiceMetadata10  = Mockito.mock(OasisSMPServiceMetadata10.class);
+
+    OasisSMPServiceGroup10 testInstance = new OasisSMPServiceGroup10(mockOasisSMPServiceGroup10Handler,mockOasisSMPServiceMetadata10 );
+
+
+    @Test
+    void identifier() {
+        String result = testInstance.identifier();
+
+        assertEquals("edelivery-oasis-smp-1.0-servicegroup", result);
+    }
+
+    @Test
+    void defaultUrlSegment() {
+        String result = testInstance.defaultUrlSegment();
+
+        assertEquals("smp-1", result);
+    }
+
+    @Test
+    void name() {
+        String result = testInstance.name();
+
+        assertEquals("Oasis SMP 1.0 ServiceGroup", result);
+    }
+
+    @Test
+    void description() {
+        String result = testInstance.description();
+
+        assertEquals("Oasis SMP 1.0 Service group resource handler", result);
+    }
+
+    @Test
+    void mimeType() {
+        String result = testInstance.mimeType();
+
+        assertEquals("text/xml", result);
+    }
+
+    @Test
+    void getSubresourceSpiList() {
+        List<SubresourceDefinitionSpi> result = testInstance.getSubresourceSpiList();
+
+        assertEquals(1, result.size());
+        assertEquals(mockOasisSMPServiceMetadata10, result.get(0));
+    }
+
+    @Test
+    void getResourceHandler() {
+        ResourceHandlerSpi result = testInstance.getResourceHandler();
+
+        assertEquals(mockOasisSMPServiceGroup10Handler, result);
+    }
+
+    @Test
+    void testToString() {
+        String result = testInstance.toString();
+
+        MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-1.0-servicegroup"));
+    }
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..95981d128a305f563c399450d11dd8faa19b9448
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceGroup20Test.java
@@ -0,0 +1,79 @@
+package eu.europa.ec.smp.spi.def;
+
+import eu.europa.ec.smp.spi.handler.OasisSMPServiceGroup20Handler;
+import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi;
+import eu.europa.ec.smp.spi.resource.SubresourceDefinitionSpi;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class OasisSMPServiceGroup20Test {
+    OasisSMPServiceGroup20Handler mockOasisSMPServiceGroup20Handler = Mockito.mock(OasisSMPServiceGroup20Handler.class);
+    ;
+    OasisSMPServiceMetadata20 mockOasisSMPServiceMetadata20 = Mockito.mock(OasisSMPServiceMetadata20.class);
+
+    OasisSMPServiceGroup20 testInstance = new OasisSMPServiceGroup20(mockOasisSMPServiceGroup20Handler, mockOasisSMPServiceMetadata20);
+
+
+    @Test
+    void identifier() {
+        String result = testInstance.identifier();
+
+        assertEquals("edelivery-oasis-smp-2.0-servicegroup", result);
+    }
+
+    @Test
+    void defaultUrlSegment() {
+        String result = testInstance.defaultUrlSegment();
+
+        assertEquals("oasis-bdxr-smp-2", result);
+    }
+
+    @Test
+    void name() {
+        String result = testInstance.name();
+
+        assertEquals("Oasis SMP 2.0 ServiceGroup", result);
+    }
+
+    @Test
+    void description() {
+        String result = testInstance.description();
+
+        assertEquals("Oasis SMP 2.0 Service group resource handler", result);
+    }
+
+    @Test
+    void mimeType() {
+        String result = testInstance.mimeType();
+
+        assertEquals("text/xml", result);
+    }
+
+    @Test
+    void getSubresourceSpiList() {
+        List<SubresourceDefinitionSpi> result = testInstance.getSubresourceSpiList();
+
+        assertEquals(1, result.size());
+        assertEquals(mockOasisSMPServiceMetadata20, result.get(0));
+    }
+
+    @Test
+    void getResourceHandler() {
+        ResourceHandlerSpi result = testInstance.getResourceHandler();
+
+        assertEquals(mockOasisSMPServiceGroup20Handler, result);
+    }
+
+    @Test
+    void testToString() {
+        String result = testInstance.toString();
+
+        MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-2.0-servicegroup"));
+    }
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata10Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata10Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..63a85ce038c15173cd8b716a8d79a7f54e0476f3
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata10Test.java
@@ -0,0 +1,65 @@
+package eu.europa.ec.smp.spi.def;
+
+import eu.europa.ec.smp.spi.handler.OasisSMPServiceMetadata10Handler;
+import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class OasisSMPServiceMetadata10Test {
+
+    OasisSMPServiceMetadata10Handler mockOasisSMPServiceMetadata10Handler = Mockito.mock(OasisSMPServiceMetadata10Handler.class);
+    OasisSMPServiceMetadata10 testInstance = new OasisSMPServiceMetadata10(mockOasisSMPServiceMetadata10Handler);
+
+    @Test
+    void identifier() {
+        String result = testInstance.identifier();
+
+        assertEquals("edelivery-oasis-smp-1.0-servicemetadata", result);
+    }
+
+    @Test
+    void urlSegment() {
+        String result = testInstance.urlSegment();
+
+        assertEquals("services", result);
+    }
+
+    @Test
+    void name() {
+        String result = testInstance.name();
+
+        assertEquals("Oasis SMP 1.0 ServiceMetadata", result);
+    }
+
+    @Test
+    void description() {
+        String result = testInstance.description();
+
+        assertEquals("Oasis SMP 1.0 Service Metadata resource handler", result);
+    }
+
+    @Test
+    void mimeType() {
+        String result = testInstance.mimeType();
+
+        assertEquals("text/xml", result);
+    }
+
+    @Test
+    void getResourceHandler() {
+        ResourceHandlerSpi result = testInstance.getResourceHandler();
+
+        assertEquals(mockOasisSMPServiceMetadata10Handler, result);
+    }
+
+    @Test
+    void testToString() {
+        String result = testInstance.toString();
+
+        MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-1.0-servicemetadata"));
+    }
+}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20Test.java b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..948cd60760e3057b193fe7a5a5dfd869c800d16d
--- /dev/null
+++ b/smp-resource-extensions/oasis-smp-spi/src/test/java/eu/europa/ec/smp/spi/def/OasisSMPServiceMetadata20Test.java
@@ -0,0 +1,65 @@
+package eu.europa.ec.smp.spi.def;
+
+import eu.europa.ec.smp.spi.handler.OasisSMPServiceMetadata20Handler;
+import eu.europa.ec.smp.spi.resource.ResourceHandlerSpi;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class OasisSMPServiceMetadata20Test {
+
+    OasisSMPServiceMetadata20Handler mockOasisSMPServiceMetadata20Handler = Mockito.mock(OasisSMPServiceMetadata20Handler.class);
+    OasisSMPServiceMetadata20 testInstance = new OasisSMPServiceMetadata20(mockOasisSMPServiceMetadata20Handler);
+
+    @Test
+    void identifier() {
+        String result = testInstance.identifier();
+
+        assertEquals("edelivery-oasis-smp-2.0-servicemetadata", result);
+    }
+
+    @Test
+    void urlSegment() {
+        String result = testInstance.urlSegment();
+
+        assertEquals("services", result);
+    }
+
+    @Test
+    void name() {
+        String result = testInstance.name();
+
+        assertEquals("Oasis SMP 2.0 ServiceMetadata", result);
+    }
+
+    @Test
+    void description() {
+        String result = testInstance.description();
+
+        assertEquals("Oasis SMP 2.0 Service Metadata resource handler", result);
+    }
+
+    @Test
+    void mimeType() {
+        String result = testInstance.mimeType();
+
+        assertEquals("text/xml", result);
+    }
+
+    @Test
+    void getResourceHandler() {
+        ResourceHandlerSpi result = testInstance.getResourceHandler();
+
+        assertEquals(mockOasisSMPServiceMetadata20Handler, result);
+    }
+
+    @Test
+    void testToString() {
+        String result = testInstance.toString();
+
+        MatcherAssert.assertThat(result, CoreMatchers.containsString("edelivery-oasis-smp-2.0-servicemetadata"));
+    }
+}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java
index 28d5cc1eef5b81cd27d2a09ced881eafd6a171a0..90dbf3ee8811968457013074221767e55f5a237c 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/init/SMPExtensionInitializer.java
@@ -164,7 +164,7 @@ public class SMPExtensionInitializer implements InitializingBean {
         resourceDef.setMimeType(resourceDefinitionSpi.mimeType());
         resourceDef.setUrlSegment(resourceDefinitionSpi.defaultUrlSegment());
         resourceDef.setHandlerImplementationName(getHandlerSPIName(resourceDefinitionSpi.getResourceHandler()));
-        resourceDefinitionSpi.getSuresourceSpiList().forEach(
+        resourceDefinitionSpi.getSubresourceSpiList().forEach(
                 subresourceDefinitionSpi -> validateSubresourceDefinition(subresourceDefinitionSpi, resourceDef)
         );
     }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java
index 551820bc32b1d20635d551009101875e6366c640..e6710ab21399f3903ad651fce1b8934130755747 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/AbstractResourceHandler.java
@@ -62,13 +62,13 @@ public class AbstractResourceHandler {
         ResourceDefinitionSpi resourceDefinitionSpi = getResourceDefinition(resourceDef);
         String subResourceId = subresourceDef.getIdentifier();
         // get subresource implementation by identifier
-        Optional<SubresourceDefinitionSpi> optSubresourceDefinitionSpi = resourceDefinitionSpi.getSuresourceSpiList().stream()
+        Optional<SubresourceDefinitionSpi> optSubresourceDefinitionSpi = resourceDefinitionSpi.getSubresourceSpiList().stream()
                 .filter(def -> StringUtils.equals(def.identifier(), subResourceId)).findFirst();
 
         return optSubresourceDefinitionSpi.orElseThrow(
                 () -> new SMPRuntimeException(ErrorCode.INTERNAL_ERROR, subResourceId,
                         "Can not find subresource definition: [" + subResourceId + "]. Registered subresource IDs ["
-                                + resourceDefinitionSpi.getSuresourceSpiList().stream()
+                                + resourceDefinitionSpi.getSubresourceSpiList().stream()
                                 .map(rd -> rd.identifier())
                                 .collect(Collectors.joining(","))
                                 + "]"));
diff --git a/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java b/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java
index 6b77c48124ce0c708ca8539ae71578d9e8bf77b4..5ea3981080034d0f02705cbdda912a8448ab7dc9 100644
--- a/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java
+++ b/smp-spi/src/main/java/eu/europa/ec/smp/spi/resource/ResourceDefinitionSpi.java
@@ -42,7 +42,7 @@ public interface ResourceDefinitionSpi {
      * @return
      */
 
-    List<SubresourceDefinitionSpi> getSuresourceSpiList();
+    List<SubresourceDefinitionSpi> getSubresourceSpiList();
 
     // resource handle for validating, reading and storing the resource
     ResourceHandlerSpi getResourceHandler();