diff --git a/changelog.txt b/changelog.txt
index 1984155e5af590c1ac970be8970ac7489ce7016b..a90f7aa7d7a4277d4fc9bf01b66c34e4e764eaef 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -2,8 +2,9 @@ eDelivery SMP 5.0
 - added new properties:
     smp.truststore.type: Truststore type as JKS/PKCS12
     smp.keystore.type: Keystore type as JKS/PKCS12
-    document.restriction.allowed.certificate.types: Allowed key algorithms for certificates to be used in service metadata.Empty value means no restrictions, for other values see the java KeyFactory Algorithms for example: RSA|EC|Ed25519|Ed448;
-    smp.certificate.validation.allowed.certificate.type: Allowed user certificate JCE types. Empty value means no restrictions, for other values see the java KeyFactory Algorithms for examples: RSA|EC|Ed25519|Ed448;
+    document.restriction.allowed.certificate.types: Allowed key algorithms for certificates to be used in service metadata.Empty value means no restrictions, for other values see the java KeyFactory Algorithms for example: RSA|EC|Ed25519|Ed448.
+    smp.certificate.validation.allowed.certificate.type: Allowed user certificate JCE types. Empty value means no restrictions, for other values see the java KeyFactory Algorithms for example: RSA|EC|Ed25519|Ed448.
+    identifiersBehaviour.splitPattern: Regular expression with groups scheme and identifier for splitting the URN identifiers to scheme and identifier part.
 
 eDelivery SMP 4.2
 - added new properties:
diff --git a/smp-api/pom.xml b/smp-api/pom.xml
index cd69fc7973c4d5f97b26c699753faf3378ff74cd..16138c2af4230ea06dc507bc76deb8ed6a45d49b 100644
--- a/smp-api/pom.xml
+++ b/smp-api/pom.xml
@@ -43,11 +43,6 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>pl.pragmatists</groupId>
-            <artifactId>JUnitParams</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/Identifiers.java b/smp-api/src/main/java/eu/europa/ec/smp/api/Identifiers.java
deleted file mode 100644
index fac0a443755e72352092481a6fee83e84f419dae..0000000000000000000000000000000000000000
--- a/smp-api/src/main/java/eu/europa/ec/smp/api/Identifiers.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.smp.api;
-
-import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
-import org.apache.commons.lang3.StringUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ProcessIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.util.UriUtils;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-/**
- * Factory and utility methods for API classes generated from OASIS XSD.
- * <p>
- * Created by gutowpa on 12/01/2017.
- */
-public class Identifiers {
-    private static final Logger LOG = LoggerFactory.getLogger(Identifiers.class);
-
-    public static final String EBCORE_IDENTIFIER_PREFIX = "urn:oasis:names:tc:ebcore:partyid-type:";
-    public static final String EBCORE_IDENTIFIER_FORMAT = "%s:%s";
-    public static final String EBCORE_IDENTIFIER_ISO6523_SCHEME = "iso6523";
-    public static final String DOUBLE_COLON_IDENTIFIER_FORMAT = "%s::%s";
-
-    private static final String EMPTY_IDENTIFIER = "Null/Empty";
-
-
-    public static ParticipantIdentifierType asParticipantId(String participantIdentifier, boolean schemeMandatory) {
-        LOG.debug("Parse participant identifier [{}] with scheme mandatory [{}]", participantIdentifier, schemeMandatory);
-        String[] res = splitParticipantIdentifier(participantIdentifier, schemeMandatory);
-        return new ParticipantIdentifierType(res[1], res[0]);
-    }
-
-    public static DocumentIdentifier asDocumentId(String doubleColonDelimitedId) {
-        LOG.debug("Parse document identifier [{}]", doubleColonDelimitedId);
-        String[] res = splitDoubleColonIdentifier(doubleColonDelimitedId, false);
-        return new DocumentIdentifier(res[1], res[0]);
-    }
-
-    public static ProcessIdentifier asProcessId(String doubleColonDelimitedId) {
-        LOG.debug("Parse process identifier [{}]", doubleColonDelimitedId);
-        String[] res = splitDoubleColonIdentifier(doubleColonDelimitedId, false);
-        return new ProcessIdentifier(res[1], res[0]);
-    }
-
-    public static String asString(ParticipantIdentifierType participantId) {
-        if (StringUtils.isBlank(participantId.getScheme())) {
-            // if scheme is empty just return value (see section 3.4.1 of [SMP-v1.0]) MUST include neither an {identifier scheme} nor the :: separator )
-            return participantId.getValue();
-        }
-        String format =
-                StringUtils.startsWithIgnoreCase(participantId.getScheme(), EBCORE_IDENTIFIER_PREFIX) ?
-                        EBCORE_IDENTIFIER_FORMAT : DOUBLE_COLON_IDENTIFIER_FORMAT;
-
-        return String.format(format, participantId.getScheme(), participantId.getValue());
-    }
-
-    public static String asString(DocumentIdentifier docId) {
-        return String.format(DOUBLE_COLON_IDENTIFIER_FORMAT, docId.getScheme() != null ? docId.getScheme() : "", docId.getValue());
-    }
-
-    public static String asUrlEncodedString(ParticipantIdentifierType participantId) {
-        return urlEncode(asString(participantId));
-    }
-
-    public static String asUrlEncodedString(DocumentIdentifier docId) {
-        return urlEncode(asString(docId));
-    }
-
-    private static String urlEncode(String s) {
-        return UriUtils.encode(s, UTF_8.name());
-    }
-
-    private static String[] splitParticipantIdentifier(String participantIdentifier, boolean schemeMandatory) {
-        LOG.debug("Split participant identifier [{}] with mandatory scheme [{}]", participantIdentifier, schemeMandatory);
-        String[] idResult;
-        if (StringUtils.isBlank(participantIdentifier)) {
-            throw new MalformedIdentifierException(EMPTY_IDENTIFIER, null);
-        }
-        String identifier = participantIdentifier.trim();
-        if (identifier.startsWith(EBCORE_IDENTIFIER_PREFIX)
-                || identifier.startsWith("::" + EBCORE_IDENTIFIER_PREFIX)) {
-            idResult = splitEbCoreIdentifier(identifier);
-        } else {
-            idResult = splitDoubleColonIdentifier(identifier, schemeMandatory);
-        }
-
-        return idResult;
-
-    }
-
-    /**
-     * Method splits identifier at first occurrence of double colon :: and returns array size of 2. The first value is
-     * schema and the second is identifier. If identifier is blank or with missing :: MalformedIdentifierException is thrown
-     *
-     * @param doubleColonDelimitedId
-     * @return array with two elements. First is schema and second is id
-     */
-
-    private static String[] splitDoubleColonIdentifier(String doubleColonDelimitedId, boolean schemeMandatory) {
-        LOG.debug("Split identifier [{}] with scheme mandatory [{}]", doubleColonDelimitedId, schemeMandatory);
-        if (StringUtils.isBlank(doubleColonDelimitedId)) {
-            throw new MalformedIdentifierException(EMPTY_IDENTIFIER, null);
-        }
-
-        String[] idResult = new String[2];
-
-        int delimiterIndex = doubleColonDelimitedId.indexOf("::");
-        if (schemeMandatory && delimiterIndex <= 0) {
-            LOG.debug("Missing mandatory scheme part for the identifier [{}]!", doubleColonDelimitedId);
-            throw new MalformedIdentifierException(doubleColonDelimitedId, null);
-        }
-        idResult[0] = delimiterIndex <= 0 ? null : doubleColonDelimitedId.substring(0, delimiterIndex);
-        idResult[1] = doubleColonDelimitedId.substring(delimiterIndex + (delimiterIndex < 0 ? 1 : 2));
-
-        if (StringUtils.isBlank(idResult[1])) {
-            LOG.debug("Missing id part for the identifier [{}]!", doubleColonDelimitedId);
-            throw new MalformedIdentifierException(doubleColonDelimitedId, null);
-        }
-        return idResult;
-    }
-
-    public static String[] splitEbCoreIdentifier(final String partyId) {
-
-        String partyIdPrivate = partyId.trim();
-        if (partyIdPrivate.startsWith("::")) {
-            partyIdPrivate = StringUtils.removeStart(partyIdPrivate, "::");
-        }
-
-        if (!partyIdPrivate.startsWith(EBCORE_IDENTIFIER_PREFIX)) {
-            throw new MalformedIdentifierException(partyId, null);
-        }
-        boolean isIso6523 = partyIdPrivate.startsWith(EBCORE_IDENTIFIER_PREFIX + EBCORE_IDENTIFIER_ISO6523_SCHEME + ":");
-
-        int isSchemeDelimiter = partyIdPrivate.indexOf(':', EBCORE_IDENTIFIER_PREFIX.length());
-        if (isSchemeDelimiter < 0) {
-            // invalid scheme
-            throw new IllegalArgumentException(String.format("Invalid ebCore id [%s] ebcoreId must have prefix 'urn:oasis:names:tc:ebcore:partyid-type', " +
-                    "and parts <catalog-identifier>, <scheme-in-catalog>, <scheme-specific-identifier> separated by colon.  " +
-                    "Example: urn:oasis:names:tc:ebcore:partyid-type:<catalog-identifier>:(<scheme-in-catalog>)?:<scheme-specific-identifier>.", partyIdPrivate));
-        }
-        int isPartDelimiter = partyIdPrivate.indexOf(':', isSchemeDelimiter + 1);
-
-        String[] result = new String[2];
-        if (isPartDelimiter < 0 && isIso6523) { // for iso scheme-in-catalog is mandatory
-            // invalid scheme
-            throw new IllegalArgumentException(String.format("Invalid ebCore id [%s] ebcoreId must have prefix 'urn:oasis:names:tc:ebcore:partyid-type', " +
-                    "and parts <catalog-identifier>, <scheme-in-catalog>, <scheme-specific-identifier> separated by colon.  " +
-                    "Example: urn:oasis:names:tc:ebcore:partyid-type:<catalog-identifier>:(<scheme-in-catalog>)?:<scheme-specific-identifier>.", partyIdPrivate));
-        } else if (isPartDelimiter < 0) {
-            result[0] = partyIdPrivate.substring(0, isSchemeDelimiter).trim();
-            result[1] = partyIdPrivate.substring(isSchemeDelimiter + 1).trim();
-        } else {
-            result[0] = partyIdPrivate.substring(0, isPartDelimiter).trim();
-            result[1] = partyIdPrivate.substring(isPartDelimiter + 1).trim();
-        }
-
-        //check if double colon was used for identifier separator in ebecoreid
-        if (result[1].startsWith(":")) {
-            result[1] = StringUtils.removeStart(result[1], ":");
-        }
-        //check if double colon was used for identifier separator in ebecoreid
-        if (result[0].endsWith(":")) {
-            result[0] = StringUtils.removeEnd(result[0], ":");
-        }
-        return result;
-    }
-}
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java b/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java
index bd808706b591bc42f4fdd4d8afc6eedc79a73b69..c5f159e00ed13e1d713b525f65b6818d246c9c61 100644
--- a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java
@@ -28,4 +28,8 @@ public class MalformedIdentifierException extends IllegalArgumentException {
     public MalformedIdentifierException(String malformedId, Exception cause){
         super(buildMessage(malformedId), cause);
     }
+
+    public MalformedIdentifierException(String message){
+        super(message);
+    }
 }
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/AbstractIdentifierFormatter.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/AbstractIdentifierFormatter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a68ec98d831a458cb0c69417a75bbb0dd5d7da83
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/AbstractIdentifierFormatter.java
@@ -0,0 +1,250 @@
+package eu.europa.ec.smp.api.identifiers;
+
+
+import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
+import eu.europa.ec.smp.api.identifiers.types.FormatterType;
+import eu.europa.ec.smp.api.identifiers.types.OasisSMPFormatterType;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.util.UriUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.commons.lang3.StringUtils.*;
+
+/**
+ * Formatter for printing and parsing identifier objects.
+ * <p>
+ * This class provides parsing and formatting method for identifier objects as:
+ * ParticipantIdentifierType, DocumentIdentifier, and ProcessIdentifier.
+ *
+ * <b>Parsing the identifier</b>
+ * Parse method tries to detect the scheme and identifier part of the identifier string using the
+ * regular expression and separator sequence.
+ * The regular expression allows setting complex parsing templates, while the split separator is much raster.
+ *
+ * <ul>
+ * <li>Using <b>Regular expressing:</b>Regular expression uses named groups &lt;scheme> and &lt;identifier> to identify the scheme and identifier.
+ * if the regular expression is null or does not match, the parsing fallback to "split" with separator."
+ * </li>
+ * <li>Using <b>separator:</b>Separator splits regular expression on the first occurrence of the 'separator' sequence.</li>
+ * </ul>
+ * If no parsing is successful, then the scheme is set to null, and the identifier part has the input value.
+ * In case the schemeMandatory is set to true and the scheme is null, the MalformedIdentifierException is thrown.
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public abstract class AbstractIdentifierFormatter<T> {
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractIdentifierFormatter.class);
+
+    protected static final FormatterType DEFAULT_FORMATTER = new OasisSMPFormatterType();
+
+    protected boolean schemeMandatory = false;
+    protected Pattern schemeValidationPattern;
+    protected List<String> caseSensitiveSchemas;
+    protected List<FormatterType> formatterTypes = new ArrayList<>();
+
+
+    /**
+     * Formats the object according to formatTemplate. If template is 'blank' the scheme and identifier are concatenated
+     * with separator
+     *
+     * @param value Identifier object to format it to string
+     * @return String representation of the identifier
+     */
+    public String format(T value) {
+        return format(getSchemeFromObject(value), getIdentifierFromObject(value));
+    }
+
+    /**
+     * Formats the object according to formatTemplate. If template is 'blank' the scheme and identifier are concatenated
+     * with separator
+     *
+     * @param scheme     scheme part to format it to string
+     * @param identifier Identifier part to format it to string
+     * @return String representation of the identifier
+     */
+    public String format(String scheme, String identifier) {
+        // find the formatter
+        Optional<FormatterType> optionalFormatterType = formatterTypes.stream().filter(formatterType ->
+                formatterType.isTypeByScheme(scheme)).findFirst();
+
+        if (optionalFormatterType.isPresent()) {
+            return optionalFormatterType.get().format(scheme, identifier);
+        }
+        return DEFAULT_FORMATTER.format(scheme, identifier);
+    }
+
+    /**
+     * Formats the object according to formatTemplate. If template is 'blank' the scheme and identifier are concatenated
+     * with separator
+     *
+     * @param scheme     scheme part to format it to string
+     * @param identifier Identifier part to format it to string
+     * @param noDelimiterOnBlankScheme if true not delimiter is added when scheme is blankl
+     * @return String representation of the identifier
+     */
+    public String format(String scheme, String identifier, boolean noDelimiterOnBlankScheme) {
+        // find the formatter
+        Optional<FormatterType> optionalFormatterType = formatterTypes.stream().filter(formatterType ->
+                formatterType.isTypeByScheme(scheme)).findFirst();
+
+        if (optionalFormatterType.isPresent()) {
+            return optionalFormatterType.get().format(scheme, identifier, noDelimiterOnBlankScheme);
+        }
+        return DEFAULT_FORMATTER.format(scheme, identifier, noDelimiterOnBlankScheme);
+    }
+
+    /**
+     * Parse identifier.
+     * <p>
+     * Method parse the identifier.
+     *
+     * @param value
+     * @return
+     */
+    public T parse(final String value) {
+        if (isBlank(value)) {
+            throw new MalformedIdentifierException("Can not parse empty identifier value!");
+        }
+
+        String pValue = trim(value);
+
+        // find the formatter
+        Optional<FormatterType> optionalFormatterType = formatterTypes.stream().filter(formatterType ->
+                formatterType.isType(pValue)).findFirst();
+
+        String[] parseResult;
+        if (optionalFormatterType.isPresent()) {
+            parseResult = optionalFormatterType.get().parse(pValue);
+        } else {
+            parseResult = DEFAULT_FORMATTER.parse(pValue);
+        }
+        boolean isSchemeBlank = isBlank(parseResult[0]);
+        if (isSchemeMandatory() && isSchemeBlank) {
+            throw new MalformedIdentifierException("Invalid Identifier: [" + pValue + "]. Can not detect schema!");
+        }
+
+        if (!isSchemeBlank && schemeValidationPattern != null) {
+            Matcher schemeMatcher = schemeValidationPattern.matcher(parseResult[0]);
+            if (!schemeMatcher.matches()) {
+                throw new MalformedIdentifierException("Invalid Identifier: [" + pValue + "]. Scheme does not match pattern: [" + schemeValidationPattern.pattern() + "]!");
+            }
+        }
+
+        return createObject(parseResult[0], parseResult[1]);
+    }
+
+    /**
+     * Method parses the object then it validates if scheme is case sensitive and lower case the values accordingly.
+     *
+     * @param value
+     * @return
+     */
+    public T normalizeIdentifier(final String value) {
+        T result = parse(value);
+        String schema = getSchemeFromObject(result);
+
+        if (isCaseInsensitiveSchema(schema)) {
+            String identifier = getIdentifierFromObject(result);
+            updateObject(result, lowerCase(schema), lowerCase(identifier));
+        }
+
+        return result;
+    }
+
+    /**
+     * Method normalize the identifier using the format/parse and sets schema and identifier to lower case if
+     * identifier is case insensitive.
+     *
+     * <ul>
+     * <li><b>eDelivery example:</b> scheme [null], party id: [urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789]</li>
+     * <li><b>oasis SMP example:</b> scheme [urn:oasis:names:tc:ebcore:partyid-type:iso6523], party id: [0088:123456789]</li>
+     * <li><b>ebCore party ID example:</b>scheme [urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088], party id: [123456789]/li>
+     * </ul>
+     * <p>
+     * Must always result in the same normalized object:
+     * scheme [urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088]: party id: [123456789]
+     *
+     * @param value
+     * @return
+     */
+    public T normalize(final T value) {
+        return normalize(getSchemeFromObject(value),getIdentifierFromObject(value));
+    }
+
+    public T normalize(String scheme, String identifier) {
+        return normalizeIdentifier(format(scheme, identifier));
+    }
+
+    /**
+     * Return true if identifier schema is not defined in list of case sensitive schemas, else return false.
+     *
+     * @param schema
+     * @return
+     */
+    public boolean isCaseInsensitiveSchema(String schema) {
+        if (StringUtils.isEmpty(schema)) {
+            LOG.debug("Empty/null schemas are case insensitive.");
+            return true;
+        }
+        if (caseSensitiveSchemas == null || caseSensitiveSchemas.isEmpty()) {
+            LOG.debug("Case sensitive schemas are not configure. return default value [false] for schema's [{}] case sensitive validation!", schema);
+            return true;
+        }
+        return caseSensitiveSchemas.stream().noneMatch(schema::equalsIgnoreCase);
+    }
+
+    public String urlEncodedFormat(T value) {
+        return urlEncode(format(value));
+    }
+
+    public String urlEncode(String s) {
+        return UriUtils.encode(s, UTF_8.name());
+    }
+
+    protected abstract String getSchemeFromObject(T object);
+
+    protected abstract String getIdentifierFromObject(T object);
+
+    protected abstract T createObject(String scheme, String identifier);
+
+    protected abstract void updateObject(T object, String scheme, String identifier);
+
+
+    public List<String> getCaseSensitiveSchemas() {
+        return caseSensitiveSchemas;
+    }
+
+    public AbstractIdentifierFormatter<T> caseSensitiveSchemas(List<String> caseSensitiveSchemas) {
+        this.caseSensitiveSchemas = caseSensitiveSchemas;
+        return this;
+    }
+
+    public void setCaseSensitiveSchemas(List<String> caseSensitiveSchemas) {
+        this.caseSensitiveSchemas = caseSensitiveSchemas;
+    }
+
+    public boolean isSchemeMandatory() {
+        return schemeMandatory;
+    }
+
+    public void setSchemeMandatory(boolean schemeMandatory) {
+        this.schemeMandatory = schemeMandatory;
+    }
+
+    public Pattern getSchemeValidationPattern() {
+        return schemeValidationPattern;
+    }
+
+    public void setSchemeValidationPattern(Pattern schemeValidationPattern) {
+        this.schemeValidationPattern = schemeValidationPattern;
+    }
+}
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/DocumentIdentifierFormatter.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/DocumentIdentifierFormatter.java
new file mode 100644
index 0000000000000000000000000000000000000000..0fcacfe3e3fa4c20fcbf694a8067d2bfdf3e6412
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/DocumentIdentifierFormatter.java
@@ -0,0 +1,38 @@
+package eu.europa.ec.smp.api.identifiers;
+
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
+
+/**
+ * Formatter for the DocumentIdentifier with default null split regular expression and
+ * '::' as split separator. For details see the {@link AbstractIdentifierFormatter}
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public class DocumentIdentifierFormatter extends AbstractIdentifierFormatter<DocumentIdentifier> {
+
+
+    @Override
+    protected String getSchemeFromObject(DocumentIdentifier object) {
+        return object != null ? object.getScheme() : null;
+    }
+
+    @Override
+    protected String getIdentifierFromObject(DocumentIdentifier object) {
+        return object != null ? object.getValue() : null;
+    }
+
+    @Override
+    protected DocumentIdentifier createObject(String scheme, String identifier) {
+        DocumentIdentifier identifierObject = new DocumentIdentifier();
+        identifierObject.setScheme(scheme);
+        identifierObject.setValue(identifier);
+        return identifierObject;
+    }
+
+    @Override
+    protected void updateObject(DocumentIdentifier identifierObject, String scheme, String identifier) {
+        identifierObject.setScheme(scheme);
+        identifierObject.setValue(identifier);
+    }
+}
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatter.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatter.java
new file mode 100644
index 0000000000000000000000000000000000000000..70290592f3c8ec0286f96a77627878d191cca2e6
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatter.java
@@ -0,0 +1,45 @@
+package eu.europa.ec.smp.api.identifiers;
+
+import eu.europa.ec.smp.api.identifiers.types.EBCorePartyIdFormatterType;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
+
+import java.util.regex.Pattern;
+
+/**
+ * Formatter for the ParticipantIdentifier with default "ebCoreParty" split regular expression and
+ * '::' as split separator. For details see the {@link AbstractIdentifierFormatter}
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public class ParticipantIdentifierFormatter extends AbstractIdentifierFormatter<ParticipantIdentifierType> {
+
+    public ParticipantIdentifierFormatter() {
+
+        this.formatterTypes.add(new EBCorePartyIdFormatterType());
+    }
+
+    @Override
+    protected String getSchemeFromObject(ParticipantIdentifierType object) {
+        return object != null ? object.getScheme() : null;
+    }
+
+    @Override
+    protected String getIdentifierFromObject(ParticipantIdentifierType object) {
+        return object != null ? object.getValue() : null;
+    }
+
+    @Override
+    protected ParticipantIdentifierType createObject(String scheme, String identifier) {
+        ParticipantIdentifierType identifierObject = new ParticipantIdentifierType();
+        identifierObject.setScheme(scheme);
+        identifierObject.setValue(identifier);
+        return identifierObject;
+    }
+
+    @Override
+    protected void updateObject(ParticipantIdentifierType identifierObject, String scheme, String identifier){
+        identifierObject.setScheme(scheme);
+        identifierObject.setValue(identifier);
+    }
+}
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/ProcessIdentifierFormatter.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/ProcessIdentifierFormatter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a97ef0d8eef13877c089192dedbd2e667cf9c408
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/ProcessIdentifierFormatter.java
@@ -0,0 +1,38 @@
+package eu.europa.ec.smp.api.identifiers;
+
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ProcessIdentifier;
+
+/**
+ * Formatter for the ProcessIdentifier with default null split regular expression and
+ * '::' as split separator. For details see the {@link AbstractIdentifierFormatter}
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public class ProcessIdentifierFormatter extends AbstractIdentifierFormatter<ProcessIdentifier> {
+
+
+    @Override
+    protected String getSchemeFromObject(ProcessIdentifier object) {
+        return object != null ? object.getScheme() : null;
+    }
+
+    @Override
+    protected String getIdentifierFromObject(ProcessIdentifier object) {
+        return object != null ? object.getValue() : null;
+    }
+
+    @Override
+    protected ProcessIdentifier createObject(String scheme, String identifier) {
+        ProcessIdentifier identifierObject = new ProcessIdentifier();
+        identifierObject.setScheme(scheme);
+        identifierObject.setValue(identifier);
+        return identifierObject;
+    }
+
+    @Override
+    protected void updateObject(ProcessIdentifier identifierObject, String scheme, String identifier) {
+        identifierObject.setScheme(scheme);
+        identifierObject.setValue(identifier);
+    }
+}
\ No newline at end of file
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/EBCorePartyIdFormatterType.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/EBCorePartyIdFormatterType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8431c030738a4dd6a07c3806b9240103fe7f388
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/EBCorePartyIdFormatterType.java
@@ -0,0 +1,113 @@
+package eu.europa.ec.smp.api.identifiers.types;
+
+import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+
+import static org.apache.commons.lang3.StringUtils.*;
+
+
+/**
+ * EBCorePartyID implementation Formatter type.  The formatter supports
+ *
+ * <ul>
+ * <li><b>Basic:</b>urn:oasis:names:tc:ebcore:partyid-type:<catalog-identifier>:(<scheme-in-catalog>)?:<scheme-specific-identifier></li>
+ * <li><b>"Empty "SMP scheme" started with double colon (eDelivery URL variant):</b> ::urn:oasis:names:tc:ebcore:partyid-type:<catalog-identifier>:(<scheme-in-catalog>)?:<scheme-specific-identifier></li>
+ * <li><b>Double colon separator (Oasis SMP variant):</b> urn:oasis:names:tc:ebcore:partyid-type:<catalog-identifier>::(<scheme-in-catalog>)?:<scheme-specific-identifier></li>
+ * </ul>
+ * <p>
+ *  Currently allowed <catalog-identifier> are  iso6523 and unregistered
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public class EBCorePartyIdFormatterType implements FormatterType {
+    private static final Logger LOG = LoggerFactory.getLogger(EBCorePartyIdFormatterType.class);
+
+    public static final String EBCORE_IDENTIFIER_PREFIX = "urn:oasis:names:tc:ebcore:partyid-type:";
+    public static final String EBCORE_IDENTIFIER_ISO6523_SCHEME = "iso6523";
+    public static final String EBCORE_IDENTIFIER_UNREGISTERED_SCHEME = "unregistered";
+    private static final String EBCORE_SEPARATOR = ":";
+    private static final String OASIS_SMP_SEPARATOR = "::";
+
+
+    @Override
+    public boolean isTypeByScheme(final String scheme) {
+        String partyIdPrivate = StringUtils.trim(scheme);
+        if (StringUtils.isBlank(scheme)) {
+            LOG.debug("EBCorePartyIdFormatterType does not support identifiers with Null/Blank scheme");
+            return false;
+        }
+        partyIdPrivate = removeStart(partyIdPrivate, OASIS_SMP_SEPARATOR);
+
+        return startsWithIgnoreCase(partyIdPrivate, EBCORE_IDENTIFIER_PREFIX);
+    }
+
+    @Override
+    public boolean isType(final String value) {
+        // the value should start with valid scheme
+        return isTypeByScheme(value);
+    }
+
+    @Override
+    public String format(String scheme, String identifier, boolean noDelimiterOnEmptyScheme) {
+        return (isBlank(scheme) && noDelimiterOnEmptyScheme ? "" : trimToEmpty(scheme) + EBCORE_SEPARATOR) + trimToEmpty(identifier);
+    }
+
+    @Override
+    public String format(final String scheme, final String identifier) {
+        return format(scheme, identifier, true);
+    }
+
+    @Override
+    public String[] parse(final String value) {
+
+        String partyIdPrivate = trimToEmpty(value);
+        // ebcore party can start with OASIS_SMP_SEPARATOR - remove it of exists.
+        partyIdPrivate = removeStart(partyIdPrivate, OASIS_SMP_SEPARATOR);
+
+        // replace first OASIS_SMP_SEPARATOR  :: with  OASIS_SMP_SEPARATOR
+        partyIdPrivate = StringUtils.replace(partyIdPrivate, OASIS_SMP_SEPARATOR, EBCORE_SEPARATOR, 1);
+
+        if (!StringUtils.startsWithIgnoreCase(partyIdPrivate, EBCORE_IDENTIFIER_PREFIX)) {
+            throw new MalformedIdentifierException(value, null);
+        }
+        boolean isIso6523 = StringUtils.startsWithIgnoreCase(partyIdPrivate, EBCORE_IDENTIFIER_PREFIX + EBCORE_IDENTIFIER_ISO6523_SCHEME +EBCORE_SEPARATOR);
+        boolean isUnregistered = StringUtils.startsWithIgnoreCase(partyIdPrivate, EBCORE_IDENTIFIER_PREFIX + EBCORE_IDENTIFIER_UNREGISTERED_SCHEME + EBCORE_SEPARATOR);
+        if (!isIso6523 && !isUnregistered) {
+            throw new MalformedIdentifierException("Invalid ebCore id [" + partyIdPrivate + "] ebcoreId <scheme-in-catalog> must be  must one from the list " + Arrays.asList(EBCORE_IDENTIFIER_ISO6523_SCHEME, EBCORE_IDENTIFIER_UNREGISTERED_SCHEME) + "!");
+        }
+
+        int isSchemeDelimiter = partyIdPrivate.indexOf(EBCORE_SEPARATOR, EBCORE_IDENTIFIER_PREFIX.length());
+        if (isSchemeDelimiter < 0) {
+            // invalid scheme
+            throw new MalformedIdentifierException(String.format("Invalid ebCore id [%s] ebcoreId must have prefix 'urn:oasis:names:tc:ebcore:partyid-type', " +
+                    "and parts <catalog-identifier>, <scheme-in-catalog>, <scheme-specific-identifier> separated by colon.  " +
+                    "Example: urn:oasis:names:tc:ebcore:partyid-type:<catalog-identifier>:(<scheme-in-catalog>)?:<scheme-specific-identifier>.", partyIdPrivate));
+        }
+        int isPartDelimiter = partyIdPrivate.indexOf(':', isSchemeDelimiter + 1);
+
+        String[] result = new String[2];
+        if (isPartDelimiter < 0 && isIso6523) { // for iso scheme-in-catalog is mandatory
+            // invalid scheme
+            throw new MalformedIdentifierException(String.format("Invalid ebCore id [%s] ebcoreId must have prefix 'urn:oasis:names:tc:ebcore:partyid-type', " +
+                    "and parts <catalog-identifier>, <scheme-in-catalog>, <scheme-specific-identifier> separated by colon.  " +
+                    "Example: urn:oasis:names:tc:ebcore:partyid-type:<catalog-identifier>:(<scheme-in-catalog>)?:<scheme-specific-identifier>.", partyIdPrivate));
+        } else if (isPartDelimiter < 0) {
+            result[0] = partyIdPrivate.substring(0, isSchemeDelimiter).trim();
+            result[1] = partyIdPrivate.substring(isSchemeDelimiter + 1).trim();
+        } else {
+            result[0] = partyIdPrivate.substring(0, isPartDelimiter).trim();
+            result[1] = partyIdPrivate.substring(isPartDelimiter + 1).trim();
+        }
+
+        // Final cleaning: remove separator on end of scheme part and start of id part
+        result[1] = removeStart(result[1], EBCORE_SEPARATOR);
+        result[0] = StringUtils.removeEnd(result[0], EBCORE_SEPARATOR);
+
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/FormatterType.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/FormatterType.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc8b1648472268f111dc1e9838d88016515c41ca
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/FormatterType.java
@@ -0,0 +1,31 @@
+package eu.europa.ec.smp.api.identifiers.types;
+
+
+/**
+ * Formatter type interface for formatting and parsing party identifiers
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public interface FormatterType {
+
+    /**
+     * Method  returns true if scheme is supported by the formatter for parsing and formatting, else it return false:.
+     * @param scheme identifier scheme part
+     * @return return true if identifier is supported by the formatter else return false
+     */
+    boolean isTypeByScheme(final String scheme);
+
+    /**
+     * Method  returns true if identifier is supported by the formatter for parsing and formatting, else it return false:.
+     * @param value identifier value
+     * @return return true if identifier is supported by the formatter else return false
+     */
+    boolean isType(final String value);
+
+    String format(final String scheme, final String identifier);
+    String format(final String scheme, final String identifier, boolean noDelimiterOnEmptyScheme);
+
+    // always returns array size 2 with first element as scheme and second as identifier part.
+    String[] parse(final String value);
+}
\ No newline at end of file
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/OasisSMPFormatterType.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/OasisSMPFormatterType.java
new file mode 100644
index 0000000000000000000000000000000000000000..50e9c94cf23931e7a0dd89f5d7901c0f60521e5a
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/OasisSMPFormatterType.java
@@ -0,0 +1,51 @@
+package eu.europa.ec.smp.api.identifiers.types;
+
+import org.apache.commons.lang3.StringUtils;
+
+import static org.apache.commons.lang3.StringUtils.*;
+
+/**
+ * Simple OSASIS SMP party identifier formatter.
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public class OasisSMPFormatterType implements FormatterType {
+    private static final String SEPARATOR = "::";
+
+    @Override
+    public boolean isTypeByScheme(final String scheme) {
+        // by default format all identifier as defined in OasisSMP
+        return true;
+    }
+
+    @Override
+    public boolean isType(final String value){
+        // the value should start with valid scheme
+        return true;
+    }
+
+    @Override
+    public String format(String scheme, String identifier, boolean noDelimiterOnEmptyScheme) {
+        return (isBlank(scheme) && noDelimiterOnEmptyScheme ? "" : trimToEmpty(scheme) + SEPARATOR) + trimToEmpty(identifier);
+
+    }
+
+    @Override
+    public String format(final String scheme, final String identifier) {
+        // for OASIS SMP 1.0 the separator :: is mandatory also when scheme is null!
+        return format(scheme, identifier, false);
+    }
+
+    @Override
+    public String[] parse(final String value) {
+        String pValue = trim(value);
+        String[] splitValue = StringUtils.splitByWholeSeparatorPreserveAllTokens(pValue, SEPARATOR, 2);
+        // if only one value is returned set it to identifier
+        // else the first element is scheme and second identifier
+        String scheme = trim(splitValue.length == 1 ? null : splitValue[0]);
+        String identifier = trim(splitValue[splitValue.length == 1 ? 0 : 1]);
+        return new String[]{trimToNull(scheme), trimToNull(identifier)};
+
+    }
+}
\ No newline at end of file
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/TemplateFormatterType.java b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/TemplateFormatterType.java
new file mode 100644
index 0000000000000000000000000000000000000000..812d3ebd4285c90fd71a19b5bd5d256174deba1e
--- /dev/null
+++ b/smp-api/src/main/java/eu/europa/ec/smp/api/identifiers/types/TemplateFormatterType.java
@@ -0,0 +1,96 @@
+package eu.europa.ec.smp.api.identifiers.types;
+
+import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.apache.commons.lang3.StringUtils.trim;
+
+/**
+ * Configurable formatter for parsing and serializing identifiers.
+ * <p>
+ * Example for formatTemplate  "${" + SPLIT_GROUP_SCHEME_NAME + "}:${" + SPLIT_GROUP_SCHEME_NAME + "}";
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+public class TemplateFormatterType implements FormatterType {
+    private static final Logger LOG = LoggerFactory.getLogger(TemplateFormatterType.class);
+    public static final String SPLIT_GROUP_SCHEME_NAME = "scheme";
+    public static final String SPLIT_GROUP_IDENTIFIER_NAME = "identifier";
+    protected static final String[] REPLACE_TAGS = new String[]{"${" + SPLIT_GROUP_SCHEME_NAME + "}", "${" + SPLIT_GROUP_IDENTIFIER_NAME + "}"};
+
+    private final Pattern splitRegularExpression;
+    private final Pattern schemaPattern;
+    private final String formatTemplate;
+
+    public TemplateFormatterType(Pattern matchSchema, String formatTemplate, Pattern splitRegularExpression) {
+        this.schemaPattern = matchSchema;
+        this.formatTemplate = formatTemplate;
+        this.splitRegularExpression = splitRegularExpression;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isTypeByScheme(final String scheme) {
+        if (StringUtils.isBlank(scheme)) {
+            LOG.debug("TemplateFormatterType does not support identifiers with Null/Blank scheme");
+            return false;
+        }
+        Matcher matcher = schemaPattern.matcher(scheme);
+        return matcher.matches();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isType(final String value) {
+        if (StringUtils.isBlank(value)) {
+            LOG.debug("Formatter does not support Null/Blank identifiers ");
+            return false;
+        }
+        Matcher matcher = schemaPattern.matcher(value);
+        return matcher.matches();
+    }
+
+    @Override
+    public String format(String scheme, String identifier, boolean noDelimiterOnEmptyScheme) {
+        return StringUtils.replaceEach(formatTemplate, REPLACE_TAGS, new String[]{scheme, identifier});
+
+    }
+
+    @Override
+    public String format(final String scheme, final String identifier) {
+        return format(scheme, identifier, false);
+    }
+
+    @Override
+    public String[] parse(final String value) {
+        String partyIdPrivate = value.trim();
+        Matcher matcher = splitRegularExpression.matcher(trim(partyIdPrivate));
+        if (!matcher.matches()) {
+            throw new MalformedIdentifierException("Identifier: [" + partyIdPrivate + "] does not match regular expression [" + splitRegularExpression.pattern() + "]");
+        }
+        return new String[]{
+                getGroupByName(matcher, SPLIT_GROUP_SCHEME_NAME),
+                getGroupByName(matcher, SPLIT_GROUP_IDENTIFIER_NAME)
+        };
+    }
+
+    private String getGroupByName(Matcher matcher, String groupName) {
+        String result = null;
+        try {
+            result = matcher.group(groupName);
+        } catch (IllegalArgumentException arg) {
+            LOG.debug("Group [{}] was not found for pattern: [{}].", groupName, matcher.pattern());
+        }
+        return result;
+    }
+}
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java
index 55da9a45bab4e2114073057a6ccce3bac417fa55..ba85f5de1dc440cff9faf20a11b6f5c90f2047b6 100644
--- a/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java
@@ -85,7 +85,7 @@ public class GeneratedCodeTest {
     }
 
     public static ServiceGroup loadServiceGroup(String path) throws JAXBException {
-        InputStream inputStream = IdentifiersTest.class.getResourceAsStream(path);
+        InputStream inputStream = GeneratedCodeTest.class.getResourceAsStream(path);
         JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class);
         Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
         Object serviceGroup = unmarshaller.unmarshal(inputStream);
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/IdentifiersTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/IdentifiersTest.java
deleted file mode 100644
index 1c28003c62865c2858900da435de7927328c793a..0000000000000000000000000000000000000000
--- a/smp-api/src/test/java/eu/europa/ec/smp/api/IdentifiersTest.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.smp.api;
-
-import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
-import junitparams.naming.TestCaseName;
-import org.apache.commons.lang3.StringUtils;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ProcessIdentifier;
-
-import static org.junit.Assert.*;
-
-/**
- * Created by gutowpa on 12/01/2017.
- */
-@RunWith(JUnitParamsRunner.class)
-public class IdentifiersTest {
-
-    @Rule
-    public ExpectedException expectedEx = ExpectedException.none();
-
-    public static final String MALFORMED_INPUT_MSG = "Malformed identifier, scheme and id should be delimited by double colon: ";
-
-    private static final Object[] participantIdentifierPositiveCases() {
-        return new Object[][]{
-                {"ebCore unregistered", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain:ec.europa.eu", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain", "ec.europa.eu"},
-                {"ebCore iso6523", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore with space 1", " urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore with space 2", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789 ", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore with space 3", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088::123456789 ", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-
-                {"ebCore unregistered with urn and colons", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth:urn:ehealth:pl:ncp-idp", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth", "urn:ehealth:pl:ncp-idp"},
-                {"ebCore unregistered with dash", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth:pl:ncp-idp", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth", "pl:ncp-idp"},
-                {"ebCore unregistered example double colon", "urn:oasis:names:tc:ebcore:partyid-type:unregistered::blue-gw", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "blue-gw"},
-                {"ebCore unregistered example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:blue-gw", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "blue-gw"},
-                {"ebCore unregistered domain example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ec.europa.eu", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "ec.europa.eu"},
-                {"ebCore unregistered email scheme example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:email:test@my.mail.com", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:email", "test@my.mail.com"},
-                {"ebCore unregistered email example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:test@my.mail.com", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "test@my.mail.com"},
-                {"ebCore with double colon", " urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088::123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore with double colon start", " ::urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"Double colon basic", "a::b", "a", "b"},
-                {"Double colon twice", "a::b::c", "a", "b::c"},
-                {"Double colon iso6523", "iso6523-actorid-upis::0002:gutek", "iso6523-actorid-upis", "0002:gutek"},
-                {"Double colon ehealth", "ehealth-actorid-qns::urn:poland:ncpb", "ehealth-actorid-qns", "urn:poland:ncpb"},
-                {"Double colon ehealth 2", "ehealth-actorid-qns::urn:ehealth:hr:ncpb-idp", "ehealth-actorid-qns", "urn:ehealth:hr:ncpb-idp"},
-                {"Double colon ehealth 3", "scheme::urn:ehealth:pt:ncpb-idp", "scheme", "urn:ehealth:pt:ncpb-idp"},
-                {"Double colon custom scheme", "otherscheme::urn:ehealth:be:ncpb-idp", "otherscheme", "urn:ehealth:be:ncpb-idp"},
-        };
-    }
-
-    private static final Object[][] participantIdentifierNegativeCases() {
-        return new Object[][]{
-                {"Null value", null, false},
-                {"Empty value", "", false},
-                {"Missing identifier", "a::", false},
-                // following are false only if scheme is mandatory!
-                {"Not double colon and not ebCoreId", "a", true},
-                {"Constant and is not ebCoreId 2", "abc", true},
-                {"Only one colon", "a:b", true},
-                {"Not double colon and not ebCoreId", "ehealth-actorid-qns", true},
-                {"Not double colon and not ebCoreId", "urn:poland:ncpb", true},
-                {"Not double colon and not ebCoreId", "ehealth-resid-qns", true},
-                {"Not double colon and not ebCoreId", "epsos##services:extended:epsos:51", true},
-        };
-    }
-
-    private static final Object[] testCases() {
-        return new Object[][]{
-                {"a::b", "a", "b"},
-                {"a::b::c", "a", "b::c"},
-                {"a:b::c", "a:b", "c"},
-                {"NoSchemeIdentifier", null, "NoSchemeIdentifier"},
-                {"ehealth-actorid-qns::urn:poland:ncpb", "ehealth-actorid-qns", "urn:poland:ncpb"},
-                {"ehealth-resid-qns::urn::epsos##services:extended:epsos::51", "ehealth-resid-qns", "urn::epsos##services:extended:epsos::51"},
-                {"iso6523-actorid-upis::0002:gutek", "iso6523-actorid-upis", "0002:gutek"},
-                {"ehealth-actorid-qns::urn:ehealth:hr:ncpb-idp", "ehealth-actorid-qns", "urn:ehealth:hr:ncpb-idp"},
-                {"scheme::urn:ehealth:pt:ncpb-idp", "scheme", "urn:ehealth:pt:ncpb-idp"},
-                {"otherscheme::urn:ehealth:be:ncpb-idp", "otherscheme", "urn:ehealth:be:ncpb-idp"},
-                {"ehealth-resid-qns::urn:ehealth:IdentityService::XCPD::CrossGatewayPatientDiscovery##ITI-55", "ehealth-resid-qns", "urn:ehealth:IdentityService::XCPD::CrossGatewayPatientDiscovery##ITI-55"},
-                {"ehealth-resid-qns::urn:XCPD::CrossGatewayPatientDiscovery", "ehealth-resid-qns", "urn:XCPD::CrossGatewayPatientDiscovery"},
-                {"ehealth-resid-qns::urn:ehealth:PatientService::XCA::CrossGatewayQuery##ITI-38", "ehealth-resid-qns", "urn:ehealth:PatientService::XCA::CrossGatewayQuery##ITI-38"},
-                {"ehealth-resid-qns::urn:XCA::CrossGatewayQuery", "ehealth-resid-qns", "urn:XCA::CrossGatewayQuery"},
-                {"ehealth-resid-qns::urn:ehealth:OrderService::XCA::CrossGatewayQuery##ITI-38", "ehealth-resid-qns", "urn:ehealth:OrderService::XCA::CrossGatewayQuery##ITI-38"},
-                {"ehealth-resid-qns::urn:ehealth:DispensationService:Initialize::XDR::ProvideandRegisterDocumentSet-b##ITI-41", "ehealth-resid-qns", "urn:ehealth:DispensationService:Initialize::XDR::ProvideandRegisterDocumentSet-b##ITI-41"},
-                {"ehealth-resid-qns::urn:XDR::ProvideandRegisterDocumentSet-b", "ehealth-resid-qns", "urn:XDR::ProvideandRegisterDocumentSet-b"},
-                {"ehealth-resid-qns::urn:ehealth:DispensationService:Discard::XDR::ProvideandRegisterDocumentSet-b##ITI-41", "ehealth-resid-qns", "urn:ehealth:DispensationService:Discard::XDR::ProvideandRegisterDocumentSet-b##ITI-41"},
-                {"ehealth-resid-qns::urn:ehealth:ConsentService:Put::XDR::BPPCProvideandRegisterDocumentSet-b##ITI-41", "ehealth-resid-qns", "urn:ehealth:ConsentService:Put::XDR::BPPCProvideandRegisterDocumentSet-b##ITI-41"},
-                {"ehealth-resid-qns::urn:XDR::BPPCProvideandRegisterDocumentSet-b", "ehealth-resid-qns", "urn:XDR::BPPCProvideandRegisterDocumentSet-b"},
-                {"ehealth-resid-qns::urn:ehealth:ConsentService:Discard::XDR::BPPCProvideandRegisterDocumentSet-b##ITI-41", "ehealth-resid-qns", "urn:ehealth:ConsentService:Discard::XDR::BPPCProvideandRegisterDocumentSet-b##ITI-41"},
-                {"ehealth-resid-qns::urn:ehealth:IdP::identityProvider::HPAuthentication##epsos-91", "ehealth-resid-qns", "urn:ehealth:IdP::identityProvider::HPAuthentication##epsos-91"},
-                {"ehealth-resid-qns::urn:identityProvider::HPAuthentication", "ehealth-resid-qns", "urn:identityProvider::HPAuthentication"},
-                {"ehealth-resid-qns::urn:ehealth:IdP::XUA::ProvideX-UserAssertion##ITI-40", "ehealth-resid-qns", "urn:ehealth:IdP::XUA::ProvideX-UserAssertion##ITI-40"},
-                {"ehealth-resid-qns::urn:XUA::ProvideX-UserAssertion", "ehealth-resid-qns", "urn:XUA::ProvideX-UserAssertion"},
-                {"ehealth-resid-qns::urn:ehealth:VPN::VPNGatewayServer##epsos-105", "ehealth-resid-qns", "urn:ehealth:VPN::VPNGatewayServer##epsos-105"},
-                {"ehealth-resid-qns::urn:ehealth:ncp::vpngateway", "ehealth-resid-qns", "urn:ehealth:ncp::vpngateway"},
-                {"ehealth-resid-qns::urn:ehealth:VPN::VPNGatewayClient##epsos-106", "ehealth-resid-qns", "urn:ehealth:VPN::VPNGatewayClient##epsos-106"},
-                {"ehealth-resid-qns::urn:ehealth:ISM::InternationalSearchMask##epsos-107", "ehealth-resid-qns", "urn:ehealth:ISM::InternationalSearchMask##epsos-107"},
-                {"ehealth-resid-qns::urn:ehealth:ncp::pt:ism", "ehealth-resid-qns", "urn:ehealth:ncp::pt:ism"}
-        };
-    }
-
-    private static final Object[] ebCoreIdentifiersCases() {
-        return new Object[][]{
-                {"ebCore unregistered", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain:ec.europa.eu", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain", "ec.europa.eu"},
-                {"ebCore iso6523", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore with space 1", " urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore with space 2", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789 ", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore unregistered with urn and colons", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth:urn:ehealth:pl:ncp-idp", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth", "urn:ehealth:pl:ncp-idp"},
-                {"ebCore unregistered with dash", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth:pl:ncp-idp", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth", "pl:ncp-idp"},
-                {"ebCore unregistered example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:blue-gw", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "blue-gw"},
-                {"ebCore unregistered domain example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ec.europa.eu", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "ec.europa.eu"},
-                {"ebCore unregistered email scheme example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:email:test@my.mail.com", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:email", "test@my.mail.com"},
-                {"ebCore unregistered email example", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:test@my.mail.com", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "test@my.mail.com"},
-                {"ebCore with double colon", " urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088::123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-                {"ebCore with double colon start", " ::urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
-
-        };
-    }
-
-    private static final Object[] ebCoreIdentifiersNegativeCases() {
-        return new Object[][]{
-                //{"Not an ebCore ", "urn:my:space:tc:ebcore:partyid-type:unregistered:domain:ec.europa.eu", MalformedIdentifierException.class},
-                {"ebCore iso6523", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:Illegal-value-without-scheme", IllegalArgumentException.class},
-                {"ebCore with no catalog", " urn:oasis:names:tc:ebcore:partyid-type:0088123456789", IllegalArgumentException.class},
-        };
-    }
-
-    private static final Object[] negativeCases() {
-        return new Object[]{
-                null,
-                "a::",
-        };
-    }
-
-    private static final Object[] documentTestCases() {
-        Object[] commonTests = testCases();
-        Object[] res = new Object[commonTests.length + 2];
-        System.arraycopy(commonTests, 0, res, 0, commonTests.length);
-        //add new test with empty schema
-        res[commonTests.length] = new Object[]{"::a", null, "a"};
-        res[commonTests.length + 1] = new Object[]{"::urn:ehealth:ncp::pt:ism", null, "urn:ehealth:ncp::pt:ism"};
-        return res;
-    }
-
-    private static final Object[] negativeDocumentCases() {
-        Object[] commonNegativeTests = negativeCases();
-        Object[] res = new Object[commonNegativeTests.length - 1]; // skip last one
-        System.arraycopy(commonNegativeTests, 0, res, 0, commonNegativeTests.length - 1);
-
-        return res;
-    }
-
-    @Test
-    @Parameters(method = "participantIdentifierPositiveCases")
-    @TestCaseName("{0}")
-    public void testParticipantIdPositive(String caseName, String input, String scheme, String value) {
-        //when
-        ParticipantIdentifierType participantId = Identifiers.asParticipantId(input, true);
-
-        //then
-        assertEquals(scheme, participantId.getScheme());
-        assertEquals(value, participantId.getValue());
-    }
-
-    @Test
-    @Parameters(method = "ebCoreIdentifiersCases")
-    @TestCaseName("{0}")
-    public void testSplitEbCoreIdentifier(String caseName, String input, String scheme, String value) {
-        //when
-        String[] values = Identifiers.splitEbCoreIdentifier(input);
-
-        //then
-        assertEquals(2, values.length);
-        assertEquals(scheme, values[0]);
-        assertEquals(value, values[1]);
-    }
-
-    @Test
-    @Parameters(method = "participantIdentifierNegativeCases")
-    @TestCaseName("{0}")
-    public void testParticipantIdNegative(String caseName, String negativeInput, boolean schemeMandatory) {
-        try {
-            //when
-            Identifiers.asParticipantId(negativeInput, schemeMandatory);
-            System.out.println(negativeInput);
-        } catch (Exception e) {
-            //then
-            negativeAssertions(negativeInput, e);
-            return;
-        }
-        fail();
-    }
-
-    @Test
-    @Parameters(method = "ebCoreIdentifiersNegativeCases")
-    @TestCaseName("{0}")
-    public void testSplitEbCoreIdentifierNegative(String caseName, String negativeInput, Class clz) {
-
-        expectedEx.expect(clz);
-        //when
-        Identifiers.asParticipantId(negativeInput, false);
-
-    }
-
-    @Test
-    @Parameters(method = "documentTestCases")
-    public void testDocumentIdPositive(String input, String scheme, String value) {
-        //when
-        DocumentIdentifier documentId = Identifiers.asDocumentId(input);
-
-        //then
-        assertEquals(scheme, documentId.getScheme());
-        assertEquals(value, documentId.getValue());
-    }
-
-    @Test
-    @Parameters(method = "testCases")
-    public void testProcessIdPositive(String input, String scheme, String value) {
-        //when
-        ProcessIdentifier processId = Identifiers.asProcessId(input);
-
-        //then
-        assertEquals(scheme, processId.getScheme());
-        assertEquals(value, processId.getValue());
-    }
-
-    @Test
-    @Parameters(method = "negativeCases")
-    public void testProcessIdNegative(String negativeInput) {
-        try {
-            //when
-            Identifiers.asProcessId(negativeInput);
-        } catch (Exception e) {
-            //then
-            negativeAssertions(negativeInput, e);
-            return;
-        }
-        fail();
-    }
-
-    @Test
-    @Parameters(method = "negativeDocumentCases")
-    public void testDocumentIdNegative(String negativeInput) {
-        try {
-            //when
-            Identifiers.asDocumentId(negativeInput);
-        } catch (Exception e) {
-            ///then
-            negativeAssertions(negativeInput, e);
-            return;
-        }
-        fail();
-    }
-
-    private void negativeAssertions(String negativeInput, Exception e) {
-        assertTrue(e instanceof MalformedIdentifierException);
-        assertEquals(MALFORMED_INPUT_MSG + (StringUtils.isBlank(negativeInput) ? "Null/Empty" : negativeInput), e.getMessage());
-    }
-
-    @Test
-    public void testUrlEncodingParticipantId() {
-        //given
-        ParticipantIdentifierType participantId = new ParticipantIdentifierType("0088:conformance:sg01#", "ehealth:actorid:qns");
-
-        //when-then
-        assertEquals("ehealth%3Aactorid%3Aqns%3A%3A0088%3Aconformance%3Asg01%23", Identifiers.asUrlEncodedString(participantId));
-    }
-
-    @Test
-    public void testUrlEncodingParticipantIdWithSpace() {
-        //given
-        ParticipantIdentifierType participantId = new ParticipantIdentifierType("GPR: 0088:conformance:sg01#", "ehealth:actorid:qns");
-
-        //when-then
-        //Because this is path segment spaces must be percent encoded (not with +)!
-        assertEquals("ehealth%3Aactorid%3Aqns%3A%3AGPR%3A%200088%3Aconformance%3Asg01%23", Identifiers.asUrlEncodedString(participantId));
-    }
-
-    @Test
-    public void testUrlEncodingDocumentId() {
-        //given
-        DocumentIdentifier docId = new DocumentIdentifier("urn::ehealth##services:extended:epsos01::101", "busdox:docid:qns");
-
-        //when-then
-        assertEquals("busdox%3Adocid%3Aqns%3A%3Aurn%3A%3Aehealth%23%23services%3Aextended%3Aepsos01%3A%3A101", Identifiers.asUrlEncodedString(docId));
-    }
-
-    @Test
-    public void testUrlEncodingDocumentIdWithSpace() {
-        //given
-        DocumentIdentifier docId = new DocumentIdentifier("urn::ehealth##services:extended:epsos01:: 101", "busdox:docid:qns");
-
-        //when-then
-        //Because this is path segment spaces must be percent encoded (not with +)!
-        assertEquals("busdox%3Adocid%3Aqns%3A%3Aurn%3A%3Aehealth%23%23services%3Aextended%3Aepsos01%3A%3A%20101", Identifiers.asUrlEncodedString(docId));
-    }
-
-}
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/DocumentIdentifierFormatterTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/DocumentIdentifierFormatterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..28091cbfd808b875b5882f2c796647e5a9f700d3
--- /dev/null
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/DocumentIdentifierFormatterTest.java
@@ -0,0 +1,166 @@
+package eu.europa.ec.smp.api.identifiers;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@RunWith(Parameterized.class)
+public class DocumentIdentifierFormatterTest {
+
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection documentIdentifierCases() {
+        return Arrays.asList(new Object[][]{
+                {"Basic example",
+                        new DocumentIdentifier("b", "a"),
+                        "a::b",
+                        "a%3A%3Ab",
+                        "a::b",
+                        false},
+                {"Double separator example",
+                        new DocumentIdentifier("b::c", "a"),
+                        "a::b::c",
+                        "a%3A%3Ab%3A%3Ac",
+                        "a::b::c",
+                        false},
+                {"Char : in scheme colon basic",
+                        new DocumentIdentifier("c","a:b"),
+                        "a:b::c",
+                        "a%3Ab%3A%3Ac",
+                        "a:b::c",
+                        false},
+                {"No Scheme Identifier ",
+                        new DocumentIdentifier("NoSchemeIdentifier", null),
+                        "::NoSchemeIdentifier",
+                        "%3A%3ANoSchemeIdentifier",
+                        "NoSchemeIdentifier",
+                        false},
+                {"No Scheme Identifier with ::",
+                        new DocumentIdentifier("NoSchemeIdentifier01", null),
+                        "::NoSchemeIdentifier01",
+                        "%3A%3ANoSchemeIdentifier01",
+                        "::NoSchemeIdentifier01",
+                        false},
+                {"No Scheme Identifier with no scheme and ::",
+                        new DocumentIdentifier("NoSchemeIdentifier01::test", null),
+                        "::NoSchemeIdentifier01::test",
+                        "%3A%3ANoSchemeIdentifier01%3A%3Atest",
+                        "::NoSchemeIdentifier01::test",
+                        false},
+                {"Example with ## and double colon",
+                        new DocumentIdentifier("urn::epsos##services:extended:epsos::51", "ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn::epsos##services:extended:epsos::51",
+                        "ehealth-resid-qns%3A%3Aurn%3A%3Aepsos%23%23services%3Aextended%3Aepsos%3A%3A51",
+                        "ehealth-resid-qns::urn::epsos##services:extended:epsos::51",
+                        false},
+                {"Identifier with spaces -  formatted to uri with '%20",
+                        new DocumentIdentifier("urn ncpb test", "ehealth-actorid-qns"),
+                        "ehealth-actorid-qns::urn ncpb test",
+                        "ehealth-actorid-qns%3A%3Aurn%20ncpb%20test",
+                        "ehealth-actorid-qns::urn ncpb test",
+                        false},
+                {"Example 01 (parse spaces)",new DocumentIdentifier("urn:ehealth:pt:ncpb-idp","scheme"),
+                        "scheme::urn:ehealth:pt:ncpb-idp",
+                        "scheme%3A%3Aurn%3Aehealth%3Apt%3Ancpb-idp",
+                        " scheme::urn:ehealth:pt:ncpb-idp",
+                        false},
+                {"Example 02 (parse spaces)",new DocumentIdentifier("urn:ehealth:be:ncpb-idp","otherscheme"),
+                        "otherscheme::urn:ehealth:be:ncpb-idp",
+                        "otherscheme%3A%3Aurn%3Aehealth%3Abe%3Ancpb-idp" ,
+                        "otherscheme::urn:ehealth:be:ncpb-idp ",
+                        false},
+                {"Example 03 (parse spaces in argument)",new DocumentIdentifier("urn:ehealth:IdentityService::XCPD::CrossGatewayPatientDiscovery##ITI-55","ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:ehealth:IdentityService::XCPD::CrossGatewayPatientDiscovery##ITI-55",
+                        "ehealth-resid-qns%3A%3Aurn%3Aehealth%3AIdentityService%3A%3AXCPD%3A%3ACrossGatewayPatientDiscovery%23%23ITI-55",
+                        "ehealth-resid-qns:: urn:ehealth:IdentityService::XCPD::CrossGatewayPatientDiscovery##ITI-55 ",
+                        false},
+                {"Example 04",new DocumentIdentifier( "urn:XCPD::CrossGatewayPatientDiscovery", "ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:XCPD::CrossGatewayPatientDiscovery",
+                        "ehealth-resid-qns%3A%3Aurn%3AXCPD%3A%3ACrossGatewayPatientDiscovery",
+                        "ehealth-resid-qns::urn:XCPD::CrossGatewayPatientDiscovery",
+                        false},
+                {"Example 05",new DocumentIdentifier("urn:ehealth:PatientService::XCA::CrossGatewayQuery##ITI-38","ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:ehealth:PatientService::XCA::CrossGatewayQuery##ITI-38",
+                        "ehealth-resid-qns%3A%3Aurn%3Aehealth%3APatientService%3A%3AXCA%3A%3ACrossGatewayQuery%23%23ITI-38",
+                        "ehealth-resid-qns::urn:ehealth:PatientService::XCA::CrossGatewayQuery##ITI-38",
+                        false},
+                {"Example 06",new DocumentIdentifier("urn:XCA::CrossGatewayQuery", "ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:XCA::CrossGatewayQuery",
+                        "ehealth-resid-qns%3A%3Aurn%3AXCA%3A%3ACrossGatewayQuery",
+                        "ehealth-resid-qns::urn:XCA::CrossGatewayQuery",
+                        false},
+                {"Example 07",new DocumentIdentifier("urn:ehealth:OrderService::XCA::CrossGatewayQuery##ITI-38","ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:ehealth:OrderService::XCA::CrossGatewayQuery##ITI-38",
+                        "ehealth-resid-qns%3A%3Aurn%3Aehealth%3AOrderService%3A%3AXCA%3A%3ACrossGatewayQuery%23%23ITI-38",
+                        "ehealth-resid-qns::urn:ehealth:OrderService::XCA::CrossGatewayQuery##ITI-38",
+                        false},
+                {"Example 08",new DocumentIdentifier("urn:ehealth:DispensationService:Initialize::XDR::ProvideandRegisterDocumentSet-b##ITI-41","ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:ehealth:DispensationService:Initialize::XDR::ProvideandRegisterDocumentSet-b##ITI-41",
+                        "ehealth-resid-qns%3A%3Aurn%3Aehealth%3ADispensationService%3AInitialize%3A%3AXDR%3A%3AProvideandRegisterDocumentSet-b%23%23ITI-41",
+                        "ehealth-resid-qns::urn:ehealth:DispensationService:Initialize::XDR::ProvideandRegisterDocumentSet-b##ITI-41",
+                        false},
+                {"Example 09",new DocumentIdentifier("urn:XDR::ProvideandRegisterDocumentSet-b","ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:XDR::ProvideandRegisterDocumentSet-b",
+                        "ehealth-resid-qns%3A%3Aurn%3AXDR%3A%3AProvideandRegisterDocumentSet-b",
+                        "ehealth-resid-qns::urn:XDR::ProvideandRegisterDocumentSet-b",
+                        false},
+                {"Example 10",new DocumentIdentifier("urn:ehealth:DispensationService:Discard::XDR::ProvideandRegisterDocumentSet-b##ITI-41","ehealth-resid-qns"),
+                        "ehealth-resid-qns::urn:ehealth:DispensationService:Discard::XDR::ProvideandRegisterDocumentSet-b##ITI-41",
+                        "ehealth-resid-qns%3A%3Aurn%3Aehealth%3ADispensationService%3ADiscard%3A%3AXDR%3A%3AProvideandRegisterDocumentSet-b%23%23ITI-41",
+                        "ehealth-resid-qns::urn:ehealth:DispensationService:Discard::XDR::ProvideandRegisterDocumentSet-b##ITI-41",
+                        false},
+
+        });
+    }
+
+    // input parameters
+    @Parameterized.Parameter
+    public String name;
+    @Parameterized.Parameter(1)
+    public DocumentIdentifier identifierType;
+    @Parameterized.Parameter(2)
+    public String formattedIdentifier;
+    @Parameterized.Parameter(3)
+    public String uriFormattedIdentifier;
+    @Parameterized.Parameter(4)
+    public String identifierToParse;
+    @Parameterized.Parameter(5)
+    public boolean throwParseError;
+
+    DocumentIdentifierFormatter testInstance = new DocumentIdentifierFormatter();
+
+    @Test
+    public void testFormat() {
+
+        String result = testInstance.format(identifierType);
+        String uriResult = testInstance.urlEncodedFormat(identifierType);
+
+        Assert.assertEquals(formattedIdentifier, result);
+        Assert.assertEquals(uriFormattedIdentifier, uriResult);
+    }
+
+    @Test
+    public void testParse() {
+        IllegalArgumentException exception = null;
+        DocumentIdentifier result = null;
+        if (throwParseError) {
+            exception = Assert.assertThrows(IllegalArgumentException.class, () -> testInstance.parse(identifierToParse));
+        } else {
+            result = testInstance.parse(identifierToParse);
+        }
+
+        Assert.assertNotNull(throwParseError ? exception : result);
+        if (!throwParseError) {
+            Assert.assertEquals(identifierType.getScheme(), result.getScheme());
+            Assert.assertEquals(identifierType.getValue(), result.getValue());
+        }
+    }
+}
\ No newline at end of file
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatterFormatTests.java b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatterFormatTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..30cb8056d93f27ce7c0cc36a32c0ec5babcb0716
--- /dev/null
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatterFormatTests.java
@@ -0,0 +1,74 @@
+package eu.europa.ec.smp.api.identifiers;
+
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@RunWith(Parameterized.class)
+public class ParticipantIdentifierFormatterFormatTests {
+
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection participantIdentifierCases() {
+        return Arrays.asList(new Object[][]{
+                {"ebCore unregistered",
+                        new ParticipantIdentifierType( "ec.europa.eu","urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain" ),
+                        "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain:ec.europa.eu",
+                        "urn%3Aoasis%3Anames%3Atc%3Aebcore%3Apartyid-type%3Aunregistered%3Adomain%3Aec.europa.eu"},
+                {"ebCore iso6523",
+                        new ParticipantIdentifierType( "123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088" ),
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789",
+                        "urn%3Aoasis%3Anames%3Atc%3Aebcore%3Apartyid-type%3Aiso6523%3A0088%3A123456789"},
+                {"Double colon basic",
+                        new ParticipantIdentifierType( "b","a" ),
+                        "a::b",
+                        "a%3A%3Ab"},
+                {"Double colon twice",  new ParticipantIdentifierType( "b::c","a" ),
+                        "a::b::c",
+                        "a%3A%3Ab%3A%3Ac"},
+                {"Double colon iso6523",
+                        new ParticipantIdentifierType( "0002:12345","iso6523-actorid-upis" ),
+                        "iso6523-actorid-upis::0002:12345",
+                        "iso6523-actorid-upis%3A%3A0002%3A12345"},
+                {"Double colon eHealth",
+                        new ParticipantIdentifierType(  "urn:poland:ncpb","ehealth-actorid-qns" ),
+                        "ehealth-actorid-qns::urn:poland:ncpb",
+                        "ehealth-actorid-qns%3A%3Aurn%3Apoland%3Ancpb"},
+                {"Identifier with spaces -  formatted to uri with '%20",
+                        new ParticipantIdentifierType(  "urn ncpb test","ehealth-actorid-qns" ),
+                        "ehealth-actorid-qns::urn ncpb test",
+                        "ehealth-actorid-qns%3A%3Aurn%20ncpb%20test"},
+        });
+    }
+
+    // input parameters
+    @Parameterized.Parameter
+    public String name;
+    @Parameterized.Parameter(1)
+    public ParticipantIdentifierType participantIdentifierType;
+    @Parameterized.Parameter(2)
+    public String formattedIdentifier;
+    @Parameterized.Parameter(3)
+    public String uriFormattedIdentifier;
+
+    ParticipantIdentifierFormatter testInstance = new ParticipantIdentifierFormatter();
+
+    @Test
+    public void testFormat() {
+
+        String result = testInstance.format(participantIdentifierType);
+        String uriResult = testInstance.urlEncodedFormat(participantIdentifierType);
+
+        Assert.assertEquals(formattedIdentifier,result);
+        Assert.assertEquals(uriFormattedIdentifier, uriResult);
+    }
+}
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatterParseTests.java b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatterParseTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..9cc97af9295e8480b86f7f43d190874a3812c25c
--- /dev/null
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/ParticipantIdentifierFormatterParseTests.java
@@ -0,0 +1,82 @@
+package eu.europa.ec.smp.api.identifiers;
+
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@RunWith(Parameterized.class)
+public class ParticipantIdentifierFormatterParseTests {
+
+
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection participantIdentifierPositiveCases() {
+        return Arrays.asList(new Object[][]{
+                {"ebCore unregistered", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain:ec.europa.eu", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain", "ec.europa.eu"},
+                {"ebCore iso6523", false, "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
+                {"ebCore with space 1", false, " urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
+                {"ebCore with space 2", false, "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789 ", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
+                {"ebCore with space 3", false, "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088::123456789 ", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
+                {"ebCore unregistered with urn and colons", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth:urn:ehealth:pl:ncp-idp", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth", "urn:ehealth:pl:ncp-idp"},
+                {"ebCore unregistered with dash", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth:pl:ncp-idp", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ehealth", "pl:ncp-idp"},
+                {"ebCore unregistered example double colon", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered::blue-gw", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "blue-gw"},
+                {"ebCore unregistered example", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered:blue-gw", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "blue-gw"},
+                {"ebCore unregistered domain example", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ec.europa.eu", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "ec.europa.eu"},
+                {"ebCore unregistered email scheme example", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered:email:test@my.mail.com", "urn:oasis:names:tc:ebcore:partyid-type:unregistered:email", "test@my.mail.com"},
+                {"ebCore unregistered email example", false, "urn:oasis:names:tc:ebcore:partyid-type:unregistered:test@my.mail.com", "urn:oasis:names:tc:ebcore:partyid-type:unregistered", "test@my.mail.com"},
+                {"ebCore with double colon", false, " urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088::123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
+                {"ebCore with double colon start", false, " ::urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789"},
+                {"Double colon basic", false, "a::b", "a", "b"},
+                {"Double colon twice", false, "a::b::c", "a", "b::c"},
+                {"Double colon iso6523", false, "iso6523-actorid-upis::0002:gutek", "iso6523-actorid-upis", "0002:gutek"},
+                {"Double colon ehealth", false, "ehealth-actorid-qns::urn:poland:ncpb", "ehealth-actorid-qns", "urn:poland:ncpb"},
+                {"Double colon ehealth 2", false, "ehealth-actorid-qns::urn:ehealth:hr:ncpb-idp", "ehealth-actorid-qns", "urn:ehealth:hr:ncpb-idp"},
+                {"Double colon ehealth 3", false, "scheme::urn:ehealth:pt:ncpb-idp", "scheme", "urn:ehealth:pt:ncpb-idp"},
+                {"Double colon custom scheme", false, "otherscheme::urn:ehealth:be:ncpb-idp", "otherscheme", "urn:ehealth:be:ncpb-idp"},
+
+                {"ebCore iso6523", true, "urn:oasis:names:tc:ebcore:partyid-type:iso6523:Illegal-value-without-scheme", null, null},
+                {"ebCore with no catalog", true, " urn:oasis:names:tc:ebcore:partyid-type:0088123456789", null, null},
+        });
+    }
+    // input parameters
+    @Parameterized.Parameter
+    public String name;
+    @Parameterized.Parameter(1)
+    public boolean throwError;
+    @Parameterized.Parameter(2)
+    public String identifier;
+    @Parameterized.Parameter(3)
+    public String schemaPart;
+    @Parameterized.Parameter(4)
+    public String idPart;
+
+    ParticipantIdentifierFormatter testInstance = new ParticipantIdentifierFormatter();
+
+    @Test
+    public void testPartyIdentifierParse() {
+        IllegalArgumentException exception = null;
+        ParticipantIdentifierType result = null;
+        if (throwError) {
+            exception = Assert.assertThrows(IllegalArgumentException.class, () -> testInstance.parse(identifier));
+        } else {
+            result = testInstance.parse(identifier);
+        }
+
+        Assert.assertNotNull(throwError ? exception : result);
+        if (!throwError) {
+            Assert.assertEquals(schemaPart, result.getScheme());
+            Assert.assertEquals(idPart, result.getValue());
+        }
+    }
+
+
+}
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/EBCorePartyIdFormatterTypeTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/EBCorePartyIdFormatterTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6daa95e417075647720a69b715f52ced234b111
--- /dev/null
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/EBCorePartyIdFormatterTypeTest.java
@@ -0,0 +1,171 @@
+package eu.europa.ec.smp.api.identifiers.types;
+
+import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import static org.apache.commons.lang3.StringUtils.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@RunWith(Parameterized.class)
+public class EBCorePartyIdFormatterTypeTest {
+
+
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection participantIdentifierPositiveCases() {
+        return Arrays.asList(new Object[][]{
+                {
+                        "unregistered with <scheme-in-catalog",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain:ec.europa.eu",
+                        "urn:oasis:names:tc:ebcore:partyid-type:unregistered:domain",
+                        "ec.europa.eu",
+                        null, null
+                },
+                {
+                        "Case insensitive schema",
+                        true,
+                        "urn:OASIS:names:tC:eBcore:partyId-type:unregistered:domain:ec.europa.eu",
+                        "urn:OASIS:names:tC:eBcore:partyId-type:unregistered:domain",
+                        "ec.europa.eu",
+                        null, null
+                },
+                {
+                        "unregistered without <scheme-in-catalog",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:unregistered:ec.europa.eu",
+                        "urn:oasis:names:tc:ebcore:partyid-type:unregistered",
+                        "ec.europa.eu",
+                        null, null},
+                {
+                        "iso6523",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789",
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088",
+                        "123456789",
+                        null, null},
+                {"with spaces",
+                        true,
+                        "  urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789 ",
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789",
+                        null, null},
+                {"with spaces in the identifier",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088: 123456789 ",
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789",
+                        null, null},
+                {"Parse eDelivery URN format",
+                        true,
+                        "::urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456789",
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789",
+                        null, null},
+                {"Parse peppol URN format 1",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088::123456789",
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789",
+                        null, null},
+                {"Parse peppol URN format 2",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523::0088:123456789",
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456789",
+                        null, null},
+                {
+                        "invalid catalog identifier",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:invalid-catalog:ec.europa.eu",
+                        "urn:oasis:names:tc:ebcore:partyid-type:invalid-catalog",
+                        "ec.europa.eu",
+                        IllegalArgumentException.class, "Invalid ebCore id "},
+                {
+                        "Not ebcore party id",
+                        false,
+                        "urn:ehealth:invalid-catalog:ec.europa.eu",
+                        "urn:ehealth:invalid-catalog:ec.europa.eu",
+                        null,
+                        MalformedIdentifierException.class, "Malformed identifier"},
+                {
+                        "Not ebcore party id iso6523",
+                        true,
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523::0088",
+                        "urn:oasis:names:tc:ebcore:partyid-type:iso6523::0088",
+                        null,
+                        IllegalArgumentException.class, "Invalid ebCore id"},
+        });
+    }
+
+    EBCorePartyIdFormatterType testInstance = new EBCorePartyIdFormatterType();
+
+    // input parameters
+    @Parameterized.Parameter
+    public String testName;
+    @Parameterized.Parameter(1)
+    public boolean isEBCorePartyId;
+    @Parameterized.Parameter(2)
+    public String toParseIdentifier;
+    @Parameterized.Parameter(3)
+    public String schemaPart;
+    @Parameterized.Parameter(4)
+    public String idPart;
+    @Parameterized.Parameter(5)
+    public Class errorClass;
+    @Parameterized.Parameter(6)
+    public String containsErrorMessage;
+
+
+    @Test
+    public void isTypeByScheme() {
+
+        boolean result = testInstance.isTypeByScheme(schemaPart);
+        assertEquals(isEBCorePartyId, result);
+    }
+
+    @Test
+    public void isType() {
+
+        boolean result = testInstance.isType(toParseIdentifier);
+        assertEquals(isEBCorePartyId, result);
+    }
+
+    @Test
+    public void format() {
+        // skip format for not ebcore party ids
+        if (!isEBCorePartyId) {
+            return;
+        }
+
+        String result = testInstance.format(schemaPart, idPart);
+
+        String schema = trimToEmpty(schemaPart);
+        assertEquals(schema + ":" + trimToEmpty(idPart), result);
+    }
+
+    @Test
+    public void parse() {
+        // skip parse not ebcore party ids
+        if (!isEBCorePartyId) {
+            IllegalArgumentException result = assertThrows(IllegalArgumentException.class, () -> testInstance.parse(toParseIdentifier));
+            MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString(containsErrorMessage));
+        }
+        if (errorClass != null) {
+            Throwable result = assertThrows(errorClass, () -> testInstance.parse(toParseIdentifier));
+            MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString(containsErrorMessage));
+        } else {
+
+            String[] result = testInstance.parse(toParseIdentifier);
+            assertNotNull(result);
+            assertEquals(2, result.length);
+            assertEquals(schemaPart, result[0]);
+            assertEquals(idPart, result[1]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/OasisSMPFormatterTypeTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/OasisSMPFormatterTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..7deac8c8ed2aebac5231e4e209706f16afb50c85
--- /dev/null
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/OasisSMPFormatterTypeTest.java
@@ -0,0 +1,122 @@
+package eu.europa.ec.smp.api.identifiers.types;
+
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.regex.Pattern;
+
+import static org.apache.commons.lang3.StringUtils.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@RunWith(Parameterized.class)
+public class OasisSMPFormatterTypeTest {
+
+
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection<Object> participantIdentifierPositiveCases() {
+        return Arrays.asList(new Object[][]{
+                {
+                        "Valid peppol party identifier",
+                        true,
+                        "iso6523-actorid-upis::0002:12345",
+                        "iso6523-actorid-upis",
+                        "0002:12345",
+                        null, null
+                },
+                {
+                        "no schema",
+                        true,
+                        "::0002:12345",
+                        null,
+                        "0002:12345",
+                        null, null
+                },
+                {
+                        "test URN example ",
+                        true, // allways true - default parser
+                        "urn:justice:si:1123445",
+                        null,
+                        "urn:justice:si:1123445",
+                        null, null}
+        });
+    }
+
+    OasisSMPFormatterType testInstance = new OasisSMPFormatterType();
+
+
+    // input parameters
+    @Parameterized.Parameter
+    public String testName;
+    @Parameterized.Parameter(1)
+    public boolean isValidPartyId;
+    @Parameterized.Parameter(2)
+    public String toParseIdentifier;
+    @Parameterized.Parameter(3)
+    public String schemaPart;
+    @Parameterized.Parameter(4)
+    public String idPart;
+    @Parameterized.Parameter(5)
+    public Class errorClass;
+    @Parameterized.Parameter(6)
+    public String containsErrorMessage;
+
+
+    @Test
+    public void isTypeByScheme() {
+
+        boolean result = testInstance.isTypeByScheme(schemaPart);
+        assertEquals(isValidPartyId, result);
+    }
+
+    @Test
+    public void isType() {
+
+        boolean result = testInstance.isType(toParseIdentifier);
+        assertEquals(isValidPartyId, result);
+    }
+
+    @Test
+    public void format() {
+        // skip format for not ebcore party ids
+        if (!isValidPartyId) {
+            return;
+        }
+
+        String result = testInstance.format(schemaPart, idPart);
+        String resultNoDelimiterForNullSchema = testInstance.format(schemaPart, idPart, true);
+
+        String schema = trimToEmpty(schemaPart);
+        assertEquals(schema + "::" + trim(idPart), result);
+
+        assertEquals((isEmpty(schema)?"":schema + "::") + trim(idPart), resultNoDelimiterForNullSchema);
+    }
+
+    @Test
+    public void parse() {
+        // skip parse not ebcore party ids
+        if (!isValidPartyId) {
+            IllegalArgumentException result = assertThrows(IllegalArgumentException.class, () -> testInstance.parse(toParseIdentifier));
+            MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString(containsErrorMessage));
+        }
+        if (errorClass != null) {
+            Throwable result = assertThrows(errorClass, () -> testInstance.parse(toParseIdentifier));
+            MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString(containsErrorMessage));
+        } else {
+
+            String[] result = testInstance.parse(toParseIdentifier);
+            assertNotNull(result);
+            assertEquals(2, result.length);
+            assertEquals(schemaPart, result[0]);
+            assertEquals(idPart, result[1]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/TemplateFormatterTypeTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/TemplateFormatterTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..20fc7b32014fe043b100c9bffbb324687d881c4e
--- /dev/null
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/identifiers/types/TemplateFormatterTypeTest.java
@@ -0,0 +1,121 @@
+package eu.europa.ec.smp.api.identifiers.types;
+
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.regex.Pattern;
+
+import static org.apache.commons.lang3.StringUtils.trim;
+import static org.junit.Assert.*;
+
+/**
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@RunWith(Parameterized.class)
+public class TemplateFormatterTypeTest {
+
+
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection participantIdentifierPositiveCases() {
+        return Arrays.asList(new Object[][]{
+                {
+                        "Email example ",
+                        true,
+                        "mailto:test@ec.europa.eu",
+                        "mailto",
+                        "test@ec.europa.eu",
+                        null, null
+                },
+                {
+                        "test URN example ",
+                        true,
+                        "urn:ehealth:si:1123445",
+                        "urn:ehealth:si",
+                        "1123445",
+                        null, null
+                },
+                {
+                        "test URN example ",
+                        false,
+                        "urn:justice:si:1123445",
+                        "urn:justice:si",
+                        "1123445",
+                        IllegalArgumentException.class, "does not match regular expression"}
+        });
+    }
+
+    TemplateFormatterType testInstance
+            = new TemplateFormatterType(Pattern.compile("^(?i)\\s*(::)?((urn:ehealth:[a-zA-Z]{2})|mailto).*$"),
+            "${scheme}::${identifier}",
+            Pattern.compile("^(?i)\\s*(::)?(?<scheme>(urn:ehealth:[a-zA-Z]{2})|mailto):?(?<identifier>.+)?\\s*$")
+    );
+
+
+    // input parameters
+    @Parameterized.Parameter
+    public String testName;
+    @Parameterized.Parameter(1)
+    public boolean isValidPartyId;
+    @Parameterized.Parameter(2)
+    public String toParseIdentifier;
+    @Parameterized.Parameter(3)
+    public String schemaPart;
+    @Parameterized.Parameter(4)
+    public String idPart;
+    @Parameterized.Parameter(5)
+    public Class errorClass;
+    @Parameterized.Parameter(6)
+    public String containsErrorMessage;
+
+
+    @Test
+    public void isTypeByScheme() {
+
+        boolean result = testInstance.isTypeByScheme(schemaPart);
+        assertEquals(isValidPartyId, result);
+    }
+
+    @Test
+    public void isType() {
+
+        boolean result = testInstance.isType(toParseIdentifier);
+        assertEquals(isValidPartyId, result);
+    }
+
+    @Test
+    public void format() {
+        // skip format for not ebcore party ids
+        if (!isValidPartyId) {
+            return;
+        }
+
+        String result = testInstance.format(idPart, schemaPart);
+        assertEquals(trim(idPart) + "::" + trim(schemaPart), result);
+    }
+
+    @Test
+    public void parse() {
+        // skip parse not ebcore party ids
+        if (!isValidPartyId) {
+            IllegalArgumentException result = assertThrows(IllegalArgumentException.class, () -> testInstance.parse(toParseIdentifier));
+            MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString(containsErrorMessage));
+        }
+        if (errorClass != null) {
+            Throwable result = assertThrows(errorClass, () -> testInstance.parse(toParseIdentifier));
+            MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString(containsErrorMessage));
+        } else {
+
+            String[] result = testInstance.parse(toParseIdentifier);
+            assertNotNull(result);
+            assertEquals(2, result.length);
+            assertEquals(schemaPart, result[0]);
+            assertEquals(idPart, result[1]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidatorTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidatorTest.java
index 8f76ee95c7dad2e3ede98e48d9d1f884b06f5f60..91289e2265feff7e8113a3651e3a6e835308f173 100644
--- a/smp-api/src/test/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidatorTest.java
+++ b/smp-api/src/test/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidatorTest.java
@@ -14,68 +14,63 @@
 package eu.europa.ec.smp.api.validators;
 
 import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
 import org.apache.commons.io.IOUtils;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
+
 
 import static org.junit.Assert.*;
 
 /**
- * Created by migueti on 20/01/2017.
+ * @author migueti
+ * @since 3.0.0
  */
-@RunWith(JUnitParamsRunner.class)
+@RunWith(Parameterized.class)
 public class BdxSmpOasisValidatorTest {
 
     private static final String UTF_8 = "UTF-8";
 
-    @Test
-    @Parameters({"ServiceMetadata_OK.xml", "ServiceGroup_OK.xml"})
-    public void testValidatePositive(String xmlFilename) throws IOException, XmlInvalidAgainstSchemaException {
-        // given
-        byte[] xmlBody = loadXMLFileAsByteArray(xmlFilename);
-
-        // when
-        BdxSmpOasisValidator.validateXSD(xmlBody);
-
-        // then
-        // no exception occur
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection testCases() {
+        return Arrays.asList(new Object[][]{
+                {"ServiceMetadata_OK.xml",false, null},
+                {"ServiceGroup_OK.xml", false, null},
+                {"ServiceMetadata_ElementAdded.xml", true, "cvc-complex-type.2.4.a: Invalid content was found starting with element \\'\\{?(\\\"http://docs.oasis-open.org/bdxr/ns/SMP/2016/05\\\")?:?ElementAdded\\}?\\'.*Redirect.* is expected."},
+                {"ServiceMetadata_ElementMissing.xml", true, "cvc-complex-type.2.4.b: The content of element 'Redirect' is not complete. One of \\'\\{?(\"http://docs.oasis-open.org/bdxr/ns/SMP/2016/05\")?:?CertificateUID\\}?\\' is expected."},
+                {"ServiceGroup_MissingAssignment.xml", true, "Attribute name \"missingAssignment\" associated with an element type \"ServiceMetadataReferenceCollection\" must be followed by the ' = ' character."},
+                {"ServiceGroup_UnexpectedAttribute.xml", true, "cvc-complex-type.3.2.2: Attribute 'unexpectedAttribute' is not allowed to appear in element 'ServiceMetadataReferenceCollection'."},
+                {"ServiceGroup_externalDTD.xml", true, "External DTD: Failed to read external DTD 'any_external_file_address.dtd', because 'file' access is not allowed due to restriction set by the accessExternalDTD property."}
+        });
     }
 
-    private static Object[] negativeCases() {
-        return new Object[][]{
-                {"ServiceMetadata_ElementAdded.xml", "cvc-complex-type.2.4.a: Invalid content was found starting with element \\'\\{?(\\\"http://docs.oasis-open.org/bdxr/ns/SMP/2016/05\\\")?:?ElementAdded\\}?\\'.*Redirect.* is expected."},
-                {"ServiceMetadata_ElementMissing.xml", "cvc-complex-type.2.4.b: The content of element 'Redirect' is not complete. One of \\'\\{?(\"http://docs.oasis-open.org/bdxr/ns/SMP/2016/05\")?:?CertificateUID\\}?\\' is expected."},
-                {"ServiceGroup_MissingAssignment.xml", "Attribute name \"missingAssignment\" associated with an element type \"ServiceMetadataReferenceCollection\" must be followed by the ' = ' character."},
-                {"ServiceGroup_UnexpectedAttribute.xml", "cvc-complex-type.3.2.2: Attribute 'unexpectedAttribute' is not allowed to appear in element 'ServiceMetadataReferenceCollection'."},
-                {"ServiceGroup_externalDTD.xml", "External DTD: Failed to read external DTD 'any_external_file_address.dtd', because 'file' access is not allowed due to restriction set by the accessExternalDTD property."}
-        };
-    }
+    @Parameterized.Parameter
+    public String xmlFilename;
+    @Parameterized.Parameter(1)
+    public boolean throwsError;
+    @Parameterized.Parameter(2)
+    public String errorMessage;
 
     @Test
-    @Parameters(method = "negativeCases")
-    public void testValidateNegative(String xmlFilename, String output) throws IOException {
+    public void testValidate() throws IOException, XmlInvalidAgainstSchemaException {
         // given
         byte[] xmlBody = loadXMLFileAsByteArray(xmlFilename);
 
+        XmlInvalidAgainstSchemaException result=null;
         // when
-        try {
+        if (throwsError){
+            result = assertThrows(XmlInvalidAgainstSchemaException.class, () -> BdxSmpOasisValidator.validateXSD(xmlBody));
+        } else {
             BdxSmpOasisValidator.validateXSD(xmlBody);
-        } catch (XmlInvalidAgainstSchemaException e) {
-            // then
-            assertThat(e.getMessage(), org.hamcrest.Matchers.matchesPattern(output));
-            return;
         }
-        fail();
-    }
-
-    public String loadXMLFile(String path) throws IOException {
-        URL fileUrl = BdxSmpOasisValidatorTest.class.getResource("/XMLValidation/" + path);
-        return IOUtils.toString(fileUrl.openStream(), UTF_8);
+        assertEquals(throwsError, result!=null);
     }
 
     public byte[] loadXMLFileAsByteArray(String path) throws IOException {
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/CaseSensitivityNormalizer.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/CaseSensitivityNormalizer.java
deleted file mode 100644
index 08bcf190808066b8818310fcb90e81da36daacf7..0000000000000000000000000000000000000000
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/CaseSensitivityNormalizer.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.conversion;
-
-import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-import org.apache.commons.lang3.StringUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-import static eu.europa.ec.smp.api.Identifiers.asParticipantId;
-import static eu.europa.ec.smp.api.Identifiers.asString;
-
-/**
- * Created by gutowpa on 23/02/2017.
- */
-@Component
-public class CaseSensitivityNormalizer {
-
-    protected static ConfigurationService configurationService;
-
-    public CaseSensitivityNormalizer(ConfigurationService configurationService) {
-        this.configurationService = configurationService;
-    }
-
-    public ParticipantIdentifierType normalizeParticipantIdentifier(String scheme, String value) {
-        List<String> caseSensitiveParticipantSchemes = configurationService.getCaseSensitiveParticipantScheme();
-        if (scheme==null || caseSensitiveParticipantSchemes == null || !caseSensitiveParticipantSchemes.stream().anyMatch(scheme::equalsIgnoreCase)) {
-            scheme = StringUtils.lowerCase(scheme);
-            value = StringUtils.lowerCase(value);
-        }
-        return new ParticipantIdentifierType(value, scheme);
-    }
-
-    public ParticipantIdentifierType normalize(final ParticipantIdentifierType participantIdentifier, boolean schemeMandatory) {
-        ParticipantIdentifierType prtId = asParticipantId(asString(participantIdentifier),
-                schemeMandatory);
-        String scheme = prtId.getScheme();
-        String value = prtId.getValue();
-        return normalizeParticipantIdentifier(scheme, value);
-    }
-
-    public ParticipantIdentifierType normalize(final ParticipantIdentifierType participantIdentifier) {
-        return normalize(participantIdentifier,  configurationService.getParticipantSchemeMandatory());
-    }
-
-    public DocumentIdentifier normalize(final DocumentIdentifier documentIdentifier) {
-        String scheme = documentIdentifier.getScheme();
-        String value = documentIdentifier.getValue();
-        return normalizeDocumentIdentifier(scheme, value);
-    }
-
-    public DocumentIdentifier normalizeDocumentIdentifier(String scheme, String value) {
-        List<String> caseSensitiveDocumentSchemes = configurationService.getCaseSensitiveDocumentScheme();
-        if (scheme==null || caseSensitiveDocumentSchemes == null || !caseSensitiveDocumentSchemes.stream().anyMatch(scheme::equalsIgnoreCase)) {
-            scheme = StringUtils.lowerCase(scheme);
-            value = StringUtils.lowerCase(value);
-        }
-        return new DocumentIdentifier(value, scheme);
-    }
-
-    public String normalizeParticipantId(String participantId) {
-        return asString(normalizeParticipant(participantId));
-    }
-
-    public ParticipantIdentifierType normalizeParticipant(String participantId) {
-        return normalize(asParticipantId(participantId, configurationService.getParticipantSchemeMandatory()));
-    }
-}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/IdentifierService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/IdentifierService.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ccfd1527d33d61bb0f5b0cfbcf2ac1e1195173f
--- /dev/null
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/IdentifierService.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2017 European Commission | CEF eDelivery
+ *
+ * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ *
+ * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and limitations under the Licence.
+ */
+
+package eu.europa.ec.edelivery.smp.conversion;
+
+import eu.europa.ec.edelivery.smp.logging.SMPLogger;
+import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
+import eu.europa.ec.edelivery.smp.services.ConfigurationService;
+import eu.europa.ec.smp.api.identifiers.DocumentIdentifierFormatter;
+import eu.europa.ec.smp.api.identifiers.ParticipantIdentifierFormatter;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+
+/**
+ * Class provides tools to parse, format and normalize Document and Participant identifiers.
+ *
+ * @author gutowpa
+ * @since 3.0.0
+ */
+@Component
+public class IdentifierService {
+    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(IdentifierService.class);
+
+    ParticipantIdentifierFormatter participantIdentifierFormatter = new ParticipantIdentifierFormatter();
+    DocumentIdentifierFormatter documentIdentifierFormatter = new DocumentIdentifierFormatter();
+
+    ConfigurationService configurationService;
+
+    public IdentifierService(ConfigurationService configurationService) {
+        this.configurationService = configurationService;
+
+        configureParticipantIdentifierFormatter(configurationService.getCaseSensitiveParticipantScheme(),
+                configurationService.getParticipantSchemeMandatory(),
+                configurationService.getParticipantIdentifierSchemeRexExp());
+        configureDocumentIdentifierFormatter(configurationService.getCaseSensitiveDocumentScheme());
+    }
+
+    /**
+     * Update ParticipantIdentifierFormatter for non null values. Null values are ignored
+     *
+     * @param caseInsensitiveSchemas
+     * @param mandatoryScheme
+     */
+    public void configureParticipantIdentifierFormatter(List<String> caseInsensitiveSchemas, Boolean mandatoryScheme, Pattern allowedSchemeRegExp) {
+        if (caseInsensitiveSchemas != null) {
+            participantIdentifierFormatter.setCaseSensitiveSchemas(caseInsensitiveSchemas);
+        } else {
+            LOG.debug("Skip configure ParticipantIdentifierFormatter.caseInsensitiveSchemas for null value");
+        }
+
+        if (mandatoryScheme != null) {
+            participantIdentifierFormatter.setSchemeMandatory(mandatoryScheme.booleanValue());
+        } else {
+            LOG.debug("Skip configure ParticipantIdentifierFormatter.mandatoryScheme for null value");
+        }
+
+        if (allowedSchemeRegExp != null) {
+            participantIdentifierFormatter.setSchemeValidationPattern(allowedSchemeRegExp);
+        } else {
+            LOG.debug("Skip configure ParticipantIdentifierFormatter.allowedSchemeRegExp for null value");
+        }
+    }
+
+    public void configureDocumentIdentifierFormatter(List<String> caseInsensitiveSchemas) {
+        if (caseInsensitiveSchemas != null) {
+            documentIdentifierFormatter.setCaseSensitiveSchemas(caseInsensitiveSchemas);
+        } else {
+            LOG.debug("Skip configure DocumentIdentifierFormatter.caseInsensitiveSchemas for null value");
+        }
+    }
+
+    public DocumentIdentifier normalizeDocument(final DocumentIdentifier documentIdentifier) {
+        return documentIdentifierFormatter.normalize(documentIdentifier);
+    }
+
+    public DocumentIdentifier normalizeDocument(final String scheme, final String identifier) {
+        return documentIdentifierFormatter.normalize(scheme, identifier);
+    }
+
+    public DocumentIdentifier normalizeDocumentIdentifier(String value) {
+        return documentIdentifierFormatter.normalizeIdentifier(value);
+    }
+
+    public ParticipantIdentifierType normalizeParticipant(final String scheme, final String identifier) {
+        return participantIdentifierFormatter.normalize(scheme, identifier);
+    }
+
+    public ParticipantIdentifierType normalizeParticipant(final ParticipantIdentifierType participantIdentifier) {
+        return participantIdentifierFormatter.normalize(participantIdentifier);
+    }
+
+    public ParticipantIdentifierType normalizeParticipantIdentifier(final String participantId) {
+        return participantIdentifierFormatter.normalizeIdentifier(participantId);
+    }
+
+    public String formatParticipant(final ParticipantIdentifierType participantIdentifier) {
+        return participantIdentifierFormatter.format(participantIdentifier);
+    }
+
+    public String urlEncodedFormatParticipant(final ParticipantIdentifierType participantIdentifier) {
+        return participantIdentifierFormatter.urlEncodedFormat(participantIdentifier);
+    }
+
+    public String formatParticipant(final String scheme, final String identifier) {
+        return participantIdentifierFormatter.format(scheme, identifier);
+    }
+
+    public String formatDocument(final DocumentIdentifier documentIdentifier) {
+        return documentIdentifierFormatter.format(documentIdentifier);
+    }
+
+    public String urlEncodedFormatDocument(final DocumentIdentifier documentIdentifier) {
+        return documentIdentifierFormatter.urlEncodedFormat(documentIdentifier);
+    }
+
+    public String formatDocument(final String scheme, final String identifier) {
+        return documentIdentifierFormatter.format(scheme, identifier);
+    }
+}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverter.java
index b4b8dde29a5513a4e38116f12783f954335c1821..7a0199100fb20775b1678e0efcc7768179710e3f 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverter.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverter.java
@@ -13,17 +13,12 @@
 
 package eu.europa.ec.edelivery.smp.conversion;
 
-import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup;
 import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ExtensionType;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadataReferenceCollectionType;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
@@ -37,15 +32,15 @@ import javax.xml.stream.XMLStreamException;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
 
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.INVALID_EXTENSION_FOR_SG;
-import static eu.europa.ec.smp.api.Identifiers.EBCORE_IDENTIFIER_PREFIX;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 /**
- * Created by migueti on 26/01/2017.
+ *  Purpose of class is to test ServiceGroupService base methods
+ *
+ * @author migueti
+ * @since 3.0.0
  */
 public class ServiceGroupConverter {
 
@@ -75,10 +70,10 @@ public class ServiceGroupConverter {
     }
 
     /**
-     * Method umarshal ServiceGroup from xml string
+     * Method unmarshal ServiceGroup from xml string
      *
-     * @param serviceGroupXml
-     * @return
+     * @param serviceGroupXml service group xml
+     * @return java object Object
      */
     public static ServiceGroup unmarshal(String serviceGroupXml) {
         try {
@@ -90,7 +85,7 @@ public class ServiceGroupConverter {
     }
 
     /**
-     * Method umarshal ServiceGroup from xml bytearraz
+     * Method unmarshal ServiceGroup from xml bytearray
      *
      * @param serviceGroupXml
      * @return
@@ -98,68 +93,19 @@ public class ServiceGroupConverter {
     public static ServiceGroup unmarshal(byte[] serviceGroupXml) {
 
         try {
-            System.out.println("UNMARSHAL SERVICE GROUP " + new String(serviceGroupXml));
             Document serviceGroupDoc = parse(serviceGroupXml);
             ServiceGroup serviceGroup = getUnmarshaller().unmarshal(serviceGroupDoc, ServiceGroup.class).getValue();
-            /*
-            if (serviceGroup!=null && serviceGroup.getParticipantIdentifier()!=null
-            && StringUtils.isBlank(serviceGroup.getParticipantIdentifier().getScheme())
-            && StringUtils.startsWithAny(serviceGroup.getParticipantIdentifier().getValue(),
-                    EBCORE_IDENTIFIER_PREFIX,
-                    "::"+ EBCORE_IDENTIFIER_PREFIX)){
-                // normalize participant identifier
-                LOG.info("Normalize ebCore identifier: " + serviceGroup.getParticipantIdentifier().getValue());
-                ParticipantIdentifierType participantIdentifierType = Identifiers.asParticipantId(serviceGroup.getParticipantIdentifier().getValue(), allowNullPartcScheme);
-                serviceGroup.setParticipantIdentifier(participantIdentifierType);
-            }*/
             return serviceGroup;
         } catch (ParserConfigurationException | IOException | SAXException | JAXBException ex) {
             throw new SMPRuntimeException(ErrorCode.XML_PARSE_EXCEPTION, ex, ServiceGroup.class.getName(), ExceptionUtils.getRootCauseMessage(ex));
         }
     }
 
-    /**
-     * Method returns Oasis ServiceGroup entity with  extension and
-     * empty ServiceMetadataReferenceCollectionType. If extension can not be converted to jaxb object than
-     * ConversionException is thrown.
-     *
-     * @param dsg - database service group entity
-     * @return Oasis ServiceGroup entity or null if parameter is null
-     */
-    public static ServiceGroup toServiceGroup(DBServiceGroup dsg, boolean concatenateEBCoreID) {
-
-        if (dsg == null) {
-            return null;
-        }
-
-        ServiceGroup serviceGroup = new ServiceGroup();
-        String schema = dsg.getParticipantScheme();
-        String value = dsg.getParticipantIdentifier();
-        if (concatenateEBCoreID && StringUtils.startsWithIgnoreCase(schema, EBCORE_IDENTIFIER_PREFIX)) {
-            value = schema + ":" + value;
-            schema = null;
-        }
-        ParticipantIdentifierType identifier = new ParticipantIdentifierType(value, schema);
-        serviceGroup.setParticipantIdentifier(identifier);
-        if (dsg.getExtension() != null) {
-            try {
-                List<ExtensionType> extensions = ExtensionConverter.unmarshalExtensions(dsg.getExtension());
-                serviceGroup.getExtensions().addAll(extensions);
-            } catch (JAXBException e) {
-                throw new SMPRuntimeException(INVALID_EXTENSION_FOR_SG, e, dsg.getParticipantIdentifier(),
-                        dsg.getParticipantScheme(), ExceptionUtils.getRootCauseMessage(e));
-            }
-        }
-        serviceGroup.setServiceMetadataReferenceCollection(new ServiceMetadataReferenceCollectionType(new ArrayList()));
-        return serviceGroup;
-    }
-
     private static Document parse(String serviceGroupXml) throws ParserConfigurationException, IOException, SAXException {
         InputStream inputStream = new ByteArrayInputStream(serviceGroupXml.getBytes(UTF_8));
         return getDocumentBuilder().parse(inputStream);
     }
 
-
     private static Document parse(byte[] serviceGroupXml) throws ParserConfigurationException, IOException, SAXException {
         InputStream inputStream = new ByteArrayInputStream(serviceGroupXml);
         return getDocumentBuilder().parse(inputStream);
@@ -181,5 +127,4 @@ public class ServiceGroupConverter {
                     ExceptionUtils.getRootCauseMessage(e));
         }
     }
-
 }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceMetadataConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceMetadataConverter.java
index fc40483895d58faef37c613d41a0bf301b04227a..b90ed5c23c88a9067e17f1d2d9984e716a519f12 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceMetadataConverter.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/ServiceMetadataConverter.java
@@ -16,10 +16,7 @@ package eu.europa.ec.edelivery.smp.conversion;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
-import eu.europa.ec.smp.api.Identifiers;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadata;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -42,36 +39,35 @@ import java.io.*;
 
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.INVALID_SMD_XML;
 
-;
-
 /**
- * Created by gutowpa on 05/01/2017.
+ * @author gutowpa
+ * @since 3.0.0
  */
 public class ServiceMetadataConverter {
 
     /**
-     * Class has only static members. Is not ment to create instances  - also SONAR warning.
+     * Class has only static members. Is not meant to create instances  - also SONAR warning.
      */
-    private  ServiceMetadataConverter() {
+    private ServiceMetadataConverter() {
 
     }
 
     private static final String NS = "http://docs.oasis-open.org/bdxr/ns/SMP/2016/05";
-    private static final String DOC_SIGNED_SERVICE_METADATA_EMPTY = "<SignedServiceMetadata xmlns=\""+NS+"\"/>";
+    private static final String DOC_SIGNED_SERVICE_METADATA_EMPTY = "<SignedServiceMetadata xmlns=\"" + NS + "\"/>";
     private static final String PARSER_DISALLOW_DTD_PARSING_FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
     private static final SMPLogger LOG = SMPLoggerFactory.getLogger(ServiceMetadataConverter.class);
 
 
-    private static final ThreadLocal<Unmarshaller> jaxbUnmarshaller = ThreadLocal.withInitial( () -> {
+    private static final ThreadLocal<Unmarshaller> jaxbUnmarshaller = ThreadLocal.withInitial(() -> {
         try {
             JAXBContext jaxbContext = JAXBContext.newInstance(ServiceMetadata.class);
             return jaxbContext.createUnmarshaller();
-        }catch(JAXBException ex) {
+        } catch (JAXBException ex) {
             LOG.error("Error occurred while initializing JAXBContext for ServiceMetadata. Root Error:" +
                     ExceptionUtils.getRootCauseMessage(ex), ex);
         }
         return null;
-    } );
+    });
 
     private static Unmarshaller getUnmarshaller() {
         return jaxbUnmarshaller.get();
@@ -79,23 +75,24 @@ public class ServiceMetadataConverter {
 
     /**
      * Method parses serviceMetadata XML and envelopes it to SignedServiceMetadata.
+     *
      * @param serviceMetadataXml
      * @return w3d dom element
      */
-    public static Document toSignedServiceMetadataDocument(byte[] serviceMetadataXml)  {
+    public static Document toSignedServiceMetadataDocument(byte[] serviceMetadataXml) {
         try {
             Document docServiceMetadata = parse(serviceMetadataXml);
             Document root = parse(DOC_SIGNED_SERVICE_METADATA_EMPTY.getBytes());
             Node imported = root.importNode(docServiceMetadata.getDocumentElement(), true);
             root.getDocumentElement().appendChild(imported);
             return root;
-        }catch(ParserConfigurationException | SAXException | IOException ex){
+        } catch (ParserConfigurationException | SAXException | IOException ex) {
             throw new SMPRuntimeException(INVALID_SMD_XML, ex, ExceptionUtils.getRootCauseMessage(ex));
         }
     }
 
 
-    public static ServiceMetadata unmarshal(byte[] serviceMetadataXml){
+    public static ServiceMetadata unmarshal(byte[] serviceMetadataXml) {
         try {
             Document serviceMetadataDoc = parse(serviceMetadataXml);
             ServiceMetadata serviceMetadata = getUnmarshaller().unmarshal(serviceMetadataDoc, ServiceMetadata.class).getValue();
@@ -110,14 +107,14 @@ public class ServiceMetadataConverter {
         return getDocumentBuilder().parse(inputStream);
     }
 
-    public static String toString(Document doc) throws TransformerException, UnsupportedEncodingException {
+    public static String toString(Document doc) throws TransformerException {
         Transformer transformer = createNewSecureTransformer();
         StringWriter writer = new StringWriter();
         transformer.transform(new DOMSource(doc), new StreamResult(writer));
         return writer.toString();
     }
 
-    public static byte[] toByteArray(Document doc) throws TransformerException, UnsupportedEncodingException {
+    public static byte[] toByteArray(Document doc) throws TransformerException {
         Transformer transformer = createNewSecureTransformer();
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(doc), new StreamResult(stream));
@@ -137,8 +134,4 @@ public class ServiceMetadataConverter {
 
         return factory.newTransformer();
     }
-
-
-
-
 }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/SMPRevisionListener.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/SMPRevisionListener.java
index e1ef341a5f1197e263ae66e4b8f01546fcd3ad7b..24c0136f7dcccbfdfacaa62f867eaaf2b75c3e5e 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/SMPRevisionListener.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/SMPRevisionListener.java
@@ -1,7 +1,6 @@
 package eu.europa.ec.edelivery.smp.data.dao;
 
 import eu.europa.ec.edelivery.smp.data.model.DBRevisionLog;
-import eu.europa.ec.edelivery.smp.services.ServiceGroupService;
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.envers.RevisionListener;
 import org.slf4j.Logger;
@@ -13,7 +12,7 @@ import java.time.OffsetDateTime;
 
 public class SMPRevisionListener implements RevisionListener {
 
-    private static final Logger LOG = LoggerFactory.getLogger(ServiceGroupService.class);
+    private static final Logger LOG = LoggerFactory.getLogger(SMPRevisionListener.class);
 
     @Override
     public void newRevision(Object revisionEntity) {
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java
index d2070c6575fe4c06ba0a4167401f8dd1219aea36..8c504ca2edf80aacc2155dfef10debff71226df7 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java
@@ -36,23 +36,28 @@ public enum SMPPropertyEnum {
     HTTP_PROXY_USER("smp.proxy.user", "", "The proxy user",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, STRING),
 
-    PARTC_SCH_REGEXP("identifiersBehaviour.ParticipantIdentifierScheme.validationRegex", "^$|^(?!^.{26})([a-z0-9]+-[a-z0-9]+-[a-z0-9]+)$|^urn:oasis:names:tc:ebcore:partyid-type:(iso6523|unregistered)(:.+)?$", "Participant Identifier Schema of each PUT ServiceGroup request is validated against this schema.",
+    PARTC_SCH_VALIDATION_REGEXP("identifiersBehaviour.ParticipantIdentifierScheme.validationRegex", "^$|^(?!^.{26})([a-z0-9]+-[a-z0-9]+-[a-z0-9]+)$|^urn:oasis:names:tc:ebcore:partyid-type:(iso6523|unregistered)(:.+)?$",
+            "Regular expression for validating the participant schema!",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, REGEXP),
     PARTC_SCH_REGEXP_MSG("identifiersBehaviour.ParticipantIdentifierScheme.validationRegexMessage",
             "Participant scheme must start with:urn:oasis:names:tc:ebcore:partyid-type:(iso6523:|unregistered:) OR must be up to 25 characters long with form [domain]-[identifierArea]-[identifierType] (ex.: 'busdox-actorid-upis') and may only contain the following characters: [a-z0-9].", "Error message for UI",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, STRING),
     PARTC_SCH_MANDATORY("identifiersBehaviour.scheme.mandatory", "true", "Scheme for participant identifier is mandatory",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, BOOLEAN),
-
-    PARTC_EBCOREPARTYID_CONCATENATE("identifiersBehaviour.ParticipantIdentifierScheme.ebCoreId.concatenate", "false",
-            "Concatenate ebCore party id in XML responses <ParticipantIdentifier>urn:oasis:names:tc:ebcore:partyid-type:unregistered:test-ebcore-id</ParticipantIdentifier>",
-            OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, BOOLEAN),
+    PARTC_SCH_SPLIT_REGEXP("identifiersBehaviour.splitPattern", "^(?i)\\s*?(?<scheme>urn:oasis:names:tc:ebcore:partyid-type:(iso6523:[0-9]{4}|unregistered(:[^:]+)?))::?(?<identifier>.+)?\\s*$",
+             "Regular expression with groups <scheme> and <identifier> for splitting the identifiers to scheme and identifier part!",  OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, REGEXP),
+    PARTC_SCH_URN_REGEXP("identifiersBehaviour.ParticipantIdentifierScheme.urn.concatenate",
+            "", "Regular expression to detect URN party identifiers. If the party identifier schema matches the regexp, then the party identifier is concatenated with a single colon in XML responses. Else it is handled as OASIS SMP party identifier. Example: ^(?i)(urn:)|(mailto:).*$",
+            OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, REGEXP),
 
     CS_PARTICIPANTS("identifiersBehaviour.caseSensitive.ParticipantIdentifierSchemes", "sensitive-participant-sc1|sensitive-participant-sc2", "Specifies schemes of participant identifiers that must be considered CASE-SENSITIVE.",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, LIST_STRING),
     CS_DOCUMENTS("identifiersBehaviour.caseSensitive.DocumentIdentifierSchemes", "casesensitive-doc-scheme1|casesensitive-doc-scheme2", "Specifies schemes of document identifiers that must be considered CASE-SENSITIVE.",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, LIST_STRING),
 
+    DOCUMENT_RESTRICTION_CERT_TYPES("document.restriction.allowed.certificate.types", "", "Allowed certificate types registered when composing service metadata. Empty value means no restrictions, for other values see the java KeyFactory Algorithms for example RSA|EC|Ed25519|Ed448",
+            OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, LIST_STRING),
+
     // SML integration!
     SML_ENABLED("bdmsl.integration.enabled", "false", "BDMSL (SML) integration ON/OFF switch",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, BOOLEAN),
@@ -357,13 +362,17 @@ public enum SMPPropertyEnum {
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, INTEGER),
     SMP_ALERT_MAIL_FROM("smp.alert.mail.from", "test@alert-send-mail.eu", "Alert send mail",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, EMAIL),
-
+    // deprecated properties
     CLIENT_CERT_HEADER_ENABLED_DEPRECATED("authentication.blueCoat.enabled", "false", "Property was replaced by property: smp.automation.authentication.external.tls.clientCert.enabled",
             OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, BOOLEAN),
-    DOCUMENT_RESTRICTION_CERT_TYPES("document.restriction.allowed.certificate.types", "", "Allowed certificate types registered when composing service metadata. Empty value means no restrictions, for other values see the java KeyFactory Algorithms for examples: RSA|EC|Ed25519|Ed448",
-            OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, LIST_STRING),
+
+    PARTC_EBCOREPARTYID_CONCATENATE("identifiersBehaviour.ParticipantIdentifierScheme.ebCoreId.concatenate", "false",
+            "Concatenate ebCore party id in XML responses <ParticipantIdentifier>urn:oasis:names:tc:ebcore:partyid-type:unregistered:test-ebcore-id</ParticipantIdentifier>",
+            OPTIONAL, NOT_ENCRYPTED, NO_RESTART_NEEDED, BOOLEAN),
+
     ;
 
+
     String property;
     String defValue;
     String desc;
@@ -426,11 +435,11 @@ public enum SMPPropertyEnum {
         if (keyTrim == null) {
             return Optional.empty();
         }
-        return Arrays.asList(values()).stream().filter(val -> val.getProperty().equalsIgnoreCase(keyTrim)).findAny();
+        return Arrays.stream(values()).filter(val -> val.getProperty().equalsIgnoreCase(keyTrim)).findAny();
     }
 
     public static List<SMPPropertyEnum> getRestartOnChangeProperties() {
-        return Arrays.asList(values()).stream().filter(val -> val.isRestartNeeded()).collect(Collectors.toList());
+        return Arrays.stream(values()).filter(SMPPropertyEnum::isRestartNeeded).collect(Collectors.toList());
     }
 
     public Pattern getValuePattern() {
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ConfigurationService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ConfigurationService.java
index 1a6dad50b2d331e6341ec364d4e5975854b2e526..29207f38c64c33c1b036edb3cf35941ba3394b5d 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ConfigurationService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ConfigurationService.java
@@ -36,23 +36,17 @@ public class ConfigurationService {
 
 
     public Pattern getParticipantIdentifierSchemeRexExp() {
-        return configurationDAO.getCachedPropertyValue(PARTC_SCH_REGEXP);
+        return configurationDAO.getCachedPropertyValue(PARTC_SCH_VALIDATION_REGEXP);
     }
 
     public String getParticipantIdentifierSchemeRexExpPattern() {
-        return configurationDAO.getCachedProperty(PARTC_SCH_REGEXP);
+        return configurationDAO.getCachedProperty(PARTC_SCH_VALIDATION_REGEXP);
     }
 
     public String getParticipantIdentifierSchemeRexExpMessage() {
         return configurationDAO.getCachedPropertyValue(PARTC_SCH_REGEXP_MSG);
     }
 
-    public Boolean getForceConcatenateEBCorePartyId() {
-        Boolean value = configurationDAO.getCachedPropertyValue(PARTC_EBCOREPARTYID_CONCATENATE);
-        // true by default
-        return value == null || value;
-    }
-
     public Pattern getPasswordPolicyRexExp() {
         return configurationDAO.getCachedPropertyValue(PASSWORD_POLICY_REGULAR_EXPRESSION);
     }
@@ -158,6 +152,14 @@ public class ConfigurationService {
         return value != null && value;
     }
 
+    public Pattern getParticipantIdentifierSplitRexExp() {
+        return configurationDAO.getCachedPropertyValue(PARTC_SCH_SPLIT_REGEXP);
+    }
+
+    public Pattern getParticipantIdentifierUrnValidationRexExp() {
+        return configurationDAO.getCachedPropertyValue(PARTC_SCH_URN_REGEXP);
+    }
+
     public boolean isProxyEnabled() {
         String proxyHost = configurationDAO.getCachedProperty(HTTP_PROXY_HOST);
         return !StringUtils.isBlank(proxyHost);
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/DomainService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/DomainService.java
index 952eb5346373619ec4bb502116e588fb7f99fd24..26684ac935b38da134b4e43228426546b92706da 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/DomainService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/DomainService.java
@@ -1,22 +1,17 @@
 package eu.europa.ec.edelivery.smp.services;
 
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
 import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
 import eu.europa.ec.edelivery.smp.data.dao.ServiceGroupDao;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup;
-import eu.europa.ec.edelivery.smp.data.model.DBServiceGroupDomain;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
 import eu.europa.ec.edelivery.smp.services.ui.filters.ServiceGroupFilter;
-import eu.europa.ec.edelivery.smp.sml.SmlConnector;
 import org.apache.commons.lang3.StringUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -24,9 +19,6 @@ import java.util.Optional;
 import java.util.regex.Pattern;
 
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*;
-import static eu.europa.ec.edelivery.smp.logging.SMPMessageCode.BUS_SML_REGISTER_SERVICE_GROUP;
-import static eu.europa.ec.edelivery.smp.logging.SMPMessageCode.BUS_SML_REGISTER_SERVICE_GROUP_ALREADY_REGISTERED;
-import static eu.europa.ec.edelivery.smp.logging.SMPMessageCode.BUS_SML_REGISTER_SERVICE_GROUP_FAILED;
 
 
 /**
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationService.java
index b1bfc97818ac3c77bd5c7cde96cb4a346bc8724c..3c64d129c09aa72bea48da149e8ca6e80becaaa0 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationService.java
@@ -1,7 +1,7 @@
 package eu.europa.ec.edelivery.smp.services;
 
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
 import eu.europa.ec.edelivery.smp.data.dao.ServiceGroupDao;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
@@ -34,6 +34,7 @@ import static eu.europa.ec.edelivery.smp.logging.SMPMessageCode.*;
 public class SMLIntegrationService {
 
     private static final SMPLogger LOG = SMPLoggerFactory.getLogger(SMLIntegrationService.class);
+    private static final String ERROR_MESSAGE_DNS_NOT_ENABLED = "SML integration is not enabled!";
 
     @Autowired
     private ConfigurationService configurationService;
@@ -48,7 +49,7 @@ public class SMLIntegrationService {
     private DomainDao domainDao;
 
     @Autowired
-    private CaseSensitivityNormalizer caseSensitivityNormalizer;
+    private IdentifierService identifierService;
 
 
     /**
@@ -60,7 +61,7 @@ public class SMLIntegrationService {
     @Transactional
     public void registerDomain(DBDomain domain) {
         if (!isSMLIntegrationEnabled()) {
-            throw new SMPRuntimeException(CONFIGURATION_ERROR, "SML integration is not enabled!");
+            throw new SMPRuntimeException(CONFIGURATION_ERROR, ERROR_MESSAGE_DNS_NOT_ENABLED);
         }
         domain.setSmlRegistered(true);
         domainDao.update(domain);
@@ -77,7 +78,7 @@ public class SMLIntegrationService {
     @Transactional
     public void unRegisterDomain(DBDomain domain) {
         if (!isSMLIntegrationEnabled()) {
-            throw new SMPRuntimeException(CONFIGURATION_ERROR, "SML integration is not enabled!");
+            throw new SMPRuntimeException(CONFIGURATION_ERROR, ERROR_MESSAGE_DNS_NOT_ENABLED);
         }
 
         domain.setSmlRegistered(false);
@@ -106,9 +107,8 @@ public class SMLIntegrationService {
         DBServiceGroupDomain serviceGroupDomain = getAndValidateServiceGroupDomain(participantId,
                 participantSchema, domainCode, BUS_SML_REGISTER_SERVICE_GROUP_FAILED);
 
-        ParticipantIdentifierType normalizedParticipantId = caseSensitivityNormalizer
-                .normalizeParticipantIdentifier(participantSchema,
-                        participantId);
+        ParticipantIdentifierType normalizedParticipantId = identifierService
+                .normalizeParticipant(participantSchema, participantId);
 
 
         // register only not registered services
@@ -171,9 +171,8 @@ public class SMLIntegrationService {
     public boolean unregisterParticipantFromSML(String participantId, String participantSchema, DBDomain domain) {
         LOG.businessDebug(BUS_SML_UNREGISTER_SERVICE_GROUP, participantId, participantSchema, domain.getDomainCode());
 
-        ParticipantIdentifierType normalizedParticipantId = caseSensitivityNormalizer
-                .normalizeParticipantIdentifier(participantSchema,
-                        participantId);
+        ParticipantIdentifierType normalizedParticipantId = identifierService
+                .normalizeParticipant(participantSchema, participantId);
 
         // unregister only registered participants
         return smlConnector.unregisterFromDns(normalizedParticipantId, domain);
@@ -191,9 +190,8 @@ public class SMLIntegrationService {
     public boolean registerParticipantToSML(String participantId, String participantSchema, DBDomain domain) {
         LOG.businessDebug(BUS_SML_UNREGISTER_SERVICE_GROUP, participantId, participantSchema, domain.getDomainCode());
 
-        ParticipantIdentifierType normalizedParticipantId = caseSensitivityNormalizer
-                .normalizeParticipantIdentifier(participantSchema,
-                        participantId);
+        ParticipantIdentifierType normalizedParticipantId = identifierService
+                .normalizeParticipant(participantSchema, participantId);
 
         // unregister only  registered participants
         return smlConnector.registerInDns(normalizedParticipantId, domain);
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java
index 8a8bfe61d39581417f54e39553e4a5f296ddb89b..a180872cba8b9fb345c56fdabc5a1d4fbe2ad07c 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java
@@ -13,7 +13,8 @@
 
 package eu.europa.ec.edelivery.smp.services;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.ExtensionConverter;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.conversion.ServiceGroupConverter;
 import eu.europa.ec.edelivery.smp.data.dao.ServiceGroupDao;
 import eu.europa.ec.edelivery.smp.data.dao.UserDao;
@@ -28,32 +29,42 @@ import eu.europa.ec.edelivery.smp.logging.SMPMessageCode;
 import eu.europa.ec.edelivery.smp.sml.SmlConnector;
 import eu.europa.ec.edelivery.text.DistinguishedNamesCodingUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ExtensionType;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadataReferenceCollectionType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.xml.bind.JAXBException;
 import java.io.UnsupportedEncodingException;
+import java.util.List;
 import java.util.Optional;
+import java.util.regex.Pattern;
 
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*;
 import static java.net.URLDecoder.decode;
 import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 /**
- * Created by gutowpa on 14/11/2017.
+ * Purpose of class is to test ServiceGroupService base methods
+ *
+ * @author gutowpa
+ * @since 3.0.0
  */
 @Service
 public class ServiceGroupService {
 
 
+
     private static final String UTF_8 = "UTF-8";
 
     private static final SMPLogger LOG = SMPLoggerFactory.getLogger(ServiceGroupService.class);
 
     @Autowired
-    private CaseSensitivityNormalizer caseSensitivityNormalizer;
+    private IdentifierService identifierService;
 
     @Autowired
     private ServiceGroupDao serviceGroupDao;
@@ -80,14 +91,14 @@ public class ServiceGroupService {
      */
     public ServiceGroup getServiceGroup(ParticipantIdentifierType participantId) {
         // normalize participant identifier
-        ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(participantId);
+        ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(participantId);
         Optional<DBServiceGroup> sg = serviceGroupDao.findServiceGroup(normalizedServiceGroupId.getValue(),
                 normalizedServiceGroupId.getScheme());
         if (!sg.isPresent()) {
             throw new SMPRuntimeException(SG_NOT_EXISTS, normalizedServiceGroupId.getValue(),
                     normalizedServiceGroupId.getScheme());
         }
-        return ServiceGroupConverter.toServiceGroup(sg.get(), configurationService.getForceConcatenateEBCorePartyId());
+        return toServiceGroup(sg.get(), configurationService.getParticipantIdentifierUrnValidationRexExp());
     }
 
     /**
@@ -103,7 +114,7 @@ public class ServiceGroupService {
     public boolean saveServiceGroup(ServiceGroup serviceGroup, String domain, String serviceGroupOwner, String authenticatedUser) {
 
         // normalize participant identifier
-        ParticipantIdentifierType normalizedParticipantId = caseSensitivityNormalizer.normalize(serviceGroup.getParticipantIdentifier());
+        ParticipantIdentifierType normalizedParticipantId = identifierService.normalizeParticipant(serviceGroup.getParticipantIdentifier());
         LOG.businessDebug(SMPMessageCode.BUS_SAVE_SERVICE_GROUP, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme());
 
         // normalize service group owner
@@ -243,7 +254,7 @@ public class ServiceGroupService {
      */
     @Transactional
     public boolean isServiceGroupOwner(String ownerIdentifier, String serviceGroupIdentifier) {
-        ParticipantIdentifierType pt = caseSensitivityNormalizer.normalizeParticipant(serviceGroupIdentifier);
+        ParticipantIdentifierType pt = identifierService.normalizeParticipantIdentifier(serviceGroupIdentifier);
         Optional<DBServiceGroup> osg = serviceGroupDao.findServiceGroup(pt.getValue(), pt.getScheme());
         Optional<DBUser> own = userDao.findUserByIdentifier(ownerIdentifier);
         return osg.isPresent() && own.isPresent() && osg.get().getUsers().contains(own.get());
@@ -252,7 +263,7 @@ public class ServiceGroupService {
 
     @Transactional
     public void deleteServiceGroup(ParticipantIdentifierType serviceGroupId) {
-        final ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId);
+        final ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(serviceGroupId);
 
         Optional<DBServiceGroup> dbServiceGroup = serviceGroupDao.findServiceGroup(normalizedServiceGroupId.getValue(),
                 normalizedServiceGroupId.getScheme());
@@ -272,4 +283,42 @@ public class ServiceGroupService {
 
         serviceGroupDao.removeServiceGroup(dsg);
     }
+
+    /**
+     * Method returns Oasis ServiceGroup entity with  extension and
+     * empty ServiceMetadataReferenceCollectionType. If extension can not be converted to jaxb object than
+     * ConversionException is thrown.
+     *
+     * @param dsg                - database service group entity
+     * @param concatenatePartyId - regular expression if servicegroup in party identifier must be concatenate and returned in string value.
+     * @return Oasis ServiceGroup entity or null if parameter is null
+     */
+    public ServiceGroup toServiceGroup(DBServiceGroup dsg, Pattern concatenatePartyId) {
+
+        if (dsg == null) {
+            return null;
+        }
+
+        ServiceGroup serviceGroup = new ServiceGroup();
+        String schema = dsg.getParticipantScheme();
+        String value = dsg.getParticipantIdentifier();
+
+        if (StringUtils.isNotBlank(schema) && concatenatePartyId != null && concatenatePartyId.matcher(schema).matches()) {
+            value = identifierService.formatParticipant(schema, value);
+            schema = null;
+        }
+        ParticipantIdentifierType identifier = new ParticipantIdentifierType(value, schema);
+        serviceGroup.setParticipantIdentifier(identifier);
+        if (dsg.getExtension() != null) {
+            try {
+                List<ExtensionType> extensions = ExtensionConverter.unmarshalExtensions(dsg.getExtension());
+                serviceGroup.getExtensions().addAll(extensions);
+            } catch (JAXBException e) {
+                throw new SMPRuntimeException(INVALID_EXTENSION_FOR_SG, e, dsg.getParticipantIdentifier(),
+                        dsg.getParticipantScheme(), ExceptionUtils.getRootCauseMessage(e));
+            }
+        }
+        serviceGroup.setServiceMetadataReferenceCollection(new ServiceMetadataReferenceCollectionType());
+        return serviceGroup;
+    }
 }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java
index a8e3910937c6555062d706c2a3a9ca0654889017..579e285f116ca860fac9e9d55dcd7721029c3b34 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java
@@ -13,7 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.services;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.data.dao.ServiceGroupDao;
 import eu.europa.ec.edelivery.smp.data.dao.ServiceMetadataDao;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
@@ -44,7 +44,7 @@ import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.SG_NOT_EXISTS;
 public class ServiceMetadataService {
 
     @Autowired
-    private CaseSensitivityNormalizer caseSensitivityNormalizer;
+    private IdentifierService identifierService;
 
     @Autowired
     private ServiceMetadataDao serviceMetadataDao;
@@ -62,8 +62,8 @@ public class ServiceMetadataService {
     @Transactional
     public Document getServiceMetadataDocument(ParticipantIdentifierType serviceGroupId, DocumentIdentifier documentId) {
 
-        ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId);
-        DocumentIdentifier normalizedDocId = caseSensitivityNormalizer.normalize(documentId);
+        ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(serviceGroupId);
+        DocumentIdentifier normalizedDocId = identifierService.normalizeDocument(documentId);
 
         Optional<DBServiceMetadata> osmd = serviceMetadataDao.findServiceMetadata(normalizedServiceGroupId.getValue(),
                 normalizedServiceGroupId.getScheme(),normalizedDocId.getValue(),normalizedDocId.getScheme());
@@ -90,8 +90,8 @@ public class ServiceMetadataService {
     @Transactional
     public boolean saveServiceMetadata(String domain, ParticipantIdentifierType serviceGroupId, DocumentIdentifier documentId, byte[] xmlContent) {
 
-        ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId);
-        DocumentIdentifier normalizedDocId = caseSensitivityNormalizer.normalize(documentId);
+        ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(serviceGroupId);
+        DocumentIdentifier normalizedDocId = identifierService.normalizeDocument(documentId);
 
         Optional<DBServiceGroup> serviceGroup = serviceGroupDao.findServiceGroup(normalizedServiceGroupId.getValue(),
                 normalizedServiceGroupId.getScheme());
@@ -105,10 +105,7 @@ public class ServiceMetadataService {
         Optional<DBServiceMetadata> doc =  serviceMetadataDao.findServiceMetadata(normalizedServiceGroupId.getValue(),
                 normalizedServiceGroupId.getScheme(), normalizedDocId.getValue(), normalizedDocId.getScheme());
 
-        //TODO: domain for servicegroup!!
-        //DBDomain dbDomain = serviceDomain.getDomain(domain);
-
-        boolean alreadyExisted = false;
+        boolean alreadyExisted;
         if (doc.isPresent()){
             DBServiceMetadata smd = doc.get();
             smd.setXmlContent(xmlContent);
@@ -133,8 +130,8 @@ public class ServiceMetadataService {
     @Transactional
     public void deleteServiceMetadata(String domain, ParticipantIdentifierType serviceGroupId, DocumentIdentifier documentId) {
 
-        ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId);
-        DocumentIdentifier normalizedDocId = caseSensitivityNormalizer.normalize(documentId);
+        ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(serviceGroupId);
+        DocumentIdentifier normalizedDocId = identifierService.normalizeDocument(documentId);
 
 
         Optional<DBServiceMetadata> oDoc = serviceMetadataDao.findServiceMetadata(normalizedServiceGroupId.getValue(),
@@ -151,12 +148,12 @@ public class ServiceMetadataService {
 
     public List<DocumentIdentifier> findServiceMetadataIdentifiers(ParticipantIdentifierType participantId) {
 
-        ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(participantId);
+        ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(participantId);
         List<DBServiceMetadata> metadata = serviceMetadataDao.getAllMetadataForServiceGroup(
                 normalizedServiceGroupId.getValue(),
                 normalizedServiceGroupId.getScheme());
 
-        List<DocumentIdentifier> documentIds = new ArrayList();
+        List<DocumentIdentifier> documentIds = new ArrayList<>();
         for (DBServiceMetadata md : metadata) {
             DocumentIdentifier documentIdentifier = new DocumentIdentifier(md.getDocumentIdentifier(),
                     md.getDocumentIdentifierScheme());
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java
index 8956298b164bacea5980700974fc2b7c30026def..e6ac0e25860fbe2bf9f9a8681b02f9f3efadaac2 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java
@@ -1,7 +1,7 @@
 package eu.europa.ec.edelivery.smp.services.ui;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
 import eu.europa.ec.edelivery.smp.conversion.ExtensionConverter;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter;
 import eu.europa.ec.edelivery.smp.data.dao.BaseDao;
 import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
@@ -41,20 +41,20 @@ public class UIServiceGroupService extends UIServiceBase<DBServiceGroup, Service
     protected final DomainDao domainDao;
     protected final ServiceGroupDao serviceGroupDao;
     protected final UserDao userDao;
-    protected final CaseSensitivityNormalizer caseSensitivityNormalizer;
+    protected final IdentifierService identifierService;
     protected final SMLIntegrationService smlIntegrationService;
     protected final ConfigurationService configurationService;
 
     public UIServiceGroupService(DomainDao domainDao,
                                  ServiceGroupDao serviceGroupDao,
                                  UserDao userDao,
-                                 CaseSensitivityNormalizer caseSensitivityNormalizer,
+                                 IdentifierService identifierService,
                                  SMLIntegrationService smlIntegrationService,
                                  ConfigurationService configurationService) {
         this.domainDao = domainDao;
         this.serviceGroupDao = serviceGroupDao;
         this.userDao = userDao;
-        this.caseSensitivityNormalizer = caseSensitivityNormalizer;
+        this.identifierService = identifierService;
         this.smlIntegrationService = smlIntegrationService;
         this.configurationService = configurationService;
     }
@@ -115,7 +115,7 @@ public class UIServiceGroupService extends UIServiceBase<DBServiceGroup, Service
     @Transactional
     public ServiceGroupRO getOwnedServiceGroupById(Long userId, Long serviceGroupId) {
         DBServiceGroup dbServiceGroup = getDatabaseDao().find(serviceGroupId);
-        if (isServiceGroupOwner(userId,dbServiceGroup )){
+        if (isServiceGroupOwner(userId, dbServiceGroup)) {
             convertToRo(dbServiceGroup);
         }
         return null;
@@ -123,13 +123,14 @@ public class UIServiceGroupService extends UIServiceBase<DBServiceGroup, Service
 
     /**
      * Method validates if any of the service group users contains userID
+     *
      * @param userId
      * @param dbServiceGroup
      * @return
      */
-    protected boolean isServiceGroupOwner(Long userId,  DBServiceGroup dbServiceGroup){
-        return dbServiceGroup!=null &&
-                dbServiceGroup.getUsers().stream().filter(user ->user.getId().equals(userId)).findAny().isPresent();
+    protected boolean isServiceGroupOwner(Long userId, DBServiceGroup dbServiceGroup) {
+        return dbServiceGroup != null &&
+                dbServiceGroup.getUsers().stream().filter(user -> user.getId().equals(userId)).findAny().isPresent();
     }
 
     @Transactional
@@ -283,11 +284,13 @@ public class UIServiceGroupService extends UIServiceBase<DBServiceGroup, Service
     }
 
     private void normalizeIdentifiers(ServiceGroupRO sgo) {
-        ParticipantIdentifierType pti = caseSensitivityNormalizer.normalizeParticipant(sgo.getParticipantScheme() + "::" + sgo.getParticipantIdentifier());
+        ParticipantIdentifierType pti = identifierService.normalizeParticipant(sgo.getParticipantScheme(),
+                sgo.getParticipantIdentifier());
         sgo.setParticipantScheme(pti.getScheme());
         sgo.setParticipantIdentifier(pti.getValue());
         sgo.getServiceMetadata().forEach(smd -> {
-            DocumentIdentifier dit = caseSensitivityNormalizer.normalizeDocumentIdentifier(smd.getDocumentIdentifierScheme(), smd.getDocumentIdentifier());
+            DocumentIdentifier dit = identifierService.normalizeDocument(smd.getDocumentIdentifierScheme(),
+                    smd.getDocumentIdentifier());
             smd.setDocumentIdentifierScheme(dit.getScheme());
             smd.setDocumentIdentifier(dit.getValue());
 
@@ -555,7 +558,7 @@ public class UIServiceGroupService extends UIServiceBase<DBServiceGroup, Service
 
         ServiceMetadata smd = ServiceMetadataConverter.unmarshal(buff);
         if (smd.getServiceInformation() != null) {
-            DocumentIdentifier di = caseSensitivityNormalizer.normalize(smd.getServiceInformation().getDocumentIdentifier());
+            DocumentIdentifier di = identifierService.normalizeDocument(smd.getServiceInformation().getDocumentIdentifier());
             if (Objects.equals(di.getScheme(), serviceMetadataRO.getDocumentIdentifierScheme())
                     && Objects.equals(di.getValue(), serviceMetadataRO.getDocumentIdentifier())) {
 
@@ -634,7 +637,8 @@ public class UIServiceGroupService extends UIServiceBase<DBServiceGroup, Service
 
         byte[] buff = validateServiceMetadata(serviceMetadataRO);
         DBServiceMetadata dbServiceMetadata = new DBServiceMetadata();
-        DocumentIdentifier docIdent = caseSensitivityNormalizer.normalizeDocumentIdentifier(serviceMetadataRO.getDocumentIdentifierScheme(), serviceMetadataRO.getDocumentIdentifier());
+        DocumentIdentifier docIdent = identifierService.normalizeDocument(serviceMetadataRO.getDocumentIdentifierScheme(),
+                serviceMetadataRO.getDocumentIdentifier());
         dbServiceMetadata.setDocumentIdentifier(docIdent.getValue());
         dbServiceMetadata.setDocumentIdentifierScheme(docIdent.getScheme());
         dbServiceMetadata.setXmlContent(buff);
@@ -677,9 +681,10 @@ public class UIServiceGroupService extends UIServiceBase<DBServiceGroup, Service
         } // if new check if service group already exist
 
         if (serviceGroup.getStatusAction() == EntityROStatus.NEW.getStatusNumber()) {
-            ParticipantIdentifierType normalizedParticipant = caseSensitivityNormalizer.normalizeParticipantIdentifier(
-                    serviceGroup.getParticipantScheme(),
-                    serviceGroup.getParticipantIdentifier());
+            ParticipantIdentifierType normalizedParticipant = identifierService
+                    .normalizeParticipant(
+                            serviceGroup.getParticipantScheme(),
+                            serviceGroup.getParticipantIdentifier());
             Optional<DBServiceGroup> sg = serviceGroupDao.findServiceGroup(normalizedParticipant.getValue(),
                     normalizedParticipant.getScheme());
             if (sg.isPresent()) {
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java
index 8a43d193a53127f7d8714a454499c274542f56cc..8a0aea1af38389970163f2b0d181f6d0685eaf0b 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java
@@ -1,7 +1,7 @@
 package eu.europa.ec.edelivery.smp.services.ui;
 
 import eu.europa.ec.edelivery.security.utils.X509CertificateUtils;
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter;
 import eu.europa.ec.edelivery.smp.data.dao.BaseDao;
 import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
@@ -46,14 +46,14 @@ public class UIServiceMetadataService extends UIServiceBase<DBServiceMetadata, S
     protected final DomainDao domainDao;
     protected final ServiceMetadataDao serviceMetadataDao;
     protected final UserDao userDao;
-    protected final CaseSensitivityNormalizer caseSensitivityNormalizer;
+    protected final IdentifierService caseSensitivityNormalizer;
     protected final ConfigurationService configurationService;
 
 
     public UIServiceMetadataService(DomainDao domainDao,
                                     ServiceMetadataDao serviceMetadataDao,
                                     UserDao userDao,
-                                    CaseSensitivityNormalizer caseSensitivityNormalizer,
+                                    IdentifierService caseSensitivityNormalizer,
                                     ConfigurationService configurationService) {
         this.domainDao = domainDao;
         this.serviceMetadataDao = serviceMetadataDao;
@@ -119,10 +119,10 @@ public class UIServiceMetadataService extends UIServiceBase<DBServiceMetadata, S
             }
 
 
-            DocumentIdentifier headerDI = caseSensitivityNormalizer.normalizeDocumentIdentifier(
+            DocumentIdentifier headerDI = caseSensitivityNormalizer.normalizeDocument(
                     serviceMetadataRO.getDocumentIdentifierScheme(),
                     serviceMetadataRO.getDocumentIdentifier());
-            ParticipantIdentifierType headerPI = caseSensitivityNormalizer.normalizeParticipantIdentifier(
+            ParticipantIdentifierType headerPI = caseSensitivityNormalizer.normalizeParticipant(
                     serviceMetadataRO.getParticipantScheme(),
                     serviceMetadataRO.getParticipantIdentifier());
 
@@ -145,8 +145,8 @@ public class UIServiceMetadataService extends UIServiceBase<DBServiceMetadata, S
             }
 
             if (smd.getServiceInformation() != null) {
-                DocumentIdentifier xmlDI = caseSensitivityNormalizer.normalize(smd.getServiceInformation().getDocumentIdentifier());
-                ParticipantIdentifierType xmlPI = caseSensitivityNormalizer.normalize(smd.getServiceInformation().getParticipantIdentifier());
+                DocumentIdentifier xmlDI = caseSensitivityNormalizer.normalizeDocument(smd.getServiceInformation().getDocumentIdentifier());
+                ParticipantIdentifierType xmlPI = caseSensitivityNormalizer.normalizeParticipant(smd.getServiceInformation().getParticipantIdentifier());
                 if (!xmlDI.equals(headerDI)) {
                     serviceMetadataRO.setErrorMessage("Document identifier and scheme do not match!");
                     return serviceMetadataRO;
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UITruststoreService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UITruststoreService.java
index 53f20f7f87694359160174bd986759f04c57f9fa..d28271257a263db49d37d8e831c2f07dfb5a2b65 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UITruststoreService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UITruststoreService.java
@@ -276,6 +276,7 @@ public class UITruststoreService {
             LOG.debug("No certificate key types configured. Skip certificate key validation.");
             return;
         }
+
         PublicKey certKey = x509Certificate.getPublicKey();
         if (!StringUtils.equalsAnyIgnoreCase(certKey.getAlgorithm(), allowedCertificateKeyTypes.toArray(new String[]{}))) {
             throw new CertificateException("Certificate does not have allowed key algorithm type! Key type ["
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/sml/SmlConnector.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/sml/SmlConnector.java
index 6c5083061610ff0395c3009d8d1ed2fc0af02a07..f6cb2c301a6ed00d5c9402da6b54fccaa984a19f 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/sml/SmlConnector.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/sml/SmlConnector.java
@@ -17,6 +17,7 @@ import eu.europa.ec.bdmsl.ws.soap.BadRequestFault;
 import eu.europa.ec.bdmsl.ws.soap.IManageParticipantIdentifierWS;
 import eu.europa.ec.bdmsl.ws.soap.IManageServiceMetadataWS;
 import eu.europa.ec.bdmsl.ws.soap.NotFoundFault;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import eu.europa.ec.edelivery.smp.data.ui.CertificateRO;
 import eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum;
@@ -58,7 +59,6 @@ import java.util.*;
 
 import static eu.europa.ec.edelivery.smp.conversion.SmlIdentifierConverter.toBusdoxParticipantId;
 import static eu.europa.ec.edelivery.smp.exceptions.SMLErrorMessages.*;
-import static eu.europa.ec.smp.api.Identifiers.asString;
 
 /**
  * Component responsible for building SOAP request and calling BDMSL.
@@ -85,15 +85,19 @@ public class SmlConnector implements ApplicationContextAware {
     @Autowired
     UITruststoreService truststoreService;
 
+    @Autowired
+    IdentifierService identifierService;
+
     private ApplicationContext ctx;
 
+
     public boolean registerInDns(ParticipantIdentifierType normalizedParticipantId, DBDomain domain) {
 
 
         if (!configurationService.isSMLIntegrationEnabled()) {
             return false;
         }
-        String normalizedParticipantString = asString(normalizedParticipantId);
+        String normalizedParticipantString = identifierService.formatParticipant(normalizedParticipantId);
         if (!domain.isSmlRegistered()) {
             LOG.info("Participant {} is not registered to SML because domain {} is not registered!",
                     normalizedParticipantString, domain.getDomainCode());
@@ -170,31 +174,30 @@ public class SmlConnector implements ApplicationContextAware {
             smlSmpRequest.getPublisherEndpoint().setPhysicalAddress(smpPhysicalAddress);
             smlSmpRequest.setServiceMetadataPublisherID(domain.getSmlSmpId());
             getSMPManagerWSClient(domain).create(smlSmpRequest);
-            return true;
         } catch (BadRequestFault e) {
-            return processSMLErrorMessage(e, domain);
+            processSMLErrorMessage(e, domain);
         } catch (Exception e) {
             LOG.error(e.getClass().getName() + "" + e.getMessage(), e);
             throw new SMPRuntimeException(ErrorCode.SML_INTEGRATION_EXCEPTION, e, ExceptionUtils.getRootCauseMessage(e));
         }
+        // if not error is thrown - the registration is done OK.
+        return true;
     }
 
-    private boolean processSMLErrorMessage(BadRequestFault e, DBDomain domain) {
+    private void processSMLErrorMessage(BadRequestFault e, DBDomain domain) {
         if (!isOkMessage(domain, e.getMessage())) {
             LOG.error(e.getMessage(), e);
             throw new SMPRuntimeException(ErrorCode.SML_INTEGRATION_EXCEPTION, e, ExceptionUtils.getRootCauseMessage(e));
         }
         LOG.warn(e.getMessage(), e);
-        return true;
     }
 
-    private boolean processSMLErrorMessage(NotFoundFault e, DBDomain domain) {
+    private void processSMLErrorMessage(NotFoundFault e, DBDomain domain) {
         if (!isOkMessage(domain, e.getMessage())) {
             LOG.error(e.getMessage(), e);
             throw new SMPRuntimeException(ErrorCode.SML_INTEGRATION_EXCEPTION, e, ExceptionUtils.getRootCauseMessage(e));
         }
         LOG.warn(e.getMessage(), e);
-        return true;
     }
 
     /**
@@ -219,7 +222,7 @@ public class SmlConnector implements ApplicationContextAware {
         if (!configurationService.isSMLIntegrationEnabled()) {
             return false;
         }
-        String normalizedParticipantString = asString(normalizedParticipantId);
+        String normalizedParticipantString = identifierService.formatParticipant(normalizedParticipantId);
         if (!domain.isSmlRegistered()) {
             LOG.info("Participant {} is not unregistered from SML because domain {} is not registered!",
                     normalizedParticipantString, domain.getDomainCode());
@@ -242,18 +245,17 @@ public class SmlConnector implements ApplicationContextAware {
         }
     }
 
-    public boolean unregisterDomain(DBDomain domain) {
+    public void unregisterDomain(DBDomain domain) {
         if (!configurationService.isSMLIntegrationEnabled()) {
-            return true;
+            return;
         }
         LOG.info("Removing SMP id (Domain) from BDMSL: {} ", domain.getDomainCode());
         try {
             getSMPManagerWSClient(domain).delete(domain.getSmlSmpId());
-            return true;
         } catch (BadRequestFault e) {
-            return processSMLErrorMessage(e, domain);
+            processSMLErrorMessage(e, domain);
         } catch (NotFoundFault e) {
-            return processSMLErrorMessage(e, domain);
+            processSMLErrorMessage(e, domain);
         } catch (Exception e) {
             LOG.error(e.getClass().getName() + "" + e.getMessage(), e);
             throw new SMPRuntimeException(ErrorCode.SML_INTEGRATION_EXCEPTION, e, ExceptionUtils.getRootCauseMessage(e));
@@ -336,7 +338,7 @@ public class SmlConnector implements ApplicationContextAware {
         }
 
         if (!clientCertAuthentication && !useTLS) {
-            LOG.warn("SML integration is wrongly configured. Uses 2-way-SSL HTTPS but URL is not HTTPS! Url: {}.", urlSMPManagment.toString());
+            LOG.warn("SML integration is wrongly configured. Uses 2-way-SSL HTTPS but URL is not HTTPS! Url: [{}].", urlSMPManagment);
         }
 
         HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
@@ -362,7 +364,7 @@ public class SmlConnector implements ApplicationContextAware {
         tlsParams.setUseHttpsURLConnectionDefaultHostnameVerifier(false);
         tlsParams.setCertConstraints(createCertConstraint(configurationService.getSMLIntegrationServerCertSubjectRegExpPattern()));
         tlsParams.setDisableCNCheck(configurationService.smlDisableCNCheck());
-        if(!configurationService.useSystemTruststoreForTLS()){
+        if (!configurationService.useSystemTruststoreForTLS()) {
             /**
              * Sets the TrustManagers associated with this endpoint.
              * This parameter may be set to null for system default behavior.
@@ -378,7 +380,7 @@ public class SmlConnector implements ApplicationContextAware {
         } else {
             LOG.debug("User Client cert header to authenticate to SML {}.", smlClientAuthentication);
             Map<String, List<String>> customHeaders = new HashMap<>();
-            customHeaders.put(CLIENT_CERT_HEADER_KEY, Arrays.asList(smlClientAuthentication));
+            customHeaders.put(CLIENT_CERT_HEADER_KEY, Collections.singletonList(smlClientAuthentication));
             requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, customHeaders);
         }
         if (useTLS) {
@@ -410,7 +412,7 @@ public class SmlConnector implements ApplicationContextAware {
     }
 
     private void configurePayloadLogging(Client client) {
-        client.getBus().setFeatures(Arrays.asList(new LoggingFeature()));
+        client.getBus().setFeatures(Collections.singletonList(new LoggingFeature()));
     }
 
     private void configureProxy(HTTPConduit httpConduit, URL targetUrl) {
@@ -433,9 +435,7 @@ public class SmlConnector implements ApplicationContextAware {
         LOG.info("Configuring proxy for BDMSL integration client: {}:{}@{}:{}", proxyUser, "******", proxyServer, proxyPort.isPresent() ? proxyPort.get() : "");
         httpConduit.getClient().setProxyServerType(ProxyServerType.HTTP);
         httpConduit.getClient().setProxyServer(proxyServer);
-        if (proxyPort.isPresent()) {
-            httpConduit.getClient().setProxyServerPort(proxyPort.get());
-        }
+        proxyPort.ifPresent(port -> httpConduit.getClient().setProxyServerPort(port));
 
         if (!StringUtils.isBlank(proxyUser)) {
             ProxyAuthorizationPolicy proxyAuth = new ProxyAuthorizationPolicy();
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/CaseSensitivityNormalizerTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/IdentifierServiceTests.java
similarity index 64%
rename from smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/CaseSensitivityNormalizerTest.java
rename to smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/IdentifierServiceTests.java
index 65ac2052f913ef0d15c48f50a748f4cd57781067..3e49e60dd8b84cf5752da3370e343f7f96a718e6 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/CaseSensitivityNormalizerTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/IdentifierServiceTests.java
@@ -14,41 +14,29 @@
 package eu.europa.ec.edelivery.smp.conversion;
 
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 import org.mockito.Mockito;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
-import org.springframework.test.util.ReflectionTestUtils;
+
+import java.util.Arrays;
+import java.util.Collection;
 
 import static java.util.Arrays.asList;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.*;
 
 /**
  * Created by gutowpa on 06/03/2017.
  */
-@RunWith(JUnitParamsRunner.class)
-public class CaseSensitivityNormalizerTest {
-
-    private CaseSensitivityNormalizer normalizer;
-
-    @Before
-    public void init() {
-        ConfigurationService configurationService = Mockito.mock(ConfigurationService.class);
-        normalizer = new CaseSensitivityNormalizer(configurationService);
-
-        Mockito.doReturn(asList(new String[]{"case-SENSITIVE-scheme-1", "Case-SENSITIVE-Scheme-2"})).when(configurationService).getCaseSensitiveDocumentScheme();
-        Mockito.doReturn(asList(new String[]{"case-sensitive-scheme-1", "Case-SENSITIVE-Scheme-2"})).when(configurationService).getCaseSensitiveParticipantScheme();
-
-    }
+@RunWith(Parameterized.class)
+public class IdentifierServiceTests {
 
-    @SuppressWarnings("unused")
-    private static Object[] testCases() {
-        return new Object[][]{
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Collection testCases() {
+        return Arrays.asList(new Object[][]{
                 {"scheme", "value", "scheme", "value"},
                 {"SCHEME", "VALUE", "scheme", "value"},
                 {"SchemE", "ValuE", "scheme", "value"},
@@ -56,43 +44,60 @@ public class CaseSensitivityNormalizerTest {
                 {"CASE-SENSITIVE-SCHEME-1", "Case-Sensitive-Value", "CASE-SENSITIVE-SCHEME-1", "Case-Sensitive-Value"}, //scheme itself checked case-insensitively if should be case-sensitive or not
                 {"case-sensitive-scheme-2", "Case-Sensitive-Value", "case-sensitive-scheme-2", "Case-Sensitive-Value"},
                 {"CASE-SENSITIVE-SCHEME-2", "Case-Sensitive-Value", "CASE-SENSITIVE-SCHEME-2", "Case-Sensitive-Value"}, //scheme itself checked case-insensitively if should be case-sensitive or not
-        };
+        });
     }
 
+    // input parameters
+    @Parameterized.Parameter
+    public String inputScheme;
+    @Parameterized.Parameter(1)
+    public String inputValue;
+    @Parameterized.Parameter(2)
+    public String expectedScheme;
+    @Parameterized.Parameter(3)
+    public String expectedValue;
+
+    private IdentifierService testInstance = new IdentifierService(Mockito.mock(ConfigurationService.class));
+
+    @Before
+    public void init() {
+        testInstance.configureDocumentIdentifierFormatter(asList(new String[]{"case-SENSITIVE-scheme-1", "Case-SENSITIVE-Scheme-2"}));
+        testInstance.configureParticipantIdentifierFormatter(asList(new String[]{"case-sensitive-scheme-1", "Case-SENSITIVE-Scheme-2"}), false, null);
+    }
+
+
     @Test
-    @Parameters(method = "testCases")
-    public void testParticipantIdsCaseNormalization(String inputScheme, String inputValue, String expectedScheme, String expectedValue) {
+    public void testParticipantIdsCaseNormalization() {
         //given
         ParticipantIdentifierType inputParticpantId = new ParticipantIdentifierType(inputValue, inputScheme);
 
         //when
-        ParticipantIdentifierType outputParticipantId = normalizer.normalize(inputParticpantId);
+        ParticipantIdentifierType outputParticipantId = testInstance.normalizeParticipant(inputParticpantId);
 
         //then
         assertEquals(expectedScheme, outputParticipantId.getScheme());
         assertEquals(expectedValue, outputParticipantId.getValue());
 
         //input stays untouched
-        assertFalse(inputParticpantId == outputParticipantId);
+        assertNotSame(inputParticpantId, outputParticipantId);
         assertEquals(inputScheme, inputParticpantId.getScheme());
         assertEquals(inputValue, inputParticpantId.getValue());
     }
 
     @Test
-    @Parameters(method = "testCases")
-    public void testDocumentIdsCaseNormalization(String inputScheme, String inputValue, String expectedScheme, String expectedValue) {
+    public void testDocumentIdsCaseNormalization() {
         //given
         DocumentIdentifier inputDocId = new DocumentIdentifier(inputValue, inputScheme);
 
         //when
-        DocumentIdentifier outputDocId = normalizer.normalize(inputDocId);
+        DocumentIdentifier outputDocId = testInstance.normalizeDocument(inputDocId);
 
         //then
         assertEquals(expectedScheme, outputDocId.getScheme());
         assertEquals(expectedValue, outputDocId.getValue());
 
         //input stays untouched
-        assertFalse(inputDocId == outputDocId);
+        assertNotSame(inputDocId, outputDocId);
         assertEquals(inputScheme, inputDocId.getScheme());
         assertEquals(inputValue, inputDocId.getValue());
     }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverterTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverterTest.java
index 361c5ace34483da121d6d98753ae416367776989..5fb6ed80979f79e5c02b5019676e13d074cc7734 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverterTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/conversion/ServiceGroupConverterTest.java
@@ -13,9 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.conversion;
 
-import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.edelivery.smp.testutil.TestDBUtils;
 import eu.europa.ec.edelivery.smp.testutil.XmlTestUtils;
 import org.hamcrest.Matchers;
 import org.junit.Rule;
@@ -25,10 +23,7 @@ import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
 import org.xml.sax.SAXParseException;
 
 import javax.xml.bind.JAXBException;
-import javax.xml.bind.UnmarshalException;
-import javax.xml.stream.XMLStreamException;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 
 import static org.junit.Assert.*;
 
@@ -42,81 +37,6 @@ public class ServiceGroupConverterTest {
     @Rule
     public ExpectedException expectedExeption = ExpectedException.none();
 
-    @Test
-    public void toServiceGroupTest() {
-        // set
-        DBServiceGroup sg = TestDBUtils.createDBServiceGroup();
-
-        //when
-        ServiceGroup serviceGroup = ServiceGroupConverter.toServiceGroup(sg, false);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
-        assertEquals(sg.getParticipantScheme(), serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(1, serviceGroup.getExtensions().size());
-    }
-
-    @Test
-    public void toServiceGroupTestEBCorePartyIDNotContact() {
-        // set
-
-        DBServiceGroup sg = TestDBUtils.createDBServiceGroup("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523");
-
-        //when
-        ServiceGroup serviceGroup = ServiceGroupConverter.toServiceGroup(sg, false);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
-        assertEquals(sg.getParticipantScheme(), serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(1, serviceGroup.getExtensions().size());
-    }
-
-    @Test
-    public void toServiceGroupTestEBCorePartyIDContact() {
-        // set
-        DBServiceGroup sg = TestDBUtils.createDBServiceGroup("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523");
-        //when
-        ServiceGroup serviceGroup = ServiceGroupConverter.toServiceGroup(sg, true);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getParticipantScheme() +":" + sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
-        assertNull(serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(1, serviceGroup.getExtensions().size());
-    }
-
-    @Test
-    public void toServiceGroupTestMultiExtensions() throws UnsupportedEncodingException, JAXBException, XMLStreamException {
-        // set
-        DBServiceGroup sg = TestDBUtils.createDBServiceGroup();
-        sg.setExtension(ExtensionConverter.concatByteArrays(TestDBUtils.generateExtension(), TestDBUtils.generateExtension()));
-
-        //when-then
-        ServiceGroup serviceGroup = ServiceGroupConverter.toServiceGroup(sg, false);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
-        assertEquals(sg.getParticipantScheme(), serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(2, serviceGroup.getExtensions().size());
-    }
-
-    @Test
-    public void toServiceGroupTestIsEmpty() {
-        // set
-        //when
-        ServiceGroup serviceGroup = ServiceGroupConverter.toServiceGroup(null, false);
-        assertNull(serviceGroup);
-    }
-
-    @Test
-    public void testInvalidExtension() {
-        //given
-        DBServiceGroup sg = TestDBUtils.createDBServiceGroup();
-        sg.setExtension("<This > is invalid extensions".getBytes());
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectCause(Matchers.isA(UnmarshalException.class));
-        expectedExeption.expectMessage(Matchers.startsWith("Invalid extension for service group"));
-
-        //when-then
-        ServiceGroup serviceGroup = ServiceGroupConverter.toServiceGroup(sg, false);
-    }
-
-
     @Test
     public void testUnmashallingServiceGroup() throws IOException {
         //given
@@ -140,11 +60,11 @@ public class ServiceGroupConverterTest {
         ServiceGroup serviceGroup = ServiceGroupConverter.unmarshal(inputDoc);
 
         //when
-        byte[] val  = ServiceGroupConverter.extractExtensionsPayload(serviceGroup);
+        byte[] val = ServiceGroupConverter.extractExtensionsPayload(serviceGroup);
 
         //then
         assertNotNull(val);
-        assertEquals(expectedExt, new String(val,"UTF-8"));
+        assertEquals(expectedExt, new String(val, "UTF-8"));
     }
 
     @Test
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/AbstractServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/AbstractServiceIntegrationTest.java
index ca5d6ebe8133e78a9a4dd9e4c49770148de755f8..52dff2dde0ee74fbfe8b4722032a4f9bee1402a0 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/AbstractServiceIntegrationTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/AbstractServiceIntegrationTest.java
@@ -4,7 +4,7 @@ package eu.europa.ec.edelivery.smp.services;
 import eu.europa.ec.edelivery.smp.config.ConversionTestConfig;
 import eu.europa.ec.edelivery.smp.config.H2JPATestConfig;
 import eu.europa.ec.edelivery.smp.config.ServicesBeansConfiguration;
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.cron.CronTriggerConfig;
 import eu.europa.ec.edelivery.smp.data.dao.*;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
@@ -43,7 +43,7 @@ import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes = {H2JPATestConfig.class,
-        CaseSensitivityNormalizer.class,SmlConnector.class,ServiceMetadataSigner.class, MailService.class,
+        IdentifierService.class,SmlConnector.class,ServiceMetadataSigner.class, MailService.class,
         ServiceGroupService.class, DomainService.class, ServiceMetadataService.class,
         ServiceGroupDao.class,ServiceMetadataDao.class, DomainDao.class, UserDao.class,DBAssertion.class, ConfigurationDao.class, AlertDao.class,
         UITruststoreService.class, UIKeystoreService.class, ConversionTestConfig.class, SMLIntegrationService.class,
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ConfigurationServiceAllGetMethodsTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ConfigurationServiceAllGetMethodsTest.java
index a7e0f320bdee8842ef5e04876f803ad811333882..95e932cd87f477d42f7be2fa4cbe8614b9d63345 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ConfigurationServiceAllGetMethodsTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ConfigurationServiceAllGetMethodsTest.java
@@ -52,10 +52,11 @@ public class ConfigurationServiceAllGetMethodsTest {
                 {HTTP_PROXY_PASSWORD, TEST_STRING, "getProxyCredentialToken", true},
                 {HTTP_PROXY_PORT, 8800, "getHttpProxyPort", true},
                 {HTTP_PROXY_USER, TEST_STRING, "getProxyUsername", true},
-                {PARTC_SCH_REGEXP, TEST_REXEXP,"getParticipantIdentifierSchemeRexExp", true},
-                {PARTC_SCH_REGEXP, TEST_STRING, "getParticipantIdentifierSchemeRexExpPattern", false},
+                {PARTC_SCH_VALIDATION_REGEXP, TEST_REXEXP,"getParticipantIdentifierSchemeRexExp", true},
+                {PARTC_SCH_VALIDATION_REGEXP, TEST_STRING, "getParticipantIdentifierSchemeRexExpPattern", false},
                 {PARTC_SCH_REGEXP_MSG, TEST_STRING, "getParticipantIdentifierSchemeRexExpMessage", true},
-                {PARTC_EBCOREPARTYID_CONCATENATE, Boolean.FALSE, "getForceConcatenateEBCorePartyId", true},
+                //{PARTC_EBCOREPARTYID_CONCATENATE, Boolean.FALSE, "getForceConcatenateEBCorePartyId", true},
+                {PARTC_SCH_MANDATORY, Boolean.FALSE, "getParticipantSchemeMandatory", true},
                 {CS_PARTICIPANTS, TEST_STRING_LIST, "getCaseSensitiveParticipantScheme", true},
                 {CS_DOCUMENTS, TEST_STRING_LIST, "getCaseSensitiveDocumentScheme", true},
                 {SML_ENABLED, Boolean.FALSE, "isSMLIntegrationEnabled", true},
@@ -105,8 +106,6 @@ public class ConfigurationServiceAllGetMethodsTest {
                 {SSO_CAS_TOKEN_VALIDATION_URL_PATH, TEST_STRING, "getCasURLTokenValidation", true},
                 {SSO_CAS_TOKEN_VALIDATION_PARAMS, TEST_MAP, "getCasTokenValidationParams", true},
                 {SSO_CAS_TOKEN_VALIDATION_GROUPS, TEST_STRING_LIST, "getCasURLTokenValidationGroups", true},
-                {PARTC_EBCOREPARTYID_CONCATENATE, Boolean.FALSE, "getForceConcatenateEBCorePartyId", true},
-                {PARTC_SCH_MANDATORY, Boolean.FALSE, "getParticipantSchemeMandatory", true},
                 {SMP_CLUSTER_ENABLED, Boolean.FALSE, "isClusterEnabled", true},
                 {ENCODED_SLASHES_ALLOWED_IN_URL, Boolean.FALSE, "encodedSlashesAllowedInUrl", true},
                 {SMP_ALERT_CREDENTIALS_SERVER, TEST_STRING, "getTargetServerForCredentialValidation", true},
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java
index 24bab3dac6eedc09cb83a2b916426768e1c86e5c..594d3c2a4ea8f7b8dfa13fa4833b9103b5b880e5 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java
@@ -18,6 +18,7 @@ import eu.europa.ec.bdmsl.ws.soap.InternalErrorFault;
 import eu.europa.ec.bdmsl.ws.soap.NotFoundFault;
 import eu.europa.ec.bdmsl.ws.soap.UnauthorizedFault;
 import eu.europa.ec.edelivery.smp.config.SmlIntegrationConfiguration;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import eu.europa.ec.edelivery.smp.data.model.DBServiceGroupDomain;
 import eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum;
@@ -41,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.xml.ws.http.HTTPException;
 import java.io.IOException;
+import java.util.regex.Pattern;
 
 import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
 import static org.junit.Assert.*;
@@ -61,12 +63,12 @@ public class DomainServiceSMLTest extends AbstractServiceIntegrationTest {
     @Rule
     public ExpectedException expectedExeption = ExpectedException.none();
 
+    @Autowired
+    IdentifierService identifierService;
     @Autowired
     SmlIntegrationConfiguration integrationMock;
-
     @Autowired
     SmlConnector smlConnector;
-
     @Autowired
     private SMLIntegrationService smlIntegrationService;
 
@@ -83,6 +85,9 @@ public class DomainServiceSMLTest extends AbstractServiceIntegrationTest {
         ReflectionTestUtils.setField(smlIntegrationService,"smlConnector",smlConnector);
         ReflectionTestUtils.setField(testInstance,"smlIntegrationService",smlIntegrationService);
 
+        ReflectionTestUtils.setField(smlIntegrationService,"identifierService",identifierService);
+        identifierService.configureParticipantIdentifierFormatter(null,false, Pattern.compile(".*"));
+
         resetKeystore();
         setDatabaseProperty(SMPPropertyEnum.SML_PHYSICAL_ADDRESS, "0.0.0.0");
         setDatabaseProperty(SMPPropertyEnum.SML_LOGICAL_ADDRESS, "http://localhost/smp");
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationServiceTest.java
index 763004d0bc1e1bbb3d78205fc55cfa7bb74da8f2..f2e86fba32d7856cfa13af4955f5d0cfe2b1da0f 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationServiceTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/SMLIntegrationServiceTest.java
@@ -18,6 +18,7 @@ import eu.europa.ec.bdmsl.ws.soap.InternalErrorFault;
 import eu.europa.ec.bdmsl.ws.soap.NotFoundFault;
 import eu.europa.ec.bdmsl.ws.soap.UnauthorizedFault;
 import eu.europa.ec.edelivery.smp.config.SmlIntegrationConfiguration;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.sml.SmlConnector;
@@ -33,50 +34,53 @@ import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.util.ReflectionTestUtils;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.regex.Pattern;
+
 import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
 
 /**
- *  Purpose of class is to test ServiceGroupService base methods
+ * Purpose of class is to test ServiceGroupService base methods
  *
  * @author Joze Rihtarsic
  * @since 4.1
  */
 @RunWith(SpringRunner.class)
-@ContextConfiguration(classes= {SmlIntegrationConfiguration.class,
-        SMLIntegrationService.class} )
+@ContextConfiguration(classes = {SmlIntegrationConfiguration.class,
+        SMLIntegrationService.class})
 public class SMLIntegrationServiceTest extends AbstractServiceIntegrationTest {
 
     @Rule
     public ExpectedException expectedExeption = ExpectedException.none();
 
+    @Autowired
+    IdentifierService identifierService;
     @Autowired
     SmlIntegrationConfiguration integrationMock;
-
     @Autowired
     protected SmlConnector smlConnector;
-
     @Autowired
     protected SMLIntegrationService testInstance;
-
     @Autowired
     ConfigurationService configurationService;
 
     @Before
     @Transactional
     public void prepareDatabase() {
+        ReflectionTestUtils.setField(testInstance, "identifierService", identifierService);
+
+        identifierService.configureParticipantIdentifierFormatter(null, false, Pattern.compile(".*"));
 
         configurationService = Mockito.spy(configurationService);
         smlConnector = Mockito.spy(smlConnector);
         Mockito.doNothing().when(smlConnector).configureClient(any(), any(), any());
 
-        ReflectionTestUtils.setField(testInstance,"configurationService",configurationService);
-        ReflectionTestUtils.setField(smlConnector,"configurationService",configurationService);
-        ReflectionTestUtils.setField(testInstance,"smlConnector",smlConnector);
+        ReflectionTestUtils.setField(testInstance, "configurationService", configurationService);
+        ReflectionTestUtils.setField(smlConnector, "configurationService", configurationService);
+        ReflectionTestUtils.setField(testInstance, "smlConnector", smlConnector);
 
         Mockito.doReturn(true).when(configurationService).isSMLIntegrationEnabled();
 
@@ -87,7 +91,7 @@ public class SMLIntegrationServiceTest extends AbstractServiceIntegrationTest {
     @Test
     public void registerDomainToSml() throws UnauthorizedFault, InternalErrorFault, BadRequestFault {
 
-         // given
+        // given
         DBDomain testDomain01 = domainDao.getDomainByCode(TEST_DOMAIN_CODE_1).get();
         testDomain01.setSmlRegistered(false);
         domainDao.update(testDomain01);
@@ -128,9 +132,9 @@ public class SMLIntegrationServiceTest extends AbstractServiceIntegrationTest {
          * Users: USERNAME_1, USER_CERT_2
          * ServiceGroup1: TEST_SG_ID_1, TEST_SG_SCHEMA_1
          *    - Domain: TEST_DOMAIN_CODE_1
-        */
+         */
         // when
-        testInstance.registerParticipant(TEST_SG_ID_1,TEST_SG_SCHEMA_1,TEST_DOMAIN_CODE_1 );
+        testInstance.registerParticipant(TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1);
 
         //then -- expect on call
         assertEquals(1, integrationMock.getParticipantManagmentClientMocks().size());
@@ -148,7 +152,7 @@ public class SMLIntegrationServiceTest extends AbstractServiceIntegrationTest {
          *    - Domain: TEST_DOMAIN_CODE_1
          */
         // when
-        testInstance.registerParticipant(TEST_SG_ID_NO_SCHEME,null,TEST_DOMAIN_CODE_1 );
+        testInstance.registerParticipant(TEST_SG_ID_NO_SCHEME, null, TEST_DOMAIN_CODE_1);
 
         //then -- expect on call
         assertEquals(1, integrationMock.getParticipantManagmentClientMocks().size());
@@ -166,7 +170,7 @@ public class SMLIntegrationServiceTest extends AbstractServiceIntegrationTest {
          *    - Domain: TEST_DOMAIN_CODE_1
          */
         // when
-        testInstance.registerParticipant(TEST_SG_ID_1,TEST_SG_SCHEMA_1,TEST_DOMAIN_CODE_1 );
+        testInstance.registerParticipant(TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1);
 
         //then -- expect on call
         assertEquals(1, integrationMock.getParticipantManagmentClientMocks().size());
@@ -176,31 +180,30 @@ public class SMLIntegrationServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    public void registerParticipant_NotExists(){
+    public void registerParticipant_NotExists() {
         expectedExeption.expect(SMPRuntimeException.class);
-        String notExistsId = TEST_SG_ID_1+"NotExists";
-        expectedExeption.expectMessage("ServiceGroup not found (part. id: '"+TEST_SG_ID_1+"NotExists', part. sch.: '"+TEST_SG_SCHEMA_1+"')!");
+        String notExistsId = TEST_SG_ID_1 + "NotExists";
+        expectedExeption.expectMessage("ServiceGroup not found (part. id: '" + TEST_SG_ID_1 + "NotExists', part. sch.: '" + TEST_SG_SCHEMA_1 + "')!");
 
         // when
-        testInstance.registerParticipant(notExistsId,TEST_SG_SCHEMA_1,TEST_DOMAIN_CODE_1 );
+        testInstance.registerParticipant(notExistsId, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1);
     }
 
     @Test
-    public void registerParticipant_NotOnDomain(){
+    public void registerParticipant_NotOnDomain() {
         expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage("Service group not registered for domain (domain: "+TEST_DOMAIN_CODE_2+", part. id: '"+TEST_SG_ID_1+"', part. sch.: '"+TEST_SG_SCHEMA_1+"')!");
+        expectedExeption.expectMessage("Service group not registered for domain (domain: " + TEST_DOMAIN_CODE_2 + ", part. id: '" + TEST_SG_ID_1 + "', part. sch.: '" + TEST_SG_SCHEMA_1 + "')!");
 
         // when
-        testInstance.registerParticipant(TEST_SG_ID_1,TEST_SG_SCHEMA_1,TEST_DOMAIN_CODE_2 );
+        testInstance.registerParticipant(TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_2);
     }
 
 
-
     @Test
     public void registerParticipantToSML() throws NotFoundFault, UnauthorizedFault, InternalErrorFault, BadRequestFault {
         DBDomain testDomain01 = domainDao.getDomainByCode(TEST_DOMAIN_CODE_1).get();
         // when
-        testInstance.registerParticipantToSML(TEST_SG_ID_1,TEST_SG_SCHEMA_1,testDomain01 );
+        testInstance.registerParticipantToSML(TEST_SG_ID_1, TEST_SG_SCHEMA_1, testDomain01);
 
         //then -- expect on call
         assertEquals(1, integrationMock.getParticipantManagmentClientMocks().size());
@@ -213,14 +216,11 @@ public class SMLIntegrationServiceTest extends AbstractServiceIntegrationTest {
         DBDomain testDomain01 = domainDao.getDomainByCode(TEST_DOMAIN_CODE_1).get();
         testDomain01.setSmlRegistered(true);
         // when
-        testInstance.unregisterParticipantFromSML(TEST_SG_ID_1,TEST_SG_SCHEMA_1,testDomain01 );
+        testInstance.unregisterParticipantFromSML(TEST_SG_ID_1, TEST_SG_SCHEMA_1, testDomain01);
 
         //then -- expect on call
         assertEquals(1, integrationMock.getParticipantManagmentClientMocks().size());
         verify(integrationMock.getParticipantManagmentClientMocks().get(0)).delete(any());
         Mockito.verifyNoMoreInteractions(integrationMock.getParticipantManagmentClientMocks().toArray());
     }
-
-
-
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java
index 9bc7ae95238fd5462f511bad5ac6b966440a5365..aa8d2516c88d9f05b0cec01dc890794fc7a12088 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java
@@ -13,23 +13,33 @@
 
 package eu.europa.ec.edelivery.smp.services;
 
+import eu.europa.ec.edelivery.smp.conversion.ExtensionConverter;
+import eu.europa.ec.edelivery.smp.conversion.ServiceGroupConverter;
 import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup;
 import eu.europa.ec.edelivery.smp.data.model.DBUser;
 import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.testutil.TestConstants;
 import eu.europa.ec.edelivery.smp.testutil.TestDBUtils;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.UnmarshalException;
+import javax.xml.stream.XMLStreamException;
+import java.io.UnsupportedEncodingException;
 import java.util.Optional;
+import java.util.regex.Pattern;
 
 import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  *  Purpose of class is to test ServiceGroupService base methods
@@ -38,9 +48,7 @@ import static org.junit.Assert.assertTrue;
  * @since 4.1
  */
 public class ServiceGroupServiceIntegrationTest extends AbstractServiceIntegrationTest {
-
-    @Rule
-    public ExpectedException expectedExeption = ExpectedException.none();
+    public static Pattern DEFAULT_URN_PATTERN = Pattern.compile("^(?i)((urn:)|(mailto:)).*$");
 
     @Autowired
     ServiceGroupService testInstance;
@@ -54,11 +62,9 @@ public class ServiceGroupServiceIntegrationTest extends AbstractServiceIntegrati
     public void validateOwnershipUserNotExists(){
         Optional<DBServiceGroup>  dbsg = serviceGroupDao.findServiceGroup( TEST_SG_ID_2, TEST_SG_SCHEMA_2);
         assertTrue(dbsg.isPresent()); // test if exists
-
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(ErrorCode.USER_NOT_EXISTS.getMessage());
         //test
-        testInstance.validateOwnership("UserNotExist", dbsg.get());
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,  () -> testInstance.validateOwnership("UserNotExist", dbsg.get()));
+        assertEquals(ErrorCode.USER_NOT_EXISTS.getMessage(), result.getMessage());
     }
 
     @Test
@@ -69,12 +75,82 @@ public class ServiceGroupServiceIntegrationTest extends AbstractServiceIntegrati
 
         DBUser u3= TestDBUtils.createDBUserByCertificate(TestConstants.USER_CERT_3);
         userDao.persistFlushDetach(u3);
-
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(ErrorCode.USER_IS_NOT_OWNER.getMessage(USER_CERT_3,
-                TEST_SG_ID_2, TEST_SG_SCHEMA_2));
         //test
-        testInstance.validateOwnership(USER_CERT_3, dbsg.get());
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,  () ->  testInstance.validateOwnership(USER_CERT_3, dbsg.get()) );
+        assertEquals(ErrorCode.USER_IS_NOT_OWNER.getMessage(USER_CERT_3,
+                TEST_SG_ID_2, TEST_SG_SCHEMA_2), result.getMessage());
+
+    }
+
+    @Test
+    public void toServiceGroupTest() {
+        // set
+        DBServiceGroup sg = TestDBUtils.createDBServiceGroup();
+
+        //when
+        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, DEFAULT_URN_PATTERN);
+        assertNotNull(serviceGroup);
+        assertEquals(sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
+        assertEquals(sg.getParticipantScheme(), serviceGroup.getParticipantIdentifier().getScheme());
+        assertEquals(1, serviceGroup.getExtensions().size());
+    }
+
+    @Test
+    public void toServiceGroupTestEBCorePartyIDNotContact() {
+        // set
+
+        DBServiceGroup sg = TestDBUtils.createDBServiceGroup("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523");
+
+        //when
+        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, null);
+        assertNotNull(serviceGroup);
+        assertEquals(sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
+        assertEquals(sg.getParticipantScheme(), serviceGroup.getParticipantIdentifier().getScheme());
+        assertEquals(1, serviceGroup.getExtensions().size());
+    }
+
+    @Test
+    public void toServiceGroupTestEBCorePartyIDContact() {
+        // set
+        DBServiceGroup sg = TestDBUtils.createDBServiceGroup("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523");
+        //when
+        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, DEFAULT_URN_PATTERN);
+        assertNotNull(serviceGroup);
+        assertEquals(sg.getParticipantScheme() +":" + sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
+        assertNull(serviceGroup.getParticipantIdentifier().getScheme());
+        assertEquals(1, serviceGroup.getExtensions().size());
+    }
+
+    @Test
+    public void toServiceGroupTestMultiExtensions() {
+        // set
+        DBServiceGroup sg = TestDBUtils.createDBServiceGroup();
+        sg.setExtension(ExtensionConverter.concatByteArrays(TestDBUtils.generateExtension(), TestDBUtils.generateExtension()));
+
+        //when-then
+        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, null);
+        assertNotNull(serviceGroup);
+        assertEquals(sg.getParticipantIdentifier(), serviceGroup.getParticipantIdentifier().getValue());
+        assertEquals(sg.getParticipantScheme(), serviceGroup.getParticipantIdentifier().getScheme());
+        assertEquals(2, serviceGroup.getExtensions().size());
+    }
+
+    @Test
+    public void toServiceGroupTestIsEmpty() {
+        // set
+        //when
+        ServiceGroup serviceGroup = testInstance.toServiceGroup(null, null);
+        assertNull(serviceGroup);
+    }
+
+    @Test
+    public void testInvalidExtension() {
+        //given
+        DBServiceGroup sg = TestDBUtils.createDBServiceGroup();
+        sg.setExtension("<This > is invalid extensions".getBytes());
 
+        //when-then
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,  () -> testInstance.toServiceGroup(sg, null));
+        MatcherAssert.assertThat( result.getMessage(), Matchers.startsWith("Invalid extension for service group"));
     }
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java
index 77a6810679d18fdbb8cc122f9f29c7345a71a345..1ac34ae81d52afb94eb1c208ae5ea329e601288b 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java
@@ -19,6 +19,8 @@ import eu.europa.ec.edelivery.smp.data.model.*;
 import eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.testutil.TestConstants;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
 import org.hamcrest.core.StringStartsWith;
 import org.junit.Before;
 import org.junit.Rule;
@@ -43,7 +45,6 @@ import static eu.europa.ec.edelivery.smp.conversion.ServiceGroupConverter.unmars
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*;
 import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
 import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsString;
-import static eu.europa.ec.smp.api.Identifiers.asParticipantId;
 import static org.junit.Assert.*;
 
 /**
@@ -55,9 +56,6 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
     @Autowired
     protected ServiceGroupService testInstance;
 
-    @Rule
-    public ExpectedException expectedExeption = ExpectedException.none();
-
     @Before
     @Transactional
     public void prepareDatabase() {
@@ -163,11 +161,11 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
 
     @Test
     public void serviceGroupNotExistsWhenRetrievingSG() {
-        // given
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(SG_NOT_EXISTS.getMessage("service-group", "not-existing"));
         // when-then
-        testInstance.getServiceGroup(asParticipantId("not-existing::service-group", false) );
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()->testInstance.getServiceGroup(new ParticipantIdentifierType("not-existing", "bad-srv-grp") ));
+
+        assertEquals(SG_NOT_EXISTS.getMessage("not-existing", "bad-srv-grp"), result.getMessage());
     }
 
     @Test
@@ -183,13 +181,10 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
         testInstance.deleteServiceGroup(inServiceGroup.getParticipantIdentifier());
         serviceGroupDao.clearPersistenceContext();
 
-        //then
-        expectedExeption.expect(SMPRuntimeException.class);
-        // get by null domain so: (all registered domains)
-        expectedExeption.expectMessage(SG_NOT_EXISTS.getMessage( inServiceGroup.getParticipantIdentifier().getValue(),
-                inServiceGroup.getParticipantIdentifier().getScheme()));
-
-        ServiceGroup sg = testInstance.getServiceGroup(inServiceGroup.getParticipantIdentifier());
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()->testInstance.getServiceGroup(inServiceGroup.getParticipantIdentifier()));
+        assertEquals(SG_NOT_EXISTS.getMessage( inServiceGroup.getParticipantIdentifier().getValue(), inServiceGroup.getParticipantIdentifier().getScheme())
+                , result.getMessage());
 
     }
 
@@ -223,16 +218,13 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
         assertTrue(dbUser.isPresent()); // test if exists
         assertFalse(dbsg.get().getUsers().contains(dbUser.get())); // test not owner
 
-        //then
-        expectedExeption.expect(SMPRuntimeException.class);
-        // get by null domain so: (all registered domains)
-        expectedExeption.expectMessage(USER_IS_NOT_OWNER.getMessage(TestConstants.USER_CERT_2,
-
-                dbsg.get().getParticipantIdentifier(), dbsg.get().getParticipantScheme()));
-
         // when
-        testInstance.saveServiceGroup(inServiceGroup,null,
-                TestConstants.USER_CERT_2, TestConstants.USER_CERT_2);
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()->testInstance.saveServiceGroup(inServiceGroup,null,
+                TestConstants.USER_CERT_2, TestConstants.USER_CERT_2));
+
+        assertEquals(USER_IS_NOT_OWNER.getMessage(TestConstants.USER_CERT_2,
+                dbsg.get().getParticipantIdentifier(), dbsg.get().getParticipantScheme()), result.getMessage());
     }
 
     @Test
@@ -244,15 +236,12 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
         Optional<DBUser> dbUser = userDao.findUserByIdentifier(TestConstants.USER_CERT_3);
         assertTrue(dbsg.isPresent()); // test if note exists
         assertFalse(dbUser.isPresent()); // test if exists
-
-        //then
-        expectedExeption.expect(SMPRuntimeException.class);
-        // get by null domain so: (all registered domains)
-        expectedExeption.expectMessage(INVALID_OWNER.getMessage(TestConstants.USER_CERT_3));
-
         // when
-        testInstance.saveServiceGroup(inServiceGroup, null,
-                TestConstants.USER_CERT_3, TestConstants.USER_CERT_3);
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()->testInstance.saveServiceGroup(inServiceGroup, null,
+                TestConstants.USER_CERT_3, TestConstants.USER_CERT_3));
+
+        assertEquals(INVALID_OWNER.getMessage(TestConstants.USER_CERT_3), result.getMessage());
     }
 
     @Test
@@ -260,12 +249,12 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
         String  username = "test::20%atest";
         //given
         ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH));
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(StringStartsWith.startsWith("Unsupported or invalid encoding"));
 
         //when
-        testInstance.saveServiceGroup(inServiceGroup, null, username, username);
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()->testInstance.saveServiceGroup(inServiceGroup, null, username, username));
 
+        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.startsWith("Unsupported or invalid encoding"));
     }
 
   @Test
@@ -273,11 +262,12 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
         //given
         String domain="NOTEXISTINGDOMAIN";
         ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(DOMAIN_NOT_EXISTS.getMessage(domain));
 
         //execute
-        testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1);
+      SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+              ()->testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1));
+
+      assertEquals(DOMAIN_NOT_EXISTS.getMessage(domain), result.getMessage());
     }
 
     @Test
@@ -285,12 +275,13 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
         //given
         String domain="notAllowedChars:-_;#$";
         ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(INVALID_DOMAIN_CODE.getMessage(domain,
-                DomainService.DOMAIN_ID_PATTERN.pattern()));
 
         //execute
-        testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1);
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()->testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1));
+
+        assertEquals(INVALID_DOMAIN_CODE.getMessage(domain,
+                DomainService.DOMAIN_ID_PATTERN.pattern()), result.getMessage());
     }
 
     @Test
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java
index 3cde33a4fa109b14ca897764be1bcbad1d03a9a2..949239a9c4515b6c29da037cd665b14f70df9389 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java
@@ -13,7 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.services;
 
-import eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup;
 import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadata;
@@ -21,7 +21,6 @@ import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.services.ui.UIKeystoreService;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -40,23 +39,20 @@ import org.w3c.dom.NodeList;
 
 import javax.xml.bind.JAXBException;
 import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
+import java.util.regex.Pattern;
 
 import static eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter.unmarshal;
 import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
 import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsByteArray;
 import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.marshallToByteArray;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Created by gutowpa on 15/11/2017.
@@ -64,31 +60,30 @@ import static org.junit.Assert.*;
 @RunWith(SpringJUnit4ClassRunner.class)
 public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTest {
 
-    static ParticipantIdentifierType PT_ID =null;
-    static DocumentIdentifier DOC_ID  = null;
+    static ParticipantIdentifierType PT_ID = null;
+    static DocumentIdentifier DOC_ID = null;
+
     static {
-        PT_ID  = new ParticipantIdentifierType();
+        PT_ID = new ParticipantIdentifierType();
         PT_ID.setValue(TEST_SG_ID_PL2);
         PT_ID.setScheme(TEST_SG_SCHEMA_PL2);
-        DOC_ID  = new DocumentIdentifier();
+        DOC_ID = new DocumentIdentifier();
         DOC_ID.setValue(TEST_DOC_ID_PL2);
         DOC_ID.setScheme(TEST_DOC_SCHEMA_PL2);
     }
 
-    @Autowired
-    ServiceMetadataService testInstance;
-
-    Path resourceDirectory = Paths.get("src", "test", "resources",  "keystores");
+    Path resourceDirectory = Paths.get("src", "test", "resources", "keystores");
 
     ConfigurationService configurationService = Mockito.mock(ConfigurationService.class);
 
+    @Autowired
+    IdentifierService identifierService;
+    @Autowired
+    ServiceMetadataService testInstance;
     @Autowired
     UIKeystoreService uiKeystoreService;
-
     @Autowired
-    private ServiceMetadataSigner signer;
-
-
+    ServiceMetadataSigner signer;
 
     @Rule
     public ExpectedException expectedExeption = ExpectedException.none();
@@ -97,14 +92,16 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
     @Transactional
     public void prepareDatabase() {
         configurationService = Mockito.spy(configurationService);
-        ReflectionTestUtils.setField(uiKeystoreService,"configurationService",configurationService);
-        ReflectionTestUtils.setField(signer,"uiKeystoreService",uiKeystoreService);
-        ReflectionTestUtils.setField(testInstance,"signer",signer);
+        ReflectionTestUtils.setField(uiKeystoreService, "configurationService", configurationService);
+        ReflectionTestUtils.setField(signer, "uiKeystoreService", uiKeystoreService);
+        ReflectionTestUtils.setField(testInstance, "signer", signer);
+        ReflectionTestUtils.setField(testInstance, "identifierService", identifierService);
 
+        identifierService.configureParticipantIdentifierFormatter(null, null, Pattern.compile(".*"));
         // set keystore properties
         File keystoreFile = new File(resourceDirectory.toFile(), "smp-keystore.jks");
-        Mockito.doReturn( keystoreFile).when(configurationService).getKeystoreFile();
-        Mockito.doReturn( resourceDirectory.toFile()).when(configurationService).getConfigurationFolder();
+        Mockito.doReturn(keystoreFile).when(configurationService).getKeystoreFile();
+        Mockito.doReturn(resourceDirectory.toFile()).when(configurationService).getConfigurationFolder();
         Mockito.doReturn("test123").when(configurationService).getKeystoreCredentialToken();
         uiKeystoreService.refreshData();
 
@@ -120,8 +117,8 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
     @Test
     public void saveAndReadPositiveScenario() throws IOException, TransformerException, JAXBException {
         //given
-        byte[]  inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
-   //     byte[] expectedSignedServiceMetadataXml = loadDocumentAsByteArray(SIGNED_SERVICE_METADATA_XML_PATH);
+        byte[] inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
+        //     byte[] expectedSignedServiceMetadataXml = loadDocumentAsByteArray(SIGNED_SERVICE_METADATA_XML_PATH);
         List<DocumentIdentifier> docIdsBefore = testInstance.findServiceMetadataIdentifiers(PT_ID);
         assertEquals(0, docIdsBefore.size());
 
@@ -136,11 +133,11 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
         assertEquals(DOC_ID.getScheme().toLowerCase(), docIdsAfter.get(0).getScheme()); // normalized
         assertEquals("SignedServiceMetadata", outServiceMetadataDoc.getDocumentElement().getTagName());
         // has signature
-        assertEquals(1, outServiceMetadataDoc.getElementsByTagNameNS("http://www.w3.org/2000/09/xmldsig#","Signature").getLength());
+        assertEquals(1, outServiceMetadataDoc.getElementsByTagNameNS("http://www.w3.org/2000/09/xmldsig#", "Signature").getLength());
         // has service metadata
-        NodeList serviceMetadata = outServiceMetadataDoc.getElementsByTagNameNS("http://docs.oasis-open.org/bdxr/ns/SMP/2016/05","ServiceMetadata");
+        NodeList serviceMetadata = outServiceMetadataDoc.getElementsByTagNameNS("http://docs.oasis-open.org/bdxr/ns/SMP/2016/05", "ServiceMetadata");
         assertEquals(1, serviceMetadata.getLength());
-   //        assertArrayEquals(expectedSignedServiceMetadataXml, ServiceMetadataConverter.toByteArray(outServiceMetadataDoc));
+        //        assertArrayEquals(expectedSignedServiceMetadataXml, ServiceMetadataConverter.toByteArray(outServiceMetadataDoc));
     }
 
     @Test
@@ -148,7 +145,7 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
 
         expectedExeption.expect(SMPRuntimeException.class);
         expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(),
-                SERVICE_GROUP_ID.getScheme().toLowerCase(),DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
+                SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
 
         testInstance.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID);
     }
@@ -159,7 +156,7 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
         // given
         expectedExeption.expect(SMPRuntimeException.class);
         expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(),
-                SERVICE_GROUP_ID.getScheme().toLowerCase(),DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
+                SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
         // when - then
         testInstance.deleteServiceMetadata(null, SERVICE_GROUP_ID, DOC_ID);
     }
@@ -167,13 +164,13 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
     @Test
     public void saveAndDeletePositiveScenario() throws IOException {
         //given
-        byte[]  inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
+        byte[] inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
         testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, inServiceMetadataXml);
         List<DocumentIdentifier> docIdsBefore = testInstance.findServiceMetadataIdentifiers(PT_ID);
         assertEquals(1, docIdsBefore.size());
         Optional<DBServiceMetadata> dbServiceMetadata = serviceMetadataDao.findServiceMetadata(
                 PT_ID.getValue().toLowerCase(), PT_ID.getScheme().toLowerCase(),
-                DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase());;
+                DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase());
         assertTrue(dbServiceMetadata.isPresent());
 
         //when
@@ -185,7 +182,7 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
 
         expectedExeption.expect(SMPRuntimeException.class);
         expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(),
-                SERVICE_GROUP_ID.getScheme().toLowerCase(),DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
+                SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
 
         testInstance.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID);
     }
@@ -193,7 +190,7 @@ public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTe
     @Test
     public void updatePositiveScenario() throws IOException, JAXBException, TransformerException {
         //given
-        byte[]  oldServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
+        byte[] oldServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
         testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, oldServiceMetadataXml);
 
         ServiceMetadata newServiceMetadata = unmarshal(loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH));
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupServiceUpdateListIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupServiceUpdateListIntegrationTest.java
index 61a8c583adf45e8393aba9aab04ae4944f9ba49f..b8b2a7f782b171230f4fad8126a0e8aa198b4838 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupServiceUpdateListIntegrationTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupServiceUpdateListIntegrationTest.java
@@ -27,8 +27,7 @@ import java.io.IOException;
 import java.util.List;
 import java.util.UUID;
 
-import static eu.europa.ec.edelivery.smp.testutil.TestConstants.TEST_DOMAIN_CODE_1;
-import static eu.europa.ec.edelivery.smp.testutil.TestConstants.TEST_DOMAIN_CODE_2;
+import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
@@ -91,7 +90,7 @@ public class UIServiceGroupServiceUpdateListIntegrationTest extends AbstractServ
         // given
         DBDomain dbDomain1 = domainDao.getDomainByCode(TEST_DOMAIN_CODE_1).get();
         DBDomain dbDomain2 = domainDao.getDomainByCode(TEST_DOMAIN_CODE_2).get();
-        ServiceGroupRO serviceGroupRO = TestROUtils.createROServiceGroupForDomains(UUID.randomUUID().toString(), UUID.randomUUID().toString(),
+        ServiceGroupRO serviceGroupRO = TestROUtils.createROServiceGroupForDomains(UUID.randomUUID().toString(), TEST_SG_SCHEMA_1,
                 dbDomain1, dbDomain2);
         // When
         List<ParticipantSMLRecord> lst = testInstance.addNewServiceGroup(serviceGroupRO);
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java
index e8341afead0bc11e0cb89c73648f5ef5d37ea941..d17f81ae8645a9b3377e5a02b296138fa2dda745 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java
@@ -1,10 +1,6 @@
 package eu.europa.ec.edelivery.smp.services.ui;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
 import eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter;
-import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
-import eu.europa.ec.edelivery.smp.data.dao.ServiceMetadataDao;
-import eu.europa.ec.edelivery.smp.data.dao.UserDao;
 import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadata;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataRO;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataValidationRO;
@@ -61,13 +57,13 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
 
     @Test
     public void validateServiceMetadataValid() {
-        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", "partSch");
+        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", TEST_SG_SCHEMA_1);
 
         ServiceMetadataValidationRO smv = new ServiceMetadataValidationRO();
         smv.setDocumentIdentifier(md.getDocumentIdentifier());
         smv.setDocumentIdentifierScheme(md.getDocumentIdentifierScheme());
         smv.setParticipantIdentifier("partId");
-        smv.setParticipantScheme("partSch");
+        smv.setParticipantScheme(TEST_SG_SCHEMA_1);
         smv.setXmlContent(new String(md.getXmlContent()));
 
         smv = testInstance.validateServiceMetadata(smv);
@@ -82,7 +78,7 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
         smv.setDocumentIdentifier(md.getDocumentIdentifier());
         smv.setDocumentIdentifierScheme(md.getDocumentIdentifierScheme());
         smv.setParticipantIdentifier("partId");
-        smv.setParticipantScheme("partSch");
+        smv.setParticipantScheme(TEST_SG_SCHEMA_1);
         smv.setXmlContent(new String(md.getXmlContent()));
 
         smv = testInstance.validateServiceMetadata(smv);
@@ -97,7 +93,7 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
         smv.setDocumentIdentifier(md.getDocumentIdentifier());
         smv.setDocumentIdentifierScheme(md.getDocumentIdentifierScheme());
         smv.setParticipantIdentifier("partId");
-        smv.setParticipantScheme("partSch");
+        smv.setParticipantScheme(TEST_SG_SCHEMA_1);
         smv.setXmlContent(new String(md.getXmlContent()));
 
         smv = testInstance.validateServiceMetadata(smv);
@@ -108,13 +104,14 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
 
     @Test
     public void validateServiceMetadataParticipantNotMatch() {
-        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", "partSch");
+
+        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", TEST_SG_SCHEMA_1);
 
         ServiceMetadataValidationRO smv = new ServiceMetadataValidationRO();
         smv.setDocumentIdentifier(md.getDocumentIdentifier());
         smv.setDocumentIdentifierScheme(md.getDocumentIdentifierScheme());
         smv.setParticipantIdentifier("partIdNotMatch");
-        smv.setParticipantScheme("partSch");
+        smv.setParticipantScheme(TEST_SG_SCHEMA_1);
         smv.setXmlContent(new String(md.getXmlContent()));
 
         smv = testInstance.validateServiceMetadata(smv);
@@ -123,13 +120,13 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
 
     @Test
     public void validateServiceMetadataDocumentNotMatch() {
-        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", "partSch");
+        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", TEST_SG_SCHEMA_1);
 
         ServiceMetadataValidationRO smv = new ServiceMetadataValidationRO();
         smv.setDocumentIdentifier(md.getDocumentIdentifierScheme());
         smv.setDocumentIdentifierScheme(md.getDocumentIdentifier());
         smv.setParticipantIdentifier("partId");
-        smv.setParticipantScheme("partSch");
+        smv.setParticipantScheme(TEST_SG_SCHEMA_1);
         smv.setXmlContent(new String(md.getXmlContent()));
 
         smv = testInstance.validateServiceMetadata(smv);
@@ -138,13 +135,13 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
 
     @Test
     public void validateServiceMetadataInvalidXML() {
-        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", "partSch");
+        DBServiceMetadata md = TestDBUtils.createDBServiceMetadata("partId", TEST_SG_SCHEMA_1);
 
         ServiceMetadataValidationRO smv = new ServiceMetadataValidationRO();
         smv.setDocumentIdentifier(md.getDocumentIdentifierScheme());
         smv.setDocumentIdentifierScheme(md.getDocumentIdentifier());
         smv.setParticipantIdentifier("partId");
-        smv.setParticipantScheme("partSch");
+        smv.setParticipantScheme(TEST_SG_SCHEMA_1);
         smv.setXmlContent(new String(md.getXmlContent()) + "Something to invalidate xml");
 
         smv = testInstance.validateServiceMetadata(smv);
@@ -199,7 +196,7 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
     }
 
     @Test
-    public void testValidateServiceMetadataCertificatesNotAllowed() throws IOException, CertificateException {
+    public void testValidateServiceMetadataCertificatesNotAllowed() throws IOException{
         ConfigurationService configurationService = Mockito.mock(ConfigurationService.class);
         UIServiceMetadataService testInstance = new UIServiceMetadataService(null, null,
                 null, null,
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorDomainTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorDomainTest.java
index 0e99e9a65b20e23f8191e2857f1a5ee6e36e6258..840dafb8491dd39d555c24ef62a765620ac311b5 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorDomainTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorDomainTest.java
@@ -14,32 +14,33 @@
 
 package eu.europa.ec.edelivery.smp.sml;
 
-        import eu.europa.ec.bdmsl.ws.soap.BadRequestFault;
-        import eu.europa.ec.bdmsl.ws.soap.InternalErrorFault;
-        import eu.europa.ec.bdmsl.ws.soap.NotFoundFault;
-        import eu.europa.ec.bdmsl.ws.soap.UnauthorizedFault;
-        import eu.europa.ec.edelivery.smp.config.SmlIntegrationConfiguration;
-        import eu.europa.ec.edelivery.smp.data.model.DBDomain;
-        import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-        import eu.europa.ec.edelivery.smp.services.AbstractServiceIntegrationTest;
-        import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-        import org.junit.Before;
-        import org.junit.Rule;
-        import org.junit.Test;
-        import org.junit.rules.ExpectedException;
-        import org.junit.runner.RunWith;
-        import org.mockito.Mockito;
-        import org.springframework.beans.factory.annotation.Autowired;
-        import org.springframework.test.context.ContextConfiguration;
-        import org.springframework.test.context.junit4.SpringRunner;
-        import org.springframework.test.util.ReflectionTestUtils;
-
-        import java.util.UUID;
-
-        import static eu.europa.ec.edelivery.smp.sml.SmlConnectorTestConstants.*;
-        import static org.junit.Assert.*;
-        import static org.mockito.ArgumentMatchers.any;
-        import static org.mockito.Mockito.verify;
+import eu.europa.ec.bdmsl.ws.soap.BadRequestFault;
+import eu.europa.ec.bdmsl.ws.soap.InternalErrorFault;
+import eu.europa.ec.bdmsl.ws.soap.NotFoundFault;
+import eu.europa.ec.bdmsl.ws.soap.UnauthorizedFault;
+import eu.europa.ec.edelivery.smp.config.SmlIntegrationConfiguration;
+import eu.europa.ec.edelivery.smp.data.model.DBDomain;
+import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
+import eu.europa.ec.edelivery.smp.services.AbstractServiceIntegrationTest;
+import eu.europa.ec.edelivery.smp.services.ConfigurationService;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.util.UUID;
+
+import static eu.europa.ec.edelivery.smp.sml.SmlConnectorTestConstants.*;
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
 
 /**
  * Created by JRC
@@ -67,7 +68,7 @@ public class SmlConnectorDomainTest extends AbstractServiceIntegrationTest {
         testInstance = Mockito.spy(testInstance);
         // default behaviour
         Mockito.doNothing().when(testInstance).configureClient(any(), any(), any());
-        ReflectionTestUtils.setField(testInstance,"configurationService",configurationService);
+        ReflectionTestUtils.setField(testInstance, "configurationService", configurationService);
         Mockito.doReturn(true).when(configurationService).isSMLIntegrationEnabled();
         mockSml.reset();
     }
@@ -127,10 +128,9 @@ public class SmlConnectorDomainTest extends AbstractServiceIntegrationTest {
     @Test
     public void testDomainUnregisterFromDns() throws UnauthorizedFault, NotFoundFault, InternalErrorFault, BadRequestFault {
         //when
-        boolean result = testInstance.unregisterDomain(DEFAULT_DOMAIN);
+        testInstance.unregisterDomain(DEFAULT_DOMAIN);
 
         //then
-        assertTrue(result);
         assertEquals(1, mockSml.getSmpManagerClientMocks().size());
         verify(mockSml.getSmpManagerClientMocks().get(0)).delete(any());
         Mockito.verifyNoMoreInteractions(mockSml.getSmpManagerClientMocks().toArray());
@@ -177,9 +177,8 @@ public class SmlConnectorDomainTest extends AbstractServiceIntegrationTest {
         //when
         BadRequestFault ex = new BadRequestFault(ERROR_SMP_NOT_EXISTS);
         mockSml.setThrowException(ex);
-        boolean suc = testInstance.unregisterDomain(DEFAULT_DOMAIN);
 
-        assertTrue(suc);
+        Assertions.assertDoesNotThrow(() -> testInstance.unregisterDomain(DEFAULT_DOMAIN););
     }
 
     @Test
@@ -200,7 +199,7 @@ public class SmlConnectorDomainTest extends AbstractServiceIntegrationTest {
     @Test
     public void testGetSmlClientKeyAliasForDomain() {
 
-        DBDomain domain  = new DBDomain();
+        DBDomain domain = new DBDomain();
         domain.setSmlClientKeyAlias(UUID.randomUUID().toString());
         domain.setSmlClientCertAuth(false);
 
@@ -212,7 +211,7 @@ public class SmlConnectorDomainTest extends AbstractServiceIntegrationTest {
     @Test
     public void testGetSmlClientKeyAliasForDomainNulForSingleKey() {
 
-        DBDomain domain  = new DBDomain();
+        DBDomain domain = new DBDomain();
         domain.setSmlClientKeyAlias(null);
         domain.setSmlClientCertAuth(false);
 
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java
index 45cf76ac640e52a64b0cf86188931a02d822da76..4aa78f73e814ea7c4efd516cb20d620daf12c281 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java
@@ -2,8 +2,6 @@ package eu.europa.ec.edelivery.smp.testutil;
 
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 
-import static eu.europa.ec.smp.api.Identifiers.asParticipantId;
-
 public class TestConstants {
 
     public static final String TEST_DOMAIN_CODE_1 = "utestPeppol01";
@@ -52,7 +50,7 @@ public class TestConstants {
     public static final String SERVICE_METADATA_XML_PATH = "/examples/services/ServiceMetadataPoland.xml";
     public static final String SIGNED_SERVICE_METADATA_XML_PATH = "/examples/services/SignedServiceMetadataPoland.xml";
 
-    public static final ParticipantIdentifierType SERVICE_GROUP_ID = asParticipantId("participant-scheme-qns::urn:eu:ncpb", false);
+    public static final ParticipantIdentifierType SERVICE_GROUP_ID = new ParticipantIdentifierType("urn:eu:ncpb", "participant-scheme-qns");
 
     public static final String ADMIN_USERNAME = "test_admin";
     public static final String CERT_USER = "CN=common name,O=org,C=BE:0000000000000066";
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestDBUtils.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestDBUtils.java
index afb35fca9b2bed1bbf48e1da93e1470e4e256f79..bf09181589757fe81cffff4f673a765dc7a93829 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestDBUtils.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestDBUtils.java
@@ -95,7 +95,7 @@ public class TestDBUtils {
     }
 
     public static DBServiceGroup createDBServiceGroupRandom() {
-        return createDBServiceGroup(UUID.randomUUID().toString(), UUID.randomUUID().toString(), true);
+        return createDBServiceGroup(UUID.randomUUID().toString(), TEST_SG_SCHEMA_1, true);
     }
 
     public static DBServiceGroup createDBServiceGroup(String id, String sch, boolean withExtension) {
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/PropertyUtilsTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/PropertyUtilsTest.java
index 8e800808121683a9a8fb73bffcdf00610a748e69..a94f18f2702f049b4bffa985e35530766713c5dd 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/PropertyUtilsTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/PropertyUtilsTest.java
@@ -61,7 +61,7 @@ public class PropertyUtilsTest {
                 {EXTERNAL_TLS_AUTHENTICATION_CLIENT_CERT_HEADER_ENABLED, "true", Boolean.class},
                 {EXTERNAL_TLS_AUTHENTICATION_CERTIFICATE_HEADER_ENABLED, "true", Boolean.class},
                 {OUTPUT_CONTEXT_PATH, "true", Boolean.class},
-                {PARTC_SCH_REGEXP, ".*", Pattern.class},
+                {PARTC_SCH_VALIDATION_REGEXP, ".*", Pattern.class},
                 {CS_PARTICIPANTS, "casesensitive-participant-scheme1|casesensitive-participant-scheme2", List.class},
                 {CS_DOCUMENTS, "casesensitive-doc-scheme1|casesensitive-doc-scheme2", List.class},
                 {SML_ENABLED, "true", Boolean.class},
diff --git a/smp-soapui-tests/pom.xml b/smp-soapui-tests/pom.xml
index f98e4ab212ee480150cc646258e01e61230d1e33..f752d49d849887d05f76127bd06c2af30617ca03 100644
--- a/smp-soapui-tests/pom.xml
+++ b/smp-soapui-tests/pom.xml
@@ -32,7 +32,7 @@
                         <artifactId>soapui-pro-maven-plugin</artifactId>
                         <version>5.1.2</version>
                         <configuration>
-                            <outputFolder>${build.directory}/soapui-reports/</outputFolder>
+                            <outputFolder>${project.build.directory}/soapui-reports/</outputFolder>
                             <junitReport>true</junitReport>
                             <printReport>true</printReport>
                             <settingsFile>${basedir}/soapui/soapui-settings.xml</settingsFile>
diff --git a/smp-soapui-tests/soapui/SMP4.0-Generic-soapui-project.xml b/smp-soapui-tests/soapui/SMP4.0-Generic-soapui-project.xml
index 72aebe5b269dd6794c0cf6dc6345f7d8042aacd4..0c1e0346eccfd4c5116de63aa0a8ca5f2573bff5 100644
--- a/smp-soapui-tests/soapui/SMP4.0-Generic-soapui-project.xml
+++ b/smp-soapui-tests/soapui/SMP4.0-Generic-soapui-project.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<con:soapui-project activeEnvironment="Default" name="SMP_TESTS" resourceRoot="" soapui-version="5.6.0" abortOnError="false" runType="SEQUENTIAL" id="8147b356-07e4-4ff9-ade6-4e92e0597a38" xmlns:con="http://eviware.com/soapui/config"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.actions.iface.tools.soapui.ProTestRunnerAction@values-local"><![CDATA[<xml-fragment xmlns:con="http://eviware.com/soapui/config">
+<con:soapui-project activeEnvironment="Default" name="SMP_TESTS" resourceRoot="" soapui-version="5.7.0" abortOnError="false" runType="SEQUENTIAL" id="8147b356-07e4-4ff9-ade6-4e92e0597a38" xmlns:con="http://eviware.com/soapui/config"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.actions.iface.tools.soapui.ProTestRunnerAction@values-local"><![CDATA[<xml-fragment xmlns:con="http://eviware.com/soapui/config">
   <con:entry key="Environment" value="Default"/>
   <con:entry key="Global Properties" value=""/>
   <con:entry key="TestSuite" value="&lt;all>"/>
@@ -116,7 +116,7 @@
          </Process>
       </ProcessList>
    </ServiceInformation>
-</ServiceMetadata>]]></con:request><con:credentials><con:username>user</con:username><con:password>user</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method><con:method name="YYYZZZ-47-Delete" method="DELETE" id="cccbd073-0e3d-439b-a747-946a73f5b67c"><con:settings/><con:parameters/><con:representation type="FAULT"><con:mediaType>text/plain</con:mediaType><con:status>403 404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>404 500</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="REQUEST"><con:mediaType>application/xml</con:mediaType><con:params/></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=UTF-8</con:mediaType><con:status>500</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:request name="Delete" mediaType="application/xml" id="cfe391c2-9084-45a5-a637-fbbc25a25f27" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:credentials><con:username>user</con:username><con:password>user</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method></con:resource><con:resource name="ServiceGroupIDWrongFormat" path="/ehealth-actorid-qns:0088:7770010100777" id="2ff08415-f133-4c23-bf64-91204b94f5c1"><con:settings/><con:parameters/><con:method name="YYYZZZ-54-Get" method="GET" id="36ced4c8-0e92-4686-a5f4-e9c9870b721f"><con:settings/><con:parameters/><con:representation type="RESPONSE"><con:mediaType>application/xml</con:mediaType><con:status>200</con:status><con:params/><con:element xmlns:ns="http://busdox.org/serviceMetadata/publishing/1.0/">ns:ServiceGroup</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/plain</con:mediaType><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>404 500</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType>text/xml</con:mediaType><con:status>200</con:status><con:params/><con:element xmlns:ns="http://busdox.org/serviceMetadata/publishing/1.0/">ns:ServiceGroup</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=UTF-8</con:mediaType><con:status>401 500 404</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml</con:mediaType><con:status>404 400</con:status><con:params/></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=utf-8</con:mediaType><con:status>403</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:request name="Get" mediaType="application/xml" id="a9f15369-89e3-4e53-a448-a9881605a8b0"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://130.206.118.4/cipa-smp-full-webapp/iso6523-actorid-upis::0088:5798000000003</con:originalUri><con:credentials><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method><con:method name="YYYZZZ-55-Put" method="PUT" id="951c948c-9ef6-494b-b569-389e1dd323ea"><con:settings/><con:parameters/><con:representation type="REQUEST"><con:mediaType>text/xml</con:mediaType><con:params/><con:element xmlns:ns="http://busdox.org/serviceMetadata/publishing/1.0/">ns:ServiceGroup</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>400 403</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/plain</con:mediaType><con:status>403</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=UTF-8</con:mediaType><con:status>401 403 500 400 404</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=utf-8</con:mediaType><con:status>407</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>500</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml</con:mediaType><con:status>500 400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:request name="Put" mediaType="text/xml" postQueryString="false" id="e50d78e0-763f-4bfd-aa1c-f4dcc7595a2a"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request><![CDATA[<ServiceGroup xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">
+</ServiceMetadata>]]></con:request><con:credentials><con:username>user</con:username><con:password>user</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method><con:method name="YYYZZZ-47-Delete" method="DELETE" id="cccbd073-0e3d-439b-a747-946a73f5b67c"><con:settings/><con:parameters/><con:representation type="FAULT"><con:mediaType>text/plain</con:mediaType><con:status>403 404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>404 500</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="REQUEST"><con:mediaType>application/xml</con:mediaType><con:params/></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=UTF-8</con:mediaType><con:status>500</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:request name="Delete" mediaType="application/xml" id="cfe391c2-9084-45a5-a637-fbbc25a25f27" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:credentials><con:username>user</con:username><con:password>user</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method></con:resource><con:resource name="ServiceGroupIDWrongFormat" path="/ehealth-actorid-qns:0088:7770010100777" id="2ff08415-f133-4c23-bf64-91204b94f5c1"><con:settings/><con:parameters/><con:method name="YYYZZZ-54-Get" method="GET" id="36ced4c8-0e92-4686-a5f4-e9c9870b721f"><con:settings/><con:parameters/><con:representation type="RESPONSE"><con:mediaType>application/xml</con:mediaType><con:status>200</con:status><con:params/><con:element xmlns:ns="http://busdox.org/serviceMetadata/publishing/1.0/">ns:ServiceGroup</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/plain</con:mediaType><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>404 500</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType>text/xml</con:mediaType><con:status>200</con:status><con:params/><con:element xmlns:ns="http://busdox.org/serviceMetadata/publishing/1.0/">ns:ServiceGroup</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=UTF-8</con:mediaType><con:status>401 500 404</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml</con:mediaType><con:status>404 400</con:status><con:params/></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=utf-8</con:mediaType><con:status>403</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:request name="Get" mediaType="application/xml" id="a9f15369-89e3-4e53-a448-a9881605a8b0"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://130.206.118.4/cipa-smp-full-webapp/iso6523-actorid-upis::0088:5798000000003</con:originalUri><con:credentials><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method><con:method name="YYYZZZ-55-Put" method="PUT" id="951c948c-9ef6-494b-b569-389e1dd323ea"><con:settings/><con:parameters/><con:representation type="REQUEST"><con:mediaType>text/xml</con:mediaType><con:params/><con:element xmlns:ns="http://busdox.org/serviceMetadata/publishing/1.0/">ns:ServiceGroup</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>400 403</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/plain</con:mediaType><con:status>403</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=UTF-8</con:mediaType><con:status>401 403 500 400 404</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>404</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html; charset=utf-8</con:mediaType><con:status>407</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>400</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType xsi:nil="true"/><con:status>500</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml</con:mediaType><con:status>500 400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:request name="Put" mediaType="text/xml" postQueryString="false" id="e50d78e0-763f-4bfd-aa1c-f4dcc7595a2a"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request><![CDATA[<ServiceGroup xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">
    <ParticipantIdentifier scheme="${=request.getProperty('ParticipantIdentifierScheme').getValue()}">${=request.getProperty('ParticipantIdentifier').getValue()}</ParticipantIdentifier>
    <ServiceMetadataReferenceCollection/>
    <Extension>
@@ -208,13 +208,7 @@
         <ExtensionAgencyName>sample string</ExtensionAgencyName>
         <ext:nextdummynode xmlns:ext="http://test2.eu">token1</ext:nextdummynode>
     </Extension>
-</ServiceGroup>]]></con:request><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
-  <con:entry key="ParticipantIdentifierScheme" value="${#Project#defaultParticipantIdentifierScheme}"/>
-  <con:entry key="ParticipantIdentifier" value="${#Project#defaultParticipantIdentifier}"/>
-</con:parameters><con:parameterOrder><con:entry>ParticipantIdentifierScheme</con:entry><con:entry>ParticipantIdentifier</con:entry></con:parameterOrder></con:request></con:method><con:method name="DELETE ServiceGroup" id="57d76dab-afb8-4f0e-9a71-3c95150e3ceb" method="DELETE"><con:settings/><con:parameters/><con:representation type="FAULT"><con:mediaType>text/html</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:representation type="REQUEST"><con:mediaType>text/xml</con:mediaType><con:params/></con:representation><con:representation type="REQUEST"><con:mediaType>application/xml</con:mediaType><con:params/></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>404 401 400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>403</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:request name="Simple Request" id="803032c1-cc3a-49c0-98d8-ac48dc1ebdc5" mediaType="text/xml" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://localhost/smp/ehealth-actorid-qns::0088%3A7770010100777%3Atest</con:originalUri><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
-  <con:entry key="ParticipantIdentifierScheme" value="${#Project#defaultParticipantIdentifierScheme}"/>
-  <con:entry key="ParticipantIdentifier" value="${#Project#defaultParticipantIdentifier}"/>
-</con:parameters><con:parameterOrder><con:entry>ParticipantIdentifierScheme</con:entry><con:entry>ParticipantIdentifier</con:entry></con:parameterOrder></con:request><con:request name="Simple Request with reference params" id="803032c1-cc3a-49c0-98d8-ac48dc1ebdc5" mediaType="text/xml" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://localhost/smp/ehealth-actorid-qns::0088%3A7770010100777%3Atest</con:originalUri><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
+</ServiceGroup>]]></con:request><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/><con:parameterOrder><con:entry>ParticipantIdentifierScheme</con:entry><con:entry>ParticipantIdentifier</con:entry></con:parameterOrder></con:request></con:method><con:method name="DELETE ServiceGroup" id="57d76dab-afb8-4f0e-9a71-3c95150e3ceb" method="DELETE"><con:settings/><con:parameters/><con:representation type="FAULT"><con:mediaType>text/html</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:representation type="REQUEST"><con:mediaType>text/xml</con:mediaType><con:params/></con:representation><con:representation type="REQUEST"><con:mediaType>application/xml</con:mediaType><con:params/></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>404 401 400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/html;charset=utf-8</con:mediaType><con:status>403</con:status><con:params/><con:element>html</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>0</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:representation type="RESPONSE"><con:mediaType xsi:nil="true"/><con:status>200</con:status><con:params/><con:element>data</con:element></con:representation><con:request name="Simple Request" id="803032c1-cc3a-49c0-98d8-ac48dc1ebdc5" mediaType="text/xml" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://localhost/smp/ehealth-actorid-qns::0088%3A7770010100777%3Atest</con:originalUri><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/><con:parameterOrder><con:entry>ParticipantIdentifierScheme</con:entry><con:entry>ParticipantIdentifier</con:entry></con:parameterOrder></con:request><con:request name="Simple Request with reference params" id="803032c1-cc3a-49c0-98d8-ac48dc1ebdc5" mediaType="text/xml" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://localhost/smp/ehealth-actorid-qns::0088%3A7770010100777%3Atest</con:originalUri><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
   <con:entry key="ParticipantIdentifierScheme" value="${Put ServiceGroup#ParticipantIdentifierScheme}"/>
   <con:entry key="ParticipantIdentifier" value="${Put ServiceGroup#ParticipantIdentifier}"/>
 </con:parameters><con:parameterOrder><con:entry>ParticipantIdentifierScheme</con:entry><con:entry>ParticipantIdentifier</con:entry></con:parameterOrder></con:request></con:method></con:resource><con:resource name="NServiceMetadata" path="/{ParticipantIdentifierScheme}::{ParticipantIdentifier}/services/{DocTypeIdentifierScheme}::{DocTypeIdentifier}" id="61682ae6-7d71-468d-ade1-cac863e89a1c"><con:settings/><con:parameters><con:parameter><con:name>ParticipantIdentifierScheme</con:name><con:value>${Put ServiceGroup#ParticipantIdentifierScheme}</con:value><con:style>TEMPLATE</con:style><con:default>${Put ServiceGroup#ParticipantIdentifierScheme}</con:default></con:parameter><con:parameter><con:name>ParticipantIdentifier</con:name><con:value>${Put ServiceGroup#ParticipantIdentifier}</con:value><con:style>TEMPLATE</con:style><con:default>${Put ServiceGroup#ParticipantIdentifier}</con:default></con:parameter><con:parameter><con:name>DocTypeIdentifierScheme</con:name><con:value>${#Project#defaultDocTypeIdentifierScheme}</con:value><con:style>TEMPLATE</con:style><con:default>${#Project#defaultDocTypeIdentifierScheme}</con:default></con:parameter><con:parameter><con:name>DocTypeIdentifier</con:name><con:value>${#Project#defaultDocTypeIdentifier}</con:value><con:style>TEMPLATE</con:style><con:default>${#Project#defaultDocTypeIdentifier}</con:default></con:parameter></con:parameters><con:method name="GET ServiceMetadata" id="57d76dab-afb8-4f0e-9a71-3c95150e3ceb" method="GET"><con:settings/><con:parameters/><con:representation type="RESPONSE"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>200</con:status><con:params/><con:element xmlns:ns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05">ns:ServiceGroup</con:element></con:representation><con:representation type="FAULT"><con:mediaType>text/xml;charset=UTF-8</con:mediaType><con:status>404 400</con:status><con:params/><con:element xmlns:ec="ec:services:SMP:1.0">ec:ErrorResponse</con:element></con:representation><con:request name="Simple Request" id="803032c1-cc3a-49c0-98d8-ac48dc1ebdc5" mediaType="application/json"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:credentials><con:authType>No Authorization</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
@@ -1332,8 +1326,8 @@ testRunner.testCase.testSteps['Delete ServiceGroup'].run(testRunner, context);
       <ex:Test xmlns:ex="http://test.eu">Test</ex:Test>
    </Extension>
 </ServiceGroup>]]></con:request><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-qns::0088:7770010100777</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="2c5c11d9-018c-4b57-854c-8ae30dab1088" name="Valid HTTP Status Codes"><con:configuration><codes>201</codes></con:configuration></con:assertion><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters><entry key="ParticipantIdentifier" value="${#Project#defaultParticipantIdentifier}:smp017" xmlns="http://eviware.com/soapui/config"/></con:parameters></con:restRequest></con:config></con:testStep><con:testStep type="restrequest" name="TEST1 Delete ServiceGroup" id="7f6b7d43-c490-4cc9-a0cc-1ae359dfa792"><con:settings/><con:config service="SMP" resourcePath="/{ParticipantIdentifierScheme}::{ParticipantIdentifier}" methodName="DELETE ServiceGroup" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="TEST1 Delete ServiceGroup" mediaType="application/xml" id="a97cde56-8e9c-4d6f-b950-faf82b0268e9" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-notqns::0088:7770010100777</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="4c4a216d-0466-4c22-8bfc-397a1a35182c" name="Valid HTTP Status Codes"><con:configuration><codes>404</codes></con:configuration></con:assertion><con:assertion type="Simple Contains" id="b950b451-c585-470c-ae3b-d0d519dae8d7" name="Contains"><con:configuration><token>NOT_FOUND</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
-  <con:entry key="ParticipantIdentifierScheme" value="${Put ServiceGroup#ParticipantIdentifierScheme}:different"/>
-  <con:entry key="ParticipantIdentifier" value="${Put ServiceGroup#ParticipantIdentifier}"/>
+  <con:entry key="ParticipantIdentifierScheme" value="${Put ServiceGroup#ParticipantIdentifierScheme}"/>
+  <con:entry key="ParticipantIdentifier" value="${Put ServiceGroup#ParticipantIdentifier}:different"/>
 </con:parameters></con:restRequest></con:config></con:testStep><con:testStep type="restrequest" name="Get ServiceGroup1" id="9f1fb1b5-e6e9-4734-864d-5a9baf8d9ab8"><con:settings/><con:config service="SMP" resourcePath="/{ParticipantIdentifierScheme}::{ParticipantIdentifier}" methodName="GET ServiceGroup" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="Get ServiceGroup1" mediaType="application/xml" id="a9f15369-89e3-4e53-a448-a9881605a8b0"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://130.206.118.4/cipa-smp-full-webapp/iso6523-actorid-upis::0088:5798000000003</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="bb579212-262c-4380-82df-c81be864bf71" name="Valid HTTP Status Codes"><con:configuration><codes>200</codes></con:configuration></con:assertion><con:credentials><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
   <con:entry key="ParticipantIdentifierScheme" value="${Put ServiceGroup#ParticipantIdentifierScheme}"/>
   <con:entry key="ParticipantIdentifier" value="${Put ServiceGroup#ParticipantIdentifier}"/>
@@ -3437,7 +3431,7 @@ testRunner.testCase.testSteps['Delete ServiceGroup'].run(testRunner, context);
 </ServiceMetadata>]]></con:request><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-qns%3A%3A0088%3A7770010100777/services/busdox-docid-qns%3A%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-001%3A%3AInvoice%23%23UBL-2.0</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="9e0a9400-9bb6-42a7-9104-ef7c169997b9" name="Valid HTTP Status Codes"><con:configuration><codes>201</codes></con:configuration></con:assertion><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
   <con:entry key="ParticipantIdentifierScheme" value="${Put ServiceGroup#ParticipantIdentifierScheme}"/>
   <con:entry key="ParticipantIdentifier" value="${Put ServiceGroup#ParticipantIdentifier}"/>
-</con:parameters></con:restRequest></con:config></con:testStep><con:testStep type="restrequest" name="TEST Delete ServiceMetadata FORMAT_ERROR" id="ee2f4c33-8d90-4b08-8c8c-2a9ed564057b"><con:settings/><con:config service="SMP" resourcePath="/{ParticipantIdentifierScheme}%3A{ParticipantIdentifier}/services/busdox-docid-qns%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-001%3AInvoice%23%23UBL-2.0" methodName="YYYZZZ-59-Delete" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="TEST Delete ServiceMetadata FORMAT_ERROR" mediaType="application/xml" id="cfe391c2-9084-45a5-a637-fbbc25a25f27" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-qns%3A%3A0088%3A7770010100777/services/busdox-docid-qns%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-001%3AInvoice%23%23UBL-2.0</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="c4033a08-4d2f-4db5-b7d2-dce1419c0401" name="Valid HTTP Status Codes"><con:configuration><codes>400</codes></con:configuration></con:assertion><con:assertion type="Simple Contains" id="abe0bedb-b702-4d19-8624-f62104ed3299" name="Contains"><con:configuration><token>FORMAT_ERROR</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:assertion type="Simple Contains" id="48703dfe-9df9-4ae9-854b-96b0dcb6be5e" name="Contains 2"><con:configuration><token>Malformed identifier, scheme and id should be delimited by double colon</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
+</con:parameters></con:restRequest></con:config></con:testStep><con:testStep type="restrequest" name="TEST Delete ServiceMetadata FORMAT_ERROR" id="ee2f4c33-8d90-4b08-8c8c-2a9ed564057b"><con:settings/><con:config service="SMP" resourcePath="/{ParticipantIdentifierScheme}%3A{ParticipantIdentifier}/services/busdox-docid-qns%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-001%3AInvoice%23%23UBL-2.0" methodName="YYYZZZ-59-Delete" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="TEST Delete ServiceMetadata FORMAT_ERROR" mediaType="application/xml" id="cfe391c2-9084-45a5-a637-fbbc25a25f27" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-qns%3A%3A0088%3A7770010100777/services/busdox-docid-qns%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-001%3AInvoice%23%23UBL-2.0</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="c4033a08-4d2f-4db5-b7d2-dce1419c0401" name="Valid HTTP Status Codes"><con:configuration><codes>400</codes></con:configuration></con:assertion><con:assertion type="Simple Contains" id="abe0bedb-b702-4d19-8624-f62104ed3299" name="Contains"><con:configuration><token>FORMAT_ERROR</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:assertion type="Simple Contains" id="48703dfe-9df9-4ae9-854b-96b0dcb6be5e" name="Contains 2"><con:configuration><token>Invalid Identifier:</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
   <con:entry key="ParticipantIdentifierScheme" value=""/>
   <con:entry key="ParticipantIdentifier" value=""/>
 </con:parameters><con:parameterOrder><con:entry>ParticipantIdentifierScheme</con:entry><con:entry>ParticipantIdentifier</con:entry></con:parameterOrder></con:restRequest></con:config></con:testStep><con:testStep type="restrequest" name="Get ServiceMetadata FORMAT_ERROR" id="5b1270fb-7209-478e-a9ac-d08c51c230d2"><con:settings/><con:config service="SMP" resourcePath="/{ParticipantIdentifierScheme}::{ParticipantIdentifier}/services/{DocTypeIdentifierScheme}::{DocTypeIdentifier}" methodName="GET ServiceMetadata" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="Get ServiceMetadata FORMAT_ERROR" mediaType="application/xml" id="798e6729-3cf8-44b5-8fc7-f19165c82521"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-qns%3A%3A0088%3A7770010100777/services/busdox-docid-qns%3A%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-001%3A%3AInvoice%23%23UBL-2.0</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="108aac0b-5f2d-4000-8678-31afca1f6816" name="Valid HTTP Status Codes"><con:configuration><codes>200</codes></con:configuration></con:assertion><con:credentials><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:restRequest></con:config></con:testStep><con:testStep type="restrequest" name="Delete ServiceMetadata" id="03fa933f-9f7d-4302-86fc-edb188e88373" disabled="true"><con:settings/><con:config service="SMP" resourcePath="/{ParticipantIdentifierScheme}::{ParticipantIdentifier}/services/{DocTypeIdentifierScheme}::{DocTypeIdentifier}" methodName="DELETE ServiceMetadata" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="Delete ServiceMetadata" mediaType="application/xml" id="cfe391c2-9084-45a5-a637-fbbc25a25f27" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-qns%3A%3A0088%3A7770010100777/services/busdox-docid-qns%3A%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-001%3A%3AInvoice%23%23UBL-2.0</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="7e8b1492-e2f8-45aa-b293-f460e1662715" name="Valid HTTP Status Codes"><con:configuration><codes>200</codes></con:configuration></con:assertion><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:restRequest></con:config></con:testStep><con:testStep type="restrequest" name="Delete ServiceGroup" id="dda84879-7c1e-4019-a75b-a1428c5d8a9c" disabled="true"><con:settings/><con:config service="SMP" resourcePath="/{ParticipantIdentifierScheme}::{ParticipantIdentifier}" methodName="DELETE ServiceGroup" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="Delete ServiceGroup" mediaType="application/xml" id="a97cde56-8e9c-4d6f-b950-faf82b0268e9" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>${#Project#url}</con:endpoint><con:request/><con:originalUri>http://wltdgt02.cc.cec.eu.int/cipa-smp-full-webapp/ehealth-actorid-qns::0088:7770010100777</con:originalUri><con:assertion type="Valid HTTP Status Codes" id="030a58c2-0ac3-4d98-9575-e70e57cec7ec" name="Valid HTTP Status Codes"><con:configuration><codes>200</codes></con:configuration></con:assertion><con:credentials><con:username>${#Project#adminSmp1Test}</con:username><con:password>${#Project#adminSmp1TestPassword}</con:password><con:selectedAuthProfile>Basic</con:selectedAuthProfile><con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes><con:preemptive>true</con:preemptive><con:authType>Preemptive</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters>
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/config/properties/SMPIdentifierServicePropertyUpdateListener.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/config/properties/SMPIdentifierServicePropertyUpdateListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..19cf498e273df6d33e092464287efdc3e062ff0a
--- /dev/null
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/config/properties/SMPIdentifierServicePropertyUpdateListener.java
@@ -0,0 +1,58 @@
+package eu.europa.ec.edelivery.smp.config.properties;
+
+import eu.europa.ec.edelivery.smp.config.PropertyUpdateListener;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
+import eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum;
+import eu.europa.ec.edelivery.smp.logging.SMPLogger;
+import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import static eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum.*;
+
+/**
+ * Class update mail sender configuration on property update event
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@Component
+public class SMPIdentifierServicePropertyUpdateListener implements PropertyUpdateListener {
+    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(SMPIdentifierServicePropertyUpdateListener.class);
+
+    IdentifierService identifierService;
+
+    public SMPIdentifierServicePropertyUpdateListener(IdentifierService identifierService) {
+        this.identifierService = identifierService;
+    }
+
+    @Override
+    public void updateProperties(Map<SMPPropertyEnum, Object> properties) {
+        if (identifierService == null) {
+            LOG.warn("No IdentifierService found, Skip IdentifierService configuration!");
+            return;
+        }
+        Boolean partcSchemeMandatory = (Boolean) properties.get(PARTC_SCH_MANDATORY);
+        Pattern partcSchemePattern = (Pattern) properties.get(PARTC_SCH_VALIDATION_REGEXP);
+        List<String> partcCaseSensitiveSchemes = (List<String>) properties.get(CS_PARTICIPANTS);
+        List<String> docCaseSensitiveSchemes = (List<String>) properties.get(CS_DOCUMENTS);
+
+        identifierService.configureParticipantIdentifierFormatter(partcCaseSensitiveSchemes, partcSchemeMandatory, partcSchemePattern);
+        identifierService.configureDocumentIdentifierFormatter(docCaseSensitiveSchemes);
+    }
+
+    @Override
+    public List<SMPPropertyEnum> handledProperties() {
+        return Arrays.asList(
+                PARTC_SCH_SPLIT_REGEXP,
+                PARTC_SCH_VALIDATION_REGEXP,
+                PARTC_SCH_MANDATORY,
+                CS_PARTICIPANTS,
+                CS_DOCUMENTS
+        );
+    }
+}
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceGroupController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceGroupController.java
index aa924b40453866777d737ae84a892b627f3c893e..e04f62e95e38c1b2361e13b2892877f4bbb3efe0 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceGroupController.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceGroupController.java
@@ -13,7 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.controllers;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.conversion.ServiceGroupConverter;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
@@ -59,14 +59,14 @@ public class ServiceGroupController {
     protected final SmpUrlBuilder pathBuilder;
     protected final ServiceGroupService serviceGroupService;
     protected final ServiceMetadataService serviceMetadataService;
-    protected final CaseSensitivityNormalizer caseSensitivityNormalizer;
+    protected final IdentifierService caseSensitivityNormalizer;
     protected final PayloadValidatorService payloadValidatorService;
 
     public ServiceGroupController(ServiceGroupValidator serviceGroupValidator,
                                   SmpUrlBuilder pathBuilder,
                                   ServiceGroupService serviceGroupService,
                                   ServiceMetadataService serviceMetadataService,
-                                  CaseSensitivityNormalizer caseSensitivityNormalizer,
+                                  IdentifierService caseSensitivityNormalizer,
                                   PayloadValidatorService payloadValidatorService) {
         this.serviceGroupValidator = serviceGroupValidator;
         this.pathBuilder = pathBuilder;
@@ -83,7 +83,7 @@ public class ServiceGroupController {
         String host = httpReq.getRemoteHost();
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_GET_SERVICE_GROUP, host, serviceGroupId);
 
-        ParticipantIdentifierType participantIdentifierType = caseSensitivityNormalizer.normalizeParticipant(serviceGroupId);
+        ParticipantIdentifierType participantIdentifierType = caseSensitivityNormalizer.normalizeParticipantIdentifier(serviceGroupId);
         ServiceGroup serviceGroup = serviceGroupService.getServiceGroup(participantIdentifierType);
         addReferences(serviceGroup);
 
@@ -124,7 +124,7 @@ public class ServiceGroupController {
         String host = getRemoteHost(httpReq);
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_DELETE_SERVICE_GROUP, authentUser, host, serviceGroupId);
 
-        ParticipantIdentifierType participantIdentifierType = caseSensitivityNormalizer.normalizeParticipant(serviceGroupId);
+        ParticipantIdentifierType participantIdentifierType = caseSensitivityNormalizer.normalizeParticipantIdentifier(serviceGroupId);
         serviceGroupService.deleteServiceGroup(participantIdentifierType);
 
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_DELETE_END_SERVICE_GROUP, authentUser, host, serviceGroupId);
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceMetadataController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceMetadataController.java
index e8823d80852b30f5187f3f57c445bca5b5d8b8af..868d368615afc71500d50e19b91d275fa98994f5 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceMetadataController.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/ServiceMetadataController.java
@@ -13,7 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.controllers;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
@@ -23,6 +23,7 @@ import eu.europa.ec.edelivery.smp.services.ServiceMetadataService;
 import eu.europa.ec.edelivery.smp.validation.ServiceMetadataValidator;
 import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
 import org.apache.commons.lang3.StringUtils;
+import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -34,56 +35,56 @@ import org.w3c.dom.Document;
 import javax.servlet.http.HttpServletRequest;
 import javax.xml.transform.TransformerException;
 import java.io.ByteArrayInputStream;
-import java.io.UnsupportedEncodingException;
 
 import static eu.europa.ec.edelivery.smp.controllers.WebConstants.HTTP_PARAM_DOMAIN;
-import static eu.europa.ec.smp.api.Identifiers.asDocumentId;
 import static org.springframework.http.ResponseEntity.created;
 import static org.springframework.http.ResponseEntity.ok;
 
 /**
- * Created by gutowpa on 11/09/2017.
+ * @author gutowpa
+ * @since 3.0.0
  */
 @RestController
 @RequestMapping("/{serviceGroupId}/services/{serviceMetadataId}")
 public class ServiceMetadataController {
 
-    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(ServiceGroupController.class);
+    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(ServiceMetadataController.class);
 
     protected final ServiceMetadataValidator serviceMetadataValidator;
     protected final ServiceMetadataService serviceMetadataService;
     protected final SmpUrlBuilder pathBuilder;
-    protected final CaseSensitivityNormalizer caseSensitivityNormalizer;
+    protected final IdentifierService identifierService;
     protected final PayloadValidatorService payloadValidatorService;
 
     public ServiceMetadataController(ServiceMetadataValidator serviceMetadataValidator,
                                      ServiceMetadataService serviceMetadataService,
                                      SmpUrlBuilder pathBuilder,
-                                     CaseSensitivityNormalizer caseSensitivityNormalizer,
+                                     IdentifierService identifierService,
                                      PayloadValidatorService payloadValidatorService) {
         this.serviceMetadataValidator = serviceMetadataValidator;
         this.serviceMetadataService = serviceMetadataService;
         this.pathBuilder = pathBuilder;
-        this.caseSensitivityNormalizer = caseSensitivityNormalizer;
+        this.identifierService = identifierService;
         this.payloadValidatorService = payloadValidatorService;
     }
 
     @GetMapping(produces = "text/xml; charset=UTF-8")
     public String getServiceMetadata(HttpServletRequest httpReq,
                                      @PathVariable String serviceGroupId,
-                                     @PathVariable String serviceMetadataId) throws TransformerException, UnsupportedEncodingException {
+                                     @PathVariable String serviceMetadataId) throws TransformerException {
 
         String host = httpReq.getRemoteHost();
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_GET_SERVICE_METADATA, host, serviceGroupId, serviceMetadataId);
-        ParticipantIdentifierType participantIdentifierType = caseSensitivityNormalizer.normalizeParticipant(serviceGroupId);
-        Document serviceMetadata = serviceMetadataService.getServiceMetadataDocument(participantIdentifierType, asDocumentId(serviceMetadataId));
+        ParticipantIdentifierType participantIdentifierType = identifierService.normalizeParticipantIdentifier(serviceGroupId);
+        DocumentIdentifier documentIdentifier = identifierService.normalizeDocumentIdentifier(serviceMetadataId);
+
+        Document serviceMetadata = serviceMetadataService.getServiceMetadataDocument(participantIdentifierType, documentIdentifier);
 
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_GET_END_SERVICE_METADATA, host, serviceGroupId, serviceMetadataId);
         return ServiceMetadataConverter.toString(serviceMetadata);
     }
 
     @PutMapping
-    /// @PreAuthorize("hasAnyAuthority(T(eu.europa.ec.edelivery.smp.data.ui.auth.SMPAuthority).S_AUTHORITY_TOKEN_SMP_ADMIN) OR  @serviceGroupService.isServiceGroupOwner(authentication.name, #serviceGroupId)")
     @PreAuthorize("hasAnyAuthority(T(eu.europa.ec.edelivery.smp.data.ui.auth.SMPAuthority).S_AUTHORITY_TOKEN_SMP_ADMIN,  " +
             " T(eu.europa.ec.edelivery.smp.data.ui.auth.SMPAuthority).S_AUTHORITY_TOKEN_WS_SMP_ADMIN) " +
             " OR @serviceGroupService.isServiceGroupOwner(authentication.name, #serviceGroupId)")
@@ -100,8 +101,10 @@ public class ServiceMetadataController {
         payloadValidatorService.validateUploadedContent(new ByteArrayInputStream(body), MimeTypeUtils.APPLICATION_XML_VALUE);
 
         serviceMetadataValidator.validate(serviceGroupId, serviceMetadataId, body);
-        ParticipantIdentifierType participantIdentifierType = caseSensitivityNormalizer.normalizeParticipant(serviceGroupId);
-        boolean newServiceMetadataCreated = serviceMetadataService.saveServiceMetadata(domain, participantIdentifierType, asDocumentId(serviceMetadataId), body);
+        ParticipantIdentifierType participantIdentifierType = identifierService.normalizeParticipantIdentifier(serviceGroupId);
+        DocumentIdentifier documentIdentifier = identifierService.normalizeDocumentIdentifier(serviceMetadataId);
+
+        boolean newServiceMetadataCreated = serviceMetadataService.saveServiceMetadata(domain, participantIdentifierType, documentIdentifier, body);
 
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_PUT_END_SERVICE_METADATA, authentUser, host, domain, serviceGroupId, serviceMetadataId, newServiceMetadataCreated);
 
@@ -121,8 +124,9 @@ public class ServiceMetadataController {
         String authentUser = SecurityContextHolder.getContext().getAuthentication().getName();
         String host = getRemoteHost(httpReq);
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_DELETE_SERVICE_METADATA, authentUser, host, domain, serviceGroupId, serviceMetadataId);
-        ParticipantIdentifierType participantIdentifierType = caseSensitivityNormalizer.normalizeParticipant(serviceGroupId);
-        serviceMetadataService.deleteServiceMetadata(domain, participantIdentifierType, asDocumentId(serviceMetadataId));
+        ParticipantIdentifierType participantIdentifierType = identifierService.normalizeParticipantIdentifier(serviceGroupId);
+        DocumentIdentifier documentIdentifier = identifierService.normalizeDocumentIdentifier(serviceMetadataId);
+        serviceMetadataService.deleteServiceMetadata(domain, participantIdentifierType, documentIdentifier);
 
         LOG.businessInfo(SMPMessageCode.BUS_HTTP_DELETE_END_SERVICE_METADATA, authentUser, host, domain, serviceGroupId, serviceMetadataId);
         return ok().build();
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/SmpUrlBuilder.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/SmpUrlBuilder.java
index 7ea947e29c81143ac949d4a3923f48f7352772b7..a50ca5c107c54cc7fbf44e75a6743cfb1d1cf9c9 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/SmpUrlBuilder.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/controllers/SmpUrlBuilder.java
@@ -13,6 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.controllers;
 
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
@@ -20,13 +21,11 @@ import eu.europa.ec.edelivery.smp.utils.HttpForwardedHeaders;
 import org.apache.commons.lang3.StringUtils;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
-import org.springframework.web.server.adapter.ForwardedHeaderTransformer;
 import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
 import org.springframework.web.util.UriComponentsBuilder;
 import org.springframework.web.util.UrlPathHelper;
@@ -34,8 +33,6 @@ import org.springframework.web.util.UrlPathHelper;
 import javax.servlet.http.HttpServletRequest;
 import java.net.URI;
 
-import static eu.europa.ec.smp.api.Identifiers.asUrlEncodedString;
-
 /**
  * This class provides tools to generate SMP's URL in responses. The client can use provided URL for another call to the SMP.
  * Because SMP can run behind the reverse proxy, the X-Forwarded-* headers from the request are used for generating the URL.
@@ -58,12 +55,14 @@ public class SmpUrlBuilder {
 
     private static final String SMP_DOCUMENT_RESOURCE_TEMPLATE = "/{participantId}/services/{docId}";
 
-    @Autowired
-    ConfigurationService configurationService;
 
-    @Autowired
-    ForwardedHeaderTransformer forwardedHeaderTransformer;
+    private ConfigurationService configurationService;
+    private IdentifierService identifierService;
 
+    public SmpUrlBuilder(ConfigurationService configurationService, IdentifierService identifierService) {
+        this.configurationService = configurationService;
+        this.identifierService = identifierService;
+    }
 
     public URI getCurrentUri() {
         return ServletUriComponentsBuilder.fromCurrentRequestUri().build().toUri();
@@ -73,29 +72,29 @@ public class SmpUrlBuilder {
         LOG.debug("Build SMP url for participant identifier: [{}] and document identifier [{}].", participantId, docId);
         HttpServletRequest req = getCurrentRequest();
         HttpForwardedHeaders fh = new HttpForwardedHeaders(req);
-        LOG.debug("Generate response uri with headers data: [{}]" + fh.toString());
+        LOG.debug("Generate response uri with headers data: [{}]", fh);
         UriComponentsBuilder uriBuilder = getSMPUrlBuilder();//
-        if (fh.getHost()!=null) {
-            LOG.debug("Set response uri for forwarded headers: [{}]", fh.toString());
+        if (fh.getHost() != null) {
+            LOG.debug("Set response uri for forwarded headers: [{}]", fh);
             uriBuilder = uriBuilder.host(fh.getHost());
             String port = fh.getNonDefaultPort();
             if (!StringUtils.isBlank(port)) {
                 uriBuilder = uriBuilder.port(port);
-            } else if (!StringUtils.isBlank(fh.getPort())){
-                LOG.debug("Set port to null because it is default port: [{}]", fh.toString());
+            } else if (!StringUtils.isBlank(fh.getPort())) {
+                LOG.debug("Set port to null because it is default port: [{}]", fh);
                 uriBuilder = uriBuilder.port(null);
             }
             uriBuilder = uriBuilder.scheme(fh.getProto());
         } else {
             LOG.debug("Ignore settings header because host is null!");
         }
+        String urlEncodedFormatParticipant = identifierService.urlEncodedFormatParticipant(participantId);
+        String urlEncodedFormatDocument = identifierService.urlEncodedFormatDocument(docId);
 
-        String path = uriBuilder
+        return uriBuilder
                 .path(SMP_DOCUMENT_RESOURCE_TEMPLATE)
-                .buildAndExpand(asUrlEncodedString(participantId), asUrlEncodedString(docId))
+                .buildAndExpand(urlEncodedFormatParticipant, urlEncodedFormatDocument)
                 .toUriString();
-
-        return path;
     }
 
     public String buildSMPUrlForPath(String path) {
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java
index a8391b5a7c9ad677cca172ccf4364631e09ebfc7..682130bc3151eccfc1514e3d25eaafff7fa39ab6 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java
@@ -56,6 +56,11 @@ public class ServiceErrorControllerAdvice extends AbstractErrorControllerAdvice
         return buildAndLog(BAD_REQUEST, FORMAT_ERROR, ex.getMessage(), ex);
     }
 
+    @ExceptionHandler(IllegalArgumentException.class)
+    public ResponseEntity handleMalformedIdentifierException(IllegalArgumentException ex) {
+        return buildAndLog(BAD_REQUEST, FORMAT_ERROR, ex.getMessage(), ex);
+    }
+
     @ExceptionHandler(WrongInputFieldException.class)
     public ResponseEntity handleWrongInputFieldException(WrongInputFieldException ex) {
         return buildAndLog(BAD_REQUEST, WRONG_FIELD, ex.getMessage(), ex);
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/ApplicationResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/ApplicationResource.java
index f4b17af39678478adcfab6e67965722436cd059c..bc01387dfeccb8023015efc881f0b90ef041ddef 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/ApplicationResource.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/ApplicationResource.java
@@ -69,14 +69,12 @@ public class ApplicationResource {
     }
 
     protected String getDisplayVersion() {
-        StringBuilder display = new StringBuilder();
-        display.append(artifactName);
-        display.append(" Version [");
-        display.append(artifactVersion);
-        display.append("] Build-Time [");
-        display.append(buildTime + "|" + TimeZone.getDefault().getDisplayName());
-        display.append("]");
-        return display.toString();
+        return artifactName +
+                " Version [" +
+                artifactVersion +
+                "] Build-Time [" +
+                buildTime + "|" + TimeZone.getDefault().getDisplayName() +
+                "]";
     }
 
     @Secured({SMPAuthority.S_AUTHORITY_TOKEN_SYSTEM_ADMIN, SMPAuthority.S_AUTHORITY_TOKEN_SMP_ADMIN,
@@ -88,7 +86,7 @@ public class ApplicationResource {
         info.setSmlParticipantMultiDomainOn(configurationService.isSMLMultiDomainEnabled());
         info.setParticipantSchemaRegExp(configurationService.getParticipantIdentifierSchemeRexExpPattern());
         info.setParticipantSchemaRegExpMessage(configurationService.getParticipantIdentifierSchemeRexExpMessage());
-        info.setConcatEBCorePartyId(configurationService.getForceConcatenateEBCorePartyId());
+        info.setConcatEBCorePartyId(false);
         info.setPartyIDSchemeMandatory(configurationService.getParticipantSchemeMandatory());
 
         info.setPasswordValidationRegExp(configurationService.getPasswordPolicyRexExpPattern());
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java
index bbde9c3f173614308c2f8e6281a01e49f09e4a41..5eaddb8cfc250a3704715a9a873191ab05037408 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidator.java
@@ -13,57 +13,48 @@
 
 package eu.europa.ec.edelivery.smp.validation;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.error.exceptions.BadRequestException;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-import eu.europa.ec.smp.api.Identifiers;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
 import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadataReferenceCollectionType;
 import org.springframework.stereotype.Component;
 
-import java.util.regex.Pattern;
-
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorBusinessCode.WRONG_FIELD;
 import static org.springframework.util.CollectionUtils.isEmpty;
 
 
 /**
- * Created by gutowpa on 02/08/2017.
+ * Class provides tools to parse, format and normalize Document and Participant identifiers.
+ *
+ * @author gutowpa
+ * @since 3.0.0
  */
 @Component
 public class ServiceGroupValidator {
     private static final SMPLogger LOG = SMPLoggerFactory.getLogger(ServiceGroupValidator.class);
 
     protected final ConfigurationService configurationService;
-    protected final CaseSensitivityNormalizer caseSensitivityNormalizer;
+    protected final IdentifierService identifierService;
 
     public ServiceGroupValidator(ConfigurationService configurationService,
-                                 CaseSensitivityNormalizer caseSensitivityNormalizer) {
+                                 IdentifierService identifierService) {
         this.configurationService = configurationService;
-        this.caseSensitivityNormalizer = caseSensitivityNormalizer;
+        this.identifierService = identifierService;
     }
 
     public void validate(String serviceGroupId, ServiceGroup serviceGroup) {
-        boolean schemeMandatory = configurationService.getParticipantSchemeMandatory();
-        LOG.debug("Parse service group [{}] with [{}] scheme", serviceGroupId, (schemeMandatory?"mandatory":"optional"));
+        LOG.debug("Validate URL participant identifier [{}] and XML serviceGroup", serviceGroupId);
 
-        final ParticipantIdentifierType participantId = caseSensitivityNormalizer.normalize(Identifiers.asParticipantId(serviceGroupId, schemeMandatory), schemeMandatory);
-        final ParticipantIdentifierType serviceGroupParticipantId =  caseSensitivityNormalizer.normalize(
-                serviceGroup.getParticipantIdentifier(), schemeMandatory);
+        final ParticipantIdentifierType participantId = identifierService.normalizeParticipantIdentifier(serviceGroupId);
+        final ParticipantIdentifierType serviceGroupParticipantId = identifierService.normalizeParticipant(serviceGroup.getParticipantIdentifier());
 
         if (!participantId.equals(serviceGroupParticipantId)) {
             // Business identifier must equal path
-            throw new BadRequestException(WRONG_FIELD, "Service Group Ids don't match between URL parameter and XML body");
-        }
-
-        String scheme = serviceGroupParticipantId.getScheme();
-        Pattern schemaPattern = configurationService.getParticipantIdentifierSchemeRexExp();
-
-        if (!schemaPattern.matcher(scheme==null?"":scheme).matches()) {
-            throw new BadRequestException(WRONG_FIELD, "Service Group scheme does not match allowed pattern: " + schemaPattern.pattern());
+            throw new BadRequestException(WRONG_FIELD, "Participant identifiers don't match between URL parameter [" + serviceGroupId + "] and XML body: [ scheme: '" + serviceGroupParticipantId.getScheme() + "', value: '" + serviceGroupParticipantId.getValue() + "']");
         }
 
         ServiceMetadataReferenceCollectionType references = serviceGroup.getServiceMetadataReferenceCollection();
@@ -71,5 +62,4 @@ public class ServiceGroupValidator {
             throw new BadRequestException(WRONG_FIELD, "ServiceMetadataReferenceCollection must be empty");
         }
     }
-
 }
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceMetadataValidator.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceMetadataValidator.java
index 8ffd5d076c21ef1963f391dedf4f02ffa2243185..60d6cbd689c8a3b93d4c50f12cf0432da7f0de11 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceMetadataValidator.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/validation/ServiceMetadataValidator.java
@@ -13,7 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.validation;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter;
 import eu.europa.ec.edelivery.smp.error.exceptions.BadRequestException;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
@@ -28,82 +28,88 @@ import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
 
-import static eu.europa.ec.edelivery.smp.exceptions.ErrorBusinessCode.OUT_OF_RANGE;
-import static eu.europa.ec.edelivery.smp.exceptions.ErrorBusinessCode.WRONG_FIELD;
-import static eu.europa.ec.smp.api.Identifiers.asDocumentId;
-import static eu.europa.ec.smp.api.Identifiers.asString;
+import static eu.europa.ec.edelivery.smp.exceptions.ErrorBusinessCode.*;
 
 /**
- * Created by gutowpa on 11/09/2017.
+ * Simple Service metadata validator
+ *
+ * @author gutowpa
+ * @since 3.0.0.
  */
 @Component
 public class ServiceMetadataValidator {
 
-    private static final Logger log = LoggerFactory.getLogger(ServiceMetadataValidator.class);
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceMetadataValidator.class);
 
     protected final ConfigurationService configurationService;
-    protected final CaseSensitivityNormalizer caseSensitivityNormalizer;
+    protected final IdentifierService identifierService;
 
     public ServiceMetadataValidator(ConfigurationService configurationService,
-                                    CaseSensitivityNormalizer caseSensitivityNormalizer) {
+                                    IdentifierService caseSensitivityNormalizer) {
         this.configurationService = configurationService;
-        this.caseSensitivityNormalizer = caseSensitivityNormalizer;
+        this.identifierService = caseSensitivityNormalizer;
     }
 
-    public void validate(String serviceGroupIdStr,
-                         String serviceMetadataIdStr,
+    public void validate(String participantIdentifierFromUrl,
+                         String documentIdentifierFromUrl,
                          byte[] serviceMetadataBody
     ) throws XmlInvalidAgainstSchemaException {
-        ServiceInformationType serviceInformation = validate(serviceGroupIdStr, serviceMetadataBody);
-        DocumentIdentifier serviceMetadataId = asDocumentId(serviceMetadataIdStr);
-
-        if (serviceInformation != null && !serviceMetadataId.equals(serviceInformation.getDocumentIdentifier())) {
-            String errorMessage = String.format("Save service metadata was called with bad Document ID parameters. Message body param: %s URL param: %s",
-                    asString(serviceInformation.getDocumentIdentifier()),
-                    asString(serviceMetadataId));
-            log.info(errorMessage);
-            throw new BadRequestException(WRONG_FIELD, errorMessage);
-        }
-    }
-
-    public ServiceInformationType validate(String serviceGroupIdStr,
-                                           byte[] serviceMetadataBody
-    ) throws XmlInvalidAgainstSchemaException {
 
+        // validate XML serviceMetadata xml against schema
         BdxSmpOasisValidator.validateXSD(serviceMetadataBody);
 
-        final ParticipantIdentifierType serviceGroupId = caseSensitivityNormalizer.normalizeParticipant(serviceGroupIdStr);
+        // parse serviceMetadataBody
         ServiceMetadata serviceMetadata = ServiceMetadataConverter.unmarshal(serviceMetadataBody);
         ServiceInformationType serviceInformation = serviceMetadata.getServiceInformation();
 
-
         if (serviceInformation == null && serviceMetadata.getRedirect() != null) {
-            return null;
+            LOG.debug("Redirect serviceMetadata, skip document/participant identifier validation");
+            return;
         }
 
         if (serviceInformation == null) {
-            String errorMessage = "Missing service information";
-            throw new BadRequestException(WRONG_FIELD, errorMessage);
+            throw new BadRequestException(WRONG_FIELD, "Missing service information or redirect");
         }
 
-        final ParticipantIdentifierType serviceGroupParticipantId = caseSensitivityNormalizer.normalize(
-                serviceInformation.getParticipantIdentifier());
+        ParticipantIdentifierType serviceGroupId = identifierService.normalizeParticipantIdentifier(participantIdentifierFromUrl);
+        DocumentIdentifier documentId = identifierService.normalizeDocumentIdentifier(documentIdentifierFromUrl);
+        validateServiceInformation(serviceGroupId, documentId, serviceInformation);
 
+    }
 
-        if (!serviceGroupId.equals(serviceGroupParticipantId)) {
-            String errorMessage = String.format("Save service metadata was called with bad Participant ID parameters. Message body param: %s URL param: %s",
-                    asString(serviceInformation.getParticipantIdentifier()),
-                    asString(serviceGroupId));
-            log.info(errorMessage);
+    /**
+     * Validate participant identifier in the serviceMetadata
+     *
+     * @param urlParticipantId
+     * @param urlDocumentId
+     * @param serviceInformation
+     * @return
+     */
+    public ServiceInformationType validateServiceInformation(final ParticipantIdentifierType urlParticipantId,
+                                                             final DocumentIdentifier urlDocumentId,
+                                                             final ServiceInformationType serviceInformation) {
+
+        final ParticipantIdentifierType xmlParticipantId = identifierService.normalizeParticipant(
+                serviceInformation.getParticipantIdentifier());
+        final DocumentIdentifier xmlDocumentId = identifierService.normalizeDocument
+                (serviceInformation.getDocumentIdentifier());
+
+        if (!urlParticipantId.equals(xmlParticipantId)) {
+            String errorMessage = "Save service metadata was called with bad Participant ID parameters. Message body param: ["
+                    + identifierToString(xmlParticipantId) + "] URL param: [" + identifierToString(urlParticipantId) + "]";
             throw new BadRequestException(WRONG_FIELD, errorMessage);
         }
-        if (serviceInformation != null) {
-            validateServiceInformation(serviceInformation);
+
+        if (!urlDocumentId.equals(xmlDocumentId)) {
+            String errorMessage = "Save service metadata was called with bad Document ID parameters. Message body param: ["
+                    + identifierToString(xmlDocumentId) + "] URL param: [" + identifierToString(urlDocumentId) + "]";
+            throw new BadRequestException(WRONG_FIELD, errorMessage);
         }
+        validateProcesses(serviceInformation);
         return serviceInformation;
     }
 
-    private void validateServiceInformation(ServiceInformationType serviceInformation) {
+    private void validateProcesses(ServiceInformationType serviceInformation) {
         ProcessListType processList = serviceInformation.getProcessList();
         if (processList == null) {
             return;
@@ -114,6 +120,18 @@ public class ServiceMetadataValidator {
         }
     }
 
+    private String identifierToString(ParticipantIdentifierType identifierType) {
+        return "ParticipantIdentifier: " + (identifierType == null ? "NULL" : identifierToString(identifierType.getScheme(), identifierType.getValue()));
+    }
+
+    private String identifierToString(DocumentIdentifier identifierType) {
+        return "DocumentIdentifier: " + (identifierType == null ? "NULL" : identifierToString(identifierType.getScheme(), identifierType.getValue()));
+    }
+
+    private String identifierToString(String scheme, String value) {
+        return "scheme: '" + scheme + "', value: '" + value + "'";
+    }
+
     private void validateProcess(ProcessType process) {
         ServiceEndpointList serviceEndpoints = process.getServiceEndpointList();
         if (serviceEndpoints == null) {
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java
index a97d1a6480e188a6cf6475583ae04fa0dec6c7ed..200e3414f50ac3894effa6f4147f5b5ca1329499 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java
@@ -39,7 +39,7 @@ public class ServiceErrorControllerAdviceTest {
 
     @Test
     public void handleMalformedIdentifierException() {
-        ResponseEntity re = testIntance.handleMalformedIdentifierException(new MalformedIdentifierException("MalformedIdentifierExceptionMessage", null));
+        ResponseEntity re = testIntance.handleMalformedIdentifierException(new  MalformedIdentifierException("MalformedIdentifierExceptionMessage", null));
 
         assertEquals(BAD_REQUEST, re.getStatusCode());
         assertEquals(ErrorBusinessCode.FORMAT_ERROR.toString(), ((ErrorResponse)re.getBody()).getBusinessCode());
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
index 109c6aa0b0157aa6f73b5f025e308637b3889262..2ef64a036d34644fe017d899428b6ac0f746a41f 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
@@ -13,8 +13,7 @@
 
 package eu.europa.ec.edelivery.smp.validation;
 
-import eu.europa.ec.edelivery.smp.conversion.CaseSensitivityNormalizer;
-import eu.europa.ec.edelivery.smp.error.exceptions.BadRequestException;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
 import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
 import org.hamcrest.CoreMatchers;
@@ -32,38 +31,35 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.regex.Pattern;
 
-import static eu.europa.ec.smp.api.Identifiers.asString;
-
 /**
  * Created by gutowpa on 02/08/2017.
  */
 @RunWith(Parameterized.class)
 public class ServiceGroupValidatorTest {
 
-    private static final String ALLOWED_SCHEME_REGEXP = "^$|^(?!^.{26})([a-z0-9]+-[a-z0-9]+-[a-z0-9]+)$|^urn:oasis:names:tc:ebcore:partyid-type:(iso6523|unregistered)(:.+)?$";
+    private static final Pattern ALLOWED_SCHEME_PATTERN = Pattern.compile("^$|^(?!^.{26})([a-z0-9]+-[a-z0-9]+-[a-z0-9]+)$|^urn:oasis:names:tc:ebcore:partyid-type:(iso6523|unregistered)(:.+)?$");
 
     private ServiceGroupValidator validator;
     ConfigurationService configurationService = Mockito.mock(ConfigurationService.class);
-    CaseSensitivityNormalizer normalizer = new CaseSensitivityNormalizer(configurationService);
+    IdentifierService normalizer = new IdentifierService(configurationService);
 
     @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][]{
 
-                {"Good peppol schema", "good6-scheme4-ok", "urn:poland:ncpb", false, true, null, null},
-                {"Allowed null schema", null, "urn:poland:ncpb", false, false, null, null},
-                {"Length exceeded", "ength-exceeeeeedsTheCharacters-25chars", "urn:poland:ncpb", true, true, BadRequestException.class, "Service Group scheme does not match allowed pattern:"},
-                {"Too many parts", "too-many-segments-inside", "urn:poland:ncpb", true, true, BadRequestException.class, "Service Group scheme does not match allowed pattern:"},
-                {"Missing parts", "only-two", "urn:poland:ncpb", true, true, BadRequestException.class, "Service Group scheme does not match allowed pattern:"},
-                {"Null not allowed", null, "urn:poland:ncpb", true, true, MalformedIdentifierException.class, "Malformed identifier, scheme and id should be delimited by double colon"},
-                {"EBCorePartyId Oasis", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456", false, true, null, null},
-                {"EBCorePartyId eDelivery", null, "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456", false, true, null, null},
+                {"Good peppol schema", "good6-scheme4-ok", "urn:poland:ncpb", false, true, ALLOWED_SCHEME_PATTERN, null, null},
+                {"Allowed null schema", null, "urn:poland:ncpb", false, false, ALLOWED_SCHEME_PATTERN, null, null},
+                {"Length exceeded", "ength-exceeeeeedsTheCharacters-25chars", "urn:poland:ncpb", true, true, ALLOWED_SCHEME_PATTERN, MalformedIdentifierException.class, "Scheme does not match pattern:"},
+                {"Too many parts", "too-many-segments-inside", "urn:poland:ncpb", true, true, ALLOWED_SCHEME_PATTERN, MalformedIdentifierException.class, "Scheme does not match pattern:"},
+                {"Missing parts", "only-two", "urn:poland:ncpb", true, true, ALLOWED_SCHEME_PATTERN, MalformedIdentifierException.class, "Scheme does not match pattern: "},
+                {"Null not allowed", null, "urn:poland:ncpb", true, true, ALLOWED_SCHEME_PATTERN, IllegalArgumentException.class, "Invalid Identifier: "},
+                {"EBCorePartyId Oasis", "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088", "123456", false, true, ALLOWED_SCHEME_PATTERN, null, null},
+                {"EBCorePartyId eDelivery", null, "urn:oasis:names:tc:ebcore:partyid-type:iso6523:0088:123456", false, true, ALLOWED_SCHEME_PATTERN, null, null},
         });
     }
 
     @Before
     public void init() {
-        Mockito.doReturn(Pattern.compile(ALLOWED_SCHEME_REGEXP)).when(configurationService).getParticipantIdentifierSchemeRexExp();
         validator = new ServiceGroupValidator(configurationService, normalizer);
     }
 
@@ -78,14 +74,16 @@ public class ServiceGroupValidatorTest {
     @Parameterized.Parameter(4)
     public boolean mandatoryScheme;
     @Parameterized.Parameter(5)
-    public Class errorClass;
+    public Pattern schemePattern;
     @Parameterized.Parameter(6)
+    public Class errorClass;
+    @Parameterized.Parameter(7)
     public String errorMessage;
 
 
     @Test
     public void testServiceGroupIdentifier() {
-        Mockito.doReturn(mandatoryScheme).when(configurationService).getParticipantSchemeMandatory();
+        normalizer.configureParticipantIdentifierFormatter(null, mandatoryScheme, schemePattern);
 
         validateScheme(schema, value);
     }
@@ -95,17 +93,11 @@ public class ServiceGroupValidatorTest {
         ParticipantIdentifierType id = new ParticipantIdentifierType(value, scheme);
         sg.setParticipantIdentifier(id);
 
-        try {
-            validator.validate(asString(id), sg);
-            if (expectedThrowError) {
-                Assert.fail();
-            }
-        } catch (RuntimeException exc) {
-            if (!expectedThrowError) {
-                Assert.fail();
-            }
-            Assert.assertEquals(errorClass, exc.getClass());
-            MatcherAssert.assertThat(exc.getMessage(), CoreMatchers.startsWith(errorMessage));
+        if (expectedThrowError) {
+            Throwable throwable = Assert.assertThrows(errorClass, () -> validator.validate(normalizer.formatParticipant(id), sg));
+            MatcherAssert.assertThat(throwable.getMessage(), CoreMatchers.containsString(errorMessage));
+        } else {
+            validator.validate(normalizer.formatParticipant(id), sg);
         }
     }