From e6144cfe09bb148638911660eeb492fee7ab8079 Mon Sep 17 00:00:00 2001
From: Florian Reimair <florian.reimair@iaik.tugraz.at>
Date: Thu, 20 Mar 2014 11:43:22 +0100
Subject: fixed serializable issues in stork2-commons

---
 id/server/SamlEngine-VIDP/pom.xml                  |  201 --
 .../src/main/java/META-INF/MANIFEST.MF             |    3 -
 .../java/eu/stork/peps/auth/engine/SAMLEngine.java |  415 ---
 .../eu/stork/peps/auth/engine/SAMLEngineUtils.java |  833 -----
 .../eu/stork/peps/auth/engine/STORKSAMLEngine.java | 3744 --------------------
 .../stork/peps/auth/engine/X509PrincipalUtil.java  |   69 -
 .../auth/engine/core/AuthenticationAttributes.java |   57 -
 .../peps/auth/engine/core/CitizenCountryCode.java  |   56 -
 .../auth/engine/core/CustomAttributeQuery.java     |   51 -
 .../engine/core/CustomRequestAbstractType.java     |  176 -
 .../peps/auth/engine/core/EIDCrossBorderShare.java |   58 -
 .../peps/auth/engine/core/EIDCrossSectorShare.java |   56 -
 .../peps/auth/engine/core/EIDSectorShare.java      |   57 -
 .../stork/peps/auth/engine/core/QAAAttribute.java  |   63 -
 .../peps/auth/engine/core/RequestedAttribute.java  |  140 -
 .../peps/auth/engine/core/RequestedAttributes.java |   51 -
 .../eu/stork/peps/auth/engine/core/SAMLCore.java   |   98 -
 .../peps/auth/engine/core/SAMLEngineSignI.java     |   88 -
 .../stork/peps/auth/engine/core/SPApplication.java |   56 -
 .../eu/stork/peps/auth/engine/core/SPCountry.java  |   56 -
 .../java/eu/stork/peps/auth/engine/core/SPID.java  |   56 -
 .../stork/peps/auth/engine/core/SPInformation.java |   56 -
 .../stork/peps/auth/engine/core/SPInstitution.java |   56 -
 .../eu/stork/peps/auth/engine/core/SPSector.java   |   56 -
 .../stork/peps/auth/engine/core/STORKSAMLCore.java |  508 ---
 .../engine/core/VIDPAuthenticationAttributes.java  |   72 -
 .../core/impl/AuthenticationAttributesBuilder.java |   56 -
 .../core/impl/AuthenticationAttributesImpl.java    |  109 -
 .../impl/AuthenticationAttributesMarshaller.java   |   27 -
 .../impl/AuthenticationAttributesUnmarshaller.java |   54 -
 .../core/impl/CitizenCountryCodeBuilder.java       |   50 -
 .../engine/core/impl/CitizenCountryCodeImpl.java   |   82 -
 .../core/impl/CitizenCountryCodeMarshaller.java    |   45 -
 .../core/impl/CitizenCountryCodeUnmarshaller.java  |   41 -
 .../core/impl/CustomAttributeQueryBuilder.java     |   26 -
 .../engine/core/impl/CustomAttributeQueryImpl.java |   65 -
 .../core/impl/CustomAttributeQueryMarshaller.java  |   50 -
 .../impl/CustomAttributeQueryUnmarshaller.java     |  114 -
 .../core/impl/EIDCrossBorderShareBuilder.java      |   52 -
 .../engine/core/impl/EIDCrossBorderShareImpl.java  |   87 -
 .../core/impl/EIDCrossBorderShareMarshaller.java   |   47 -
 .../core/impl/EIDCrossBorderShareUnmarshaller.java |   43 -
 .../core/impl/EIDCrossSectorShareBuilder.java      |   52 -
 .../engine/core/impl/EIDCrossSectorShareImpl.java  |   89 -
 .../core/impl/EIDCrossSectorShareMarshaller.java   |   46 -
 .../core/impl/EIDCrossSectorShareUnmarshaller.java |   47 -
 .../engine/core/impl/EIDSectorShareBuilder.java    |   51 -
 .../auth/engine/core/impl/EIDSectorShareImpl.java  |   85 -
 .../engine/core/impl/EIDSectorShareMarshaller.java |   46 -
 .../core/impl/EIDSectorShareUnmarshaller.java      |   47 -
 .../auth/engine/core/impl/QAAAttributeBuilder.java |   52 -
 .../auth/engine/core/impl/QAAAttributeImpl.java    |   84 -
 .../engine/core/impl/QAAAttributeMarshaller.java   |   45 -
 .../engine/core/impl/QAAAttributeUnmarshaller.java |   41 -
 .../core/impl/RequestedAttributeBuilder.java       |   54 -
 .../engine/core/impl/RequestedAttributeImpl.java   |  220 --
 .../core/impl/RequestedAttributeMarshaller.java    |   89 -
 .../core/impl/RequestedAttributeUnmarshaller.java  |   96 -
 .../core/impl/RequestedAttributesBuilder.java      |   54 -
 .../engine/core/impl/RequestedAttributesImpl.java  |   95 -
 .../core/impl/RequestedAttributesMarshaller.java   |   33 -
 .../core/impl/RequestedAttributesUnmarshaller.java |   52 -
 .../engine/core/impl/SPApplicationBuilder.java     |   51 -
 .../auth/engine/core/impl/SPApplicationImpl.java   |   84 -
 .../engine/core/impl/SPApplicationMarshaller.java  |   46 -
 .../core/impl/SPApplicationUnmarshaller.java       |   42 -
 .../auth/engine/core/impl/SPCountryBuilder.java    |   52 -
 .../peps/auth/engine/core/impl/SPCountryImpl.java  |   82 -
 .../auth/engine/core/impl/SPCountryMarshaller.java |   45 -
 .../engine/core/impl/SPCountryUnmarshaller.java    |   42 -
 .../peps/auth/engine/core/impl/SPIDBuilder.java    |   50 -
 .../stork/peps/auth/engine/core/impl/SPIDImpl.java |   82 -
 .../peps/auth/engine/core/impl/SPIDMarshaller.java |   45 -
 .../auth/engine/core/impl/SPIDUnmarshaller.java    |   41 -
 .../engine/core/impl/SPInformationBuilder.java     |   41 -
 .../auth/engine/core/impl/SPInformationImpl.java   |  110 -
 .../engine/core/impl/SPInformationMarshaller.java  |   33 -
 .../core/impl/SPInformationUnmarshaller.java       |   52 -
 .../engine/core/impl/SPInstitutionBuilder.java     |   51 -
 .../auth/engine/core/impl/SPInstitutionImpl.java   |   84 -
 .../engine/core/impl/SPInstitutionMarshaller.java  |   46 -
 .../core/impl/SPInstitutionUnmarshaller.java       |   41 -
 .../auth/engine/core/impl/SPSectorBuilder.java     |   50 -
 .../peps/auth/engine/core/impl/SPSectorImpl.java   |   84 -
 .../auth/engine/core/impl/SPSectorMarshaller.java  |   45 -
 .../engine/core/impl/SPSectorUnmarshaller.java     |   42 -
 .../stork/peps/auth/engine/core/impl/SignHW.java   |  468 ---
 .../auth/engine/core/impl/SignModuleFactory.java   |   64 -
 .../stork/peps/auth/engine/core/impl/SignP12.java  |  565 ---
 .../stork/peps/auth/engine/core/impl/SignSW.java   |  527 ---
 .../impl/VIDPAuthenticationAttributesBuilder.java  |   41 -
 .../impl/VIDPAuthenticationAttributesImpl.java     |  132 -
 .../VIDPAuthenticationAttributesMarshaller.java    |   33 -
 .../VIDPAuthenticationAttributesUnmarshaller.java  |   55 -
 .../peps/auth/engine/core/impl/package-info.java   |   19 -
 .../stork/peps/auth/engine/core/package-info.java  |   19 -
 .../validator/CustomAttributeQueryValidator.java   |   69 -
 .../core/validator/ExtensionsSchemaValidator.java  |   61 -
 .../MultipleAssertionResponseValidator.java        |   80 -
 .../validator/QAAAttributeSchemaValidator.java     |   65 -
 .../auth/engine/core/validator/package-info.java   |   19 -
 .../eu/stork/peps/auth/engine/package-info.java    |   19 -
 .../peps/configuration/ConfigurationCreator.java   |  142 -
 .../peps/configuration/ConfigurationEngine.java    |   69 -
 .../peps/configuration/ConfigurationReader.java    |  234 --
 .../peps/configuration/ConfigurationSingleton.java |   74 -
 .../stork/peps/configuration/InstanceEngine.java   |   70 -
 .../eu/stork/peps/configuration/package-info.java  |   19 -
 .../stork/peps/exceptions/SAMLEngineException.java |   57 -
 .../peps/exceptions/STORKSAMLEngineException.java  |  135 -
 .../STORKSAMLEngineRuntimeException.java           |   56 -
 .../eu/stork/peps/exceptions/package-info.java     |   19 -
 .../eu/stork/peps/test/simple/SSETestUtils.java    |  173 -
 .../eu/stork/peps/test/simple/SimpleBaseTest.java  |   64 -
 .../test/simple/StorkAttrQueryRequestTest.java     |  864 -----
 .../test/simple/StorkAttrQueryResponseTest.java    | 1085 ------
 .../peps/test/simple/StorkAuthRequestTest.java     |  968 -----
 .../peps/test/simple/StorkLogoutRequestTest.java   |   89 -
 .../peps/test/simple/StorkLogoutResponseTest.java  |  142 -
 .../peps/test/simple/StorkNewResponseTest.java     |  533 ---
 .../stork/peps/test/simple/StorkResponseTest.java  |  935 -----
 .../eu/stork/peps/test/simple/package-info.java    |   20 -
 .../src/test/resources/SamlEngine.xml              |   67 -
 .../src/test/resources/SignModule_Conf0.xml        |   21 -
 .../src/test/resources/SignModule_Conf1.xml        |   12 -
 .../src/test/resources/SignModule_Conf2.xml        |   12 -
 .../src/test/resources/SignModule_Conf3.xml        |   12 -
 .../src/test/resources/SignModule_P11.xml          |   11 -
 .../src/test/resources/StorkSamlEngine_Conf0.xml   |   87 -
 .../src/test/resources/StorkSamlEngine_Conf1.xml   |   85 -
 .../src/test/resources/StorkSamlEngine_Conf2.xml   |   60 -
 .../src/test/resources/StorkSamlEngine_Conf3.xml   |   57 -
 .../eu/stork/STORKSAMLEngine/AttrQueryRequest.xml  |   82 -
 .../stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml |   15 -
 .../STORKSAMLEngine/AttrQueryRequestTagDelete.xml  |   66 -
 .../eu/stork/STORKSAMLEngine/AttrQueryResponse.xml |  124 -
 .../data/eu/stork/STORKSAMLEngine/AuthnRequest.xml |   72 -
 .../STORKSAMLEngine/AuthnRequestTagDelete.xml      |   47 -
 .../AuthnRequestTagDeleteEncoded.xml               |   47 -
 .../src/test/resources/logback-test.xml            |   21 -
 .../SamlEngine-VIDP/src/test/resources/p11Conf.cfg |   24 -
 .../target/SamlEngine-1.4.0-sources.jar            |  Bin 152332 -> 0 bytes
 .../eu/stork/peps/auth/engine/SAMLEngine.class     |  Bin 11791 -> 0 bytes
 .../stork/peps/auth/engine/SAMLEngineUtils.class   |  Bin 19412 -> 0 bytes
 .../stork/peps/auth/engine/STORKSAMLEngine.class   |  Bin 71959 -> 0 bytes
 .../stork/peps/auth/engine/X509PrincipalUtil.class |  Bin 1990 -> 0 bytes
 .../engine/core/AuthenticationAttributes.class     |  Bin 1108 -> 0 bytes
 .../peps/auth/engine/core/CitizenCountryCode.class |  Bin 955 -> 0 bytes
 .../auth/engine/core/CustomAttributeQuery.class    |  Bin 1100 -> 0 bytes
 .../engine/core/CustomRequestAbstractType.class    |  Bin 2341 -> 0 bytes
 .../auth/engine/core/EIDCrossBorderShare.class     |  Bin 961 -> 0 bytes
 .../auth/engine/core/EIDCrossSectorShare.class     |  Bin 962 -> 0 bytes
 .../peps/auth/engine/core/EIDSectorShare.class     |  Bin 907 -> 0 bytes
 .../stork/peps/auth/engine/core/QAAAttribute.class |  Bin 1033 -> 0 bytes
 .../peps/auth/engine/core/RequestedAttribute.class |  Bin 1728 -> 0 bytes
 .../auth/engine/core/RequestedAttributes.class     |  Bin 1010 -> 0 bytes
 .../eu/stork/peps/auth/engine/core/SAMLCore.class  |  Bin 2649 -> 0 bytes
 .../peps/auth/engine/core/SAMLEngineSignI.class    |  Bin 564 -> 0 bytes
 .../peps/auth/engine/core/SPApplication.class      |  Bin 923 -> 0 bytes
 .../eu/stork/peps/auth/engine/core/SPCountry.class |  Bin 899 -> 0 bytes
 .../eu/stork/peps/auth/engine/core/SPID.class      |  Bin 871 -> 0 bytes
 .../peps/auth/engine/core/SPInformation.class      |  Bin 968 -> 0 bytes
 .../peps/auth/engine/core/SPInstitution.class      |  Bin 923 -> 0 bytes
 .../eu/stork/peps/auth/engine/core/SPSector.class  |  Bin 893 -> 0 bytes
 .../peps/auth/engine/core/STORKSAMLCore.class      |  Bin 7839 -> 0 bytes
 .../engine/core/VIDPAuthenticationAttributes.class |  Bin 1241 -> 0 bytes
 .../impl/AuthenticationAttributesBuilder.class     |  Bin 1624 -> 0 bytes
 .../core/impl/AuthenticationAttributesImpl.class   |  Bin 2512 -> 0 bytes
 .../impl/AuthenticationAttributesMarshaller.class  |  Bin 436 -> 0 bytes
 .../AuthenticationAttributesUnmarshaller.class     |  Bin 1116 -> 0 bytes
 .../core/impl/CitizenCountryCodeBuilder.class      |  Bin 1576 -> 0 bytes
 .../engine/core/impl/CitizenCountryCodeImpl.class  |  Bin 1659 -> 0 bytes
 .../core/impl/CitizenCountryCodeMarshaller.class   |  Bin 1057 -> 0 bytes
 .../core/impl/CitizenCountryCodeUnmarshaller.class |  Bin 879 -> 0 bytes
 .../core/impl/CustomAttributeQueryBuilder.class    |  Bin 1484 -> 0 bytes
 .../core/impl/CustomAttributeQueryImpl.class       |  Bin 1938 -> 0 bytes
 .../core/impl/CustomAttributeQueryMarshaller.class |  Bin 1992 -> 0 bytes
 .../impl/CustomAttributeQueryUnmarshaller.class    |  Bin 4815 -> 0 bytes
 .../core/impl/EIDCrossBorderShareBuilder.class     |  Bin 1584 -> 0 bytes
 .../engine/core/impl/EIDCrossBorderShareImpl.class |  Bin 1667 -> 0 bytes
 .../core/impl/EIDCrossBorderShareMarshaller.class  |  Bin 1061 -> 0 bytes
 .../impl/EIDCrossBorderShareUnmarshaller.class     |  Bin 883 -> 0 bytes
 .../core/impl/EIDCrossSectorShareBuilder.class     |  Bin 1593 -> 0 bytes
 .../engine/core/impl/EIDCrossSectorShareImpl.class |  Bin 1667 -> 0 bytes
 .../core/impl/EIDCrossSectorShareMarshaller.class  |  Bin 1061 -> 0 bytes
 .../impl/EIDCrossSectorShareUnmarshaller.class     |  Bin 879 -> 0 bytes
 .../engine/core/impl/EIDSectorShareBuilder.class   |  Bin 1544 -> 0 bytes
 .../auth/engine/core/impl/EIDSectorShareImpl.class |  Bin 1627 -> 0 bytes
 .../core/impl/EIDSectorShareMarshaller.class       |  Bin 1026 -> 0 bytes
 .../core/impl/EIDSectorShareUnmarshaller.class     |  Bin 844 -> 0 bytes
 .../engine/core/impl/QAAAttributeBuilder.class     |  Bin 1528 -> 0 bytes
 .../auth/engine/core/impl/QAAAttributeImpl.class   |  Bin 1595 -> 0 bytes
 .../engine/core/impl/QAAAttributeMarshaller.class  |  Bin 1011 -> 0 bytes
 .../core/impl/QAAAttributeUnmarshaller.class       |  Bin 829 -> 0 bytes
 .../core/impl/RequestedAttributeBuilder.class      |  Bin 1576 -> 0 bytes
 .../engine/core/impl/RequestedAttributeImpl.class  |  Bin 3478 -> 0 bytes
 .../core/impl/RequestedAttributeMarshaller.class   |  Bin 2750 -> 0 bytes
 .../core/impl/RequestedAttributeUnmarshaller.class |  Bin 2599 -> 0 bytes
 .../core/impl/RequestedAttributesBuilder.class     |  Bin 1584 -> 0 bytes
 .../engine/core/impl/RequestedAttributesImpl.class |  Bin 2217 -> 0 bytes
 .../core/impl/RequestedAttributesMarshaller.class  |  Bin 425 -> 0 bytes
 .../impl/RequestedAttributesUnmarshaller.class     |  Bin 1083 -> 0 bytes
 .../engine/core/impl/SPApplicationBuilder.class    |  Bin 1536 -> 0 bytes
 .../auth/engine/core/impl/SPApplicationImpl.class  |  Bin 1619 -> 0 bytes
 .../engine/core/impl/SPApplicationMarshaller.class |  Bin 1022 -> 0 bytes
 .../core/impl/SPApplicationUnmarshaller.class      |  Bin 844 -> 0 bytes
 .../auth/engine/core/impl/SPCountryBuilder.class   |  Bin 1504 -> 0 bytes
 .../peps/auth/engine/core/impl/SPCountryImpl.class |  Bin 1587 -> 0 bytes
 .../engine/core/impl/SPCountryMarshaller.class     |  Bin 994 -> 0 bytes
 .../engine/core/impl/SPCountryUnmarshaller.class   |  Bin 816 -> 0 bytes
 .../peps/auth/engine/core/impl/SPIDBuilder.class   |  Bin 1464 -> 0 bytes
 .../peps/auth/engine/core/impl/SPIDImpl.class      |  Bin 1547 -> 0 bytes
 .../auth/engine/core/impl/SPIDMarshaller.class     |  Bin 959 -> 0 bytes
 .../auth/engine/core/impl/SPIDUnmarshaller.class   |  Bin 781 -> 0 bytes
 .../engine/core/impl/SPInformationBuilder.class    |  Bin 1569 -> 0 bytes
 .../auth/engine/core/impl/SPInformationImpl.class  |  Bin 2304 -> 0 bytes
 .../engine/core/impl/SPInformationMarshaller.class |  Bin 407 -> 0 bytes
 .../core/impl/SPInformationUnmarshaller.class      |  Bin 989 -> 0 bytes
 .../engine/core/impl/SPInstitutionBuilder.class    |  Bin 1536 -> 0 bytes
 .../auth/engine/core/impl/SPInstitutionImpl.class  |  Bin 1619 -> 0 bytes
 .../engine/core/impl/SPInstitutionMarshaller.class |  Bin 1022 -> 0 bytes
 .../core/impl/SPInstitutionUnmarshaller.class      |  Bin 844 -> 0 bytes
 .../auth/engine/core/impl/SPSectorBuilder.class    |  Bin 1496 -> 0 bytes
 .../peps/auth/engine/core/impl/SPSectorImpl.class  |  Bin 1272 -> 0 bytes
 .../auth/engine/core/impl/SPSectorMarshaller.class |  Bin 987 -> 0 bytes
 .../engine/core/impl/SPSectorUnmarshaller.class    |  Bin 809 -> 0 bytes
 .../stork/peps/auth/engine/core/impl/SignHW.class  |  Bin 13842 -> 0 bytes
 .../auth/engine/core/impl/SignModuleFactory.class  |  Bin 1319 -> 0 bytes
 .../stork/peps/auth/engine/core/impl/SignP12.class |  Bin 16097 -> 0 bytes
 .../stork/peps/auth/engine/core/impl/SignSW.class  |  Bin 16107 -> 0 bytes
 .../impl/VIDPAuthenticationAttributesBuilder.class |  Bin 1689 -> 0 bytes
 .../impl/VIDPAuthenticationAttributesImpl.class    |  Bin 2930 -> 0 bytes
 .../VIDPAuthenticationAttributesMarshaller.class   |  Bin 452 -> 0 bytes
 .../VIDPAuthenticationAttributesUnmarshaller.class |  Bin 1274 -> 0 bytes
 .../validator/CustomAttributeQueryValidator.class  |  Bin 2158 -> 0 bytes
 .../core/validator/ExtensionsSchemaValidator.class |  Bin 1949 -> 0 bytes
 .../MultipleAssertionResponseValidator.class       |  Bin 2268 -> 0 bytes
 .../validator/QAAAttributeSchemaValidator.class    |  Bin 1612 -> 0 bytes
 .../peps/configuration/ConfigurationCreator.class  |  Bin 4541 -> 0 bytes
 .../peps/configuration/ConfigurationEngine.class   |  Bin 1125 -> 0 bytes
 .../peps/configuration/ConfigurationReader.class   |  Bin 5824 -> 0 bytes
 .../configuration/ConfigurationSingleton.class     |  Bin 1934 -> 0 bytes
 .../stork/peps/configuration/InstanceEngine.class  |  Bin 1212 -> 0 bytes
 .../peps/exceptions/SAMLEngineException.class      |  Bin 833 -> 0 bytes
 .../peps/exceptions/STORKSAMLEngineException.class |  Bin 1864 -> 0 bytes
 .../STORKSAMLEngineRuntimeException.class          |  Bin 884 -> 0 bytes
 .../target/maven-archiver/pom.properties           |    5 -
 .../target/test-classes/SamlEngine.xml             |   67 -
 .../target/test-classes/SignModule_Conf0.xml       |   21 -
 .../target/test-classes/SignModule_Conf1.xml       |   12 -
 .../target/test-classes/SignModule_Conf2.xml       |   12 -
 .../target/test-classes/SignModule_Conf3.xml       |   12 -
 .../target/test-classes/SignModule_P11.xml         |   11 -
 .../target/test-classes/StorkSamlEngine_Conf0.xml  |   87 -
 .../target/test-classes/StorkSamlEngine_Conf1.xml  |   85 -
 .../target/test-classes/StorkSamlEngine_Conf2.xml  |   60 -
 .../target/test-classes/StorkSamlEngine_Conf3.xml  |   57 -
 .../eu/stork/STORKSAMLEngine/AttrQueryRequest.xml  |   82 -
 .../stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml |   15 -
 .../STORKSAMLEngine/AttrQueryRequestTagDelete.xml  |   66 -
 .../eu/stork/STORKSAMLEngine/AttrQueryResponse.xml |  124 -
 .../data/eu/stork/STORKSAMLEngine/AuthnRequest.xml |   72 -
 .../STORKSAMLEngine/AuthnRequestTagDelete.xml      |   47 -
 .../AuthnRequestTagDeleteEncoded.xml               |   47 -
 .../eu/stork/peps/test/simple/SSETestUtils.class   |  Bin 4683 -> 0 bytes
 .../eu/stork/peps/test/simple/SimpleBaseTest.class |  Bin 1100 -> 0 bytes
 .../test/simple/StorkAttrQueryRequestTest.class    |  Bin 15002 -> 0 bytes
 .../test/simple/StorkAttrQueryResponseTest.class   |  Bin 29423 -> 0 bytes
 .../peps/test/simple/StorkAuthRequestTest.class    |  Bin 15798 -> 0 bytes
 .../peps/test/simple/StorkLogoutRequestTest.class  |  Bin 3110 -> 0 bytes
 .../peps/test/simple/StorkLogoutResponseTest.class |  Bin 3961 -> 0 bytes
 .../peps/test/simple/StorkNewResponseTest.class    |  Bin 12588 -> 0 bytes
 .../stork/peps/test/simple/StorkResponseTest.class |  Bin 25902 -> 0 bytes
 .../target/test-classes/logback-test.xml           |   21 -
 .../target/test-classes/p11Conf.cfg                |   24 -
 id/server/stork2-commons/.svn/all-wcprops          |   17 +
 id/server/stork2-commons/.svn/dir-prop-base        |   10 +
 id/server/stork2-commons/.svn/entries              |   99 +
 .../.svn/text-base/Releases.svn-base               |   73 +
 .../stork2-commons/.svn/text-base/pom.xml.svn-base |  213 ++
 id/server/stork2-commons/Releases                  |   73 +
 id/server/stork2-commons/pom.xml                   |  213 ++
 id/server/stork2-commons/src/.svn/all-wcprops      |    5 +
 id/server/stork2-commons/src/.svn/entries          |   34 +
 id/server/stork2-commons/src/main/.svn/all-wcprops |    5 +
 id/server/stork2-commons/src/main/.svn/entries     |   37 +
 .../src/main/config/.svn/all-wcprops               |    5 +
 .../stork2-commons/src/main/config/.svn/entries    |   31 +
 .../src/main/config/embedded/.svn/all-wcprops      |   11 +
 .../src/main/config/embedded/.svn/entries          |   62 +
 .../.svn/text-base/pepsUtil.properties.svn-base    |  269 ++
 .../src/main/config/embedded/pepsUtil.properties   |  269 ++
 .../stork2-commons/src/main/java/.svn/all-wcprops  |    5 +
 .../stork2-commons/src/main/java/.svn/entries      |   31 +
 .../src/main/java/eu/.svn/all-wcprops              |    5 +
 .../stork2-commons/src/main/java/eu/.svn/entries   |   31 +
 .../src/main/java/eu/stork/.svn/all-wcprops        |    5 +
 .../src/main/java/eu/stork/.svn/entries            |   31 +
 .../src/main/java/eu/stork/peps/.svn/all-wcprops   |    5 +
 .../src/main/java/eu/stork/peps/.svn/entries       |   34 +
 .../main/java/eu/stork/peps/auth/.svn/all-wcprops  |    5 +
 .../src/main/java/eu/stork/peps/auth/.svn/entries  |   34 +
 .../eu/stork/peps/auth/commons/.svn/all-wcprops    |  191 +
 .../java/eu/stork/peps/auth/commons/.svn/entries   | 1085 ++++++
 .../text-base/AttributeConstants.java.svn-base     |   72 +
 .../.svn/text-base/AttributeName.java.svn-base     |   74 +
 .../.svn/text-base/AttributeProvider.java.svn-base |  123 +
 .../text-base/AttributeProvidersMap.java.svn-base  |   96 +
 .../.svn/text-base/AttributeSource.java.svn-base   |  188 +
 .../.svn/text-base/AttributeUtil.java.svn-base     |  231 ++
 .../.svn/text-base/CitizenConsent.java.svn-base    |  123 +
 .../commons/.svn/text-base/Country.java.svn-base   |   95 +
 .../.svn/text-base/CountryCodes.java.svn-base      |   79 +
 .../commons/.svn/text-base/DateUtil.java.svn-base  |  169 +
 .../IAttributeListProcessor.java.svn-base          |  148 +
 .../text-base/IAttributeProvidersMap.java.svn-base |   82 +
 .../text-base/IPersonalAttributeList.java.svn-base |  194 +
 .../.svn/text-base/IStorkLogger.java.svn-base      |  239 ++
 .../.svn/text-base/IStorkSession.java.svn-base     |   85 +
 .../commons/.svn/text-base/Linker.java.svn-base    |  316 ++
 .../.svn/text-base/PEPSErrors.java.svn-base        |  392 ++
 .../.svn/text-base/PEPSParameters.java.svn-base    |  625 ++++
 .../commons/.svn/text-base/PEPSUtil.java.svn-base  |  391 ++
 .../.svn/text-base/PEPSValues.java.svn-base        |  342 ++
 .../.svn/text-base/PersonalAttribute.java.svn-base |  348 ++
 .../text-base/PersonalAttributeList.java.svn-base  |  396 +++
 .../text-base/STORKAttrQueryRequest.java.svn-base  |  447 +++
 .../text-base/STORKAttrQueryResponse.java.svn-base |  388 ++
 .../.svn/text-base/STORKAuthnRequest.java.svn-base |  495 +++
 .../text-base/STORKAuthnResponse.java.svn-base     |  383 ++
 .../text-base/STORKLogoutRequest.java.svn-base     |  197 +
 .../text-base/STORKLogoutResponse.java.svn-base    |  250 ++
 .../.svn/text-base/STORKStatusCode.java.svn-base   |   68 +
 .../text-base/STORKSubStatusCode.java.svn-base     |   71 +
 .../.svn/text-base/package-info.java.svn-base      |    9 +
 .../peps/auth/commons/AttributeConstants.java      |   72 +
 .../eu/stork/peps/auth/commons/AttributeName.java  |   74 +
 .../stork/peps/auth/commons/AttributeProvider.java |  123 +
 .../peps/auth/commons/AttributeProvidersMap.java   |   96 +
 .../stork/peps/auth/commons/AttributeSource.java   |  188 +
 .../eu/stork/peps/auth/commons/AttributeUtil.java  |  231 ++
 .../eu/stork/peps/auth/commons/CitizenConsent.java |  123 +
 .../java/eu/stork/peps/auth/commons/Country.java   |   95 +
 .../eu/stork/peps/auth/commons/CountryCodes.java   |   79 +
 .../java/eu/stork/peps/auth/commons/DateUtil.java  |  169 +
 .../peps/auth/commons/IAttributeListProcessor.java |  148 +
 .../peps/auth/commons/IAttributeProvidersMap.java  |   82 +
 .../peps/auth/commons/IPersonalAttributeList.java  |  194 +
 .../eu/stork/peps/auth/commons/IStorkLogger.java   |  239 ++
 .../eu/stork/peps/auth/commons/IStorkSession.java  |   85 +
 .../java/eu/stork/peps/auth/commons/Linker.java    |  316 ++
 .../eu/stork/peps/auth/commons/PEPSErrors.java     |  392 ++
 .../eu/stork/peps/auth/commons/PEPSParameters.java |  625 ++++
 .../java/eu/stork/peps/auth/commons/PEPSUtil.java  |  391 ++
 .../eu/stork/peps/auth/commons/PEPSValues.java     |  342 ++
 .../stork/peps/auth/commons/PersonalAttribute.java |  348 ++
 .../peps/auth/commons/PersonalAttributeList.java   |  397 +++
 .../peps/auth/commons/STORKAttrQueryRequest.java   |  447 +++
 .../peps/auth/commons/STORKAttrQueryResponse.java  |  392 ++
 .../stork/peps/auth/commons/STORKAuthnRequest.java |  495 +++
 .../peps/auth/commons/STORKAuthnResponse.java      |  387 ++
 .../peps/auth/commons/STORKLogoutRequest.java      |  197 +
 .../peps/auth/commons/STORKLogoutResponse.java     |  250 ++
 .../stork/peps/auth/commons/STORKStatusCode.java   |   68 +
 .../peps/auth/commons/STORKSubStatusCode.java      |   71 +
 .../peps/auth/commons/exceptions/.svn/all-wcprops  |   53 +
 .../peps/auth/commons/exceptions/.svn/entries      |  300 ++
 .../text-base/AbstractPEPSException.java.svn-base  |  173 +
 .../.svn/text-base/CPEPSException.java.svn-base    |  143 +
 .../InternalErrorPEPSException.java.svn-base       |   74 +
 .../InvalidParameterPEPSException.java.svn-base    |   54 +
 .../InvalidSessionPEPSException.java.svn-base      |   46 +
 .../text-base/SecurityPEPSException.java.svn-base  |   67 +
 .../text-base/StorkPEPSException.java.svn-base     |   53 +
 .../.svn/text-base/package-info.java.svn-base      |    7 +
 .../commons/exceptions/AbstractPEPSException.java  |  173 +
 .../auth/commons/exceptions/CPEPSException.java    |  143 +
 .../exceptions/InternalErrorPEPSException.java     |   74 +
 .../exceptions/InvalidParameterPEPSException.java  |   54 +
 .../exceptions/InvalidSessionPEPSException.java    |   46 +
 .../commons/exceptions/SecurityPEPSException.java  |   67 +
 .../commons/exceptions/StorkPEPSException.java     |   53 +
 .../peps/auth/commons/exceptions/package-info.java |    7 +
 .../eu/stork/peps/auth/commons/package-info.java   |    9 +
 .../eu/stork/peps/auth/specific/.svn/all-wcprops   |   41 +
 .../java/eu/stork/peps/auth/specific/.svn/entries  |  232 ++
 .../.svn/text-base/IAUService.java.svn-base        |  215 ++
 .../text-base/ICheckAttributeValue.java.svn-base   |   37 +
 .../.svn/text-base/IDeriveAttribute.java.svn-base  |   40 +
 .../.svn/text-base/INormaliseValue.java.svn-base   |   35 +
 .../text-base/ITranslatorService.java.svn-base     |  100 +
 .../.svn/text-base/package-info.java.svn-base      |    8 +
 .../eu/stork/peps/auth/specific/IAUService.java    |  215 ++
 .../peps/auth/specific/ICheckAttributeValue.java   |   37 +
 .../stork/peps/auth/specific/IDeriveAttribute.java |   40 +
 .../stork/peps/auth/specific/INormaliseValue.java  |   35 +
 .../peps/auth/specific/ITranslatorService.java     |  100 +
 .../eu/stork/peps/auth/specific/package-info.java  |    8 +
 .../java/eu/stork/peps/complex/.svn/all-wcprops    |    5 +
 .../main/java/eu/stork/peps/complex/.svn/entries   |   31 +
 .../stork/peps/complex/attributes/.svn/all-wcprops |  125 +
 .../eu/stork/peps/complex/attributes/.svn/entries  |  708 ++++
 .../.svn/text-base/AcTitleType.java.svn-base       |   89 +
 .../text-base/AttributeStatusType.java.svn-base    |   61 +
 .../text-base/CanonicalAddressType.java.svn-base   |  264 ++
 .../.svn/text-base/Habilitation.java.svn-base      |   89 +
 .../.svn/text-base/HabilitationType.java.svn-base  |   89 +
 .../text-base/HasAccountInBankType.java.svn-base   |   89 +
 .../.svn/text-base/HasDegreeType.java.svn-base     |  174 +
 .../text-base/IsAcademicStaffType.java.svn-base    |  145 +
 .../.svn/text-base/IsAdminStaffType.java.svn-base  |   89 +
 .../IsCourseCoordinatorType.java.svn-base          |   89 +
 .../.svn/text-base/IsHCPType.java.svn-base         |  145 +
 .../IsHealthCareProfessionalType.java.svn-base     |  145 +
 .../.svn/text-base/IsStudentType.java.svn-base     |  146 +
 .../.svn/text-base/IsTeacherOfType.java.svn-base   |  145 +
 .../text-base/MandateContentType.java.svn-base     |  233 ++
 .../.svn/text-base/MandateType.java.svn-base       |  125 +
 .../.svn/text-base/ObjectFactory.java.svn-base     |  433 +++
 .../RepresentationPersonType.java.svn-base         |  289 ++
 .../text-base/RequestedAttributeType.java.svn-base |  212 ++
 .../.svn/text-base/package-info.java.svn-base      |    9 +
 .../stork/peps/complex/attributes/AcTitleType.java |   89 +
 .../complex/attributes/AttributeStatusType.java    |   61 +
 .../complex/attributes/CanonicalAddressType.java   |  264 ++
 .../peps/complex/attributes/Habilitation.java      |   89 +
 .../peps/complex/attributes/HabilitationType.java  |   89 +
 .../complex/attributes/HasAccountInBankType.java   |   89 +
 .../peps/complex/attributes/HasDegreeType.java     |  174 +
 .../complex/attributes/IsAcademicStaffType.java    |  145 +
 .../peps/complex/attributes/IsAdminStaffType.java  |   89 +
 .../attributes/IsCourseCoordinatorType.java        |   89 +
 .../stork/peps/complex/attributes/IsHCPType.java   |  145 +
 .../attributes/IsHealthCareProfessionalType.java   |  145 +
 .../peps/complex/attributes/IsStudentType.java     |  146 +
 .../peps/complex/attributes/IsTeacherOfType.java   |  145 +
 .../complex/attributes/MandateContentType.java     |  233 ++
 .../stork/peps/complex/attributes/MandateType.java |  125 +
 .../peps/complex/attributes/ObjectFactory.java     |  433 +++
 .../attributes/RepresentationPersonType.java       |  289 ++
 .../complex/attributes/RequestedAttributeType.java |  212 ++
 .../peps/complex/attributes/package-info.java      |    9 +
 .../src/main/resources/.svn/all-wcprops            |   17 +
 .../stork2-commons/src/main/resources/.svn/entries |   96 +
 .../text-base/StorkcomplexAttributes.xsd.svn-base  |  305 ++
 .../resources/.svn/text-base/log4j.xml.svn-base    |   19 +
 .../src/main/resources/StorkcomplexAttributes.xsd  |  305 ++
 .../stork2-commons/src/main/resources/log4j.xml    |   19 +
 id/server/stork2-commons/src/test/.svn/all-wcprops |    5 +
 id/server/stork2-commons/src/test/.svn/entries     |   34 +
 .../stork2-commons/src/test/java/.svn/all-wcprops  |    5 +
 .../stork2-commons/src/test/java/.svn/entries      |   31 +
 .../src/test/java/eu/.svn/all-wcprops              |    5 +
 .../stork2-commons/src/test/java/eu/.svn/entries   |   31 +
 .../src/test/java/eu/stork/.svn/all-wcprops        |    5 +
 .../src/test/java/eu/stork/.svn/entries            |   31 +
 .../src/test/java/eu/stork/peps/.svn/all-wcprops   |    5 +
 .../src/test/java/eu/stork/peps/.svn/entries       |   31 +
 .../test/java/eu/stork/peps/tests/.svn/all-wcprops |   59 +
 .../src/test/java/eu/stork/peps/tests/.svn/entries |  334 ++
 .../AttributeProvidersMapTestCase.java.svn-base    |  134 +
 .../AttributeSourceTestCase.java.svn-base          |   88 +
 .../text-base/AttributeUtilTestCase.java.svn-base  |  537 +++
 .../ComplexAttributesMarshalling.java.svn-base     |  187 +
 .../.svn/text-base/DateUtilTestCase.java.svn-base  |  294 ++
 .../.svn/text-base/PEPSUtilTestCase.java.svn-base  |  553 +++
 .../PersonalAttributeListTestCase.java.svn-base    |  747 ++++
 .../PersonalAttributeTestCase.java.svn-base        |  182 +
 .../.svn/text-base/package-info.java.svn-base      |    5 +
 .../peps/tests/AttributeProvidersMapTestCase.java  |  134 +
 .../stork/peps/tests/AttributeSourceTestCase.java  |   88 +
 .../eu/stork/peps/tests/AttributeUtilTestCase.java |  537 +++
 .../peps/tests/ComplexAttributesMarshalling.java   |  187 +
 .../java/eu/stork/peps/tests/DateUtilTestCase.java |  294 ++
 .../java/eu/stork/peps/tests/PEPSUtilTestCase.java |  553 +++
 .../peps/tests/PersonalAttributeListTestCase.java  |  747 ++++
 .../peps/tests/PersonalAttributeTestCase.java      |  182 +
 .../java/eu/stork/peps/tests/package-info.java     |    5 +
 .../src/test/resources/.svn/all-wcprops            |   11 +
 .../stork2-commons/src/test/resources/.svn/entries |   62 +
 .../resources/.svn/text-base/log4j.xml.svn-base    |   19 +
 .../stork2-commons/src/test/resources/log4j.xml    |   19 +
 id/server/stork2-saml-engine/pom.xml               |  201 ++
 .../src/main/java/META-INF/MANIFEST.MF             |    3 +
 .../java/eu/stork/peps/auth/engine/SAMLEngine.java |  415 +++
 .../eu/stork/peps/auth/engine/SAMLEngineUtils.java |  833 +++++
 .../eu/stork/peps/auth/engine/STORKSAMLEngine.java | 3744 ++++++++++++++++++++
 .../stork/peps/auth/engine/X509PrincipalUtil.java  |   69 +
 .../auth/engine/core/AuthenticationAttributes.java |   57 +
 .../peps/auth/engine/core/CitizenCountryCode.java  |   56 +
 .../auth/engine/core/CustomAttributeQuery.java     |   51 +
 .../engine/core/CustomRequestAbstractType.java     |  176 +
 .../peps/auth/engine/core/EIDCrossBorderShare.java |   58 +
 .../peps/auth/engine/core/EIDCrossSectorShare.java |   56 +
 .../peps/auth/engine/core/EIDSectorShare.java      |   57 +
 .../stork/peps/auth/engine/core/QAAAttribute.java  |   63 +
 .../peps/auth/engine/core/RequestedAttribute.java  |  140 +
 .../peps/auth/engine/core/RequestedAttributes.java |   51 +
 .../eu/stork/peps/auth/engine/core/SAMLCore.java   |   98 +
 .../peps/auth/engine/core/SAMLEngineSignI.java     |   88 +
 .../stork/peps/auth/engine/core/SPApplication.java |   56 +
 .../eu/stork/peps/auth/engine/core/SPCountry.java  |   56 +
 .../java/eu/stork/peps/auth/engine/core/SPID.java  |   56 +
 .../stork/peps/auth/engine/core/SPInformation.java |   56 +
 .../stork/peps/auth/engine/core/SPInstitution.java |   56 +
 .../eu/stork/peps/auth/engine/core/SPSector.java   |   56 +
 .../stork/peps/auth/engine/core/STORKSAMLCore.java |  508 +++
 .../engine/core/VIDPAuthenticationAttributes.java  |   72 +
 .../core/impl/AuthenticationAttributesBuilder.java |   56 +
 .../core/impl/AuthenticationAttributesImpl.java    |  109 +
 .../impl/AuthenticationAttributesMarshaller.java   |   27 +
 .../impl/AuthenticationAttributesUnmarshaller.java |   54 +
 .../core/impl/CitizenCountryCodeBuilder.java       |   50 +
 .../engine/core/impl/CitizenCountryCodeImpl.java   |   82 +
 .../core/impl/CitizenCountryCodeMarshaller.java    |   45 +
 .../core/impl/CitizenCountryCodeUnmarshaller.java  |   41 +
 .../core/impl/CustomAttributeQueryBuilder.java     |   26 +
 .../engine/core/impl/CustomAttributeQueryImpl.java |   65 +
 .../core/impl/CustomAttributeQueryMarshaller.java  |   50 +
 .../impl/CustomAttributeQueryUnmarshaller.java     |  114 +
 .../core/impl/EIDCrossBorderShareBuilder.java      |   52 +
 .../engine/core/impl/EIDCrossBorderShareImpl.java  |   87 +
 .../core/impl/EIDCrossBorderShareMarshaller.java   |   47 +
 .../core/impl/EIDCrossBorderShareUnmarshaller.java |   43 +
 .../core/impl/EIDCrossSectorShareBuilder.java      |   52 +
 .../engine/core/impl/EIDCrossSectorShareImpl.java  |   89 +
 .../core/impl/EIDCrossSectorShareMarshaller.java   |   46 +
 .../core/impl/EIDCrossSectorShareUnmarshaller.java |   47 +
 .../engine/core/impl/EIDSectorShareBuilder.java    |   51 +
 .../auth/engine/core/impl/EIDSectorShareImpl.java  |   85 +
 .../engine/core/impl/EIDSectorShareMarshaller.java |   46 +
 .../core/impl/EIDSectorShareUnmarshaller.java      |   47 +
 .../auth/engine/core/impl/QAAAttributeBuilder.java |   52 +
 .../auth/engine/core/impl/QAAAttributeImpl.java    |   84 +
 .../engine/core/impl/QAAAttributeMarshaller.java   |   45 +
 .../engine/core/impl/QAAAttributeUnmarshaller.java |   41 +
 .../core/impl/RequestedAttributeBuilder.java       |   54 +
 .../engine/core/impl/RequestedAttributeImpl.java   |  220 ++
 .../core/impl/RequestedAttributeMarshaller.java    |   89 +
 .../core/impl/RequestedAttributeUnmarshaller.java  |   96 +
 .../core/impl/RequestedAttributesBuilder.java      |   54 +
 .../engine/core/impl/RequestedAttributesImpl.java  |   95 +
 .../core/impl/RequestedAttributesMarshaller.java   |   33 +
 .../core/impl/RequestedAttributesUnmarshaller.java |   52 +
 .../engine/core/impl/SPApplicationBuilder.java     |   51 +
 .../auth/engine/core/impl/SPApplicationImpl.java   |   84 +
 .../engine/core/impl/SPApplicationMarshaller.java  |   46 +
 .../core/impl/SPApplicationUnmarshaller.java       |   42 +
 .../auth/engine/core/impl/SPCountryBuilder.java    |   52 +
 .../peps/auth/engine/core/impl/SPCountryImpl.java  |   82 +
 .../auth/engine/core/impl/SPCountryMarshaller.java |   45 +
 .../engine/core/impl/SPCountryUnmarshaller.java    |   42 +
 .../peps/auth/engine/core/impl/SPIDBuilder.java    |   50 +
 .../stork/peps/auth/engine/core/impl/SPIDImpl.java |   82 +
 .../peps/auth/engine/core/impl/SPIDMarshaller.java |   45 +
 .../auth/engine/core/impl/SPIDUnmarshaller.java    |   41 +
 .../engine/core/impl/SPInformationBuilder.java     |   41 +
 .../auth/engine/core/impl/SPInformationImpl.java   |  110 +
 .../engine/core/impl/SPInformationMarshaller.java  |   33 +
 .../core/impl/SPInformationUnmarshaller.java       |   52 +
 .../engine/core/impl/SPInstitutionBuilder.java     |   51 +
 .../auth/engine/core/impl/SPInstitutionImpl.java   |   84 +
 .../engine/core/impl/SPInstitutionMarshaller.java  |   46 +
 .../core/impl/SPInstitutionUnmarshaller.java       |   41 +
 .../auth/engine/core/impl/SPSectorBuilder.java     |   50 +
 .../peps/auth/engine/core/impl/SPSectorImpl.java   |   84 +
 .../auth/engine/core/impl/SPSectorMarshaller.java  |   45 +
 .../engine/core/impl/SPSectorUnmarshaller.java     |   42 +
 .../stork/peps/auth/engine/core/impl/SignHW.java   |  468 +++
 .../auth/engine/core/impl/SignModuleFactory.java   |   64 +
 .../stork/peps/auth/engine/core/impl/SignP12.java  |  565 +++
 .../stork/peps/auth/engine/core/impl/SignSW.java   |  527 +++
 .../impl/VIDPAuthenticationAttributesBuilder.java  |   41 +
 .../impl/VIDPAuthenticationAttributesImpl.java     |  132 +
 .../VIDPAuthenticationAttributesMarshaller.java    |   33 +
 .../VIDPAuthenticationAttributesUnmarshaller.java  |   55 +
 .../peps/auth/engine/core/impl/package-info.java   |   19 +
 .../stork/peps/auth/engine/core/package-info.java  |   19 +
 .../validator/CustomAttributeQueryValidator.java   |   69 +
 .../core/validator/ExtensionsSchemaValidator.java  |   61 +
 .../MultipleAssertionResponseValidator.java        |   80 +
 .../validator/QAAAttributeSchemaValidator.java     |   65 +
 .../auth/engine/core/validator/package-info.java   |   19 +
 .../eu/stork/peps/auth/engine/package-info.java    |   19 +
 .../peps/configuration/ConfigurationCreator.java   |  142 +
 .../peps/configuration/ConfigurationEngine.java    |   69 +
 .../peps/configuration/ConfigurationReader.java    |  234 ++
 .../peps/configuration/ConfigurationSingleton.java |   74 +
 .../stork/peps/configuration/InstanceEngine.java   |   70 +
 .../eu/stork/peps/configuration/package-info.java  |   19 +
 .../stork/peps/exceptions/SAMLEngineException.java |   57 +
 .../peps/exceptions/STORKSAMLEngineException.java  |  135 +
 .../STORKSAMLEngineRuntimeException.java           |   56 +
 .../eu/stork/peps/exceptions/package-info.java     |   19 +
 .../eu/stork/peps/test/simple/SSETestUtils.java    |  173 +
 .../eu/stork/peps/test/simple/SimpleBaseTest.java  |   64 +
 .../test/simple/StorkAttrQueryRequestTest.java     |  864 +++++
 .../test/simple/StorkAttrQueryResponseTest.java    | 1085 ++++++
 .../peps/test/simple/StorkAuthRequestTest.java     |  968 +++++
 .../peps/test/simple/StorkLogoutRequestTest.java   |   89 +
 .../peps/test/simple/StorkLogoutResponseTest.java  |  142 +
 .../peps/test/simple/StorkNewResponseTest.java     |  533 +++
 .../stork/peps/test/simple/StorkResponseTest.java  |  935 +++++
 .../eu/stork/peps/test/simple/package-info.java    |   20 +
 .../src/test/resources/SamlEngine.xml              |   67 +
 .../src/test/resources/SignModule_Conf0.xml        |   21 +
 .../src/test/resources/SignModule_Conf1.xml        |   12 +
 .../src/test/resources/SignModule_Conf2.xml        |   12 +
 .../src/test/resources/SignModule_Conf3.xml        |   12 +
 .../src/test/resources/SignModule_P11.xml          |   11 +
 .../src/test/resources/StorkSamlEngine_Conf0.xml   |   87 +
 .../src/test/resources/StorkSamlEngine_Conf1.xml   |   85 +
 .../src/test/resources/StorkSamlEngine_Conf2.xml   |   60 +
 .../src/test/resources/StorkSamlEngine_Conf3.xml   |   57 +
 .../eu/stork/STORKSAMLEngine/AttrQueryRequest.xml  |   82 +
 .../stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml |   15 +
 .../STORKSAMLEngine/AttrQueryRequestTagDelete.xml  |   66 +
 .../eu/stork/STORKSAMLEngine/AttrQueryResponse.xml |  124 +
 .../data/eu/stork/STORKSAMLEngine/AuthnRequest.xml |   72 +
 .../STORKSAMLEngine/AuthnRequestTagDelete.xml      |   47 +
 .../AuthnRequestTagDeleteEncoded.xml               |   47 +
 .../src/test/resources/logback-test.xml            |   21 +
 .../src/test/resources/p11Conf.cfg                 |   24 +
 .../eu/stork/Commons/1.2.0/Commons-1.2.0.jar       |  Bin 72102 -> 0 bytes
 .../eu/stork/Commons/1.2.0/Commons-1.2.0.pom       |  222 --
 625 files changed, 53455 insertions(+), 20854 deletions(-)
 delete mode 100644 id/server/SamlEngine-VIDP/pom.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/META-INF/MANIFEST.MF
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPID.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/package-info.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/package-info.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/InstanceEngine.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/package-info.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/package-info.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/package-info.java
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/SamlEngine.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf0.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf1.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf2.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf3.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/SignModule_P11.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf0.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf1.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf2.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf3.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/logback-test.xml
 delete mode 100644 id/server/SamlEngine-VIDP/src/test/resources/p11Conf.cfg
 delete mode 100644 id/server/SamlEngine-VIDP/target/SamlEngine-1.4.0-sources.jar
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngine.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngineUtils.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/STORKSAMLEngine.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/X509PrincipalUtil.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/AuthenticationAttributes.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CitizenCountryCode.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomAttributeQuery.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDSectorShare.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/QAAAttribute.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttribute.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttributes.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLCore.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLEngineSignI.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPApplication.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPCountry.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPID.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInformation.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInstitution.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPSector.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/STORKSAMLCore.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignHW.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignP12.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignSW.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationCreator.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationEngine.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationReader.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationSingleton.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/InstanceEngine.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/SAMLEngineException.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineException.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/maven-archiver/pom.properties
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/SamlEngine.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf0.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf1.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf2.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf3.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/SignModule_P11.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf0.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf1.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf2.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf3.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SSETestUtils.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SimpleBaseTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAuthRequestTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutRequestTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutResponseTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkNewResponseTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkResponseTest.class
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/logback-test.xml
 delete mode 100644 id/server/SamlEngine-VIDP/target/test-classes/p11Conf.cfg
 create mode 100644 id/server/stork2-commons/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/.svn/dir-prop-base
 create mode 100644 id/server/stork2-commons/.svn/entries
 create mode 100644 id/server/stork2-commons/.svn/text-base/Releases.svn-base
 create mode 100644 id/server/stork2-commons/.svn/text-base/pom.xml.svn-base
 create mode 100644 id/server/stork2-commons/Releases
 create mode 100644 id/server/stork2-commons/pom.xml
 create mode 100644 id/server/stork2-commons/src/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/config/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/config/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/config/embedded/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/config/embedded/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/config/embedded/.svn/text-base/pepsUtil.properties.svn-base
 create mode 100644 id/server/stork2-commons/src/main/config/embedded/pepsUtil.properties
 create mode 100644 id/server/stork2-commons/src/main/java/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeConstants.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeName.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvider.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvidersMap.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeSource.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeUtil.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CitizenConsent.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Country.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CountryCodes.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/DateUtil.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeListProcessor.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeProvidersMap.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IPersonalAttributeList.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkLogger.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkSession.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Linker.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSErrors.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSParameters.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSUtil.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSValues.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttribute.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttributeList.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryRequest.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryResponse.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnRequest.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnResponse.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutRequest.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutResponse.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKStatusCode.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKSubStatusCode.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/package-info.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeConstants.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeName.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvider.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvidersMap.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeSource.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeUtil.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CitizenConsent.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Country.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CountryCodes.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/DateUtil.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeListProcessor.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeProvidersMap.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IPersonalAttributeList.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkLogger.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkSession.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Linker.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSErrors.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSParameters.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSUtil.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSValues.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttribute.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryRequest.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryResponse.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnRequest.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnResponse.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutRequest.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutResponse.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKStatusCode.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKSubStatusCode.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/AbstractPEPSException.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/CPEPSException.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InternalErrorPEPSException.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidParameterPEPSException.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidSessionPEPSException.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/SecurityPEPSException.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/StorkPEPSException.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/package-info.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/AbstractPEPSException.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/CPEPSException.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InternalErrorPEPSException.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidParameterPEPSException.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidSessionPEPSException.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/SecurityPEPSException.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/StorkPEPSException.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/package-info.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/package-info.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IAUService.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ICheckAttributeValue.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IDeriveAttribute.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/INormaliseValue.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ITranslatorService.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/package-info.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IAUService.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ICheckAttributeValue.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IDeriveAttribute.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/INormaliseValue.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ITranslatorService.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/package-info.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AcTitleType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AttributeStatusType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/CanonicalAddressType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/Habilitation.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HabilitationType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasAccountInBankType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasDegreeType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAcademicStaffType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAdminStaffType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsCourseCoordinatorType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHCPType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHealthCareProfessionalType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsStudentType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsTeacherOfType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateContentType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/ObjectFactory.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RepresentationPersonType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RequestedAttributeType.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/package-info.java.svn-base
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AcTitleType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AttributeStatusType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/CanonicalAddressType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/Habilitation.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HabilitationType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasAccountInBankType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasDegreeType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAcademicStaffType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAdminStaffType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsCourseCoordinatorType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHCPType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHealthCareProfessionalType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsStudentType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsTeacherOfType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateContentType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/ObjectFactory.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RepresentationPersonType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RequestedAttributeType.java
 create mode 100644 id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/package-info.java
 create mode 100644 id/server/stork2-commons/src/main/resources/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/main/resources/.svn/entries
 create mode 100644 id/server/stork2-commons/src/main/resources/.svn/text-base/StorkcomplexAttributes.xsd.svn-base
 create mode 100644 id/server/stork2-commons/src/main/resources/.svn/text-base/log4j.xml.svn-base
 create mode 100644 id/server/stork2-commons/src/main/resources/StorkcomplexAttributes.xsd
 create mode 100644 id/server/stork2-commons/src/main/resources/log4j.xml
 create mode 100644 id/server/stork2-commons/src/test/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/ComplexAttributesMarshalling.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/ComplexAttributesMarshalling.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
 create mode 100644 id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java
 create mode 100644 id/server/stork2-commons/src/test/resources/.svn/all-wcprops
 create mode 100644 id/server/stork2-commons/src/test/resources/.svn/entries
 create mode 100644 id/server/stork2-commons/src/test/resources/.svn/text-base/log4j.xml.svn-base
 create mode 100644 id/server/stork2-commons/src/test/resources/log4j.xml
 create mode 100644 id/server/stork2-saml-engine/pom.xml
 create mode 100644 id/server/stork2-saml-engine/src/main/java/META-INF/MANIFEST.MF
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPID.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/package-info.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/package-info.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/InstanceEngine.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/package-info.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java
 create mode 100644 id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/package-info.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java
 create mode 100644 id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/package-info.java
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/SamlEngine.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/SignModule_Conf0.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/SignModule_Conf1.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/SignModule_Conf2.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/SignModule_Conf3.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/SignModule_P11.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf0.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf1.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf2.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf3.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/logback-test.xml
 create mode 100644 id/server/stork2-saml-engine/src/test/resources/p11Conf.cfg
 delete mode 100644 repository/eu/stork/Commons/1.2.0/Commons-1.2.0.jar
 delete mode 100644 repository/eu/stork/Commons/1.2.0/Commons-1.2.0.pom

diff --git a/id/server/SamlEngine-VIDP/pom.xml b/id/server/SamlEngine-VIDP/pom.xml
deleted file mode 100644
index cead61eb8..000000000
--- a/id/server/SamlEngine-VIDP/pom.xml
+++ /dev/null
@@ -1,201 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <parent>
-        <groupId>MOA.id</groupId>
-        <artifactId>moa-id</artifactId>
-        <version>1.9.98-SNAPSHOT</version>
-    </parent>
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>eu.stork</groupId>
-	<artifactId>SamlEngine</artifactId>
-	<packaging>jar</packaging>
-	<name>STORKSAMLEngine</name>
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<saml.version>1.4.0</saml.version>
-		<samlspec.version>0.5.2</samlspec.version>
-		<samlspecacept.version>0.5.1</samlspecacept.version>
-		<commons.version>1.4.0</commons.version>
-		<opensaml.version>2.6.0</opensaml.version>
-		<timestamp>${maven.build.timestamp}</timestamp>
-	</properties>
-	<version>${saml.version}</version>
-	<description>
-        The STORKSAMLEngine library provides tools to support developers working with the Security Assertion Markup Language (SAML).
-    </description>
-
-	<repositories>
-		<repository>
-			<id>org.opensaml</id>
-			<url>https://build.shibboleth.net/nexus/content/repositories/releases</url>
-		</repository>
-		<!-- repository OpenSaml -->
-		<repository>
-			<id>shibboleth-release</id>
-			<name>Internet2 Releases</name>
-			<layout>default</layout>
-			<url>https://build.shibboleth.net/nexus/content/repositories/releases</url>
-			<snapshots>
-				<enabled>false</enabled>
-			</snapshots>
-		</repository>
-	</repositories>
-
-	<dependencies>
-		<!-- Compile dependencies -->
-		<dependency>
-			<groupId>eu.stork</groupId>
-			<artifactId>Commons</artifactId>
-			<version>${commons.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opensaml</groupId>
-			<artifactId>opensaml</artifactId>
-			<version>${opensaml.version}</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.slf4j</groupId>
-					<artifactId>slf4j-api</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.slf4j</groupId>
-					<artifactId>slf4j-simple</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.slf4j</groupId>
-					<artifactId>jcl-over-slf4j</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.slf4j</groupId>
-					<artifactId>log4j-over-slf4j</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.slf4j</groupId>
-					<artifactId>jul-to-slf4j</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-simple</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>log4j-over-slf4j</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jul-to-slf4j</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-
-		<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>2.2</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>xerces</groupId>
-			<artifactId>xercesImpl</artifactId>
-			<version>2.11.0</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.11</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-compiler-plugin</artifactId>
-					<version>2.3.2</version>
-					<configuration>
-						<source>1.6</source>
-						<target>1.6</target>
-					</configuration>
-				</plugin>
-
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-surefire-plugin</artifactId>
-					<configuration>
-						<skip>true</skip>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-source-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-sources</id>
-						<phase>verify</phase>
-						<goals>
-							<goal>jar</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-jar-plugin</artifactId>
-				<configuration>
-					<archive>
-						<manifestEntries>
-							<SAMLEngineVersion>${saml.version}</SAMLEngineVersion>
-							<SAMLSpecVersion-accept>${samlspecacept.version}</SAMLSpecVersion-accept>
-							<SAMLSpecVersion-send>${samlspec.version}</SAMLSpecVersion-send>
-							<SAMLSpecKnownIssues>None</SAMLSpecKnownIssues>
-							<timestamp>${timestamp}</timestamp>
-						</manifestEntries>
-					</archive>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-	<profiles>
-		<profile>
-			<id>metrics</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.codehaus.mojo</groupId>
-						<artifactId>cobertura-maven-plugin</artifactId>
-						<version>2.5.1</version>
-						<configuration>
-							<formats>
-								<format>html</format>
-								<format>xml</format>
-							</formats>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-	<reporting>
-	</reporting>
-</project>
diff --git a/id/server/SamlEngine-VIDP/src/main/java/META-INF/MANIFEST.MF b/id/server/SamlEngine-VIDP/src/main/java/META-INF/MANIFEST.MF
deleted file mode 100644
index 254272e1c..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: 
-
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java
deleted file mode 100644
index 26635e337..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine;
-
-import java.io.ByteArrayInputStream;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.opensaml.Configuration;
-import org.opensaml.DefaultBootstrap;
-import org.opensaml.common.SAMLObject;
-import org.opensaml.common.SignableSAMLObject;
-import org.opensaml.xml.ConfigurationException;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.Marshaller;
-import org.opensaml.xml.io.MarshallerFactory;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.io.Unmarshaller;
-import org.opensaml.xml.io.UnmarshallerFactory;
-import org.opensaml.xml.io.UnmarshallingException;
-import org.opensaml.xml.parse.BasicParserPool;
-import org.opensaml.xml.parse.XMLParserException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
-import eu.stork.peps.auth.engine.core.STORKSAMLCore;
-import eu.stork.peps.auth.engine.core.impl.CustomAttributeQueryMarshaller;
-import eu.stork.peps.auth.engine.core.impl.CustomAttributeQueryUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.SignModuleFactory;
-import eu.stork.peps.configuration.ConfigurationCreator;
-import eu.stork.peps.configuration.ConfigurationReader;
-import eu.stork.peps.configuration.InstanceEngine;
-import eu.stork.peps.exceptions.SAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
-
-/**
- * Class that wraps the operations over SAML tokens, both generation and
- * validation of SAML requests and SAML responses. Compliant with "OASIS Secure
- * Assertion Markup Language (SAML) 2.0, May 2005", but taking into account
- * STORK specific requirements.
- * 
- * @author fjquevedo
- * @author iinigo
- */
-
-public class SAMLEngine {
-
-	/** The Document Builder Factory. */
-	private static javax.xml.parsers.DocumentBuilderFactory dbf = null;
-
-	/** The instance of every engine SAML. */
-	private static Map<String, InstanceEngine> instanceConfigs;
-
-	/** The instances of SAML engine. */
-	private static Map<String, Map<String, Object>> instances;
-
-	/** The logger. */
-	private static final Logger LOG = LoggerFactory.getLogger(SAMLEngine.class
-			.getName());
-
-	/** The Constant MODULE_SIGN_CONF. */
-	private static final String MODULE_SIGN_CONF = "SignatureConf";
-
-	/** The Constant SAML_ENGINE_SIGN_CLASS. */
-	private static final String SAML_ENGINE_SIGN_CLASS = "class";
-
-	/** The Constant SAML_ENGINE_CONF. */
-	private static final String SAML_ENGINE_CONF = "SamlEngineConf";
-
-	/** The Constant SAML_ENGINE_FILE_CONF. */
-	private static final String SAML_ENGINE_FILE_CONF = "fileConfiguration";
-
-	/** The codification of characters. */
-	private static final String CHARACTER_ENCODING = "UTF-8";
-
-	/** The SAML core. */
-	private STORKSAMLCore samlCore;
-
-	/** The Module of Signature. */
-	private SAMLEngineSignI signer;
-
-
-	/** Initializes the SAML engine. */
-	/** Configure Document Builder Factory. */
-
-	static {
-		startUp();
-		loadDocumentFactory();
-	}
-
-	/**
-	 * Load document factory.
-	 */
-	private static void loadDocumentFactory() {
-		try {
-			dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance();
-			dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-			dbf.setNamespaceAware(true);
-			dbf.setIgnoringComments(true);
-		} catch (ParserConfigurationException e) {
-			LOG.error("Error parser configuration.");
-			throw new STORKSAMLEngineRuntimeException(e);
-		}
-	}
-
-	/**
-	 * Method that initializes the basic services for the SAML Engine, like the
-	 * OpenSAML library and the BouncyCastle provider.
-	 */
-	private static void startUp() {
-
-		LOG.info("SAMLEngine: Initialize OpenSAML");
-
-
-
-/* Commented because it makes a problems with PVP2 MOA-ID
-		try {
-			DefaultBootstrap.bootstrap();
-		} catch (ConfigurationException e) {
-			LOG.error("Problem initializing the OpenSAML library.");
-			throw new STORKSAMLEngineRuntimeException(e);
-		}
-*/
-
-		LOG.debug("Read all file configurations. (instances of SAMLEngine)");
-		try {
-			instanceConfigs = ConfigurationReader.readConfiguration();
-		} catch (SAMLEngineException e) {
-			LOG.error("Error read configuration file.");
-			throw new STORKSAMLEngineRuntimeException(e);
-		}
-
-		LOG.debug("Create all instances of saml engine. (instances of SAMLEngine)");
-		try {
-			instances = ConfigurationCreator
-					.createConfiguration(instanceConfigs);
-		} catch (STORKSAMLEngineException e) {
-			LOG.error("Error initializing instances from Stork SAML engine.");
-			throw new STORKSAMLEngineRuntimeException(e);
-		}
-	}
-
-	/**
-	 * Instantiates a new SAML engine.
-	 * 
-	 * @param nameInstance the name instance
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	protected SAMLEngine(final String nameInstance)
-			throws STORKSAMLEngineException {
-		LOG.info("Loading Specific Configuration.");
-
-		LOG.debug("Create intance of saml messages.");
-
-		Map<String, Object> instance = instances.get(nameInstance);
-
-		if (instance == null || instance.isEmpty()) {
-			LOG.error("Instance: " + nameInstance + " not exist.");
-			throw new STORKSAMLEngineException("Instance: " + nameInstance
-					+ " not exist.");
-		}
-
-		Properties properties = (Properties) instance.get(SAML_ENGINE_CONF);
-
-		if (properties == null) {
-			LOG.error("SamlEngine.xml: not exist.");
-			throw new STORKSAMLEngineException("SamlEngine.xml: not exist.");
-		}
-
-		samlCore = new STORKSAMLCore(properties);
-
-		final HashMap<String, String> propertiesSign = (HashMap<String, String>) instance
-				.get(MODULE_SIGN_CONF);
-
-		LOG.debug("Loading Module of sign.");
-		signer = SignModuleFactory.getInstance(propertiesSign
-				.get(SAML_ENGINE_SIGN_CLASS));
-
-		try {
-			LOG.info("Initialize module of sign.");
-			signer.init(propertiesSign.get(SAML_ENGINE_FILE_CONF));
-			LOG.info("Load cryptographic service provider of module of sign.");
-			signer.loadCryptServiceProvider();
-		} catch (SAMLEngineException e) {
-			LOG.error("Error create signature module: "
-					+ propertiesSign.get(SAML_ENGINE_FILE_CONF));
-			LOG.info("Exception" + e);
-			throw new STORKSAMLEngineException(e);
-		}
-	}
-
-	/**
-	 * Gets the Signer properties.
-	 * 
-	 * @return the SAML Sign properties
-	 */
-	protected SAMLEngineSignI getSigner() {
-		return signer;
-	}
-
-	/**
-	 * Gets the SAML core properties.
-	 * 
-	 * @return the SAML core properties
-	 */
-	protected final STORKSAMLCore getSamlCoreProperties() {
-		return samlCore;
-	}
-
-	/**
-	 * Method that transform the received SAML object into a byte array
-	 * representation.
-	 * 
-	 * @param samlToken the SAML token.
-	 * 
-	 * @return the byte[] of the SAML token.
-	 * 
-	 * @throws SAMLEngineException the SAML engine exception
-	 */
-	private byte[] marshall(final XMLObject samlToken)
-			throws SAMLEngineException {
-
-		try {
-			javax.xml.parsers.DocumentBuilder docBuilder = null;
-
-			final MarshallerFactory marshallerFactory = Configuration
-					.getMarshallerFactory();
-
-			final Marshaller marshaller;
-			if (samlToken.getElementQName().toString().endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
-				marshaller = new CustomAttributeQueryMarshaller();
-			else
-				marshaller = marshallerFactory
-				.getMarshaller(samlToken);
-
-			docBuilder = dbf.newDocumentBuilder();
-
-			final Document doc = docBuilder.newDocument();
-
-			marshaller.marshall(samlToken, doc);
-
-			// Obtain a byte array representation of the marshalled SAML object
-			final DOMSource domSource = new DOMSource(doc);
-			final StringWriter writer = new StringWriter();
-			final StreamResult result = new StreamResult(writer);
-			final TransformerFactory transFactory = TransformerFactory
-					.newInstance();
-			Transformer transformer;
-
-			transformer = transFactory.newTransformer();
-			transformer.transform(domSource, result);
-			LOG.debug("SAML request \n"+ writer.toString());
-			return writer.toString().getBytes(CHARACTER_ENCODING);
-
-		} catch (ParserConfigurationException e) {
-			LOG.error("ParserConfigurationException.");
-			throw new SAMLEngineException(e);
-		} catch (MarshallingException e) {
-			LOG.error("MarshallingException.");
-			throw new SAMLEngineException(e);
-		} catch (TransformerConfigurationException e) {
-			LOG.error("TransformerConfigurationException.");
-			throw new SAMLEngineException(e);
-		} catch (TransformerException e) {
-			LOG.error("TransformerException.");
-			throw new SAMLEngineException(e);
-		} catch (UnsupportedEncodingException e) {
-			LOG.error("UnsupportedEncodingException: " + CHARACTER_ENCODING);
-			throw new SAMLEngineException(e);
-		}
-	}
-
-	/**
-	 * Method that signs a SAML Token.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * 
-	 * @return the SAML object sign
-	 * 
-	 * @throws SAMLEngineException the SAML engine exception
-	 */
-	private SignableSAMLObject sign(final SignableSAMLObject tokenSaml)
-			throws SAMLEngineException {
-		LOG.debug("Sign SamlToken.");
-		signer.sign(tokenSaml);
-		return tokenSaml;
-	}
-
-	/**
-	 * Sign and transform to byte array.
-	 * 
-	 * @param samlToken the SAML token
-	 * 
-	 * @return the byte[] of the SAML token
-	 * 
-	 * @throws SAMLEngineException the SAML engine exception
-	 */
-	protected final byte[] signAndMarshall(final SignableSAMLObject samlToken)
-			throws SAMLEngineException {
-		LOG.debug("Marshall Saml Token.");
-		SignableSAMLObject signElement = sign(samlToken);
-		return marshall(signElement);
-	}
-
-	/**
-	 * Method that unmarshalls a SAML Object from a byte array representation to
-	 * an XML Object.
-	 * 
-	 * @param samlToken Byte array representation of a SAML Object
-	 * 
-	 * @return XML Object (superclass of SAMLObject)
-	 * 
-	 * @throws SAMLEngineException the SAML engine exception
-	 */
-	protected final XMLObject unmarshall(final byte[] samlToken)
-			throws SAMLEngineException {
-		try {
-			// Get parser pool manager
-			final BasicParserPool ppMgr = new BasicParserPool();
-			// Note: this is necessary due to an unresolved Xerces deferred DOM
-			// issue/bug
-			final HashMap<String, Boolean> features = new HashMap<String, Boolean>();
-			features.put(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
-			ppMgr.setBuilderFeatures(features);
-
-			ppMgr.setNamespaceAware(true);
-
-			// Parse SAMLToken
-			Document document = ppMgr.parse(new ByteArrayInputStream(samlToken));
-			if (document != null){
-				final Element root = document.getDocumentElement();
-				// Get appropriate unmarshaller
-				final UnmarshallerFactory unmarshallerFact = Configuration.getUnmarshallerFactory();
-				// Unmarshall using the SAML Token root element
-				if (unmarshallerFact != null && root != null){
-					final Unmarshaller unmarshaller;
-					if (root.getLocalName().equals(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
-						unmarshaller = new CustomAttributeQueryUnmarshaller();
-					else
-						unmarshaller = unmarshallerFact.getUnmarshaller(root);
-					try {
-						return unmarshaller.unmarshall(root);
-					} catch (NullPointerException e){
-						LOG.error("Error element tag incomplet or null.");
-						throw new SAMLEngineException("NullPointerException", e);
-					}
-				} else {
-					LOG.error("Error element tag incomplet or null.");
-					throw new SAMLEngineException("NullPointerException : unmarshallerFact or root is null");
-				}
-			} else {
-				LOG.error("Error element tag incomplet or null.");
-				throw new SAMLEngineException("NullPointerException : document is null");
-			}
-		} catch (XMLParserException e) {
-			LOG.error("XML Parsing Error.", e);
-			throw new SAMLEngineException(e);
-		} catch (UnmarshallingException e) {
-			LOG.error("TransformerException.", e);
-			throw new SAMLEngineException(e);
-		} catch (NullPointerException e) {
-			LOG.error("Error element tag incomplet or null.", e);
-			throw new SAMLEngineException(e);
-		}
-	}
-
-	/**
-	 * Method that validates an XML Signature contained in a SAML Token.
-	 * 
-	 * @param samlToken the SAML token
-	 * 
-	 * @return the SAML object
-	 * 
-	 * @throws SAMLEngineException the SAML engine exception
-	 */
-	protected final SAMLObject validateSignature(
-			final SignableSAMLObject samlToken) throws SAMLEngineException {
-
-		LOG.info("Validate Signature");
-		signer.validateSignature(samlToken);
-
-		return samlToken;
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java
deleted file mode 100644
index 1efbb8b32..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java
+++ /dev/null
@@ -1,833 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.commons.lang.StringUtils;
-import org.joda.time.DateTime;
-import org.opensaml.Configuration;
-import org.opensaml.common.SAMLVersion;
-import org.opensaml.common.impl.SecureRandomIdentifierGenerator;
-import org.opensaml.saml2.common.Extensions;
-import org.opensaml.saml2.common.impl.ExtensionsBuilder;
-import org.opensaml.saml2.core.Assertion;
-import org.opensaml.saml2.core.Attribute;
-import org.opensaml.saml2.core.AttributeValue;
-import org.opensaml.saml2.core.AuthnContext;
-import org.opensaml.saml2.core.AuthnRequest;
-import org.opensaml.saml2.core.AuthnStatement;
-import org.opensaml.saml2.core.Issuer;
-import org.opensaml.saml2.core.LogoutRequest;
-import org.opensaml.saml2.core.LogoutResponse;
-import org.opensaml.saml2.core.NameID;
-import org.opensaml.saml2.core.Response;
-import org.opensaml.saml2.core.Status;
-import org.opensaml.saml2.core.StatusCode;
-import org.opensaml.saml2.core.StatusMessage;
-import org.opensaml.saml2.core.Subject;
-import org.opensaml.saml2.core.SubjectConfirmation;
-import org.opensaml.saml2.core.SubjectConfirmationData;
-import org.opensaml.saml2.core.SubjectLocality;
-import org.opensaml.saml2.core.impl.AssertionBuilder;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.schema.XSAny;
-import org.opensaml.xml.signature.KeyInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-import eu.stork.peps.auth.engine.core.SAMLCore;
-import eu.stork.peps.auth.engine.core.SPApplication;
-import eu.stork.peps.auth.engine.core.SPCountry;
-import eu.stork.peps.auth.engine.core.SPInstitution;
-import eu.stork.peps.auth.engine.core.SPSector;
-import eu.stork.peps.auth.engine.core.impl.CustomAttributeQueryBuilder;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
-
-/**
- * The Class SAMLEngineUtils.
- * 
- * @author fjquevedo
- * @author iinigo
- *
- */
-public final class SAMLEngineUtils {
-
-	/** The Constant UTF_8. */
-	public static final String UTF_8 = "UTF-8";
-
-	/** The Constant SHA_512. */
-	public static final String SHA_512 = "SHA-512";
-
-	/** The generator. */
-	private static SecureRandomIdentifierGenerator generator;
-
-	/** The Constant LOG. */
-	private static final Logger LOG = LoggerFactory
-			.getLogger(SAMLEngineUtils.class.getName());
-
-	/**
-	 * Method that generates a random value according to NCName grammar.
-	 * 
-	 * NCName ::= NCNameStartChar NCNameChar* NCNameChar ::= NameChar - ':'
-	 * NCNameStartChar ::= Letter | '_' NameStartChar ::= ":" | [A-Z] | "_" |
-	 * [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] |
-	 * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
-	 * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-	 * NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] |
-	 * [#x203F-#x2040] Name ::= NameStartChar (NameChar)* Letter ::= BaseChar |
-	 * Ideographic BaseChar ::= [#x0041-#x005A] | [#x0061-#x007A] |
-	 * [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131] |
-	 * [#x0134-#x013E] | [#x0141-#x0148] | [#x014A-#x017E] | [#x0180-#x01C3] |
-	 * [#x01CD-#x01F0] | [#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250-#x02A8] |
-	 * [#x02BB-#x02C1] | #x0386 | [#x0388-#x038A] | #x038C | [#x038E-#x03A1] |
-	 * [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 |
-	 * [#x03E2-#x03F3] | [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] |
-	 * [#x045E-#x0481] | [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] |
-	 * [#x04D0-#x04EB] | [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] |
-	 * #x0559 | [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] |
-	 * [#x0621-#x063A] | [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] |
-	 * [#x06C0-#x06CE] | [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] |
-	 * [#x0905-#x0939] | #x093D | [#x0958-#x0961] | [#x0985-#x098C] |
-	 * [#x098F-#x0990] | [#x0993-#x09A8] | [#x09AA-#x09B0] | #x09B2 |
-	 * [#x09B6-#x09B9] | [#x09DC-#x09DD] | [#x09DF-#x09E1] | [#x09F0-#x09F1] |
-	 * [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | [#x0A13-#x0A28] | [#x0A2A-#x0A30] |
-	 * [#x0A32-#x0A33] | [#x0A35-#x0A36] | [#x0A38-#x0A39] | [#x0A59-#x0A5C] |
-	 * #x0A5E | [#x0A72-#x0A74] | [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] |
-	 * [#x0A93-#x0AA8] | [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] |
-	 * #x0ABD | #x0AE0 | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] |
-	 * [#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D |
-	 * [#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] |
-	 * [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] |
-	 * [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] |
-	 * [#x0C05-#x0C0C] | [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] |
-	 * [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] |
-	 * [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE |
-	 * [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] |
-	 * [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 |
-	 * [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 |
-	 * [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] |
-	 * [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] |
-	 * #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] |
-	 * [#x0F49-#x0F69] | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 |
-	 * [#x1102-#x1103] | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] |
-	 * [#x110E-#x1112] | #x113C | #x113E | #x1140 | #x114C | #x114E | #x1150 |
-	 * [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | #x1165 | #x1167 |
-	 * #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 | #x119E | #x11A8 |
-	 * #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] |
-	 * #x11EB | #x11F0 | #x11F9 | [#x1E00-#x1E9B] | [#x1EA0-#x1EF9] |
-	 * [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D] |
-	 * [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D] |
-	 * [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4] |
-	 * [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | [#x1FE0-#x1FEC] |
-	 * [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | [#x212A-#x212B] | #x212E |
-	 * [#x2180-#x2182] | [#x3041-#x3094] | [#x30A1-#x30FA] | [#x3105-#x312C] |
-	 * [#xAC00-#xD7A3] Ideographic ::= [#x4E00-#x9FA5] | #x3007 |
-	 * [#x3021-#x3029]
-	 * 
-	 * @return Random ID value
-	 */
-
-	//Initialization of a generator of identifiers for all token SAML.
-	static {
-		loadRandomIdentifierGenerator();
-	}
-
-	/**
-	 * Load random identifier generator.
-	 *
-	 *@throws STORKSAMLEngineRuntimeException the STORKSAML engine runtime exception
-	 */
-	private static void loadRandomIdentifierGenerator() {
-		try {
-			generator = new SecureRandomIdentifierGenerator();
-		} catch (NoSuchAlgorithmException ex) {
-			LOG.error("Error init SecureRandomIdentifierGenerator", ex);
-			throw new STORKSAMLEngineRuntimeException(ex);
-		}
-
-	}
-
-	/**
-	 * Creates the SAML object.
-	 * 
-	 * @param qname the QName
-	 * 
-	 * @return the XML object
-	 */
-	public static XMLObject createSamlObject(final QName qname) {
-		if (qname.toString().endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
-		{
-			CustomAttributeQueryBuilder builder = new CustomAttributeQueryBuilder();
-			return builder.buildObject(qname);
-		}
-		else
-		{
-			return Configuration.getBuilderFactory().getBuilder(qname).buildObject(
-					qname);
-		}
-	}
-
-	/**
-	 * Creates the SAML object.
-	 * 
-	 * @param qname the quality name
-	 * @param qname1 the qname1
-	 * 
-	 * @return the xML object
-	 */
-	public static XMLObject createSamlObject(final QName qname,
-			final QName qname1) {
-		return Configuration.getBuilderFactory().getBuilder(qname1)
-				.buildObject(qname, qname1);
-	}
-
-	/**
-	 * Encode value with an specific algorithm.
-	 * 
-	 * @param value the value
-	 * @param alg the algorithm
-	 * 
-	 * @return the string
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public static String encode(final String value, final String alg)
-			throws STORKSAMLEngineException {
-		LOG.debug("Encode value with  " + alg + " algorithm.");
-		byte[] buffer;
-		final StringBuffer hash = new StringBuffer("");
-		try {
-			buffer = value.getBytes(UTF_8);
-			MessageDigest msgDig;
-			msgDig = MessageDigest.getInstance(alg);
-			msgDig.update(buffer);
-			final byte[] digest = msgDig.digest();
-			final int signedByte = 0xff;
-			for (byte aux : digest) {
-				final int byt = aux & signedByte;
-				if (Integer.toHexString(byt).length() == 1) {
-					hash.append('0');
-				}
-				hash.append(Integer.toHexString(byt));
-			}
-		} catch (UnsupportedEncodingException e1) {
-			LOG.error("UnsupportedEncodingException: " + UTF_8);
-			throw new STORKSAMLEngineException(e1);
-		} catch (NoSuchAlgorithmException e) {
-			LOG.error("NoSuchAlgorithmException: " + alg);
-			throw new STORKSAMLEngineException(e);
-		}
-		return hash.toString();
-	}
-
-	/**
-	 * Generate assertion.
-	 * 
-	 * @param version the version
-	 * @param identifier the identifier
-	 * @param issueInstant the issue instant
-	 * @param issuer the issuer
-	 * 
-	 * @return the assertion
-	 */
-	public static Assertion generateAssertion(final SAMLVersion version,
-			final String identifier, final DateTime issueInstant,
-			final Issuer issuer) {
-		final AssertionBuilder assertionBuilder = new AssertionBuilder();
-		final Assertion assertion = assertionBuilder.buildObject();
-		assertion.setVersion(version);
-		assertion.setID(identifier);
-		assertion.setIssueInstant(issueInstant);
-		// <saml:Issuer>
-		assertion.setIssuer(issuer);
-		return assertion;
-	}
-
-	/**
-	 * Generate authentication statement.
-	 * 
-	 * @param authnInstant the authentication instant
-	 * @param authnContext the authentication context
-	 * 
-	 * @return the authentication statement
-	 */
-	public static AuthnStatement generateAthnStatement(final DateTime authnInstant,
-			final AuthnContext authnContext) {
-		// <saml:AuthnStatement>
-		final AuthnStatement authnStatement = (AuthnStatement) SAMLEngineUtils
-				.createSamlObject(AuthnStatement.DEFAULT_ELEMENT_NAME);
-		authnStatement.setAuthnInstant(authnInstant);
-		authnStatement.setAuthnContext(authnContext);
-		return authnStatement;
-	}
-
-	/**
-	 * Generate attribute from a list of values.
-	 *
-	 * @param name the name of the attribute.
-	 * @param status the status of the parameter: "Available", "NotAvailable" or
-	 * "Withheld".
-	 * @param values the value of the attribute.
-	 * @param isHashing the is hashing with "SHA-512" algorithm.
-	 * @return the attribute
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public static Attribute generateAttrComplex(final String name,
-			final String status, final Map<String, String> values,
-			final boolean isHashing) throws STORKSAMLEngineException {
-		LOG.debug("Generate attribute complex: " + name);
-		final Attribute attribute = (Attribute) SAMLEngineUtils
-				.createSamlObject(Attribute.DEFAULT_ELEMENT_NAME);
-
-		attribute.setName(name);
-		attribute.setNameFormat(Attribute.URI_REFERENCE);
-		attribute.getUnknownAttributes().put(
-				new QName(SAMLCore.STORK10_NS.getValue(), "AttributeStatus",
-						SAMLCore.STORK10_PREFIX.getValue()), status);
-
-		if (!values.isEmpty()) {
-			LOG.debug("Add attribute values.");
-			// Create an attribute that contains all XSAny elements.
-			final XSAny attrValue = (XSAny) SAMLEngineUtils.createSamlObject(
-					AttributeValue.DEFAULT_ELEMENT_NAME, XSAny.TYPE_NAME);
-			final Iterator<Entry<String, String>> iterator = values.entrySet()
-					.iterator();
-			while (iterator.hasNext()) {
-				final Map.Entry<String, String> pairs = iterator.next();
-				final String value = pairs.getValue();
-
-				if (StringUtils.isNotBlank(value)) {
-					// Create the attribute statement
-					final XSAny attrValueSimple = (XSAny) SAMLEngineUtils
-							.createSamlObject(new QName(SAMLCore.STORK10_NS.getValue(),
-									pairs.getKey().toString(),
-									SAMLCore.STORK10_PREFIX.getValue()), XSAny.TYPE_NAME);
-					// if it's necessary encode the information.
-					if (isHashing) {
-						attrValueSimple
-						.setTextContent(encode(value, SHA_512));
-					} else {
-						attrValueSimple.setTextContent(value);
-					}		    
-					attrValue.getUnknownXMLObjects().add(attrValueSimple);
-					attribute.getAttributeValues().add(attrValue);
-				}
-			}
-
-		}
-		return attribute;
-	}
-
-	/**
-	 * Generate extension.
-	 * 
-	 * @return the extensions
-	 */
-	public static Extensions generateExtension() {
-		final ExtensionsBuilder extensionsBuilder = new ExtensionsBuilder();
-		return extensionsBuilder.buildObject(
-				"urn:oasis:names:tc:SAML:2.0:protocol", "Extensions", "saml2p");
-	}
-
-	/**
-	 * Generate issuer.
-	 * 
-	 * @return the issuer
-	 */
-	public static Issuer generateIssuer() {
-		return (Issuer) SAMLEngineUtils
-				.createSamlObject(Issuer.DEFAULT_ELEMENT_NAME);
-	}
-
-	/**
-	 * Generate key info.
-	 * 
-	 * @return the key info
-	 */
-	public static KeyInfo generateKeyInfo() {
-		return (KeyInfo) SAMLEngineUtils
-				.createSamlObject(KeyInfo.DEFAULT_ELEMENT_NAME);
-	}
-
-	/**
-	 * Generate name id.
-	 * 
-	 * @return the name id
-	 */
-	public static NameID generateNameID() {
-		return (NameID) SAMLEngineUtils
-				.createSamlObject(NameID.DEFAULT_ELEMENT_NAME);
-	}
-
-	/**
-	 * Generate name id.
-	 * 
-	 * @param nameQualifier the name qualifier
-	 * @param format the format
-	 * @param spNameQualifier the sP name qualifier
-	 * 
-	 * @return the name id
-	 */
-	public static NameID generateNameID(final String nameQualifier,
-			final String format, final String spNameQualifier) {
-		// <saml:NameID>
-		final NameID nameId = (NameID) Configuration.getBuilderFactory()
-				.getBuilder(NameID.DEFAULT_ELEMENT_NAME).buildObject(
-						NameID.DEFAULT_ELEMENT_NAME);
-		// optional
-		nameId.setNameQualifier(nameQualifier);
-		// optional
-		nameId.setFormat(format);
-		// optional
-		nameId.setSPNameQualifier(spNameQualifier);
-		return nameId;
-	}
-
-	/**
-	 * Generate NCName.
-	 * 
-	 * @return the string
-	 */
-	public static String generateNCName() {
-		return generator.generateIdentifier();
-	}
-
-	/**
-	 * Generate the quality authentication assurance level.
-	 * 
-	 * @param qaal the level of quality authentication assurance.
-	 * 
-	 * @return the quality authentication assurance attribute
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public static QAAAttribute generateQAAAttribute(final int qaal)
-			throws STORKSAMLEngineException {
-		LOG.debug("Generate QAAAttribute.");
-
-		final QAAAttribute qaaAttribute = (QAAAttribute) SAMLEngineUtils
-				.createSamlObject(QAAAttribute.DEF_ELEMENT_NAME);
-		qaaAttribute.setQaaLevel(String.valueOf(qaal));
-		return qaaAttribute;
-	}
-
-	/**
-	 * Generate requested attribute.
-	 * 
-	 * @param name the name
-	 * @param friendlyName the friendly name
-	 * @param isRequired the is required
-	 * @param value the value
-	 * 
-	 * @return the requested attribute
-	 */
-	public static RequestedAttribute generateReqAuthnAttributeSimple(
-			final String name, final String friendlyName,
-			final String isRequired, final List<String> value) {
-		LOG.debug("Generate the requested attribute.");
-
-		final RequestedAttribute requested = (RequestedAttribute) SAMLEngineUtils
-				.createSamlObject(RequestedAttribute.DEF_ELEMENT_NAME);
-		requested.setName(name);
-		requested.setNameFormat(RequestedAttribute.URI_REFERENCE);
-
-		requested.setFriendlyName(friendlyName);
-
-		requested.setIsRequired(isRequired);
-
-		// The value is optional in an authentication request.
-		if (!value.isEmpty()) {
-			for (int nextValue = 0; nextValue < value.size(); nextValue++) {
-				final String valor = value.get(nextValue);
-				if (StringUtils.isNotBlank(valor)) {			
-
-					if(!name.equals("http://www.stork.gov.eu/1.0/signedDoc")){
-
-						// Create the attribute statement
-						final XSAny attrValue = (XSAny) SAMLEngineUtils
-								.createSamlObject(
-										new QName(SAMLCore.STORK10_NS.getValue(),
-												"AttributeValue",
-												SAMLCore.STORK10_PREFIX.getValue()),
-												XSAny.TYPE_NAME);
-
-						attrValue.setTextContent(valor.trim());
-						requested.getAttributeValues().add(attrValue);
-
-					}else{		    	
-
-						DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
-						domFactory.setNamespaceAware(true); 		 
-						Document document = null;				
-						DocumentBuilder builder;
-
-						// Parse the signedDoc value into an XML DOM Document
-						try {
-							builder = domFactory.newDocumentBuilder();
-							InputStream is;
-							is = new ByteArrayInputStream(valor.trim().getBytes(UTF_8));
-							document = builder.parse(is);
-							is.close();						
-						} catch (SAXException e1) {
-							LOG.error("SAX Error while parsing signModule attribute", e1);
-							throw new STORKSAMLEngineRuntimeException(e1);
-						} catch (ParserConfigurationException e2) {
-							LOG.error("Parser Configuration Error while parsing signModule attribute", e2);
-							throw new STORKSAMLEngineRuntimeException(e2);
-						} catch (UnsupportedEncodingException e3) {
-							LOG.error("Unsupported encoding Error while parsing signModule attribute", e3);
-							throw new STORKSAMLEngineRuntimeException(e3);
-						} catch (IOException e4) {
-							LOG.error("IO Error while parsing signModule attribute", e4);
-							throw new STORKSAMLEngineRuntimeException(e4);
-						}
-
-						// Create the XML statement(this will be overwritten with the previous DOM structure)
-						final XSAny xmlValue = (XSAny) SAMLEngineUtils
-								.createSamlObject(
-										new QName(SAMLCore.STORK10_NS.getValue(),
-												"XMLValue",
-												SAMLCore.STORK10_PREFIX.getValue()),
-												XSAny.TYPE_NAME);	
-
-						//Set the signedDoc XML content to this element
-						xmlValue.setDOM(document.getDocumentElement());
-
-						// Create the attribute statement
-						final XSAny attrValue = (XSAny) SAMLEngineUtils
-								.createSamlObject(
-										new QName(SAMLCore.STORK10_NS.getValue(),
-												"AttributeValue",
-												SAMLCore.STORK10_PREFIX.getValue()),
-												XSAny.TYPE_NAME);	
-
-						//Add previous signedDocXML to the AttributeValue Element
-						attrValue.getUnknownXMLObjects().add(xmlValue);
-
-						requested.getAttributeValues().add(attrValue);		    	
-					}
-
-
-				}
-			}
-		}
-
-		return requested;
-	}
-
-	/**
-	 * Generate response.
-	 * 
-	 * @param version the version
-	 * @param identifier the identifier
-	 * @param issueInstant the issue instant
-	 * @param status the status
-	 * 
-	 * @return the response
-	 */
-	public static Response generateResponse(final SAMLVersion version,
-			final String identifier, final DateTime issueInstant,
-			final Status status) {
-		final Response response = (Response) SAMLEngineUtils
-				.createSamlObject(Response.DEFAULT_ELEMENT_NAME);
-		response.setID(identifier);
-		response.setIssueInstant(issueInstant);
-		response.setStatus(status);
-		return response;
-	}
-
-	/**
-	 * Method that generates a SAML Authentication Request basing on the
-	 * provided information.
-	 * 
-	 * @param identifier the identifier
-	 * @param version the version
-	 * @param issueInstant the issue instant
-	 * 
-	 * @return the authentication request
-	 */
-	public static AuthnRequest generateSAMLAuthnRequest(final String identifier,
-			final SAMLVersion version, final DateTime issueInstant) {
-		LOG.debug("Generate basic authentication request.");
-		final AuthnRequest authnRequest = (AuthnRequest) SAMLEngineUtils
-				.createSamlObject(AuthnRequest.DEFAULT_ELEMENT_NAME);
-
-		authnRequest.setID(identifier);
-		authnRequest.setVersion(version);
-		authnRequest.setIssueInstant(issueInstant);
-		return authnRequest;
-	}
-
-	public static CustomAttributeQuery generateSAMLAttrQueryRequest(final String identifier,
-			final SAMLVersion version, final DateTime issueInstant) {
-		LOG.debug("Generate attribute query request.");
-		final CustomAttributeQuery attrQueryRequest = (CustomAttributeQuery) SAMLEngineUtils
-				.createSamlObject(CustomAttributeQuery.DEFAULT_ELEMENT_NAME);
-
-		attrQueryRequest.setID(identifier);
-		attrQueryRequest.setVersion(version);
-		attrQueryRequest.setIssueInstant(issueInstant);
-		return attrQueryRequest;
-	}
-
-	public static LogoutRequest generateSAMLLogoutRequest(final String identifier,
-			final SAMLVersion version, final DateTime issueInstant) {
-		LOG.debug("Generate logout request.");
-		final LogoutRequest logoutRequest = (LogoutRequest)SAMLEngineUtils.
-				createSamlObject(LogoutRequest.DEFAULT_ELEMENT_NAME);
-
-
-		logoutRequest.setID(identifier);
-		logoutRequest.setVersion(version);
-		logoutRequest.setIssueInstant(issueInstant);
-		return logoutRequest;
-	}
-
-	public static LogoutResponse generateSAMLLogoutResponse(final String identifier,
-			final SAMLVersion version, final DateTime issueInstant, 
-			final Status status, final String inResponseTo) {
-		LOG.debug("Generate logout response.");
-		final LogoutResponse logoutResponse = (LogoutResponse)SAMLEngineUtils.
-				createSamlObject(LogoutResponse.DEFAULT_ELEMENT_NAME);
-
-		logoutResponse.setInResponseTo(inResponseTo);
-		logoutResponse.setStatus(status);
-		logoutResponse.setID(identifier);
-		logoutResponse.setVersion(version);
-		logoutResponse.setIssueInstant(issueInstant);
-		return logoutResponse;
-	}
-
-	/**
-	 * Generate service provider application.
-	 * 
-	 * @param spApplication the service provider application
-	 * 
-	 * @return the sP application
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public static SPApplication generateSPApplication(final String spApplication)
-			throws STORKSAMLEngineException {
-		LOG.debug("Generate SPApplication.");
-
-		final SPApplication applicationAttr = (SPApplication) SAMLEngineUtils
-				.createSamlObject(SPApplication.DEF_ELEMENT_NAME);
-		applicationAttr.setSPApplication(spApplication);
-		return applicationAttr;
-	}
-
-	/**
-	 * Generate service provider country.
-	 * 
-	 * @param spCountry the service provider country
-	 * 
-	 * @return the service provider country
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public static SPCountry generateSPCountry(final String spCountry)
-			throws STORKSAMLEngineException {
-		LOG.debug("Generate SPApplication.");
-
-		final SPCountry countryAttribute = (SPCountry) SAMLEngineUtils
-				.createSamlObject(SPCountry.DEF_ELEMENT_NAME);
-		countryAttribute.setSPCountry(spCountry);
-		return countryAttribute;
-	}
-
-	/**
-	 * Generate service provider institution.
-	 * 
-	 * @param spInstitution the service provider institution
-	 * 
-	 * @return the service provider institution
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public static SPInstitution generateSPInstitution(final String spInstitution)
-			throws STORKSAMLEngineException {
-		LOG.debug("Generate SPInstitution.");
-
-		final SPInstitution institutionAttr = (SPInstitution) SAMLEngineUtils
-				.createSamlObject(SPInstitution.DEF_ELEMENT_NAME);
-		institutionAttr.setSPInstitution(spInstitution);
-		return institutionAttr;
-	}
-
-	/**
-	 * Generate service provider sector.
-	 * 
-	 * @param spSector the service provider sector
-	 * 
-	 * @return the service provider sector
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public static SPSector generateSPSector(final String spSector)
-			throws STORKSAMLEngineException {
-		LOG.debug("Generate SPSector.");
-
-		final SPSector sectorAttribute = (SPSector) SAMLEngineUtils
-				.createSamlObject(SPSector.DEF_ELEMENT_NAME);
-		sectorAttribute.setSPSector(spSector);
-		return sectorAttribute;
-	}
-
-	/**
-	 * Generate status.
-	 * 
-	 * @param statusCode the status code
-	 * 
-	 * @return the status
-	 */
-	public static Status generateStatus(final StatusCode statusCode) {
-		final Status status = (Status) SAMLEngineUtils
-				.createSamlObject(Status.DEFAULT_ELEMENT_NAME);
-		status.setStatusCode(statusCode);
-		return status;
-	}
-
-	/**
-	 * Generate status code.
-	 * 
-	 * @param value the value
-	 * 
-	 * @return the status code
-	 */
-	public static StatusCode generateStatusCode(final String value) {
-		final StatusCode statusCode = (StatusCode) SAMLEngineUtils
-				.createSamlObject(StatusCode.DEFAULT_ELEMENT_NAME);
-		statusCode.setValue(value);
-		return statusCode;
-	}
-
-	/**
-	 * Generate status message.
-	 * 
-	 * @param message the message
-	 * 
-	 * @return the status message
-	 */
-	public static StatusMessage generateStatusMessage(final String message) {
-		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-				.createSamlObject(StatusMessage.DEFAULT_ELEMENT_NAME);
-		statusMessage.setMessage(message);
-		return statusMessage;
-	}
-
-	/**
-	 * Generate subject.
-	 * 
-	 * @return the subject
-	 */
-	public static Subject generateSubject() {
-		return (Subject) SAMLEngineUtils
-				.createSamlObject(Subject.DEFAULT_ELEMENT_NAME);
-	}
-
-	/**
-	 * Generate subject confirmation.
-	 * 
-	 * @param method the method
-	 * @param data the data
-	 * 
-	 * @return the subject confirmation
-	 */
-	public static SubjectConfirmation generateSubjectConfirmation(
-			final String method, final SubjectConfirmationData data) {	
-		final SubjectConfirmation subjectConf = (SubjectConfirmation) Configuration
-				.getBuilderFactory().getBuilder(
-						SubjectConfirmation.DEFAULT_ELEMENT_NAME).buildObject(
-								SubjectConfirmation.DEFAULT_ELEMENT_NAME);
-
-		subjectConf.setMethod(method);
-
-		subjectConf.setSubjectConfirmationData(data);
-
-		return subjectConf;
-	}
-
-	/**
-	 * Generate subject confirmation data.
-	 * 
-	 * @param notOnOrAfter the not on or after
-	 * @param recipient the recipient
-	 * @param inResponseTo the in response to
-	 * 
-	 * @return the subject confirmation data
-	 */
-	public static SubjectConfirmationData generateSubjectConfirmationData(
-			final DateTime notOnOrAfter, final String recipient,
-			final String inResponseTo) {
-		final SubjectConfirmationData subjectConfData = (SubjectConfirmationData) SAMLEngineUtils
-				.createSamlObject(SubjectConfirmationData.DEFAULT_ELEMENT_NAME);
-		subjectConfData.setNotOnOrAfter(notOnOrAfter);
-		subjectConfData.setRecipient(recipient);
-		subjectConfData.setInResponseTo(inResponseTo);
-		return subjectConfData;
-	}
-
-	/**
-	 * Generate subject locality.
-	 * 
-	 * @param address the address
-	 * 
-	 * @return the subject locality
-	 */
-	public static SubjectLocality generateSubjectLocality(final String address) {
-		final SubjectLocality subjectLocality = (SubjectLocality) SAMLEngineUtils
-				.createSamlObject(SubjectLocality.DEFAULT_ELEMENT_NAME);
-		subjectLocality.setAddress(address);
-		return subjectLocality;
-	}
-
-	/**
-	 * Method that returns the current time.
-	 * 
-	 * @return the current time
-	 */
-	public static DateTime getCurrentTime() {
-		return new DateTime();
-	}
-
-	/**
-	 * Instantiates a new SAML engine utilities.
-	 */
-	private SAMLEngineUtils() {
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java
deleted file mode 100644
index 6bdf7b320..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java
+++ /dev/null
@@ -1,3744 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.commons.lang.StringUtils;
-import org.bouncycastle.jce.X509Principal;
-import org.joda.time.DateTime;
-import org.opensaml.Configuration;
-import org.opensaml.common.SAMLVersion;
-import org.opensaml.common.SignableSAMLObject;
-import org.opensaml.common.xml.SAMLConstants;
-import org.opensaml.saml2.common.Extensions;
-import org.opensaml.saml2.core.Assertion;
-import org.opensaml.saml2.core.Attribute;
-import org.opensaml.saml2.core.AttributeStatement;
-import org.opensaml.saml2.core.AttributeValue;
-import org.opensaml.saml2.core.Audience;
-import org.opensaml.saml2.core.AudienceRestriction;
-import org.opensaml.saml2.core.AuthnContext;
-import org.opensaml.saml2.core.AuthnContextDecl;
-import org.opensaml.saml2.core.AuthnRequest;
-import org.opensaml.saml2.core.AuthnStatement;
-import org.opensaml.saml2.core.Conditions;
-import org.opensaml.saml2.core.Issuer;
-import org.opensaml.saml2.core.LogoutRequest;
-import org.opensaml.saml2.core.LogoutResponse;
-import org.opensaml.saml2.core.NameID;
-import org.opensaml.saml2.core.OneTimeUse;
-import org.opensaml.saml2.core.Response;
-import org.opensaml.saml2.core.Status;
-import org.opensaml.saml2.core.StatusCode;
-import org.opensaml.saml2.core.StatusMessage;
-import org.opensaml.saml2.core.Subject;
-import org.opensaml.saml2.core.SubjectConfirmation;
-import org.opensaml.saml2.core.SubjectConfirmationData;
-import org.opensaml.saml2.core.SubjectLocality;
-import org.opensaml.saml2.core.impl.SubjectConfirmationBuilder;
-import org.opensaml.xml.Namespace;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.schema.XSAny;
-import org.opensaml.xml.schema.impl.XSAnyBuilder;
-import org.opensaml.xml.schema.impl.XSAnyImpl;
-import org.opensaml.xml.schema.impl.XSAnyMarshaller;
-import org.opensaml.xml.schema.impl.XSAnyUnmarshaller;
-import org.opensaml.xml.schema.impl.XSStringImpl;
-import org.opensaml.xml.signature.KeyInfo;
-import org.opensaml.xml.util.Base64;
-import org.opensaml.xml.validation.ValidationException;
-import org.opensaml.xml.validation.Validator;
-import org.opensaml.xml.validation.ValidatorSuite;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-import eu.stork.peps.auth.commons.IPersonalAttributeList;
-import eu.stork.peps.auth.commons.PersonalAttribute;
-import eu.stork.peps.auth.commons.PersonalAttributeList;
-import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
-import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
-import eu.stork.peps.auth.commons.STORKAuthnRequest;
-import eu.stork.peps.auth.commons.STORKAuthnResponse;
-import eu.stork.peps.auth.commons.STORKLogoutRequest;
-import eu.stork.peps.auth.commons.STORKLogoutResponse;
-import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
-import eu.stork.peps.auth.engine.core.CitizenCountryCode;
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-import eu.stork.peps.auth.engine.core.CustomRequestAbstractType;
-import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
-import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
-import eu.stork.peps.auth.engine.core.EIDSectorShare;
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-import eu.stork.peps.auth.engine.core.RequestedAttributes;
-import eu.stork.peps.auth.engine.core.SAMLCore;
-import eu.stork.peps.auth.engine.core.SPApplication;
-import eu.stork.peps.auth.engine.core.SPCountry;
-import eu.stork.peps.auth.engine.core.SPID;
-import eu.stork.peps.auth.engine.core.SPInformation;
-import eu.stork.peps.auth.engine.core.SPInstitution;
-import eu.stork.peps.auth.engine.core.SPSector;
-import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
-import eu.stork.peps.auth.engine.core.impl.AuthenticationAttributesBuilder;
-import eu.stork.peps.auth.engine.core.impl.AuthenticationAttributesMarshaller;
-import eu.stork.peps.auth.engine.core.impl.AuthenticationAttributesUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.CitizenCountryCodeBuilder;
-import eu.stork.peps.auth.engine.core.impl.CitizenCountryCodeMarshaller;
-import eu.stork.peps.auth.engine.core.impl.CitizenCountryCodeUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.EIDCrossBorderShareBuilder;
-import eu.stork.peps.auth.engine.core.impl.EIDCrossBorderShareMarshaller;
-import eu.stork.peps.auth.engine.core.impl.EIDCrossBorderShareUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.EIDCrossSectorShareBuilder;
-import eu.stork.peps.auth.engine.core.impl.EIDCrossSectorShareMarshaller;
-import eu.stork.peps.auth.engine.core.impl.EIDCrossSectorShareUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.EIDSectorShareBuilder;
-import eu.stork.peps.auth.engine.core.impl.EIDSectorShareMarshaller;
-import eu.stork.peps.auth.engine.core.impl.EIDSectorShareUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.QAAAttributeBuilder;
-import eu.stork.peps.auth.engine.core.impl.QAAAttributeMarshaller;
-import eu.stork.peps.auth.engine.core.impl.QAAAttributeUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.RequestedAttributeBuilder;
-import eu.stork.peps.auth.engine.core.impl.RequestedAttributeMarshaller;
-import eu.stork.peps.auth.engine.core.impl.RequestedAttributeUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.RequestedAttributesBuilder;
-import eu.stork.peps.auth.engine.core.impl.RequestedAttributesMarshaller;
-import eu.stork.peps.auth.engine.core.impl.RequestedAttributesUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPApplicationBuilder;
-import eu.stork.peps.auth.engine.core.impl.SPApplicationMarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPApplicationUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPCountryBuilder;
-import eu.stork.peps.auth.engine.core.impl.SPCountryMarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPCountryUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPIDBuilder;
-import eu.stork.peps.auth.engine.core.impl.SPIDMarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPIDUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPInformationBuilder;
-import eu.stork.peps.auth.engine.core.impl.SPInformationMarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPInformationUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPInstitutionBuilder;
-import eu.stork.peps.auth.engine.core.impl.SPInstitutionMarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPInstitutionUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPSectorBuilder;
-import eu.stork.peps.auth.engine.core.impl.SPSectorMarshaller;
-import eu.stork.peps.auth.engine.core.impl.SPSectorUnmarshaller;
-import eu.stork.peps.auth.engine.core.impl.VIDPAuthenticationAttributesBuilder;
-import eu.stork.peps.auth.engine.core.impl.VIDPAuthenticationAttributesMarshaller;
-import eu.stork.peps.auth.engine.core.impl.VIDPAuthenticationAttributesUnmarshaller;
-import eu.stork.peps.auth.engine.core.validator.CustomAttributeQueryValidator;
-import eu.stork.peps.auth.engine.core.validator.ExtensionsSchemaValidator;
-import eu.stork.peps.auth.engine.core.validator.MultipleAssertionResponseValidator;
-import eu.stork.peps.auth.engine.core.validator.QAAAttributeSchemaValidator;
-import eu.stork.peps.exceptions.SAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
-
-/**
- * Class that wraps the operations over SAML tokens, both generation and
- * validation of SAML STORK requests and SAML STORK responses. Complaint with
- * "OASIS Secure Assertion Markup Language (SAML) 2.0, May 2005", but taking
- * into account STORK specific requirements.
- * 
- * @author fjquevedo
- * @author iinigo
- */
-public final class STORKSAMLEngine extends SAMLEngine {
-
-	/** The Constant LOG. */
-	private static final Logger LOG = LoggerFactory
-	.getLogger(STORKSAMLEngine.class.getName());
-
-    private static final String ATTRIBUTE_EMPTY_LITERAL = "Attribute name is null or empty.";
-	/**
-	 * Gets the single instance of STORKSAMLEngine.
-	 * 
-	 * @param nameInstance the name instance
-	 * 
-	 * @return single instance of STORKSAMLEngine
-	 */
-	public static synchronized STORKSAMLEngine getInstance(
-			final String nameInstance) {
-		STORKSAMLEngine engine = null;
-		LOG.info("Get instance: " + nameInstance);
-		try {
-			engine = new STORKSAMLEngine(nameInstance.trim());
-		} catch (Exception e) {
-			LOG.error("Error getting instance: " + nameInstance);
-            e.printStackTrace();
-		}
-		return engine;
-	}
-
-	/**
-	 * Instantiate a new STORKSAML engine.
-	 * 
-	 * @param nameInstance the name instance
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private STORKSAMLEngine(final String nameInstance)
-	throws STORKSAMLEngineException {
-		// Initialization OpenSAML.
-		super(nameInstance);
-		LOG.info("Register STORK objects provider.");
-		Configuration.registerObjectProvider(QAAAttribute.DEF_ELEMENT_NAME,
-				new QAAAttributeBuilder(), new QAAAttributeMarshaller(),
-				new QAAAttributeUnmarshaller());
-
-		Configuration.registerObjectProvider(EIDSectorShare.DEF_ELEMENT_NAME,
-				new EIDSectorShareBuilder(), new EIDSectorShareMarshaller(),
-				new EIDSectorShareUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				EIDCrossSectorShare.DEF_ELEMENT_NAME,
-				new EIDCrossSectorShareBuilder(),
-				new EIDCrossSectorShareMarshaller(),
-				new EIDCrossSectorShareUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				EIDCrossBorderShare.DEF_ELEMENT_NAME,
-				new EIDCrossBorderShareBuilder(),
-				new EIDCrossBorderShareMarshaller(),
-				new EIDCrossBorderShareUnmarshaller());
-
-		Configuration.registerObjectProvider(SPSector.DEF_ELEMENT_NAME,
-				new SPSectorBuilder(), new SPSectorMarshaller(),
-				new SPSectorUnmarshaller());
-
-		Configuration.registerObjectProvider(SPInstitution.DEF_ELEMENT_NAME,
-				new SPInstitutionBuilder(), new SPInstitutionMarshaller(),
-				new SPInstitutionUnmarshaller());
-
-		Configuration.registerObjectProvider(SPApplication.DEF_ELEMENT_NAME,
-				new SPApplicationBuilder(), new SPApplicationMarshaller(),
-				new SPApplicationUnmarshaller());
-
-		Configuration.registerObjectProvider(SPCountry.DEF_ELEMENT_NAME,
-				new SPCountryBuilder(), new SPCountryMarshaller(),
-				new SPCountryUnmarshaller());
-
-		Configuration.registerObjectProvider(XSAny.TYPE_NAME,
-				new XSAnyBuilder(), new XSAnyMarshaller(),
-				new XSAnyUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				RequestedAttribute.DEF_ELEMENT_NAME,
-				new RequestedAttributeBuilder(),
-				new RequestedAttributeMarshaller(),
-				new RequestedAttributeUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				RequestedAttributes.DEF_ELEMENT_NAME,
-				new RequestedAttributesBuilder(),
-				new RequestedAttributesMarshaller(),
-				new RequestedAttributesUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				AuthenticationAttributes.DEF_ELEMENT_NAME,
-				new AuthenticationAttributesBuilder(),
-				new AuthenticationAttributesMarshaller(),
-				new AuthenticationAttributesUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				VIDPAuthenticationAttributes.DEF_ELEMENT_NAME,
-				new VIDPAuthenticationAttributesBuilder(),
-				new VIDPAuthenticationAttributesMarshaller(),
-				new VIDPAuthenticationAttributesUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				CitizenCountryCode.DEF_ELEMENT_NAME,
-				new CitizenCountryCodeBuilder(),
-				new CitizenCountryCodeMarshaller(),
-				new CitizenCountryCodeUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				SPID.DEF_ELEMENT_NAME,
-				new SPIDBuilder(),
-				new SPIDMarshaller(),
-				new SPIDUnmarshaller());
-
-		Configuration.registerObjectProvider(
-				SPInformation.DEF_ELEMENT_NAME,
-				new SPInformationBuilder(),
-				new SPInformationMarshaller(),
-				new SPInformationUnmarshaller());
-
-		LOG.info("Register STORK object validators.");
-		final ValidatorSuite validatorSuite = new ValidatorSuite(
-				QAAAttribute.DEF_LOCAL_NAME);
-
-		validatorSuite.registerValidator(QAAAttribute.DEF_ELEMENT_NAME,
-				new QAAAttributeSchemaValidator());
-		final Extensions extensions = SAMLEngineUtils.generateExtension();
-		validatorSuite.registerValidator(extensions.getElementQName(),
-				new ExtensionsSchemaValidator());
-
-		Configuration.registerValidatorSuite(
-				"stork:QualityAuthenticationAssuranceLevel", validatorSuite);
-
-	}
-
-	/**
-	 * Generate authentication response base.
-	 * 
-	 * @param status the status
-	 * @param assertConsumerURL the assert consumer URL.
-	 * @param inResponseTo the in response to
-	 * 
-	 * @return the response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private Response genAuthnRespBase(final Status status,
-			final String assertConsumerURL, final String inResponseTo)
-	throws STORKSAMLEngineException {
-		LOG.debug("Generate Authentication Response base.");
-		final Response response = SAMLEngineUtils.generateResponse(
-				SAMLVersion.VERSION_20, SAMLEngineUtils.generateNCName(),
-				SAMLEngineUtils.getCurrentTime(), status);
-
-		// Set name Spaces
-		this.setNameSpaces(response);
-
-		// Mandatory STORK
-		LOG.debug("Generate Issuer");
-		final Issuer issuer = SAMLEngineUtils.generateIssuer();
-		issuer.setValue(super.getSamlCoreProperties().getResponder());
-
-		// Format Entity Optional STORK
-		issuer.setFormat(super.getSamlCoreProperties().getFormatEntity());
-
-		response.setIssuer(issuer);
-
-		// destination Mandatory Stork
-		response.setDestination(assertConsumerURL.trim());
-
-		// inResponseTo Mandatory Stork
-		response.setInResponseTo(inResponseTo.trim());
-
-		// Optional STORK
-		response.setConsent(super.getSamlCoreProperties()
-				.getConsentAuthnResponse());
-
-		return response;
-	}
-	
-	/**
-	 * Generate attribute query response base.
-	 * 
-	 * @param status the status
-	 * @param destinationURL the assert consumer URL.
-	 * @param inResponseTo the in response to
-	 * 
-	 * @return the response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private Response genAttrQueryRespBase(final Status status,
-			final String destinationURL, final String inResponseTo)
-	throws STORKSAMLEngineException {
-		LOG.debug("Generate Attribute query Response base.");
-		final Response response = SAMLEngineUtils.generateResponse(
-				SAMLVersion.VERSION_20, SAMLEngineUtils.generateNCName(),
-				SAMLEngineUtils.getCurrentTime(), status);
-
-		// Set name Spaces
-		this.setNameSpaces(response);
-
-		// Mandatory STORK
-		LOG.debug("Generate Issuer");
-		final Issuer issuer = SAMLEngineUtils.generateIssuer();
-		issuer.setValue(super.getSamlCoreProperties().getResponder());
-
-		// Format Entity Optional STORK
-		issuer.setFormat(super.getSamlCoreProperties().getFormatEntity());
-
-		response.setIssuer(issuer);
-
-		// destination Mandatory Stork
-		response.setDestination(destinationURL.trim());
-
-		// inResponseTo Mandatory Stork
-		response.setInResponseTo(inResponseTo.trim());
-
-		// Optional STORK
-		response.setConsent(super.getSamlCoreProperties()
-				.getConsentAuthnResponse());
-
-		return response;
-	}
-
-	/**
-	 * Generate assertion.
-	 * 
-	 * @param ipAddress the IP address.
-	 * @param assertConsumerURL the assert consumer URL.
-	 * @param inResponseTo the in response to
-	 * @param issuer the issuer
-	 * @param notOnOrAfter the not on or after
-	 * 
-	 * @return the assertion
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private Assertion generateAssertion(final String ipAddress,
-			final String assertConsumerURL, final String inResponseTo,
-			final String issuer, final DateTime notOnOrAfter)
-	throws STORKSAMLEngineException {
-		LOG.info("Generate Assertion.");
-
-		// Mandatory STORK
-		LOG.debug("Generate Issuer to Assertion");
-		final Issuer issuerAssertion = SAMLEngineUtils.generateIssuer();
-		issuerAssertion.setValue(super.getSamlCoreProperties().getResponder());
-
-		// Format Entity Optional STORK
-		issuerAssertion.setFormat(super.getSamlCoreProperties()
-				.getFormatEntity());
-
-		final Assertion assertion = SAMLEngineUtils.generateAssertion(
-				SAMLVersion.VERSION_20, SAMLEngineUtils.generateNCName(),
-				SAMLEngineUtils.getCurrentTime(), issuerAssertion);
-
-		final Subject subject = SAMLEngineUtils.generateSubject();
-
-		// Mandatory STORK verified
-		// String format = NameID.UNSPECIFIED
-		// specification: 'SAML:2.0' exist
-		// opensaml: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
-		// opensaml  "urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified"
-		final String format = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
-
-		final String nameQualifier = "";
-
-		LOG.debug("Generate NameID");
-		final NameID nameId = SAMLEngineUtils.generateNameID(super
-				.getSamlCoreProperties().getResponder(), format, nameQualifier);
-		nameId.setValue(format);
-		subject.setNameID(nameId);
-
-		// Mandatory if urn:oasis:names:tc:SAML:2.0:cm:bearer.
-		// Optional in other case.
-		LOG.debug("Generate SubjectConfirmationData.");
-		final SubjectConfirmationData dataBearer = SAMLEngineUtils
-		.generateSubjectConfirmationData(SAMLEngineUtils
-				.getCurrentTime(), assertConsumerURL, inResponseTo);
-
-		// Mandatory if urn:oasis:names:tc:SAML:2.0:cm:bearer.
-		// Optional in other case.
-		LOG.debug("Generate SubjectConfirmation");
-		final SubjectConfirmation subjectConf = SAMLEngineUtils
-		.generateSubjectConfirmation(SubjectConfirmation.METHOD_BEARER,
-				dataBearer);
-
-		final ArrayList<SubjectConfirmation> listSubjectConf = new ArrayList<SubjectConfirmation>();
-		listSubjectConf.add(subjectConf);
-
-		for (final Iterator<SubjectConfirmation> iter = listSubjectConf
-				.iterator(); iter.hasNext();) {
-			final SubjectConfirmation element = iter.next();
-
-			if (SubjectConfirmation.METHOD_BEARER.equals(element.getMethod())) {
-				// ipAddress Mandatory if method is Bearer.
-
-				if (StringUtils.isBlank(ipAddress)) {
-					throw new STORKSAMLEngineException(
-							"ipAddress is null or empty");
-				}
-				element.getSubjectConfirmationData().setAddress(
-						ipAddress.trim());
-			}
-
-			element.getSubjectConfirmationData()
-			.setRecipient(assertConsumerURL);
-			element.getSubjectConfirmationData().setNotOnOrAfter(notOnOrAfter);
-		}
-
-		// The SAML 2.0 specification allows multiple SubjectConfirmations
-		subject.getSubjectConfirmations().addAll(listSubjectConf);
-
-		// Mandatory Stork
-		assertion.setSubject(subject);
-
-		// Conditions that MUST be evaluated when assessing the validity of
-		// and/or when using the assertion.
-		final Conditions conditions = this.generateConditions(SAMLEngineUtils
-				.getCurrentTime(), notOnOrAfter, issuer);
-
-		assertion.setConditions(conditions);
-
-		LOG.debug("Generate stork Authentication Statement.");
-		final AuthnStatement storkAuthnStat = this
-		.generateStorkAuthStatement(ipAddress);
-		assertion.getAuthnStatements().add(storkAuthnStat);
-
-		return assertion;
-	}
-
-    private String getAttributeName(final PersonalAttribute attribute) throws STORKSAMLEngineException {
-        if (StringUtils.isBlank(attribute.getName())) {
-            LOG.error(ATTRIBUTE_EMPTY_LITERAL);
-            throw new STORKSAMLEngineException(ATTRIBUTE_EMPTY_LITERAL);
-        }
-
-        final String attributeName = super.getSamlCoreProperties()
-                .getProperty(attribute.getName());
-
-        if (StringUtils.isBlank(attributeName)) {
-            LOG.error("Attribute name: {} it is not known.", attribute
-                    .getName());
-            throw new STORKSAMLEngineException("Attribute name: "
-                    + attribute.getName() + " it is not known.");
-        }
-        return attributeName;
-    }
-	/**
-	 * Generate attribute statement.
-	 * 
-	 * @param personalAttrList the personal attribute list
-	 * @param isHashing the is hashing
-	 * 
-	 * @return the attribute statement
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 * @throws IOException
-	 */
-	private AttributeStatement generateAttributeStatement(
-			final IPersonalAttributeList personalAttrList,
-			final boolean isHashing) throws STORKSAMLEngineException {
-		LOG.debug("Generate attribute statement");
-
-		final AttributeStatement attrStatement = (AttributeStatement) SAMLEngineUtils
-		.createSamlObject(AttributeStatement.DEFAULT_ELEMENT_NAME);
-
-		for (PersonalAttribute attribute : personalAttrList) {
-
-            String attributeName = getAttributeName(attribute);
-
-			// Verification that only one value it's permitted, simple or
-			// complex, not both.
-
-			final boolean simpleNull = (attribute.getValue() == null);
-			final boolean simpleEmpty = (simpleNull || (!simpleNull && attribute
-					.getValue().isEmpty()));
-
-			final boolean complexNull = (attribute.getComplexValue() == null);
-			final boolean complexEmpty = (complexNull || (!complexNull && attribute
-					.getComplexValue().isEmpty()));
-
-			if ((!simpleEmpty && !complexEmpty)) {
-				throw new STORKSAMLEngineException(
-						"Attribute name: "
-						+ attribute.getName()
-						+ " must be contain one value, simple or complex value.");
-			} else {
-
-				if (!simpleEmpty) {
-					attrStatement.getAttributes().add(
-							this.generateAttrSimple(attributeName, attribute
-									.getStatus(), attribute.getValue(),
-									isHashing));
-				} else if (!complexEmpty) {
-					attrStatement.getAttributes().add(
-							SAMLEngineUtils.generateAttrComplex(attributeName,
-									attribute.getStatus(), attribute
-									.getComplexValue(), isHashing));
-				} else if (!simpleNull) {
-					attrStatement.getAttributes().add(
-							this.generateAttrSimple(attributeName, attribute
-									.getStatus(), new ArrayList<String>(),
-									isHashing));
-				} else {
-					// Add attribute complex.
-					attrStatement.getAttributes().add(
-							SAMLEngineUtils.generateAttrComplex(attributeName,
-									attribute.getStatus(),
-									new HashMap<String, String>(), isHashing));
-				}
-			}
-		}
-		return attrStatement;
-	}
-    private XSAny createAttributeValueForSignedDoc(final String value, final boolean isHashing) throws STORKSAMLEngineException {
-        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
-        domFactory.setNamespaceAware(true);
-        Document document = null;
-        DocumentBuilder builder;
-
-        // Parse the signedDoc value into an XML DOM Document
-        try {
-            builder = domFactory.newDocumentBuilder();
-            InputStream is;
-            is = new ByteArrayInputStream(value.trim().getBytes("UTF-8"));
-            document = builder.parse(is);
-            is.close();
-        } catch (SAXException e1) {
-            LOG.error("SAX Error while parsing signModule attribute", e1);
-            throw new STORKSAMLEngineRuntimeException(e1);
-        } catch (ParserConfigurationException e2) {
-            LOG.error("Parser Configuration Error while parsing signModule attribute", e2);
-            throw new STORKSAMLEngineRuntimeException(e2);
-        } catch (UnsupportedEncodingException e3) {
-            LOG.error("Unsupported encoding Error while parsing signModule attribute", e3);
-            throw new STORKSAMLEngineRuntimeException(e3);
-        } catch (IOException e4) {
-            LOG.error("IO Error while parsing signModule attribute", e4);
-            throw new STORKSAMLEngineRuntimeException(e4);
-        }
-
-        // Create the attribute statement
-        final XSAny xmlValue = (XSAny) SAMLEngineUtils
-                .createSamlObject(
-                        AttributeValue.DEFAULT_ELEMENT_NAME,
-                        XSAny.TYPE_NAME);
-
-        //Set the signedDoc XML content to this element
-        xmlValue.setDOM(document.getDocumentElement());
-
-        // Create the attribute statement
-        final XSAny attrValue = (XSAny) SAMLEngineUtils
-                .createSamlObject(
-                        AttributeValue.DEFAULT_ELEMENT_NAME,
-                        XSAny.TYPE_NAME);
-
-        //Add previous signedDocXML to the AttributeValue Element
-
-        // if it's necessary encode the information.
-        if (!isHashing) {
-            attrValue.getUnknownXMLObjects().add(xmlValue);
-        }
-        return attrValue;
-    }
-
-    private XSAny createAttributeValueForNonSignedDoc(final String value, final boolean isHashing) throws STORKSAMLEngineException {
-        // Create the attribute statement
-        final XSAny attrValue = (XSAny) SAMLEngineUtils
-                .createSamlObject(
-                        AttributeValue.DEFAULT_ELEMENT_NAME,
-                        XSAny.TYPE_NAME);
-        // if it's necessary encode the information.
-        if (isHashing) {
-            attrValue.setTextContent(SAMLEngineUtils.encode(value, SAMLEngineUtils.SHA_512));
-        } else {
-            attrValue.setTextContent(value);
-        }
-        return attrValue;
-    }
-
-	/**
-	 * Generate attribute from a list of values.
-	 * 
-	 * @param name the name of the attribute.
-	 * @param values the value of the attribute.
-	 * @param isHashing the is hashing with "SHA-512" algorithm.
-	 * @param status the status of the parameter: "Available", "NotAvailable" or
-	 *            "Withheld".
-	 * 
-	 * @return the attribute
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-    private Attribute generateAttrSimple(final String name,
-                                         final String status, final List<String> values,
-                                         final boolean isHashing) throws STORKSAMLEngineException {
-        LOG.debug("Generate attribute simple: " + name);
-        final Attribute attribute = (Attribute) SAMLEngineUtils
-                .createSamlObject(Attribute.DEFAULT_ELEMENT_NAME);
-
-        attribute.setName(name);
-        attribute.setNameFormat(Attribute.URI_REFERENCE);
-
-        attribute.getUnknownAttributes().put(
-                new QName(SAMLCore.STORK10_NS.getValue(), "AttributeStatus",
-                        SAMLCore.STORK10_PREFIX.getValue()), status);
-
-        if (values != null) {
-            LOG.debug("Add attribute values.");
-            for (int i = 0; i < values.size(); i++) {
-                final String value = values.get(i);
-                if (StringUtils.isNotBlank(value)) {
-                    XSAny attrValue = null;
-                    if (!name.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
-                        // Create the attribute statement
-                        attrValue = createAttributeValueForNonSignedDoc(value, isHashing);
-
-                    } else {
-                        attrValue = createAttributeValueForSignedDoc(value, isHashing);
-                        attribute.getAttributeValues().add(attrValue);
-                    }
-                    attribute.getAttributeValues().add(attrValue);
-                }
-            }
-        }
-        return attribute;
-    }
-
-	/**
-	 * Generate conditions that MUST be evaluated when assessing the validity of
-	 * and/or when using the assertion.
-	 * 
-	 * @param notBefore the not before
-	 * @param notOnOrAfter the not on or after
-	 * @param audienceURI the audience URI.
-	 * 
-	 * @return the conditions
-	 */
-	private Conditions generateConditions(final DateTime notBefore,
-			final DateTime notOnOrAfter, final String audienceURI) {
-		LOG.debug("Generate conditions.");
-		final Conditions conditions = (Conditions) SAMLEngineUtils
-		.createSamlObject(Conditions.DEFAULT_ELEMENT_NAME);
-		conditions.setNotBefore(notBefore);
-		conditions.setNotOnOrAfter(notOnOrAfter);
-
-		final AudienceRestriction restrictions = (AudienceRestriction) SAMLEngineUtils
-		.createSamlObject(AudienceRestriction.DEFAULT_ELEMENT_NAME);
-
-		final Audience audience = (Audience) SAMLEngineUtils
-		.createSamlObject(Audience.DEFAULT_ELEMENT_NAME);
-		audience.setAudienceURI(audienceURI);
-
-		restrictions.getAudiences().add(audience);
-		conditions.getAudienceRestrictions().add(restrictions);
-
-		if (super.getSamlCoreProperties().isOneTimeUse()) {
-			final OneTimeUse oneTimeUse = (OneTimeUse) SAMLEngineUtils
-			.createSamlObject(OneTimeUse.DEFAULT_ELEMENT_NAME);
-			conditions.getConditions().add(oneTimeUse);
-		}
-		return conditions;
-	}
-
-	/**
-	 * Generate personal attribute list.
-	 * 
-	 * @param assertion the assertion
-	 * 
-	 * @return the personal attribute list
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private IPersonalAttributeList generatePersonalAttributeList(
-			final Assertion assertion) throws STORKSAMLEngineException {
-		LOG.debug("Generate personal attribute list from XMLObject.");
-		final List<XMLObject> listExtensions = assertion.getOrderedChildren();
-
-		boolean find = false;
-		AttributeStatement requestedAttr = null;
-
-		// Search the attribute statement.
-		for (int i = 0; i < listExtensions.size() && !find; i++) {
-			final XMLObject xml = listExtensions.get(i);
-			if (xml instanceof AttributeStatement) {
-				requestedAttr = (AttributeStatement) xml;
-				find = true;
-			}
-		}
-
-		if (!find) {
-			LOG.error("Error: AttributeStatement it's not present.");
-			throw new STORKSAMLEngineException(
-			"AttributeStatement it's not present.");
-		}
-
-		final List<Attribute> reqAttrs = requestedAttr.getAttributes();
-
-		final IPersonalAttributeList personalAttrList = new PersonalAttributeList();
-		String attributeName;
-
-		// Process the attributes.
-		for (int nextAttribute = 0; nextAttribute < reqAttrs.size(); nextAttribute++) {
-			final Attribute attribute = reqAttrs.get(nextAttribute);
-
-			final PersonalAttribute personalAttribute = new PersonalAttribute();
-
-			attributeName = attribute.getName();
-			personalAttribute.setName(attributeName.substring(attributeName
-					.lastIndexOf('/') + 1));
-
-			personalAttribute.setStatus(attribute.getUnknownAttributes().get(
-					new QName(SAMLCore.STORK10_NS.getValue(),
-							"AttributeStatus", SAMLCore.STORK10_PREFIX
-							.getValue())));
-
-			final ArrayList<String> simpleValues = new ArrayList<String>();
-			final HashMap<String, String> multiValues = new HashMap<String, String>();
-
-			final List<XMLObject> values = attribute.getOrderedChildren();
-			
-						
-			// Process the values.
-			for (int nextValue = 0; nextValue < values.size(); nextValue++) {
-
-				final XMLObject xmlObject = values.get(nextValue);
-
-				if (xmlObject instanceof XSStringImpl) {
-					
-					simpleValues.add(((XSStringImpl) xmlObject).getValue());
-
-				} else if (xmlObject instanceof XSAnyImpl) {
-
-					if (attributeName.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
-
-						final XSAnyImpl xmlString = (XSAnyImpl) values
-								.get(nextValue);
-
-						TransformerFactory transFactory = TransformerFactory
-								.newInstance();
-						Transformer transformer = null;
-						try {
-							transformer = transFactory.newTransformer();
-							transformer.setOutputProperty(
-									OutputKeys.OMIT_XML_DECLARATION, "yes");
-						} catch (TransformerConfigurationException e) {
-                            LOG.error("Error transformer configuration exception", e);
-						}
-						StringWriter buffer = new StringWriter();
-						try {
-                            if (xmlString != null && xmlString.getUnknownXMLObjects() != null && xmlString.getUnknownXMLObjects().size() > 0 ){
-                                transformer.transform(new DOMSource(xmlString
-                                        .getUnknownXMLObjects().get(0).getDOM()),
-                                        new StreamResult(buffer));
-                            }
-						} catch (TransformerException e) {
-                            LOG.error("Error transformer exception", e);
-						}
-						String str = buffer.toString();
-
-						simpleValues.add(str);
-
-					} else if (isComplex(xmlObject))
-					{
-						LOG.info(attributeName + " found");
-						// Process complex value.
-						final XSAnyImpl complexValue = (XSAnyImpl) xmlObject;
-
-						for (int nextComplexValue = 0; nextComplexValue < complexValue
-								.getUnknownXMLObjects().size(); nextComplexValue++) {
-
-							final XSAnyImpl simple = (XSAnyImpl) complexValue
-									.getUnknownXMLObjects().get(
-											nextComplexValue);
-
-							multiValues.put(simple.getElementQName()
-									.getLocalPart(), simple.getTextContent());
-						}
-
-					} 					
-					else {
-						// Process simple value.
-						simpleValues.add(((XSAnyImpl) xmlObject)
-								.getTextContent());
-					}
-
-				} else {
-					LOG.error("Error: attribute value it's unknown.");
-					throw new STORKSAMLEngineException(
-							"Attribute value it's unknown.");
-				}
-			}
-
-			personalAttribute.setValue(simpleValues);
-			personalAttribute.setComplexValue(multiValues);
-			personalAttrList.add(personalAttribute);
-		}
-
-		return personalAttrList;
-	}
-
-	/**
-	 * Generate stork authentication request.
-	 * 
-	 * @param request the request that contain all parameters for generate an
-	 *            authentication request.
-	 * 
-	 * @return the STORK authentication request that has been processed.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAuthnRequest generateSTORKAuthnRequest(
-			final STORKAuthnRequest request) throws STORKSAMLEngineException {
-		LOG.info("Generate SAMLAuthnRequest.");
-
-		// Validate Parameters mandatories
-		validateParamAuthnReq(request);
-
-		final AuthnRequest authnRequestAux = SAMLEngineUtils
-		.generateSAMLAuthnRequest(SAMLEngineUtils.generateNCName(),
-				SAMLVersion.VERSION_20, SAMLEngineUtils
-				.getCurrentTime());
-
-		// Set name spaces.
-		setNameSpaces(authnRequestAux);
-
-		// Add parameter Mandatory STORK
-		authnRequestAux.setForceAuthn(Boolean.TRUE);
-
-		// Add parameter Mandatory STORK
-		authnRequestAux.setIsPassive(Boolean.FALSE);
-
-		authnRequestAux.setAssertionConsumerServiceURL(request
-				.getAssertionConsumerServiceURL());
-
-		authnRequestAux.setProviderName(request.getProviderName());
-
-		// Add protocol binding
-		authnRequestAux.setProtocolBinding(super.getSamlCoreProperties()
-				.getProtocolBinding());
-
-		// Add parameter optional STORK
-		// Destination is mandatory if the destination is a C-PEPS
-		// The application must to know if the destination is a C-PEPS.
-		if (StringUtils.isNotBlank(request.getDestination())) {
-			authnRequestAux.setDestination(request.getDestination());
-		}
-
-		// Consent is optional. Set from SAMLEngine.xml - consent.
-		authnRequestAux.setConsent(super.getSamlCoreProperties()
-				.getConsentAuthnRequest());
-
-		final Issuer issuer = SAMLEngineUtils.generateIssuer();
-		
-		if(request.getIssuer()!=null){
-			issuer.setValue(request.getIssuer());
-        } else {
-			issuer.setValue(super.getSamlCoreProperties().getRequester());
-        }
-
-		// Optional STORK
-		final String formatEntity = super.getSamlCoreProperties()
-		.getFormatEntity();
-		if (StringUtils.isNotBlank(formatEntity)) {
-			issuer.setFormat(formatEntity);
-		}
-
-		authnRequestAux.setIssuer(issuer);
-		
-		// Generate stork extensions.
-		final Extensions storkExtensions = this
-		.generateSTORKExtensions(request);
-		// add the extensions to the SAMLAuthnRequest
-		authnRequestAux.setExtensions(storkExtensions);
-
-		// the result contains an authentication request token (byte[]),
-		// identifier of the token, and all parameters from the request.
-		final STORKAuthnRequest authRequest = processExtensions(authnRequestAux
-				.getExtensions());
-
-		try {
-			authRequest.setTokenSaml(super.signAndMarshall(authnRequestAux));
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		authRequest.setSamlId(authnRequestAux.getID());
-		authRequest.setDestination(authnRequestAux.getDestination());
-		authRequest.setAssertionConsumerServiceURL(authnRequestAux
-				.getAssertionConsumerServiceURL());
-
-		authRequest.setProviderName(authnRequestAux.getProviderName());
-		authRequest.setIssuer(authnRequestAux.getIssuer().getValue());
-
-		return authRequest;
-	}
-
-	/**
-	 * Generate stork authentication response.
-	 * 
-	 * @param request the request
-	 * @param responseAuthReq the response authentication request
-	 * @param ipAddress the IP address
-	 * @param isHashing the is hashing
-	 * 
-	 * @return the sTORK authentication response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAuthnResponse generateSTORKAuthnResponse(
-			final STORKAuthnRequest request,
-			final STORKAuthnResponse responseAuthReq, final String ipAddress,
-			final boolean isHashing) throws STORKSAMLEngineException {
-		LOG.info("generateSTORKAuthnResponse");
-
-		// Validate parameters
-		validateParamResponse(request, responseAuthReq);
-
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode");
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(StatusCode.SUCCESS_URI);
-
-		LOG.debug("Generate Status");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		LOG.debug("Generate StatusMessage");
-		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-		.generateStatusMessage(StatusCode.SUCCESS_URI);
-
-		status.setStatusMessage(statusMessage);
-
-		LOG.debug("Generate Response");
-
-		// RESPONSE
-		final Response response = genAuthnRespBase(status, request
-				.getAssertionConsumerServiceURL(), request.getSamlId());
-
-		DateTime notOnOrAfter = new DateTime();
-
-		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
-				.getTimeNotOnOrAfter());
-
-		final Assertion assertion = this.generateAssertion(ipAddress, request
-				.getAssertionConsumerServiceURL(), request.getSamlId(), request
-				.getIssuer(), notOnOrAfter);
-
-		final AttributeStatement attrStatement = this
-		.generateAttributeStatement(responseAuthReq
-				.getPersonalAttributeList(), isHashing);
-
-		assertion.getAttributeStatements().add(attrStatement);
-
-		// Add assertions
-		response.getAssertions().add(assertion);
-
-		final STORKAuthnResponse authresponse = new STORKAuthnResponse();
-
-		try {
-			authresponse.setTokenSaml(super.signAndMarshall(response));
-			authresponse.setSamlId(response.getID());
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-		return authresponse;
-	}
-	
-	/**
-	 * Generate stork authentication response.
-	 * 
-	 * @param request the request
-	 * @param responseAuthReq the response authentication request
-	 * @param ipAddress the IP address
-	 * @param isHashing the is hashing
-	 * 
-	 * @return the sTORK authentication response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAuthnResponse generateSTORKAuthnResponseAfterQuery(
-			final STORKAuthnRequest request,
-			final STORKAuthnResponse responseAuthReq, final String ipAddress,
-			final boolean isHashing, List<STORKAttrQueryResponse> res) throws STORKSAMLEngineException {
-		LOG.info("generateSTORKAuthnResponse");
-
-		// Validate parameters
-		validateParamResponse(request, responseAuthReq);
-
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode");
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(StatusCode.SUCCESS_URI);
-
-		LOG.debug("Generate Status");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		LOG.debug("Generate StatusMessage");
-		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-		.generateStatusMessage(StatusCode.SUCCESS_URI);
-
-		status.setStatusMessage(statusMessage);
-
-		LOG.debug("Generate Response");
-
-		// RESPONSE
-		final Response response = genAuthnRespBase(status, request
-				.getAssertionConsumerServiceURL(), request.getSamlId());
-
-		DateTime notOnOrAfter = new DateTime();
-
-		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
-				.getTimeNotOnOrAfter());
-
-		final Assertion assertion = this.generateAssertion(ipAddress, request
-				.getAssertionConsumerServiceURL(), request.getSamlId(), request
-				.getIssuer(), notOnOrAfter);
-
-		final AttributeStatement attrStatement = this
-		.generateAttributeStatement(responseAuthReq
-				.getPersonalAttributeList(), isHashing);
-
-		assertion.getAttributeStatements().add(attrStatement);
-
-		// Add assertions
-		response.getAssertions().add(assertion);
-		// Check for response queries
-		if (res != null && res.size() > 0)
-		{
-			//Iterate through them
-			for (int i = 0; i < res.size(); i++)
-			{
-				//If response contains multiple assertions iterate through them as well
-				if (res.get(i).getAssertions().size() > 1)
-				{
-					for (int j = 0; j < res.get(i).getAssertions().size(); j++)
-					{
-						Assertion tempAssertion = res.get(i).getAssertions().get(j);
-						tempAssertion.setParent(response);
-						response.getAssertions().add(tempAssertion);
-					}
-				} else {
-					Assertion tempAssertion = res.get(i).getAssertion();
-					tempAssertion.setParent(response);
-					response.getAssertions().add(tempAssertion);
-				}
-			}
-		}
-
-		final STORKAuthnResponse authresponse = new STORKAuthnResponse();
-
-		try {
-			authresponse.setTokenSaml(super.signAndMarshall(response));
-			authresponse.setSamlId(response.getID());
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-		return authresponse;
-	}
-
-	/**
-	 * Generate stork authentication response fail.
-	 * 
-	 * @param request the request
-	 * @param response the response
-	 * @param ipAddress the IP address
-	 * @param isHashing the is hashing
-	 * 
-	 * @return the sTORK authentication response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAuthnResponse generateSTORKAuthnResponseFail(
-			final STORKAuthnRequest request, final STORKAuthnResponse response,
-			final String ipAddress, final boolean isHashing)
-	throws STORKSAMLEngineException {
-		LOG.info("generateSTORKAuthnResponseFail");
-
-		validateParamResponseFail(request, response);
-
-		// Mandatory
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(response.getStatusCode());
-
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode.");
-		// Subordinate code it's optional in case not covered into next codes:
-		// - urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
-		// - urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue
-		// - urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy
-		// - urn:oasis:names:tc:SAML:2.0:status:RequestDenied
-		// - http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported
-
-		if (StringUtils.isNotBlank(response.getSubStatusCode())) {
-			final StatusCode newStatusCode = SAMLEngineUtils
-			.generateStatusCode(response.getSubStatusCode());
-			statusCode.setStatusCode(newStatusCode);
-		}
-
-		LOG.debug("Generate Status.");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		if (StringUtils.isNotBlank(response.getMessage())) {
-			final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-			.generateStatusMessage(response.getMessage());
-
-			status.setStatusMessage(statusMessage);
-		}
-
-		LOG.debug("Generate Response.");
-		// RESPONSE
-		final Response responseFail = genAuthnRespBase(status, request
-				.getAssertionConsumerServiceURL(), request.getSamlId());
-
-		DateTime notOnOrAfter = new DateTime();
-
-		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
-				.getTimeNotOnOrAfter());
-
-		final Assertion assertion = this.generateAssertion(ipAddress, request
-				.getAssertionConsumerServiceURL(), request.getSamlId(), request
-				.getIssuer(), notOnOrAfter);
-
-		responseFail.getAssertions().add(assertion);
-
-		LOG.debug("Sign and Marshall ResponseFail.");
-
-		final STORKAuthnResponse storkResponse = new STORKAuthnResponse();
-
-		try {
-			storkResponse.setTokenSaml(super.signAndMarshall(responseFail));
-			storkResponse.setSamlId(responseFail.getID());
-		} catch (SAMLEngineException e) {
-			LOG.error("SAMLEngineException.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-		return storkResponse;
-	}
-	
-	/**
-	 * Generate stork attribute query request.
-	 * 
-	 * @param request the request that contain all parameters for generate an
-	 *            attribute query request.
-	 * 
-	 * @return the STORK attribute query request that has been processed.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAttrQueryRequest generateSTORKAttrQueryRequest(
-			final STORKAttrQueryRequest request) throws STORKSAMLEngineException {
-		LOG.info("Generate STORKAttrQueryRequest.");
-
-		// Validate Parameters mandatories
-		validateParamAttrQueryReq(request);
-
-		//final AttributeQuery attrQueryRequestAux = SAMLEngineUtils
-		final CustomAttributeQuery attrQueryRequestAux = SAMLEngineUtils
-		.generateSAMLAttrQueryRequest(SAMLEngineUtils.generateNCName(),
-				SAMLVersion.VERSION_20, SAMLEngineUtils
-				.getCurrentTime());
-
-		// Set name spaces.
-		setNameSpaces(attrQueryRequestAux);
-
-		
-		// Add parameter optional STORK
-		// Destination is mandatory if the destination is a C-PEPS
-		// The application must to know if the destination is a C-PEPS.
-		if (StringUtils.isNotBlank(request.getDestination())) {
-			attrQueryRequestAux.setDestination(request.getDestination());
-		}
-		
-		// Add parameter optional STORK
-		// Consumer URL is needed if using HTTP-Post
-		if (StringUtils.isNotBlank(request.getAssertionConsumerServiceURL())) {
-			attrQueryRequestAux.setAssertionConsumerServiceURL(request.getAssertionConsumerServiceURL());
-		}
-
-		// Consent is optional. Set from SAMLEngine.xml - consent.
-		attrQueryRequestAux.setConsent(super.getSamlCoreProperties()
-				.getConsentAuthnRequest());
-
-		final Issuer issuer = SAMLEngineUtils.generateIssuer();
-		
-		//Set the subject - needed for attribute query validation
-		Subject subject = SAMLEngineUtils.generateSubject();
-		SubjectConfirmationBuilder builder = new SubjectConfirmationBuilder();
-		SubjectConfirmation subjectConfirmation = builder.buildObject();		
-		subjectConfirmation.setMethod("urn:oasis:names:tc:SAML:2.0:cm:bearer");
-		subject.getSubjectConfirmations().add(subjectConfirmation);
-		attrQueryRequestAux.setSubject(subject);
-		
-		if(request.getIssuer()!=null){
-			issuer.setValue(request.getIssuer());
-        } else {
-			issuer.setValue(super.getSamlCoreProperties().getRequester());
-        }
-
-		// Optional STORK
-		final String formatEntity = super.getSamlCoreProperties()
-		.getFormatEntity();
-		if (StringUtils.isNotBlank(formatEntity)) {
-			issuer.setFormat(formatEntity);
-		}
-
-		attrQueryRequestAux.setIssuer(issuer);
-		
-		// Generate stork extensions.
-		final Extensions storkExtensions = this
-		.generateSTORKAttrExtensions(request);
-		// add the extensions to the SAMLAuthnRequest
-		attrQueryRequestAux.setExtensions(storkExtensions);
-
-		// the result contains an authentication request token (byte[]),
-		// identifier of the token, and all parameters from the request.
-		final STORKAttrQueryRequest attrQueryRequest = processAttrExtensions(attrQueryRequestAux
-				.getExtensions());
-
-		try {
-			attrQueryRequest.setTokenSaml(super.signAndMarshall(attrQueryRequestAux));
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		attrQueryRequest.setSamlId(attrQueryRequestAux.getID());
-		attrQueryRequest.setDestination(attrQueryRequestAux.getDestination());
-		attrQueryRequest.setAssertionConsumerServiceURL(attrQueryRequestAux.getAssertionConsumerServiceURL());
-		attrQueryRequest.setIssuer(attrQueryRequestAux.getIssuer().getValue());
-
-		return attrQueryRequest;
-	}
-	
-	/**
-	 * Generate stork attribute query response.
-	 * 
-	 * @param request the request
-	 * @param responseAttrQueryRes the response authentication request
-	 * @param ipAddress the IP address
-	 * @param isHashing the hashing of values
-	 * 
-	 * @return the sTORK authentication response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAttrQueryResponse generateSTORKAttrQueryResponse(
-			final STORKAttrQueryRequest request, 
-			final STORKAttrQueryResponse responseAttrQueryRes, final String ipAddress,
-			final String destinationUrl, final boolean isHashing) throws STORKSAMLEngineException {
-		LOG.info("generateSTORKAttrQueryResponse");
-
-		// Validate parameters
-		validateParamAttrQueryResponse(request, responseAttrQueryRes);
-
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode");
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(StatusCode.SUCCESS_URI);
-
-		LOG.debug("Generate Status");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		LOG.debug("Generate StatusMessage");
-		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-		.generateStatusMessage(StatusCode.SUCCESS_URI);
-
-		status.setStatusMessage(statusMessage);
-
-		LOG.debug("Generate Response");
-
-		// RESPONSE
-		final Response response = genAuthnRespBase(status, destinationUrl,
-				request.getSamlId());
-
-		DateTime notOnOrAfter = new DateTime();
-
-		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
-				.getTimeNotOnOrAfter());
-
-		final Assertion assertion = this.generateAssertion(ipAddress, ""
-				,request.getSamlId(), request.getIssuer(), notOnOrAfter);
-
-		final AttributeStatement attrStatement = this
-		.generateAttributeStatement(responseAttrQueryRes
-				.getPersonalAttributeList(), isHashing);
-
-		assertion.getAttributeStatements().add(attrStatement);
-
-		// Add assertions
-		response.getAssertions().add(assertion);
-
-		final STORKAttrQueryResponse attrQueryResponse = new STORKAttrQueryResponse();
-
-		try {
-			attrQueryResponse.setTokenSaml(super.signAndMarshall(response));
-			attrQueryResponse.setSamlId(response.getID());
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-		return attrQueryResponse;
-	}
-	
-	/**
-	 * Generate stork attribute query response from multiple assertions 
-	 * 
-	 * @param request the request
-	 * @param responseAttrQueryRes the response to the query request
-	 * @param responses the responses to include in the response (aggregation)
-	 * @param ipAddress the IP address
-	 * @param isHashing the hashing of values
-	 * 
-	 * @return the sTORK attribute query response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAttrQueryResponse generateSTORKAttrQueryResponseWithAssertions(
-			final STORKAttrQueryRequest request, final STORKAttrQueryResponse responseAttrQueryRes,
-			final List<STORKAttrQueryResponse> responses, final String ipAddress,
-			final String destinationUrl, final boolean isHashing) throws STORKSAMLEngineException {
-		LOG.info("generateSTORKAttrQueryResponse");
-
-		// Validate parameters
-		validateParamAttrQueryResponseFromAssertions(request, responseAttrQueryRes);
-
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode");
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(StatusCode.SUCCESS_URI);
-
-		LOG.debug("Generate Status");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		LOG.debug("Generate StatusMessage");
-		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-		.generateStatusMessage(StatusCode.SUCCESS_URI);
-
-		status.setStatusMessage(statusMessage);
-
-		LOG.debug("Generate Response");
-
-		// RESPONSE
-		final Response response = genAuthnRespBase(status, destinationUrl,
-				request.getSamlId());
-
-		DateTime notOnOrAfter = new DateTime();
-
-		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
-				.getTimeNotOnOrAfter());
-
-		final Assertion assertion = this.generateAssertion(ipAddress, ""
-				,request.getSamlId(), request.getIssuer(), notOnOrAfter);
-
-		final AttributeStatement attrStatement = this
-		.generateAttributeStatement(responseAttrQueryRes
-				.getPersonalAttributeList(), isHashing);
-
-		assertion.getAttributeStatements().add(attrStatement);
-
-		// Add the assertions from the former Query responses
-		response.getAssertions().add(assertion);
-		if (responses != null && responses.size() > 0)
-		{
-			for (int i = 0; i < responses.size(); i++)
-			{
-				Assertion tempAssertion = responses.get(i).getAssertion();
-				tempAssertion.setParent(response);
-				response.getAssertions().add(tempAssertion);
-			}
-		}
-
-		final STORKAttrQueryResponse attrQueryResponse = new STORKAttrQueryResponse();
-
-		try {
-			attrQueryResponse.setTokenSaml(super.signAndMarshall(response));
-			attrQueryResponse.setSamlId(response.getID());
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-		return attrQueryResponse;
-	}
-	
-	/**
-	 * Generate stork attribute query response fail.
-	 * 
-	 * @param request the request
-	 * @param response the response
-	 * @param ipAddress the IP address
-	 * @param isHashing the is hashing
-	 * 
-	 * @return the STORK attribute query response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAttrQueryResponse generateSTORKAttrQueryResponseFail(
-			final STORKAttrQueryRequest request, final STORKAttrQueryResponse response,
-			final String ipAddress, final String destinationUrl, final boolean isHashing)
-	throws STORKSAMLEngineException {
-		LOG.info("generateSTORKAttrQueryResponseFail");
-
-		validateParamAttrQueryResponseFail(request, response);
-
-		// Mandatory
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(response.getStatusCode());
-
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode.");
-		// Subordinate code it's optional in case not covered into next codes:
-		// - urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
-		// - urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue
-		// - urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy
-		// - urn:oasis:names:tc:SAML:2.0:status:RequestDenied
-		// - http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported
-
-		if (StringUtils.isNotBlank(response.getSubStatusCode())) {
-			final StatusCode newStatusCode = SAMLEngineUtils
-			.generateStatusCode(response.getSubStatusCode());
-			statusCode.setStatusCode(newStatusCode);
-		}
-
-		LOG.debug("Generate Status.");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		if (StringUtils.isNotBlank(response.getMessage())) {
-			final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-			.generateStatusMessage(response.getMessage());
-
-			status.setStatusMessage(statusMessage);
-		}
-
-		LOG.debug("Generate Response.");
-		// RESPONSE
-		final Response responseFail = genAuthnRespBase(status, destinationUrl,
-				request.getSamlId());
-
-		DateTime notOnOrAfter = new DateTime();
-
-		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
-				.getTimeNotOnOrAfter());
-
-		final Assertion assertion = this.generateAssertion(ipAddress, "", 
-				request.getSamlId(), request
-				.getIssuer(), notOnOrAfter);
-
-		responseFail.getAssertions().add(assertion);
-
-		LOG.debug("Sign and Marshall ResponseFail.");
-
-		final STORKAttrQueryResponse storkResponse = new STORKAttrQueryResponse();
-
-		try {
-			storkResponse.setTokenSaml(super.signAndMarshall(responseFail));
-			storkResponse.setSamlId(responseFail.getID());
-		} catch (SAMLEngineException e) {
-			LOG.error("SAMLEngineException.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-		return storkResponse;
-	}
-	
-	/**
-	 * Generate stork logout request.
-	 * 
-	 * @param request the request that contain all parameters for generate an
-	 *            logout request.
-	 * 
-	 * @return the STORK logout request that has been processed.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKLogoutRequest generateSTORKLogoutRequest(
-			final STORKLogoutRequest request) throws STORKSAMLEngineException {
-		LOG.info("Generate STORKLogoutRequest.");
-
-		// Validate Parameters mandatories
-		validateParamLogoutReq(request);
-
-		final LogoutRequest logoutRequestAux = SAMLEngineUtils
-			.generateSAMLLogoutRequest(SAMLEngineUtils.generateNCName(),
-					SAMLVersion.VERSION_20, SAMLEngineUtils
-					.getCurrentTime());
-
-		// Set name spaces.
-		setNameSpaces(logoutRequestAux);
-
-		
-		// Add parameter optional STORK
-		// Destination is mandatory if the destination is a C-PEPS
-		// The application must to know if the destination is a C-PEPS.
-		if (StringUtils.isNotBlank(request.getDestination())) {
-			logoutRequestAux.setDestination(request.getDestination());
-		}
-				
-		// Consent is optional. Set from SAMLEngine.xml - consent.
-		logoutRequestAux.setConsent(super.getSamlCoreProperties()
-				.getConsentAuthnRequest());
-
-		final Issuer issuer = SAMLEngineUtils.generateIssuer();
-		
-		
-		if(request.getIssuer()!=null){
-			issuer.setValue(request.getIssuer());
-        } else {
-			issuer.setValue(super.getSamlCoreProperties().getRequester());
-        }
-
-		// Optional STORK
-		final String formatEntity = super.getSamlCoreProperties()
-		.getFormatEntity();
-		if (StringUtils.isNotBlank(formatEntity)) {
-			issuer.setFormat(formatEntity);
-		}
-
-		logoutRequestAux.setIssuer(issuer);
-		
-		// Set the name ID
-		final NameID newNameID = SAMLEngineUtils.generateNameID();
-		newNameID.setValue(request.getSpProvidedId());		
-		logoutRequestAux.setNameID(newNameID);
-		
-
-		// the result contains an authentication request token (byte[]),
-		// identifier of the token, and all parameters from the request.
-		final STORKLogoutRequest logoutRequest = new STORKLogoutRequest();
-
-		try {
-			logoutRequest.setTokenSaml(super.signAndMarshall(logoutRequestAux));
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		logoutRequest.setSamlId(logoutRequestAux.getID());
-		logoutRequest.setDestination(logoutRequestAux.getDestination());
-		logoutRequest.setIssuer(logoutRequestAux.getIssuer().getValue());
-		logoutRequest.setSpProvidedId(logoutRequestAux.getNameID().getValue());
-
-		return logoutRequest;
-	}
-	
-
-	/**
-	 * Generate stork logout response.
-	 * @param request the request thats being responded to
-	 * @param response the tesponse that contain all parameters for generate an
-	 *            logout request.
-	 * 
-	 * @return the STORK logout response that has been processed.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKLogoutResponse generateSTORKLogoutResponse(
-			final STORKLogoutRequest request, 
-			final STORKLogoutResponse response) throws STORKSAMLEngineException {
-		LOG.info("Generate STORKLogoutResponse.");
-
-		// Validate Parameters mandatories
-		validateParamLogoutRes(request, response);
-		
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode");
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(StatusCode.SUCCESS_URI);
-
-		LOG.debug("Generate Status");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		LOG.debug("Generate StatusMessage");
-		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-		.generateStatusMessage(StatusCode.SUCCESS_URI);
-
-		status.setStatusMessage(statusMessage);
-
-		final LogoutResponse logoutResponseAux= SAMLEngineUtils
-			.generateSAMLLogoutResponse(SAMLEngineUtils.generateNCName(),
-					SAMLVersion.VERSION_20, SAMLEngineUtils
-					.getCurrentTime(), status, request.getSamlId());
-
-		// Set name spaces.
-		setNameSpaces(logoutResponseAux);
-
-		
-		// Add parameter optional STORK
-		// Destination is mandatory if the destination is a C-PEPS
-		// The application must to know if the destination is a C-PEPS.
-		if (StringUtils.isNotBlank(response.getDestination())) {
-			logoutResponseAux.setDestination(response.getDestination());
-		}
-				
-		// Consent is optional. Set from SAMLEngine.xml - consent.
-		logoutResponseAux.setConsent(super.getSamlCoreProperties()
-				.getConsentAuthnRequest());
-
-		final Issuer issuer = SAMLEngineUtils.generateIssuer();
-		
-		
-		if(response.getIssuer()!=null){
-			issuer.setValue(response.getIssuer());
-        } else {
-			issuer.setValue(super.getSamlCoreProperties().getRequester());
-        }
-
-		// Optional STORK
-		final String formatEntity = super.getSamlCoreProperties()
-		.getFormatEntity();
-		if (StringUtils.isNotBlank(formatEntity)) {
-			issuer.setFormat(formatEntity);
-		}
-
-		logoutResponseAux.setIssuer(issuer);
-		
-		
-		// the result contains an authentication request token (byte[]),
-		// identifier of the token, and all parameters from the request.
-		final STORKLogoutResponse logoutResponse = new STORKLogoutResponse();
-
-		try {
-			logoutResponse.setTokenSaml(super.signAndMarshall(logoutResponseAux));
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		logoutResponse.setSamlId(logoutResponseAux.getID());
-		logoutResponse.setDestination(logoutResponseAux.getDestination());
-		logoutResponse.setIssuer(logoutResponseAux.getIssuer().getValue());
-		logoutResponse.setStatusCode(logoutResponseAux.getStatus().getStatusCode().toString());
-		logoutResponse.setStatusMessage(logoutResponseAux.getStatus().getStatusMessage().toString());
-
-		return logoutResponse;
-	}
-	
-	/**
-	 * Generate failed stork logout response.
-	 * 
-	 * @param response the response that contain all parameters for generate an
-	 *            logout request.
-	 * 
-	 * @return the STORK logout response that has been processed.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKLogoutResponse generateSTORKLogoutResponseFail(
-			final STORKLogoutRequest request, 
-			final STORKLogoutResponse response ) throws STORKSAMLEngineException {
-		LOG.info("Generate STORKLogoutResponse.");
-
-		// Validate Parameters mandatories
-		validateParamLogoutResFail(request, response);
-		
-		// Mandatory
-		final StatusCode statusCode = SAMLEngineUtils
-		.generateStatusCode(response.getStatusCode());
-
-		// Mandatory SAML
-		LOG.debug("Generate StatusCode.");
-		// Subordinate code it's optional in case not covered into next codes:
-		// - urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
-		// - urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue
-		// - urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy
-		// - urn:oasis:names:tc:SAML:2.0:status:RequestDenied
-		// - http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported
-
-		if (StringUtils.isNotBlank(response.getSubStatusCode())) {
-			final StatusCode newStatusCode = SAMLEngineUtils
-			.generateStatusCode(response.getSubStatusCode());
-			statusCode.setStatusCode(newStatusCode);
-		}
-
-		LOG.debug("Generate Status.");
-		final Status status = SAMLEngineUtils.generateStatus(statusCode);
-
-		if (StringUtils.isNotBlank(response.getStatusMessage())) {
-			final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
-			.generateStatusMessage(response.getStatusMessage());
-
-			status.setStatusMessage(statusMessage);
-		}
-
-		final LogoutResponse logoutResponseAux= SAMLEngineUtils
-			.generateSAMLLogoutResponse(SAMLEngineUtils.generateNCName(),
-					SAMLVersion.VERSION_20, SAMLEngineUtils
-					.getCurrentTime(), status, request.getSamlId());
-
-		// Set name spaces.
-		setNameSpaces(logoutResponseAux);
-
-		
-		// Add parameter optional STORK
-		// Destination is mandatory if the destination is a C-PEPS
-		// The application must to know if the destination is a C-PEPS.
-		if (StringUtils.isNotBlank(response.getDestination())) {
-			logoutResponseAux.setDestination(response.getDestination());
-		}
-				
-		// Consent is optional. Set from SAMLEngine.xml - consent.
-		logoutResponseAux.setConsent(super.getSamlCoreProperties()
-				.getConsentAuthnRequest());
-
-		final Issuer issuer = SAMLEngineUtils.generateIssuer();
-		
-		
-		if(response.getIssuer()!=null){
-			issuer.setValue(response.getIssuer());
-        } else {
-			issuer.setValue(super.getSamlCoreProperties().getRequester());
-        }
-
-		// Optional STORK
-		final String formatEntity = super.getSamlCoreProperties()
-		.getFormatEntity();
-		if (StringUtils.isNotBlank(formatEntity)) {
-			issuer.setFormat(formatEntity);
-		}
-
-		logoutResponseAux.setIssuer(issuer);
-		
-		
-		// the result contains an authentication request token (byte[]),
-		// identifier of the token, and all parameters from the request.
-		final STORKLogoutResponse logoutResponse = new STORKLogoutResponse();
-
-		try {
-			logoutResponse.setTokenSaml(super.signAndMarshall(logoutResponseAux));
-		} catch (SAMLEngineException e) {
-			LOG.error("Sign and Marshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		logoutResponse.setSamlId(logoutResponseAux.getID());
-		logoutResponse.setDestination(logoutResponseAux.getDestination());
-		logoutResponse.setIssuer(logoutResponseAux.getIssuer().getValue());
-		logoutResponse.setStatusCode(logoutResponseAux.getStatus().getStatusCode().toString());
-		logoutResponse.setStatusMessage(logoutResponseAux.getStatus().getStatusMessage().toString());
-
-		return logoutResponse;
-	}
-
-	/**
-	 * Generate stork authentication statement for the authentication statement.
-	 * 
-	 * @param ipAddress the IP address
-	 * 
-	 * @return the authentication statement
-	 */
-	private AuthnStatement generateStorkAuthStatement(final String ipAddress) {
-		LOG.debug("Generate stork authenticate statement.");
-		final SubjectLocality subjectLocality = SAMLEngineUtils
-		.generateSubjectLocality(ipAddress);
-
-		final AuthnContext authnContext = (AuthnContext) SAMLEngineUtils
-		.createSamlObject(AuthnContext.DEFAULT_ELEMENT_NAME);
-
-		final AuthnContextDecl authnContextDecl = (AuthnContextDecl) SAMLEngineUtils
-		.createSamlObject(AuthnContextDecl.DEFAULT_ELEMENT_NAME);
-
-		authnContext.setAuthnContextDecl(authnContextDecl);
-
-		final AuthnStatement authnStatement = SAMLEngineUtils
-		.generateAthnStatement(new DateTime(), authnContext);
-
-		// Optional STORK
-		authnStatement.setSessionIndex(null);
-		authnStatement.setSubjectLocality(subjectLocality);
-
-		return authnStatement;
-	}
-
-	/**
-	 * Generate stork extensions.
-	 * 
-	 * @param request the request
-	 * 
-	 * @return the extensions
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private Extensions generateSTORKExtensions(final STORKAuthnRequest request)
-	throws STORKSAMLEngineException {
-		LOG.debug("Generate STORKExtensions");
-
-		final Extensions extensions = SAMLEngineUtils.generateExtension();
-
-		LOG.debug("Generate QAAAttribute");
-		final QAAAttribute qaaAttribute = SAMLEngineUtils
-		.generateQAAAttribute(request.getQaa());
-		extensions.getUnknownXMLObjects().add(qaaAttribute);
-
-
-		if (StringUtils.isNotEmpty(request
-				.getSpSector())) {
-			// Add information about service provider.
-			LOG.debug("Generate SPSector");
-			final SPSector sector = SAMLEngineUtils.generateSPSector(request
-					.getSpSector());
-			extensions.getUnknownXMLObjects().add(sector);
-		}
-
-		//Delete from specification. Kept for compatibility with Provider Name value
-		LOG.debug("Generate SPInstitution");
-		final SPInstitution institution = SAMLEngineUtils
-		.generateSPInstitution(request.getProviderName());
-		extensions.getUnknownXMLObjects().add(institution);
-
-
-		if (StringUtils.isNotEmpty(request.getSpApplication())) {
-			LOG.debug("Generate SPApplication");
-			final SPApplication application = SAMLEngineUtils
-			.generateSPApplication(request.getSpApplication());
-			extensions.getUnknownXMLObjects().add(application);
-		}
-
-		if (StringUtils.isNotEmpty(request.getSpCountry())) {
-			LOG.debug("Generate SPCountry");
-			final SPCountry country = SAMLEngineUtils.generateSPCountry(request
-					.getSpCountry());
-			extensions.getUnknownXMLObjects().add(country);
-		}
-
-		//eIDSectorShare: optional; default value: false.
-		String valueSectorShare = super.getSamlCoreProperties()
-		.iseIDSectorShare();
-
-		if (StringUtils.isNotEmpty(valueSectorShare)) {
-			// Add information about the use of the SAML message.
-			LOG.debug("Generate EIDSectorShare");
-			final EIDSectorShare eIdSectorShare = (EIDSectorShare) SAMLEngineUtils
-			.createSamlObject(EIDSectorShare.DEF_ELEMENT_NAME);
-
-			eIdSectorShare.setEIDSectorShare(String.valueOf(Boolean.valueOf(valueSectorShare)));
-
-			extensions.getUnknownXMLObjects().add(eIdSectorShare);
-		} 
-
-		String valueCrossSectorShare = super.getSamlCoreProperties()
-		.iseIDCrossSectorShare();
-
-		if (StringUtils.isNotEmpty(valueCrossSectorShare)) {
-			LOG.debug("Generate EIDCrossSectorShare");
-			final EIDCrossSectorShare eIdCrossSecShare = (EIDCrossSectorShare) SAMLEngineUtils
-			.createSamlObject(EIDCrossSectorShare.DEF_ELEMENT_NAME);
-			eIdCrossSecShare.setEIDCrossSectorShare(String.valueOf(Boolean.valueOf(valueCrossSectorShare)));
-			extensions.getUnknownXMLObjects().add(eIdCrossSecShare);
-		}
-
-
-		String valueCrossBorderShare = super.getSamlCoreProperties()
-		.iseIDCrossBorderShare();
-
-		if (StringUtils.isNotEmpty(valueCrossBorderShare)) {
-			LOG.debug("Generate EIDCrossBorderShare");
-			final EIDCrossBorderShare eIdCrossBordShare = (EIDCrossBorderShare) SAMLEngineUtils
-			.createSamlObject(EIDCrossBorderShare.DEF_ELEMENT_NAME);
-			eIdCrossBordShare.setEIDCrossBorderShare(String.valueOf(Boolean.valueOf(valueCrossBorderShare)));
-			extensions.getUnknownXMLObjects().add(eIdCrossBordShare);
-		}
-
-
-		// Add information about requested attributes.
-		LOG.debug("Generate RequestedAttributes.");
-		final RequestedAttributes reqAttributes = (RequestedAttributes) SAMLEngineUtils
-		.createSamlObject(RequestedAttributes.DEF_ELEMENT_NAME);
-
-		LOG.debug("SAML Engine configuration properties load.");
-		final Iterator<PersonalAttribute> iterator = request
-		.getPersonalAttributeList().iterator();
-
-		while (iterator.hasNext()) {
-
-			final PersonalAttribute attribute = iterator.next();
-
-			if (attribute == null || StringUtils.isBlank(attribute.getName())) {
-				LOG.error(ATTRIBUTE_EMPTY_LITERAL);
-				throw new STORKSAMLEngineException(ATTRIBUTE_EMPTY_LITERAL);
-			}
-
-			// Verified if exits the attribute name.
-			final String attributeName = super.getSamlCoreProperties()
-			.getProperty(attribute.getName());
-
-			if (StringUtils.isBlank(attributeName)) {
-				LOG.debug("Attribute name: {} was not found.", attribute
-						.getName());
-				throw new STORKSAMLEngineException("Attribute name: "
-						+ attribute.getName() + " was not found.");
-			}
-
-			// Friendly name it's an optional attribute.
-			String friendlyName = null;
-
-			if (super.getSamlCoreProperties().isFriendlyName()) {
-				friendlyName = attribute.getName();
-			}
-
-
-			String isRequired = null;
-			if (super.getSamlCoreProperties().isRequired()) {
-				isRequired = String.valueOf(attribute.isRequired());
-			}
-
-
-			LOG.debug("Generate requested attribute: " + attributeName);
-			final RequestedAttribute requestedAttr = SAMLEngineUtils
-			.generateReqAuthnAttributeSimple(attributeName,
-					friendlyName, isRequired, attribute
-					.getValue());
-
-			// Add requested attribute.
-			reqAttributes.getAttributes().add(requestedAttr);
-		}
-
-		// Add requested attributes.
-		extensions.getUnknownXMLObjects().add(reqAttributes);
-
-		CitizenCountryCode citizenCountryCode = null;
-		if (request.getCitizenCountryCode() != null && StringUtils.isNotBlank(request.getCitizenCountryCode())){
-			LOG.debug("Generate CitizenCountryCode");
-			citizenCountryCode = (CitizenCountryCode) SAMLEngineUtils
-			.createSamlObject(CitizenCountryCode.DEF_ELEMENT_NAME);
-
-			citizenCountryCode.setCitizenCountryCode(request
-					.getCitizenCountryCode().toUpperCase());
-		}		
-
-		SPID spid = null;
-		if(request.getSPID()!=null && StringUtils.isNotBlank(request.getSPID())) {
-			LOG.debug("Generate SPID");
-			spid = (SPID) SAMLEngineUtils
-			.createSamlObject(SPID.DEF_ELEMENT_NAME);
-
-			spid.setSPID(request.getSPID().toUpperCase());
-		}	   
-
-		AuthenticationAttributes authenticationAttr = (AuthenticationAttributes) SAMLEngineUtils
-		.createSamlObject(AuthenticationAttributes.DEF_ELEMENT_NAME);
-
-		final VIDPAuthenticationAttributes vIDPauthenticationAttr = (VIDPAuthenticationAttributes) SAMLEngineUtils
-		.createSamlObject(VIDPAuthenticationAttributes.DEF_ELEMENT_NAME);
-
-		final SPInformation spInformation = (SPInformation) SAMLEngineUtils
-		.createSamlObject(SPInformation.DEF_ELEMENT_NAME);
-
-		if(citizenCountryCode!=null){
-			vIDPauthenticationAttr.setCitizenCountryCode(citizenCountryCode);
-		}
-
-		if(spid!=null){
-			spInformation.setSPID(spid);
-		}
-
-		vIDPauthenticationAttr.setSPInformation(spInformation);
-
-		authenticationAttr
-		.setVIDPAuthenticationAttributes(vIDPauthenticationAttr);
-		extensions.getUnknownXMLObjects().add(authenticationAttr);
-
-
-		return extensions;
-
-	}
-	
-	/**
-	 * Generate stork extensions.
-	 * 
-	 * @param request the attribute query request
-	 * 
-	 * @return the extensions
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private Extensions generateSTORKAttrExtensions(final STORKAttrQueryRequest request)
-	throws STORKSAMLEngineException {
-		LOG.debug("Generate STORKExtensions");
-
-		final Extensions extensions = SAMLEngineUtils.generateExtension();
-
-		LOG.debug("Generate QAAAttribute");
-		final QAAAttribute qaaAttribute = SAMLEngineUtils
-		.generateQAAAttribute(request.getQaa());
-		extensions.getUnknownXMLObjects().add(qaaAttribute);
-
-
-		if (StringUtils.isNotEmpty(request
-				.getSpSector())) {
-			// Add information about service provider.
-			LOG.debug("Generate SPSector");
-			final SPSector sector = SAMLEngineUtils.generateSPSector(request
-					.getSpSector());
-			extensions.getUnknownXMLObjects().add(sector);
-		}
-
-
-		if (StringUtils.isNotEmpty(request.getSpApplication())) {
-			LOG.debug("Generate SPApplication");
-			final SPApplication application = SAMLEngineUtils
-			.generateSPApplication(request.getSpApplication());
-			extensions.getUnknownXMLObjects().add(application);
-		}
-
-		if (StringUtils.isNotEmpty(request.getSpCountry())) {
-			LOG.debug("Generate SPCountry");
-			final SPCountry country = SAMLEngineUtils.generateSPCountry(request
-					.getSpCountry());
-			extensions.getUnknownXMLObjects().add(country);
-		}
-
-		final EIDSectorShare eIdSectorShare = (EIDSectorShare) SAMLEngineUtils
-		.createSamlObject(EIDSectorShare.DEF_ELEMENT_NAME);
-
-		eIdSectorShare.setEIDSectorShare(String.valueOf(request.isEIDSectorShare()));
-
-		extensions.getUnknownXMLObjects().add(eIdSectorShare);
-
-		final EIDCrossSectorShare eIdCrossSecShare = (EIDCrossSectorShare) SAMLEngineUtils
-		.createSamlObject(EIDCrossSectorShare.DEF_ELEMENT_NAME);
-		eIdCrossSecShare.setEIDCrossSectorShare(String.valueOf(request.isEIDCrossSectorShare()));
-		extensions.getUnknownXMLObjects().add(eIdCrossSecShare);
-
-		final EIDCrossBorderShare eIdCrossBordShare = (EIDCrossBorderShare) SAMLEngineUtils
-		.createSamlObject(EIDCrossBorderShare.DEF_ELEMENT_NAME);
-		eIdCrossBordShare.setEIDCrossBorderShare(String.valueOf(request.isEIDCrossBorderShare()));
-		extensions.getUnknownXMLObjects().add(eIdCrossBordShare);
-
-
-		// Add information about requested attributes.
-		LOG.debug("Generate RequestedAttributes.");
-		final RequestedAttributes reqAttributes = (RequestedAttributes) SAMLEngineUtils
-		.createSamlObject(RequestedAttributes.DEF_ELEMENT_NAME);
-
-		LOG.debug("SAML Engine configuration properties load.");
-		final Iterator<PersonalAttribute> iterator = request
-		.getPersonalAttributeList().iterator();
-
-		while (iterator.hasNext()) {
-
-			final PersonalAttribute attribute = iterator.next();
-
-			if (attribute == null || StringUtils.isBlank(attribute.getName())) {
-				LOG.error(ATTRIBUTE_EMPTY_LITERAL);
-				throw new STORKSAMLEngineException(ATTRIBUTE_EMPTY_LITERAL);
-			}
-
-			// Verified if exits the attribute name.
-			final String attributeName = super.getSamlCoreProperties()
-			.getProperty(attribute.getName());
-
-			if (StringUtils.isBlank(attributeName)) {
-				LOG.debug("Attribute name: {} was not found.", attribute
-						.getName());
-				throw new STORKSAMLEngineException("Attribute name: "
-						+ attribute.getName() + " was not found.");
-			}
-
-			// Friendly name it's an optional attribute.
-			String friendlyName = null;
-
-			if (super.getSamlCoreProperties().isFriendlyName()) {
-				friendlyName = attribute.getName();
-			}
-
-
-			String isRequired = null;
-			if (super.getSamlCoreProperties().isRequired()) {
-				isRequired = String.valueOf(attribute.isRequired());
-			}
-
-
-			LOG.debug("Generate requested attribute: " + attributeName);
-			final RequestedAttribute requestedAttr = SAMLEngineUtils
-			.generateReqAuthnAttributeSimple(attributeName,
-					friendlyName, isRequired, attribute
-					.getValue());
-
-			// Add requested attribute.
-			reqAttributes.getAttributes().add(requestedAttr);
-		}
-
-		// Add requested attributes.
-		extensions.getUnknownXMLObjects().add(reqAttributes);
-
-		CitizenCountryCode citizenCountryCode = null;
-		if (request.getCitizenCountryCode() != null && StringUtils.isNotBlank(request.getCitizenCountryCode())){
-			LOG.debug("Generate CitizenCountryCode");
-			citizenCountryCode = (CitizenCountryCode) SAMLEngineUtils
-			.createSamlObject(CitizenCountryCode.DEF_ELEMENT_NAME);
-
-			citizenCountryCode.setCitizenCountryCode(request
-					.getCitizenCountryCode().toUpperCase());
-		}		
-
-		SPID spid = null;
-		if(request.getSPID()!=null && StringUtils.isNotBlank(request.getSPID())) {
-			LOG.debug("Generate SPID");
-			spid = (SPID) SAMLEngineUtils
-			.createSamlObject(SPID.DEF_ELEMENT_NAME);
-
-			spid.setSPID(request.getSPID().toUpperCase());
-		}	   
-
-
-		return extensions;
-
-	}
-	
-	/**
-	 * Gets the alias from X.509 Certificate at keystore.
-	 * 
-	 * @param keyInfo the key info
-	 * @param storkOwnKeyStore 
-	 * @param storkOwnKeyStore 
-	 * 
-	 * @return the alias
-	 */
-    private String getAlias(final KeyInfo keyInfo, KeyStore storkOwnKeyStore) {
-
-        LOG.debug("Recover alias information");
-
-        String alias = null;
-        try {
-            final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
-                    .getX509Datas().get(0).getX509Certificates().get(0);
-
-            // Transform the KeyInfo to X509Certificate.
-            CertificateFactory certFact;
-            certFact = CertificateFactory.getInstance("X.509");
-
-            final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
-                    .decode(xmlCert.getValue()));
-
-            final X509Certificate cert = (X509Certificate) certFact
-                    .generateCertificate(bis);
-
-            final String tokenSerialNumber = cert.getSerialNumber().toString(16);
-            final X509Principal tokenIssuerDN = new X509Principal(cert.getIssuerDN().getName());
-
-
-            String aliasCert;
-            X509Certificate certificate;
-            boolean find = false;
-
-            for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
-                    .hasMoreElements()
-                    && !find; ) {
-                aliasCert = e.nextElement();
-                certificate = (X509Certificate) storkOwnKeyStore
-                        .getCertificate(aliasCert);                
-
-                final String serialNum = certificate.getSerialNumber()
-                        .toString(16);
-
-                X509Principal issuerDN = new X509Principal(certificate
-                        .getIssuerDN().getName());
-
-                if(serialNum.equalsIgnoreCase(tokenSerialNumber)
-                        && X509PrincipalUtil.equals2(issuerDN, tokenIssuerDN)){
-                    alias = aliasCert;
-                    find = true;
-                }
-
-            }
-
-        } catch (KeyStoreException e) {
-            LOG.error("Procces getAlias from certificate associated into the signing keystore..", e);
-        } catch (CertificateException e) {
-            LOG.error("Procces getAlias from certificate associated into the signing keystore..", e);
-        } catch (RuntimeException e) {
-            LOG.error("Procces getAlias from certificate associated into the signing keystore..", e);
-        }
-        return alias;
-    }
-
-	/**
-	 * Gets the country from X.509 Certificate.
-	 * 
-	 * @param keyInfo the key info
-	 * 
-	 * @return the country
-	 */
-	private String getCountry(final KeyInfo keyInfo) {
-		LOG.debug("Recover country information.");
-
-		String result = "";
-		try {
-			final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
-			.getX509Datas().get(0).getX509Certificates().get(0);
-
-			// Transform the KeyInfo to X509Certificate.
-			CertificateFactory certFact;
-			certFact = CertificateFactory.getInstance("X.509");
-
-			final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
-					.decode(xmlCert.getValue()));
-
-			final X509Certificate cert = (X509Certificate) certFact
-			.generateCertificate(bis);
-
-			String distName = cert.getSubjectDN().toString();
-
-			distName = StringUtils.deleteWhitespace(StringUtils
-					.upperCase(distName));
-
-			final String countryCode = "C=";
-			final int init = distName.indexOf(countryCode);
-
-			if (init > StringUtils.INDEX_NOT_FOUND) { // Exist country code.
-				int end = distName.indexOf(',', init);
-
-				if (end <= StringUtils.INDEX_NOT_FOUND) {
-					end = distName.length();
-				}
-
-				if (init < end && end > StringUtils.INDEX_NOT_FOUND) {
-					result = distName.substring(init + countryCode.length(),
-							end);
-					//It must be a two characters value
-					if(result.length()>2){
-						result = result.substring(0, 2);
-                    }
-				}
-			}
-
-		} catch (CertificateException e) {
-			LOG.error("Procces getCountry from certificate.");
-		}
-		return result.trim();
-	}
-
-	/**
-	 * Process all elements XMLObjects from the extensions.
-	 * 
-	 * @param extensions the extensions from the authentication request.
-	 * 
-	 * @return the STORK authentication request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private STORKAuthnRequest processExtensions(final Extensions extensions)
-	throws STORKSAMLEngineException {
-		LOG.debug("Procces the extensions.");
-
-		final STORKAuthnRequest request = new STORKAuthnRequest();
-
-		final QAAAttribute qaa = (QAAAttribute) extensions
-		.getUnknownXMLObjects(QAAAttribute.DEF_ELEMENT_NAME).get(0);
-		request.setQaa(Integer.parseInt(qaa.getQaaLevel()));
-
-		List optionalElements = extensions.getUnknownXMLObjects(
-				SPSector.DEF_ELEMENT_NAME);
-
-		if (!optionalElements.isEmpty()) {
-			final SPSector sector = (SPSector) extensions.getUnknownXMLObjects(
-					SPSector.DEF_ELEMENT_NAME).get(0);
-			request.setSpSector(sector.getSPSector());
-		}
-
-		optionalElements = extensions.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME);
-
-		if (!optionalElements.isEmpty()) {
-			final SPApplication application = (SPApplication) extensions
-			.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME).get(0);
-			request.setSpApplication(application.getSPApplication());
-		}
-
-		optionalElements = extensions.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME);
-
-		if (!optionalElements.isEmpty()) {
-			final SPCountry application = (SPCountry) extensions
-			.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME).get(0);
-			request.setSpCountry(application.getSPCountry());
-		}	
-
-
-		List listCrossBorderShare = extensions
-		.getUnknownXMLObjects(EIDCrossBorderShare.DEF_ELEMENT_NAME);
-
-		if (!listCrossBorderShare .isEmpty()) {
-			final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) listCrossBorderShare.get(0);
-			request.setEIDCrossBorderShare(Boolean.parseBoolean(crossBorderShare
-					.getEIDCrossBorderShare()));		
-		}
-
-
-		List listCrosSectorShare = extensions
-		.getUnknownXMLObjects(EIDCrossSectorShare.DEF_ELEMENT_NAME);
-
-		if (!listCrosSectorShare.isEmpty()) {
-			final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) listCrosSectorShare.get(0);
-			request.setEIDCrossSectorShare(Boolean.parseBoolean(crossSectorShare
-					.getEIDCrossSectorShare()));
-		}
-
-		List listSectorShareExtension = extensions
-		.getUnknownXMLObjects(EIDSectorShare.DEF_ELEMENT_NAME);
-		if (!listSectorShareExtension.isEmpty()) {
-			final EIDSectorShare sectorShare = (EIDSectorShare) listSectorShareExtension.get(0);
-			request.setEIDSectorShare(Boolean.parseBoolean(sectorShare.getEIDSectorShare()));
-		}
-
-
-
-		List<XMLObject> authAttrs = extensions
-		.getUnknownXMLObjects(AuthenticationAttributes.DEF_ELEMENT_NAME);
-
-		if (authAttrs != null && !authAttrs.isEmpty()) {
-
-			final AuthenticationAttributes authnAttr = (AuthenticationAttributes) authAttrs
-			.get(0);	
-
-			VIDPAuthenticationAttributes vidpAuthnAttr = null;
-			if (authnAttr != null && !authAttrs.isEmpty()){
-				vidpAuthnAttr = authnAttr.getVIDPAuthenticationAttributes();
-			}
-
-			CitizenCountryCode citizenCountryCodeElement = null;
-			SPInformation spInformation = null;
-			if (vidpAuthnAttr != null){
-				citizenCountryCodeElement = vidpAuthnAttr.getCitizenCountryCode();
-				spInformation = vidpAuthnAttr.getSPInformation();
-			}
-
-			String citizenCountryCode = null;
-			if(citizenCountryCodeElement!=null){
-				citizenCountryCode = citizenCountryCodeElement.getCitizenCountryCode();
-			}
-
-			if(citizenCountryCode!= null && StringUtils.isNotBlank(citizenCountryCode)){
-				request.setCitizenCountryCode(citizenCountryCode);
-			}	  	    
-
-			SPID spidElement = null;
-			if (spInformation != null){
-				spidElement = spInformation.getSPID();
-			}
-
-			String spid = null;
-			if(spidElement!=null){
-				spid = spidElement.getSPID();
-			}
-
-			if (spid != null && StringUtils.isNotBlank(spid)) {
-				request.setSPID(spid);
-			}
-		}
-
-		if (extensions
-				.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME) == null) {
-			LOG.error("Extensions not contains any requested attribute.");
-			throw new STORKSAMLEngineException(
-			"Extensions not contains any requested attribute.");
-		}
-
-		final RequestedAttributes requestedAttr = (RequestedAttributes) extensions
-		.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME)
-		.get(0);
-
-		final List<RequestedAttribute> reqAttrs = requestedAttr.getAttributes();
-
-		final IPersonalAttributeList personalAttrList = new PersonalAttributeList();
-
-		String attributeName;
-		for (int nextAttribute = 0; nextAttribute < reqAttrs.size(); nextAttribute++) {
-			final RequestedAttribute attribute = reqAttrs.get(nextAttribute);
-			final PersonalAttribute personalAttribute = new PersonalAttribute();
-			personalAttribute.setIsRequired(Boolean.valueOf(attribute.isRequired()));
-			personalAttribute.setFriendlyName(attribute.getFriendlyName());
-			attributeName = attribute.getName();
-
-			// recover the last name from the string.
-			personalAttribute.setName(attributeName.substring(attributeName
-					.lastIndexOf('/') + 1));
-
-			final ArrayList<String> valores = new ArrayList<String>();
-			final List<XMLObject> values = attribute.getOrderedChildren();
-
-			for (int nextSimpleValue = 0; nextSimpleValue < values.size(); nextSimpleValue++) {
-
-				// Process attributes simples. An AuthenticationRequest only
-				// must contains simple values.
-				
-				final XMLObject xmlObject = values.get(nextSimpleValue);
-								
-				if(xmlObject instanceof XSStringImpl){
-					
-					final XSStringImpl xmlString = (XSStringImpl) values
-					.get(nextSimpleValue);
-					valores.add(xmlString.getValue());
-				
-				}else{
-				
-					if (attributeName.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
-						
-						final XSAnyImpl xmlString = (XSAnyImpl) values
-						.get(nextSimpleValue);
-						
-						TransformerFactory transFactory = TransformerFactory.newInstance();
-						Transformer transformer = null;
-						try {
-							transformer = transFactory.newTransformer();
-							transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-						} catch (TransformerConfigurationException e) {
-                            LOG.error("Error transformer configuration exception", e);
-						}
-						StringWriter buffer = new StringWriter();					
-						try {
-                            if (xmlString != null && xmlString.getUnknownXMLObjects() != null && xmlString.getUnknownXMLObjects().size() > 0 ){
-                                transformer.transform(new DOMSource(xmlString.getUnknownXMLObjects().get(0).getDOM()),
-                                      new StreamResult(buffer));
-                            }
-						} catch (TransformerException e) {
-                            LOG.error("Error transformer exception", e);
-						}
-						String str = buffer.toString();
-						
-						valores.add(str);	
-										
-					}else{
-						
-						final XSAnyImpl xmlString = (XSAnyImpl) values
-						.get(nextSimpleValue);
-						valores.add(xmlString.getTextContent());
-					}
-								
-					
-										
-				}
-			}
-			personalAttribute.setValue(valores);
-			personalAttrList.add(personalAttribute);
-		}
-
-		request.setPersonalAttributeList(personalAttrList);
-
-		return request;
-	}
-
-	
-	/**
-	 * Process all elements XMLObjects from the extensions.
-	 * 
-	 * @param extensions the extensions from the authentication request.
-	 * 
-	 * @return the STORK authentication request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private STORKAttrQueryRequest processAttrExtensions(final Extensions extensions)
-	throws STORKSAMLEngineException {
-		LOG.debug("Procces the atribute query extensions.");
-
-		final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-		final QAAAttribute qaa = (QAAAttribute) extensions
-		.getUnknownXMLObjects(QAAAttribute.DEF_ELEMENT_NAME).get(0);
-		request.setQaa(Integer.parseInt(qaa.getQaaLevel()));
-
-		List optionalElements = extensions.getUnknownXMLObjects(
-				SPSector.DEF_ELEMENT_NAME);
-
-		if (!optionalElements.isEmpty()) {
-			final SPSector sector = (SPSector) extensions.getUnknownXMLObjects(
-					SPSector.DEF_ELEMENT_NAME).get(0);
-			request.setSpSector(sector.getSPSector());
-		}
-
-		optionalElements = extensions.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME);
-
-		if (!optionalElements.isEmpty()) {
-			final SPApplication application = (SPApplication) extensions
-			.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME).get(0);
-			request.setSpApplication(application.getSPApplication());
-		}
-
-		optionalElements = extensions.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME);
-
-		if (!optionalElements.isEmpty()) {
-			final SPCountry application = (SPCountry) extensions
-			.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME).get(0);
-			request.setSpCountry(application.getSPCountry());
-		}	
-
-
-		List listCrossBorderShare = extensions
-		.getUnknownXMLObjects(EIDCrossBorderShare.DEF_ELEMENT_NAME);
-
-		if (!listCrossBorderShare .isEmpty()) {
-			final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) listCrossBorderShare.get(0);
-			request.setEIDCrossBorderShare(Boolean.parseBoolean(crossBorderShare
-					.getEIDCrossBorderShare()));		
-		}
-
-
-		List listCrosSectorShare = extensions
-		.getUnknownXMLObjects(EIDCrossSectorShare.DEF_ELEMENT_NAME);
-
-		if (!listCrosSectorShare.isEmpty()) {
-			final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) listCrosSectorShare.get(0);
-			request.setEIDCrossSectorShare(Boolean.parseBoolean(crossSectorShare
-					.getEIDCrossSectorShare()));
-		}
-
-		List listSectorShareExtension = extensions
-		.getUnknownXMLObjects(EIDSectorShare.DEF_ELEMENT_NAME);
-		if (!listSectorShareExtension.isEmpty()) {
-			final EIDSectorShare sectorShare = (EIDSectorShare) listSectorShareExtension.get(0);
-			request.setEIDSectorShare(Boolean.parseBoolean(sectorShare.getEIDSectorShare()));
-		}
-
-
-
-		List<XMLObject> authAttrs = extensions
-		.getUnknownXMLObjects(AuthenticationAttributes.DEF_ELEMENT_NAME);
-
-		if (authAttrs != null && !authAttrs.isEmpty()) {
-
-			final AuthenticationAttributes authnAttr = (AuthenticationAttributes) authAttrs
-			.get(0);	
-
-			VIDPAuthenticationAttributes vidpAuthnAttr = null;
-			if (authnAttr != null && !authAttrs.isEmpty()){
-				vidpAuthnAttr = authnAttr.getVIDPAuthenticationAttributes();
-			}
-
-			CitizenCountryCode citizenCountryCodeElement = null;
-			SPInformation spInformation = null;
-			if (vidpAuthnAttr != null){
-				citizenCountryCodeElement = vidpAuthnAttr.getCitizenCountryCode();
-				spInformation = vidpAuthnAttr.getSPInformation();
-			}
-
-			String citizenCountryCode = null;
-			if(citizenCountryCodeElement!=null){
-				citizenCountryCode = citizenCountryCodeElement.getCitizenCountryCode();
-			}
-
-			if(citizenCountryCode!= null && StringUtils.isNotBlank(citizenCountryCode)){
-				request.setCitizenCountryCode(citizenCountryCode);
-			}	  	    
-
-			SPID spidElement = null;
-			if (spInformation != null){
-				spidElement = spInformation.getSPID();
-			}
-
-			String spid = null;
-			if(spidElement!=null){
-				spid = spidElement.getSPID();
-			}
-
-			if (spid != null && StringUtils.isNotBlank(spid)) {
-				request.setSPID(spid);
-			}
-		}
-
-		if (extensions
-				.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME) == null) {
-			LOG.error("Extensions not contains any requested attribute.");
-			throw new STORKSAMLEngineException(
-			"Extensions not contains any requested attribute.");
-		}
-
-		final RequestedAttributes requestedAttr = (RequestedAttributes) extensions
-		.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME)
-		.get(0);
-
-		final List<RequestedAttribute> reqAttrs = requestedAttr.getAttributes();
-
-		final IPersonalAttributeList personalAttrList = new PersonalAttributeList();
-
-		String attributeName;
-		for (int nextAttribute = 0; nextAttribute < reqAttrs.size(); nextAttribute++) {
-			final RequestedAttribute attribute = reqAttrs.get(nextAttribute);
-			final PersonalAttribute personalAttribute = new PersonalAttribute();
-			personalAttribute.setIsRequired(Boolean.valueOf(attribute.isRequired()));
-			personalAttribute.setFriendlyName(attribute.getFriendlyName());
-			attributeName = attribute.getName();
-
-			// recover the last name from the string.
-			personalAttribute.setName(attributeName.substring(attributeName
-					.lastIndexOf('/') + 1));
-
-			final ArrayList<String> valores = new ArrayList<String>();
-			final List<XMLObject> values = attribute.getOrderedChildren();
-
-			for (int nextSimpleValue = 0; nextSimpleValue < values.size(); nextSimpleValue++) {
-
-				// Process attributes simples. An AuthenticationRequest only
-				// must contains simple values.
-				
-				final XMLObject xmlObject = values.get(nextSimpleValue);
-								
-				if(xmlObject instanceof XSStringImpl){
-					
-					final XSStringImpl xmlString = (XSStringImpl) values
-					.get(nextSimpleValue);
-					valores.add(xmlString.getValue());
-				
-				}else{
-				
-					if (attributeName.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
-						
-						final XSAnyImpl xmlString = (XSAnyImpl) values
-						.get(nextSimpleValue);
-						
-						TransformerFactory transFactory = TransformerFactory.newInstance();
-						Transformer transformer = null;
-						try {
-							transformer = transFactory.newTransformer();
-							transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-						} catch (TransformerConfigurationException e) {
-                            LOG.error("Error transformer configuration exception", e);
-						}
-						StringWriter buffer = new StringWriter();					
-						try {
-                            if (xmlString != null && xmlString.getUnknownXMLObjects() != null && xmlString.getUnknownXMLObjects().size() > 0 ){
-                                transformer.transform(new DOMSource(xmlString.getUnknownXMLObjects().get(0).getDOM()),
-                                      new StreamResult(buffer));
-                            }
-						} catch (TransformerException e) {
-                            LOG.error("Error transformer exception", e);
-						}
-						String str = buffer.toString();
-						
-						valores.add(str);	
-										
-					}else{
-						
-						final XSAnyImpl xmlString = (XSAnyImpl) values
-						.get(nextSimpleValue);
-						valores.add(xmlString.getTextContent());
-					}
-								
-					
-										
-				}
-			}
-			personalAttribute.setValue(valores);
-			personalAttrList.add(personalAttribute);
-		}
-
-		request.setPersonalAttributeList(personalAttrList);
-
-		return request;
-	}
-
-	/**
-	 * Sets the name spaces.
-	 * 
-	 * @param tokenSaml the new name spaces
-	 */
-	private void setNameSpaces(final XMLObject tokenSaml) {
-		LOG.debug("Set namespaces.");
-
-		final Namespace saml2 = new Namespace(SAMLConstants.SAML20_NS,
-				SAMLConstants.SAML20_PREFIX);
-		tokenSaml.addNamespace(saml2);
-
-		final Namespace digSig = new Namespace(
-				"http://www.w3.org/2000/09/xmldsig#", "ds");
-		tokenSaml.addNamespace(digSig);
-
-		final Namespace storkp = new Namespace(SAMLCore.STORK10P_NS.getValue(),
-				SAMLCore.STORK10P_PREFIX.getValue());
-		tokenSaml.addNamespace(storkp);
-
-		final Namespace stork = new Namespace(SAMLCore.STORK10_NS.getValue(),
-				SAMLCore.STORK10_PREFIX.getValue());
-
-		tokenSaml.addNamespace(stork);
-	}
-
-	/**
-	 * Validate parameters from authentication request.
-	 * 
-	 * @param request the request.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamAuthnReq(final STORKAuthnRequest request)
-	throws STORKSAMLEngineException {
-		LOG.info("Validate parameters from authentication request.");
-
-		// URL to which Authentication Response must be sent.
-		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: Assertion Consumer Service URL it's mandatory.");
-		}
-
-		// the name of the original service provider requesting the
-		// authentication.
-		if (StringUtils.isBlank(request.getProviderName())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: Service Provider it's mandatory.");
-		}
-
-		// object that contain all attributes requesting.
-		if (request.getPersonalAttributeList() == null
-				|| request.getPersonalAttributeList().isEmpty()) {
-			throw new STORKSAMLEngineException(
-			"attributeQueries is null or empty.");
-		}
-
-		// Quality authentication assurance level.
-		if ((request.getQaa() < QAAAttribute.MIN_VALUE)
-				|| (request.getQaa() > QAAAttribute.MAX_VALUE)) {
-			throw new STORKSAMLEngineException("Qaal: " + request.getQaa()
-					+ ", is invalid.");
-		}
-
-	}
-	
-	/**
-	 * Validate parameters from attribute query request.
-	 * 
-	 * @param request the request.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamAttrQueryReq(final STORKAttrQueryRequest request)
-	throws STORKSAMLEngineException {
-		LOG.info("Validate parameters from attribute query request.");
-
-		// URL to which AP Response must be sent.
-		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: Assertion Consumer Service URL it's mandatory.");
-		}
-
-		// Destination of the request - not mandatory
-		/*if (StringUtils.isBlank(request.getDestination())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: Destination is mandatory.");
-		}*/
-		
-		// SP country is empty
-		if (StringUtils.isBlank(request.getSpCountry())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: SP country is mandatory.");
-		}
-
-		// object that contain all attributes requesting.
-		if (request.getPersonalAttributeList() == null
-				|| request.getPersonalAttributeList().isEmpty()) {
-			throw new STORKSAMLEngineException(
-			"attributeQueries is null or empty.");
-		}
-
-		// Quality authentication assurance level.
-		if ((request.getQaa() < QAAAttribute.MIN_VALUE)
-				|| (request.getQaa() > QAAAttribute.MAX_VALUE)) {
-			throw new STORKSAMLEngineException("Qaal: " + request.getQaa()
-					+ ", is invalid.");
-		}
-	}
-	
-	/**
-	 * Validate parameters from logout request.
-	 * 
-	 * @param request the request.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamLogoutReq(final STORKLogoutRequest request)
-	throws STORKSAMLEngineException {
-		LOG.info("Validate parameters from logout request.");
-
-		// URL to which AP Response must be sent.
-		/*if (StringUtils.isBlank(request.get())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: Assertion Consumer Service URL it's mandatory.");
-		}*/
-
-		// Destination of the request
-		if (StringUtils.isBlank(request.getDestination())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: Destination is mandatory.");
-		}
-		
-		// SP Provided Id
-		if (StringUtils.isBlank(request.getSpProvidedId())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: SP provided Id is mandatory.");
-		}
-	}
-	
-	/**
-	 * Validate parameters from logout response.
-	 * 
-	 * @param response the response.
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamLogoutRes(final STORKLogoutRequest request, 
-			final STORKLogoutResponse response)	throws STORKSAMLEngineException {
-		LOG.info("Validate parameters from logout request.");
-
-		// Issuer is mandatory
-		if (StringUtils.isBlank(request.getIssuer())) {
-			throw new STORKSAMLEngineException(
-					"Issuer must be not empty or null.");
-		}
-
-		// Destination of the request
-		if (StringUtils.isBlank(response.getDestination())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: Destination is mandatory.");
-		}
-		
-		// SP Provided Id
-		if (StringUtils.isBlank(request.getSpProvidedId())) {
-			throw new STORKSAMLEngineException(
-					"StorkSamlEngine: SP provided Id is mandatory.");
-		}
-		
-		if (StringUtils.isBlank(request.getSamlId())) {
-			throw new STORKSAMLEngineException("request ID is null or empty.");
-		}
-	}
-
-
-	/**
-	 * Validate parameters from response.
-	 * 
-	 * @param request the request
-	 * @param responseAuthReq the response authentication request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamResponse(final STORKAuthnRequest request,
-			final STORKAuthnResponse responseAuthReq)
-	throws STORKSAMLEngineException {
-		LOG.info("Validate parameters response.");
-		if (StringUtils.isBlank(request.getIssuer())) {
-			throw new STORKSAMLEngineException(
-					"Issuer must be not empty or null.");
-		}
-
-		if (responseAuthReq.getPersonalAttributeList() == null
-				|| responseAuthReq.getPersonalAttributeList().isEmpty()) {
-			LOG.error("PersonalAttributeList is null or empty.");
-			throw new STORKSAMLEngineException(
-			"PersonalAttributeList is null or empty.");
-		}
-
-		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
-			throw new STORKSAMLEngineException(
-					"assertionConsumerServiceURL is null or empty.");
-		}
-
-		if (StringUtils.isBlank(request.getSamlId())) {
-			throw new STORKSAMLEngineException("request ID is null or empty.");
-		}
-	}
-	
-	/**
-	 * Validate parameters from response.
-	 * 
-	 * @param request the request
-	 * @param responseAttrQueryReq the response authentication request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamAttrQueryResponse(final STORKAttrQueryRequest request,
-			final STORKAttrQueryResponse responseAttrQueryReq)
-	throws STORKSAMLEngineException {
-		LOG.info("Validate attribute querey parameters response.");
-		if (StringUtils.isBlank(request.getIssuer())) {
-			throw new STORKSAMLEngineException(
-					"Issuer must be not empty or null.");
-		}
-
-		if (responseAttrQueryReq.getPersonalAttributeList() == null
-				|| responseAttrQueryReq.getPersonalAttributeList().isEmpty()) {
-			LOG.error("PersonalAttributeList is null or empty.");
-			throw new STORKSAMLEngineException(
-			"PersonalAttributeList is null or empty.");
-		}
-
-		/*if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
-			throw new STORKSAMLEngineException(
-					"assertionConsumerServiceURL is null or empty.");
-		}*/
-
-		if (StringUtils.isBlank(request.getSamlId())) {
-			throw new STORKSAMLEngineException("request ID is null or empty.");
-		}
-	}
-	
-	/**
-	 * Validate parameters from response.
-	 * 
-	 * @param request the request
-	 * @param responseAttrQueryReq the response authentication request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamAttrQueryResponseFromAssertions(final STORKAttrQueryRequest request,
-			final STORKAttrQueryResponse responseAttrQueryReq)
-	throws STORKSAMLEngineException {
-		LOG.info("Validate attribute querey parameters response.");
-		if (StringUtils.isBlank(request.getIssuer())) {
-			throw new STORKSAMLEngineException(
-					"Issuer must be not empty or null.");
-		}
-
-		/*if (responseAttrQueryReq.getPersonalAttributeList() == null
-				|| responseAttrQueryReq.getPersonalAttributeList().isEmpty()) {
-			LOG.error("PersonalAttributeList is null or empty.");
-			throw new STORKSAMLEngineException(
-			"PersonalAttributeList is null or empty.");
-		}*/
-
-		/*if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
-			throw new STORKSAMLEngineException(
-					"assertionConsumerServiceURL is null or empty.");
-		}*/
-
-		if (StringUtils.isBlank(request.getSamlId())) {
-			throw new STORKSAMLEngineException("request ID is null or empty.");
-		}
-	}
-
-	/**
-	 * Validate parameter from response fail.
-	 * 
-	 * @param request the request
-	 * @param response the response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamResponseFail(final STORKAuthnRequest request,
-			final STORKAuthnResponse response) throws STORKSAMLEngineException {
-		LOG.info("Validate parameters response fail.");
-		if (StringUtils.isBlank(response.getStatusCode())) {
-			throw new STORKSAMLEngineException("Code error it's null or empty.");
-		}
-
-		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
-			throw new STORKSAMLEngineException(
-					"assertionConsumerServiceURL is null or empty.");
-		}
-
-		if (StringUtils.isBlank(request.getSamlId())) {
-			throw new STORKSAMLEngineException("request ID is null or empty.");
-		}
-	}
-	
-	/**
-	 * Validate parameter from response fail.
-	 * 
-	 * @param request the request
-	 * @param response the response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamAttrQueryResponseFail(final STORKAttrQueryRequest request,
-			final STORKAttrQueryResponse response) throws STORKSAMLEngineException {
-		LOG.info("Validate parameters response fail.");
-		if (StringUtils.isBlank(response.getStatusCode())) {
-			throw new STORKSAMLEngineException("Code error it's null or empty.");
-		}
-
-		if (StringUtils.isBlank(request.getSamlId())) {
-			throw new STORKSAMLEngineException("request ID is null or empty.");
-		}
-	}
-	
-	/**
-	 * Validate parameter from response fail.
-	 * 
-	 * @param request the request
-	 * @param response the response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private void validateParamLogoutResFail(final STORKLogoutRequest request,
-			final STORKLogoutResponse response) throws STORKSAMLEngineException {
-		LOG.info("Validate parameters response fail.");
-		
-		if (StringUtils.isBlank(request.getIssuer())) {
-			throw new STORKSAMLEngineException(
-					"Issuer must be not empty or null.");
-		}
-
-		if (StringUtils.isBlank(response.getStatusCode())) {
-			throw new STORKSAMLEngineException("Code error it's null or empty.");
-		}
-
-		if (StringUtils.isBlank(request.getSamlId())) {
-			throw new STORKSAMLEngineException("request ID is null or empty.");
-		}
-	}
-
-	/**
-	 * Validate stork authentication request.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * 
-	 * @return the sTORK authentication request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAuthnRequest validateSTORKAuthnRequest(final byte[] tokenSaml)
-	throws STORKSAMLEngineException {
-		LOG.info("validateSTORKAuthnRequest");
-
-		final AuthnRequest samlRequest = (AuthnRequest) validateStorkSaml(tokenSaml);
-
-		LOG.debug("Validate Extensions.");
-		final Validator<Extensions> validatorExt = new ExtensionsSchemaValidator();
-		try {
-			validatorExt.validate(samlRequest.getExtensions());
-		} catch (ValidationException e) {
-			LOG.error("ValidationException: validate Extensions.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		LOG.debug("Generate STORKAuthnRequest.");
-		final STORKAuthnRequest authnRequest = processExtensions(samlRequest
-				.getExtensions());
-
-		authnRequest.setCountry(this.getCountry(samlRequest.getSignature()
-				.getKeyInfo()));
-		
-		authnRequest.setAlias(this.getAlias(samlRequest.getSignature()
-				.getKeyInfo(), super.getSigner().getTrustStore()));
-		
-		authnRequest.setSamlId(samlRequest.getID());
-		authnRequest.setDestination(samlRequest.getDestination());
-		authnRequest.setAssertionConsumerServiceURL(samlRequest
-				.getAssertionConsumerServiceURL());
-
-		authnRequest.setProviderName(samlRequest.getProviderName());
-		authnRequest.setIssuer(samlRequest.getIssuer().getValue());
-
-		//Delete unknown elements from requested ones
-		final Iterator<PersonalAttribute> iterator = authnRequest.getPersonalAttributeList().iterator();
-        IPersonalAttributeList cleanPerAttrList = (PersonalAttributeList) authnRequest.getPersonalAttributeList();
-		while (iterator.hasNext()) {
-
-			final PersonalAttribute attribute = iterator.next();
-
-			// Verify if the attribute name exits.
-			final String attributeName = super.getSamlCoreProperties()
-			.getProperty(attribute.getName());
-
-			if (StringUtils.isBlank(attributeName)) {
-				LOG.info("Attribute name: {} was not found. It will be removed from the request object", attribute.getName());
-				cleanPerAttrList.remove(attribute.getName());
-			}
-
-		}	
-		authnRequest.setPersonalAttributeList(cleanPerAttrList);
-
-		return authnRequest;
-
-	}
-	
-	/**
-	 * Validate stork attribute query request.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * 
-	 * @return the STORK attribute query request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAttrQueryRequest validateSTORKAttrQueryRequest(final byte[] tokenSaml)
-	throws STORKSAMLEngineException {
-		LOG.info("validateSTORKAttrQueryRequest");
-
-		//final AttributeQuery samlRequest = (AttributeQuery) validateStorkSaml(tokenSaml);
-		final CustomRequestAbstractType samlRequest = (CustomRequestAbstractType) validateStorkSaml(tokenSaml);
-
-		LOG.debug("Validate Extensions.");
-		final Validator<Extensions> validatorExt = new ExtensionsSchemaValidator();
-		try {
-			validatorExt.validate(samlRequest.getExtensions());
-		} catch (ValidationException e) {
-			LOG.error("ValidationException: validate Extensions.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		LOG.debug("Generate STORKAttrQueryRequest.");
-		final STORKAttrQueryRequest attrRequest = processAttrExtensions(samlRequest
-				.getExtensions());
-
-		attrRequest.setCountry(this.getCountry(samlRequest.getSignature()
-				.getKeyInfo()));
-		
-		attrRequest.setAlias(this.getAlias(samlRequest.getSignature()
-				.getKeyInfo(), super.getSigner().getTrustStore()));
-		
-		attrRequest.setSamlId(samlRequest.getID());
-		attrRequest.setDestination(samlRequest.getDestination());
-		attrRequest.setAssertionConsumerServiceURL(samlRequest
-				.getAssertionConsumerServiceURL());
-
-		/*authnRequest.setProviderName(samlRequest.getProviderName());*/
-		attrRequest.setIssuer(samlRequest.getIssuer().getValue());
-
-		//Delete unknown elements from requested ones
-		final Iterator<PersonalAttribute> iterator = attrRequest.getPersonalAttributeList().iterator();
-        IPersonalAttributeList cleanPerAttrList = (PersonalAttributeList) attrRequest.getPersonalAttributeList();
-		while (iterator.hasNext()) {
-
-			final PersonalAttribute attribute = iterator.next();
-
-			// Verify if the attribute name exits.
-			final String attributeName = super.getSamlCoreProperties()
-			.getProperty(attribute.getName());
-
-			if (StringUtils.isBlank(attributeName)) {
-				LOG.info("Attribute name: {} was not found. It will be removed from the request object", attribute.getName());
-				cleanPerAttrList.remove(attribute.getName());
-			}
-
-		}	
-		attrRequest.setPersonalAttributeList(cleanPerAttrList);
-
-		return attrRequest;
-
-	}
-	
-	/**
-	 * Validate stork logout request.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * 
-	 * @return the STORK logout request
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKLogoutRequest validateSTORKLogoutRequest(final byte[] tokenSaml)
-	throws STORKSAMLEngineException {
-		LOG.info("validateSTORKLogoutRequest");
-
-		final LogoutRequest samlRequest = (LogoutRequest)validateStorkSaml(tokenSaml);
-
-		LOG.debug("Validate Extensions.");
-		final Validator<Extensions> validatorExt = new ExtensionsSchemaValidator();
-		try {
-			validatorExt.validate(samlRequest.getExtensions());
-		} catch (ValidationException e) {
-			LOG.error("ValidationException: validate Extensions.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		LOG.debug("Generate STORKLogoutRequest.");
-		final STORKLogoutRequest logoutRequest = new STORKLogoutRequest();
-
-		logoutRequest.setCountry(this.getCountry(samlRequest.getSignature()
-				.getKeyInfo()));
-		
-		logoutRequest.setAlias(this.getAlias(samlRequest.getSignature()
-				.getKeyInfo(), super.getSigner().getTrustStore()));
-		
-		logoutRequest.setSamlId(samlRequest.getID());
-		logoutRequest.setDestination(samlRequest.getDestination());
-		
-		logoutRequest.setIssuer(samlRequest.getIssuer().getValue());
-
-		logoutRequest.setSpProvidedId(samlRequest.getNameID().getValue());
-
-		return logoutRequest;
-
-	}
-
-	/**
-	 * Validate stork authentication response.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * @param userIP the user IP
-	 * 
-	 * @return the Stork authentication response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAuthnResponse validateSTORKAuthnResponse(
-			final byte[] tokenSaml, final String userIP)
-	throws STORKSAMLEngineException {
-
-		LOG.info("validateSTORKAuthnResponse");
-		final Response samlResponse = (Response) validateStorkSaml(tokenSaml);
-
-		LOG.debug("Create StorkAuthResponse.");
-		final STORKAuthnResponse authnResponse = new STORKAuthnResponse();
-
-		authnResponse.setCountry(this.getCountry(samlResponse.getSignature()
-				.getKeyInfo()));
-
-		LOG.debug("Set ID.");
-		authnResponse.setSamlId(samlResponse.getID());
-		LOG.debug("Set InResponseTo.");
-		authnResponse.setInResponseTo(samlResponse.getInResponseTo());
-		LOG.debug("Set statusCode.");
-		authnResponse.setStatusCode(samlResponse.getStatus().getStatusCode()
-				.getValue());
-
-		// Subordinate code.
-		if (samlResponse.getStatus().getStatusCode().getStatusCode() != null) {
-			authnResponse.setSubStatusCode(samlResponse.getStatus()
-					.getStatusCode().getStatusCode().getValue());
-		}
-
-		if (samlResponse.getStatus().getStatusMessage() != null) {
-			LOG.debug("Set statusMessage.");
-			authnResponse.setMessage(samlResponse.getStatus()
-					.getStatusMessage().getMessage());
-		}
-
-		LOG.debug("validateStorkResponse");
-		final Assertion assertion = (Assertion) validateStorkResponse(
-				samlResponse, userIP);	
-		
-		if(assertion!=null){
-			final DateTime serverDate = new DateTime();
-
-			if (assertion.getConditions().getNotOnOrAfter().isBefore(serverDate)) {
-				LOG.error("Token date expired (getNotOnOrAfter =  "
-						+ assertion.getConditions().getNotOnOrAfter()
-						+ ", server_date: " + serverDate + ")");
-				throw new STORKSAMLEngineException(
-						"Token date expired (getNotOnOrAfter =  "
-						+ assertion.getConditions().getNotOnOrAfter()
-						+ " ), server_date: " + serverDate);
-			}
-
-			LOG.debug("Set notOnOrAfter.");
-			authnResponse.setNotOnOrAfter(assertion.getConditions()
-					.getNotOnOrAfter());
-
-			LOG.debug("Set notBefore.");
-			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
-
-			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
-
-			authnResponse.setAudienceRestriction(((AudienceRestriction) assertion
-					.getConditions().getAudienceRestrictions().get(0))
-					.getAudiences().get(0).getAudienceURI());
-			authnResponse.setAssertions(samlResponse.getAssertions());
-		}
-		
-		// Case no error.
-		if (assertion!=null && StatusCode.SUCCESS_URI.equalsIgnoreCase(authnResponse
-				.getStatusCode())) {
-			LOG.debug("Status Success. Set PersonalAttributeList.");
-			authnResponse
-			.setPersonalAttributeList(generatePersonalAttributeList(assertion));
-			authnResponse.setFail(false);
-		} else {
-			LOG.debug("Status Fail.");
-			authnResponse.setFail(true);
-		}		
-		LOG.debug("Return result.");
-		return authnResponse;
-
-	}
-	
-	/**
-	 * Validate stork authentication response.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * @param userIP the user IP
-	 * 
-	 * @return the Stork authentication response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAuthnResponse validateSTORKAuthnResponseWithQuery(
-			final byte[] tokenSaml, final String userIP)
-	throws STORKSAMLEngineException {
-
-		LOG.info("validateSTORKAuthnResponse");
-		final Response samlResponse = (Response) validateStorkSaml(tokenSaml);
-
-		LOG.debug("Create StorkAuthResponse.");
-		final STORKAuthnResponse authnResponse = new STORKAuthnResponse();
-
-		authnResponse.setCountry(this.getCountry(samlResponse.getSignature()
-				.getKeyInfo()));
-
-		LOG.debug("Set ID.");
-		authnResponse.setSamlId(samlResponse.getID());
-		LOG.debug("Set InResponseTo.");
-		authnResponse.setInResponseTo(samlResponse.getInResponseTo());
-		LOG.debug("Set statusCode.");
-		authnResponse.setStatusCode(samlResponse.getStatus().getStatusCode()
-				.getValue());
-
-		// Subordinate code.
-		if (samlResponse.getStatus().getStatusCode().getStatusCode() != null) {
-			authnResponse.setSubStatusCode(samlResponse.getStatus()
-					.getStatusCode().getStatusCode().getValue());
-		}
-
-		if (samlResponse.getStatus().getStatusMessage() != null) {
-			LOG.debug("Set statusMessage.");
-			authnResponse.setMessage(samlResponse.getStatus()
-					.getStatusMessage().getMessage());
-		}
-
-		LOG.debug("validateStorkResponse");
-		final Assertion assertion = (Assertion) validateStorkResponse(
-				samlResponse, userIP);	
-		
-		if(assertion!=null){
-			final DateTime serverDate = new DateTime();
-
-			if (assertion.getConditions().getNotOnOrAfter().isBefore(serverDate)) {
-				LOG.error("Token date expired (getNotOnOrAfter =  "
-						+ assertion.getConditions().getNotOnOrAfter()
-						+ ", server_date: " + serverDate + ")");
-				throw new STORKSAMLEngineException(
-						"Token date expired (getNotOnOrAfter =  "
-						+ assertion.getConditions().getNotOnOrAfter()
-						+ " ), server_date: " + serverDate);
-			}
-
-			LOG.debug("Set notOnOrAfter.");
-			authnResponse.setNotOnOrAfter(assertion.getConditions()
-					.getNotOnOrAfter());
-
-			LOG.debug("Set notBefore.");
-			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
-
-			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
-
-			authnResponse.setAudienceRestriction(((AudienceRestriction) assertion
-					.getConditions().getAudienceRestrictions().get(0))
-					.getAudiences().get(0).getAudienceURI());
-		}
-		
-		// Case no error.
-		if (assertion!=null && StatusCode.SUCCESS_URI.equalsIgnoreCase(authnResponse
-				.getStatusCode())) {
-			LOG.debug("Status Success. Set PersonalAttributeList.");
-			authnResponse
-			.setPersonalAttributeList(generatePersonalAttributeList(assertion));
-			authnResponse.setFail(false);
-		} else {
-			LOG.debug("Status Fail.");
-			authnResponse.setFail(true);
-		}
-		
-		authnResponse.setAssertions(samlResponse.getAssertions());
-		if (samlResponse.getAssertions().size() > 1)
-		{
-			PersonalAttributeList total = new PersonalAttributeList();
-			List<IPersonalAttributeList> attrList = new ArrayList();
-			for (int i = 0; i < samlResponse.getAssertions().size(); i++)
-			{
-				Assertion tempAssertion = (Assertion)samlResponse.getAssertions().get(i);
-				IPersonalAttributeList temp = generatePersonalAttributeList(tempAssertion);
-				if (temp != null)
-				{ 
-					attrList.add(temp);
-					for (PersonalAttribute attribute : temp) {
-						PersonalAttribute attr = (PersonalAttribute)attribute.clone();
-						attr.setName(attr.getName()+tempAssertion.getID());
-						total.add(attr);
-					}
-				}
-			}
-			authnResponse.setPersonalAttributeLists(attrList);
-			authnResponse.setTotalPersonalAttributeList(total);
-		}
-		
-		LOG.debug("Return result.");
-		return authnResponse;
-
-	}
-	
-	/**
-	 * Validate stork attribute query response.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * @param userIP the user IP
-	 * 
-	 * @return the Stork attribute query response
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	public STORKAttrQueryResponse validateSTORKAttrQueryResponse(
-			final byte[] tokenSaml, final String userIP)
-	throws STORKSAMLEngineException {
-
-		LOG.info("validateSTORKAttrQueryResponse");
-		final Response samlResponse = (Response) validateStorkSaml(tokenSaml);
-
-		LOG.debug("Create StorkAttrQueryResponse.");
-		final STORKAttrQueryResponse attrQueryResponse = new STORKAttrQueryResponse();
-
-		attrQueryResponse.setCountry(this.getCountry(samlResponse.getSignature()
-				.getKeyInfo()));
-
-		LOG.debug("Set ID.");
-		attrQueryResponse.setSamlId(samlResponse.getID());
-		LOG.debug("Set InResponseTo.");
-		attrQueryResponse.setInResponseTo(samlResponse.getInResponseTo());
-		LOG.debug("Set statusCode.");
-		attrQueryResponse.setStatusCode(samlResponse.getStatus().getStatusCode()
-				.getValue());
-		
-
-		// Subordinate code.
-		if (samlResponse.getStatus().getStatusCode().getStatusCode() != null) {
-			attrQueryResponse.setSubStatusCode(samlResponse.getStatus()
-					.getStatusCode().getStatusCode().getValue());
-		}
-
-		if (samlResponse.getStatus().getStatusMessage() != null) {
-			LOG.debug("Set statusMessage.");
-			attrQueryResponse.setMessage(samlResponse.getStatus()
-					.getStatusMessage().getMessage());
-		}
-
-		LOG.debug("validateStorkResponse");
-		final Assertion assertion = (Assertion) validateStorkResponse(
-				samlResponse, userIP);	
-		
-		if(assertion!=null){
-			final DateTime serverDate = new DateTime();
-
-			attrQueryResponse.setAssertion(assertion);
-
-			if (assertion.getConditions().getNotOnOrAfter().isBefore(serverDate)) {
-				LOG.error("Token date expired (getNotOnOrAfter =  "
-						+ assertion.getConditions().getNotOnOrAfter()
-						+ ", server_date: " + serverDate + ")");
-				throw new STORKSAMLEngineException(
-						"Token date expired (getNotOnOrAfter =  "
-						+ assertion.getConditions().getNotOnOrAfter()
-						+ " ), server_date: " + serverDate);
-			}
-
-			LOG.debug("Set notOnOrAfter.");
-			attrQueryResponse.setNotOnOrAfter(assertion.getConditions()
-					.getNotOnOrAfter());
-
-			LOG.debug("Set notBefore.");
-			attrQueryResponse.setNotBefore(assertion.getConditions().getNotBefore());
-
-			attrQueryResponse.setNotBefore(assertion.getConditions().getNotBefore());
-
-			attrQueryResponse.setAudienceRestriction(((AudienceRestriction) assertion
-					.getConditions().getAudienceRestrictions().get(0))
-					.getAudiences().get(0).getAudienceURI());
-		}
-		
-		// Case no error.
-		if (assertion!=null && StatusCode.SUCCESS_URI.equalsIgnoreCase(attrQueryResponse
-				.getStatusCode())) {
-			LOG.debug("Status Success. Set PersonalAttributeList.");
-			attrQueryResponse
-			.setPersonalAttributeList(generatePersonalAttributeList(assertion));
-			attrQueryResponse.setFail(false);
-		} else {
-			LOG.debug("Status Fail.");
-			attrQueryResponse.setFail(true);
-		}
-		
-		attrQueryResponse.setAssertions(samlResponse.getAssertions());
-		if (samlResponse.getAssertions().size() > 1)
-		{
-			PersonalAttributeList total = new PersonalAttributeList();
-			List<IPersonalAttributeList> attrList = new ArrayList();
-			for (int i = 0; i < samlResponse.getAssertions().size(); i++)
-			{
-				Assertion tempAssertion = (Assertion)samlResponse.getAssertions().get(i);
-				IPersonalAttributeList temp = generatePersonalAttributeList(tempAssertion);
-				if (temp != null)
-				{ 
-					attrList.add(temp);
-					for (PersonalAttribute attribute : temp) {
-						PersonalAttribute attr = (PersonalAttribute)attribute.clone();
-						attr.setName(attr.getName()+tempAssertion.getID());
-						total.add(attr);
-					}
-				}
-			}
-			attrQueryResponse.setPersonalAttributeLists(attrList);
-			attrQueryResponse.setTotalPersonalAttributeList(total);
-		}
-		
-		LOG.debug("Return result.");
-		return attrQueryResponse;
-
-	}
-
-	/**
-	 * Validate stork response.
-	 * 
-	 * @param samlResponse the SAML response
-	 * @param userIP the user IP
-	 * 
-	 * @return the assertion
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private Assertion validateStorkResponse(final Response samlResponse,
-			final String userIP) throws STORKSAMLEngineException {
-		// Exist only one Assertion
-
-		if (samlResponse.getAssertions() == null
-				|| samlResponse.getAssertions().isEmpty()) {
-			LOG.info("Assertion is null or empty."); //in replace of throw new STORKSAMLEngineException("Assertion is null or empty.")
-			return null;
-		}
-
-		final Assertion assertion = (Assertion) samlResponse.getAssertions()
-		.get(0);
-
-		LOG.debug("Verified method Bearer");
-		for (final Iterator<SubjectConfirmation> iter = assertion.getSubject()
-				.getSubjectConfirmations().iterator(); iter.hasNext();) {
-			final SubjectConfirmation element = iter.next();
-			final boolean isBearer = SubjectConfirmation.METHOD_BEARER
-			.equals(element.getMethod());
-
-			final boolean ipValidate = super.getSamlCoreProperties()
-			.isIpValidation();
-
-			if (ipValidate) {
-				if (isBearer) {
-					if (StringUtils.isBlank(userIP)) {
-						LOG.error("browser_ip is null or empty.");
-						throw new STORKSAMLEngineException(
-						"browser_ip is null or empty.");
-					} else if (StringUtils.isBlank(element
-							.getSubjectConfirmationData().getAddress())) {
-						LOG.error("token_ip attribute is null or empty.");
-						throw new STORKSAMLEngineException(
-						"token_ip attribute is null or empty.");
-					}
-				}
-
-				final boolean ipEqual = element.getSubjectConfirmationData()
-				.getAddress().equals(userIP);
-
-				// Validation ipUser
-				if (!ipEqual && ipValidate) {
-					LOG.error("SubjectConfirmation BEARER: ");
-					throw new STORKSAMLEngineException(
-							"IPs doesn't match : token_ip ("
-							+ element.getSubjectConfirmationData()
-							.getAddress() + ") browser_ip ("
-							+ userIP + ")");
-				}
-			}
-
-		}
-		return assertion;
-	}
-
-	/**
-	 * Validate stork SAML.
-	 * 
-	 * @param tokenSaml the token SAML
-	 * 
-	 * @return the signable SAML object
-	 * 
-	 * @throws STORKSAMLEngineException the STORKSAML engine exception
-	 */
-	private SignableSAMLObject validateStorkSaml(final byte[] tokenSaml)
-	throws STORKSAMLEngineException {
-
-		LOG.info("Validate StorkSaml message.");
-
-		if (tokenSaml == null) {
-			LOG.error("Saml authentication request is null.");
-			throw new STORKSAMLEngineException(
-			"Saml authentication request is null.");
-		}
-
-		LOG.debug("Generate AuthnRequest from request.");
-		SignableSAMLObject samlObject;
-
-		try {			
-			samlObject = (SignableSAMLObject) super.unmarshall(tokenSaml);
-		} catch (SAMLEngineException e) {
-			LOG.error("SAMLEngineException unmarshall.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		boolean validateSign = true;
-
-		if (StringUtils.isNotBlank(super.getSamlCoreProperties().getProperty(
-		"validateSignature"))) {
-			validateSign = Boolean.valueOf(super.getSamlCoreProperties()
-					.getProperty("validateSignature"));
-		}
-
-		if (validateSign) {
-			LOG.debug("Validate Signature.");
-			try {
-				super.validateSignature(samlObject);
-			} catch (SAMLEngineException e) {
-				LOG.error("SAMLEngineException validateSignature.", e);
-				throw new STORKSAMLEngineException(e);
-			}
-		}
-
-		LOG.debug("Validate Schema.");
-		final ValidatorSuite validatorSuite = Configuration
-		.getValidatorSuite("saml2-core-schema-validator");
-		try {			
-			if (samlObject.getElementQName().toString().endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
-			{
-				CustomAttributeQueryValidator val = 
-					new CustomAttributeQueryValidator();
-				val.validate((CustomAttributeQuery)samlObject);
-			}
-			else if (samlObject instanceof Response 
-					&& ((Response) samlObject).getAssertions().size() > 1) {
-							 MultipleAssertionResponseValidator val = 
-									 new MultipleAssertionResponseValidator();
-							 val.validate((Response)samlObject);
-			}
-			else
-				validatorSuite.validate(samlObject);
-		} catch (ValidationException e) {
-			LOG.error("ValidationException.", e);
-			throw new STORKSAMLEngineException(e);
-		}
-
-		return samlObject;
-	}
-	
-	private boolean isComplex(XMLObject xmlObject)
-	{
-		boolean isComplex = false;
-		
-		final XSAnyImpl complexValue = (XSAnyImpl) xmlObject;
-
-		for (int nextComplexValue = 0; nextComplexValue < complexValue
-				.getUnknownXMLObjects().size(); nextComplexValue++) {
-
-			final XSAnyImpl simple = (XSAnyImpl) complexValue
-					.getUnknownXMLObjects().get(
-							nextComplexValue);
-			
-			if (simple.getElementQName().getLocalPart() != null)
-			{
-				isComplex = true;
-				break;
-			}
-		}
-		
-		return isComplex;
-	}	
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java
deleted file mode 100644
index 724a522d1..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package eu.stork.peps.auth.engine;
-
-import org.bouncycastle.asn1.DERObjectIdentifier;
-import org.bouncycastle.jce.X509Principal;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Utility class used to decrease complexity of comparison of 2 X509principal
- *
- * @author vanegdi
- * @version $Revision: 1.00 $, $Date: 2013-05-24 20:53:51 $
- */
-public final class X509PrincipalUtil{
-
-    private static final DERObjectIdentifier[] DER_OBJECT_IDENTIFIERS_ARRAY= {
-            X509Principal.CN,
-            X509Principal.OU,
-            X509Principal.O,
-            X509Principal.L,
-            X509Principal.ST,
-            X509Principal.C,
-            X509Principal.E
-    };
-    
-    private static final Logger LOG = LoggerFactory.getLogger(eu.stork.peps.auth.engine.X509PrincipalUtil.class);
-
-    /**
-     * Compares 2 X509Principals to detect if they equals
-     * @param principal1
-     * @param principal2
-     * @return true if arguments are not null and equals
-     */
-    public static boolean equals(X509Principal principal1, X509Principal principal2) {
-        boolean continueProcess = true;
-        if (principal1 == null || principal2 == null){
-            return false;
-        }
-        
-        int cpt = 0;
-        while(continueProcess && cpt < DER_OBJECT_IDENTIFIERS_ARRAY.length){
-            continueProcess = continueProcess && x509ValuesByIdentifierEquals(principal1, principal2, DER_OBJECT_IDENTIFIERS_ARRAY[cpt]);
-            cpt++;
-        }
-        return continueProcess;
-    }
-    
-    public static boolean equals2(X509Principal principal1, X509Principal principal2) {
-        
-        if (principal1 == null || principal2 == null){
-            return false;
-        }
-        
-        if (principal1.getName().equals(principal2.getName()))
-        	return true;
-        else
-        	return false;
-        
-    }
-
-    private static boolean x509ValuesByIdentifierEquals(X509Principal principal1, X509Principal principal2, DERObjectIdentifier identifier){
-        return principal1.getValues(identifier).equals(principal2.getValues(identifier));
-    }
-
-    private X509PrincipalUtil(){
-        // default contructor
-        LOG.error("Fake X509PrincipalUtil : never be called");
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java
deleted file mode 100644
index a9efe6362..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface AuthenticationAttributes.
- * @author fjquevedo
- */
-public interface AuthenticationAttributes extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "AuthenticationAttributes";
-
-    /** Default element name. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** Local name of the XSI type. */
-    String TYPE_LOCAL_NAME = "AuthenticationAttributesType";
-
-    /** QName of the XSI type. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-
-    /**
-     * Gets the citizen country code.
-     * 
-     * @return the citizen country code
-     */
-    VIDPAuthenticationAttributes getVIDPAuthenticationAttributes();
-    
-
-    /**
-     * Sets the vIDP authentication attributes.
-     * 
-     * @param newVIDPAuthenticationAttr the new vIDP authentication attributes
-     */
-    void setVIDPAuthenticationAttributes(VIDPAuthenticationAttributes newVIDPAuthenticationAttr);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java
deleted file mode 100644
index 4af7524ea..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface EIDCrossBorderShare.
- * @author fjquevedo
- */
-public interface CitizenCountryCode extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "CitizenCountryCode";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "CitizenCountryCodeType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /**
-     * Gets the SP country.
-     * 
-     * @return the sP country
-     */
-    String getCitizenCountryCode();
-
-
-    /**
-     * Sets the citizen country code.
-     * 
-     * @param citizenCountryCode the new citizen country code
-     */
-    void setCitizenCountryCode(String citizenCountryCode);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java
deleted file mode 100644
index b558fc19d..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package eu.stork.peps.auth.engine.core;
-
-import java.util.List;
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.xml.SAMLConstants;
-import org.opensaml.saml2.core.Attribute;
-import org.opensaml.saml2.core.Subject;
-import org.opensaml.saml2.core.SubjectQuery;
-
-public interface CustomAttributeQuery extends CustomRequestAbstractType {
-	/** Element local name. */
-    public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeQuery";
-
-    /** Default element name. */
-    public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
-            SAMLConstants.SAML20P_PREFIX);
-
-    /** Local name of the XSI type. */
-    public static final String TYPE_LOCAL_NAME = "CustomAttributeQueryType";
-
-    /** QName of the XSI type. */
-    public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
-            SAMLConstants.SAML20P_PREFIX);
-    
-    /** AssertionConsumerServiceURL attribute name. */
-    public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME 
-    	= "AssertionConsumerServiceURL";
-
-    /**
-     * Gets the Attributes of this query.
-     * 
-     * @return the list of Attributes of this query
-     */
-    public List<Attribute> getAttributes();       
-    
-    /**
-     * Gets the Subject of this request.
-     * 
-     * @return the Subject of this request
-     */
-    public Subject getSubject();
-
-    /**
-     * Sets the Subject of this request.
-     * 
-     * @param newSubject the Subject of this request
-     */
-    public void setSubject(Subject newSubject);
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java
deleted file mode 100644
index 77dd8c4a5..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package eu.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.joda.time.DateTime;
-import org.opensaml.common.SAMLVersion;
-import org.opensaml.common.SignableSAMLObject;
-import org.opensaml.common.xml.SAMLConstants;
-import org.opensaml.saml2.common.Extensions;
-import org.opensaml.saml2.core.Issuer;
-
-public interface CustomRequestAbstractType extends SignableSAMLObject {
-	
-	/** Local name of the XSI type. */
-    public static final String TYPE_LOCAL_NAME = "RequestAbstractType";
-
-    /** QName of the XSI type. */
-    public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
-            SAMLConstants.SAML20P_PREFIX);
-
-    /** ID attribute name. */
-    public static final String ID_ATTRIB_NAME = "ID";
-
-    /** Version attribute name. */
-    public static final String VERSION_ATTRIB_NAME = "Version";
-
-    /** IssueInstant attribute name. */
-    public static final String ISSUE_INSTANT_ATTRIB_NAME = "IssueInstant";
-
-    /** Destination attribute name. */
-    public static final String DESTINATION_ATTRIB_NAME = "Destination";
-    
-    /** Destination attribute name. */
-    public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME = "AssertionConsumerServiceURL";
-
-    /** Consent attribute name. */
-    public static final String CONSENT_ATTRIB_NAME = "Consent";
-
-    /** Unspecified consent URI. */
-    public static final String UNSPECIFIED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unspecified";
-
-    /** Obtained consent URI. */
-    public static final String OBTAINED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:obtained";
-
-    /** Prior consent URI. */
-    public static final String PRIOR_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:prior";
-
-    /** Implicit consent URI. */
-    public static final String IMPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:current-implicit";
-
-    /** Explicit consent URI. */
-    public static final String EXPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:current-explicit";
-
-    /** Unavailable consent URI. */
-    public static final String UNAVAILABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unavailable";
-
-    /** Inapplicable consent URI. */
-    public static final String INAPPLICABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:inapplicable";
-
-    /**
-     * Gets the SAML Version of this request.
-     * 
-     * @return the SAML Version of this request.
-     */
-    public SAMLVersion getVersion();
-
-    /**
-     * Sets the SAML Version of this request.
-     * 
-     * @param newVersion the SAML Version of this request
-     */
-    public void setVersion(SAMLVersion newVersion);
-
-    /**
-     * Gets the unique identifier of the request.
-     * 
-     * @return the unique identifier of the request
-     */
-    public String getID();
-
-    /**
-     * Sets the unique identifier of the request.
-     * 
-     * @param newID the unique identifier of the request
-     */
-
-    public void setID(String newID);
-
-    /**
-     * Gets the date/time the request was issued.
-     * 
-     * @return the date/time the request was issued
-     */
-
-    public DateTime getIssueInstant();
-
-    /**
-     * Sets the date/time the request was issued.
-     * 
-     * @param newIssueInstant the date/time the request was issued
-     */
-    public void setIssueInstant(DateTime newIssueInstant);
-
-    /**
-     * Gets the URI of the destination of the request.
-     * 
-     * @return the URI of the destination of the request
-     */
-    public String getDestination();
-
-    /**
-     * Sets the URI of the destination of the request.
-     * 
-     * @param newDestination the URI of the destination of the request
-     */
-    public void setDestination(String newDestination);
-    
-    /**
-     * Sets the index of the particular Assertion Consumer Service to which the response to this request should be
-     * delivered.
-     * 
-     * @param newAssertionConsumerServiceIndex the new value of the AssertionConsumerServiceIndex attribute
-     */
-    public void setAssertionConsumerServiceURL(String newServiceUrl);
-
-    /**
-     * Gets the URL of the particular Assertion Consumer Service to which the response to this request should be
-     * delivered.
-     * 
-     * @return the value of the AssertionConsumerServiceURL attribute
-     */
-    public String getAssertionConsumerServiceURL();
-
-    /**
-     * Gets the consent obtained from the principal for sending this request.
-     * 
-     * @return the consent obtained from the principal for sending this request
-     */
-    public String getConsent();
-
-    /**
-     * Sets the consent obtained from the principal for sending this request.
-     * 
-     * @param newConsent the new consent obtained from the principal for sending this request
-     */
-    public void setConsent(String newConsent);
-
-    /**
-     * Gets the issuer of this request.
-     * 
-     * @return the issuer of this request
-     */
-    public Issuer getIssuer();
-
-    /**
-     * Sets the issuer of this request.
-     * 
-     * @param newIssuer the issuer of this request
-     */
-    public void setIssuer(Issuer newIssuer);
-
-    /**
-     * Gets the Extensions of this request.
-     * 
-     * @return the Status of this request
-     */
-    public Extensions getExtensions();
-
-    /**
-     * Sets the Extensions of this request.
-     * 
-     * @param newExtensions the Extensions of this request
-     */
-    public void setExtensions(Extensions newExtensions);
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java
deleted file mode 100644
index 03541ece1..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface EIDCrossBorderShare.
- * @author fjquevedo
- */
-public interface EIDCrossBorderShare extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "eIDCrossBorderShare";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "eIDCrossBorderShareType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-    
-   
-    /**
-     * Gets the eID cross border share.
-     *
-     * @return the eID cross border share
-     */
-    String getEIDCrossBorderShare();
-
-
-    /**
-     * Sets the eID cross border share.
-     *
-     * @param eIDCrossBorderShare the new eID cross border share
-     */
-    void setEIDCrossBorderShare(String eIDCrossBorderShare);
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java
deleted file mode 100644
index 14c504510..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface EIDCrossSectorShare.
- * @author fjquevedo
- */
-public interface EIDCrossSectorShare extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String ELEM_LOCAL_NAME = "eIDCrossSectorShare";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), ELEM_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "eIDCrossSectorShareType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-    
-    /**
-     * Gets the eID cross sector share.
-     *
-     * @return the eID cross sector share
-     */
-    String getEIDCrossSectorShare();
-
-    /**
-     * Sets the eID cross sector share.
-     *
-     * @param eIDCrossSectorShare the new eID cross sector share
-     */
-    void setEIDCrossSectorShare(String eIDCrossSectorShare);
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java
deleted file mode 100644
index 0202f000c..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface EIDSectorShare.
- * @author fjquevedo
- */
-public interface EIDSectorShare extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "eIDSectorShare";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "eIDSectorShare";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-    
-
-    /**
-     * Gets the eID sector share.
-     *
-     * @return the eID sector share
-     */
-    String getEIDSectorShare();
-
-    /**
-     * Sets the eID sector share.
-     *
-     * @param eIDSectorShare the new eID sector share
-     */
-    void setEIDSectorShare(String eIDSectorShare);
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java
deleted file mode 100644
index d99d23896..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * STORK Quality Authentication Assurance Level Attribute Interface.
- * 
- * @author fjquevedo
- */
-public interface QAAAttribute extends SAMLObject {
-
-    /** Element local name. */
-    String DEF_LOCAL_NAME = "QualityAuthenticationAssuranceLevel";
-
-    /** Default element name. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** Local name of the XSI type. */
-    String TYPE_LOCAL_NAME = "QualityAuthenticationAssuranceLevelAbstractType";
-
-    /** QName of the XSI type. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** The minimum value allowed. */
-    int MIN_VALUE = 1;
-
-    /** The Max value allowed. */
-    int MAX_VALUE = 4;
-
-    /**
-     * Gets the qAA level.
-     * 
-     * @return the qAA level
-     */
-    String getQaaLevel();
-
-    /**
-     * Sets the qAA level.
-     * 
-     * @param qaaLevel the new qAA level
-     * 
-     */
-    void setQaaLevel(String qaaLevel);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java
deleted file mode 100644
index ffd32b3cf..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-import org.opensaml.xml.AttributeExtensibleXMLObject;
-import org.opensaml.xml.schema.XSBooleanValue;
-import org.opensaml.xml.XMLObject;
-
-/**
- * The Interface RequestedAttribute.
- * 
- * @author fjquevedo
- */
-public interface RequestedAttribute extends SAMLObject,
-	AttributeExtensibleXMLObject {
-
-    /** Element local name. */
-    String DEF_LOCAL_NAME = "RequestedAttribute";
-
-    /** Default element name. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** Local name of the XSI type. */
-    String TYPE_LOCAL_NAME = "RequestedAttributeAbstractType";
-
-    /** QName of the XSI type. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** NAME_ATTRIB_NAME attribute name. */
-    String NAME_ATTRIB_NAME = "Name";
-
-    /** NAME_FORMAT_ATTRIB_NAME attribute name. */
-    String NAME_FORMAT_ATTR = "NameFormat";
-
-    /** IS_REQUIRED_ATTRIB_NAME attribute name. */
-    String IS_REQUIRED_ATTR = "isRequired";
-
-    /** FRIENDLY_NAME_ATTRIB_NAME attribute name. */
-    String FRIENDLY_NAME_ATT = "FriendlyName";
-
-    /** Unspecified attribute format ID. */
-    String UNSPECIFIED = "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified";
-
-    /** URI reference attribute format ID. */
-    String URI_REFERENCE = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri";
-
-    /** Basic attribute format ID. */
-    String BASIC = "urn:oasis:names:tc:SAML:2.0:attrname-format:basic";
-
-    /**
-     * Gets the name.
-     * 
-     * @return the name
-     */
-    String getName();
-
-    /**
-     * Sets the name.
-     * 
-     * @param name the new name
-     */
-    void setName(String name);
-
-    /**
-     * Gets the name format.
-     * 
-     * @return the name format
-     */
-    String getNameFormat();
-
-    /**
-     * Sets the name format.
-     * 
-     * @param nameFormat the new name format
-     */
-    void setNameFormat(String nameFormat);
-
-    /**
-     * Gets the friendly name.
-     * 
-     * @return the friendly name
-     */
-    String getFriendlyName();
-
-    /**
-     * Sets the friendly name.
-     * 
-     * @param friendlyName the new friendly name
-     */
-    void setFriendlyName(String friendlyName);
-
-    /**
-     * Gets the checks if is required.
-     * 
-     * @return the checks if is required
-     */
-    String isRequired();
-
-    /**
-     * Gets the checks if is required xs boolean.
-     * 
-     * @return the checks if is required xs boolean
-     */
-    String getIsRequiredXSBoolean();
-
-    /**
-     * Sets the checks if is required.
-     * 
-     * @param newIsRequired the new checks if is required
-     */
-    void setIsRequired(String newIsRequired);
-
-    /**
-     * Gets the attribute values.
-     * 
-     * @return the attribute values
-     */
-    List<XMLObject> getAttributeValues();
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java
deleted file mode 100644
index 6e3da28c3..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface RequestedAttributes.
- * 
- * @author fjquevedo
- */
-public interface RequestedAttributes extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "RequestedAttributes";
-
-    /** Default element name. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** Local name of the XSI type. */
-    String TYPE_LOCAL_NAME = "RequestedAttributesType";
-
-    /** QName of the XSI type. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /**
-     * Gets the attributes.
-     * 
-     * @return the attributes
-     */
-    List<RequestedAttribute> getAttributes();
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java
deleted file mode 100644
index cbedcf7d9..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-/**
- * The Enumeration SAMLCore.
- * 
- * @author fjquevedo
- */
-
-public enum SAMLCore {
-    
-    /** The consent authentication request. */
-    CONSENT_AUTHN_REQ("consentAuthnRequest"),
-    
-    /** The consent authentication response. */
-    CONSENT_AUTHN_RES("consentAuthnResponse"),
-    
-    /** The FORC e_ auth n_ tag. */
-    FORCE_AUTHN_TAG("forceAuthN"),
-    
-    /** The I s_ passiv e_ tag. */
-    IS_PASSIVE_TAG("isPassive"),
-    
-    /** The FORMA t_ entity. */
-    FORMAT_ENTITY("formatEntity"),
-    
-    /** The FRIENDLY name. */
-    FRIENDLY_NAME("friendlyName"),
-    
-    /** The IS_REQUIRED AN ATTRIBUTE */
-    IS_REQUIRED("isRequired"),
-    
-    /** The PRO t_ bindin g_ tag. */
-    PROT_BINDING_TAG("protocolBinding"),
-    
-    /** The ASSER t_ con s_ tag. */
-    ASSERT_CONS_TAG("assertionConsumerServiceURL"),
-    
-    /** The REQUESTE r_ tag. */
-    REQUESTER_TAG("requester"),
-    
-    /** The RESPONDE r_ tag. */
-    RESPONDER_TAG("responder"),
-    
-    /** The STOR k10_ ns. */
-    STORK10_NS("urn:eu:stork:names:tc:STORK:1.0:assertion"),
-    
-    /** The STOR k10 p_ ns. */
-    STORK10P_NS("urn:eu:stork:names:tc:STORK:1.0:protocol"),
-    
-    /** The STOR k10_ prefix. */
-    STORK10_PREFIX("stork"),
-    
-    /** The STOR k10 p_ prefix. */
-    STORK10P_PREFIX("storkp"),
-    
-    /** The STOR k10_ bas e_ uri. */
-    STORK10_BASE_URI("http://www.stork.gov.eu/1.0/"),
-    
-    /** The ON e_ tim e_ use. */
-    ONE_TIME_USE("oneTimeUse");
-
-    /** The value. */
-    private String value;
-
-    /**
-     * Instantiates a new sAML core.
-     * 
-     * @param fullName the full name
-     */
-    private SAMLCore(final String fullName) {
-	this.value = fullName;
-    }	
-    
-    /**
-     * Gets the value.
-     * 
-     * @return the value
-     */
-    public String getValue() {
-	return value;
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java
deleted file mode 100644
index e846983d8..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import java.security.KeyStore;
-import java.security.cert.X509Certificate;
-
-import org.opensaml.common.SAMLObject;
-import org.opensaml.common.SignableSAMLObject;
-
-import eu.stork.peps.exceptions.SAMLEngineException;
-
-/**
- * The Interface SAMLEngineSignI.
- * 
- * @author fjquevedo
- */
-public interface SAMLEngineSignI {
-
-    /**
-     * Sign.
-     * 
-     * @param tokenSaml the token SAML
-     * 
-     * @return the sAML object
-     * 
-     * @throws SAMLEngineException the SAML engine exception
-     */
-    SAMLObject sign(SignableSAMLObject tokenSaml) throws SAMLEngineException;
-
-    /**
-     * Gets the certificate.
-     * 
-     * @return the certificate
-     */
-    X509Certificate getCertificate();
-
-    /**
-     * Gets the trustStore used when validating SAMLTokens
-     * 
-     * @return the trustStore
-     *   
-     */
-	KeyStore getTrustStore();
-	
-    /**
-     * Validate signature.
-     * 
-     * @param tokenSaml the token SAML
-     * 
-     * @return the sAML object
-     * 
-     * @throws SAMLEngineException the SAML engine exception
-     */
-    SAMLObject validateSignature(SignableSAMLObject tokenSaml)
-	    throws SAMLEngineException;
-
-    /**
-     * Initialize the signature module.
-     * 
-     * @param fileConf the configuration file.
-     * 
-     * @throws SAMLEngineException the STORKSAML engine runtime
-     *             exception
-     */
-    void init(String fileConf) throws SAMLEngineException;
-
-    /**
-     * Load cryptographic service provider.
-     * 
-     * @throws SAMLEngineException the SAML engine exception
-     */
-    void loadCryptServiceProvider() throws SAMLEngineException;
-    
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java
deleted file mode 100644
index 9510bf790..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface SPApplication.
- * 
- * @author fjquevedo
- */
-public interface SPApplication extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "spApplication";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "spApplicationType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /**
-     * Gets the service provider application.
-     * 
-     * @return the service provider application
-     */
-    String getSPApplication();
-
-    /**
-     * Sets the service provider application.
-     * 
-     * @param spApplication the new service provider application
-     */
-    void setSPApplication(String spApplication);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java
deleted file mode 100644
index 829ace878..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface SPCountry.
- * 
- * @author fjquevedo
- */
-public interface SPCountry extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "spCountry";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "spCountryType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /**
-     * Gets the service provider country.
-     * 
-     * @return the service provider country
-     */
-    String getSPCountry();
-
-    /**
-     * Sets the service provider country.
-     * 
-     * @param spCountry the new service provider country
-     */
-    void setSPCountry(String spCountry);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPID.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPID.java
deleted file mode 100644
index bd13f6dbf..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPID.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface EIDCrossBorderShare.
- * @author iinigo
- */
-public interface SPID extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "SPID";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "SPIDType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /**
-     * Gets the SP ID.
-     * 
-     * @return the SP ID
-     */
-    String getSPID();
-
-
-    /**
-     * Sets the SP ID.
-     * 
-     * @param SPID the new SP ID
-     */
-    void setSPID(String newSPID);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java
deleted file mode 100644
index bc870c2cc..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface EIDCrossBorderShare.
- * @author iinigo
- */
-public interface SPInformation extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "SPInformation";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "SPInformationType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /**
-     * Gets the SP Id.
-     * 
-     * @return the SP Id
-     */
-    SPID getSPID();
-
-
-    /**
-     * Sets the SP Id.
-     * 
-     * @param newSPId the new SP Id
-     */
-    void setSPID(SPID newSPID);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java
deleted file mode 100644
index add45023c..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface EIDCrossBorderShare.
- * 
- * @author fjquevedo
- */
-public interface SPInstitution extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "spInstitution";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "spInstitutionType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /**
-     * Gets the service provider institution.
-     * 
-     * @return the service provider institution
-     */
-    String getSPInstitution();
-
-    /**
-     * Sets the service provider institution.
-     * 
-     * @param spInstitution the new service provider institution
-     */
-    void setSPInstitution(String spInstitution);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java
deleted file mode 100644
index 8322a0d47..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface SPSector.
- * 
- * @author fjquevedo
- */
-public interface SPSector extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "spSector";
-
-    /** The Constant DEFAULT_ELEMENT_NAME. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /** The Constant TYPE_LOCAL_NAME. */
-    String TYPE_LOCAL_NAME = "spSectorType";
-
-    /** The Constant TYPE_NAME. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10_PREFIX.getValue());
-
-    /**
-     * Gets the service provider sector.
-     * 
-     * @return the service provider sector
-     */
-    String getSPSector();
-
-    /**
-     * Sets the service provider sector.
-     * 
-     * @param spSector the new service provider sector
-     */
-    void setSPSector(String spSector);
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java
deleted file mode 100644
index 4c314ae68..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java
+++ /dev/null
@@ -1,508 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import java.util.Properties;
-
-import org.apache.commons.lang.StringUtils;
-import org.opensaml.common.xml.SAMLConstants;
-import org.opensaml.saml2.core.NameIDType;
-import org.opensaml.saml2.core.RequestAbstractType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.exceptions.SAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
-
-/**
- * The Class SAMLCore.
- *
- * @author fjquevedo
- */
-public final class STORKSAMLCore {
-
-    /** The Constant LOGGER. */
-    private static final Logger LOGGER = LoggerFactory
-    .getLogger(STORKSAMLCore.class.getName());
-
-    /** The consent authentication request. */
-    private String consentAuthnReq = null;
-
-    /** The consent authentication response. */
-    private String consentAuthnResp = null;
-
-    /** The id cross border share. */
-    private String eIDCrossBordShare = null;
-
-    /** The e id cross sect share. */
-    private String eIDCrossSectShare = null;
-
-    /** The e id sector share. */
-    private String eIDSectorShare = null;
-
-    /** The format entity. */
-    private String formatEntity = null;
-
-    /** The friendly name. */
-    private boolean friendlyName = false;
-
-    /** The IP validation. */
-    private boolean ipValidation = false;
-
-    /** The one time use. */
-    private boolean oneTimeUse = true;
-
-    /** The protocol binding. */
-    private String protocolBinding = null;
-
-    /** The requester. */
-    private String requester = null;
-
-
-    /** The responder. */
-    private String responder = null;
-
-    /** The SAML core properties. */
-    private Properties samlCoreProp = null;
-
-    /** The time not on or after. */
-    private Integer timeNotOnOrAfter = null;
-
-    /** The is required parameter. */
-    private boolean isRequired = true;
-
-    private static final String SAML_ENGINE_LITERAL = "SamlEngine.xml: ";
-
-    /**
-    * Gets the isRequired.
-    *
-    * @return the isRequired
-    */
-    public boolean isRequired() {
-    	return isRequired;
-	}
-
-    /**
-     * Sets the isRequired.
-     *
-     * @param isRequired the required.
-     */
-	public void setRequired(boolean isRequired) {
-		this.isRequired = isRequired;
-	}
-
-	/**
-     * Instantiates a new sAML core.
-     *
-     * @param instance the instance
-     */
-    public STORKSAMLCore(final Properties instance) {
-	loadConfiguration(instance);
-    }
-
-    /**
-     * Gets the consent.
-     * 
-     * @return the consent
-     */
-    public String getConsentAuthnRequest() {
-	return consentAuthnReq;
-    }
-
-    /**
-     * Gets the consent authentication response.
-     * 
-     * @return the consent authentication response.
-     */
-    public String getConsentAuthnResp() {
-	return consentAuthnResp;
-    }
-
-    /**
-     * Gets the consent authentication response.
-     * 
-     * @return the consent authentication response
-     */
-    public String getConsentAuthnResponse() {
-	return consentAuthnResp;
-    }
-
-    /**
-     * Gets the format entity.
-     * 
-     * @return the format entity
-     */
-    public String getFormatEntity() {
-	return formatEntity;
-    }
-
-    /**
-     * Gets the property.
-     * 
-     * @param key the key
-     * 
-     * @return the property
-     */
-    public String getProperty(final String key) {
-	return samlCoreProp.getProperty(key);
-    }
-
-    /**
-     * Gets the protocol binding.
-     * 
-     * @return the protocol binding
-     */
-    public String getProtocolBinding() {
-	return protocolBinding;
-    }
-
-    /**
-     * Gets the requester.
-     * 
-     * @return the requester
-     */
-    public String getRequester() {
-	return requester;
-    }
-
-    /**
-     * Gets the responder.
-     * 
-     * @return the responder
-     */
-    public String getResponder() {
-	return responder;
-    }
-
-    /**
-     * Gets the time not on or after.
-     * 
-     * @return the time not on or after
-     */
-    public Integer getTimeNotOnOrAfter() {
-	return timeNotOnOrAfter;
-    }
-
-    /**
-     * Checks if is e id cross border share.
-     * 
-     * @return true, if is e id cross border share
-     */
-    public String iseIDCrossBorderShare() {
-	return eIDCrossBordShare;
-    }
-
-    /**
-     * Checks if is e id cross border share.
-     * 
-     * @return true, if is e id cross border share
-     */
-    public String iseIDCrossBordShare() {
-	return eIDCrossBordShare;
-    }
-
-    /**
-     * Checks if is e id cross sector share.
-     * 
-     * @return true, if is e id cross sector share
-     */
-    public String iseIDCrossSectorShare() {
-	return eIDCrossSectShare;
-    }
-
-    /**
-     * Checks if is e id cross sect share.
-     * 
-     * @return true, if is e id cross sect share
-     */
-    public String iseIDCrossSectShare() {
-	return eIDCrossSectShare;
-    }
-
-    /**
-     * Checks if is e id sector share.
-     * 
-     * @return true, if is e id sector share
-     */
-    public String iseIDSectorShare() {
-	return eIDSectorShare;
-    }
-
-    /**
-     * Checks if is friendly name.
-     * 
-     * @return true, if checks if is friendly name
-     */
-    public boolean isFriendlyName() {
-	return friendlyName;
-    }
-
-    /**
-     * Checks if is IP validation.
-     * 
-     * @return true, if is IP validation
-     */
-    public boolean isIpValidation() {
-	return ipValidation;
-    }
-
-    /**
-     * Checks if is one time use.
-     * 
-     * @return true, if is one time use
-     */
-    public boolean isOneTimeUse() {
-	return oneTimeUse;
-    }
-
-    /**
-     * Method that loads the configuration file for the SAML Engine.
-     * 
-     * @param instance the instance of the Engine properties.
-     */
-    private void loadConfiguration(final Properties instance) {
-
-        try {
-            LOGGER.info("SAMLCore: Loading SAMLEngine properties.");
-
-            samlCoreProp = instance;
-
-            final String parameter = samlCoreProp
-                    .getProperty(SAMLCore.FORMAT_ENTITY.getValue());
-
-            if ("entity".equalsIgnoreCase(parameter)) {
-                formatEntity = NameIDType.ENTITY;
-            }
-
-            friendlyName = Boolean.valueOf(samlCoreProp
-                    .getProperty(SAMLCore.FRIENDLY_NAME.getValue()));
-
-            String isRequiredValue = samlCoreProp.
-                    getProperty(SAMLCore.IS_REQUIRED.getValue());
-            if (isRequiredValue != null) {
-                isRequired = Boolean.valueOf(isRequiredValue);
-            }
-
-            eIDSectorShare = samlCoreProp
-                    .getProperty("eIDSectorShare");
-            eIDCrossSectShare = samlCoreProp
-                    .getProperty("eIDCrossSectorShare");
-            eIDCrossBordShare = samlCoreProp
-                    .getProperty("eIDCrossBorderShare");
-
-            ipValidation = Boolean.valueOf(samlCoreProp
-                    .getProperty("ipAddrValidation"));
-
-            final String oneTimeUseProp = samlCoreProp
-                    .getProperty(SAMLCore.ONE_TIME_USE.getValue());
-
-            if (StringUtils.isNotBlank(oneTimeUseProp)) {
-                oneTimeUse = Boolean.valueOf(oneTimeUseProp);
-            }
-
-            // Protocol Binding
-            loadProtocolBiding();
-
-            // Consent Authentication Request
-            consentAuthnReq = samlCoreProp
-                    .getProperty(SAMLCore.CONSENT_AUTHN_REQ.getValue());
-
-            if ("unspecified".equalsIgnoreCase(consentAuthnReq)) {
-                consentAuthnReq = RequestAbstractType.UNSPECIFIED_CONSENT;
-            }
-
-            loadConsentAuthResp();
-
-            timeNotOnOrAfter = Integer.valueOf(samlCoreProp
-                    .getProperty("timeNotOnOrAfter"));
-
-            if (timeNotOnOrAfter.intValue() < 0) {
-                LOGGER.error(SAML_ENGINE_LITERAL + "timeNotOnOrAfter"
-                        + " is negative number.");
-
-                throw new SAMLEngineException(SAML_ENGINE_LITERAL
-                        + "timeNotOnOrAfter" + " is negative number.");
-            }
-
-            requester = samlCoreProp.getProperty(SAMLCore.REQUESTER_TAG.getValue());
-            responder = samlCoreProp.getProperty(SAMLCore.RESPONDER_TAG.getValue());
-
-        } catch (SAMLEngineException e) {
-            LOGGER.error("SAMLCore: error loadConfiguration. ", e);
-            throw new STORKSAMLEngineRuntimeException(e);
-        } catch (RuntimeException e) {
-            LOGGER.error("SAMLCore: error loadConfiguration. ", e);
-            throw new STORKSAMLEngineRuntimeException(e);
-        }
-    }
-
-    /**
-     * Load consent authentication response.
-     */
-    private void loadConsentAuthResp() {
-	// Consent Authentication Response
-	consentAuthnResp = samlCoreProp
-		.getProperty(SAMLCore.CONSENT_AUTHN_RES.getValue());
-
-	if ("obtained".equalsIgnoreCase(consentAuthnResp)) {
-	    consentAuthnResp = RequestAbstractType.OBTAINED_CONSENT;
-	} else if ("prior".equalsIgnoreCase(consentAuthnResp)) {
-	    consentAuthnResp = RequestAbstractType.PRIOR_CONSENT;
-	} else if ("curent-implicit".equalsIgnoreCase(consentAuthnResp)) {
-	    consentAuthnResp = 
-		"urn:oasis:names:tc:SAML:2.0:consent:current-implicit";
-	} else if ("curent-explicit".equalsIgnoreCase(consentAuthnResp)) {
-	    consentAuthnResp = 
-		"urn:oasis:names:tc:SAML:2.0:consent:current-explicit";
-	} else if ("unspecified".equalsIgnoreCase(consentAuthnResp)) {
-	    consentAuthnResp = RequestAbstractType.UNSPECIFIED_CONSENT;
-	}
-    }
-
-    /**
-     * Load protocol biding.
-     * 
-     * @throws SAMLEngineException the SAML engine exception
-     */
-    private void loadProtocolBiding() throws SAMLEngineException {
-	// Protocol Binding
-	protocolBinding = samlCoreProp.getProperty(SAMLCore.PROT_BINDING_TAG.getValue());
-
-	if (StringUtils.isBlank(protocolBinding)) {
-	    LOGGER.error(SAML_ENGINE_LITERAL + SAMLCore.PROT_BINDING_TAG
-		    + " it's mandatory.");
-	    throw new SAMLEngineException(SAML_ENGINE_LITERAL
-		    + SAMLCore.PROT_BINDING_TAG + " it's mandatory.");
-	} else if (protocolBinding.equalsIgnoreCase("HTTP-POST")) {
-	    protocolBinding = SAMLConstants.SAML2_POST_BINDING_URI;
-	} else {
-	    LOGGER.error(SAML_ENGINE_LITERAL + SAMLCore.PROT_BINDING_TAG
-		    + " it's not supporting.");
-
-	    throw new SAMLEngineException(SAML_ENGINE_LITERAL
-		    + SAMLCore.PROT_BINDING_TAG + " it's not supporting.");
-	}
-    }
-
-    /**
-     * Sets the consent authentication response.
-     * 
-     * @param newConsAuthnResp the new consent authentication response
-     */
-    public void setConsentAuthnResp(final String newConsAuthnResp) {
-	this.consentAuthnResp = newConsAuthnResp;
-    }
-
-    /**
-     * Sets an eID that can be shared outside of the  Service Provider’s member state.
-     * 
-     * @param newEIDCrossBord the new eid cross border share
-     */
-    public void setEIDCrossBordShare(final String newEIDCrossBord) {
-	this.eIDCrossBordShare = newEIDCrossBord;
-    }
-
-    /**
-     * Sets an eID that can be shared outside of the  Service Provider’s sector.
-     * 
-     * @param newEIDCrossSect the new eid cross sect share
-     */
-    public void setEIDCrossSectShare(final String newEIDCrossSect) {
-	this.eIDCrossSectShare = newEIDCrossSect;
-    }
-
-    /**
-     * Sets an eID that can be shared within the Service Provider’s sector.
-     * 
-     * @param newEIDSectorShare the new eid sector share
-     */
-    public void seteIDSectorShare(final String newEIDSectorShare) {
-	this.eIDSectorShare = newEIDSectorShare;
-    }
-
-    /**
-     * Sets the format entity.
-     * 
-     * @param newFormatEntity the new format entity
-     */
-    public void setFormatEntity(final String newFormatEntity) {
-	this.formatEntity = newFormatEntity;
-    }
-
-    /**
-     * Sets the friendly name.
-     * 
-     * @param newFriendlyName the new friendly name
-     */
-    public void setFriendlyName(final boolean newFriendlyName) {
-	this.friendlyName = newFriendlyName;
-    }
-
-    /**
-     * Sets the IP validation.
-     * 
-     * @param newIpValidation the new IP validation
-     */
-    public void setIpValidation(final boolean newIpValidation) {
-	this.ipValidation = newIpValidation;
-    }
-
-    /**
-     * Sets the one time use.
-     * 
-     * @param newOneTimeUse the new one time use
-     */
-    public void setOneTimeUse(final boolean newOneTimeUse) {
-	this.oneTimeUse = newOneTimeUse;
-    }
-
-    /**
-     * Sets the protocol binding.
-     * 
-     * @param newProtBinding the new protocol binding
-     */
-    public void setProtocolBinding(final String newProtBinding) {
-	this.protocolBinding = newProtBinding;
-    }
-
-    /**
-     * Sets the requester.
-     * 
-     * @param newRequester the new requester
-     */
-    public void setRequester(final String newRequester) {
-	this.requester = newRequester;
-    }
-
-    /**
-     * Sets the responder.
-     * 
-     * @param newResponder the new responder
-     */
-    public void setResponder(final String newResponder) {
-	this.responder = newResponder;
-    }
-
-    /**
-     * Sets the time not on or after.
-     * 
-     * @param newTimeNotOnOrAft the new time not on or after
-     */
-    public void setTimeNotOnOrAfter(final Integer newTimeNotOnOrAft) {
-	this.timeNotOnOrAfter = newTimeNotOnOrAft;
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java
deleted file mode 100644
index 6ee9e0e1b..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.SAMLObject;
-
-/**
- * The Interface VIDPAuthenticationAttributes.
- * 
- * @author fjquevedo
- */
-public interface VIDPAuthenticationAttributes extends SAMLObject {
-
-    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
-    String DEF_LOCAL_NAME = "VIDPAuthenticationAttributes";
-
-    /** Default element name. */
-    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-    /** Local name of the XSI type. */
-    String TYPE_LOCAL_NAME = "VIDPAuthenticationAttributesType";
-
-    /** QName of the XSI type. */
-    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
-	    SAMLCore.STORK10P_PREFIX.getValue());
-
-
-    /**
-     * Gets the citizen country code.
-     * 
-     * @return the citizen country code
-     */
-    CitizenCountryCode getCitizenCountryCode();
-    
-    /**
-     * Sets the citizen country code.
-     * 
-     * @param newCitizenCountryCode the new citizen country code
-     */
-    void setCitizenCountryCode(CitizenCountryCode newCitizenCountryCode);
-    
-    /**
-     * Gets the SP information
-     * 
-     * @return the SP information
-     */
-    SPInformation getSPInformation();
-    
-    /**
-     * Sets the SP information
-     * 
-     * @param newSPInformation the new SPInformation
-     */
-    void setSPInformation(SPInformation newSPInformation);
-     
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java
deleted file mode 100644
index 2d9039d4c..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
-
-/**
- * The Class AuthenticationAttributesBuilder.
- * 
- * @author fjquevedo
- */
-public class AuthenticationAttributesBuilder extends
-	AbstractSAMLObjectBuilder<AuthenticationAttributes> {
-
-
-
-    /**
-     * Builds the object.
-     *
-     * @return the authentication attributes
-     */
-    public final AuthenticationAttributes buildObject() {
-	return buildObject(AuthenticationAttributes.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * 
-     * @return the authentication attributes 
-     */
-    public final AuthenticationAttributes buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new AuthenticationAttributesImpl(namespaceURI, localName,
-		namespacePrefix);
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java
deleted file mode 100644
index e0de20f7d..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSignableSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
-import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class AuthenticationAttributesImpl.
- * 
- * @author fjquevedo
- */
-public final class AuthenticationAttributesImpl extends AbstractSignableSAMLObject implements
-AuthenticationAttributes {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(AuthenticationAttributesImpl.class.getName());
-
-    /** The indexed children. */
-    private VIDPAuthenticationAttributes vIDPAuthenAttr;
-
-    /**
-     * Instantiates a new authentication attributes implementation.
-     * 
-     * @param namespaceURI the namespace uri
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected AuthenticationAttributesImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {	
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-
-    /**
-     * Gets the ordered children.
-     * 
-     * @return the ordered children
-     * 
-     */
-    public List<XMLObject> getOrderedChildren() {
-	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
-
-	children.add(vIDPAuthenAttr);
-
-	if (getSignature() != null) {
-	    children.add(getSignature());
-	}
-
-	return Collections.unmodifiableList(children);
-    }
-
-    /**
-     * Gets the signature reference id.
-     * 
-     * @return the signature reference id
-     * 
-     */
-    public String getSignatureReferenceID() {	
-	return null;
-    }
-
-    /**
-     * Gets the vidp authentication attributes.
-     * 
-     * @return the VIDP authentication attributes
-     *
-     */
-    public VIDPAuthenticationAttributes getVIDPAuthenticationAttributes() {	
-	return vIDPAuthenAttr;
-    }
-
-    /**
-     * Sets the vidp authentication attributes.
-     * 
-     * @param newVIDPAuthenAttr the new vidp authen attr
-     *
-     */
-    public void setVIDPAuthenticationAttributes(
-	    final VIDPAuthenticationAttributes newVIDPAuthenAttr) {	
-	vIDPAuthenAttr = prepareForAssignment(this.vIDPAuthenAttr, newVIDPAuthenAttr);
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java
deleted file mode 100644
index d31c052fe..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed under the EUPL, Version 1.1 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 at:
- *
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- *
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-
-/**
- * The Class AuthenticationAttributesMarshaller.
- *
- * @author fjquevedo
- */
-public class AuthenticationAttributesMarshaller extends AbstractSAMLObjectMarshaller {
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java
deleted file mode 100644
index 113214712..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.UnmarshallingException;
-
-import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
-
-import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
-
-/**
- * The Class AuthenticationAttributesUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class AuthenticationAttributesUnmarshaller extends
-AbstractSAMLObjectUnmarshaller {
-
-	/**
-	 * Process child element.
-	 * 
-	 * @param parentObject the parent object
-	 * @param childObject the child object
-	 * 
-	 * @throws UnmarshallingException the unmarshalling exception
-	 *
-	 */
-	protected final void processChildElement(final XMLObject parentObject,
-			final XMLObject childObject) throws UnmarshallingException {
-		final AuthenticationAttributes attrStatement = (AuthenticationAttributes) parentObject;
-
-		if (childObject instanceof VIDPAuthenticationAttributes) {
-			attrStatement.setVIDPAuthenticationAttributes((VIDPAuthenticationAttributes) childObject);
-		} else {
-			super.processChildElement(parentObject, childObject);
-		}
-	}
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java
deleted file mode 100644
index 64651691f..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.CitizenCountryCode;
-
-/**
- * The Class CitizenCountryCodeBuilder.
- * 
- * @author fjquevedo
- */
-public class CitizenCountryCodeBuilder extends AbstractSAMLObjectBuilder<CitizenCountryCode> {
-
-    /**
-     * Builds the object.
-     *
-     * @return the citizen country code
-     */
-    public final CitizenCountryCode buildObject() {
-	return buildObject(CitizenCountryCode.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the citizen country code
-     */
-    public final CitizenCountryCode buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new CitizenCountryCodeImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java
deleted file mode 100644
index 374398cf1..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.CitizenCountryCode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class CitizenCountryCodeImpl.
- * 
- * @author fjquevedo
- */
-public class CitizenCountryCodeImpl extends AbstractSAMLObject implements CitizenCountryCode {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(CitizenCountryCodeImpl.class.getName());
-    /** The citizen country code. */
-    private String citizenCountryCode;
-    
-    /**
-     * Instantiates a new sP country impl.
-     * 
-     * @param namespaceURI the namespace uri
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */   
-    protected CitizenCountryCodeImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);	
-    }
-
-    /**
-     * Gets the citizen country code.
-     *
-     * @return the citizen country code
-     */
-    public final String getCitizenCountryCode() {
-	return citizenCountryCode;
-    }
-
-    /**
-     * Sets the citizen country code.
-     *
-     * @param newCitizenCountryCode the new citizen country code
-     */
-    public final void setCitizenCountryCode(final String newCitizenCountryCode) {
-	this.citizenCountryCode = prepareForAssignment(this.citizenCountryCode, newCitizenCountryCode);
-    }
-
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java
deleted file mode 100644
index decae04c5..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.CitizenCountryCode;
-
-/**
- * The Class SPCountryMarshaller.
- * 
- * @author fjquevedo
- */
-public class CitizenCountryCodeMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall element content.
-     *
-     * @param samlObject the SAML object
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallElementContent(final XMLObject samlObject,
-	    final Element domElement) throws MarshallingException {
-	final CitizenCountryCode citizenCountryCode = (CitizenCountryCode) samlObject;
-	XMLHelper.appendTextContent(domElement, citizenCountryCode.getCitizenCountryCode());
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java
deleted file mode 100644
index 93132b508..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.CitizenCountryCode;
-
-/**
- * The Class CitizenCountryCodeUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class CitizenCountryCodeUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process element content.
-     *
-     * @param samlObject the SAML object
-     * @param elementContent the element content
-     */
-    protected final void processElementContent(final XMLObject samlObject,
-	    final String elementContent) {
-	final CitizenCountryCode citizenCountryCode = (CitizenCountryCode) samlObject;
-	citizenCountryCode.setCitizenCountryCode(elementContent);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java
deleted file mode 100644
index 48da2a24b..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package eu.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-import org.opensaml.common.xml.SAMLConstants;
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-
-public class CustomAttributeQueryBuilder extends AbstractSAMLObjectBuilder<CustomAttributeQuery> {
-	/**
-     * Constructor.
-     */
-    public CustomAttributeQueryBuilder() {
-
-    }
-
-    /** {@inheritDoc} */
-    public CustomAttributeQuery buildObject() {
-        return buildObject(SAMLConstants.SAML20P_NS, CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME,
-                SAMLConstants.SAML20P_PREFIX);
-    }
-
-    /** {@inheritDoc} */
-    public CustomAttributeQuery buildObject(String namespaceURI, String localName, String namespacePrefix) {
-        return new CustomAttributeQueryImpl(namespaceURI, localName, namespacePrefix);
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java
deleted file mode 100644
index cbf9221eb..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package eu.stork.peps.auth.engine.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.opensaml.saml2.core.Attribute;
-import org.opensaml.saml2.core.impl.SubjectQueryImpl;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.util.XMLObjectChildrenList;
-
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-
-
-public class CustomAttributeQueryImpl extends SubjectQueryImpl implements CustomAttributeQuery {
-	/** Attribute child elements. */
-    private final XMLObjectChildrenList<Attribute> attributes;
-    private String serviceURL;
-
-    /**
-     * Constructor.
-     * 
-     * @param namespaceURI the namespace the element is in
-     * @param elementLocalName the local name of the XML element this Object represents
-     * @param namespacePrefix the prefix for the given namespace
-     */
-    protected CustomAttributeQueryImpl(String namespaceURI, String elementLocalName, String namespacePrefix) {
-        super(namespaceURI, elementLocalName, namespacePrefix);
-        attributes = new XMLObjectChildrenList<Attribute>(this);
-    }
-
-    /** {@inheritDoc} */
-    public List<Attribute> getAttributes() {
-        return attributes;
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        ArrayList<XMLObject> children = new ArrayList<XMLObject>();
-
-        if (super.getOrderedChildren() != null) {
-            children.addAll(super.getOrderedChildren());
-        }
-        children.addAll(attributes);
-
-        if (children.size() == 0) {
-            return null;
-        }
-
-        return Collections.unmodifiableList(children);
-    }
-
-	@Override
-	public String getAssertionConsumerServiceURL() {
-		// TODO Auto-generated method stub
-		return this.serviceURL;
-	}
-
-	@Override
-	public void setAssertionConsumerServiceURL(String newServiceUrl) {
-		// TODO Auto-generated method stub
-		this.serviceURL = newServiceUrl;
-	}
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java
deleted file mode 100644
index 7f2013ca8..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package eu.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.Configuration;
-import org.opensaml.saml2.core.RequestAbstractType;
-import org.opensaml.saml2.core.impl.SubjectQueryMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.CustomRequestAbstractType;
-
-public class CustomAttributeQueryMarshaller extends SubjectQueryMarshaller {
-	
-	/** {@inheritDoc} */
-    protected void marshallAttributes(XMLObject samlObject, Element domElement) throws MarshallingException {
-        CustomRequestAbstractType req = (CustomRequestAbstractType) samlObject;
-
-        if (req.getVersion() != null) {
-            domElement.setAttributeNS(null, RequestAbstractType.VERSION_ATTRIB_NAME, req.getVersion().toString());
-        }
-
-        if (req.getID() != null) {
-            domElement.setAttributeNS(null, RequestAbstractType.ID_ATTRIB_NAME, req.getID());
-            domElement.setIdAttributeNS(null, RequestAbstractType.ID_ATTRIB_NAME, true);
-        }
-
-        if (req.getVersion() != null) {
-            domElement.setAttributeNS(null, RequestAbstractType.VERSION_ATTRIB_NAME, req.getVersion().toString());
-        }
-
-        if (req.getIssueInstant() != null) {
-            String iiStr = Configuration.getSAMLDateFormatter().print(req.getIssueInstant());
-            domElement.setAttributeNS(null, RequestAbstractType.ISSUE_INSTANT_ATTRIB_NAME, iiStr);
-        }
-
-        if (req.getDestination() != null) {
-            domElement.setAttributeNS(null, RequestAbstractType.DESTINATION_ATTRIB_NAME, req.getDestination());
-        }
-        
-        if (req.getAssertionConsumerServiceURL() != null) {
-            domElement.setAttributeNS(null, CustomRequestAbstractType.ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME, req.getAssertionConsumerServiceURL());
-        }
-
-        if (req.getConsent() != null) {
-            domElement.setAttributeNS(null, RequestAbstractType.CONSENT_ATTRIB_NAME, req.getConsent());
-        }
-    }
-
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java
deleted file mode 100644
index e351b65b0..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package eu.stork.peps.auth.engine.core.impl;
-
-import org.joda.time.DateTime;
-import org.joda.time.chrono.ISOChronology;
-import org.opensaml.common.SAMLVersion;
-import org.opensaml.common.xml.SAMLConstants;
-import org.opensaml.saml2.core.Attribute;
-import org.opensaml.saml2.core.RequestAbstractType;
-import org.opensaml.saml2.core.impl.SubjectQueryUnmarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.AbstractXMLObjectUnmarshaller;
-import org.opensaml.xml.io.UnmarshallingException;
-import org.opensaml.xml.util.DatatypeHelper;
-import org.opensaml.xml.util.XMLHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-import eu.stork.peps.auth.engine.core.CustomRequestAbstractType;
-
-public class CustomAttributeQueryUnmarshaller extends SubjectQueryUnmarshaller {
-	
-	private final Logger log = LoggerFactory.getLogger(AbstractXMLObjectUnmarshaller.class);
-	/** {@inheritDoc} */
-    protected void processChildElement(XMLObject parentSAMLObject, XMLObject childSAMLObject)
-            throws UnmarshallingException {
-        CustomAttributeQuery query = (CustomAttributeQuery) parentSAMLObject;
-
-        if (childSAMLObject instanceof Attribute) {
-            query.getAttributes().add((Attribute) childSAMLObject);
-        } else {
-            super.processChildElement(parentSAMLObject, childSAMLObject);
-        }
-    }
-    
-    /** {@inheritDoc} */
-    public XMLObject unmarshall(Element domElement) throws UnmarshallingException {
-        if (log.isTraceEnabled()) {
-            log.trace("Starting to unmarshall DOM element {}", XMLHelper.getNodeQName(domElement));
-        }
-        
-        checkElementIsTarget(domElement);
-
-        //String namespaceURI, String elementLocalName, String namespacePrefix
-        XMLObject xmlObject = new CustomAttributeQueryImpl(SAMLConstants.SAML20P_NS, CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME,
-                SAMLConstants.SAML20P_PREFIX);
-
-        if (log.isTraceEnabled()) {
-            log.trace("Unmarshalling attributes of DOM Element {}", XMLHelper.getNodeQName(domElement));
-        }
-        
-        NamedNodeMap attributes = domElement.getAttributes();
-        Node attribute;
-        for (int i = 0; i < attributes.getLength(); i++) {
-            attribute = attributes.item(i);
-
-            // These should allows be attribute nodes, but just in case...
-            if (attribute.getNodeType() == Node.ATTRIBUTE_NODE) {
-                unmarshallAttribute(xmlObject, (Attr) attribute);
-            }
-        }
-
-        if (log.isTraceEnabled()) {
-            log.trace("Unmarshalling other child nodes of DOM Element {}", XMLHelper.getNodeQName(domElement));
-        }
-        
-        Node childNode = domElement.getFirstChild();
-        while (childNode != null) {
-
-            if (childNode.getNodeType() == Node.ATTRIBUTE_NODE) {
-                unmarshallAttribute(xmlObject, (Attr) childNode);
-            } else if (childNode.getNodeType() == Node.ELEMENT_NODE) {
-                unmarshallChildElement(xmlObject, (Element) childNode);
-            } else if (childNode.getNodeType() == Node.TEXT_NODE
-                    || childNode.getNodeType() == Node.CDATA_SECTION_NODE) {
-                unmarshallTextContent(xmlObject, (Text) childNode);
-            }
-            
-            childNode = childNode.getNextSibling();
-        }
-
-        xmlObject.setDOM(domElement);
-        return xmlObject;
-    }
-    
-    /** {@inheritDoc} */
-    protected void processAttribute(XMLObject samlObject, Attr attribute) throws UnmarshallingException {
-        CustomRequestAbstractType req = (CustomRequestAbstractType) samlObject;
-
-        if (attribute.getLocalName().equals(RequestAbstractType.VERSION_ATTRIB_NAME)) {
-            req.setVersion(SAMLVersion.valueOf(attribute.getValue()));
-        } else if (attribute.getLocalName().equals(RequestAbstractType.ID_ATTRIB_NAME)) {
-            req.setID(attribute.getValue());
-            attribute.getOwnerElement().setIdAttributeNode(attribute, true);
-        } else if (attribute.getLocalName().equals(RequestAbstractType.ISSUE_INSTANT_ATTRIB_NAME)
-                && !DatatypeHelper.isEmpty(attribute.getValue())) {
-            req.setIssueInstant(new DateTime(attribute.getValue(), ISOChronology.getInstanceUTC()));
-        } else if (attribute.getLocalName().equals(RequestAbstractType.DESTINATION_ATTRIB_NAME)) {
-            req.setDestination(attribute.getValue());
-        } else if (attribute.getLocalName().equals(RequestAbstractType.CONSENT_ATTRIB_NAME)) {
-            req.setConsent(attribute.getValue());
-        } else if (attribute.getLocalName().equals(CustomRequestAbstractType.ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME)) {
-        	req.setAssertionConsumerServiceURL(attribute.getValue());
-        }else {
-            super.processAttribute(samlObject, attribute);
-        }
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java
deleted file mode 100644
index 3f4fc633d..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
-
-/**
- * The Class EIDCrossBorderShareBuilder.
- * 
- * @author fjquevedo
- */
-public class EIDCrossBorderShareBuilder extends	AbstractSAMLObjectBuilder<EIDCrossBorderShare> {
-
-
-	/**
-	 * Builds the object.
-	 *
-	 * @return the identifier cross border share
-	 */
-	public final EIDCrossBorderShare buildObject() {
-		return buildObject(EIDCrossBorderShare.DEF_ELEMENT_NAME);
-	}
-
-
-	/**
-	 * Builds the object.
-	 *
-	 * @param namespaceURI the namespace uri
-	 * @param localName the local name
-	 * @param namespacePrefix the namespace prefix
-	 * @return the eID cross border share
-	 */
-	public final EIDCrossBorderShare buildObject(final String namespaceURI,
-			final String localName, final String namespacePrefix) {
-		return new EIDCrossBorderShareImpl(namespaceURI, localName, namespacePrefix);
-	}
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java
deleted file mode 100644
index 3827f5085..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class EIDCrossBorderShareImpl.
- * 
- * @author fjquevedo
- */
-public class EIDCrossBorderShareImpl extends AbstractSAMLObject implements
-	EIDCrossBorderShare {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(EIDCrossBorderShareImpl.class.getName());
-	/** The citizen country code. */
-    private String eIDCrossBorderShare;
-
-    /**
-     * Instantiates a new eID cross border share implementation.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected EIDCrossBorderShareImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-    
-    
-    
-    /**
-     * Gets the eID cross border share.
-     *
-     * @return the eID cross border share
-     */
-    public final String getEIDCrossBorderShare() {
-    	return eIDCrossBorderShare;
-    }
-
-
-    /**
-     * Sets the eID cross border share.
-     *
-     * @param newEIDCrossBorderShare the new eID cross border share
-     */
-    public final void setEIDCrossBorderShare(String newEIDCrossBorderShare) {
-    	this.eIDCrossBorderShare = prepareForAssignment(this.eIDCrossBorderShare, newEIDCrossBorderShare);
-    }
-    
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     * {@inheritDoc}
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java
deleted file mode 100644
index c5e113013..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
-
-
-/**
- * The Class EIDCrossBorderShareMarshaller.
- * 
- * @author fjquevedo
- */
-public class EIDCrossBorderShareMarshaller extends AbstractSAMLObjectMarshaller {
-
-
-	/**
-	 * Marshall element content.
-	 *
-	 * @param samlObject the SAML object
-	 * @param domElement the DOM element
-	 * @throws MarshallingException the marshalling exception
-	 */
-	protected final void marshallElementContent(final XMLObject samlObject,
-			final Element domElement) throws MarshallingException {
-		final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) samlObject;
-		XMLHelper.appendTextContent(domElement, crossBorderShare.getEIDCrossBorderShare());
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java
deleted file mode 100644
index e74bee6ca..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
-
-/**
- * The Class EIDCrossBorderShareUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class EIDCrossBorderShareUnmarshaller extends
-		AbstractSAMLObjectUnmarshaller {
-
-
-	/**
-	 * Process element content.
-	 *
-	 * @param samlObject the SAML object
-	 * @param elementContent the element content
-	 */
-	protected final void processElementContent(final XMLObject samlObject,
-			final String elementContent) {
-		final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) samlObject;
-		crossBorderShare.setEIDCrossBorderShare(elementContent);
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java
deleted file mode 100644
index 5e91e18fd..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
-
-/**
- * The Class EIDCrossSectorShareBuilder.
- * 
- * @author fjquevedo
- */
-public class EIDCrossSectorShareBuilder extends
-	AbstractSAMLObjectBuilder<EIDCrossSectorShare> {
-
-    /**
-     * Builds the object.
-     *
-     * @return the eID cross sector share
-     */
-    public final EIDCrossSectorShare buildObject() {
-	return buildObject(EIDCrossSectorShare.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the eID cross sector share implementation
-     */
-    public final EIDCrossSectorShareImpl buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new EIDCrossSectorShareImpl(namespaceURI, localName,
-		namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java
deleted file mode 100644
index 7b2ad3dbd..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * The Class EIDCrossSectorShareImpl.
- * 
- * @author fjquevedo
- */
-public class EIDCrossSectorShareImpl extends AbstractSAMLObject implements
-	EIDCrossSectorShare {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(EIDCrossSectorShareImpl.class.getName());
-	/** The citizen country code. */
-    private String eIDCrossSectorShare;
-
-
-    /**
-     * Instantiates a new eID cross sector share implementation.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected EIDCrossSectorShareImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-    
-    
-  
-    /**
-     * Gets the eID cross sector share.
-     *
-     * @return the eID cross sector share
-     */
-    public final String getEIDCrossSectorShare() {
-    	return eIDCrossSectorShare;
-    }
-
-
-    /**
-     * Sets the eID cross sector share.
-     *
-     * @param newEIDCrossSectorShare the new eID cross sector share
-     */
-    public final void setEIDCrossSectorShare(String newEIDCrossSectorShare) {
-    	this.eIDCrossSectorShare = prepareForAssignment(this.eIDCrossSectorShare, newEIDCrossSectorShare);
-    }
-    
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java
deleted file mode 100644
index 3ee9df698..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
-
-
-/**
- * The Class EIDCrossSectorShareMarshaller.
- * 
- * @author fjquevedo
- */
-public class EIDCrossSectorShareMarshaller extends AbstractSAMLObjectMarshaller {
-
-	/**
-	 * Marshall element content.
-	 *
-	 * @param samlObject the SAML object
-	 * @param domElement the DOM element
-	 * @throws MarshallingException the marshalling exception
-	 */
-	protected final void marshallElementContent(final XMLObject samlObject,
-			final Element domElement) throws MarshallingException {
-		final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) samlObject;
-		XMLHelper.appendTextContent(domElement, crossSectorShare.getEIDCrossSectorShare());
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java
deleted file mode 100644
index 94c7689be..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
-
-/**
- * The Class EIDCrossSectorShareUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class EIDCrossSectorShareUnmarshaller extends
-	AbstractSAMLObjectUnmarshaller {
-
-	/**
-	 * Process element content.
-	 *
-	 * @param samlObject the SAML object
-	 * @param domElement the DOM element
-	 * @throws MarshallingException the marshalling exception
-	 */
-	protected final void processElementContent(final XMLObject samlObject,
-			final String domElement)  {
-
-		final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) samlObject;
-		crossSectorShare.setEIDCrossSectorShare(domElement);
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java
deleted file mode 100644
index 230ff3ca4..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.EIDSectorShare;
-
-/**
- * The Class EIDSectorShareBuilder.
- * 
- * @author fjquevedo
- */
-public class EIDSectorShareBuilder extends
-	AbstractSAMLObjectBuilder<EIDSectorShare> {
-
-    /**
-     * Builds the object.
-     *
-     * @return the eID sector share
-     */
-    public final EIDSectorShare buildObject() {
-	return buildObject(EIDSectorShare.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the eID sector share
-     */
-    public final EIDSectorShare buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new EIDSectorShareImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java
deleted file mode 100644
index 9ed726a32..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.EIDSectorShare;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Class EIDSectorShareImpl.
- * 
- * @author fjquevedo
- */
-public class EIDSectorShareImpl extends AbstractSAMLObject implements
-	EIDSectorShare {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(EIDSectorShareImpl.class.getName());
-	
-    /** The e id sector share. */
-    private String eIDSectorShare;
-    /**
-     * Instantiates a new eID sector share implementation.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected EIDSectorShareImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-    
-    
-    /**
-     * Gets the eID sector share.
-     *
-     * @return the eID sector share
-     */
-    public final String getEIDSectorShare() {
-    	return eIDSectorShare;	
-    }
-
-    /**
-     * Sets the eID sector share.
-     *
-     * @param newEIDSectorShare the new eID sector share
-     */
-    public final void setEIDSectorShare(String newEIDSectorShare) {
-    	this.eIDSectorShare = prepareForAssignment(this.eIDSectorShare, newEIDSectorShare);
-    }
-    
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java
deleted file mode 100644
index 0ce449cd1..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.saml2.core.impl.AbstractNameIDTypeMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.EIDSectorShare;
-
-/**
- * The Class EIDSectorShareMarshaller.
- * 
- * @author fjquevedo
- */
-public class EIDSectorShareMarshaller extends AbstractSAMLObjectMarshaller {
-
-	/**
-	 * Marshall element content.
-	 *
-	 * @param samlObject the SAML object
-	 * @param domElement the DOM element
-	 * @throws MarshallingException the marshalling exception
-	 */
-	protected final void marshallElementContent(final XMLObject samlObject,
-			final Element domElement) throws MarshallingException {
-		final EIDSectorShare sectorShare = (EIDSectorShare) samlObject;
-		XMLHelper.appendTextContent(domElement, sectorShare.getEIDSectorShare());
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java
deleted file mode 100644
index f7f00adb9..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.EIDSectorShare;
-
-
-/**
- * The Class EIDSectorShareUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class EIDSectorShareUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-
-	/**
-	 * Process element content.
-	 *
-	 * @param samlObject the SAML object
-	 * @param domElement the DOM element
-	 * @throws MarshallingException the marshalling exception
-	 */
-	protected final void processElementContent(final XMLObject samlObject,
-			final String domElement)  {
-		final EIDSectorShare sectorShare = (EIDSectorShare) samlObject;
-		sectorShare.setEIDSectorShare(domElement);
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java
deleted file mode 100644
index 41676931b..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-
-/**
- * The Class QAAAttributeBuilder.
- * 
- * @author fjquevedo
- */
-public class QAAAttributeBuilder extends
-	AbstractSAMLObjectBuilder<QAAAttribute> {
-
-    /**
-     * Builds the object.
-     *
-     * @return the quality authentication assurance object
-     */
-    public final QAAAttribute buildObject() {
-	return buildObject(QAAAttribute.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the quality authentication assurance object
-
-     */
-    public final QAAAttribute buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new QAAAttributeImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java
deleted file mode 100644
index 46f3bb402..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class QAAAttributeImpl.
- * 
- * @author fjquevedo
- */
-public class QAAAttributeImpl extends AbstractSAMLObject implements
-	QAAAttribute {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(QAAAttributeImpl.class.getName());
-    /** The quality authentication assurance level. */
-    private String qaaLevel;
-
-    /**
-     * Constructor.
-     * 
-     * @param namespaceURI the namespace the element is in
-     * @param elementLocalName the local name of the XML element this Object
-     * represents
-     * @param namespacePrefix the prefix for the given namespace
-     */
-    protected QAAAttributeImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-
-    /**
-     * Gets the quality authentication assurance level.
-     *
-     * @return the quality authentication assurance level
-     */
-    public final String getQaaLevel() {
-	return qaaLevel;
-    }
-
-    /**
-     * Sets the quality authentication assurance level.
-     *
-     * @param newQaaLevel the new quality authentication assurance level
-     */
-    public final void setQaaLevel(final String newQaaLevel) {
-	this.qaaLevel = prepareForAssignment(this.qaaLevel, newQaaLevel);
-    }
-
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java
deleted file mode 100644
index 000879368..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-
-/**
- * The Class QAAAttributeMarshaller.
- * 
- * @author fjquevedo
- */
-public class QAAAttributeMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall element content.
-     *
-     * @param samlObject the SAML object
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallElementContent(final XMLObject samlObject,
-	    final Element domElement) throws MarshallingException {
-	final QAAAttribute qaaAttribute = (QAAAttribute) samlObject;
-	XMLHelper.appendTextContent(domElement, qaaAttribute.getQaaLevel());
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java
deleted file mode 100644
index 8445e4eeb..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-
-/**
- * The Class QAAAttributeUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class QAAAttributeUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process element content.
-     *
-     * @param samlObject the SAML object
-     * @param elementContent the element content
-     */
-    protected final void processElementContent(final XMLObject samlObject,
-	    final String elementContent) {
-	final QAAAttribute qaaLevel = (QAAAttribute) samlObject;
-	qaaLevel.setQaaLevel(elementContent);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java
deleted file mode 100644
index c9881c439..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-
-/**
- * The Class RequestedAttributeBuilder.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributeBuilder extends
-	AbstractSAMLObjectBuilder<RequestedAttribute> {
-
-
-    /**
-     * Builds the object.
-     *
-     * @return the requested attribute
-     */
-    public final RequestedAttribute buildObject() {
-	return buildObject(RequestedAttribute.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the requested attribute
-     */
-    public final RequestedAttribute buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new RequestedAttributeImpl(namespaceURI, localName,
-		namespacePrefix);
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java
deleted file mode 100644
index ac2e8a3ee..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.schema.XSBooleanValue;
-import org.opensaml.xml.util.AttributeMap;
-import org.opensaml.xml.util.XMLObjectChildrenList;
-
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Class RequestedAttributeImpl.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributeImpl extends AbstractSAMLObject implements
-	RequestedAttribute {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(RequestedAttributeImpl.class.getName());
-    /**
-     * The attribute values.
-     */
-    private final XMLObjectChildrenList<XMLObject> attributeValues;
-
-    /**
-     * The friendly name.
-     * 
-     */
-    private String friendlyName;
-
-    /**
-     * The is required.
-    */
-    private String isRequired;
-
-    /**
-     * The name.
-     * 
-     */
-    private String name;
-
-    /**
-     * The name format.
-     * 
-     */
-    private String nameFormat;
-
-    /**
-     * The unknown attributes.
-     * 
-     */
-    private AttributeMap unknownAttributes;
-
-    /**
-     * Instantiates a new requested attribute impl.
-     * 
-     * @param namespaceURI the namespace uri
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected RequestedAttributeImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-	unknownAttributes = new AttributeMap(this);
-	attributeValues = new XMLObjectChildrenList<XMLObject>(this);
-    }
-
-
-    /**
-     * Gets the attribute values.
-     *
-     * @return the attribute values
-     */
-    public final List<XMLObject> getAttributeValues() {
-	return attributeValues;
-    }
-
-    /**
-     * Gets the friendly name.
-     *
-     * @return the friendly name.
-     */
-    public final String getFriendlyName() {
-	return friendlyName;
-    }
-
-  
-    /**
-     * Gets the checks if is required.
-     *
-     * @return the boolean if it's required.
-     */
-    public final String isRequired() {
-	return isRequired;
-    }
-
-
-    /**
-     * Gets the is required xs boolean.
-     * 
-     * @return the XSBoolean if it's required.
-     */
-    public final String getIsRequiredXSBoolean() {
-	return isRequired;
-    }
-
-
-    /**
-     * Gets the name.
-     *
-     * @return the name
-     */
-    public final String getName() {
-	return name;
-    }
-
-
-    /**
-     * Gets the name format.
-     *
-     * @return the name format.
-     */
-    public final String getNameFormat() {
-	return nameFormat;
-    }
-
-    /**
-     * Gets the ordered children.
-     * 
-     * @return the list of XMLObject.
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
-	children.addAll(attributeValues);
-	return Collections.unmodifiableList(children);
-    }
-
-    /**
-     * Gets the unknown attributes.
-     *
-     * @return the attribute map
-     */
-    public final AttributeMap getUnknownAttributes() {
-	return unknownAttributes;
-    }
-
-    /**
-     * Sets the friendly name.
-     * 
-     * @param newFriendlyName the new friendly name format
-     */
-    public final void setFriendlyName(final String newFriendlyName) {
-	this.friendlyName = prepareForAssignment(this.friendlyName,
-		newFriendlyName);
-    }
-
-    /**
-     * Set new boolean value isRequired.
-     * @param newIsRequired then new value
-     */
-    public final void setIsRequired(final String newIsRequired) {
-	isRequired = prepareForAssignment(this.isRequired, newIsRequired);
-
-    }
-
-    /**
-     * Sets the name.
-     * 
-     * @param newName the new name
-     */
-    public final void setName(final String newName) {
-	this.name = prepareForAssignment(this.name, newName);
-    }
-
-    /**
-     * Sets the name format.
-     * 
-     * @param newNameFormat the new name format
-     */
-    public final void setNameFormat(final String newNameFormat) {
-	this.nameFormat = prepareForAssignment(this.nameFormat, newNameFormat);
-    }
-
-    /**
-     * Sets the unknown attributes.
-     * 
-     * @param newUnknownAttr the new unknown attributes
-     */
-    public final void setUnknownAttributes(final AttributeMap newUnknownAttr) {
-	this.unknownAttributes = newUnknownAttr;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java
deleted file mode 100644
index 1a14a118a..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.Map.Entry;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.Configuration;
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-
-/**
- * The Class RequestedAttributeMarshaller.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributeMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall attributes.
-     *
-     * @param samlElement the SAML element
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallAttributes(final XMLObject samlElement,
-	    final Element domElement) throws MarshallingException {
-	final RequestedAttribute requestedAttr = (RequestedAttribute) samlElement;
-
-	if (requestedAttr.getName() != null) {
-	    domElement.setAttributeNS(null,
-		    RequestedAttribute.NAME_ATTRIB_NAME, requestedAttr
-			    .getName());
-	}
-
-	if (requestedAttr.getNameFormat() != null) {
-	    domElement.setAttributeNS(null,
-		    RequestedAttribute.NAME_FORMAT_ATTR, requestedAttr
-			    .getNameFormat());
-	}
-
-	if (requestedAttr.getFriendlyName() != null) {
-	    domElement.setAttributeNS(null,
-		    RequestedAttribute.FRIENDLY_NAME_ATT, requestedAttr
-			    .getFriendlyName());
-	}
-
-	if (requestedAttr.getIsRequiredXSBoolean() != null) {
-	    domElement.setAttributeNS(null,
-		    RequestedAttribute.IS_REQUIRED_ATTR, requestedAttr
-			    .getIsRequiredXSBoolean().toString());
-	}
-
-	Attr attr;
-	for (Entry<QName, String> entry : requestedAttr.getUnknownAttributes()
-		.entrySet()) {
-	    attr = XMLHelper.constructAttribute(domElement.getOwnerDocument(),
-		    entry.getKey());
-	    attr.setValue(entry.getValue());
-	    domElement.setAttributeNodeNS(attr);
-	    if (Configuration.isIDAttribute(entry.getKey())
-		    || requestedAttr.getUnknownAttributes().isIDAttribute(
-			    entry.getKey())) {
-		attr.getOwnerElement().setIdAttributeNode(attr, true);
-	    }
-	}
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java
deleted file mode 100644
index c07f852d9..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import javax.xml.namespace.QName;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.UnmarshallingException;
-import org.opensaml.xml.schema.XSBooleanValue;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Attr;
-
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-import eu.stork.peps.auth.engine.core.SAMLCore;
-
-/**
- * The Class RequestedAttributeUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributeUnmarshaller extends
-	AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process child element.
-     * 
-     * @param parentSAMLObject parent SAMLObject
-     * @param childSAMLObject child SAMLObject
-     * 
-     * @throws UnmarshallingException error at unmarshall XML object
-     */
-    protected final void processChildElement(final XMLObject parentSAMLObject,
-	    final XMLObject childSAMLObject) throws UnmarshallingException {
-
-	final RequestedAttribute requestedAttr = (RequestedAttribute) parentSAMLObject;
-
-	final QName childQName = childSAMLObject.getElementQName();
-	if (childQName.getLocalPart().equals("AttributeValue")
-		&& childQName.getNamespaceURI().equals(SAMLCore.STORK10_NS.getValue())) {
-	    requestedAttr.getAttributeValues().add(childSAMLObject);
-	} else {
-	    super.processChildElement(parentSAMLObject, childSAMLObject);
-	}
-    }
-
-    /**
-     * Process attribute.
-     *
-     * @param samlObject the SAML object
-     * @param attribute the attribute
-     * @throws UnmarshallingException the unmarshalling exception
-     */
-    protected final void processAttribute(final XMLObject samlObject,
-	    final Attr attribute) throws UnmarshallingException {
-
-	final RequestedAttribute requestedAttr = (RequestedAttribute) samlObject;
-
-	if (attribute.getLocalName()
-		.equals(RequestedAttribute.NAME_ATTRIB_NAME)) {
-	    requestedAttr.setName(attribute.getValue());
-	} else if (attribute.getLocalName().equals(
-		RequestedAttribute.NAME_FORMAT_ATTR)) {
-	    requestedAttr.setNameFormat(attribute.getValue());
-	} else if (attribute.getLocalName().equals(
-		RequestedAttribute.FRIENDLY_NAME_ATT)) {
-	    requestedAttr.setFriendlyName(attribute.getValue());
-	} else if (attribute.getLocalName().equals(
-		RequestedAttribute.IS_REQUIRED_ATTR)) {
-	    requestedAttr.setIsRequired(attribute
-		    .getValue());
-
-	} else {
-	    final QName attribQName = XMLHelper.getNodeQName(attribute);
-	    if (attribute.isId()) {
-		requestedAttr.getUnknownAttributes().registerID(attribQName);
-	    }
-	    requestedAttr.getUnknownAttributes().put(attribQName,
-		    attribute.getValue());
-	}
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java
deleted file mode 100644
index d421c53d2..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.RequestedAttributes;
-
-/**
- * The Class RequestedAttributesBuilder.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributesBuilder extends
-	AbstractSAMLObjectBuilder<RequestedAttributes> {
-
-
-    /**
-     * Builds the object.
-     *
-     * @return the requested attributes
-     */
-    public final RequestedAttributes buildObject() {
-	return buildObject(RequestedAttributes.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the requested attributes
-     */
-    public final RequestedAttributes buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new RequestedAttributesImpl(namespaceURI, localName,
-		namespacePrefix);
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java
deleted file mode 100644
index 0a5b37add..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.util.IndexedXMLObjectChildrenList;
-
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-import eu.stork.peps.auth.engine.core.RequestedAttributes;
-
-/**
- * The Class RequestedAttributesImpl.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributesImpl extends AbstractSAMLObject implements
-	RequestedAttributes {
-
-    /**
-     * Instantiates a new requested attributes implement.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected RequestedAttributesImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-	indexedChildren = new IndexedXMLObjectChildrenList<XMLObject>(this);
-    }
-
-    /** The indexed children. */
-    private final IndexedXMLObjectChildrenList<XMLObject> indexedChildren;
-
-    /**
-     * Gets the indexed children.
-     * 
-     * @return the indexed children
-     */
-    public final IndexedXMLObjectChildrenList<XMLObject> getIndexedChildren() {
-	return indexedChildren;
-    }
-
-
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-
-	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
-
-	children.addAll(indexedChildren);
-
-	return Collections.unmodifiableList(children);
-
-    }
-
-    /**
-     * Gets the attributes.
-     * 
-     * @return the attributes
-     * 
-     * @see eu.stork.peps.auth.engine.core.RequestedAttributes#getAttributes()
-     */
-    @SuppressWarnings("unchecked")
-    public final List<RequestedAttribute> getAttributes() {
-	return (List<RequestedAttribute>) indexedChildren
-		.subList(RequestedAttribute.DEF_ELEMENT_NAME);
-    }
-
-    @Override
-    public int hashCode() {
-        throw new UnsupportedOperationException("hashCode method not implemented");
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java
deleted file mode 100644
index dfc42adf3..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-
-/**
- * The Class RequestedAttributesMarshaller.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributesMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Instantiates a new requested attributes marshaller.
-     */
-    public RequestedAttributesMarshaller() {
-	super();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java
deleted file mode 100644
index 41b3afa40..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.UnmarshallingException;
-
-import eu.stork.peps.auth.engine.core.RequestedAttribute;
-import eu.stork.peps.auth.engine.core.RequestedAttributes;
-
-/**
- * The Class RequestedAttributesUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class RequestedAttributesUnmarshaller extends
-	AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process child element.
-     * 
-     * @param parentObject the parent object
-     * @param childObject the child object
-     * 
-     * @throws UnmarshallingException error in unmarshall
-     */
-    protected final void processChildElement(final XMLObject parentObject,
-	    final XMLObject childObject) throws UnmarshallingException {
-	final RequestedAttributes attrStatement = (RequestedAttributes) parentObject;
-
-	if (childObject instanceof RequestedAttribute) {
-	    attrStatement.getAttributes().add((RequestedAttribute) childObject);
-	} else {
-	    super.processChildElement(parentObject, childObject);
-	}
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java
deleted file mode 100644
index a35c77936..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.SPApplication;
-
-/**
- * The Class SPApplicationBuilder.
- * 
- * @author fjquevedo
- */
-public class SPApplicationBuilder extends
-	AbstractSAMLObjectBuilder<SPApplication> {
-
-    /**
-     * Builds the object.
-     *
-     * @return the service provider application
-     */
-    public final SPApplication buildObject() {
-	return buildObject(SPApplication.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the service provider application
-     */
-    public final SPApplication buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new SPApplicationImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java
deleted file mode 100644
index 0a428a521..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPApplication;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class SPApplicationImpl.
- * 
- * @author fjquevedo
- */
-public class SPApplicationImpl extends AbstractSAMLObject implements
-	SPApplication {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(SPApplicationImpl.class.getName());
-    /** The service provider application. */
-    private String spApplication;
-
-    /**
-     * Instantiates a new service provider application.
-     * 
-     * @param namespaceURI the namespace uri
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected SPApplicationImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-
-    /**
-     * Gets the service provider application.
-     *
-     * @return the service provider application
-     */
-    public final String getSPApplication() {
-	return spApplication;
-    }
-
-    /**
-     * Sets the service provider application.
-     *
-     * @param newSpApplication the new service provider application
-     */
-    public final void setSPApplication(final String newSpApplication) {
-	this.spApplication = prepareForAssignment(this.spApplication,
-		newSpApplication);
-    }
-
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java
deleted file mode 100644
index 4866c3535..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.SPApplication;
-
-/**
- * The Class SPApplicationMarshaller.
- * 
- * @author fjquevedo
- */
-public class SPApplicationMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall element content.
-     *
-     * @param samlObject the SAML object
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallElementContent(final XMLObject samlObject,
-	    final Element domElement) throws MarshallingException {
-	final SPApplication spApplication = (SPApplication) samlObject;
-	XMLHelper.appendTextContent(domElement, spApplication
-		.getSPApplication());
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java
deleted file mode 100644
index a28432a13..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPApplication;
-
-
-/**
- * The Class SPApplicationUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class SPApplicationUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process element content.
-     *
-     * @param samlObject the SAML object
-     * @param elementContent the element content
-     */
-    protected final void processElementContent(final XMLObject samlObject,
-	    final String elementContent) {
-	final SPApplication spApplication = (SPApplication) samlObject;
-	spApplication.setSPApplication(elementContent);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java
deleted file mode 100644
index 48ec92f49..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.SPCountry;
-
-/**
- * The Class SPCountryBuilder.
- * 
- * @author fjquevedo
- */
-public class SPCountryBuilder extends AbstractSAMLObjectBuilder<SPCountry> {
-
-    
-    /**
-     * Builds the object SPCountry.
-     *
-     * @return the service provider country
-     */
-    public final SPCountry buildObject() {
-	return buildObject(SPCountry.DEF_ELEMENT_NAME);
-    }
-
-    
-    /**
-     * Builds the object SPCountry.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the service provider country
-     */
-    public final SPCountry buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new SPCountryImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java
deleted file mode 100644
index 40a1ac86a..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPCountry;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class SPCountryImpl.
- * 
- * @author fjquevedo
- */
-public class SPCountryImpl extends AbstractSAMLObject implements SPCountry {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(SPCountryImpl.class.getName());
-    /** The service provider country. */
-    private String spCountry;
-
-    /**
-     * Instantiates a new service provider country.
-     * 
-     * @param namespaceURI the namespace uri
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected SPCountryImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-
-    /**
-     * Gets the service provider country.
-     *
-     * @return the service provider country
-     */
-    public final String getSPCountry() {
-	return spCountry;
-    }
-
-    /**
-     * Sets the service provider country.
-     *
-     * @param newSpCountry the new service provider country
-     */
-    public final void setSPCountry(final String newSpCountry) {
-	this.spCountry = prepareForAssignment(this.spCountry, newSpCountry);
-    }
-
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java
deleted file mode 100644
index e82634749..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.SPCountry;
-
-/**
- * The Class SPCountryMarshaller.
- * 
- * @author fjquevedo
- */
-public class SPCountryMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall element content.
-     *
-     * @param samlObject the SAML object
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallElementContent(final XMLObject samlObject,
-	    final Element domElement) throws MarshallingException {
-	final SPCountry spCountry = (SPCountry) samlObject;
-	XMLHelper.appendTextContent(domElement, spCountry.getSPCountry());
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java
deleted file mode 100644
index deb695ac6..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPCountry;
-
-
-/**
- * The Class SPCountryUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class SPCountryUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process element content.
-     *
-     * @param samlObject the SAML object
-     * @param elementContent the element content
-     */
-    protected final void processElementContent(final XMLObject samlObject,
-	    final String elementContent) {
-	final SPCountry spCountry = (SPCountry) samlObject;
-	spCountry.setSPCountry(elementContent);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java
deleted file mode 100644
index b3640947b..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.SPID;
-
-/**
- * The Class SPIDBuilder.
- * 
- * @author iinigo
- */
-public class SPIDBuilder extends AbstractSAMLObjectBuilder<SPID> {
-
-    /**
-     * Builds the object.
-     *
-     * @return the SP ID
-     */
-    public final SPID buildObject() {
-	return buildObject(SPID.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the citizen country code
-     */
-    public final SPID buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new SPIDImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java
deleted file mode 100644
index 68611997b..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPID;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class SPIDImpl.
- * 
- * @author iinigo
- */
-public class SPIDImpl extends AbstractSAMLObject implements SPID {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(SPIDImpl.class.getName());
-    /** The citizen country code. */
-    private String spId;
-    
-    /**
-     * Instantiates a new sP country impl.
-     * 
-     * @param namespaceURI the namespace uri
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */   
-    protected SPIDImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);	
-    }
-
-    /**
-     * Gets the SP ID.
-     *
-     * @return the SP ID
-     */
-    public final String getSPID() {
-    	return spId;
-    }
-
-    /**
-     * Sets the SP ID.
-     *
-     * @param newSPID the new SP ID
-     */
-    public final void setSPID(final String newSPID) {
-    	this.spId = prepareForAssignment(this.spId, newSPID);
-    }
-
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-    	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java
deleted file mode 100644
index 24389522e..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.SPID;
-
-/**
- * The Class SPIDMarshaller.
- * 
- * @author iinigo
- */
-public class SPIDMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall element content.
-     *
-     * @param samlObject the SAML object
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallElementContent(final XMLObject samlObject,
-	    final Element domElement) throws MarshallingException {
-	final SPID spid = (SPID) samlObject;
-	XMLHelper.appendTextContent(domElement, spid.getSPID());
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java
deleted file mode 100644
index e4d230b94..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPID;
-
-/**
- * The Class SPIDUnmarshaller.
- * 
- * @author iinigo
- */
-public class SPIDUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process element content.
-     *
-     * @param samlObject the SAML object
-     * @param elementContent the element content
-     */
-    protected final void processElementContent(final XMLObject samlObject,
-	    final String elementContent) {
-	final SPID spid = (SPID) samlObject;
-	spid.setSPID(elementContent);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java
deleted file mode 100644
index a6e1fe686..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.SAMLCore;
-import eu.stork.peps.auth.engine.core.SPInformation;
-
-/**
- * The Class SPInformation.
- * 
- * @author iinigo
- */
-public final class SPInformationBuilder extends AbstractSAMLObjectBuilder<SPInformation> {
-    
-
-    /** {@inheritDoc} */
-    public SPInformation buildObject() {
-        return buildObject(SAMLCore.STORK10P_NS.getValue(), SPInformation.DEF_LOCAL_NAME, SAMLCore.STORK10P_PREFIX.getValue());
-    }
-
-    /** {@inheritDoc} */
-    public SPInformation buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
-        return new SPInformationImpl(namespaceURI, localName, namespacePrefix);
-    }
-    
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java
deleted file mode 100644
index ff6e90999..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSignableSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPID;
-import eu.stork.peps.auth.engine.core.SPInformation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * The Class SPInformationImpl.
- * 
- * @author iinigo
- */
-public final class SPInformationImpl extends AbstractSignableSAMLObject implements
-SPInformation {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(SPInformationImpl.class.getName());
-    /** The citizen country code. */
-    private SPID spId;
-    
-    
-	/**
-     * Instantiates a new requested attributes implement.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected SPInformationImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {	
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-    
-   
-    /**
-     * getSPId.
-     * 
-     * @return the SP ID
-     */    
-    public SPID getSPID() {
-    	return spId;
-    }        
-
-    /**
-     * Gets the ordered children.
-     * 
-     * @return the ordered children
-     *
-     */
-    public List<XMLObject> getOrderedChildren() {
-	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
-
-	children.add(spId);
-		
-	if (getSignature() != null) {
-	    children.add(getSignature());
-	}
-	
-	return Collections.unmodifiableList(children);
-
-    }
-
-    /**
-     * Gets the signature reference id.
-     * 
-     * @return the signature reference id
-     *
-     */
-    public String getSignatureReferenceID() {
-	return null;
-    }
-    
-    /**
-     * Sets the SP Id.
-     * 
-     * @param newSPId the new SP Id
-     *
-     */
-    public void setSPID(SPID newSPId) {
-    	this.spId = prepareForAssignment(this.spId, newSPId);	
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java
deleted file mode 100644
index 44845948c..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-
-/**
- * The Class SPInformationMarshaller.
- * 
- * @author iinigo
- */
-public class SPInformationMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Instantiates a new SP Information marshaller.
-     */
-    public SPInformationMarshaller() {
-	super();
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java
deleted file mode 100644
index 414b93386..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.UnmarshallingException;
-
-import eu.stork.peps.auth.engine.core.SPID;
-import eu.stork.peps.auth.engine.core.SPInformation;
-
-/**
- * The Class SPInformationUnmarshaller.
- * 
- * @author iinigo
- */
-public class SPInformationUnmarshaller extends
-	AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process child element.
-     * 
-     * @param parentObject the parent object
-     * @param childObject the child object
-     * 
-     * @throws UnmarshallingException the unmarshalling exception
-     *
-     */
-    protected final void processChildElement(final XMLObject parentObject,
-	    final XMLObject childObject) throws UnmarshallingException {
-	final SPInformation spInformation = (SPInformation) parentObject;
-
-	if (childObject instanceof SPID) {
-        spInformation.setSPID((SPID) childObject);
-	} else {
-	    super.processChildElement(parentObject, childObject);
-	}	
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java
deleted file mode 100644
index fe47cf99c..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.SPInstitution;
-
-/**
- * The Class SPInstitutionBuilder.
- * 
- * @author fjquevedo
- */
-public class SPInstitutionBuilder extends
-	AbstractSAMLObjectBuilder<SPInstitution> {
-
-    /**
-     * Builds the object.
-     *
-     * @return the service provider institution
-     */
-    public final SPInstitution buildObject() {
-	return buildObject(SPInstitution.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object SPInstitution.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the service provider institution
-     */
-    public final SPInstitution buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new SPInstitutionImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java
deleted file mode 100644
index 38438613a..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPInstitution;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class SPInstitutionImpl.
- * 
- * @author fjquevedo
- */
-public class SPInstitutionImpl extends AbstractSAMLObject implements
-	SPInstitution {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(SPInstitutionImpl.class.getName());
-    /** The service provider institution. */
-    private String spInstitution;
-
-    /**
-     * Instantiates a new service provider institution.
-     * 
-     * @param namespaceURI the namespace uri
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected SPInstitutionImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-
-    /**
-     * Gets the service provider institution.
-     *
-     * @return the service provider institution
-     */
-    public final String getSPInstitution() {
-	return spInstitution;
-    }
-
-    /**
-     * Sets the service provider institution.
-     *
-     * @param newSpInstitution the new service provider institution
-     */
-    public final void setSPInstitution(final String newSpInstitution) {
-	this.spInstitution = prepareForAssignment(this.spInstitution,
-		newSpInstitution);
-    }
-
-    /**
-     * Gets the ordered children.
-     *
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
- }
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java
deleted file mode 100644
index 504a1f035..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.SPInstitution;
-
-/**
- * The Class SPInstitutionMarshaller.
- * 
- * @author fjquevedo
- */
-public class SPInstitutionMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall element content.
-     *
-     * @param samlObject the SAML object
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallElementContent(final XMLObject samlObject,
-	    final Element domElement) throws MarshallingException {
-	final SPInstitution spInstitution = (SPInstitution) samlObject;
-	XMLHelper.appendTextContent(domElement, spInstitution
-		.getSPInstitution());
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java
deleted file mode 100644
index 103d5f2b2..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPInstitution;
-
-/**
- * The Class SPInstitutionUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class SPInstitutionUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process element content.
-     *
-     * @param samlObject the SAML object
-     * @param elementContent the element content
-     */
-    protected final void processElementContent(final XMLObject samlObject,
-	    final String elementContent) {
-	final SPInstitution spInstitution = (SPInstitution) samlObject;
-	spInstitution.setSPInstitution(elementContent);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java
deleted file mode 100644
index a691b9008..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.SPSector;
-
-/**
- * The Class SPSectorBuilder.
- * 
- * @author fjquevedo
- */
-public class SPSectorBuilder extends AbstractSAMLObjectBuilder<SPSector> {
-
-    /**
-     * Builds the object SPSector.
-     *
-     * @return the service provider sector.
-     */
-    public final SPSector buildObject() {
-	return buildObject(SPSector.DEF_ELEMENT_NAME);
-    }
-
-    /**
-     * Builds the object SPSector.
-     *
-     * @param namespaceURI the namespace uri
-     * @param localName the local name
-     * @param namespacePrefix the namespace prefix
-     * @return the service provider sector
-     */
-    public final SPSector buildObject(final String namespaceURI,
-	    final String localName, final String namespacePrefix) {
-	return new SPSectorImpl(namespaceURI, localName, namespacePrefix);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java
deleted file mode 100644
index 4ac822876..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPSector;
-
-
-/**
- * The Class SPSectorImpl.
- * 
- * @author fjquevedo
- */
-public class SPSectorImpl extends AbstractSAMLObject implements SPSector {
-
-    /** The service provider sector. */
-    private String spSector;
-
-    /**
-     * Instantiates a new Service provider sector implementation.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected SPSectorImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-
-    
-    /**
-     * Gets the service provider sector.
-     * 
-     * @return the SP sector
-     * 
-     * @see eu.stork.peps.auth.engine.core.SPSector#getSPSector()
-     */
-    public final String getSPSector() {
-	return spSector;
-    }
-
-    
-    /**
-     * Sets the service provider sector.
-     * 
-     * @param newSpSector the new service provider sector
-     */
-    public final void setSPSector(final String newSpSector) {
-	this.spSector = prepareForAssignment(this.spSector, newSpSector);
-    }
-
-   
-    /**
-     * Gets the ordered children.
-     * 
-     * @return the ordered children
-     */
-    public final List<XMLObject> getOrderedChildren() {
-	return null;
-    }
-
-    @Override
-    public int hashCode() {
-        throw new UnsupportedOperationException("hashCode method not implemented");
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java
deleted file mode 100644
index c5331e8f4..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.util.XMLHelper;
-import org.w3c.dom.Element;
-
-import eu.stork.peps.auth.engine.core.SPSector;
-
-/**
- * The Class SPSectorMarshaller.
- * 
- * @author fjquevedo
- */
-public class SPSectorMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Marshall element content.
-     *
-     * @param samlObject the SAML object
-     * @param domElement the DOM element
-     * @throws MarshallingException the marshalling exception
-     */
-    protected final void marshallElementContent(final XMLObject samlObject,
-	    final Element domElement) throws MarshallingException {
-	final SPSector spSector = (SPSector) samlObject;
-	XMLHelper.appendTextContent(domElement, spSector.getSPSector());
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java
deleted file mode 100644
index cbb05c6e5..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.SPSector;
-
-/**
- * The Class SPSectorUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class SPSectorUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    
-    /**
-     * Process element content.
-     *
-     * @param samlObject the SAML object
-     * @param elementContent the element content
-     */
-    protected final void processElementContent(final XMLObject samlObject,
-	    final String elementContent) {
-	final SPSector spSector = (SPSector) samlObject;
-	spSector.setSPSector(elementContent);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java
deleted file mode 100644
index 80796ea86..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.Security;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.InvalidPropertiesFormatException;
-import java.util.List;
-import java.util.Properties;
-
-import eu.stork.peps.auth.engine.X509PrincipalUtil;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.NotImplementedException;
-import org.bouncycastle.jce.X509Principal;
-import org.opensaml.Configuration;
-import org.opensaml.common.SAMLObject;
-import org.opensaml.common.SignableSAMLObject;
-import org.opensaml.saml2.core.Assertion;
-import org.opensaml.saml2.core.LogoutResponse;
-import org.opensaml.saml2.core.Response;
-import org.opensaml.security.SAMLSignatureProfileValidator;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.security.SecurityConfiguration;
-import org.opensaml.xml.security.SecurityException;
-import org.opensaml.xml.security.credential.Credential;
-import org.opensaml.xml.security.keyinfo.KeyInfoGenerator;
-import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorFactory;
-import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorManager;
-import org.opensaml.xml.security.keyinfo.KeyInfoHelper;
-import org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager;
-import org.opensaml.xml.security.x509.BasicX509Credential;
-import org.opensaml.xml.security.trust.ExplicitKeyTrustEvaluator;
-import org.opensaml.xml.signature.KeyInfo;
-import org.opensaml.xml.signature.Signature;
-import org.opensaml.xml.signature.SignatureConstants;
-import org.opensaml.xml.signature.SignatureException;
-import org.opensaml.xml.signature.SignatureValidator;
-import org.opensaml.xml.signature.Signer;
-import org.opensaml.xml.validation.ValidationException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
-import eu.stork.peps.exceptions.SAMLEngineException;
-
-/**
- * The Class HWSign. Module of sign.
- * 
- * @author fjquevedo
- */
-public final class SignHW implements SAMLEngineSignI {
-
-    /** The Constant CONFIGURATION_FILE. */
-    private static final String CONF_FILE = "configurationFile";
-
-    /** The Constant KEYSTORE_TYPE.
-    private static final String KEYSTORE_TYPE = "keystoreType" */
-
-    /** The logger. */
-    private static final Logger LOG = LoggerFactory.getLogger(SignHW.class
-	    .getName());
-
-    /** The stork own key store. */
-    private KeyStore storkOwnKeyStore = null;
-
-    /**
-     * Gets the stork own key store.
-     * 
-     * @return the stork own key store
-     */
-    public KeyStore getStorkOwnKeyStore() {
-	return storkOwnKeyStore;
-    }
-    
-    /**
-     * Gets the stork trustStore.
-     * 
-     * @return the stork own key store
-     */
-    public KeyStore getTrustStore() {
-	return storkOwnKeyStore;
-    }
-
-    /**
-     * Sets the stork own key store.
-     * 
-     * @param newkOwnKeyStore the new stork own key store
-     */
-    public void setStorkOwnKeyStore(final KeyStore newkOwnKeyStore) {
-	this.storkOwnKeyStore = newkOwnKeyStore;
-    }
-
-    /**
-     * Gets the properties.
-     * 
-     * @return the properties
-     */
-    public Properties getProperties() {
-	return properties;
-    }
-
-    /**
-     * Sets the properties.
-     * 
-     * @param newProperties the new properties
-     */
-    public void setProperties(final Properties newProperties) {
-	this.properties = newProperties;
-    }
-
-    /** The HW sign prop. */
-    private Properties properties = null;
-
-    /**
-     * @see
-     * eu.stork.peps.auth.engine.core.SAMLEngineSignI#init(java.lang.String)
-     * @param fileConf file of configuration
-     * @throws SAMLEngineException error in read file
-     */
-    public void init(final String fileConf)
-	    throws SAMLEngineException {
-	InputStream inputStr = null;
-	try {
-	inputStr = SignHW.class.getResourceAsStream("/"
-		+ fileConf);
-	properties = new Properties();
-	
-	    properties.loadFromXML(inputStr);
-	} catch (final InvalidPropertiesFormatException e) {
-	    LOG.info("Exception: invalid properties format.");
-	    throw new SAMLEngineException(e);
-	} catch (IOException e) {
-	    LOG.info("Exception: invalid file: " + fileConf);
-	    throw new SAMLEngineException(e);
-	} finally {
-	    IOUtils.closeQuietly(inputStr);
-	}
-    }
-
-
-    /**
-     * @see eu.stork.peps.auth.engine.core.SAMLEngineSignI#getCertificate()
-     * @return the X509Certificate.
-     */
-    public X509Certificate getCertificate() {
-	throw new NotImplementedException();
-    }
-
-    /**
-     * @see
-     * eu.stork.peps.auth.engine.core.SAMLEngineSignI#sign(SignableSAMLObject tokenSaml)
-     * @param tokenSaml signable SAML Object
-     * @return the SAMLObject signed.
-     * @throws SAMLEngineException error in sign token saml
-     */
-    public SAMLObject sign(final SignableSAMLObject tokenSaml) throws SAMLEngineException {
-
-	try {
-	    LOG.info("Star procces of sign");
-	    final char[] pin = properties.getProperty("keyPassword")
-		    .toCharArray();
-
-	    storkOwnKeyStore.load(null, pin);
-
-	    final String serialNumber = properties.getProperty("serialNumber");
-	    final String issuer = properties.getProperty("issuer");
-
-	    String alias = null;
-	    String aliasCert;
-	    X509Certificate certificate;
-
-	    boolean find = false;
-	    for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
-		    .hasMoreElements() && !find;) {
-		aliasCert = e.nextElement();
-		certificate = (X509Certificate) storkOwnKeyStore
-			.getCertificate(aliasCert);
-		// Verified serial number, issuer
-
-		final String serialNum = certificate.getSerialNumber()
-			.toString(16);
-		X509Principal issuerDN = new X509Principal(certificate.getIssuerDN().getName());
-		X509Principal issuerDNConf = new X509Principal(issuer);
-
-            if(serialNum.equalsIgnoreCase(serialNumber)
-                    && X509PrincipalUtil.equals(issuerDN, issuerDNConf)){
-		              alias = aliasCert;
-		              find = true;
-		}
-		
-	    }
-
-        if (!find) {
-            throw new SAMLEngineException("Certificate cannot be found in keystore ");
-        }
-	    certificate = (X509Certificate) storkOwnKeyStore.getCertificate(alias);
-	    final PrivateKey privateKey = (PrivateKey) storkOwnKeyStore.getKey(
-		    alias, pin);
-
-	    LOG.info("Recover BasicX509Credential.");
-	    final BasicX509Credential credential = new BasicX509Credential();
-
-	    LOG.debug("Load certificate");
-	    credential.setEntityCertificate(certificate);
-
-	    LOG.debug("Load privateKey");
-	    credential.setPrivateKey(privateKey);
-
-	    LOG.info("Star procces of sign");
-	    final Signature signature = (Signature) org.opensaml.xml.Configuration
-		    .getBuilderFactory().getBuilder(
-			    Signature.DEFAULT_ELEMENT_NAME).buildObject(
-			    Signature.DEFAULT_ELEMENT_NAME);
-
-	    LOG.debug("Begin signature with openSaml");
-	    signature.setSigningCredential(credential);
-
-	    /*signature.setSignatureAlgorithm(
-	    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);*/
-	    signature.setSignatureAlgorithm(
-		    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
-
-	 
-
-	    final SecurityConfiguration securityConf =
-		org.opensaml.xml.Configuration.getGlobalSecurityConfiguration();
-	    final NamedKeyInfoGeneratorManager keyInfoManager = securityConf
-		    .getKeyInfoGeneratorManager();
-	    final KeyInfoGeneratorManager keyInfoGenManager = keyInfoManager
-		    .getDefaultManager();
-	    final KeyInfoGeneratorFactory keyInfoGenFac = keyInfoGenManager
-		    .getFactory(credential);
-	    final KeyInfoGenerator keyInfoGenerator = keyInfoGenFac
-		    .newInstance();
-	    
-	    final KeyInfo keyInfo = keyInfoGenerator.generate(credential);
-
-	    signature.setKeyInfo(keyInfo);
-
-	    LOG.debug("Set Canonicalization Algorithm");
-	    signature.setCanonicalizationAlgorithm(
-		    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-
-	  //Create a second signature which will be used when signing assertion and response
-	    final Signature signature2 = (Signature) Configuration
-	    .getBuilderFactory().getBuilder(
-		    Signature.DEFAULT_ELEMENT_NAME).buildObject(
-		    Signature.DEFAULT_ELEMENT_NAME);
-	    final SecurityConfiguration secConfiguration2 = Configuration
-	    .getGlobalSecurityConfiguration();
-	    final NamedKeyInfoGeneratorManager keyInfoManager2 = secConfiguration2
-		    .getKeyInfoGeneratorManager();
-	    final KeyInfoGeneratorManager keyInfoGenManager2 = keyInfoManager2
-		    .getDefaultManager();
-	    final KeyInfoGeneratorFactory keyInfoGenFac2 = keyInfoGenManager2
-		    .getFactory(credential);
-	    final KeyInfoGenerator keyInfoGenerator2 = keyInfoGenFac2
-		    .newInstance();
-	    
-	    KeyInfo keyInfo2 = keyInfoGenerator2.generate(credential);
-	    signature2.setSigningCredential(credential);
-	    signature2.setSignatureAlgorithm(
-			    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
-	    signature2.setKeyInfo(keyInfo2);
-	    signature2.setCanonicalizationAlgorithm(
-		    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-	    	 	    
-
-	    LOG.info("Marshall samlToken.");
-	    String qn = tokenSaml.getElementQName().toString();
-	    
-	    if (qn.endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
-	    {	    
-	  		tokenSaml.setSignature(signature);
-	    	CustomAttributeQueryMarshaller mars = new CustomAttributeQueryMarshaller();
-	    	mars.marshall(tokenSaml);
-	    	Signer.signObject(signature);
-	    }
-	    else if (qn.endsWith(Response.DEFAULT_ELEMENT_LOCAL_NAME) && !qn.contains(LogoutResponse.DEFAULT_ELEMENT_LOCAL_NAME))
-	    {
-	    	Response res = (Response)tokenSaml;
-	    	List<Assertion> asserts = res.getAssertions();
-	    	//If multiple assertions we just sign the response and not the assertion
-	    	if (asserts.size() > 1)
-	    	{	    		
-	    		tokenSaml.setSignature(signature);
-	    		Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-			    .marshall(tokenSaml);
-	    		LOG.info("Sign samlToken.");
-	    	    Signer.signObject(signature);
-	    	}
-	    	//If single assertion we sign the assertion and response
-	    	else
-	    	{
-			    Assertion assertion = (Assertion)asserts.get(0);
-			    assertion.setSignature(signature);			    
-			    tokenSaml.setSignature(signature2);
-			    Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-			    .marshall(tokenSaml);
-			    LOG.info("Sign samlToken.");
-			    Signer.signObject(signature);
-			    Signer.signObject(signature2);
-	    	}
-	    }
-	    //Normally we just sign the total saml response
-	    else
-	    {
-	    	tokenSaml.setSignature(signature);
-	    	Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-		    .marshall(tokenSaml);
-	    	LOG.info("Sign samlToken.");
-		    Signer.signObject(signature);
-	    }
-
-	} catch (final MarshallingException e) {
-	    LOG.error("MarshallingException");
-	    throw new SAMLEngineException(e);
-	} catch (final NoSuchAlgorithmException e) {
-	    LOG.error("A 'xmldsig#rsa-sha1' cryptographic algorithm is requested but is not available in the environment.");
-	    throw new SAMLEngineException(e);
-	} catch (final KeyStoreException e) {
-	    LOG.error("Generic KeyStore exception.");
-	    throw new SAMLEngineException(e);
-	} catch (final SignatureException e) {
-	    LOG.error("Signature exception.");
-	    throw new SAMLEngineException(e);
-	} catch (final SecurityException e) {
-	    LOG.error("Security exception.");
-	    throw new SAMLEngineException(e);
-	} catch (final CertificateException e) {
-	    LOG.error("Certificate exception.");
-	    throw new SAMLEngineException(e);
-	} catch (final IOException e) {
-	    LOG.error("IO exception.");
-	    throw new SAMLEngineException(e);
-	} catch (final UnrecoverableKeyException e) {
-	    LOG.error("UnrecoverableKeyException exception.");
-	    throw new SAMLEngineException(e);
-	}
-
-	return tokenSaml;
-    }
-
-    /**
-     * @see
-     * eu.stork.peps.auth.engine.core.SAMLEngineSignI#validateSignature(SignableSAMLObject)
-     * @param tokenSaml the token saml
-     * @return the SAMLObject validated.
-     * @throws SAMLEngineException exception in validate signature
-     */
-    public SAMLObject validateSignature(final SignableSAMLObject tokenSaml)
-	    throws SAMLEngineException {
-	LOG.info("Start signature validation.");
-	try {
-
-	    // Validate structure signature
-	    final SAMLSignatureProfileValidator signProfValidator = 
-		new SAMLSignatureProfileValidator();
-
-	    // Indicates signature id conform to SAML Signature profile
-	    signProfValidator.validate(tokenSaml.getSignature());
-
-	    String aliasCert;
-	    X509Certificate certificate;
-
-	    final List<Credential> trustedCred = new ArrayList<Credential>();
-
-	    for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
-		    .hasMoreElements();) {
-		aliasCert = e.nextElement();
-		final BasicX509Credential credential = new BasicX509Credential();
-		certificate = (X509Certificate) storkOwnKeyStore
-			.getCertificate(aliasCert);
-		credential.setEntityCertificate(certificate);
-		trustedCred.add(credential);
-	    }
-
-	    final KeyInfo keyInfo = tokenSaml.getSignature().getKeyInfo();
-	    final List<X509Certificate> listCertificates = KeyInfoHelper
-		    .getCertificates(keyInfo);
-
-	    if (listCertificates.size() != 1) {
-		throw new SAMLEngineException("Only must be one certificate");
-	    }
-
-	    // Exist only one certificate
-	    final BasicX509Credential entityX509Cred = new BasicX509Credential();
-	    entityX509Cred.setEntityCertificate(listCertificates.get(0));
-
-	    final ExplicitKeyTrustEvaluator keyTrustEvaluator = 
-		new ExplicitKeyTrustEvaluator();
-	    if (!keyTrustEvaluator.validate(entityX509Cred, trustedCred)) {
-		throw new SAMLEngineException("Certificate it is not trusted.");
-	    }
-
-	    final SignatureValidator sigValidator = new SignatureValidator(
-		    entityX509Cred);
-
-	    sigValidator.validate(tokenSaml.getSignature());
-
-	} catch (final ValidationException e) {
-	    LOG.error("ValidationException.", e);
-	    throw new SAMLEngineException(e);
-	} catch (final KeyStoreException e) {
-	    LOG.error("ValidationException.", e);
-	    throw new SAMLEngineException(e);
-	} catch (final CertificateException e) {
-	    LOG.error("CertificateException.", e);
-	    throw new SAMLEngineException(e);
-	}
-	return tokenSaml;
-    }
-
-    /**
-     * load cryptographic service provider.
-     * 
-     * @throws SAMLEngineException the SAML engine exception
-     * Note this class was using pkcs11Provider
-     * final Provider pkcs11Provider = new sun.security.pkcs11.SunPKCS11(inputStream)
-     * if (Security.getProperty(pkcs11Provider.getName()) == null) {
-     * Security.insertProviderAt(pkcs11Provider, Security .getProviders().length)
-     * }
-     * storkOwnKeyStore = KeyStore.getInstance(properties.getProperty(KEYSTORE_TYPE))
-     */
-    public void loadCryptServiceProvider() throws SAMLEngineException {
-	LOG.info("Load Cryptographic Service Provider");
-	InputStream inputStream = null; 
-	 
-	try {
-	    inputStream = SignHW.class.getResourceAsStream("/"
-		    + properties.getProperty(CONF_FILE));
-
-	} catch (final Exception e) {	       
-	    throw new SAMLEngineException(
-		    "Error loading CryptographicServiceProvider", e);
-	} finally {
-	    IOUtils.closeQuietly(inputStream);
-	}
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java
deleted file mode 100644
index c37074eab..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-/**
- * The Class ModuleSignFactory.
- * 
- * @author fjquevedo
- * 
- */
-
-public final class SignModuleFactory {
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(SignModuleFactory.class.getName());
-
-    /**
-     * Instantiates a new module sign factory.
-     */
-    private SignModuleFactory() {
-
-    }
-
-    /**
-     * Gets the single instance of SignModuleFactory.
-     * 
-     * @param className the class name
-     * 
-     * @return single instance of SignModuleFactory
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    public static SAMLEngineSignI getInstance(final String className)
-	    throws STORKSAMLEngineException {
-	LOG.info("[START]SignModuleFactory static");
-	try {
-	    final Class cls = Class.forName(className);
-	    return (SAMLEngineSignI) cls.newInstance();
-	} catch (Exception e) {
-	    throw new STORKSAMLEngineException(e);
-	}
-
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java
deleted file mode 100644
index 6d9ac9ce3..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.Security;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.InvalidPropertiesFormatException;
-import java.util.List;
-import java.util.Properties;
-
-import eu.stork.peps.auth.engine.X509PrincipalUtil;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.NotImplementedException;
-import org.bouncycastle.jce.X509Principal;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.opensaml.Configuration;
-import org.opensaml.common.SAMLObject;
-import org.opensaml.common.SignableSAMLObject;
-import org.opensaml.saml2.core.Assertion;
-import org.opensaml.saml2.core.LogoutResponse;
-import org.opensaml.saml2.core.Response;
-import org.opensaml.security.SAMLSignatureProfileValidator;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.security.SecurityConfiguration;
-import org.opensaml.xml.security.SecurityException;
-import org.opensaml.xml.security.credential.Credential;
-import org.opensaml.xml.security.keyinfo.KeyInfoGenerator;
-import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorFactory;
-import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorManager;
-import org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager;
-import org.opensaml.xml.security.x509.BasicX509Credential;
-import org.opensaml.xml.security.trust.ExplicitKeyTrustEvaluator;
-import org.opensaml.xml.signature.KeyInfo;
-import org.opensaml.xml.signature.Signature;
-import org.opensaml.xml.signature.SignatureConstants;
-import org.opensaml.xml.signature.SignatureException;
-import org.opensaml.xml.signature.SignatureValidator;
-import org.opensaml.xml.signature.Signer;
-import org.opensaml.xml.util.Base64;
-import org.opensaml.xml.validation.ValidationException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
-import eu.stork.peps.exceptions.SAMLEngineException;
-
-/**
- * The Class SWSign. Class responsible for signing and validating of messages
- * SAML with a certificate store software.
- * 
- * @author fjquevedo
- */
-public final class SignP12 implements SAMLEngineSignI {
-
-	/** The logger. */
-	private static final Logger LOG = LoggerFactory.getLogger(SignP12.class
-			.getName());
-
-
-	/** The p12 store. */
-	private KeyStore p12Store = null;
-
-
-	/** The trust store. */
-	private KeyStore trustStore = null;
-
-
-	/**
-	 * Gets the trust store.
-	 * 
-	 * @return the trust store
-	 */
-	@Override
-	public KeyStore getTrustStore() {
-		return trustStore;
-	}
-
-	/**
-	 * Sets the trust store.
-	 * 
-	 * @param newTrustStore the new trust store
-	 */
-	public void setTrustStore(final KeyStore newTrustStore) {
-		this.trustStore = newTrustStore;
-	}
-
-	/**
-	 * The instance.
-	 * 
-	 * @return the properties
-	 */
-
-	public Properties getProperties() {
-		return properties;
-	}
-
-
-
-	/**
-	 * Gets the p12 store.
-	 * 
-	 * @return the p12 store
-	 */
-	public KeyStore getP12Store() {
-		return p12Store;
-	}
-
-
-
-	/**
-	 * Sets the p12 store.
-	 * 
-	 * @param newP12Store the new p12 store
-	 */
-	public void setP12Store(final KeyStore newP12Store) {
-		this.p12Store = newP12Store;
-	}
-
-
-
-	/**
-	 * Sets the properties.
-	 * 
-	 * @param newProperties the new properties
-	 */
-	public void setProperties(final Properties newProperties) {
-		this.properties = newProperties;
-	}
-
-	/** The SW sign prop. */
-	private Properties properties = null;
-
-
-	/**
-	 * Initialize the file configuration.
-	 * 
-	 * @param fileConf name of the file configuration
-	 * 
-	 * @throws SAMLEngineException error at the load from  file configuration
-	 */
-	@Override
-	public void init(final String fileConf) throws SAMLEngineException {
-		InputStream fileProperties = null;
-		properties = new Properties();
-		try {
-			try {
-				LOG.debug("Fichero a cargar " + fileConf);
-				fileProperties = new FileInputStream(fileConf);
-				properties.loadFromXML(fileProperties);
-			} catch (Exception e) {
-				LOG.error("Fallo al cargar el recurso externo. Se reintenta como fichero interno.");
-				fileProperties = SignP12.class.getResourceAsStream("/" + fileConf);
-				if (fileProperties == null) {
-					fileProperties = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileConf);
-					if (fileProperties == null) {
-						Enumeration<URL> files = ClassLoader.getSystemClassLoader().getResources(fileConf);
-						if (files != null && files.hasMoreElements()) {
-							LOG.info("Se han encontrado recurso/s. Se toma el primero.");
-							fileProperties = ClassLoader.getSystemClassLoader().getResourceAsStream(files.nextElement().getFile());
-						} else {
-							throw new IOException("No se pudo recuperar el fichero: " + fileConf, e);
-						}
-					}
-				}
-				LOG.debug("Recuperados " + fileProperties.available() + " bytes");
-				properties.loadFromXML(fileProperties);
-			}
-		} catch (InvalidPropertiesFormatException e) {
-			LOG.info("Exception: invalid properties format.");
-			throw new SAMLEngineException(e);
-		} catch (IOException e) {
-			LOG.info("Exception: invalid file: " + fileConf);
-			throw new SAMLEngineException(e);
-		} finally {
-			IOUtils.closeQuietly(fileProperties);
-		}
-	}
-
-	/**
-	 * Gets the certificate.
-	 * 
-	 * @return the X509Certificate
-	 *     
-	 */
-	@Override
-	public X509Certificate getCertificate() {
-		throw new NotImplementedException();
-	}
-
-	/**
-	 * Sign the token SAML.
-	 * 
-	 * @param tokenSaml token SAML
-	 * 
-	 * @return the X509Certificate signed.
-	 * 
-	 * @throws SAMLEngineException error at sign SAML token
-	 *
-	 */
-	@Override
-	public SAMLObject sign(final SignableSAMLObject tokenSaml)
-			throws SAMLEngineException {
-		LOG.info("Start Sign process");
-		try {
-
-			final String serialNumber = properties.getProperty("serialNumber");
-			final String issuer = properties.getProperty("issuer");
-
-			String alias = null;
-			String aliasCert;
-			X509Certificate certificate;
-
-			boolean find = false;
-			for (final Enumeration<String> e = p12Store.aliases(); e
-					.hasMoreElements() && !find;) {
-				aliasCert = e.nextElement();
-				certificate = (X509Certificate) p12Store
-						.getCertificate(aliasCert);
-
-				final String serialNum = certificate.getSerialNumber()
-						.toString(16);
-
-				X509Principal issuerDN = new X509Principal(certificate.getIssuerDN().getName());
-				X509Principal issuerDNConf = new X509Principal(issuer);
-
-				if(serialNum.equalsIgnoreCase(serialNumber)
-						&& X509PrincipalUtil.equals(issuerDN, issuerDNConf)){
-					alias = aliasCert;
-					find = true;
-				}
-
-			}
-
-			certificate = (X509Certificate) p12Store
-					.getCertificate(alias);
-			final PrivateKey privateKey = (PrivateKey) p12Store.getKey(
-					alias, properties.getProperty("keyPassword").toCharArray());
-
-			LOG.info("Recover BasicX509Credential.");
-			final BasicX509Credential credential = new BasicX509Credential();
-
-			LOG.debug("Load certificate");
-			credential.setEntityCertificate(certificate);
-
-			LOG.debug("Load privateKey");
-			credential.setPrivateKey(privateKey);
-
-			LOG.debug("Begin signature with openSaml");
-			final Signature signature = (Signature) org.opensaml.xml.Configuration
-					.getBuilderFactory().getBuilder(
-							Signature.DEFAULT_ELEMENT_NAME).buildObject(
-									Signature.DEFAULT_ELEMENT_NAME);
-
-			signature.setSigningCredential(credential);
-
-			/*signature.setSignatureAlgorithm(
-	    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);*/
-			signature.setSignatureAlgorithm(
-					SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
-
-			final SecurityConfiguration secConfiguration = org.opensaml.xml.Configuration
-					.getGlobalSecurityConfiguration();
-			final NamedKeyInfoGeneratorManager keyInfoManager = secConfiguration
-					.getKeyInfoGeneratorManager();
-			final KeyInfoGeneratorManager keyInfoGenManager = keyInfoManager
-					.getDefaultManager();
-			final KeyInfoGeneratorFactory keyInfoGenFac = keyInfoGenManager
-					.getFactory(credential);
-			final KeyInfoGenerator keyInfoGenerator = keyInfoGenFac
-					.newInstance();
-
-			final KeyInfo keyInfo = keyInfoGenerator.generate(credential);
-
-			signature.setKeyInfo(keyInfo);
-			signature.setCanonicalizationAlgorithm(
-					SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-
-			//Create a second signature which will be used when signing assertion and response
-			final Signature signature2 = (Signature) org.opensaml.xml.Configuration
-					.getBuilderFactory().getBuilder(
-							Signature.DEFAULT_ELEMENT_NAME).buildObject(
-									Signature.DEFAULT_ELEMENT_NAME);
-			final SecurityConfiguration secConfiguration2 = org.opensaml.xml.Configuration
-					.getGlobalSecurityConfiguration();
-			final NamedKeyInfoGeneratorManager keyInfoManager2 = secConfiguration2
-					.getKeyInfoGeneratorManager();
-			final KeyInfoGeneratorManager keyInfoGenManager2 = keyInfoManager2
-					.getDefaultManager();
-			final KeyInfoGeneratorFactory keyInfoGenFac2 = keyInfoGenManager2
-					.getFactory(credential);
-			final KeyInfoGenerator keyInfoGenerator2 = keyInfoGenFac2
-					.newInstance();
-
-			KeyInfo keyInfo2 = keyInfoGenerator2.generate(credential);
-			signature2.setSigningCredential(credential);
-			signature2.setSignatureAlgorithm(
-					SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
-			signature2.setKeyInfo(keyInfo2);
-			signature2.setCanonicalizationAlgorithm(
-					SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-
-
-			LOG.info("Marshall samlToken.");
-			String qn = tokenSaml.getElementQName().toString();
-
-			if (qn.endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
-			{	    
-				tokenSaml.setSignature(signature);
-				CustomAttributeQueryMarshaller mars = new CustomAttributeQueryMarshaller();
-				mars.marshall(tokenSaml);
-				Signer.signObject(signature);
-			}
-			else if (qn.endsWith(Response.DEFAULT_ELEMENT_LOCAL_NAME) && !qn.contains(LogoutResponse.DEFAULT_ELEMENT_LOCAL_NAME))
-			{
-				Response res = (Response)tokenSaml;
-				List<Assertion> asserts = res.getAssertions();
-				//If multiple assertions we just sign the response and not the assertion
-				if (asserts.size() > 1)
-				{	    		
-					tokenSaml.setSignature(signature);
-					org.opensaml.xml.Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-					.marshall(tokenSaml);
-					LOG.info("Sign samlToken.");
-					Signer.signObject(signature);
-				}
-				//If single assertion we sign the assertion and response
-				else
-				{
-					Assertion assertion = asserts.get(0);
-					assertion.setSignature(signature);			    
-					tokenSaml.setSignature(signature2);
-					org.opensaml.xml.Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-					.marshall(tokenSaml);
-					LOG.info("Sign samlToken.");
-					Signer.signObject(signature);
-					Signer.signObject(signature2);
-				}
-			}
-			//Normally we just sign the total saml response
-			else
-			{
-				tokenSaml.setSignature(signature);
-				org.opensaml.xml.Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-				.marshall(tokenSaml);
-				LOG.info("Sign samlToken.");
-				Signer.signObject(signature);
-			}
-
-		} catch (MarshallingException e) {
-			LOG.error("MarshallingException");
-			throw new SAMLEngineException(e);
-		} catch (NoSuchAlgorithmException e) {
-			LOG.error("A 'xmldsig#rsa-sha1' cryptographic algorithm is requested but is not available in the environment.");
-			throw new SAMLEngineException(e);
-		} catch (KeyStoreException e) {
-			LOG.error("Generic KeyStore exception.");
-			throw new SAMLEngineException(e);
-		} catch (SignatureException e) {
-			LOG.error("Signature exception.");
-			throw new SAMLEngineException(e);
-		} catch (SecurityException e) {
-			LOG.error("Security exception.");
-			throw new SAMLEngineException(e);
-		} catch (UnrecoverableKeyException e) {
-			LOG.error("UnrecoverableKey exception.");
-			throw new SAMLEngineException(e);
-		}
-
-		return tokenSaml;
-	}
-
-	/**
-	 * Validate signature.
-	 * 
-	 * @param tokenSaml token SAML
-	 * 
-	 * @return the SAMLObject validated.
-	 * 
-	 * @throws SAMLEngineException error validate signature
-	 * 
-	 */
-	@Override
-	public SAMLObject validateSignature(final SignableSAMLObject tokenSaml)
-			throws SAMLEngineException {
-		LOG.info("Start signature validation.");
-		try {
-
-			// Validate structure signature
-			final SAMLSignatureProfileValidator sigProfValidator = 
-					new SAMLSignatureProfileValidator();
-			try {
-				// Indicates signature id conform to SAML Signature profile
-				sigProfValidator.validate(tokenSaml.getSignature());
-			} catch (ValidationException e) {
-				LOG.error("ValidationException: signature isn't conform to SAML Signature profile.");
-				throw new SAMLEngineException(e);
-			}
-
-			String aliasCert = null;
-			X509Certificate certificate;
-
-			final List<Credential> trustCred = new ArrayList<Credential>();
-
-			for (final Enumeration<String> e = trustStore.aliases(); e
-					.hasMoreElements();) 
-			{
-				aliasCert = e.nextElement();
-				final BasicX509Credential credential = new BasicX509Credential();
-				certificate = (X509Certificate) trustStore
-						.getCertificate(aliasCert);
-				credential.setEntityCertificate(certificate);
-				trustCred.add(credential);
-			}
-
-			final KeyInfo keyInfo = tokenSaml.getSignature().getKeyInfo();
-
-			final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
-					.getX509Datas().get(0).getX509Certificates().get(0);
-
-			final CertificateFactory certFact = CertificateFactory
-					.getInstance("X.509");
-			final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
-					.decode(xmlCert.getValue()));
-			final X509Certificate cert = (X509Certificate) certFact
-					.generateCertificate(bis);
-
-			// Exist only one certificate
-			final BasicX509Credential entityX509Cred = new BasicX509Credential();
-			entityX509Cred.setEntityCertificate(cert);
-
-			/* A better use of PKI based validation but not wanted for STORK...
-			boolean trusted = false;
-
-			for (final Enumeration<String> e = trustStore.aliases(); e.hasMoreElements();) 
-			{
-				aliasCert = e.nextElement();		
-				certificate = (X509Certificate) trustStore.getCertificate(aliasCert);					
-				try {
-					cert.verify(certificate.getPublicKey());
-					trusted = true;
-					break;
-				}
-				catch (Exception ex) {
-					//Do nothing - cert not trusted yet
-				}
-			}
-
-			if (!trusted)
-				throw new SAMLEngineException("Certificate is not trusted.");*/
-
-			// Validate trust certificates
-			final ExplicitKeyTrustEvaluator keyTrustEvaluator = 
-					new ExplicitKeyTrustEvaluator();
-			if (!keyTrustEvaluator.validate(entityX509Cred, trustCred)) 
-			{
-				throw new SAMLEngineException("Certificate it is not trusted.");
-			}
-
-			// Validate signature
-			final SignatureValidator sigValidator = new SignatureValidator(
-					entityX509Cred);
-			sigValidator.validate(tokenSaml.getSignature());
-
-		} catch (ValidationException e) {
-			LOG.error("ValidationException.");
-			throw new SAMLEngineException(e);
-		} catch (KeyStoreException e) {
-			LOG.error("KeyStoreException.", e);
-			throw new SAMLEngineException(e);
-		} catch (GeneralSecurityException e) {
-			LOG.error("GeneralSecurityException.", e);
-			throw new SAMLEngineException(e);
-		}
-		return tokenSaml;
-	}
-
-
-	/**
-	 * Load cryptographic service provider.
-	 * 
-	 * @throws SAMLEngineException the SAML engine exception
-	 */
-	@Override
-	public void loadCryptServiceProvider() throws SAMLEngineException {
-		LOG.info("Load Cryptographic Service Provider");
-
-		FileInputStream fis = null;
-		FileInputStream fisTrustStore = null;
-
-		try {
-			// Dynamically register Bouncy Castle provider.
-			boolean found = false;
-			// Check if BouncyCastle is already registered as a provider
-			final Provider[] providers = Security.getProviders();
-			for (int i = 0; i < providers.length; i++) {
-				if (providers[i].getName().equals(
-						BouncyCastleProvider.PROVIDER_NAME)) {
-					found = true;
-				}
-			}
-
-			// Register only if the provider has not been previously registered
-			if (!found) {
-				LOG.debug("SAMLCore: Register Bouncy Castle provider.");
-				Security.insertProviderAt(new BouncyCastleProvider(), Security
-						.getProviders().length);
-			}
-
-			p12Store = KeyStore.getInstance(properties
-					.getProperty("keystoreType"));
-
-			fis = new FileInputStream(properties
-					.getProperty("keystorePath"));
-
-			p12Store.load(fis, properties.getProperty(
-					"keyStorePassword").toCharArray());
-
-
-			trustStore = KeyStore.getInstance(properties
-					.getProperty("trustStoreType"));
-
-			fisTrustStore = new FileInputStream(properties
-					.getProperty("trustStorePath"));
-			trustStore.load(fisTrustStore, properties.getProperty(
-					"trustStorePassword").toCharArray());
-
-		} catch (Exception e) {
-			throw new SAMLEngineException(
-					"Error loading CryptographicServiceProvider", e);
-		}  finally {
-			IOUtils.closeQuietly(fis);
-			IOUtils.closeQuietly(fisTrustStore);
-		}	
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java
deleted file mode 100644
index e31688069..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java
+++ /dev/null
@@ -1,527 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import eu.stork.peps.auth.engine.X509PrincipalUtil;
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
-import eu.stork.peps.exceptions.SAMLEngineException;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.NotImplementedException;
-import org.bouncycastle.jce.X509Principal;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.opensaml.Configuration;
-import org.opensaml.common.SAMLObject;
-import org.opensaml.common.SignableSAMLObject;
-import org.opensaml.saml2.core.Assertion;
-import org.opensaml.saml2.core.LogoutResponse;
-import org.opensaml.saml2.core.Response;
-import org.opensaml.security.SAMLSignatureProfileValidator;
-import org.opensaml.xml.io.MarshallingException;
-import org.opensaml.xml.security.SecurityConfiguration;
-import org.opensaml.xml.security.SecurityException;
-import org.opensaml.xml.security.credential.Credential;
-import org.opensaml.xml.security.keyinfo.KeyInfoGenerator;
-import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorFactory;
-import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorManager;
-import org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager;
-import org.opensaml.xml.security.trust.ExplicitKeyTrustEvaluator;
-import org.opensaml.xml.security.trust.ExplicitX509CertificateTrustEvaluator;
-import org.opensaml.xml.security.x509.BasicX509Credential;
-import org.opensaml.xml.signature.*;
-import org.opensaml.xml.signature.Signature;
-import org.opensaml.xml.signature.SignatureException;
-import org.opensaml.xml.signature.Signer;
-import org.opensaml.xml.util.Base64;
-import org.opensaml.xml.validation.ValidationException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.*;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.X509Certificate;
-import java.util.*;
-
-
-/**
- * The Class SWSign. Class responsible for signing and validating of messages
- * SAML with a certificate store software.
- *
- * @author fjquevedo
- */
-public class SignSW implements SAMLEngineSignI {
-
-    /**
-     * The Constant KEYSTORE_TYPE.
-     */
-    private static final String KEYSTORE_TYPE = "keystoreType";
-
-    /**
-     * The Constant KEY_STORE_PASSWORD.
-     */
-    private static final String KEY_STORE_PASS = "keyStorePassword";
-
-    /**
-     * The logger.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger(SignSW.class
-            .getName());
-
-    /**
-     * The stork own key store.
-     */
-    private KeyStore storkOwnKeyStore = null;
-
-    /**
-     * The instance.
-     *
-     * @return the properties
-     */
-
-    public final Properties getProperties() {
-        return properties;
-    }
-
-    /**
-     * Gets the stork own key store.
-     *
-     * @return the stork own key store
-     */
-    public final KeyStore getStorkOwnKeyStore() {
-        return storkOwnKeyStore;
-    }
-
-    /**
-     * Gets the stork trustStore.
-     *
-     * @return the stork own key store
-     */
-    public KeyStore getTrustStore() {
-        return storkOwnKeyStore;
-    }
-
-    /**
-     * Sets the stork own key store.
-     *
-     * @param newkOwnKeyStore the new stork own key store
-     */
-    public final void setStorkOwnKeyStore(final KeyStore newkOwnKeyStore) {
-        this.storkOwnKeyStore = newkOwnKeyStore;
-    }
-
-    /**
-     * Sets the properties.
-     *
-     * @param newProperties the new properties
-     */
-    public final void setProperties(final Properties newProperties) {
-        this.properties = newProperties;
-    }
-
-    /**
-     * The SW sign prop.
-     */
-    private Properties properties = null;
-
-
-    /**
-     * Inits the file configuration.
-     *
-     * @param fileConf name of the file configuration
-     * @throws SAMLEngineException error at the load from  file configuration
-     */
-    public final void init(final String fileConf)
-            throws SAMLEngineException {
-        InputStream fileProperties = null;
-        // fetch base from system properties, give a default if there is nothing configured
-        String base = System.getProperty("eu.stork.samlengine.config.location");
-        if (null != base) {
-            if (!base.endsWith("/")) {
-                base += "/";
-            }
-        } else {
-            base = "/";
-        }
-
-        try {
-            if (null != base)
-                fileProperties = new FileInputStream(base + fileConf);
-            else
-                fileProperties = SignSW.class.getResourceAsStream("/"
-                        + fileConf);
-            properties = new Properties();
-
-            properties.loadFromXML(fileProperties);
-            fileProperties.close();
-        } catch (InvalidPropertiesFormatException e) {
-            LOG.info("Exception: invalid properties format.");
-            throw new SAMLEngineException(e);
-        } catch (IOException e) {
-            LOG.info("Exception: invalid file: " + fileConf);
-            throw new SAMLEngineException(e);
-        } finally {
-            IOUtils.closeQuietly(fileProperties);
-        }
-    }
-
-    /**
-     * @return the X509Certificate
-     * @see eu.stork.peps.auth.engine.core.SAMLEngineSignI#getCertificate()
-     */
-    public final X509Certificate getCertificate() {
-        throw new NotImplementedException();
-    }
-
-
-    /**
-     * Sign the token SAML.
-     *
-     * @param tokenSaml the token SAML.
-     * @return the SAML object
-     * @throws SAMLEngineException the SAML engine exception
-     */
-    public final SAMLObject sign(final SignableSAMLObject tokenSaml)
-            throws SAMLEngineException {
-        LOG.info("Start Sign process.");
-        try {
-            final String serialNumber = properties.getProperty("serialNumber");
-            final String issuer = properties.getProperty("issuer");
-
-            String alias = null;
-            String aliasCert;
-            X509Certificate certificate;
-            boolean find = false;
-
-            for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
-                    .hasMoreElements() && !find; ) {
-                aliasCert = e.nextElement();
-                certificate = (X509Certificate) storkOwnKeyStore
-                        .getCertificate(aliasCert);
-
-                final String serialNum = certificate.getSerialNumber()
-                        .toString(16);
-
-                X509Principal issuerDN = new X509Principal(certificate.getIssuerDN().getName());
-                X509Principal issuerDNConf = new X509Principal(issuer);
-
-                if (serialNum.equalsIgnoreCase(serialNumber)
-                        && X509PrincipalUtil.equals(issuerDN, issuerDNConf)) {
-                    alias = aliasCert;
-                    find = true;
-                }
-            }
-            if (!find) {
-                throw new SAMLEngineException("Certificate cannot be found in keystore ");
-            }
-            certificate = (X509Certificate) storkOwnKeyStore.getCertificate(alias);
-            final PrivateKey privateKey = (PrivateKey) storkOwnKeyStore.getKey(
-                    alias, properties.getProperty("keyPassword").toCharArray());
-
-            LOG.info("Recover BasicX509Credential.");
-            final BasicX509Credential credential = new BasicX509Credential();
-
-            LOG.debug("Load certificate");
-            credential.setEntityCertificate(certificate);
-
-            LOG.debug("Load privateKey");
-            credential.setPrivateKey(privateKey);
-
-            LOG.debug("Begin signature with openSaml");
-            final Signature signature = (Signature) Configuration
-                    .getBuilderFactory().getBuilder(
-                            Signature.DEFAULT_ELEMENT_NAME).buildObject(
-                            Signature.DEFAULT_ELEMENT_NAME);
-
-            signature.setSigningCredential(credential);
-            signature.setSignatureAlgorithm(
-                    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
-            //signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
-
-
-            final SecurityConfiguration secConfiguration = Configuration
-                    .getGlobalSecurityConfiguration();
-            final NamedKeyInfoGeneratorManager keyInfoManager = secConfiguration
-                    .getKeyInfoGeneratorManager();
-            final KeyInfoGeneratorManager keyInfoGenManager = keyInfoManager
-                    .getDefaultManager();
-            final KeyInfoGeneratorFactory keyInfoGenFac = keyInfoGenManager
-                    .getFactory(credential);
-            final KeyInfoGenerator keyInfoGenerator = keyInfoGenFac
-                    .newInstance();
-
-            KeyInfo keyInfo = keyInfoGenerator.generate(credential);
-
-            signature.setKeyInfo(keyInfo);
-            signature.setCanonicalizationAlgorithm(
-                    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-
-            //Create a second signature which will be used when signing assertion and response
-            final Signature signature2 = (Signature) Configuration
-                    .getBuilderFactory().getBuilder(
-                            Signature.DEFAULT_ELEMENT_NAME).buildObject(
-                            Signature.DEFAULT_ELEMENT_NAME);
-            final SecurityConfiguration secConfiguration2 = Configuration
-                    .getGlobalSecurityConfiguration();
-            final NamedKeyInfoGeneratorManager keyInfoManager2 = secConfiguration2
-                    .getKeyInfoGeneratorManager();
-            final KeyInfoGeneratorManager keyInfoGenManager2 = keyInfoManager2
-                    .getDefaultManager();
-            final KeyInfoGeneratorFactory keyInfoGenFac2 = keyInfoGenManager2
-                    .getFactory(credential);
-            final KeyInfoGenerator keyInfoGenerator2 = keyInfoGenFac2
-                    .newInstance();
-
-            KeyInfo keyInfo2 = keyInfoGenerator2.generate(credential);
-            signature2.setSigningCredential(credential);
-            signature2.setSignatureAlgorithm(
-                    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
-            //signature2.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
-            signature2.setKeyInfo(keyInfo2);
-            signature2.setCanonicalizationAlgorithm(
-                    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
-
-
-            LOG.info("Marshall samlToken.");
-            String qn = tokenSaml.getElementQName().toString();
-
-            if (qn.endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME)) {
-                tokenSaml.setSignature(signature);
-                CustomAttributeQueryMarshaller mars = new CustomAttributeQueryMarshaller();
-                mars.marshall(tokenSaml);
-                Signer.signObject(signature);
-            } else if (qn.endsWith(Response.DEFAULT_ELEMENT_LOCAL_NAME) && !qn.contains(LogoutResponse.DEFAULT_ELEMENT_LOCAL_NAME)) {
-                Response res = (Response) tokenSaml;
-                List<Assertion> asserts = res.getAssertions();
-                //If multiple assertions we just sign the response and not the assertion
-                if (asserts.size() > 1) {
-                    tokenSaml.setSignature(signature);
-                    Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-                            .marshall(tokenSaml);
-                    LOG.info("Sign samlToken.");
-                    Signer.signObject(signature);
-                }
-                //If single assertion we sign the assertion and response
-                else {
-                    Assertion assertion = (Assertion) asserts.get(0);
-                    assertion.setSignature(signature);
-                    tokenSaml.setSignature(signature2);
-                    Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-                            .marshall(tokenSaml);
-                    LOG.info("Sign samlToken.");
-                    Signer.signObject(signature);
-                    Signer.signObject(signature2);
-                }
-            }
-            //Normally we just sign the total saml response
-            else {
-                tokenSaml.setSignature(signature);
-                Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
-                        .marshall(tokenSaml);
-                LOG.info("Sign samlToken.");
-                Signer.signObject(signature);
-            }
-
-
-        } catch (MarshallingException e) {
-            LOG.error("MarshallingException");
-            throw new SAMLEngineException(e);
-        } catch (NoSuchAlgorithmException e) {
-            LOG.error("A 'xmldsig#rsa-sha1' cryptographic algorithm is requested but is not available in the environment.");
-            throw new SAMLEngineException(e);
-        } catch (KeyStoreException e) {
-            LOG.error("Generic KeyStore exception.");
-            throw new SAMLEngineException(e);
-        } catch (SignatureException e) {
-            LOG.error("Signature exception.");
-            throw new SAMLEngineException(e);
-        } catch (SecurityException e) {
-            LOG.error("Security exception.");
-            throw new SAMLEngineException(e);
-        } catch (UnrecoverableKeyException e) {
-            LOG.error("UnrecoverableKey exception.");
-            throw new SAMLEngineException(e);
-        }
-
-        return tokenSaml;
-    }
-
-    /**
-     * @param tokenSaml token SAML
-     * @return the SAMLObject validated.
-     * @throws SAMLEngineException error validate signature
-     * @see eu.stork.peps.auth.engine.core.SAMLEngineSignI#validateSignature(org.opensaml.common.SignableSAMLObject)
-     */
-    public final SAMLObject validateSignature(final SignableSAMLObject tokenSaml)
-            throws SAMLEngineException {
-        LOG.info("Start signature validation.");
-        try {
-
-            // Validate structure signature
-            final SAMLSignatureProfileValidator sigProfValidator =
-                    new SAMLSignatureProfileValidator();
-            try {
-                // Indicates signature id conform to SAML Signature profile
-                sigProfValidator.validate(tokenSaml.getSignature());
-            } catch (ValidationException e) {
-                LOG.error("ValidationException: signature isn't conform to SAML Signature profile.");
-                throw new SAMLEngineException(e);
-            }
-
-            String aliasCert = null;
-            X509Certificate certificate;
-
-            final List<Credential> trustCred = new ArrayList<Credential>();
-
-            for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
-                    .hasMoreElements(); ) {
-                aliasCert = e.nextElement();
-                final BasicX509Credential credential = new BasicX509Credential();
-                certificate = (X509Certificate) storkOwnKeyStore
-                        .getCertificate(aliasCert);
-                credential.setEntityCertificate(certificate);
-                trustCred.add(credential);
-            }
-
-            final KeyInfo keyInfo = tokenSaml.getSignature().getKeyInfo();
-
-            final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
-                    .getX509Datas().get(0).getX509Certificates().get(0);
-
-            final CertificateFactory certFact = CertificateFactory
-                    .getInstance("X.509");
-            final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
-                    .decode(xmlCert.getValue()));
-            final X509Certificate cert = (X509Certificate) certFact
-                    .generateCertificate(bis);
-
-            // Exist only one certificate
-            final BasicX509Credential entityX509Cred = new BasicX509Credential();
-            entityX509Cred.setEntityCertificate(cert);
-
-            try {
-                cert.checkValidity();
-            } catch (CertificateExpiredException exp) {
-                throw new SAMLEngineException("Certificate expired.");
-            } catch (CertificateNotYetValidException exp) {
-                throw new SAMLEngineException("Certificate not yet valid.");
-            }
-
-		/* A better use of PKI based validation but not wanted for STORK... 
-        boolean trusted = false;
-		
-		for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e.hasMoreElements();) 
-	    {
-	    	aliasCert = e.nextElement();		
-	    	certificate = (X509Certificate) storkOwnKeyStore.getCertificate(aliasCert);					
-	    	try {
-	    		cert.verify(certificate.getPublicKey());
-	    		trusted = true;
-	    		break;
-	    	}
-	    	catch (Exception ex) {
-	    		//Do nothing - cert not trusted yet
-	    	}
-	    }
-		
-		if (!trusted)
-		    throw new SAMLEngineException("Certificate is not trusted.");*/
-
-            // Validate trust certificates
-            final ExplicitX509CertificateTrustEvaluator chainTrustEvaluator = new ExplicitX509CertificateTrustEvaluator();
-
-            if (!chainTrustEvaluator.validate(entityX509Cred, trustCred)) {
-                throw new SAMLEngineException("Certificate is not trusted.");
-            }
-            final ExplicitKeyTrustEvaluator keyTrustEvaluator =
-                    new ExplicitKeyTrustEvaluator();
-
-            if (!keyTrustEvaluator.validate(entityX509Cred, trustCred)) {
-                throw new SAMLEngineException("Certificate is not trusted.");
-            }
-
-            // Validate signature
-            final SignatureValidator sigValidator = new SignatureValidator(
-                    entityX509Cred);
-            sigValidator.validate(tokenSaml.getSignature());
-
-        } catch (ValidationException e) {
-            LOG.error("ValidationException.");
-            throw new SAMLEngineException(e);
-        } catch (KeyStoreException e) {
-            LOG.error("KeyStoreException.", e);
-            throw new SAMLEngineException(e);
-        } catch (GeneralSecurityException e) {
-            LOG.error("GeneralSecurityException.", e);
-            throw new SAMLEngineException(e);
-        }
-        LOG.info(tokenSaml.getSignatureReferenceID());
-        LOG.info("Start signature validation - END.");
-        return tokenSaml;
-    }
-
-
-    /**
-     * Load cryptographic service provider.
-     *
-     * @throws SAMLEngineException the SAML engine exception
-     */
-    public final void loadCryptServiceProvider() throws SAMLEngineException {
-        LOG.info("Load Cryptographic Service Provider");
-        FileInputStream fis = null;
-        try {
-            // Dynamically register Bouncy Castle provider.
-            boolean found = false;
-            // Check if BouncyCastle is already registered as a provider
-            final Provider[] providers = Security.getProviders();
-            for (int i = 0; i < providers.length; i++) {
-                if (providers[i].getName().equals(
-                        BouncyCastleProvider.PROVIDER_NAME)) {
-                    found = true;
-                }
-            }
-
-            // Register only if the provider has not been previously registered
-            if (!found) {
-                LOG.info("SAMLCore: Register Bouncy Castle provider.");
-                Security.insertProviderAt(new BouncyCastleProvider(), Security
-                        .getProviders().length);
-            }
-
-            storkOwnKeyStore = KeyStore.getInstance(properties
-                    .getProperty(KEYSTORE_TYPE));
-
-            LOG.info("Loading KeyInfo from keystore file " + properties.getProperty("keystorePath"));
-            fis = new FileInputStream(properties
-                    .getProperty("keystorePath"));
-
-            storkOwnKeyStore.load(fis, properties.getProperty(
-                    KEY_STORE_PASS).toCharArray());
-
-        } catch (Exception e) {
-            LOG.error("Error loading CryptographicServiceProvider", e);
-            throw new SAMLEngineException(
-                    "Error loading CryptographicServiceProvider", e);
-        } finally {
-            IOUtils.closeQuietly(fis);
-        }
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java
deleted file mode 100644
index a60515593..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-
-import eu.stork.peps.auth.engine.core.SAMLCore;
-import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
-
-/**
- * The Class VIDPAuthenticationAttributesBuilder.
- * 
- * @author fjquevedo
- */
-public final class VIDPAuthenticationAttributesBuilder extends AbstractSAMLObjectBuilder<VIDPAuthenticationAttributes> {
-    
-
-    /** {@inheritDoc} */
-    public VIDPAuthenticationAttributes buildObject() {
-        return buildObject(SAMLCore.STORK10P_NS.getValue(), VIDPAuthenticationAttributes.DEF_LOCAL_NAME, SAMLCore.STORK10P_PREFIX.getValue());
-    }
-
-    /** {@inheritDoc} */
-    public VIDPAuthenticationAttributes buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
-        return new VIDPAuthenticationAttributesImpl(namespaceURI, localName, namespacePrefix);
-    }
-    
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java
deleted file mode 100644
index 25737e307..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.opensaml.common.impl.AbstractSignableSAMLObject;
-import org.opensaml.xml.XMLObject;
-
-import eu.stork.peps.auth.engine.core.CitizenCountryCode;
-import eu.stork.peps.auth.engine.core.SPInformation;
-import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class VIDPAuthenticationAttributesImpl.
- * 
- * @author fjquevedo
- */
-public final class VIDPAuthenticationAttributesImpl extends AbstractSignableSAMLObject implements
-VIDPAuthenticationAttributes {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(VIDPAuthenticationAttributesImpl.class.getName());
-    /** The citizen country code. */
-    private CitizenCountryCode citizenCountryCode;
-    
-    /** The SP information. */
-    private SPInformation spInformation;
-
-	/**
-     * Instantiates a new requested attributes implement.
-     * 
-     * @param namespaceURI the namespace URI
-     * @param elementLocalName the element local name
-     * @param namespacePrefix the namespace prefix
-     */
-    protected VIDPAuthenticationAttributesImpl(final String namespaceURI,
-	    final String elementLocalName, final String namespacePrefix) {	
-	super(namespaceURI, elementLocalName, namespacePrefix);
-    }
-    
-   
-    /**
-     * getCitizenCountryCode.
-     * 
-     * @return the citizen country code
-     */    
-    public CitizenCountryCode getCitizenCountryCode() {
-    	return citizenCountryCode;
-    }
-    
-    /**
-     * getSPInformation
-     * 
-     * @return the SP information
-     */
-    public SPInformation getSPInformation() {
-		return spInformation;
-	}
-
-    /**
-     * Gets the ordered children.
-     * 
-     * @return the ordered children
-     *
-     */
-    public List<XMLObject> getOrderedChildren() {
-	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
-
-	children.add(citizenCountryCode);
-	children.add(spInformation);
-		
-	if (getSignature() != null) {
-	    children.add(getSignature());
-	}
-	
-	return Collections.unmodifiableList(children);
-
-    }
-
-    /**
-     * Gets the signature reference id.
-     * 
-     * @return the signature reference id
-     *
-     */
-    public String getSignatureReferenceID() {
-	return null;
-    }
-    
-    /**
-     * Sets the citizen country code.
-     * 
-     * @param newCitizenCountryCode the new citizen country code
-     *
-     */
-    public void setCitizenCountryCode(CitizenCountryCode newCitizenCountryCode) {
-	this.citizenCountryCode = prepareForAssignment(this.citizenCountryCode, newCitizenCountryCode);	
-    }    
-    
-    /**
-     * Sets the SP information.
-     * 
-     * @param newSPInformation the new SP information
-     *
-     */
-    public void setSPInformation(SPInformation newSPInformation) {
-		this.spInformation = prepareForAssignment(this.spInformation, newSPInformation);
-	}
-
-    @Override
-    public int hashCode() {
-        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
-        return super.hashCode();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java
deleted file mode 100644
index 5635ddd6b..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
-
-/**
- * The Class VIDPAuthenticationAttributesMarshaller.
- * 
- * @author fjquevedo
- */
-public class VIDPAuthenticationAttributesMarshaller extends AbstractSAMLObjectMarshaller {
-
-    /**
-     * Instantiates a new vIDP authentication attributes marshaller.
-     */
-    public VIDPAuthenticationAttributesMarshaller() {
-	super();
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java
deleted file mode 100644
index ba4a4fe3a..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.impl;
-
-import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.UnmarshallingException;
-
-import eu.stork.peps.auth.engine.core.CitizenCountryCode;
-import eu.stork.peps.auth.engine.core.SPInformation;
-import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
-
-/**
- * The Class VIDPAuthenticationAttributesUnmarshaller.
- * 
- * @author fjquevedo
- */
-public class VIDPAuthenticationAttributesUnmarshaller extends
-	AbstractSAMLObjectUnmarshaller {
-
-    /**
-     * Process child element.
-     * 
-     * @param parentObject the parent object
-     * @param childObject the child object
-     * 
-     * @throws UnmarshallingException the unmarshalling exception
-     *
-     */
-    protected final void processChildElement(final XMLObject parentObject,
-	    final XMLObject childObject) throws UnmarshallingException {
-	final VIDPAuthenticationAttributes vIDPAuthenticationAttr = (VIDPAuthenticationAttributes) parentObject;
-
-	if (childObject instanceof CitizenCountryCode) {
-	    vIDPAuthenticationAttr.setCitizenCountryCode((CitizenCountryCode) childObject);
-	} else if (childObject instanceof SPInformation) {
-		vIDPAuthenticationAttr.setSPInformation((SPInformation) childObject);
-	} else {
-	    super.processChildElement(parentObject, childObject);
-	}	
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java
deleted file mode 100644
index 07db9c9db..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.
- */
-
-/**
- * Implementations of STORK 1.0 core specification types and elements.
- */
-package eu.stork.peps.auth.engine.core.impl;
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/package-info.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/package-info.java
deleted file mode 100644
index 51745d796..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.
- */
-
-/**
- * Interfaces for STORK 1.0 core specification types and elements.
- */
-package eu.stork.peps.auth.engine.core;
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java
deleted file mode 100644
index c602ad38a..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package eu.stork.peps.auth.engine.core.validator;
-
-import org.opensaml.xml.util.DatatypeHelper;
-import org.opensaml.xml.validation.ValidationException;
-import org.opensaml.xml.validation.Validator;
-
-import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
-
-public class CustomAttributeQueryValidator implements Validator<CustomAttributeQuery> {
-	
-	/**
-	 * Validate action.
-	 * 
-	 * @param attrQuery the attribute query to validate
-	 * 
-	 * @throws ValidationException the validation exception
-	 */
-	public final void validate(final CustomAttributeQuery attrQuery) throws ValidationException {
-		validateAssertion(attrQuery);
-		validateSubject(attrQuery);
-		validateDestination(attrQuery);
-	}
-
-
-	/**
-	 * Validate assertion.
-	 * 
-	 * @param attrQuery the attribute query
-	 * 
-	 * @throws ValidationException the validation exception
-	 */
-	protected final void validateAssertion(final CustomAttributeQuery attrQuery)
-	throws ValidationException {
-		if (DatatypeHelper.isEmpty(attrQuery.getAssertionConsumerServiceURL())) {
-			throw new ValidationException("Consumer Service URL must be specified.");
-		}
-	}
-	
-	/**
-	 * Validate subject
-	 * @param query the attribute query to validate
-	 * @throws ValidationException the validation exception
-	 */ 
-	protected void validateSubject(CustomAttributeQuery query) throws ValidationException {
-        if (query.getSubject() == null)
-            throw new ValidationException("Subject is required");
-    }
-	
-	/**
-	 * Validate the destination
-	 * @param query the query to validate
-	 * @throws ValidationException the validation exception
-	 */
-	protected void validateDestination(CustomAttributeQuery query) throws ValidationException {
-        if (query.getDestination() == null)
-            throw new ValidationException("Destination is required");
-    }
-	
-	/**
-	 * Validate the destination
-	 * @param query the query to validate
-	 * @throws ValidationException the validation exception
-	 */
-	protected void validateTime(CustomAttributeQuery query) throws ValidationException {
-        if (query.getIssueInstant().isAfterNow())
-            throw new ValidationException("Issue time is in the futue");
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java
deleted file mode 100644
index 491549aac..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.validator;
-
-import java.util.List;
-
-import org.opensaml.saml2.common.Extensions;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.validation.ValidationException;
-import org.opensaml.xml.validation.Validator;
-
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-
-/**
- * The Class ExtensionsSchemaValidator.
- * 
- * @author fjquevedo
- */
-public class ExtensionsSchemaValidator implements Validator<Extensions> {
-
-
-    /**
-     * validate the extensions.
-     * 
-     * @param extensions the extensions
-     * 
-     * @throws ValidationException the validation exception
-     */
-    public final void validate(final Extensions extensions)
-    throws ValidationException {
-	if (extensions.getUnknownXMLObjects() == null
-		|| extensions.getUnknownXMLObjects().size() <= 0) {
-	    throw new ValidationException("Extension element is empty or not exist.");
-	}
-	
-	List<XMLObject> qaa = extensions.getUnknownXMLObjects(QAAAttribute.DEF_ELEMENT_NAME);
-	
-	if (qaa.size() == 1) {
-		final Validator<QAAAttribute> validatorQaa = new QAAAttributeSchemaValidator();
-		validatorQaa.validate((QAAAttribute) qaa.get(0));
-	} else {
-		throw new ValidationException(
-	    "Extensions must contain only one element QAALevel.");
-	}
-
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java
deleted file mode 100644
index 72639c8ee..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package eu.stork.peps.auth.engine.core.validator;
-
-import org.opensaml.saml2.core.Response;
-import org.opensaml.xml.validation.ValidationException;
-import org.opensaml.xml.validation.Validator;
-
-
-public class MultipleAssertionResponseValidator implements Validator<Response> {
-	
-	/**
-	 * Validate action.
-	 * 
-	 * @param response the response to validate
-	 * 
-	 * @throws ValidationException the validation exception
-	 */
-	public final void validate(final Response response) throws ValidationException {
-		validateAssertion(response);
-		validateConsent(response);
-		validateDestination(response);		
-		validateTime(response);
-		validateId(response);
-	}
-
-
-	/**
-	 * Validate assertion.
-	 * 
-	 * @param response the attribute query
-	 * 
-	 * @throws ValidationException the validation exception
-	 */
-	protected final void validateAssertion(final Response response)
-	throws ValidationException {
-		if (response.getAssertions() == null || response.getAssertions().size() < 2) {
-			throw new ValidationException("Multiple assertions must be specified.");
-		}
-	}
-	
-	/**
-	 * Validate the Consent
-	 * @param response the response to validate
-	 * @throws ValidationException the validation exception
-	 */
-	protected void validateConsent(Response response) throws ValidationException {
-        if (response.getConsent() == null)
-            throw new ValidationException("Consent is required");
-    }
-	
-	/**
-	 * Validate the destination
-	 * @param response the response to validate
-	 * @throws ValidationException the validation exception
-	 */
-	protected void validateDestination(Response response) throws ValidationException {
-        if (response.getDestination() == null)
-            throw new ValidationException("Destination is required");
-    }
-	
-	/**
-	 * Validate issue times
-	 * @param response the response to validate
-	 * @throws ValidationException the validation exception
-	 */
-	protected void validateTime(Response response) throws ValidationException {		
-        if (response.getIssueInstant().isAfterNow())
-            throw new ValidationException("Issue time is in the futue");
-    }
-	
-	/**
-	 * Validate ids
-	 * @param response the response to validate
-	 * @throws ValidationException the validation exception
-	 */
-	protected void validateId(Response response) throws ValidationException {		
-        if (response.getID() == null || response.getInResponseTo() == null)
-            throw new ValidationException("Id and response id is required");
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java
deleted file mode 100644
index 44c9db380..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.auth.engine.core.validator;
-
-import org.opensaml.xml.util.DatatypeHelper;
-import org.opensaml.xml.validation.ValidationException;
-import org.opensaml.xml.validation.Validator;
-
-import eu.stork.peps.auth.engine.core.QAAAttribute;
-
-/**
- * The Class QAAAttributeSchemaValidator.
- * 
- * @author fjquevedo
- */
-public class QAAAttributeSchemaValidator implements Validator<QAAAttribute> {
-
-
-	/**
-	 * Validate action.
-	 * 
-	 * @param qaa the quality authentication assurance level attribute
-	 * 
-	 * @throws ValidationException the validation exception
-	 */
-	public final void validate(final QAAAttribute qaa) throws ValidationException {
-		validateAction(qaa);
-	}
-
-
-	/**
-	 * Validate action.
-	 * 
-	 * @param qaaAttribute the quality authentication assurance level attribute.
-	 * 
-	 * @throws ValidationException the validation exception
-	 */
-	protected final void validateAction(final QAAAttribute qaaAttribute)
-	throws ValidationException {
-		if (DatatypeHelper.isEmpty(qaaAttribute.getQaaLevel())) {
-			throw new ValidationException("QAALevel label must be specified.");
-		}
-
-		final int qaa = Integer.valueOf(qaaAttribute.getQaaLevel());
-
-		if (qaa < QAAAttribute.MIN_VALUE || qaa > QAAAttribute.MAX_VALUE) {
-			throw new ValidationException(
-					"QAALevel label must be greater than 0.");
-		}
-	}
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java
deleted file mode 100644
index 07b632773..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.
- */
-
-/**
- * Validation rules for STORK 1.0 core types and elements.
- */
-package eu.stork.peps.auth.engine.core.validator;
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/package-info.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/package-info.java
deleted file mode 100644
index 30130b7f6..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/auth/engine/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.
- */
-
-/**
- * Provides the classes necessary to create a SAML message.
- */
-package eu.stork.peps.auth.engine;
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java
deleted file mode 100644
index c53e18662..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.configuration;
-
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-import org.apache.commons.io.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.InvalidPropertiesFormatException;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * The Class InstanceCreator.
- *
- * @author fjquevedo
- */
-public final class ConfigurationCreator {
-
-    /**
-     * The Constant LOGGER.
-     */
-    private static final Logger LOGGER = LoggerFactory
-            .getLogger(ConfigurationCreator.class.getName());
-
-    /**
-     * Creates the configuration.
-     *
-     * @param instanceConfs the instance configuration
-     * @return the map< string, map< string, object>>
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    public static Map<String, Map<String, Object>> createConfiguration(
-            final Map<String, InstanceEngine> instanceConfs) throws STORKSAMLEngineException {
-
-        final HashMap<String, Map<String, Object>> instances =
-                new HashMap<String, Map<String, Object>>();
-
-        LOGGER.info("Create configuration.");
-        try {
-            // Only create instances for SAMLEngine configuration.
-            // INSTANCE
-            for (Map.Entry<String, InstanceEngine> entry : instanceConfs
-                    .entrySet()) {
-                final InstanceEngine iEngine = entry.getValue();
-
-                final Map<String, Object> intance = new HashMap<String, Object>();
-
-                // CONFIGURATION
-                for (ConfigurationEngine configuration : iEngine
-                        .getConfiguration()) {
-                    // Properties only for configuration SamlEngine.
-                    if (configuration.getName().equalsIgnoreCase(
-                            "SamlEngineConf")) {
-                        intance.put(configuration.getName(),
-                                getNewInstance(configuration.getParameters()
-                                        .get("fileConfiguration")));
-                    } else {
-                        intance.put(configuration.getName(), configuration
-                                .getParameters());
-                    }
-                }
-                instances.put(entry.getKey(), intance);
-            }
-        } catch (STORKSAMLEngineException ex) {
-            LOGGER.error("Can not create instance from file configuration.");
-            throw new STORKSAMLEngineException(ex);
-        }
-        return instances;
-    }
-
-
-    /**
-     * Gets the new instance.
-     *
-     * @param fileName the file name
-     * @return the properties from the new instance
-     * @throws STORKSAMLEngineException the STORKSAML engine
-     *                                  runtime exception
-     */
-    private static Properties getNewInstance(final String fileName)
-            throws STORKSAMLEngineException {
-        InputStream fileEngineProp = null;
-
-        // fetch base from system properties, give a default if there is nothing configured
-        String base = System.getProperty("eu.stork.samlengine.config.location");
-        if (null != base) {
-            if (!base.endsWith("/")) {
-                base += "/";
-            }
-        } else {
-            base = "/";
-        }
-
-        LOGGER.info("Create file configuration properties to Stork Saml Engine: " + base + fileName);
-
-        try {
-
-            if (null != base)
-                fileEngineProp = new FileInputStream(base + fileName);
-            else
-                fileEngineProp = ConfigurationCreator.class
-                        .getResourceAsStream(base + fileName);
-
-            final Properties configuration = new Properties();
-            configuration.loadFromXML(fileEngineProp);
-            return configuration;
-        } catch (InvalidPropertiesFormatException e) {
-            LOGGER.error("Invalid properties format.");
-            throw new STORKSAMLEngineException(e);
-        } catch (IOException e) {
-            LOGGER.error("Error read file: " + base + fileName);
-            throw new STORKSAMLEngineException(e);
-        } finally {
-            IOUtils.closeQuietly(fileEngineProp);
-        }
-    }
-
-    /**
-     * Instantiates a new instance creator.
-     */
-    private ConfigurationCreator() {
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java
deleted file mode 100644
index d9e7e467a..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.configuration;
-
-import java.util.Map;
-
-/**
- * The Class ConfigurationEngine.
- * 
- * @author fjquevedo
- */
-public class ConfigurationEngine {
-
-    /** The name of the configuration file. */
-    private String name;
-
-    /** The parameters. */
-    private Map<String, String> parameters;
-
-    /**
-     * Gets the name.
-     * 
-     * @return the name
-     */
-    public final String getName() {
-	return name;
-    }
-
-    /**
-     * Gets the parameters.
-     * 
-     * @return the parameters
-     */
-    public final Map<String, String> getParameters() {
-	return parameters;
-    }
-
-    /**
-     * Sets the name.
-     * 
-     * @param newName the new name
-     */
-    public final void setName(final String newName) {
-	this.name = newName;
-    }
-
-    /**
-     * Sets the parameters.
-     * 
-     * @param newParameters the parameters
-     */
-    public final void setParameters(final Map<String, String> newParameters) {
-	this.parameters = newParameters;
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java
deleted file mode 100644
index 7968c77ff..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.configuration;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-import eu.stork.peps.exceptions.SAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
-
-/**
- * The Class ConfigurationReader.
- * 
- * @author fjquevedo
- */
-public final class ConfigurationReader {
-
-    /** The Constant SAML_ENGINE_CONFIGURATION_FILE. */
-    private static final String ENGINE_CONF_FILE = "SamlEngine.xml";
-
-    /** The Constant LOGGER. */
-    private static final Logger LOGGER = LoggerFactory
-    .getLogger(ConfigurationReader.class.getName());
-
-    /** The Constant NODE_CONFIGURATION. */
-    private static final String NODE_CONF = "configuration";
-
-    /** The Constant NODE_CONFIGURATION_NAME. */
-    private static final String NODE_CONF_NAME = "name";
-
-    /** The Constant NODE_INSTANCE_NAME. */
-    private static final String NODE_INST_NAME = "name";
-
-    /** The Constant NODE_INSTANCE. */
-    private static final String NODE_INSTANCE = "instance";
-
-    /** The Constant NODE_CONFIGURATION_NAME. */
-    private static final String NODE_PARAM_NAME = "name";
-
-    /** The Constant NODE_CONFIGURATION_NAME. */
-    private static final String NODE_PARAM_VALUE = "value";
-
-    /** The Constant NODE_CONFIGURATION_NAME. */
-    private static final String NODE_PARAMETER = "parameter";
-
-    /**
-     * Generate parameters.
-     * 
-     * @param configurationNode the configuration node
-     * 
-     * @return the map< string, string>
-     */
-    private static Map<String, String> generateParam(
-	    final Element configurationNode) {
-
-	final HashMap<String, String> parameters = new HashMap<String, String>();
-
-	final NodeList parameterNodes = configurationNode
-	.getElementsByTagName(NODE_PARAMETER);
-
-	String parameterName;
-	String parameterValue;
-
-	for (int k = 0; k < parameterNodes.getLength(); ++k) {
-	    // for every parameter find, process.
-	    final Element parameterNode = (Element) parameterNodes.item(k);
-	    parameterName = parameterNode.getAttribute(NODE_PARAM_NAME);
-	    parameterValue = parameterNode.getAttribute(NODE_PARAM_VALUE);
-
-	    // verified the content.
-	    if (StringUtils.isBlank(parameterName)
-		    || StringUtils.isBlank(parameterValue)) {
-		throw new STORKSAMLEngineRuntimeException(
-		"Error reader parameters (name - value).");
-	    } else {
-		parameters.put(parameterName.trim(), parameterValue.trim());
-	    }
-	}
-	return parameters;
-    }
-
-    /**
-     * Read configuration.
-     * 
-     * @return the map< string, instance engine>
-     * 
-     * @throws SAMLEngineException the STORKSAML engine runtime
-     *             exception
-     */
-    public static Map<String, InstanceEngine> readConfiguration()
-    throws SAMLEngineException {
-
-        // fetch base from system properties, give a default if there is nothing configured
-        String base = System.getProperty("eu.stork.samlengine.config.location");
-        if(null != base)
-            if(!base.endsWith("/"))
-                base += "/";
-
-
-	LOGGER.info("Init reader: " + base + ENGINE_CONF_FILE);
-	final Map<String, InstanceEngine> instanceConfs = 
-	    new HashMap<String, InstanceEngine>();
-
-	Document document = null;
-	// Load configuration file
-	final DocumentBuilderFactory factory = DocumentBuilderFactory
-	.newInstance();
-	DocumentBuilder builder;
-
-	InputStream engineConf = null;
-	try {
-
-	    factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-
-	    builder = factory.newDocumentBuilder();
-	    
-	    if (null != base)
-            engineConf = new FileInputStream(base + ENGINE_CONF_FILE);
-        else
-            engineConf = ConfigurationReader.class.getResourceAsStream("/" + ENGINE_CONF_FILE);
-	    
-	    document = builder.parse(engineConf);
-
-	    // Read instance
-	    final NodeList list = document.getElementsByTagName(NODE_INSTANCE);
-
-	    for (int indexElem = 0; indexElem < list.getLength(); ++indexElem) {
-		final Element element = (Element) list.item(indexElem);
-
-		final InstanceEngine instanceConf = new InstanceEngine();
-
-		// read every configuration.
-		final String instanceName = element
-		.getAttribute(NODE_INST_NAME);
-
-		if (StringUtils.isBlank(instanceName)) {
-		    throw new STORKSAMLEngineRuntimeException(
-		    "Error reader instance name.");
-		}
-		instanceConf.setName(instanceName.trim());
-
-		final NodeList confNodes = element
-		.getElementsByTagName(NODE_CONF);
-
-		for (int indexNode = 0; indexNode < confNodes.getLength(); ++indexNode) {
-
-		    final Element configurationNode = (Element) confNodes
-		    .item(indexNode);
-
-		    final String configurationName = configurationNode
-		    .getAttribute(NODE_CONF_NAME);
-
-		    if (StringUtils.isBlank(configurationName)) {
-			throw new STORKSAMLEngineRuntimeException(
-				"Error reader configuration name.");
-		    }
-
-		    final ConfigurationEngine confSamlEngine = 
-			new ConfigurationEngine();
-
-		    // Set configuration name.
-		    confSamlEngine.setName(configurationName.trim());
-
-		    // Read every parameter for this configuration.
-		    final Map<String, String> parameters = 
-			generateParam(configurationNode);
-
-		    // Set parameters
-		    confSamlEngine.setParameters(parameters);
-
-		    // Add parameters to the configuration.
-		    instanceConf.getConfiguration().add(confSamlEngine);
-		}
-
-		// Add to the list of configurations.
-		instanceConfs.put(element.getAttribute(NODE_INST_NAME),
-			instanceConf);
-	    }
-
-	} catch (SAXException e) {
-	    LOGGER.error("Error: init library parser.");
-	    throw new SAMLEngineException(e);
-	} catch (ParserConfigurationException e) {
-	    LOGGER.error("Error: parser configuration file xml.");
-	    throw new SAMLEngineException(e);
-	} catch (IOException e) {
-	    LOGGER.error("Error: read configuration file.");
-	    throw new SAMLEngineException(e);
-	} finally {
-	    IOUtils.closeQuietly(engineConf);
-	}
-
-	return instanceConfs;
-    }
-
-    /**
-     * Instantiates a new configuration reader.
-     */
-    private ConfigurationReader() {
-
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java
deleted file mode 100644
index d00607853..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.configuration;
-
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.exceptions.SAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
-
-/**
- * The Class InstanceCreator.
- * 
- * @author fjquevedo
- */
-public final class ConfigurationSingleton {
-
-    /** The instance of every engine SAML. */
-    private static Map<String, InstanceEngine> instanceConfigs;
-
-    /** The instances of SAML engine. */
-    private static Map<String, Map<String, Object>> instances;
-
-    /** The Constant LOGGER. */
-    private static final Logger LOGGER = LoggerFactory
-	    .getLogger(ConfigurationSingleton.class.getName());
-
-    static {
-	LOGGER.debug("Read all file configurations. (instances of SAMLEngine)");
-	try {
-	    instanceConfigs = ConfigurationReader.readConfiguration();
-	} catch (SAMLEngineException e) {
-	    LOGGER.error("Error read configuration file.");
-	    throw new STORKSAMLEngineRuntimeException(e);
-	}
-    }
-
-    /**
-     * Gets the new instance.
-     * 
-     * @param fileName the file name
-     * 
-     * @return the properties from the new instance
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine runtime exception
-     */
-    private static Map<String, Map<String, Object>> getInstance(
-	    final String fileName) throws STORKSAMLEngineException {
-	return ConfigurationCreator.createConfiguration(instanceConfigs);
-    }
-
-    /**
-     * Instantiates a new instance creator.
-     */
-    private ConfigurationSingleton() {
-    }
-
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/InstanceEngine.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/InstanceEngine.java
deleted file mode 100644
index 4d9bba8e7..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/InstanceEngine.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.configuration;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * The Class InstanceConfiguration.
- * 
- * @author fjquevedo
- */
-public class InstanceEngine {
-
-    /** The configuration. */
-    private List<ConfigurationEngine> configuration = new ArrayList<ConfigurationEngine>();
-
-    /** The name. */
-    private String name;
-
-    /**
-     * Gets the parameters.
-     * 
-     * @return the parameters
-     */
-    public final List<ConfigurationEngine> getConfiguration() {
-	return this.configuration;
-    }
-
-    /**
-     * Gets the name.
-     * 
-     * @return the name
-     */
-    public final String getName() {
-	return name;
-    }
-
-    /**
-     * Sets the parameters.
-     * 
-     * @param newConfiguration the new parameters
-     */
-    public final void setConfiguration(final List<ConfigurationEngine> newConfiguration) {
-	this.configuration = newConfiguration;
-    }
-
-    /**
-     * Sets the name.
-     * 
-     * @param newName the new name
-     */
-    public final void setName(final String newName) {
-	this.name = newName;
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/package-info.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/package-info.java
deleted file mode 100644
index 344368e03..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/configuration/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed under the EUPL, Version 1.1 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 at:
- *
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- *
- * 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.
- */
-
-/**
- * Provides the classes necessary to create a SAML message instance.
- */
-package eu.stork.peps.configuration;
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java
deleted file mode 100644
index ac46f73e4..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.exceptions;
-
-/**
- * The Class SAMLEngineException.
- * 
- * @author fjquevedo
- */
-public class SAMLEngineException extends Exception {
-
-    /** The Constant serialVersionUID. */
-    private static final long serialVersionUID = 2611361164977849837L;
-
-    /**
-     * Instantiates a new SAMLEngine exception.
-     * 
-     * @param wrappedException the wrapped exception
-     */
-    public SAMLEngineException(final Exception wrappedException) {
-	super(wrappedException);
-    }
-
-    /**
-     * Instantiates a new SAMLEngine exception.
-     * 
-     * @param message the message
-     */
-    public SAMLEngineException(final String message) {
-	super(message);
-    }
-
-    /**
-     * Instantiates a new SAMLEngine exception.
-     * 
-     * @param message the message
-     * @param wrappedException the wrapped exception
-     */
-    public SAMLEngineException(final String message,
-	    final Exception wrappedException) {
-	super(message, wrappedException);
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java
deleted file mode 100644
index bddcbd1b3..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.exceptions;
-
-/**
- * The Class STORKSAMLEngineException.
- * 
- * @author fjquevedo
- */
-public class STORKSAMLEngineException extends Exception {
-
-    /** The Constant serialVersionUID. */
-    private static final long serialVersionUID = -8319723167019122930L;
-
-    /** The error code. */
-    private String errorCode;
-
-    /** The error detail. */
-    private String errorDetail;
-
-    /**
-     * Instantiates a new sTORKSAML engine exception.
-     * 
-     * @param wrappedException the wrapped exception
-     */
-    public STORKSAMLEngineException(final Exception wrappedException) {
-	super(wrappedException);
-    }
-
-    /**
-     * Instantiates a new sTORKSAML engine exception.
-     * 
-     * @param errorMessage the error message
-     */
-    public STORKSAMLEngineException(final String errorMessage) {
-	super(errorMessage);
-    }
-
-    /**
-     * Instantiates a new sTORKSAML engine exception.
-     * 
-     * @param message the message
-     * @param wrappedException the wrapped exception
-     */
-    public STORKSAMLEngineException(final String message,
-	    final Exception wrappedException) {
-	super(message, wrappedException);
-    }
-
-    /**
-     * Instantiates a new sTORKSAML engine exception.
-     * 
-     * @param newErrorCode the error code
-     * @param errorMessage the error message
-     * @param newErrorDetail the error detail
-     */
-    public STORKSAMLEngineException(final String newErrorCode,
-	    final String errorMessage, final String newErrorDetail) {
-	super(errorMessage);
-	this.errorCode = newErrorCode;
-	this.errorDetail = newErrorDetail;
-    }
-
-    /**
-     * Gets the error code.
-     * 
-     * @return the error code
-     */
-    public final String getErrorCode() {
-	return this.errorCode;
-    }
-
-    /**
-     * Gets the error detail.
-     * 
-     * @return the error detail
-     */
-    public final String getErrorDetail() {
-	return errorDetail;
-    }
-
-    /**
-     * Gets the error message.
-     * 
-     * @return the error message
-     */
-    public final String getErrorMessage() {
-	return super.getMessage();
-    }
-
-
-    /**
-     * Gets the message.
-     * 
-     * @return the message of the exception.
-     * 
-     * @see java.lang.Throwable#getMessage()
-     */
-    public final String getMessage() {
-	return "Error (no. " + errorCode + ") processing request : "
-		+ super.getMessage();
-    }
-
-    /**
-     * Sets the error code.
-     * 
-     * @param newErrorCode the new error code
-     */
-    public final void setErrorCode(final String newErrorCode) {
-        this.errorCode = newErrorCode;
-    }
-
-    /**
-     * Sets the error detail.
-     * 
-     * @param newErrorDetail the new error detail
-     */
-    public final void setErrorDetail(final String newErrorDetail) {
-        this.errorDetail = newErrorDetail;
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java
deleted file mode 100644
index fb01fd5aa..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.exceptions;
-
-/**
- * The Class STORKSAMLEngineRuntimeException.
- * 
- * @author fjquevedo
- */
-public class STORKSAMLEngineRuntimeException extends RuntimeException {
-
-    /** The Constant serialVersionUID. */
-    private static final long serialVersionUID = 5829810358581493517L;
-
-    /**
-     * Instantiates a new sTORKSAML engine runtime exception.
-     * 
-     * @param wrappedException the wrapped exception
-     */
-    public STORKSAMLEngineRuntimeException(final Exception wrappedException) {
-	super(wrappedException);
-    }
-
-    /**
-     * Creates a new instance of application exception.
-     * 
-     * @param cause the exception cause.
-     */
-    public STORKSAMLEngineRuntimeException(final String cause) {
-	super(cause);
-    }
-
-    /**
-     * Instantiates a new sTORKSAML engine runtime exception.
-     * 
-     * @param message the message
-     * @param wrappedException the wrapped exception
-     */
-    public STORKSAMLEngineRuntimeException(final String message,
-	    final Exception wrappedException) {
-	super(message, wrappedException);
-    }
-}
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/package-info.java b/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/package-info.java
deleted file mode 100644
index 0c7341995..000000000
--- a/id/server/SamlEngine-VIDP/src/main/java/eu/stork/peps/exceptions/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.
- */
-
-/**
- * Provides the classes for STORK exceptions management.
- */
-package eu.stork.peps.exceptions;
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java
deleted file mode 100644
index eb885eea9..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.test.simple;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.commons.io.IOUtils;
-import org.bouncycastle.util.encoders.Base64;
-import org.opensaml.Configuration;
-import org.opensaml.xml.XMLObject;
-import org.opensaml.xml.io.Marshaller;
-import org.opensaml.xml.io.MarshallerFactory;
-import org.opensaml.xml.io.MarshallingException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-/**
- * The Class SSETestUtils.
- */
-public final class SSETestUtils {
-    
-    
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(SSETestUtils.class.getName());
-    
-    /**
-     * Instantiates a new sSE test utils.
-     */
-    private SSETestUtils() {	
-    }
-
-    /**
-     * Prints the tree DOM.
-     * 
-     * @param samlToken the SAML token
-     * @param isIndent the is indent
-     * 
-     * @return the string
-     * @throws TransformerException the exception     
-     */
-    public static String printTreeDOM(final Element samlToken, final boolean isIndent) throws TransformerException {
-	// set up a transformer
-	final TransformerFactory transfac = TransformerFactory.newInstance();
-	final Transformer trans = transfac.newTransformer();
-	trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-	trans.setOutputProperty(OutputKeys.INDENT, String.valueOf(isIndent));
-
-	// create string from XML tree
-	final StringWriter stringWriter = new StringWriter();
-	final StreamResult result = new StreamResult(stringWriter);
-	final DOMSource source = new DOMSource(samlToken);
-	trans.transform(source, result);
-	final String xmlString = stringWriter.toString();
-
-	return xmlString;
-    }
-
-    /**
-     * Marshall.
-     * 
-     * @param samlToken the SAML token
-     * 
-     * @return the byte[]
-     * 
-     * @throws MarshallingException the marshalling exception
-     * @throws ParserConfigurationException the parser configuration exception
-     * @throws TransformerException the transformer exception
-     */
-    public static byte[] marshall(final XMLObject samlToken)
-	    throws MarshallingException, ParserConfigurationException,
-	    TransformerException {
-
-	final javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory
-		.newInstance();
-	dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-	dbf.setNamespaceAware(true);
-	dbf.setIgnoringComments(true);
-	final javax.xml.parsers.DocumentBuilder docBuild = dbf
-		.newDocumentBuilder();
-
-	// Get the marshaller factory
-	final MarshallerFactory marshallerFactory = Configuration
-		.getMarshallerFactory();
-
-	// Get the Subject marshaller
-	final Marshaller marshaller = marshallerFactory
-		.getMarshaller(samlToken);
-
-	final Document doc = docBuild.newDocument();
-
-	// Marshall the SAML token
-	marshaller.marshall(samlToken, doc);
-
-	// Obtain a byte array representation of the marshalled SAML object
-	final DOMSource domSource = new DOMSource(doc);
-	final StringWriter writer = new StringWriter();
-	final StreamResult result = new StreamResult(writer);
-	final TransformerFactory transFact = TransformerFactory.newInstance();
-	final Transformer transformer = transFact.newTransformer();
-	transformer.transform(domSource, result);
-
-	return writer.toString().getBytes();
-    }
-
-    /**
-     * Encode SAML token.
-     * 
-     * @param samlToken the SAML token
-     * 
-     * @return the string
-     */
-    public static String encodeSAMLToken(final byte[] samlToken) {
-    	return new String(Base64.encode(samlToken));
-    }
-
-    /**
-     * Read stork SAML from file.
-     * 
-     * @param resource the resource
-     * 
-     * @return the byte[]
-     * @throws IOException the exception
-     * 
-     */
-    public static byte[] readStorkSamlFromFile(final String resource)
-	    throws IOException {
-	InputStream inputStream = null;
-	byte[] bytes;
-	
-	try {
-	    inputStream = StorkAuthRequestTest.class
-		.getResourceAsStream(resource);
-	
-	    // Create the byte array to hold the data
-	    bytes = new byte[(int) inputStream.available()];
-	    inputStream.read(bytes);
-	} catch (IOException e) {	    
-	    LOG.error("Error read from file: " + resource);
-	    throw e;
-	} finally {
-	    IOUtils.closeQuietly(inputStream);
-	}
-	return bytes;
-
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java
deleted file mode 100644
index c52b8a779..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.test.simple;
-
-import org.junit.Test;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-
-/**
- * The Class SimpleBaseTest. Defines a set of test the initialization of the
- * SAML engine.
- */
-@SuppressWarnings("deprecation")
-public class SimpleBaseTest extends TestCase {
-
-    /**
-     * Test SAML engine correct configuration name.
-     */
-    
-	@Test
-    public final void testSamlEngineCorrectInit() {
-	Assert.assertNotNull(STORKSAMLEngine.getInstance("CONF1"));
-    }
-
-    /**
-     * Test SAML engine error configuration name.
-     */
-    @Test
-    public final void testSamlEngineErrorNameConf() {
-	Assert.assertNull(STORKSAMLEngine.getInstance("CONF_ERROR"));
-    }
-
-    /**
-     * Test SAML engine error name null.
-     */
-    @Test
-    public final void testSamlEngineErrorNameNull() {	
-	Assert.assertNull(STORKSAMLEngine.getInstance(null));
-    }
-
-    /**
-     * Test SAML engine correct name configuration with spaces.
-     */
-    @Test
-    public final void testSamlEngineErrorNameSpaces() {
-	Assert.assertNotNull(STORKSAMLEngine.getInstance("   CONF1    "));
-    }
-    
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java
deleted file mode 100644
index 0eda1bfbf..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java
+++ /dev/null
@@ -1,864 +0,0 @@
-package eu.stork.peps.test.simple;
-
-import static org.junit.Assert.*;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.opensaml.xml.parse.BasicParserPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.commons.IPersonalAttributeList;
-import eu.stork.peps.auth.commons.PersonalAttribute;
-import eu.stork.peps.auth.commons.PersonalAttributeList;
-import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-public class StorkAttrQueryRequestTest {
-	
-	/** The engines. */	
-    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
-    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
-    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
-    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
-            
-
-    /**
-     * Instantiates a new stork authentication request test.
-     */
-    public StorkAttrQueryRequestTest() {
-	pal = new PersonalAttributeList();
-
-	final PersonalAttribute isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(true);
-	final ArrayList<String> ages = new ArrayList<String>();
-	ages.add("16");
-	ages.add("18");
-	isAgeOver.setValue(ages);
-	pal.add(isAgeOver);
-	
-	final PersonalAttribute dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	pal.add(dateOfBirth);
-	
-		final PersonalAttribute eIDNumber = new PersonalAttribute();	
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-	eIDNumber.setValue(Arrays.asList("ES/IS/1234567890"));
-	pal.add(eIDNumber);
-	
-	final PersonalAttribute givenName = new PersonalAttribute();
-	givenName.setName("givenName");
-	givenName.setIsRequired(true);
-	givenName.setValue(Arrays.asList("Sveinbjorn"));
-	pal.add(givenName);
-
-	destination = "http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest";
-	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
-	//spName = "University of Oxford";
-	spSector = "EDU001";
-	spInstitution = "OXF001";
-	spApplication = "APP001";
-	spCountry = "IS";
-	
-	spId = "EDU001-OXF001-APP001";
-	
-    }
-
-    /** The destination. */
-    private String destination;
-
-    /** The service provider sector. */
-    private String spSector;
-
-    /** The service provider institution. */
-    private String spInstitution;
-
-    /** The service provider application. */
-    private String spApplication;
-
-    /** The service provider country. */
-    private String spCountry;
-    
-    /** The service provider id. */
-    private String spId;
-    
-    /** The assertion consumer URL. */
-    private String assertConsumerUrl;
-
-    /** The quality authentication assurance level. */
-    private static final int QAAL = 3;
-
-    /** The List of Personal Attributes. */
-    private IPersonalAttributeList pal;
-
-    /** The attribute query request. */
-    private static byte[] attrRequest;
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(StorkAttrQueryRequestTest.class.getName());
-
-    /** Parser manager used to parse XML. */
-    private static BasicParserPool parser;
-
-    static {
-	parser = new BasicParserPool();
-	parser.setNamespaceAware(true);
-    }
-    
-    /**
-     * Test generate authentication request.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAttrQueryRequest() throws STORKSAMLEngineException {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-
-	// new parameters
-	request.setEIDSectorShare(false);	
-	request.setEIDCrossSectorShare(false);
-	request.setEIDCrossBorderShare(false);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-	request.setSpCountry(spCountry);
-
-	STORKAttrQueryRequest req1 = engine0.generateSTORKAttrQueryRequest(request);
-	byte[] reqByte = req1.getTokenSaml();
-	FileOutputStream output = null;
-	
-	try {
-		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml"));
-	} catch (FileNotFoundException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	try {
-		output.write(reqByte);
-	} catch (IOException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	
-	LOG.info("STORKAttrQueryRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
-	
-	request.setCitizenCountryCode("IS");
-	LOG.info("STORKAttrQueryRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
-    }
-    
-    /**
-     * Test generate authentication request error personal attribute name error.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestPALsErr1() {
-	
-	final IPersonalAttributeList palWrong = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("attrNotValid");
-	worngAttr.setIsRequired(true);
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(palWrong);
-
-	// news parameters
-	request.setEIDSectorShare(false);	
-	request.setEIDCrossSectorShare(false);
-	request.setEIDCrossBorderShare(false);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    
-    /**
-     * Test generate authentication request error personal attribute value error.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestPALsErr2() {
-	
-	final IPersonalAttributeList palWrong = new PersonalAttributeList();
-
-	final PersonalAttribute attrNotValid = new PersonalAttribute();
-	attrNotValid.setName("attrNotValid");
-	attrNotValid.setIsRequired(true);
-	palWrong.add(attrNotValid);
-
-
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(palWrong);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request authentication assurance level
-     * negative value.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestQaalErr1() {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(-1);
-	request.setPersonalAttributeList(pal);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider sector null.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestSectorErr() {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(null);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider institution null.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestDestinationErr() {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(null);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(null);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    fail("generateSTORKAttrQueryRequest(...) should've thrown an STORKSAMLEngineException!");
-	    
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");	    
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider application null.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestApplicationErr() {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(null);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider country null.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestCountryErr() {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(null);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	    
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");	    
-	}
-    }
-
-    /**
-     * Test generate authentication request error with quality authentication
-     * assurance level wrong.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestQaalErr2() {
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(0);
-	request.setPersonalAttributeList(pal);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request personal attribute list null value.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestPALErr1() {
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(null);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    engine.generateSTORKAttrQueryRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-   
-    /**
-     * Test validate authentication request null parameter.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryRequestNullParam()
-	    throws STORKSAMLEngineException {
-	try {
-	    engine.validateSTORKAttrQueryRequest(null);
-	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate authentication request error bytes encode.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryRequestErrorEncode()
-	    throws STORKSAMLEngineException {
-	try {
-	    engine.validateSTORKAttrQueryRequest("messageError".getBytes());
-	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate authentication request.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryRequest() throws STORKSAMLEngineException {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-	
-	attrRequest = engine.generateSTORKAttrQueryRequest(request).getTokenSaml();
-	
-	final STORKAttrQueryRequest validatedRequest = engine.validateSTORKAttrQueryRequest(attrRequest);	 
-		
-	assertEquals("CrossBorderShare incorrect: ", validatedRequest.isEIDCrossBorderShare(), false);
-	assertEquals("CrossSectorShare incorrect: ", validatedRequest.isEIDCrossSectorShare(),	false);
-	assertEquals("SectorShare incorrect: ", validatedRequest.isEIDSectorShare(), false);
-	
-    }
-
-    /**
-     * Test validate data authenticate request. Verified parameters after
-     * validation.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateDataAttrQueryRequest() throws STORKSAMLEngineException {
-    	
-    final STORKAttrQueryRequest request = engine.validateSTORKAttrQueryRequest(attrRequest);
-
-	assertEquals("Sestination incorrect: ", request.getDestination(), destination);
-	
-	assertEquals("CrossBorderShare incorrect: ", request.isEIDCrossBorderShare(), false);
-	assertEquals("CrossSectorShare incorrect: ", request.isEIDCrossSectorShare(), false);
-	assertEquals("SectorShare incorrect: ", request.isEIDSectorShare(), false);	
-
-	assertEquals("QAAL incorrect: ", request.getQaa(), QAAL);
-	assertEquals("SPSector incorrect: ", request.getSpSector(), spSector);		
-	assertEquals("SPInstitution incorrect: ", request.getSpInstitution(), null);
-	assertEquals("SPApplication incorrect: ", request.getSpApplication(), spApplication);
-	assertEquals("CitizenCountryCode incorrect: ", request.getCitizenCountryCode(), null);
-		
-    }
-
-    /**
-     * Test validate file attribute query request. Validate from XML file.
-     *     
-     * @throws Exception the exception
-     */
-    @Test
-    public final void testValidateFileAttrQueryRequest() throws Exception {
-
-	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AttrQueryRequest1.xml");
-
-	try {
-	    engine.validateSTORKAttrQueryRequest(bytes);
-        fail("testValidateFileAttrQueryRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error(e.getMessage());
-	}
-    }
-
-    /**
-     * Test validate file authentication request tag delete.
-     * 
-     * @throws Exception the exception
-     */
-    @Test
-    public final void testValidateFileAttrRequestTagDelete() throws Exception {
-
-	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml");
-
-	try {
-	    engine.validateSTORKAttrQueryRequest(bytes);
-        fail("validateSTORKAttrQueryRequest(...) should have thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error(e.getMessage());
-
-	}
-    }
-
-    /**
-     * Test validate authentication request not trusted token.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryRequestNotTrustedErr1()
-	    throws STORKSAMLEngineException {
-	
-	try {
-	    final STORKSAMLEngine engineNotTrusted = STORKSAMLEngine
-		    .getInstance("CONF2");
-
-	    final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	    request.setDestination(destination);
-	    request.setQaa(QAAL);
-	    request.setPersonalAttributeList(pal);
-	    request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	    // news parameters
-	    request.setSpSector(spSector);
-	    request.setSpInstitution(spInstitution);
-	    request.setSpApplication(spApplication);
-	    request.setSpCountry(spCountry);
-
-	    final byte[] authReqNotTrust = engineNotTrusted
-		    .generateSTORKAttrQueryRequest(request).getTokenSaml();
-
-	    engine.validateSTORKAttrQueryRequest(authReqNotTrust);
-	    fail("validateSTORKAttrQueryRequestNotTrusted(...) should have thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");        
-    }
-    }
-
-    /**
-     * Test validate authentication request trusted.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryRequestTrusted()
-	    throws STORKSAMLEngineException {
-
-	final STORKSAMLEngine engineTrusted = STORKSAMLEngine
-		.getInstance("CONF3");
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	final byte[] authReqNotTrust = engineTrusted.generateSTORKAttrQueryRequest(
-		request).getTokenSaml();
-
-	// engine ("CONF1") no have trust certificate from "CONF2"
-	engine.validateSTORKAttrQueryRequest(authReqNotTrust);
-	
-    }
-    
-    
-    
-    
-    /**
-     * Test generate authentication request service provider application null.
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestNADA() {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-
-	// news parameters
-	request.setSpSector(null);
-	request.setSpInstitution(null);
-	request.setSpApplication(null);
-	request.setSpCountry(null);
-
-	try {
-	       	
-		engine.validateSTORKAttrQueryRequest(attrRequest);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	}
-    }
-    
-    /**
-     * Test validate authentication request with unknown elements.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryRequestWithUnknownElements() throws STORKSAMLEngineException {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	
-	IPersonalAttributeList pAttList = new PersonalAttributeList();
-		
-	final PersonalAttribute unknown = new PersonalAttribute();
-	unknown.setName("unknown");
-	unknown.setIsRequired(true);
-	pAttList.add(unknown);	
-	
-	final PersonalAttribute eIdentifier = new PersonalAttribute();
-	eIdentifier.setName("eIdentifier");
-	eIdentifier.setIsRequired(true);
-	pAttList.add(eIdentifier);	
-	
-	request.setPersonalAttributeList(pAttList);
-
-	// new parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-	
-	STORKAttrQueryRequest req = new STORKAttrQueryRequest();
-		
-	req  = engine3.generateSTORKAttrQueryRequest(request);
-	
-	req = engine.validateSTORKAttrQueryRequest(req.getTokenSaml());
-	
-	assertNull("The value shouldn't exist", req.getPersonalAttributeList().get("unknown"));
-	assertNotNull("The value should exist", req.getPersonalAttributeList().get("eIdentifier"));
-	
-    }
-    
-    /**
-     * Test generate Request with required elements by default
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAttrQueryRequestWithIsRequiredElementsByDefault() throws STORKSAMLEngineException {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	
-	IPersonalAttributeList pAttList = new PersonalAttributeList();
-		
-	final PersonalAttribute eIdentifier = new PersonalAttribute();
-	eIdentifier.setName("eIdentifier");
-	eIdentifier.setIsRequired(true);
-	pAttList.add(eIdentifier);	
-	
-	request.setPersonalAttributeList(pAttList);
-
-	// new parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-	
-	STORKAttrQueryRequest req = new STORKAttrQueryRequest();
-	STORKAttrQueryRequest reqTrue = new STORKAttrQueryRequest();
-	STORKAttrQueryRequest reqFalse = new STORKAttrQueryRequest();
-		
-	reqTrue  = engine.generateSTORKAttrQueryRequest(request);
-	reqFalse = engine2.generateSTORKAttrQueryRequest(request);
-	req  	 = engine3.generateSTORKAttrQueryRequest(request);
-	
-	
-	String token = new String(req.getTokenSaml());
-	String reqTrueToken = new String(reqTrue.getTokenSaml());
-	String reqFalseToken = new String(reqFalse.getTokenSaml());
-	
-	assertTrue("The token must contain the chain 'isRequired'", token.contains("isRequired"));
-	assertTrue("The token must contain the chain 'isRequired'", reqTrueToken.contains("isRequired"));
-	assertFalse("The token must contain the chain 'isRequired'", reqFalseToken.contains("isRequired"));
-		
-    }
-    
-    /**
-     * Test validating attribute query and getting alias used to save 
-     * the saml trusted certificate into trustore
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    /*@Test
-    public final void testValidateAtrrQueryRequestGettingItsAlias() throws STORKSAMLEngineException {
-
-    	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-    	request.setDestination(destination);
-    	request.setQaa(QAAL);
-    	request.setPersonalAttributeList(pal);
-    	
-    	IPersonalAttributeList pAttList = new PersonalAttributeList();
-    		
-    	final PersonalAttribute eIdentifier = new PersonalAttribute();
-    	eIdentifier.setName("eIdentifier");
-    	eIdentifier.setIsRequired(true);
-    	pAttList.add(eIdentifier);	
-    	
-    	request.setPersonalAttributeList(pAttList);
-
-    	// new parameters
-    	request.setSpSector(spSector);
-    	request.setSpInstitution(spInstitution);
-    	request.setSpApplication(spApplication);
-    	request.setSpCountry(spCountry);
-    	request.setSPID(spId);
-    	request.setCitizenCountryCode("IS");
-    	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-    	
-    	STORKAttrQueryRequest req = new STORKAttrQueryRequest();
-    		
-    	req  = engine3.generateSTORKAttrQueryRequest(request);
-    	req = engine.validateSTORKAttrQueryRequest(req.getTokenSaml());
-    	String prufa = req.getAlias();
-    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo"));
-    	
-    	req  = engine2.generateSTORKAttrQueryRequest(request);
-    	req = engine2.validateSTORKAttrQueryRequest(req.getTokenSaml());
-    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo2"));	
-    }*/
-    
-    @Test
-    public final void testGenerateAttrQueryRequestSignDoc() throws STORKSAMLEngineException {
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-
-	request.setDestination(destination);
-	request.setQaa(QAAL);
-	PersonalAttributeList pal0 = new PersonalAttributeList();
-	
-	final PersonalAttribute signDoc = new PersonalAttribute();	
-	signDoc.setName("docRequest");
-	signDoc.setIsRequired(true);
-	signDoc.setValue(Arrays.asList("IS/IS/fbea6e68-0393-401b-b616-f767fff9418c"));
-	pal0.add(signDoc);
-	
-	request.setPersonalAttributeList(pal0);
-
-	// new parameters
-	/*request.setEIDSectorShare(false);	
-	request.setEIDCrossSectorShare(false);
-	request.setEIDCrossBorderShare(false);*/
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-	request.setSpCountry(spCountry);
-
-	STORKAttrQueryRequest req1 = engine0.generateSTORKAttrQueryRequest(request);
-	byte[] reqByte = req1.getTokenSaml();
-	FileOutputStream output = null;
-	
-	STORKAttrQueryRequest req2 = engine0.validateSTORKAttrQueryRequest(reqByte);
-	//reqByte = req2.getTokenSaml();
-	
-	try {
-		//output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml"));
-		FileOutputStream fos;
-        File outputDir = new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine");
-        File saveFile = new File(outputDir, "AttrQueryRequestSdoc.xml");
-        fos = new FileOutputStream(saveFile);
-        fos.write(reqByte);
-        fos.flush();
-        fos.close();
-	} catch (Exception e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	try {
-		output.write(reqByte);
-	} catch (IOException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	
-	LOG.info("STORKAttrQueryRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
-	
-	request.setCitizenCountryCode("IS");
-	LOG.info("STORKAttrQueryRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
-    }
-    
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java
deleted file mode 100644
index a98d5b7c3..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java
+++ /dev/null
@@ -1,1085 +0,0 @@
-package eu.stork.peps.test.simple;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.opensaml.xml.parse.BasicParserPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.commons.IPersonalAttributeList;
-import eu.stork.peps.auth.commons.PEPSUtil;
-import eu.stork.peps.auth.commons.PersonalAttribute;
-import eu.stork.peps.auth.commons.PersonalAttributeList;
-import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
-import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
-import eu.stork.peps.auth.commons.STORKAuthnRequest;
-import eu.stork.peps.auth.commons.STORKAuthnResponse;
-import eu.stork.peps.auth.commons.STORKStatusCode;
-import eu.stork.peps.auth.commons.STORKSubStatusCode;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-public class StorkAttrQueryResponseTest {
-	
-	/** The engine. */
-    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
-
-    /**
-     * Gets the engine.
-     * 
-     * @return the engine
-     */
-    public static STORKSAMLEngine getEngine() {
-        return engine;
-    }
-
-    /**
-     * Sets the engine.
-     * 
-     * @param newEngine the new engine
-     */
-    public static void setEngine(final STORKSAMLEngine newEngine) {
-    	StorkAttrQueryResponseTest.engine = newEngine;
-    }
-
-    /** The destination. */
-    private static String destination;
-
-        /** The service provider sector. */
-    private static String spSector;
-
-    /** The service provider institution. */
-    private static String spInstitution;
-
-    /** The service provider application. */
-    private static String spApplication;
-
-    /** The service provider country. */
-    private static String spCountry;
-    
-    /** The service provider id. */
-    private static String spId;
-
-    /** The quality authentication assurance level. */
-    private static final int QAAL = 3;
-
-    /** The state. */
-    private static String state = "IS";
-    
-    /** The town. */
-    private static String town = "Reykjavik";
-    
-    /** The postal code. */
-    private static String postalCode = "105";
-    
-    /** The street name. */
-    private static String streetName = "Gudrunartun";
-    
-    /** The street number. */
-    private static String streetNumber = "10";    
-
-    /** The List of Personal Attributes. */
-    private static IPersonalAttributeList pal;
-
-    /** The assertion consumer URL. */
-    private static String assertConsumerUrl;
-
-    /** The attribute query request. */
-    private static byte[] attrQueryRequest;
-
-    /** The attribute query response. */
-    private static byte[] attrQueryResponse;
-
-    /** The attribute query request. */
-    private static STORKAttrQueryRequest attrQueryenRequest;
-
-    /** The attribute query response. */
-    private static STORKAttrQueryResponse attrQeuryenResponse;
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(StorkAttrQueryResponseTest.class.getName());
-
-    /**
-     * Instantiates a new stork response test.
-     */
-    public StorkAttrQueryResponseTest() {
-	super();
-    }
-
-    /** The IP address. */
-    private static String ipAddress;
-    
-    /** The destination URL. */
-    private static String destinationUrl;
-
-    /** The is hashing. */
-    private final boolean isHashing = Boolean.TRUE;
-
-    /** The is not hashing. */
-    private final boolean isNotHashing = Boolean.FALSE;
-
-    /** The ERROR text. */
-    private static final String ERROR_TXT = "generateAttrQueryResponse(...) should've thrown an STORKSAMLEngineException!";
-
-
-    /** Parser manager used to parse XML. */
-    private static BasicParserPool parser;
-    
-    
-
-    static {
-	parser = new BasicParserPool();
-	parser.setNamespaceAware(true);
-
-	pal = new PersonalAttributeList();
-
-	PersonalAttribute isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(false);
-	ArrayList<String> ages = new ArrayList<String>();
-	ages.add("16");
-	ages.add("18");
-	isAgeOver.setValue(ages);
-	pal.add(isAgeOver);
-
-	PersonalAttribute dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	pal.add(dateOfBirth);
-
-	PersonalAttribute eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	List<String> eid = Arrays.asList("IS/IS/1234567890");	
-	eIDNumber.setValue(eid);
-	eIDNumber.setIsRequired(true);
-	pal.add(eIDNumber);
-
-	final PersonalAttribute givenName = new PersonalAttribute();
-	givenName.setName("givenName");
-	givenName.setIsRequired(true);
-	pal.add(givenName);
-
-	PersonalAttribute canRessAddress = new PersonalAttribute();
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	pal.add(canRessAddress);
-	
-	PersonalAttribute newAttribute = new PersonalAttribute();
-	newAttribute.setName("newAttribute2");
-	newAttribute.setIsRequired(true);
-	pal.add(newAttribute);
-
-	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
-	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";	
-	spSector = "EDU001";
-	spInstitution = "OXF001";
-	spApplication = "APP001";
-	spCountry = "EN";
-	
-	spId = "EDU001-APP001-APP001";
-
-	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
-	request.setDestination(destination);
-	//request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// new parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("IS");
-
-	try {
-	    attrQueryRequest = getEngine().generateSTORKAttrQueryRequest(request)
-		    .getTokenSaml();
-	    	    
-	    attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    fail("Error create STORKAuthnRequest");
-	}
-
-	ipAddress = "111.222.333.444";
-	
-	destinationUrl = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
-
-	pal = new PersonalAttributeList();
-
-	isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(true);
-	ages = new ArrayList<String>();
-
-	ages.add("16");
-	ages.add("18");
-
-	isAgeOver.setValue(ages);
-	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(isAgeOver);
-
-	dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	final ArrayList<String> date = new ArrayList<String>();
-	date.add("16/12/2008");
-	dateOfBirth.setValue(date);
-	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(dateOfBirth);
-
-	eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-	final ArrayList<String> idNumber = new ArrayList<String>();
-	idNumber.add("123456789IS");
-	eIDNumber.setValue(idNumber);
-	eIDNumber.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(eIDNumber);
-
-	canRessAddress = new PersonalAttribute();
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> address = new HashMap<String, String>();
-
-	address.put("state", state);
-	address.put("town", town);
-	address.put("postalCode", postalCode);
-	address.put("streetName", streetName);
-	address.put("streetNumber", streetNumber);
-
-	canRessAddress.setComplexValue(address);
-	pal.add(canRessAddress);
-    
-	newAttribute = new PersonalAttribute();
-	newAttribute.setName("newAttribute2");
-	newAttribute.setIsRequired(true);
-	newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> values = new HashMap<String, String>();
-	
-	values.put("value1", "value1");
-	values.put("value2", "value2");
-	values.put("value3", "value3");
-	values.put("value4", "value4");
-	
-	newAttribute.setComplexValue(values);
-	pal.add(newAttribute);
-	
-    }
-
-    /**
-     * Test generate attribute query request without errors.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAttrQueryResponse() throws STORKSAMLEngineException {
-
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setPersonalAttributeList(pal);
-
-	final STORKAttrQueryResponse storkResponse = getEngine()
-		.generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress,
-				destinationUrl, isNotHashing);
-
-	attrQueryResponse = storkResponse.getTokenSaml();
-	
-	FileOutputStream output = null;
-	
-	try {
-		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml"));
-	} catch (FileNotFoundException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	try {
-		output.write(attrQueryResponse);
-	} catch (IOException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	
-	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(attrQueryResponse));
-	
-	
-    }
-
-    /**
-     * Test validation id parameter mandatory.
-     */
-    @Test
-    public final void testResponseMandatoryId() {
-	final String identifier = attrQueryenRequest.getSamlId();
-	attrQueryenRequest.setSamlId(null);
-
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setPersonalAttributeList(pal);
-
-	try {
-	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
-		    ipAddress, destinationUrl, isHashing);
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    attrQueryenRequest.setSamlId(identifier);
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate attribute query response in response to err1.
-     */
-    @Test
-    public final void testResponseMandatoryIssuer() {
-
-	final String issuer = attrQueryenRequest.getIssuer();
-	attrQueryenRequest.setIssuer(null);
-
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setPersonalAttributeList(pal);
-
-	try {
-	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
-		    ipAddress, destinationUrl, isHashing);
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    attrQueryenRequest.setIssuer(issuer);
-	    LOG.error("Error");
-	}
-    }
-
-    
-    /**
-     * Test generate attribute query response assertion consumer null.
-     */
-    /*@Test
-    public final void testResponseMandatoryAssertionConsumerServiceURL() {
-	final String asserConsumerUrl = attrQueryenRequest
-		.getAssertionConsumerServiceURL();
-	attrQueryenRequest.setAssertionConsumerServiceURL(null);
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(pal);
-	try {
-	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
-		    ipAddress, isHashing);
-	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    attrQueryenRequest.setAssertionConsumerServiceURL(asserConsumerUrl);
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate attribute query response IP address null.
-     */
-    @Test
-    public final void testResponseValidationIP() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setPersonalAttributeList(pal);
-
-	try {
-	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, null, 
-	    		destinationUrl, isHashing);
-	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate attribute query response with personal attribute list null.
-     */
-    @Test
-    public final void testResponseMandatoryPersonalAttributeList() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setPersonalAttributeList(null);
-	
-	
-	try {
-	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
-		    ipAddress, destinationUrl, isHashing);
-	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    /**
-     * Test validate attribute query response token null.
-     */
-    @Test
-    public final void testResponseInvalidParametersToken() {
-	try {
-	    getEngine().validateSTORKAttrQueryResponse(null, ipAddress);
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate attribute query response IP null.
-     */
-    @Test
-    public final void STORKAttrQueryResponse() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setPersonalAttributeList(pal);
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false	    
-	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate attribute query response parameter name wrong.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttr() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("AttrWrong");
-	wrongList.add(worngAttr);
-	
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate attribute query response set null value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrSimpleValue() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("isAgeOver");
-	worngAttr.setValue(null);
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate attribute query response set null value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrNoValue() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("isAgeOver");
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate attribute query response set null value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrNoName() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();	
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate attribute query response set null complex value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrComplexValue() {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("isAgeOver");
-	worngAttr.setComplexValue(null);
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-	
-    
-    
-
-    /**
-     * Test validate attribute query response IP distinct and disabled validation
-     * IP.
-     */
-    @Test
-    public final void testResponseInvalidParametersIPDistinct() {
-	try {
-	    // ipAddress origin "111.222.333.444"
-	    // ipAddrValidation = false
-	    // Subject Confirmation Bearer.
-
-	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, "127.0.0.1");	    
-	} catch (STORKSAMLEngineException e) {
-		fail("validateAttributeQueryResponse(...) should've thrown an STORKSAMLEngineException!");
-	    LOG.error("Error");	    
-	}
-    }
-
-    /**
-     * Test response invalid parameters invalid token.
-     */
-    @Test
-    public final void testResponseInvalidParametersTokenMsg() {
-	try {
-	    // ipAddress origin "111.222.333.444"
-	    // Subject Confirmation Bearer.
-	    getEngine().validateSTORKAttrQueryResponse("errorMessage".getBytes(),
-		    ipAddress);
-	    fail("validateAuthenticationResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate attribute query response is fail.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    /*@Test
-    public final void testValidateAuthenticationResponseIsFail()
-	    throws STORKSAMLEngineException {
-    	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
-		ipAddress);
-
-	assertFalse("Generate incorrect response: ", attrQeuryenResponse.isFail());
-    }
-
-    /**
-     * Test validate attribute query response destination.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthenticationResponseDestination()
-	    throws STORKSAMLEngineException {
-    	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
-		ipAddress);
-
-	assertEquals("Destination incorrect: ",
-			attrQeuryenResponse.getInResponseTo(), attrQueryenRequest.getSamlId());
-    }
-
-    /**
-     * Test validate attribute query response values.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthenticationResponseValuesComplex()
-	    throws STORKSAMLEngineException {
-    	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
-		ipAddress);
-	
-	assertEquals("Country incorrect:", attrQeuryenResponse.getCountry(), "ES");
-	
-	final Iterator<PersonalAttribute> iterator = attrQeuryenResponse
-		.getPersonalAttributeList().iterator();
-
-	while (iterator.hasNext()) {
-	    final PersonalAttribute attribute = iterator.next();
-	    if (attribute.getName().equalsIgnoreCase(
-		    "canonicalResidenceAddress")) {
-		assertEquals("State incorrect: ", state, attribute
-			.getComplexValue().get("state"));		
-		assertEquals("Town incorrect: ", town, attribute
-			.getComplexValue().get("town"));
-		assertEquals("Postal code incorrect: ", postalCode, attribute
-			.getComplexValue().get("postalCode"));
-		assertEquals("Street name incorrect: ", streetName, attribute
-			.getComplexValue().get("streetName"));
-		assertEquals("Street number incorrect: ", streetNumber,
-			attribute.getComplexValue().get("streetNumber"));		
-	    }
-	}
-    }
-
-    /**
-     * Test generate attribute query response fail in response to it's null.
-     * @throws STORKSAMLEngineException 
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test //( expected=STORKSAMLEngineException.class)
-    public final void testGenerateAttrQueryResponseFailInResponseToNull() throws STORKSAMLEngineException {
-	final String identifier = attrQueryenRequest.getSamlId();
-	attrQueryenRequest.setSamlId(null);
-
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("");
-
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    attrQueryenRequest.setSamlId(identifier);
-	    LOG.error("Error");
-	    //throw new STORKSAMLEngineException(e);
-	}
-    }
-
-    /**
-     * Test generate attribute query response fail assertion consumer URL err1.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    /*@Test
-    public final void testGenerateAuthnResponseFailAssertionConsumerUrlNull()
-	    throws STORKSAMLEngineException {
-
-	final String assertConsumerUrl = attrQueryenRequest
-		.getAssertionConsumerServiceURL();
-	attrQueryenRequest.setAssertionConsumerServiceURL(null);
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("");
-
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAuthnResponseFail(attrQueryenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    fail("generateAuthnResponseFail(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    attrQueryenRequest.setAssertionConsumerServiceURL(assertConsumerUrl);
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate attribute query response fail code error err1.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAttrQueryResponseFailCodeErrorNull()
-	    throws STORKSAMLEngineException {
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setStatusCode(null);
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("");
-
-	try {
-	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest,
-		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	    fail("generateAttrQueryResponseFail(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    
-    
-    /**
-     * Test generate attribute query request without errors.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryResponse() throws STORKSAMLEngineException {
-	
-	IPersonalAttributeList palist = new PersonalAttributeList();
-
-	PersonalAttribute isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(true);
-	ArrayList<String> ages = new ArrayList<String>();
-	ages.add("16");
-	ages.add("18");
-	isAgeOver.setValue(ages);
-	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	palist.add(isAgeOver);
-
-	PersonalAttribute dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	final ArrayList<String> date = new ArrayList<String>();
-	date.add("16/12/2008");
-	dateOfBirth.setValue(date);
-	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	palist.add(dateOfBirth);
-
-	
-	PersonalAttribute eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-
-	final ArrayList<String> idNumber = new ArrayList<String>();
-	idNumber.add("123456789PÑ");
-	
-	final HashMap<String, String> complex = new HashMap<String, String>();
-	complex.put("one", "two");
-
-	//eIDNumber.setValue(null);
-	//eIDNumber.setValue(idNumber);
-	//eIDNumber.setComplexValue(complex);
-	
-	eIDNumber.setStatus(STORKStatusCode.STATUS_NOT_AVAILABLE.toString());
-	palist.add(eIDNumber);
-
-	PersonalAttribute canRessAddress = new PersonalAttribute();	
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> address = new HashMap<String, String>();
-
-	address.put("state", state);
-	address.put("town", town);
-	address.put("postalCode", postalCode);
-	address.put("streetName", streetName);
-	address.put("streetNumber", streetNumber);
-
-	canRessAddress.setComplexValue(address);
-	palist.add(canRessAddress);
-
-	
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-
-	response.setPersonalAttributeList(palist);
-
-	final STORKAttrQueryResponse storkResponse = getEngine()
-		.generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress,
-			destinationUrl, isNotHashing);
-
-	attrQueryResponse = storkResponse.getTokenSaml();
-	LOG.info("Request id: " + attrQueryenRequest.getSamlId());
-	
-	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(attrQueryResponse));
-	
-	
-	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
-		ipAddress);
-	
-	LOG.info("RESPONSE ID: " + attrQeuryenResponse.getSamlId());
-	LOG.info("RESPONSE IN_RESPONSE_TO: " + attrQeuryenResponse.getInResponseTo());
-	LOG.info("RESPONSE COUNTRY: " + attrQeuryenResponse.getCountry());
-	
-    }
-    
-    
-   
-
-	
-    /**
-     * Test validate attribute query response fail is fail.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAttrQueryResponseFailIsFail()
-	    throws STORKSAMLEngineException {
-
-	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("message");
-
-	attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest,
-		response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
-	
-	LOG.error("ERROR_FAIL: " + PEPSUtil.encodeSAMLToken(attrQueryResponse));
-
-	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
-		ipAddress);
-
-	LOG.info("COUNTRY: " + attrQeuryenResponse.getCountry());
-	assertTrue("Generate incorrect response: ", attrQeuryenResponse.isFail());
-    }  
-    
-	/**
-	 * Test generate/validate response with signedDoc
-	 * 
-	 * @throws STORKSAMLEngineException
-	 *             the STORKSAML engine exception
-	 */
-	@Test
-	public final void testGenerateAttrQueryResponseWithSignedDoc()
-			throws STORKSAMLEngineException {
-
-		String signedDocResponse = "<dss:SignResponse xmlns:dss=\"urn:oasis:names:tc:dss:1.0:core:schema\" RequestID=\"123456\"> <dss:Result> <dss:ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</dss:ResultMajor> </dss:Result> <dss:SignatureObject> <dss:Base64Signature Type=\"urn:ietf:rfc:3275\">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExIi8+PGRzOlJlZmVyZW5jZSBJZD0iUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyIgVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI09iamVjdCIgVVJJPSIjT2JqZWN0LTk4NzMzY2RlLThiY2MtNDhhMC05Yjc3LTBlOTk5N2JkZDA1OCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNiYXNlNjQiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPkNrMVZxTmQ0NVFJdnEzQVpkOFhZUUx2RWh0QT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVHlwZT0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMyNTaWduZWRQcm9wZXJ0aWVzIiBVUkk9IiNTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5BNVk5MW40cXBMZ3l0VFc3ZnhqWENVZVJ2NTQ9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI1NpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItS2V5SW5mbyI+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPlZQWDRuS0Z5UzZyRitGNmNSUjBQck5aZHc2Zz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9IlNpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItU2lnbmF0dXJlVmFsdWUiPkxiS04vL0M3WGt5eFR0WVRpQ1VScjhuWnp4QW1zdGNNZDBDZ0VBQ3JLMWR5Z1JIcUdjSzR4dHMrV0NVOFB5RXFXclJJVFl6SXV3LzcNClY0Wno5VFQ2MHA0S1RNZXd1UUw2NHNrRVN4MllnMkVkaWtTTyt0S3hXa2hyYVVzbVZiR2JQbW1jbUR2OTd0SER3ODg3NDdlRnE1RjUNCnYrYVZTeUF6MDNpVUttdVNlSDg9PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1LZXlJbmZvIj48ZHM6S2V5VmFsdWU+PGRzOlJTQUtleVZhbHVlPjxkczpNb2R1bHVzPnd1Y21qOXRJV3J2d2JTVFVEZndLbCtKdERNTUVSMGNMZDZEa0JTcjc5MHQrckdOakVTcVlqUndFSWVCbktvUUhQeDVIb1JlRjg4L3QNCnFZOStDaEVYcExITHM5cDVhWDdTREp1YnBRTWZwMXRERlgzNHl3Z3hTUXZjZWVKUVdCWGppZXVJbWZDMjFzNGJPY2dKYlYxaGJpZ1MNCnpPS1RRS3IxVHpkR1IrdVJ5MDA9PC9kczpNb2R1bHVzPjxkczpFeHBvbmVudD5BUUFCPC9kczpFeHBvbmVudD48L2RzOlJTQUtleVZhbHVlPjwvZHM6S2V5VmFsdWU+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJSW1UQ0NCNEdnQXdJQkFnSURBWFVVTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUlCT3pFTE1Ba0dBMVVFQmhNQ1JWTXhPekE1QmdOVg0KQkFvVE1rRm5aVzVqYVdFZ1EyRjBZV3hoYm1FZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUNoT1NVWWdVUzB3T0RBeE1UYzJMVWtwTVRRdw0KTWdZRFZRUUhFeXRRWVhOellYUm5aU0JrWlNCc1lTQkRiMjVqWlhCamFXOGdNVEVnTURnd01EZ2dRbUZ5WTJWc2IyNWhNUzR3TEFZRA0KVlFRTEV5VlRaWEoyWldseklGQjFZbXhwWTNNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVWRFZpMHlNVFV3TXdZRFZRUUxFeXhXWldkbA0KZFNCb2RIUndjem92TDNkM2R5NWpZWFJqWlhKMExtNWxkQzkyWlhKRFNVTXRNaUFvWXlrd016RTFNRE1HQTFVRUN4TXNSVzUwYVhSaA0KZENCd2RXSnNhV05oSUdSbElHTmxjblJwWm1sallXTnBieUJrWlNCamFYVjBZV1JoYm5NeEd6QVpCZ05WQkFNVEVsQlNSVkJTVDBSVg0KUTBOSlR5QkpSRU5oZERBZUZ3MHhNREF5TVRFeE9ESXlNRFJhRncweE5EQXlNVEF4T0RJeU1EUmFNSUd3TVFzd0NRWURWUVFHRXdKRg0KVXpFMU1ETUdBMVVFQ3hNc1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5U1VSRFlYUWdLR01wTURNeA0KRmpBVUJnTlZCQVFURFVKRlVreEJUa2RCSUZOUFZFOHhGekFWQmdOVkJDb1REazFCVWtsQklFVk9SMUpCUTBsQk1SSXdFQVlEVlFRRg0KRXdreE1EQXdNRGswTkZNeEpUQWpCZ05WQkFNVEhFMUJVa2xCSUVWT1IxSkJRMGxCSUVKRlVreEJUa2RCSUZOUFZFOHdnWjh3RFFZSg0KS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTG5Kby9iU0ZxNzhHMGsxQTM4Q3BmaWJRekRCRWRIQzNlZzVBVXErL2RMZnF4ag0KWXhFcW1JMGNCQ0hnWnlxRUJ6OGVSNkVYaGZQUDdhbVBmZ29SRjZTeHk3UGFlV2wrMGd5Ym02VURINmRiUXhWOStNc0lNVWtMM0huaQ0KVUZnVjQ0bnJpSm53dHRiT0d6bklDVzFkWVc0b0VzemlrMENxOVU4M1JrZnJrY3ROQWdNQkFBR2pnZ1N3TUlJRXJEQU1CZ05WSFJNQg0KQWY4RUFqQUFNQTRHQTFVZER3RUIvd1FFQXdJRm9EQ0J6QVlEVlIwUkJJSEVNSUhCZ1E5aWMyOTBiMEJuYldGcGJDNWpiMjJrZ1lVdw0KZ1lJeEN6QUpCZ05WQkFZVEFrVlRNU3N3S1FZRFZRUUtGQ0pCWjhPb2JtTnBZU0JEWVhSaGJHRnVZU0JrWlNCRFpYSjBhV1pwWTJGag0KYWNPek1RNHdEQVlEVlFRTEV3VkpSRU5CVkRFUE1BMEdBMVVFQlJNR01ERTNOVEUwTVNVd0l3WURWUVFERXh4TlFWSkpRU0JGVGtkUw0KUVVOSlFTQkNSVkpNUVU1SFFTQlRUMVJQb0JBR0Npc0dBUVFCOVhnQkFRR2dBZ3dBb0JRR0RsWUVBQUVEQmdFRUFmVjRBUUVDb0FJTQ0KQURBZkJnTlZIUklFR0RBV2dSUmxZMTlwWkdOaGRFQmpZWFJqWlhKMExtNWxkREFkQmdOVkhRNEVGZ1FVQUZYanVOc2tCMk1seXZVQg0KaDdwOFRKMHVKMHd3Z2dGSUJnTlZIU01FZ2dFL01JSUJPNEFVUkt2Y2tVaE4xNGg0Q24vZ2RPRG42NzIzS1Z5aGdnRVBwSUlCQ3pDQw0KQVFjeEN6QUpCZ05WQkFZVEFrVlRNVHN3T1FZRFZRUUtFekpCWjJWdVkybGhJRU5oZEdGc1lXNWhJR1JsSUVObGNuUnBabWxqWVdOcA0KYnlBb1RrbEdJRkV0TURnd01URTNOaTFKS1RFb01DWUdBMVVFQ3hNZlUyVnlkbVZwY3lCUWRXSnNhV056SUdSbElFTmxjblJwWm1sag0KWVdOcGJ6RThNRG9HQTFVRUN4TXpWbVZuWlhVZ2FIUjBjSE02THk5M2QzY3VZMkYwWTJWeWRDNXVaWFF2ZG1WeWNISmxjSEp2WkhWag0KWTJsdklDaGpLVEF6TVRVd013WURWUVFMRXl4S1pYSmhjbkYxYVdFZ1JXNTBhWFJoZEhNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVOaA0KZEdGc1lXNWxjekVjTUJvR0ExVUVBeE1UVUZKRlVGSlBSRlZEUTBsUElFVkRMVUZEUTRJUWR3S1R0TTFFRVU5RkVQWFVZSGdnaERBZA0KQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdRd0VRWUpZSVpJQVliNFFnRUJCQVFEQWdXZ01EUUdDQ3NHQVFVRg0KQndFQkJDZ3dKakFrQmdnckJnRUZCUWN3QVlZWWFIUjBjSE02THk5dlkzTndMbU5oZEdObGNuUXVibVYwTUJnR0NDc0dBUVVGQndFRA0KQkF3d0NqQUlCZ1lFQUk1R0FRRXdnWVlHQTFVZEh3Ui9NSDB3UEtBNm9EaUdObWgwZEhBNkx5OWxjSE5qWkM1allYUmpaWEowTG01bA0KZEM5amNtd3ZjSEpsY0hKdlpIVmpZMmx2WDJWakxXbGtZMkYwTG1OeWJEQTlvRHVnT1lZM2FIUjBjRG92TDJWd2MyTmtNaTVqWVhSag0KWlhKMExtNWxkQzlqY213dmNISmxjSEp2WkhWalkybHZYMlZqTFdsa1kyRjBMbU55YkRDQjlnWURWUjBnQklIdU1JSHJNSUhvQmd3cg0KQmdFRUFmVjRBUU1CVmdFd2dkY3dMQVlJS3dZQkJRVUhBZ0VXSUdoMGRIQnpPaTh2ZDNkM0xtTmhkR05sY25RdWJtVjBMM1psY2tsRQ0KUTJGME1JR21CZ2dyQmdFRkJRY0NBakNCbVJxQmxrRnhkV1Z6ZENEdnY3MXpJSFZ1SUdObGNuUnBabWxqWVhRZ2NHVnljMjl1WVd3Zw0KU1VSRFFWUXNJSEpsWTI5dVpXZDFkQ0JrSjJsa1pXNTBhV1pwWTJGajc3KzlMQ0J6YVdkdVlYUjFjbUVnYVNCNGFXWnlZWFFnWkdVZw0KWTJ4aGMzTmxJRElnYVc1a2FYWnBaSFZoYkM0Z1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5UkVOaA0KZERBdEJnTlZIUWtFSmpBa01CQUdDQ3NHQVFVRkJ3a0VNUVFUQWtWVE1CQUdDQ3NHQVFVRkJ3a0ZNUVFUQWtWVE1BMEdDU3FHU0liMw0KRFFFQkJRVUFBNElCQVFDcTc3ODBSR1FNTEIxZ2tkTk1mTFhuZ3FNb1JIR0taYnZ6a3JxSUFtVDhXQWQxRThyQXBoUjkveExKVXRwNQ0KbGJnMmZScjVibDJqOE9WREJLMlltRzQxaDhBRG40U1RJL0FwZU5JTlNmalpzNk5Sc25XekZ5ZlhYbVBDSFlGQi9YV3p5aW1DRXhndg0KdnR1SCszUUF3Y3dobjUwUExFdWh3NUM1dmxYN0x5NUs2ckxMTUZOVVVNYldWeTFoWmVsSy9DQlRjQWpJTzM4TlkrdllSQU1LU2Y0TQ0KL2daUXo0cUJlRlZKYTUyUjdOY0FxQ2ZyZkxmYVhwYkRTZzk4eG9CZU5zMmluR3p4OFVTZ0VyTFpqS0pzZG4vS2pURDlnUy9zVGRRNg0KUTdpZHFsZDJMRlZsTzIvYjk0Wk5aQmNTLzc4RU9EWGdkV2ZreVBDN1J3OHJlOW5JMy9qVDwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjxkczpPYmplY3QgRW5jb2Rpbmc9ImJhc2U2NCIgSWQ9Ik9iamVjdC05ODczM2NkZS04YmNjLTQ4YTAtOWI3Ny0wZTk5OTdiZGQwNTgiIE1pbWVUeXBlPSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iPlNHVnNiRzhnVjI5eWJHUT08L2RzOk9iamVjdD48ZHM6T2JqZWN0Pjx4YWRlczpRdWFsaWZ5aW5nUHJvcGVydGllcyB4bWxuczp4YWRlcz0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMy92MS4zLjIjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1RdWFsaWZ5aW5nUHJvcGVydGllcyIgVGFyZ2V0PSIjU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjx4YWRlczpTaWduZWRQcm9wZXJ0aWVzIElkPSJTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjx4YWRlczpTaWduZWRTaWduYXR1cmVQcm9wZXJ0aWVzPjx4YWRlczpTaWduaW5nVGltZT4yMDExLTAzLTIxVDExOjQ0OjQyKzAxOjAwPC94YWRlczpTaWduaW5nVGltZT48eGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjx4YWRlczpDZXJ0Pjx4YWRlczpDZXJ0RGlnZXN0PjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT4zbTZ3OTlUb3lTZDlKcEJsMWdCazhEei9iYlU9PC9kczpEaWdlc3RWYWx1ZT48L3hhZGVzOkNlcnREaWdlc3Q+PHhhZGVzOklzc3VlclNlcmlhbD48ZHM6WDUwOUlzc3Vlck5hbWU+Q049UFJFUFJPRFVDQ0lPIElEQ2F0LCBPVT1FbnRpdGF0IHB1YmxpY2EgZGUgY2VydGlmaWNhY2lvIGRlIGNpdXRhZGFucywgT1U9VmVnZXUgaHR0cHM6Ly93d3cuY2F0Y2VydC5uZXQvdmVyQ0lDLTIgKGMpMDMsIE9VPVNlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8gRUNWLTIsIEw9UGFzc2F0Z2UgZGUgbGEgQ29uY2VwY2lvIDExIDA4MDA4IEJhcmNlbG9uYSwgTz1BZ2VuY2lhIENhdGFsYW5hIGRlIENlcnRpZmljYWNpbyAoTklGIFEtMDgwMTE3Ni1JKSwgQz1FUzwvZHM6WDUwOUlzc3Vlck5hbWU+PGRzOlg1MDlTZXJpYWxOdW1iZXI+OTU1MDg8L2RzOlg1MDlTZXJpYWxOdW1iZXI+PC94YWRlczpJc3N1ZXJTZXJpYWw+PC94YWRlczpDZXJ0PjwveGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjwveGFkZXM6U2lnbmVkU2lnbmF0dXJlUHJvcGVydGllcz48eGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PHhhZGVzOkRhdGFPYmplY3RGb3JtYXQgT2JqZWN0UmVmZXJlbmNlPSIjUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyI+PHhhZGVzOk1pbWVUeXBlPmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTwveGFkZXM6TWltZVR5cGU+PHhhZGVzOkVuY29kaW5nPmJhc2U2NDwveGFkZXM6RW5jb2Rpbmc+PC94YWRlczpEYXRhT2JqZWN0Rm9ybWF0PjwveGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PC94YWRlczpTaWduZWRQcm9wZXJ0aWVzPjwveGFkZXM6UXVhbGlmeWluZ1Byb3BlcnRpZXM+PC9kczpPYmplY3Q+PC9kczpTaWduYXR1cmU+</dss:Base64Signature> </dss:SignatureObject> </dss:SignResponse>";
-
-		IPersonalAttributeList palist = new PersonalAttributeList();
-
-		PersonalAttribute signedDoc = new PersonalAttribute();
-		signedDoc.setName("signedDoc");
-		signedDoc.setIsRequired(false);
-		ArrayList<String> signed = new ArrayList<String>();
-		signed.add(signedDocResponse);
-		signedDoc.setValue(signed);
-		palist.add(signedDoc);
-
-		PersonalAttribute isAgeOver = new PersonalAttribute();
-		isAgeOver.setName("isAgeOver");
-		isAgeOver.setIsRequired(false);
-		ArrayList<String> ages = new ArrayList<String>();
-		ages.add("16");
-		ages.add("18");
-		isAgeOver.setValue(ages);
-		palist.add(isAgeOver);
-
-		attrQueryenRequest.setPersonalAttributeList(palist);
-
-		final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-
-		response.setPersonalAttributeList(palist);
-
-		final STORKAttrQueryResponse storkResponse = getEngine()
-				.generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, 
-						destinationUrl, isNotHashing);
-
-		attrQueryResponse = storkResponse.getTokenSaml();
-		attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
-				ipAddress);
-
-		assertTrue("SignedDoc response should be the same: ", attrQeuryenResponse
-				.getPersonalAttributeList().get("signedDoc").getValue().get(0)
-				.equals(signedDocResponse));
-
-	}
-	
-	@Test
-	public final void testEncodeDecode() {
-	      STORKAttrQueryRequest attrRequest = new STORKAttrQueryRequest();
-	      STORKAttrQueryRequest request;
-	      IPersonalAttributeList list = null;
-	      boolean outcome = false;
-	      
-	      try {
-	    	 //STEP 1: Create the STORKAttrQueryRequest and get the SAML bytes
-	    	 attrRequest.setSpSector("NOT AVAILABLE");
-	    	 attrRequest.setSpInstitution("NOT AVAILABLE");
-	    	 attrRequest.setSpApplication("NOT AVAILABLE");
-	         attrRequest.setSpCountry("NOT AVAILABLE");
-
-	         attrRequest.setIssuer("123");
-	         attrRequest.setDestination("456");
-	         attrRequest.setAssertionConsumerServiceURL("789");
-	         attrRequest.setQaa(2);
-	         attrRequest.setPersonalAttributeList(pal);
-
-	         System.out.println("Original PAL:");
-	         System.out.println(pal.toString());
-
-	         attrRequest = engine.generateSTORKAttrQueryRequest(attrRequest);
-
-	         byte[] saml = attrRequest.getTokenSaml();
-
-	    	 //STEP 2: RE-Create the STORKAttrQueryRequest from the SAML bytes
-	         request = engine.validateSTORKAttrQueryRequest(saml);
-
-	         System.out.println("STORKAttrQueryRequest Issuer: " + request.getIssuer());
-	         System.out.println("STORKAttrQueryRequest Destination: " + request.getDestination());
-	         System.out.println("STORKAttrQueryRequest ServiceURL: " + request.getAssertionConsumerServiceURL());
-	         System.out.println("STORKAttrQueryRequest Attributes: " + request.getPersonalAttributeList().toString());
-	         System.out.println("STORKAttrQueryRequest QAA: " + request.getQaa());
-			 //------------------------------
-			 list = request.getPersonalAttributeList();
-
-			 List<String> values = new ArrayList<String>();
-			 values.add("test1");
-			 values.add("test2");
-			 values.add("test3");
-			 list.get("newAttribute2").setValue(values);
-
-			 System.out.println("Values added in newAttribute2 PAL:");
-			 System.out.println(list.toString());
-
-	         //////////////////////////////////////////////////////////////////////////
-			 final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
-			 response.setPersonalAttributeList(list);
-
-			 final STORKAttrQueryResponse storkResponse =
-						engine.generateSTORKAttrQueryResponse(request, response, "127.0.0.1",
-								request.getAssertionConsumerServiceURL(), false);
-
-			 byte[] samlBytes = storkResponse.getTokenSaml();
-
-	    	 //STEP 3: RE-Create the STORKAttrQueryResponse from the SAML bytes
-		     STORKAttrQueryResponse attrResponse = null;
-		     attrResponse =
-		         engine.validateSTORKAttrQueryResponse(samlBytes, "127.0.0.1");
-
-		     System.out.println("Response decoded PAL:");
-		     System.out.println(attrResponse.getPersonalAttributeList().toString());
-
-		     values = attrResponse.getPersonalAttributeList().get("newAttribute2").getValue();
-		     if ( values.contains("test1") && values.contains("test2") && values.contains("test3") )
-		    	 outcome = true;
-	      } catch (final STORKSAMLEngineException e) {
-	         LOG.error("Errror genereating SAML Token for Authentication Request", e);
-	      }
-
-	      assertTrue(outcome);
-	}
-	
-	@Test
-	public final void testGenerateAttrRequestWithMultipleAssertions()
-	throws STORKSAMLEngineException {
-		STORKAttrQueryRequest req = null;
-		STORKAttrQueryResponse res0 = null;
-		STORKAttrQueryResponse res1 = null;
-		STORKAttrQueryResponse res2 = null;
-		STORKAttrQueryResponse res = null;
-		STORKAttrQueryResponse restotal = null;
-		
-		try {
-			req = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
-		    	    
-		    attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
-		    
-		} catch (STORKSAMLEngineException e) {
-		    fail("Error validating STORKAuthnRequest");
-		}
-		
-		IPersonalAttributeList pList = req.getPersonalAttributeList();
-		for (int i =0; i < pList.size(); i++)
-		{
-			PersonalAttribute attr = pList.get("dateOfBirth");
-			attr.setValue(Arrays.asList("19820919"));
-			pList.remove("dateOfBirth");
-			pList.add(attr);
-			PersonalAttribute attr1 = pList.get("givenName");
-			attr1.setValue(Arrays.asList("Sveinborn Oskarsson"));
-			pList.remove("givenName");
-			pList.add(attr1);
-			PersonalAttribute attr2 = pList.get("isAgeOver");
-			attr2.setValue(Arrays.asList("true"));
-			pList.remove("isAgeOver");
-			pList.add(attr2);			
-		}
-		
-		res = new STORKAttrQueryResponse();
-		res.setPersonalAttributeList(pList);
-		
-		STORKAttrQueryResponse storkResponse = getEngine()
-		.generateSTORKAttrQueryResponse(req, res, ipAddress,
-				destinationUrl, isNotHashing);
-		
-		res0 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress);
-		
-		storkResponse = getEngine()
-		.generateSTORKAttrQueryResponse(req, res, ipAddress,
-				destinationUrl, isNotHashing);
-		res1 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress);
-		
-		storkResponse = getEngine()
-		.generateSTORKAttrQueryResponse(req, res, ipAddress,
-				destinationUrl, isNotHashing);
-		res2 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress);
-		
-		List<STORKAttrQueryResponse> responses = new ArrayList();
-		responses.add(res0);
-		responses.add(res1);
-		responses.add(res2);
-		
-		STORKAttrQueryResponse resfinal = new STORKAttrQueryResponse();
-		storkResponse = getEngine().generateSTORKAttrQueryResponseWithAssertions(req, resfinal, responses, 
-				ipAddress, destinationUrl, isNotHashing);
-		
-		attrQueryResponse = storkResponse.getTokenSaml();
-		FileOutputStream output = null;
-		try {
-			output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryMultiAssertResponse.xml"));
-		} catch (FileNotFoundException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		try {
-			output.write(attrQueryResponse);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		
-		res = null;
-		res = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress);
-		System.out.println(res.getTotalPersonalAttributeList().toString());
-		assertNotNull(res);
-	}
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java
deleted file mode 100644
index 02a8a6fab..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java
+++ /dev/null
@@ -1,968 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.test.simple;
-
-import static org.junit.Assert.*;
-
-import java.util.ArrayList;
-
-import org.junit.Ignore;
-import org.junit.Test;
-
-import org.opensaml.xml.parse.BasicParserPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.commons.IPersonalAttributeList;
-import eu.stork.peps.auth.commons.PersonalAttribute;
-import eu.stork.peps.auth.commons.PersonalAttributeList;
-import eu.stork.peps.auth.commons.STORKAuthnRequest;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-/**
- * The Class StorkAuthRequestTest defines a class to .
- */
-public class StorkAuthRequestTest {
-
-    /** The engines. */
-    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");    
-    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
-    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
-            
-
-    /**
-     * Instantiates a new stork authentication request test.
-     */
-    public StorkAuthRequestTest() {
-	pal = new PersonalAttributeList();
-
-	final PersonalAttribute isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(true);
-	final ArrayList<String> ages = new ArrayList<String>();
-	ages.add("16");
-	ages.add("18");
-	isAgeOver.setValue(ages);
-	pal.add(isAgeOver);
-	
-	final PersonalAttribute dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	pal.add(dateOfBirth);
-	
-		final PersonalAttribute eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-	pal.add(eIDNumber);
-
-	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
-	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
-
-	spName = "University of Oxford";
-	spSector = "EDU001";
-	spInstitution = "OXF001";
-	spApplication = "APP001";
-	spCountry = "EN";
-	
-	spId = "EDU001-OXF001-APP001";
-	
-    }
-
-    /** The destination. */
-    private String destination;
-
-    /** The service provider name. */
-    private String spName;
-
-    /** The service provider sector. */
-    private String spSector;
-
-    /** The service provider institution. */
-    private String spInstitution;
-
-    /** The service provider application. */
-    private String spApplication;
-
-    /** The service provider country. */
-    private String spCountry;
-    
-    /** The service provider id. */
-    private String spId;
-
-    /** The quality authentication assurance level. */
-    private static final int QAAL = 3;
-
-    /** The List of Personal Attributes. */
-    private IPersonalAttributeList pal;
-
-    /** The assertion consumer URL. */
-    private String assertConsumerUrl;
-
-    /** The authentication request. */
-    private static byte[] authRequest;
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(StorkAuthRequestTest.class.getName());
-
-    /** Parser manager used to parse XML. */
-    private static BasicParserPool parser;
-
-    static {
-	parser = new BasicParserPool();
-	parser.setNamespaceAware(true);
-    }
-
-    /**
-     * Test generate authentication request.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAuthnRequest() throws STORKSAMLEngineException {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// new parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	//engine.generateSTORKAuthnRequest(request);
-	
-	LOG.info("STORKAuthnRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAuthnRequest(request).getTokenSaml()));
-	request.setCitizenCountryCode("ES");
-	LOG.info("STORKAuthnRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAuthnRequest(request).getTokenSaml()));
-    }
-    
-    
-    /**
-     * Test generate authentication request error personal attribute name error.
-     */
-    @Test
-    public final void testGenerateAuthnRequestPALsErr1() {
-	
-	final IPersonalAttributeList palWrong = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("attrNotValid");
-	worngAttr.setIsRequired(true);
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(palWrong);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    
-    /**
-     * Test generate authentication request error personal attribute value error.
-     */
-    @Test
-    public final void testGenerateAuthnRequestPALsErr2() {
-	
-	final IPersonalAttributeList palWrong = new PersonalAttributeList();
-
-	final PersonalAttribute attrNotValid = new PersonalAttribute();
-	attrNotValid.setName("attrNotValid");
-	attrNotValid.setIsRequired(true);
-	palWrong.add(attrNotValid);
-
-
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(palWrong);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request error provider name null.
-     */
-    @Test
-    public final void testGenerateAuthnRequestSPNAmeErr1() {
-	
- 
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(null);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try 
-	{
-		engine.generateSTORKAuthnRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	}
-	catch (STORKSAMLEngineException e)
-	{
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request authentication assurance level
-     * negative value.
-     */
-    @Test
-    public final void testGenerateAuthnRequestQaalErr1() {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(-1);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider sector null.
-     */
-    @Test
-    public final void testGenerateAuthnRequestSectorErr() {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(null);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider institution null.
-     */
-    @Test
-    public final void testGenerateAuthnRequestInstitutionrErr() {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(null);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider application null.
-     */
-    @Test
-    public final void testGenerateAuthnRequestApplicationErr() {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(null);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	}
-    }
-
-    /**
-     * Test generate authentication request service provider country null.
-     */
-    @Test
-    public final void testGenerateAuthnRequestCountryErr() {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(null);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	    
-	} catch (STORKSAMLEngineException e) {	 
-		LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request error with quality authentication
-     * assurance level wrong.
-     */
-    @Test
-    public final void testGenerateAuthnRequestQaalErr2() {
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(0);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request personal attribute list null value.
-     */
-    @Test
-    public final void testGenerateAuthnRequestPALErr1() {
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(null);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication request error with assertion consumer URL
-     * null.
-     */
-    @Test
-    public final void testGenerateAuthnRequestAssertionConsumerErr1() {
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(null);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    engine.generateSTORKAuthnRequest(request);
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate authentication request null parameter.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnRequestNullParam()
-	    throws STORKSAMLEngineException {
-	try {
-	    engine.validateSTORKAuthnRequest(null);
-	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate authentication request error bytes encode.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnRequestErrorEncode()
-	    throws STORKSAMLEngineException {
-	try {
-	    engine.validateSTORKAuthnRequest("messageError".getBytes());
-	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate authentication request.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnRequest() throws STORKSAMLEngineException {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-	
-	authRequest = engine.generateSTORKAuthnRequest(request).getTokenSaml();
-	
-	final STORKAuthnRequest validatedRequest = engine.validateSTORKAuthnRequest(authRequest);	 
-		
-	assertEquals("CrossBorderShare incorrect: ", validatedRequest.isEIDCrossBorderShare(), false);
-	assertEquals("CrossSectorShare incorrect: ", validatedRequest.isEIDCrossSectorShare(),	false);
-	assertEquals("SectorShare incorrect: ", validatedRequest.isEIDSectorShare(), false);
-	
-    }
-
-    /**
-     * Test validate data authenticate request. Verified parameters after
-     * validation.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateDataAuthnRequest() throws STORKSAMLEngineException {
-    	
-    final STORKAuthnRequest request = engine.validateSTORKAuthnRequest(authRequest);
-
-	assertEquals("Sestination incorrect: ", request.getDestination(), destination);
-	
-	assertEquals("CrossBorderShare incorrect: ", request.isEIDCrossBorderShare(), false);
-	assertEquals("CrossSectorShare incorrect: ", request.isEIDCrossSectorShare(), false);
-	assertEquals("SectorShare incorrect: ", request.isEIDSectorShare(), false);	
-
-	assertEquals("Service provider incorrect: ", request.getProviderName(), spName);
-	assertEquals("QAAL incorrect: ", request.getQaa(), QAAL);
-	assertEquals("SPSector incorrect: ", request.getSpSector(), spSector);		
-	assertEquals("SPInstitution incorrect: ", request.getSpInstitution(), null);
-	assertEquals("SPApplication incorrect: ", request.getSpApplication(), spApplication);
-	assertEquals("Asserition consumer URL incorrect: ", request.getAssertionConsumerServiceURL(), assertConsumerUrl);
-				
-	assertEquals("SP Country incorrect: ", request.getSpCountry(), spCountry);
-	assertEquals("SP Id incorrect: ", request.getSPID(), spId);
-	assertEquals("CitizenCountryCode incorrect: ", request.getCitizenCountryCode(), "ES");
-		
-    }
-
-    /**
-     * Test validate file authentication request. Validate from XML file.
-     *     
-     * @throws Exception the exception
-     */
-    @Test
-    public final void testValidateFileAuthnRequest() throws Exception {
-
-	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml");
-
-	try {
-	    engine.validateSTORKAuthnRequest(bytes);
-        fail("testValidateFileAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error(e.getMessage());
-	}
-    }
-
-    /**
-     * Test validate file authentication request tag delete.
-     * 
-     * @throws Exception the exception
-     */
-    @Test
-    public final void testValidateFileAuthnRequestTagDelete() throws Exception {
-
-	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml");
-
-	try {
-	    engine.validateSTORKAuthnRequest(bytes);
-        fail("validateSTORKAuthnRequest(...) should have thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error(e.getMessage());
-
-	}
-    }
-
-    /**
-     * Test validate authentication request not trusted token.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnRequestNotTrustedErr1()
-	    throws STORKSAMLEngineException {
-	
-	try {
-	    final STORKSAMLEngine engineNotTrusted = STORKSAMLEngine
-		    .getInstance("CONF2");
-
-	    final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	    request.setDestination(destination);
-	    request.setProviderName(spName);
-	    request.setQaa(QAAL);
-	    request.setPersonalAttributeList(pal);
-	    request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	    // news parameters
-	    request.setSpSector(spSector);
-	    request.setSpInstitution(spInstitution);
-	    request.setSpApplication(spApplication);
-	    request.setSpCountry(spCountry);
-
-	    final byte[] authReqNotTrust = engineNotTrusted
-		    .generateSTORKAuthnRequest(request).getTokenSaml();
-
-	    engine.validateSTORKAuthnRequest(authReqNotTrust);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-        fail("validateSTORKAuthnRequestNotTrusted(...) should not have thrown an STORKSAMLEngineException!");
-    }
-    }
-
-    /**
-     * Test validate authentication request trusted.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnRequestTrusted()
-	    throws STORKSAMLEngineException {
-
-	final STORKSAMLEngine engineTrusted = STORKSAMLEngine
-		.getInstance("CONF3");
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-
-	final byte[] authReqNotTrust = engineTrusted.generateSTORKAuthnRequest(
-		request).getTokenSaml();
-
-	// engine ("CONF1") no have trust certificate from "CONF2"
-	engine.validateSTORKAuthnRequest(authReqNotTrust);
-	
-    }
-    
-    
-    
-    
-    /**
-     * Test generate authentication request service provider application null.
-     */
-    @Test
-    public final void testGenerateAuthnRequestNADA() {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(null);
-	request.setSpInstitution(null);
-	request.setSpApplication(null);
-	request.setSpCountry(null);
-
-	try {
-	       	
-		engine.validateSTORKAuthnRequest(authRequest);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
-	}
-    }
-    
-    /**
-     * Test validate authentication request with unknown elements.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnRequestWithUnknownElements() throws STORKSAMLEngineException {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-	
-	IPersonalAttributeList pAttList = new PersonalAttributeList();
-		
-	final PersonalAttribute unknown = new PersonalAttribute();
-	unknown.setName("unknown");
-	unknown.setIsRequired(true);
-	pAttList.add(unknown);	
-	
-	final PersonalAttribute eIdentifier = new PersonalAttribute();
-	eIdentifier.setName("eIdentifier");
-	eIdentifier.setIsRequired(true);
-	pAttList.add(eIdentifier);	
-	
-	request.setPersonalAttributeList(pAttList);
-
-	// new parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-	
-	STORKAuthnRequest req = new STORKAuthnRequest();
-		
-	req  = engine3.generateSTORKAuthnRequest(request);
-	
-	req = engine.validateSTORKAuthnRequest(req.getTokenSaml());
-	
-	assertNull("The value shouldn't exist", req.getPersonalAttributeList().get("unknown"));
-	assertNotNull("The value should exist", req.getPersonalAttributeList().get("eIdentifier"));
-	
-    }
-    
-    /**
-     * Test generate Request with required elements by default
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAuthnRequestWithIsRequiredElementsByDefault() throws STORKSAMLEngineException {
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-	
-	IPersonalAttributeList pAttList = new PersonalAttributeList();
-		
-	final PersonalAttribute eIdentifier = new PersonalAttribute();
-	eIdentifier.setName("eIdentifier");
-	eIdentifier.setIsRequired(true);
-	pAttList.add(eIdentifier);	
-	
-	request.setPersonalAttributeList(pAttList);
-
-	// new parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-	
-	STORKAuthnRequest req = new STORKAuthnRequest();
-	STORKAuthnRequest reqTrue = new STORKAuthnRequest();
-	STORKAuthnRequest reqFalse = new STORKAuthnRequest();
-		
-	reqTrue  = engine.generateSTORKAuthnRequest(request);
-	reqFalse = engine2.generateSTORKAuthnRequest(request);
-	req  	 = engine3.generateSTORKAuthnRequest(request);
-	
-	
-	String token = new String(req.getTokenSaml());
-	String reqTrueToken = new String(reqTrue.getTokenSaml());
-	String reqFalseToken = new String(reqFalse.getTokenSaml());
-	
-	assertTrue("The token must contain the chain 'isRequired'", token.contains("isRequired"));
-	assertTrue("The token must contain the chain 'isRequired'", reqTrueToken.contains("isRequired"));
-	assertFalse("The token must contain the chain 'isRequired'", reqFalseToken.contains("isRequired"));
-		
-    }
-    
-    /**
-     * Test validating request and getting alias used to save 
-     * the saml trusted certificate into trustore
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnRequestGettingItsAlias() throws STORKSAMLEngineException {
-
-    	final STORKAuthnRequest request = new STORKAuthnRequest();
-
-    	request.setDestination(destination);
-    	request.setProviderName(spName);
-    	request.setQaa(QAAL);
-    	request.setPersonalAttributeList(pal);
-    	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-    	
-    	IPersonalAttributeList pAttList = new PersonalAttributeList();
-    		
-    	final PersonalAttribute eIdentifier = new PersonalAttribute();
-    	eIdentifier.setName("eIdentifier");
-    	eIdentifier.setIsRequired(true);
-    	pAttList.add(eIdentifier);	
-    	
-    	request.setPersonalAttributeList(pAttList);
-
-    	// new parameters
-    	request.setSpSector(spSector);
-    	request.setSpInstitution(spInstitution);
-    	request.setSpApplication(spApplication);
-    	request.setSpCountry(spCountry);
-    	request.setSPID(spId);
-    	request.setCitizenCountryCode("ES");
-    	
-    	STORKAuthnRequest req = new STORKAuthnRequest();
-    		
-    	req  = engine3.generateSTORKAuthnRequest(request);
-    	req = engine.validateSTORKAuthnRequest(req.getTokenSaml());
-    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo-cert"));
-    	
-    	req  = engine2.generateSTORKAuthnRequest(request);
-    	req = engine2.validateSTORKAuthnRequest(req.getTokenSaml());
-    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo-cert"));
-    	
-
-		
-    }
-    
-	/**
-	 * Test generating/validating request with signedDoc
-	 * 
-	 * @throws STORKSAMLEngineException
-	 *             the STORKSAML engine exception
-	 */
-	@Test
-	public final void testGenerateAuthnRequestWithSignedDoc()
-			throws STORKSAMLEngineException {
-
-		String signedDocRequest = "<dss:SignRequest xmlns:dss=\"urn:oasis:names:tc:dss:1.0:core:schema\" RequestID=\"_d96b62a87d18f1095170c1f44c90b5fd\"><dss:InputDocuments><dss:Document><dss:Base64Data MimeType=\"text/plain\">VGVzdCB0ZXh0</dss:Base64Data></dss:Document></dss:InputDocuments></dss:SignRequest>";
-
-		final STORKAuthnRequest request = new STORKAuthnRequest();
-
-		PersonalAttributeList paler = new PersonalAttributeList();
-
-		final PersonalAttribute eIDNumber = new PersonalAttribute();
-		eIDNumber.setName("eIdentifier");
-		eIDNumber.setIsRequired(true);
-		paler.add(eIDNumber);
-
-		final PersonalAttribute isAgeOver = new PersonalAttribute();
-		isAgeOver.setName("isAgeOver");
-		isAgeOver.setIsRequired(true);
-		final ArrayList<String> ages = new ArrayList<String>();
-		ages.add("16");
-		ages.add("18");
-		isAgeOver.setValue(ages);
-		paler.add(isAgeOver);
-
-		final PersonalAttribute signedDoc = new PersonalAttribute();
-		signedDoc.setName("signedDoc");
-		final ArrayList<String> signedDocs = new ArrayList<String>();
-		signedDocs.add(signedDocRequest);
-		signedDoc.setValue(signedDocs);
-		signedDoc.setIsRequired(false);
-		paler.add(signedDoc);
-
-		request.setDestination(destination);
-		request.setProviderName(spName);
-		request.setQaa(QAAL);
-		request.setPersonalAttributeList(paler);
-		request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-		// new parameters
-		request.setSpSector(spSector);
-		request.setSpInstitution(spInstitution);
-		request.setSpApplication(spApplication);
-		request.setSpCountry(spCountry);
-		request.setSPID(spId);
-		request.setCitizenCountryCode("ES");
-
-		STORKAuthnRequest req = new STORKAuthnRequest();
-
-		req = engine.generateSTORKAuthnRequest(request);
-		req = engine.validateSTORKAuthnRequest(req.getTokenSaml());
-
-		assertTrue("SignedDoc request should be the same: ", req
-				.getPersonalAttributeList().get("signedDoc").getValue().get(0)
-				.equals(signedDocRequest));
-		
-
-	}
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java
deleted file mode 100644
index 46904788f..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package eu.stork.peps.test.simple;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.junit.Test;
-import org.opensaml.xml.parse.BasicParserPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.commons.IPersonalAttributeList;
-import eu.stork.peps.auth.commons.STORKLogoutRequest;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-
-public class StorkLogoutRequestTest {
-	
-	/** The engines. */	
-    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
-    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
-    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
-    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
-    
-    public StorkLogoutRequestTest() {           
-    	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
-    	spUserId = "IS/IS/1234567890";
-    }
-
-    /** The destination. */
-    private String destination;
-   
-    /** The user id. */
-    private String spUserId;
-    
-    /** The logout request. */
-    private static byte[] logoutRequest;
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(StorkLogoutRequestTest.class.getName());
-
-    /** Parser manager used to parse XML. */
-    private static BasicParserPool parser;
-
-    static {
-		parser = new BasicParserPool();
-		parser.setNamespaceAware(true);
-    }
-    
-    /**
-     * Test generate authentication request.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateLogoutRequest() throws STORKSAMLEngineException {
-
-	final STORKLogoutRequest request = new STORKLogoutRequest();
-
-	request.setDestination(destination);	
-
-	request.setSpProvidedId(spUserId);
-
-	STORKLogoutRequest req1 = engine0.generateSTORKLogoutRequest(request);
-	byte[] reqByte = req1.getTokenSaml();
-	FileOutputStream output = null;
-	
-	try {
-		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/LogoutRequest.xml"));
-	} catch (FileNotFoundException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	try {
-		output.write(reqByte);
-	} catch (IOException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	
-	LOG.info("STORKAttrQueryRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKLogoutRequest(request).getTokenSaml()));
-	
-	LOG.info("STORKAttrQueryRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKLogoutRequest(request).getTokenSaml()));
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java
deleted file mode 100644
index 2d05e04aa..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package eu.stork.peps.test.simple;
-
-import static org.junit.Assert.*;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-import org.opensaml.xml.parse.BasicParserPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.commons.STORKLogoutRequest;
-import eu.stork.peps.auth.commons.STORKLogoutResponse;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-
-public class StorkLogoutResponseTest {
-	
-	/** The engines. */	
-    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
-    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
-    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
-    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
-    
-    public StorkLogoutResponseTest() {           
-    	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
-    	spUserId = "IS/IS/1234567890";
-    }
-
-    /** The destination. */
-    private String destination;
-   
-    /** The user id. */
-    private String spUserId;
-    
-    /** The logout request. */
-    private static byte[] logoutRequest;
-    
-    /** The logout response. */
-    private static byte[] logoutResponse;
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(StorkLogoutResponseTest.class.getName());
-
-    /** Parser manager used to parse XML. */
-    private static BasicParserPool parser;
-
-    static {
-		parser = new BasicParserPool();
-		parser.setNamespaceAware(true);
-    }
-    
-    /**
-     * Test generate authentication request.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateLogoutRequest() throws STORKSAMLEngineException {
-
-	final STORKLogoutRequest request = new STORKLogoutRequest();
-	
-	final STORKLogoutResponse response = new STORKLogoutResponse();
-
-	request.setDestination(destination);
-	response.setDestination(destination);
-
-	request.setSpProvidedId(spUserId);
-
-	STORKLogoutRequest req1 = engine0.generateSTORKLogoutRequest(request);
-	
-	STORKLogoutResponse res = engine0.generateSTORKLogoutResponse(req1, response);
-	
-	byte[] reqByte = res.getTokenSaml();
-	FileOutputStream output = null;
-	
-	try {
-		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/LogoutResponse.xml"));
-	} catch (FileNotFoundException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	try {
-		output.write(reqByte);
-	} catch (IOException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-		
-	
-		assertNotNull(reqByte);
-    }
-    
-    /**
-     * Test generate authentication request.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateLogoutRequestFail() throws STORKSAMLEngineException {
-
-	final STORKLogoutRequest request = new STORKLogoutRequest();
-	
-	final STORKLogoutResponse response = new STORKLogoutResponse();
-
-	request.setDestination(destination);
-	response.setDestination(destination);
-	response.setStatusMessage("User not found.");
-	response.setStatusCode("1234");
-	request.setSpProvidedId(spUserId);
-
-	STORKLogoutRequest req1 = engine0.generateSTORKLogoutRequest(request);
-	
-	STORKLogoutResponse res = engine0.generateSTORKLogoutResponseFail(req1, response);
-	
-	byte[] reqByte = res.getTokenSaml();
-	FileOutputStream output = null;
-	
-	try {
-		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/LogoutResponseFail.xml"));
-	} catch (FileNotFoundException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	try {
-		output.write(reqByte);
-	} catch (IOException e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-	
-		assertNotNull(reqByte);
-    }
-
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java
deleted file mode 100644
index 62e9cfb18..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java
+++ /dev/null
@@ -1,533 +0,0 @@
-package eu.stork.peps.test.simple;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import org.junit.Test;
-import org.opensaml.xml.parse.BasicParserPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.commons.IPersonalAttributeList;
-import eu.stork.peps.auth.commons.PersonalAttribute;
-import eu.stork.peps.auth.commons.PersonalAttributeList;
-import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
-import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
-import eu.stork.peps.auth.commons.STORKAuthnRequest;
-import eu.stork.peps.auth.commons.STORKAuthnResponse;
-import eu.stork.peps.auth.commons.STORKStatusCode;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-
-public class StorkNewResponseTest {
-	/** The engine. */
-    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
-    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
-
-    /**
-     * Gets the engine.
-     * 
-     * @return the engine
-     */
-    public static STORKSAMLEngine getEngine() {
-        return engine;
-    }
-    
-    public static STORKSAMLEngine getEngine2() {
-        return engine0;
-    }
-
-    /**
-     * Sets the engine.
-     * 
-     * @param newEngine the new engine
-     */
-    public static void setEngine(final STORKSAMLEngine newEngine) {
-    	StorkNewResponseTest.engine = newEngine;
-    }
-
-    /** The destination. */
-    private static String destination;
-
-    /** The service provider name. */
-    private static String spName;
-
-    /** The service provider sector. */
-    private static String spSector;
-
-    /** The service provider institution. */
-    private static String spInstitution;
-
-    /** The service provider application. */
-    private static String spApplication;
-
-    /** The service provider country. */
-    private static String spCountry;
-    
-    /** The service provider id. */
-    private static String spId;
-
-    /** The quality authentication assurance level. */
-    private static final int QAAL = 3;
-
-    /** The state. */
-    private static String state = "ES";
-    
-    /** The town. */
-    private static String town = "Madrid";
-    
-    /** The municipality code. */
-    private static String municipalityCode = "MA001";
-    
-    /** The postal code. */
-    private static String postalCode = "28038";
-    
-    /** The street name. */
-    private static String streetName = "Marchamalo";
-    
-    /** The street number. */
-    private static String streetNumber = "3";
-    
-    /** The apartament number. */
-    private static String apartamentNumber = "5º E";
-
-    /** The List of Personal Attributes. */
-    private static IPersonalAttributeList pal;    
-    
-    /** The List of Personal Attributes. */
-    private static IPersonalAttributeList pal2;
-
-    /** The assertion consumer URL. */
-    private static String assertConsumerUrl;
-
-    /** The authentication request. */
-    private static byte[] authRequest;
-
-    /** The authentication response. */
-    private static byte[] authResponse;
-
-    /** The authentication request. */
-    private static STORKAuthnRequest authenRequest;
-
-    /** The authentication response. */
-    private static STORKAuthnResponse authnResponse;
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(StorkResponseTest.class.getName());
-
-    /**
-     * Instantiates a new stork response test.
-     */
-    public StorkNewResponseTest() {
-	super();
-    }
-
-    /** The IP address. */
-    private static String ipAddress;
-
-    /** The is hashing. */
-    private final boolean isHashing = Boolean.TRUE;
-
-    /** The is not hashing. */
-    private final boolean isNotHashing = Boolean.FALSE;
-
-    /** The ERROR text. */
-    private static final String ERROR_TXT = "generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!";
-
-
-    /** Parser manager used to parse XML. */
-    private static BasicParserPool parser;
-    
-    /** The attribute query request. */
-    private static STORKAttrQueryRequest attrQueryenRequest;
-
-    /** The attribute query response. */
-    private static STORKAttrQueryResponse attrQeuryenResponse;
-    
-    /** The attribute query request. */
-    private static byte[] attrQueryRequest;
-    
-    /** The attribute query response. */
-    private static byte[] attrQueryResponse;
-    
-    
-
-    static {
-	parser = new BasicParserPool();
-	parser.setNamespaceAware(true);
-
-	pal = new PersonalAttributeList();
-	pal2 = new PersonalAttributeList();
-
-	PersonalAttribute isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(false);
-	ArrayList<String> ages = new ArrayList<String>();
-	ages.add("16");
-	ages.add("18");
-	isAgeOver.setValue(ages);
-	pal.add(isAgeOver);
-
-	PersonalAttribute dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	pal.add(dateOfBirth);
-
-	PersonalAttribute eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-	pal.add(eIDNumber);
-
-	final PersonalAttribute givenName = new PersonalAttribute();
-	givenName.setName("givenName");
-	givenName.setIsRequired(true);
-	pal.add(givenName);
-
-	PersonalAttribute canRessAddress = new PersonalAttribute();
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	pal.add(canRessAddress);
-	
-	PersonalAttribute newAttribute = new PersonalAttribute();
-	newAttribute.setName("newAttribute2");
-	newAttribute.setIsRequired(true);
-	pal.add(newAttribute);
-	
-	PersonalAttribute hasDegree = new PersonalAttribute();
-	hasDegree.setName("hasDegree");
-	List<String> vals = new ArrayList<String>();
-	vals.add("Engineering");
-	vals.add("Computer Science");
-	hasDegree.setValue(vals);
-	pal2.add(hasDegree);
-	
-	PersonalAttribute mandate = new PersonalAttribute();
-	mandate.setName("mandateContent");
-	List<String> manvalues = new ArrayList<String>();
-	manvalues.add("Powers");
-	mandate.setValue(manvalues);
-	pal2.add(mandate);
-
-	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
-	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
-	spName = "University Oxford";
-	
-	spName = "University of Oxford";
-	spSector = "EDU001";
-	spInstitution = "OXF001";
-	spApplication = "APP001";
-	spCountry = "EN";
-	
-	spId = "EDU001-APP001-APP001";
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    authRequest = getEngine().generateSTORKAuthnRequest(request)
-		    .getTokenSaml();
-	    	    
-	    authenRequest = getEngine().validateSTORKAuthnRequest(authRequest);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    fail("Error create STORKAuthnRequest");
-	}
-
-	ipAddress = "111.222.333.444";
-
-	pal = new PersonalAttributeList();
-
-	isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(true);
-	ages = new ArrayList<String>();
-
-	ages.add("16");
-	ages.add("18");
-
-	isAgeOver.setValue(ages);
-	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(isAgeOver);
-
-	dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	final ArrayList<String> date = new ArrayList<String>();
-	date.add("16/12/2008");
-	dateOfBirth.setValue(date);
-	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(dateOfBirth);
-
-	eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-	final ArrayList<String> idNumber = new ArrayList<String>();
-	idNumber.add("123456789PA");
-	eIDNumber.setValue(idNumber);
-	eIDNumber.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(eIDNumber);
-
-	canRessAddress = new PersonalAttribute();
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> address = new HashMap<String, String>();
-
-	address.put("state", state);
-	address.put("municipalityCode", municipalityCode);
-	address.put("town", town);
-	address.put("postalCode", postalCode);
-	address.put("streetName", streetName);
-	address.put("streetNumber", streetNumber);
-	address.put("apartamentNumber", apartamentNumber);
-
-	canRessAddress.setComplexValue(address);
-	pal.add(canRessAddress);
-    
-	newAttribute = new PersonalAttribute();
-	newAttribute.setName("newAttribute2");
-	newAttribute.setIsRequired(true);
-	newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> values = new HashMap<String, String>();
-	
-	values.put("value1", "value1");
-	values.put("value2", "value2");
-	values.put("value3", "value3");
-	values.put("value4", "value4");
-	
-	newAttribute.setComplexValue(values);
-	pal.add(newAttribute);
-	
-	final STORKAttrQueryRequest arequest = new STORKAttrQueryRequest();
-	arequest.setDestination(destination);
-	//request.setProviderName(spName);
-	arequest.setQaa(QAAL);
-	arequest.setPersonalAttributeList(pal2);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	arequest.setSpSector(spSector);
-	arequest.setSpInstitution(spInstitution);
-	arequest.setSpApplication(spApplication);
-	arequest.setSpCountry(spCountry);
-	arequest.setSPID(spId);
-	arequest.setCitizenCountryCode("IS");
-	arequest.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	try {
-	    attrQueryRequest = getEngine().generateSTORKAttrQueryRequest(arequest)
-		    .getTokenSaml();
-	    	    
-	    attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    fail("Error create STORKAuthnRequest");
-	}
-	
-    }
-
-    /**
-     * Test generate authentication request without errors.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAuthnResponseWithSimpleRes() throws STORKSAMLEngineException {
-
-    	//Create the response holding pal
-		final STORKAuthnResponse response = new STORKAuthnResponse();
-		response.setPersonalAttributeList(pal);
-		
-		//List of query responses
-		List<STORKAttrQueryResponse> resList = new ArrayList<STORKAttrQueryResponse>();
-		
-		final STORKAttrQueryResponse aResponse1 = new STORKAttrQueryResponse();
-		aResponse1.setPersonalAttributeList(pal2);
-	
-		final STORKAttrQueryResponse aStorkResponse1 = getEngine2()
-			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse1, ipAddress,
-					destination, isNotHashing);
-	
-		attrQueryResponse = aStorkResponse1.getTokenSaml();
-			
-		resList.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
-		
-		final STORKAttrQueryResponse aResponse2 = new STORKAttrQueryResponse();
-		aResponse2.setPersonalAttributeList(pal2);
-	
-		final STORKAttrQueryResponse aStorkResponse2 = getEngine()
-			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse2, ipAddress,
-					destination, isNotHashing);
-	
-		attrQueryResponse = aStorkResponse2.getTokenSaml();
-			
-		resList.add(getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
-		
-		//Create the final response containing query responses
-		final STORKAuthnResponse storkResponse = getEngine()
-		.generateSTORKAuthnResponseAfterQuery(authenRequest, response, ipAddress,
-			isNotHashing, resList);
-
-		authResponse = storkResponse.getTokenSaml();
-		
-		//Validate, write out and print out the attribute lists a
-		STORKAuthnResponse finalResponse = getEngine().validateSTORKAuthnResponseWithQuery(authResponse, ipAddress);
-		System.out.println("The original pal: " + finalResponse.getPersonalAttributeList().toString());
-		for (int i = 0; i < finalResponse.getPersonalAttributeLists().size(); i++)
-		{
-			System.out.println("Pal "+ Integer.toString(i) + ": " + finalResponse.getPersonalAttributeLists().get(i).toString());
-		}
-		System.out.println("The total pal: " + finalResponse.getTotalPersonalAttributeList().toString());
-		
-		FileOutputStream output = null;
-		
-		try {
-			output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthAttrQResponse.xml"));
-		} catch (FileNotFoundException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		try {
-			output.write(authResponse);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-    }
-    
-    /**
-     * Test generate authentication request without errors.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAuthnResponseWithComplexRes() throws STORKSAMLEngineException {
-    	
-    	//Create the response holding pal
-		final STORKAuthnResponse response = new STORKAuthnResponse();
-		response.setPersonalAttributeList(pal);
-		
-		//Create a list for the attribute query responses we have
-		List<STORKAttrQueryResponse> resList = new ArrayList<STORKAttrQueryResponse>();
-		
-		//Create the first attribute query response
-		final STORKAttrQueryResponse aResponse1 = new STORKAttrQueryResponse();
-		aResponse1.setPersonalAttributeList(pal2);
-	
-		//Generate the first response
-		final STORKAttrQueryResponse aStorkResponse1 = getEngine2()
-			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse1, ipAddress,
-					destination, isNotHashing);
-	
-		attrQueryResponse = aStorkResponse1.getTokenSaml();
-			
-		//Validate it and add to the response list
-		resList.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
-		
-		//Create a second response like the first
-		final STORKAttrQueryResponse aResponse2 = new STORKAttrQueryResponse();
-		aResponse2.setPersonalAttributeList(pal2);
-	
-		final STORKAttrQueryResponse aStorkResponse2 = getEngine()
-			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse2, ipAddress,
-					destination, isNotHashing);
-	
-		attrQueryResponse = aStorkResponse2.getTokenSaml();
-			
-		resList.add(getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
-		
-		//Create a attribute query response which contains multiple assertions from an AP
-		final STORKAttrQueryResponse aResponseMulti = new STORKAttrQueryResponse();
-		aResponseMulti.setPersonalAttributeList(pal2);
-	
-		//Create a list for the responses which the multiple assertion response will hold 
-		List<STORKAttrQueryResponse> multiResponses = new ArrayList();
-			
-		//Create two more simple responses which the multi assertion response will hold
-		final STORKAttrQueryResponse aResponse3 = new STORKAttrQueryResponse();
-		aResponse3.setPersonalAttributeList(pal2);
-	
-		final STORKAttrQueryResponse aStorkResponse3 = getEngine2()
-			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse3, ipAddress,
-					destination, isNotHashing);
-	
-		attrQueryResponse = aStorkResponse3.getTokenSaml();
-		//Validate and add to the multi response 	
-		multiResponses.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
-		
-		final STORKAttrQueryResponse aResponse4 = new STORKAttrQueryResponse();
-		aResponse4.setPersonalAttributeList(pal2);
-	
-		final STORKAttrQueryResponse aStorkResponse4 = getEngine()
-			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse4, ipAddress,
-					destination, isNotHashing);
-	
-		attrQueryResponse = aStorkResponse4.getTokenSaml();
-		
-		multiResponses.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
-		
-		//Generate the multi assertion query response
-		final STORKAttrQueryResponse aStorkResponseMulti = getEngine()
-		.generateSTORKAttrQueryResponseWithAssertions(attrQueryenRequest, aResponseMulti, multiResponses, 
-				ipAddress, destination, isNotHashing);
-	
-		attrQueryResponse = aStorkResponseMulti.getTokenSaml();
-		
-		//Add to the list of query responses
-		resList.add(getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
-		
-		//Generate the stork response with all the query responses
-		final STORKAuthnResponse storkResponse = getEngine()
-		.generateSTORKAuthnResponseAfterQuery(authenRequest, response, ipAddress,
-			isNotHashing, resList);
-
-		authResponse = storkResponse.getTokenSaml();
-		
-		//Validate it, write out and print out the personal attribute lists
-		STORKAuthnResponse finalResponse = getEngine().validateSTORKAuthnResponseWithQuery(authResponse, ipAddress);
-		System.out.println("The original pal: " + finalResponse.getPersonalAttributeList().toString());
-		for (int i = 0; i < finalResponse.getPersonalAttributeLists().size(); i++)
-		{
-			System.out.println("Pal "+ Integer.toString(i) + ": " + finalResponse.getPersonalAttributeLists().get(i).toString());
-		}
-		System.out.println("The total pal: " + finalResponse.getTotalPersonalAttributeList().toString());
-		
-		FileOutputStream output = null;
-		
-		try {
-			output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthAttrQMultiAssertResponse.xml"));
-		} catch (FileNotFoundException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		try {
-			output.write(authResponse);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		assertNotNull(finalResponse);
-    }
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java
deleted file mode 100644
index fe6fcd4f6..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java
+++ /dev/null
@@ -1,935 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.stork.peps.test.simple;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.opensaml.xml.parse.BasicParserPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eu.stork.peps.auth.commons.IPersonalAttributeList;
-import eu.stork.peps.auth.commons.PEPSUtil;
-import eu.stork.peps.auth.commons.PersonalAttribute;
-import eu.stork.peps.auth.commons.PersonalAttributeList;
-import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
-import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
-import eu.stork.peps.auth.commons.STORKAuthnRequest;
-import eu.stork.peps.auth.commons.STORKAuthnResponse;
-import eu.stork.peps.auth.commons.STORKStatusCode;
-import eu.stork.peps.auth.commons.STORKSubStatusCode;
-import eu.stork.peps.auth.engine.STORKSAMLEngine;
-import eu.stork.peps.exceptions.STORKSAMLEngineException;
-
-/**
- * The Class AuthRequestTest.
- */
-public class StorkResponseTest {
-    
-    /** The engine. */
-    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
-
-    /**
-     * Gets the engine.
-     * 
-     * @return the engine
-     */
-    public static STORKSAMLEngine getEngine() {
-        return engine;
-    }
-
-    /**
-     * Sets the engine.
-     * 
-     * @param newEngine the new engine
-     */
-    public static void setEngine(final STORKSAMLEngine newEngine) {
-        StorkResponseTest.engine = newEngine;
-    }
-
-    /** The destination. */
-    private static String destination;
-
-    /** The service provider name. */
-    private static String spName;
-
-    /** The service provider sector. */
-    private static String spSector;
-
-    /** The service provider institution. */
-    private static String spInstitution;
-
-    /** The service provider application. */
-    private static String spApplication;
-
-    /** The service provider country. */
-    private static String spCountry;
-    
-    /** The service provider id. */
-    private static String spId;
-
-    /** The quality authentication assurance level. */
-    private static final int QAAL = 3;
-
-    /** The state. */
-    private static String state = "ES";
-    
-    /** The town. */
-    private static String town = "Madrid";
-    
-    /** The municipality code. */
-    private static String municipalityCode = "MA001";
-    
-    /** The postal code. */
-    private static String postalCode = "28038";
-    
-    /** The street name. */
-    private static String streetName = "Marchamalo";
-    
-    /** The street number. */
-    private static String streetNumber = "3";
-    
-    /** The apartament number. */
-    private static String apartamentNumber = "5º E";
-
-    /** The List of Personal Attributes. */
-    private static IPersonalAttributeList pal;
-
-    /** The assertion consumer URL. */
-    private static String assertConsumerUrl;
-
-    /** The authentication request. */
-    private static byte[] authRequest;
-
-    /** The authentication response. */
-    private static byte[] authResponse;
-
-    /** The authentication request. */
-    private static STORKAuthnRequest authenRequest;
-
-    /** The authentication response. */
-    private static STORKAuthnResponse authnResponse;
-
-    /** The Constant LOG. */
-    private static final Logger LOG = LoggerFactory
-	    .getLogger(StorkResponseTest.class.getName());
-
-    /**
-     * Instantiates a new stork response test.
-     */
-    public StorkResponseTest() {
-	super();
-    }
-
-    /** The IP address. */
-    private static String ipAddress;
-
-    /** The is hashing. */
-    private final boolean isHashing = Boolean.TRUE;
-
-    /** The is not hashing. */
-    private final boolean isNotHashing = Boolean.FALSE;
-
-    /** The ERROR text. */
-    private static final String ERROR_TXT = "generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!";
-
-
-    /** Parser manager used to parse XML. */
-    private static BasicParserPool parser;
-
-    static {
-	parser = new BasicParserPool();
-	parser.setNamespaceAware(true);
-
-	pal = new PersonalAttributeList();
-
-	PersonalAttribute isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(false);
-	ArrayList<String> ages = new ArrayList<String>();
-	ages.add("16");
-	ages.add("18");
-	isAgeOver.setValue(ages);
-	pal.add(isAgeOver);
-
-	PersonalAttribute dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	pal.add(dateOfBirth);
-
-	PersonalAttribute eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-	pal.add(eIDNumber);
-
-	final PersonalAttribute givenName = new PersonalAttribute();
-	givenName.setName("givenName");
-	givenName.setIsRequired(true);
-	pal.add(givenName);
-
-	PersonalAttribute canRessAddress = new PersonalAttribute();
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	pal.add(canRessAddress);
-	
-	PersonalAttribute newAttribute = new PersonalAttribute();
-	newAttribute.setName("newAttribute2");
-	newAttribute.setIsRequired(true);
-	pal.add(newAttribute);
-
-	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
-	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
-	spName = "University Oxford";
-	
-	spName = "University of Oxford";
-	spSector = "EDU001";
-	spInstitution = "OXF001";
-	spApplication = "APP001";
-	spCountry = "EN";
-	
-	spId = "EDU001-APP001-APP001";	
-
-	final STORKAuthnRequest request = new STORKAuthnRequest();
-	request.setDestination(destination);
-	request.setProviderName(spName);
-	request.setQaa(QAAL);
-	request.setPersonalAttributeList(pal);
-	request.setAssertionConsumerServiceURL(assertConsumerUrl);
-
-	// news parameters
-	request.setSpSector(spSector);
-	request.setSpInstitution(spInstitution);
-	request.setSpApplication(spApplication);
-	request.setSpCountry(spCountry);
-	request.setSPID(spId);
-	request.setCitizenCountryCode("ES");
-
-	try {
-	    authRequest = getEngine().generateSTORKAuthnRequest(request)
-		    .getTokenSaml();
-	    	    
-	    authenRequest = getEngine().validateSTORKAuthnRequest(authRequest);
-	    
-	} catch (STORKSAMLEngineException e) {
-	    fail("Error create STORKAuthnRequest");
-	}
-
-	ipAddress = "111.222.333.444";
-
-	pal = new PersonalAttributeList();
-
-	isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(true);
-	ages = new ArrayList<String>();
-
-	ages.add("16");
-	ages.add("18");
-
-	isAgeOver.setValue(ages);
-	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(isAgeOver);
-
-	dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	final ArrayList<String> date = new ArrayList<String>();
-	date.add("16/12/2008");
-	dateOfBirth.setValue(date);
-	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(dateOfBirth);
-
-	eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-	final ArrayList<String> idNumber = new ArrayList<String>();
-	idNumber.add("123456789PÑ");
-	eIDNumber.setValue(idNumber);
-	eIDNumber.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	pal.add(eIDNumber);
-
-	canRessAddress = new PersonalAttribute();
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> address = new HashMap<String, String>();
-
-	address.put("state", state);
-	address.put("municipalityCode", municipalityCode);
-	address.put("town", town);
-	address.put("postalCode", postalCode);
-	address.put("streetName", streetName);
-	address.put("streetNumber", streetNumber);
-	address.put("apartamentNumber", apartamentNumber);
-
-	canRessAddress.setComplexValue(address);
-	pal.add(canRessAddress);
-    
-	newAttribute = new PersonalAttribute();
-	newAttribute.setName("newAttribute2");
-	newAttribute.setIsRequired(true);
-	newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> values = new HashMap<String, String>();
-	
-	values.put("value1", "value1");
-	values.put("value2", "value2");
-	values.put("value3", "value3");
-	values.put("value4", "value4");
-	
-	newAttribute.setComplexValue(values);
-	pal.add(newAttribute);
-	
-    }
-
-    /**
-     * Test generate authentication request without errors.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAuthnResponse() throws STORKSAMLEngineException {
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(pal);
-
-	final STORKAuthnResponse storkResponse = getEngine()
-		.generateSTORKAuthnResponse(authenRequest, response, ipAddress,
-			isNotHashing);
-
-	authResponse = storkResponse.getTokenSaml();
-	
-	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(authResponse));
-	
-	
-    }
-
-    /**
-     * Test validation id parameter mandatory.
-     */
-    @Test
-    public final void testResponseMandatoryId() {
-	final String identifier = authenRequest.getSamlId();
-	authenRequest.setSamlId(null);
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(pal);
-
-	try {
-	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
-		    ipAddress, isHashing);
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    authenRequest.setSamlId(identifier);
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication response in response to err1.
-     */
-    @Test
-    public final void testResponseMandatoryIssuer() {
-
-	final String issuer = authenRequest.getIssuer();
-	authenRequest.setIssuer(null);
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(pal);
-
-	try {
-	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
-		    ipAddress, isHashing);
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    authenRequest.setIssuer(issuer);
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication response assertion consumer null.
-     */
-    @Test
-    public final void testResponseMandatoryAssertionConsumerServiceURL() {
-	final String asserConsumerUrl = authenRequest
-		.getAssertionConsumerServiceURL();
-	authenRequest.setAssertionConsumerServiceURL(null);
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(pal);
-	try {
-	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
-		    ipAddress, isHashing);
-	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    authenRequest.setAssertionConsumerServiceURL(asserConsumerUrl);
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication response IP address null.
-     */
-    @Test
-    public final void testResponseValidationIP() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(pal);
-
-	try {
-	    getEngine().generateSTORKAuthnResponse(authenRequest, response, null,
-		    isHashing);
-	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication response with personal attribute list null.
-     */
-    @Test
-    public final void testResponseMandatoryPersonalAttributeList() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(null);
-	
-	
-	try {
-	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
-		    ipAddress, isHashing);
-	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    /**
-     * Test validate authentication response token null.
-     */
-    @Test
-    public final void testResponseInvalidParametersToken() {
-	try {
-	    getEngine().validateSTORKAuthnResponse(null, ipAddress);
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate authentication response IP null.
-     */
-    @Test
-    public final void testResponseInvalidParametersIP() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setPersonalAttributeList(pal);
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAuthnResponse(authResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate authentication response parameter name wrong.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttr() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("AttrWrong");
-	wrongList.add(worngAttr);
-	
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAuthnResponse(authResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate authentication response set null value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrSimpleValue() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("isAgeOver");
-	worngAttr.setValue(null);
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAuthnResponse(authResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate authentication response set null value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrNoValue() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("isAgeOver");
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAuthnResponse(authResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate authentication response set null value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrNoName() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();	
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAuthnResponse(authResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    /**
-     * Test validate authentication response set null complex value into attribute.
-     */
-    @Test
-    public final void testResponseInvalidParametersAttrComplexValue() {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	final IPersonalAttributeList wrongList = new PersonalAttributeList();
-
-	final PersonalAttribute worngAttr = new PersonalAttribute();
-	worngAttr.setName("isAgeOver");
-	worngAttr.setComplexValue(null);
-	wrongList.add(worngAttr);
-	
-	response.setPersonalAttributeList(wrongList);
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    // In Conf1 ipValidate is false
-	    getEngine().validateSTORKAuthnResponse(authResponse, null);
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-	
-    
-    
-
-    /**
-     * Test validate authentication response IP distinct and disabled validation
-     * IP.
-     */
-    @Test
-    public final void testResponseInvalidParametersIPDistinct() {
-	try {
-	    // ipAddress origin "111.222.333.444"
-	    // ipAddrValidation = false
-	    // Subject Confirmation Bearer.
-
-	    getEngine().validateSTORKAuthnResponse(authResponse, "127.0.0.1");
-	    fail("validateAuthenticationResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");	    
-	}
-    }
-
-    /**
-     * Test response invalid parameters invalid token.
-     */
-    @Test
-    public final void testResponseInvalidParametersTokenMsg() {
-	try {
-	    // ipAddress origin "111.222.333.444"
-	    // Subject Confirmation Bearer.
-	    getEngine().validateSTORKAuthnResponse("errorMessage".getBytes(),
-		    ipAddress);
-	    fail("validateAuthenticationResponse(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test validate authentication response is fail.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthenticationResponseIsFail()
-	    throws STORKSAMLEngineException {
-    	if (authResponse == null)
-    		testGenerateAuthnResponse();
-    	
-	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
-		ipAddress);
-
-	assertFalse("Generate incorrect response: ", authnResponse.isFail());
-    }
-
-    /**
-     * Test validate authentication response destination.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthenticationResponseDestination()
-	    throws STORKSAMLEngineException {
-	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
-		ipAddress);
-
-	assertEquals("Destination incorrect: ",
-		authnResponse.getInResponseTo(), authenRequest.getSamlId());
-    }
-
-    /**
-     * Test validate authentication response values.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    public final void testValidateAuthenticationResponseValuesComplex()
-	    throws STORKSAMLEngineException {
-	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
-		ipAddress);
-	
-	assertEquals("Country incorrect:", authnResponse.getCountry(), "EN");
-	
-	final Iterator<PersonalAttribute> iterator = authnResponse
-		.getPersonalAttributeList().iterator();
-
-	while (iterator.hasNext()) {
-	    final PersonalAttribute attribute = iterator.next();
-	    if (attribute.getName().equalsIgnoreCase(
-		    "canonicalResidenceAddress")) {
-		assertEquals("State incorrect: ", state, attribute
-			.getComplexValue().get("state"));
-		assertEquals("Municipality Code incorrect: ", municipalityCode,
-			attribute.getComplexValue().get("municipalityCode"));
-		assertEquals("Town incorrect: ", town, attribute
-			.getComplexValue().get("town"));
-		assertEquals("Postal code incorrect: ", postalCode, attribute
-			.getComplexValue().get("postalCode"));
-		assertEquals("Street name incorrect: ", streetName, attribute
-			.getComplexValue().get("streetName"));
-		assertEquals("Street number incorrect: ", streetNumber,
-			attribute.getComplexValue().get("streetNumber"));
-		assertEquals("Apartament number incorrect: ", apartamentNumber,
-			attribute.getComplexValue().get("apartamentNumber"));
-	    }
-	}
-    }
-
-    /**
-     * Test generate authenticate response fail in response to it's null.
-     * @throws STORKSAMLEngineException 
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test //( expected=STORKSAMLEngineException.class)
-    public final void testGenerateAuthnResponseFailInResponseToNull() throws STORKSAMLEngineException {
-	final String identifier = authenRequest.getSamlId();
-	authenRequest.setSamlId(null);
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("");
-
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    fail(ERROR_TXT);
-	} catch (STORKSAMLEngineException e) {
-	    authenRequest.setSamlId(identifier);
-	    LOG.error("Error");
-	    //throw new STORKSAMLEngineException(e);
-	}
-    }
-
-    /**
-     * Test generate authenticate response fail assertion consumer URL err1.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAuthnResponseFailAssertionConsumerUrlNull()
-	    throws STORKSAMLEngineException {
-
-	final String assertConsumerUrl = authenRequest
-		.getAssertionConsumerServiceURL();
-	authenRequest.setAssertionConsumerServiceURL(null);
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("");
-
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    fail("generateAuthnResponseFail(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    authenRequest.setAssertionConsumerServiceURL(assertConsumerUrl);
-	    LOG.error("Error");
-	}
-    }
-
-    /**
-     * Test generate authentication response fail code error err1.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testGenerateAuthnResponseFailCodeErrorNull()
-	    throws STORKSAMLEngineException {
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setStatusCode(null);
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("");
-
-	try {
-	    authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
-		    response, ipAddress, isNotHashing).getTokenSaml();
-	    fail("generateAuthnResponseFail(...) should've thrown an STORKSAMLEngineException!");
-	} catch (STORKSAMLEngineException e) {
-	    LOG.error("Error");
-	}
-    }
-    
-    
-    
-    
-    /**
-     * Test generate authentication request without errors.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthnResponse() throws STORKSAMLEngineException {
-	
-	IPersonalAttributeList palist = new PersonalAttributeList();
-
-	PersonalAttribute isAgeOver = new PersonalAttribute();
-	isAgeOver.setName("isAgeOver");
-	isAgeOver.setIsRequired(true);
-	ArrayList<String> ages = new ArrayList<String>();
-	ages.add("16");
-	ages.add("18");
-	isAgeOver.setValue(ages);
-	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	palist.add(isAgeOver);
-
-	PersonalAttribute dateOfBirth = new PersonalAttribute();
-	dateOfBirth.setName("dateOfBirth");
-	dateOfBirth.setIsRequired(false);
-	final ArrayList<String> date = new ArrayList<String>();
-	date.add("16/12/2008");
-	dateOfBirth.setValue(date);
-	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	palist.add(dateOfBirth);
-
-	
-	PersonalAttribute eIDNumber = new PersonalAttribute();
-	eIDNumber.setName("eIdentifier");
-	eIDNumber.setIsRequired(true);
-
-	final ArrayList<String> idNumber = new ArrayList<String>();
-	idNumber.add("123456789PÑ");
-	
-	final HashMap<String, String> complex = new HashMap<String, String>();
-	complex.put("one", "two");
-
-	//eIDNumber.setValue(null);
-	//eIDNumber.setValue(idNumber);
-	//eIDNumber.setComplexValue(complex);
-	
-	eIDNumber.setStatus(STORKStatusCode.STATUS_NOT_AVAILABLE.toString());
-	palist.add(eIDNumber);
-
-	PersonalAttribute canRessAddress = new PersonalAttribute();	
-	canRessAddress.setName("canonicalResidenceAddress");
-	canRessAddress.setIsRequired(true);
-	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
-	final HashMap<String, String> address = new HashMap<String, String>();
-
-	address.put("state", state);
-	address.put("municipalityCode", municipalityCode);
-	address.put("town", town);
-	address.put("postalCode", postalCode);
-	address.put("streetName", streetName);
-	address.put("streetNumber", streetNumber);
-	address.put("apartamentNumber", apartamentNumber);
-
-	canRessAddress.setComplexValue(address);
-	palist.add(canRessAddress);
-
-	
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-
-	response.setPersonalAttributeList(palist);
-
-	final STORKAuthnResponse storkResponse = getEngine()
-		.generateSTORKAuthnResponse(authenRequest, response, ipAddress,
-			isNotHashing);
-
-	authResponse = storkResponse.getTokenSaml();
-	LOG.info("Request id: " + authenRequest.getSamlId());
-	
-	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(authResponse));
-	
-	
-	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
-		ipAddress);
-	
-	LOG.info("RESPONSE ID: " + authnResponse.getSamlId());
-	LOG.info("RESPONSE IN_RESPONSE_TO: " + authnResponse.getInResponseTo());
-	LOG.info("RESPONSE COUNTRY: " + authnResponse.getCountry());
-	
-    }
-    
-    
-   
-
-	
-    /**
-     * Test validate authentication response fail is fail.
-     * 
-     * @throws STORKSAMLEngineException the STORKSAML engine exception
-     */
-    @Test
-    public final void testValidateAuthenticationResponseFailIsFail()
-	    throws STORKSAMLEngineException {
-
-	final STORKAuthnResponse response = new STORKAuthnResponse();
-	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
-	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
-	response.setMessage("message");
-
-	authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
-		response, ipAddress, isNotHashing).getTokenSaml();
-	
-	LOG.error("ERROR_FAIL: " + PEPSUtil.encodeSAMLToken(authResponse));
-
-	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
-		ipAddress);
-
-	LOG.info("COUNTRY: " + authnResponse.getCountry());
-	assertTrue("Generate incorrect response: ", authnResponse.isFail());
-    }  
-    
-	/**
-	 * Test generate/validate response with signedDoc
-	 * 
-	 * @throws STORKSAMLEngineException
-	 *             the STORKSAML engine exception
-	 */
-	@Test
-	public final void testGenerateAuthenResponseWithSignedDoc()
-			throws STORKSAMLEngineException {
-
-		String signedDocResponse = "<dss:SignResponse xmlns:dss=\"urn:oasis:names:tc:dss:1.0:core:schema\" RequestID=\"123456\"> <dss:Result> <dss:ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</dss:ResultMajor> </dss:Result> <dss:SignatureObject> <dss:Base64Signature Type=\"urn:ietf:rfc:3275\">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExIi8+PGRzOlJlZmVyZW5jZSBJZD0iUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyIgVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI09iamVjdCIgVVJJPSIjT2JqZWN0LTk4NzMzY2RlLThiY2MtNDhhMC05Yjc3LTBlOTk5N2JkZDA1OCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNiYXNlNjQiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPkNrMVZxTmQ0NVFJdnEzQVpkOFhZUUx2RWh0QT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVHlwZT0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMyNTaWduZWRQcm9wZXJ0aWVzIiBVUkk9IiNTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5BNVk5MW40cXBMZ3l0VFc3ZnhqWENVZVJ2NTQ9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI1NpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItS2V5SW5mbyI+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPlZQWDRuS0Z5UzZyRitGNmNSUjBQck5aZHc2Zz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9IlNpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItU2lnbmF0dXJlVmFsdWUiPkxiS04vL0M3WGt5eFR0WVRpQ1VScjhuWnp4QW1zdGNNZDBDZ0VBQ3JLMWR5Z1JIcUdjSzR4dHMrV0NVOFB5RXFXclJJVFl6SXV3LzcNClY0Wno5VFQ2MHA0S1RNZXd1UUw2NHNrRVN4MllnMkVkaWtTTyt0S3hXa2hyYVVzbVZiR2JQbW1jbUR2OTd0SER3ODg3NDdlRnE1RjUNCnYrYVZTeUF6MDNpVUttdVNlSDg9PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1LZXlJbmZvIj48ZHM6S2V5VmFsdWU+PGRzOlJTQUtleVZhbHVlPjxkczpNb2R1bHVzPnd1Y21qOXRJV3J2d2JTVFVEZndLbCtKdERNTUVSMGNMZDZEa0JTcjc5MHQrckdOakVTcVlqUndFSWVCbktvUUhQeDVIb1JlRjg4L3QNCnFZOStDaEVYcExITHM5cDVhWDdTREp1YnBRTWZwMXRERlgzNHl3Z3hTUXZjZWVKUVdCWGppZXVJbWZDMjFzNGJPY2dKYlYxaGJpZ1MNCnpPS1RRS3IxVHpkR1IrdVJ5MDA9PC9kczpNb2R1bHVzPjxkczpFeHBvbmVudD5BUUFCPC9kczpFeHBvbmVudD48L2RzOlJTQUtleVZhbHVlPjwvZHM6S2V5VmFsdWU+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJSW1UQ0NCNEdnQXdJQkFnSURBWFVVTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUlCT3pFTE1Ba0dBMVVFQmhNQ1JWTXhPekE1QmdOVg0KQkFvVE1rRm5aVzVqYVdFZ1EyRjBZV3hoYm1FZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUNoT1NVWWdVUzB3T0RBeE1UYzJMVWtwTVRRdw0KTWdZRFZRUUhFeXRRWVhOellYUm5aU0JrWlNCc1lTQkRiMjVqWlhCamFXOGdNVEVnTURnd01EZ2dRbUZ5WTJWc2IyNWhNUzR3TEFZRA0KVlFRTEV5VlRaWEoyWldseklGQjFZbXhwWTNNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVWRFZpMHlNVFV3TXdZRFZRUUxFeXhXWldkbA0KZFNCb2RIUndjem92TDNkM2R5NWpZWFJqWlhKMExtNWxkQzkyWlhKRFNVTXRNaUFvWXlrd016RTFNRE1HQTFVRUN4TXNSVzUwYVhSaA0KZENCd2RXSnNhV05oSUdSbElHTmxjblJwWm1sallXTnBieUJrWlNCamFYVjBZV1JoYm5NeEd6QVpCZ05WQkFNVEVsQlNSVkJTVDBSVg0KUTBOSlR5QkpSRU5oZERBZUZ3MHhNREF5TVRFeE9ESXlNRFJhRncweE5EQXlNVEF4T0RJeU1EUmFNSUd3TVFzd0NRWURWUVFHRXdKRg0KVXpFMU1ETUdBMVVFQ3hNc1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5U1VSRFlYUWdLR01wTURNeA0KRmpBVUJnTlZCQVFURFVKRlVreEJUa2RCSUZOUFZFOHhGekFWQmdOVkJDb1REazFCVWtsQklFVk9SMUpCUTBsQk1SSXdFQVlEVlFRRg0KRXdreE1EQXdNRGswTkZNeEpUQWpCZ05WQkFNVEhFMUJVa2xCSUVWT1IxSkJRMGxCSUVKRlVreEJUa2RCSUZOUFZFOHdnWjh3RFFZSg0KS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTG5Kby9iU0ZxNzhHMGsxQTM4Q3BmaWJRekRCRWRIQzNlZzVBVXErL2RMZnF4ag0KWXhFcW1JMGNCQ0hnWnlxRUJ6OGVSNkVYaGZQUDdhbVBmZ29SRjZTeHk3UGFlV2wrMGd5Ym02VURINmRiUXhWOStNc0lNVWtMM0huaQ0KVUZnVjQ0bnJpSm53dHRiT0d6bklDVzFkWVc0b0VzemlrMENxOVU4M1JrZnJrY3ROQWdNQkFBR2pnZ1N3TUlJRXJEQU1CZ05WSFJNQg0KQWY4RUFqQUFNQTRHQTFVZER3RUIvd1FFQXdJRm9EQ0J6QVlEVlIwUkJJSEVNSUhCZ1E5aWMyOTBiMEJuYldGcGJDNWpiMjJrZ1lVdw0KZ1lJeEN6QUpCZ05WQkFZVEFrVlRNU3N3S1FZRFZRUUtGQ0pCWjhPb2JtTnBZU0JEWVhSaGJHRnVZU0JrWlNCRFpYSjBhV1pwWTJGag0KYWNPek1RNHdEQVlEVlFRTEV3VkpSRU5CVkRFUE1BMEdBMVVFQlJNR01ERTNOVEUwTVNVd0l3WURWUVFERXh4TlFWSkpRU0JGVGtkUw0KUVVOSlFTQkNSVkpNUVU1SFFTQlRUMVJQb0JBR0Npc0dBUVFCOVhnQkFRR2dBZ3dBb0JRR0RsWUVBQUVEQmdFRUFmVjRBUUVDb0FJTQ0KQURBZkJnTlZIUklFR0RBV2dSUmxZMTlwWkdOaGRFQmpZWFJqWlhKMExtNWxkREFkQmdOVkhRNEVGZ1FVQUZYanVOc2tCMk1seXZVQg0KaDdwOFRKMHVKMHd3Z2dGSUJnTlZIU01FZ2dFL01JSUJPNEFVUkt2Y2tVaE4xNGg0Q24vZ2RPRG42NzIzS1Z5aGdnRVBwSUlCQ3pDQw0KQVFjeEN6QUpCZ05WQkFZVEFrVlRNVHN3T1FZRFZRUUtFekpCWjJWdVkybGhJRU5oZEdGc1lXNWhJR1JsSUVObGNuUnBabWxqWVdOcA0KYnlBb1RrbEdJRkV0TURnd01URTNOaTFKS1RFb01DWUdBMVVFQ3hNZlUyVnlkbVZwY3lCUWRXSnNhV056SUdSbElFTmxjblJwWm1sag0KWVdOcGJ6RThNRG9HQTFVRUN4TXpWbVZuWlhVZ2FIUjBjSE02THk5M2QzY3VZMkYwWTJWeWRDNXVaWFF2ZG1WeWNISmxjSEp2WkhWag0KWTJsdklDaGpLVEF6TVRVd013WURWUVFMRXl4S1pYSmhjbkYxYVdFZ1JXNTBhWFJoZEhNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVOaA0KZEdGc1lXNWxjekVjTUJvR0ExVUVBeE1UVUZKRlVGSlBSRlZEUTBsUElFVkRMVUZEUTRJUWR3S1R0TTFFRVU5RkVQWFVZSGdnaERBZA0KQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdRd0VRWUpZSVpJQVliNFFnRUJCQVFEQWdXZ01EUUdDQ3NHQVFVRg0KQndFQkJDZ3dKakFrQmdnckJnRUZCUWN3QVlZWWFIUjBjSE02THk5dlkzTndMbU5oZEdObGNuUXVibVYwTUJnR0NDc0dBUVVGQndFRA0KQkF3d0NqQUlCZ1lFQUk1R0FRRXdnWVlHQTFVZEh3Ui9NSDB3UEtBNm9EaUdObWgwZEhBNkx5OWxjSE5qWkM1allYUmpaWEowTG01bA0KZEM5amNtd3ZjSEpsY0hKdlpIVmpZMmx2WDJWakxXbGtZMkYwTG1OeWJEQTlvRHVnT1lZM2FIUjBjRG92TDJWd2MyTmtNaTVqWVhSag0KWlhKMExtNWxkQzlqY213dmNISmxjSEp2WkhWalkybHZYMlZqTFdsa1kyRjBMbU55YkRDQjlnWURWUjBnQklIdU1JSHJNSUhvQmd3cg0KQmdFRUFmVjRBUU1CVmdFd2dkY3dMQVlJS3dZQkJRVUhBZ0VXSUdoMGRIQnpPaTh2ZDNkM0xtTmhkR05sY25RdWJtVjBMM1psY2tsRQ0KUTJGME1JR21CZ2dyQmdFRkJRY0NBakNCbVJxQmxrRnhkV1Z6ZENEdnY3MXpJSFZ1SUdObGNuUnBabWxqWVhRZ2NHVnljMjl1WVd3Zw0KU1VSRFFWUXNJSEpsWTI5dVpXZDFkQ0JrSjJsa1pXNTBhV1pwWTJGajc3KzlMQ0J6YVdkdVlYUjFjbUVnYVNCNGFXWnlZWFFnWkdVZw0KWTJ4aGMzTmxJRElnYVc1a2FYWnBaSFZoYkM0Z1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5UkVOaA0KZERBdEJnTlZIUWtFSmpBa01CQUdDQ3NHQVFVRkJ3a0VNUVFUQWtWVE1CQUdDQ3NHQVFVRkJ3a0ZNUVFUQWtWVE1BMEdDU3FHU0liMw0KRFFFQkJRVUFBNElCQVFDcTc3ODBSR1FNTEIxZ2tkTk1mTFhuZ3FNb1JIR0taYnZ6a3JxSUFtVDhXQWQxRThyQXBoUjkveExKVXRwNQ0KbGJnMmZScjVibDJqOE9WREJLMlltRzQxaDhBRG40U1RJL0FwZU5JTlNmalpzNk5Sc25XekZ5ZlhYbVBDSFlGQi9YV3p5aW1DRXhndg0KdnR1SCszUUF3Y3dobjUwUExFdWh3NUM1dmxYN0x5NUs2ckxMTUZOVVVNYldWeTFoWmVsSy9DQlRjQWpJTzM4TlkrdllSQU1LU2Y0TQ0KL2daUXo0cUJlRlZKYTUyUjdOY0FxQ2ZyZkxmYVhwYkRTZzk4eG9CZU5zMmluR3p4OFVTZ0VyTFpqS0pzZG4vS2pURDlnUy9zVGRRNg0KUTdpZHFsZDJMRlZsTzIvYjk0Wk5aQmNTLzc4RU9EWGdkV2ZreVBDN1J3OHJlOW5JMy9qVDwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjxkczpPYmplY3QgRW5jb2Rpbmc9ImJhc2U2NCIgSWQ9Ik9iamVjdC05ODczM2NkZS04YmNjLTQ4YTAtOWI3Ny0wZTk5OTdiZGQwNTgiIE1pbWVUeXBlPSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iPlNHVnNiRzhnVjI5eWJHUT08L2RzOk9iamVjdD48ZHM6T2JqZWN0Pjx4YWRlczpRdWFsaWZ5aW5nUHJvcGVydGllcyB4bWxuczp4YWRlcz0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMy92MS4zLjIjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1RdWFsaWZ5aW5nUHJvcGVydGllcyIgVGFyZ2V0PSIjU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjx4YWRlczpTaWduZWRQcm9wZXJ0aWVzIElkPSJTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjx4YWRlczpTaWduZWRTaWduYXR1cmVQcm9wZXJ0aWVzPjx4YWRlczpTaWduaW5nVGltZT4yMDExLTAzLTIxVDExOjQ0OjQyKzAxOjAwPC94YWRlczpTaWduaW5nVGltZT48eGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjx4YWRlczpDZXJ0Pjx4YWRlczpDZXJ0RGlnZXN0PjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT4zbTZ3OTlUb3lTZDlKcEJsMWdCazhEei9iYlU9PC9kczpEaWdlc3RWYWx1ZT48L3hhZGVzOkNlcnREaWdlc3Q+PHhhZGVzOklzc3VlclNlcmlhbD48ZHM6WDUwOUlzc3Vlck5hbWU+Q049UFJFUFJPRFVDQ0lPIElEQ2F0LCBPVT1FbnRpdGF0IHB1YmxpY2EgZGUgY2VydGlmaWNhY2lvIGRlIGNpdXRhZGFucywgT1U9VmVnZXUgaHR0cHM6Ly93d3cuY2F0Y2VydC5uZXQvdmVyQ0lDLTIgKGMpMDMsIE9VPVNlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8gRUNWLTIsIEw9UGFzc2F0Z2UgZGUgbGEgQ29uY2VwY2lvIDExIDA4MDA4IEJhcmNlbG9uYSwgTz1BZ2VuY2lhIENhdGFsYW5hIGRlIENlcnRpZmljYWNpbyAoTklGIFEtMDgwMTE3Ni1JKSwgQz1FUzwvZHM6WDUwOUlzc3Vlck5hbWU+PGRzOlg1MDlTZXJpYWxOdW1iZXI+OTU1MDg8L2RzOlg1MDlTZXJpYWxOdW1iZXI+PC94YWRlczpJc3N1ZXJTZXJpYWw+PC94YWRlczpDZXJ0PjwveGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjwveGFkZXM6U2lnbmVkU2lnbmF0dXJlUHJvcGVydGllcz48eGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PHhhZGVzOkRhdGFPYmplY3RGb3JtYXQgT2JqZWN0UmVmZXJlbmNlPSIjUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyI+PHhhZGVzOk1pbWVUeXBlPmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTwveGFkZXM6TWltZVR5cGU+PHhhZGVzOkVuY29kaW5nPmJhc2U2NDwveGFkZXM6RW5jb2Rpbmc+PC94YWRlczpEYXRhT2JqZWN0Rm9ybWF0PjwveGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PC94YWRlczpTaWduZWRQcm9wZXJ0aWVzPjwveGFkZXM6UXVhbGlmeWluZ1Byb3BlcnRpZXM+PC9kczpPYmplY3Q+PC9kczpTaWduYXR1cmU+</dss:Base64Signature> </dss:SignatureObject> </dss:SignResponse>";
-
-		IPersonalAttributeList palist = new PersonalAttributeList();
-
-		PersonalAttribute signedDoc = new PersonalAttribute();
-		signedDoc.setName("signedDoc");
-		signedDoc.setIsRequired(false);
-		ArrayList<String> signed = new ArrayList<String>();
-		signed.add(signedDocResponse);
-		signedDoc.setValue(signed);
-		palist.add(signedDoc);
-
-		PersonalAttribute isAgeOver = new PersonalAttribute();
-		isAgeOver.setName("isAgeOver");
-		isAgeOver.setIsRequired(false);
-		ArrayList<String> ages = new ArrayList<String>();
-		ages.add("16");
-		ages.add("18");
-		isAgeOver.setValue(ages);
-		palist.add(isAgeOver);
-
-		authenRequest.setPersonalAttributeList(palist);
-
-		final STORKAuthnResponse response = new STORKAuthnResponse();
-
-		response.setPersonalAttributeList(palist);
-
-		final STORKAuthnResponse storkResponse = getEngine()
-				.generateSTORKAuthnResponse(authenRequest, response, ipAddress,
-						isNotHashing);
-
-		authResponse = storkResponse.getTokenSaml();
-		authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
-				ipAddress);
-
-		assertTrue("SignedDoc response should be the same: ", authnResponse
-				.getPersonalAttributeList().get("signedDoc").getValue().get(0)
-				.equals(signedDocResponse));
-
-	}	
-}
diff --git a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/package-info.java b/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/package-info.java
deleted file mode 100644
index 1c34e2ad5..000000000
--- a/id/server/SamlEngine-VIDP/src/test/java/eu/stork/peps/test/simple/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/* 
- * Licensed under the EUPL, Version 1.1 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 at:
- * 
- * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
- * 
- * 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.
- */
-
-/**
- * Provides the classes necessary to create a SAML message.
- * @since 1.0
- */
-package eu.stork.peps.test.simple;
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/SamlEngine.xml b/id/server/SamlEngine-VIDP/src/test/resources/SamlEngine.xml
deleted file mode 100644
index 171e05f12..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/SamlEngine.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<instances>
-
-	<!-- Configuration name -->
-	<instance name="CONF0">
-		<!-- Configurations parameters StorkSamlEngine -->
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf0.xml" />
-		</configuration>
-
-		<!-- Settings module signature -->
-		<configuration name="SignatureConf">
-			<!-- Specific signature module -->
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<!-- Settings specific module -->
-			<parameter name="fileConfiguration" value="SignModule_Conf0.xml" />
-		</configuration>
-	</instance>
-
-	<!-- ******************** CONF1 ******************** -->
-	<!-- Configuration name -->
-	<instance name="CONF1">
-		<!-- Configurations parameters StorkSamlEngine -->
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf1.xml" />
-		</configuration>
-
-		<!-- Settings module signature -->
-		<configuration name="SignatureConf">
-			<!-- Specific signature module -->
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<!-- Settings specific module -->
-			<parameter name="fileConfiguration" value="SignModule_Conf1.xml" />
-		</configuration>
-	</instance>
-
-	<!-- ******************** CONF2 ******************** -->
-
-	<instance name="CONF2">
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf2.xml" />
-		</configuration>
-
-		<configuration name="SignatureConf">
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<parameter name="fileConfiguration" value="SignModule_Conf2.xml" />
-		</configuration>
-	</instance>
-
-	<!-- ******************** CONF3 ******************** -->
-
-	<instance name="CONF3">
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf3.xml" />
-		</configuration>
-
-		<configuration name="SignatureConf">
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<parameter name="fileConfiguration" value="SignModule_Conf3.xml" />
-		</configuration>
-	</instance>
-
-</instances>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf0.xml b/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf0.xml
deleted file mode 100644
index a9f2038b8..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf0.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<!-- properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry0.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=saml-demo-cert,OU=STORK2,O=Advania,L=Reykjavik,ST=Reykjavik,C=IS</entry>
-	<entry key="serialNumber">524D4C6C</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties-->
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\storkDemoKeysTest.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf1.xml b/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf1.xml
deleted file mode 100644
index e556a7331..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf1.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\storkDemoKeysTest.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf2.xml b/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf2.xml
deleted file mode 100644
index 3da1e33df..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry2.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf3.xml b/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf3.xml
deleted file mode 100644
index 4c14a1711..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_Conf3.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry3.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_P11.xml b/id/server/SamlEngine-VIDP/src/test/resources/SignModule_P11.xml
deleted file mode 100644
index c683d97c3..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/SignModule_P11.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>HWModule sign with interface PKCS11.</comment>
-	<entry key="configurationFile">p11Config.cfg</entry>
-	<entry key="keyPassword">*******</entry>
-	<entry key="issuer">CN=XXXXXXXXX</entry>
-	<entry key="serialNumber">xxxxxxxxxxxxxx</entry>
-	<entry key="keystoreType">PKCS11</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf0.xml b/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf0.xml
deleted file mode 100644
index 8c3a94601..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf0.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-
-	<!-- Allow values: 'obtained', 'prior', 'current-implicit', 'current-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-
-
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. <entry key="eIDSectorShare">true</entry> <entry key="eIDCrossSectorShare">true</entry> 
-		<entry key="eIDCrossBorderShare">true</entry> -->
-
-
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="friendlyName">false</entry>
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="isRequired">true</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time (positive 
-		number) -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-
-	<entry key="textResidenceAddress">http://www.stork.gov.eu/1.0/textResidenceAddress</entry>
-	<entry key="canonicalResidenceAddress">http://www.stork.gov.eu/1.0/canonicalResidenceAddress</entry>
-
-	<entry key="title">http://www.stork.gov.eu/1.0/title</entry>
-	<entry key="residencePermit">http://www.stork.gov.eu/1.0/residencePermit</entry>
-
-	<entry key="signedDoc">http://www.stork.gov.eu/1.0/signedDoc</entry>
-	<entry key="citizen509Certificate">http://www.stork.gov.eu/1.0/citizen509Certificate</entry>
-
-	<entry key="newAttribute1">http://www.stork.gov.eu/1.0/newAttribute1</entry>
-	<entry key="newAttribute2">http://www.stork.gov.eu/1.0/newAttribute2</entry>
-	<entry key="hasDegree">http://www.stork.gov.eu/1.0/hasDegree</entry>
-	<entry key="mandateContent">http://www.stork.gov.eu/1.0/mandateContent</entry>
-
-	<entry key="docRequest">http://www.stork.gov.eu/1.0/docRequest</entry>
-	
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf1.xml b/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf1.xml
deleted file mode 100644
index ad04cc3df..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf1.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-
-	<!-- Allow values: 'obtained', 'prior', 'current-implicit', 'current-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-
-
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. <entry key="eIDSectorShare">true</entry> <entry key="eIDCrossSectorShare">true</entry> 
-		<entry key="eIDCrossBorderShare">true</entry> -->
-
-
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="friendlyName">false</entry>
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="isRequired">true</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time (positive 
-		number) -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-
-	<entry key="textResidenceAddress">http://www.stork.gov.eu/1.0/textResidenceAddress</entry>
-	<entry key="canonicalResidenceAddress">http://www.stork.gov.eu/1.0/canonicalResidenceAddress</entry>
-
-	<entry key="title">http://www.stork.gov.eu/1.0/title</entry>
-	<entry key="residencePermit">http://www.stork.gov.eu/1.0/residencePermit</entry>
-
-	<entry key="signedDoc">http://www.stork.gov.eu/1.0/signedDoc</entry>
-	<entry key="citizen509Certificate">http://www.stork.gov.eu/1.0/citizen509Certificate</entry>
-
-	<entry key="newAttribute1">http://www.stork.gov.eu/1.0/newAttribute1</entry>
-	<entry key="newAttribute2">http://www.stork.gov.eu/1.0/newAttribute2</entry>
-	<entry key="hasDegree">http://www.stork.gov.eu/1.0/hasDegree</entry>
-	<entry key="mandateContent">http://www.stork.gov.eu/1.0/mandateContent</entry>
-
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf2.xml b/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf2.xml
deleted file mode 100644
index fd1db92ac..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf2.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-	<!-- Allow values: 'obtained', 'prior', 'curent-implicit', 'curent-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-	<entry key="eIDSectorShare">false</entry>
-	<entry key="eIDCrossSectorShare">false</entry>
-	<entry key="eIDCrossBorderShare">false</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="isRequired">false</entry>
-
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf3.xml b/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf3.xml
deleted file mode 100644
index bea40d274..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/StorkSamlEngine_Conf3.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-	<!-- Allow values: 'obtained', 'prior', 'curent-implicit', 'curent-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-	<entry key="eIDSectorShare">false</entry>
-	<entry key="eIDCrossSectorShare">false</entry>
-	<entry key="eIDCrossBorderShare">false</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-	<entry key="unknown">http://www.stork.gov.eu/1.0/unknown</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml b/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
deleted file mode 100644
index 3764389e4..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
-	Destination="http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest" ID="_939726f0a02072f40b548de378612a50"
-	IssueInstant="2013-10-04T16:57:55.547Z" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignedInfo>
-			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
-			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
-			<ds:Reference URI="#_939726f0a02072f40b548de378612a50">
-				<ds:Transforms>
-					<ds:Transform
-						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
-					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
-						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
-							PrefixList="xs" />
-					</ds:Transform>
-				</ds:Transforms>
-				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
-				<ds:DigestValue>BgPDTVCv7BhiWIs6HsC06jaHaag=</ds:DigestValue>
-			</ds:Reference>
-		</ds:SignedInfo>
-		<ds:SignatureValue>dIC61bGi6Jqp1zSVojpjaVq9WaZcDtNImXgo1Dyze5/hJA07Sy4TaHu+/IuLEC99aLjM6rxh2UUNqpPaQCFlF5eVkVv/c4gHEZVyevhjJKTidqmnuhlI78PGMx2thfxFsHsPcqHqOzy1Z6w18K1ds6APQP+aXI9TNKis+pykn4nJititYuiSseD0VY0F4QnXx+U6k3raoi1CAFE5fe7EuI/KfxuhhQLAbLq90Vm8R94ITBjfSS25mXstXNe9zppTSjDB42ld1TjDovDwXAn5OxiZasIEb5m68sRlxgoQ/2/+ZdYNNINFLAwkCbb8MiCbGASd626Bme0Kx+ropeWdxw==</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIDXjCCAkagAwIBAgIEUk1MbDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJJUzESMBAGA1UE
-					CAwJUmV5a2phdmlrMRIwEAYDVQQHDAlSZXlramF2aWsxEDAOBgNVBAoMB0FkdmFuaWExDzANBgNV
-					BAsMBlNUT1JLMjEXMBUGA1UEAwwOc2FtbC1kZW1vLWNlcnQwHhcNMTMxMDAzMTA1MzEyWhcNMjMx
-					MDAzMTA1MzEyWjBxMQswCQYDVQQGEwJJUzESMBAGA1UECAwJUmV5a2phdmlrMRIwEAYDVQQHDAlS
-					ZXlramF2aWsxEDAOBgNVBAoMB0FkdmFuaWExDzANBgNVBAsMBlNUT1JLMjEXMBUGA1UEAwwOc2Ft
-					bC1kZW1vLWNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCkSgTxZkNRXZTKLB0c
-					4oz7/8Dh56FX+0cYg7hjw4e8vn+ITXkxzrmUH57FtsvKln4mq1H0FHXL80u3IiWX8qY+QLgNeKeB
-					m85lXuyOb3wWpKAaQvpLAkejGLCx22AN2L0WZkKZV2puwRQVsRHCq6U6vToJXDZ6Ui6ltKsAl/ZS
-					8qUFpiIvqD5ea4ohz4JsFE/uApRc7pbJ4VbOmAAeH/tQTayptq2kPb2vvUVk+2cH5J7UD+GCI88E
-					e+mS+C33tV9NmWUHL69mYEe8FXjumbKA5e9i1ejn9i0/BLUtHFonHnL9YFMim0foI7NNc5mNg9aw
-					vm0PuByVU3kuibQkqGBLAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAA9X5B4NBmVuhjECi+KOnRRX
-					5oUV+jbYKhGZODDPi+F4Uo7ZtPFQ6sS3tE54+8AoDl5zQ5q5fDDVXhB42IIIjDxHKo8cBXie5FZ6
-					mJtErvWZWYWdO0uV2OQAUALq2LieidqSFDJ+Pjl8w1New8oi3migwyE0jZo4Q97lJGDfJTruV0A2
-					JE/Gt6QAAcWhhN2hZl92pYkIi5OeqHXyzBUp5vg8LLfNmeyziCAiXDC1Sy/aQU/cllZ3zFJMrqZM
-					s2xBpmB4sF1YRbIrr2OqEVE6M6DUx+pAQOd2uogV3AMT9D5MYpckI1jx/o/Tto7ju74nIVOskDiN
-					K0FR8izxcT0HixM=</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="false" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16</stork:AttributeValue>
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">18</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">Sveinbjorn</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">ES/IS/1234567890</stork:AttributeValue>
-			</stork:RequestedAttribute>
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-	<saml2:Subject>
-		<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer" />
-	</saml2:Subject>
-</saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml b/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
deleted file mode 100644
index d64572829..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" AssertionConsumerServiceURL="http://S-PEPS.gov.xx/PEPS/ColleagueResponse" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest" ID="_334488599e0c2781ff34857c4964debb" IssueInstant="2014-02-06T22:09:18.113Z" Version="2.0"><saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><ds:Reference URI="#_334488599e0c2781ff34857c4964debb"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xs"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>X1nUVB6qXdoKbJzNekiSo9ExLdw=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>ExCPHHC/9OhdhOl1Ou+43Qw1nvskpbMYMu9vqa7m16doxM2PIUmK7LUw7hZiKtjIdBxuhpca3OrjO8O6MuTDN1FksWoj+7B1KTLFtmspucT5O7Cu2OqhK5WIVuCaLuA7CD0N2UfFouRwR5NlLHyzn9Trd7IM5OjA41dGb5jqYl7Ir+62+MgjhZRlLooDzb5fDAczbxv9LHGiKRBpgnk40w3gDAvoSPNdEuKhZi8LPQWWNBvVi3N5ZmJmAIacZWBqePywXTjygmChWAc8p7ptAX6tw0hpBxyxoW3aaZZzWQNcwobTRYbn89fcM11gqIz/YK7VXtiQ7WEQt1enQD/GAA==</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIDIjCCAgqgAwIBAgIES6idsjANBgkqhkiG9w0BAQUFADBTMQswCQYDVQQGEwJFUzEOMAwGA1UE
-CAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExEzARBgNVBAMMCmxvY2Fs
-LWRlbW8wHhcNMTMwODI4MTY0NzM1WhcNMTUwODI4MTY0NzM1WjBTMQswCQYDVQQGEwJFUzEOMAwG
-A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExEzARBgNVBAMMCmxv
-Y2FsLWRlbW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx+7zEQUbt8Ot9dByR5TuY
-NPmTwaKhECtnkxYAx9tl+Ga3kFiv+dOSeDoQOhxkICG1ZMaG0Gtk0EQWjscC1cLwDXpAOdhOm5xh
-ndFHxa3V3Y3zomFZA7A3nwP8wt17wDrc1xi2Ye8VrwO7Vjb/F8Rgutlcrvq+LF4g9nQLoRiKUq8w
-NFvDlvhBbLr8hMVBMY/jY7tSQ85qLqKUkWRcoDttJjgWZoO1vpBS4m+FywtYdOoHnN6fv4Dvf1r2
-rNLgebgBvSfwznxiulwW6FBLasYX0rYKP7RfwG8TJ+FumOgAjADj2LdwK25RZNg44XU2V1z1Fp37
-fNXhfo08LpdD1ueFAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBADMRGTWOmadZyCoJNluV+M7LopjC
-9WpFUj76X0cAoNXmt12zYqYe8hjRmBr6l2V/FXT3/TyWET1nILG46zwwAxslw3b2LvkhU+9QcuB8
-yC8TCJJ0kgsTZ/EUZPSbwUG7Nn2jkMiyjlyKcjSCQOzEKQyR1xYwyZG40+BPeGbYjmRgm6kcmCxY
-USWoPwNyfke9gNT80f0pUj7wJ9YwWbTIz1rhf/h7rxoMYypXo+JXwaXW/Ra8v1uDcwfKpE5ZgwAU
-nubLXF4A+H7/N7ZvB5XDwJ4W+99nuPsKfwacD8m1sflTXcEPzzhOq6iQ9anJT94/pMctnp827zXA
-y66jvDrin5I=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><saml2p:Extensions><stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel><stork:spCountry>IS</stork:spCountry><storkp:eIDSectorShare>false</storkp:eIDSectorShare><storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare><storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare><storkp:RequestedAttributes><stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/docRequest" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"><stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:anyType">IS/IS/fbea6e68-0393-401b-b616-f767fff9418c</stork:AttributeValue></stork:RequestedAttribute></storkp:RequestedAttributes></saml2p:Extensions><saml2:Subject><saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/></saml2:Subject></saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml b/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
deleted file mode 100644
index becc689fe..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
-	Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest" ID="_f6c8fc355b9f125cb5283f038e1b3cdf"
-	IssueInstant="2013-10-03T10:28:15.449Z" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignatureValue>hhQXDKNrJJ3Yy/pkZNZF4GlWrA/Xsx4CH9chgVa5HK4qZQvFXvZwegdw6U7rm7qv0zmI4xaLTv/bpmqJzEPfY3sIvrDRu9EouEKwtjbMbcvVQsx7I+j0yy7/cBcQJe3lRwQwyvazfYVbnSeGFxBN6WOHPqv6uInaQO/hXkicT3tBtm8o3UgUDY6c8wIMuD5A0hWTkL6z6f893AbdN85OQYAdHItNsQWeLOIeiGC918X7qqTfhFtBAB2oGVjlsSEqWox1jNqrPl1jjA0dP76m5SIVSqF8XcDR306ZB9GLJywOHKba0lxGLsXOAzJ+8u9jeixJ6VZKFqZg2Fhl/saKbg==</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIDJzCCAg8CBEuonbIwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMCRVMxDjAMBgNVBAgMBVNw
-					YWluMQ8wDQYDVQQHDAZNYWRyaWQxDjAMBgNVBAoMBUluZHJhMRgwFgYDVQQDDA9sb2NhbC1kZW1v
-					LWNlcnQwHhcNMTAwMzIzMTA1MzM4WhcNMTAwNjAxMTA1MzM4WjBYMQswCQYDVQQGEwJFUzEOMAwG
-					A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExGDAWBgNVBAMMD2xv
-					Y2FsLWRlbW8tY2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfdQ1/mkM9sqqab
-					ri8qqqX4s0J6UEEXyF+0AjLU8RC4WMeYFSZ5tfwnyLsoXY0/9bZLXnBxSibQYaf4SnpZJhlVA4sU
-					0d8qyEWA2OvXGDCm7uspGHG3CRQa7fpHsmHmfIAqho9XDlwpwJdx5gK4Edc6aArcMQfjqMhy1s1n
-					6Of1i1lMGGsGrERIRY7biIQu/8nITbHH18sUAZMG1u/Q0Avi9O3LWyswHXUouZ818fWwG6xru2N5
-					y6vtVO/SL3doRSdqYkEms93TgxTtaKg8XNe24zhNTte6nvWLaKesi2KzZGC57HU47HBFEs8NWk7z
-					9BDf8uLyPz9VDahwVKzMto8CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAgpuReXQ7Dsfdoe5zzy2F
-					6kn1qqtMkRGsBPKnDFCI/GkIZpBiqlfwdh6sipnFKWfKEDlPKN1kEhbkDR2GA1Cp4F4ZSL/HumZM
-					pWabRhDxhTPvHIFbbShPDJY93+jw/yQeaWgMuhw3WzdH9TrVoRZH0Q7sG1pIJo5/6IogIZwFvJHT
-					/NDutKmurU6Lw8Vnde8PfnQd+FTEhz0SEGyKkWjAuhGbJfseBy/z3L+MJq1rdSQ9PF7wXDvWNzJq
-					yaNBUWWBV1TskvkNZXcaguroVPy2XhA1aixlAajWEXLk6Uuj5UYqalrV/reNYvDvY0BV2CIn51r7
-					Ppm8IFVTk8mYfX8/jw==</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="false" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16</stork:AttributeValue>
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">18</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">Sveinbjörn</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">ES/IS/1234567890</stork:AttributeValue>
-			</stork:RequestedAttribute>
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-	<saml2:Subject>
-		<saml2:SubjectConfirmation
-			Method="urn:oasis:names:tc:SAML:1.0:cm:sender-vouches" />
-	</saml2:Subject>
-</saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml b/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
deleted file mode 100644
index 7ea486812..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:obtained"
-	Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest" ID="_483140d440fc4eef8e949ace49669f2e"
-	InResponseTo="_0a22c1120bf2de912714c24e99dd38ed" IssueInstant="2013-10-08T09:11:17.255Z"
-	Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://C-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignedInfo>
-			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
-			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
-			<ds:Reference URI="#_483140d440fc4eef8e949ace49669f2e">
-				<ds:Transforms>
-					<ds:Transform
-						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
-					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
-						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
-							PrefixList="xs" />
-					</ds:Transform>
-				</ds:Transforms>
-				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
-				<ds:DigestValue>yMOVS1T/yRiVh3L6IBM9rR9Ie3w=</ds:DigestValue>
-			</ds:Reference>
-		</ds:SignedInfo>
-		<ds:SignatureValue>d8e/RyNNPmnHRIzTIuRSnW6B60oWGBGxjRua/HvNxTuod0qSarYJxEedhY9Wl1Z9WYXlry28FuKjp3DA3HhzNaVd7A7QpFqNC4dnizSVWFjxlhmoE/Uv3Y/ha9P/fk6nbtHCSKW4kHSX7QfFLeggcLmUG0IULRF8UmRdQ0WerCl0aSZZeSp8J3LsFBPeWCRSwXgfiLn+RehggzZmQU6g0ssxrpnsYEAtjAiOli+YVQGuumsZGaJ8zHA/DgJ2FTGovNUyfuSUFLhd9nLlSqFs2Avnx0Ck7Q1dxDO5truOm6e285YLHqLaGdetFyPQAj/Z4w4RJ5u5X6d7rhBjTfRAAw==</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIDJzCCAg8CBEuonbIwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMCRVMxDjAMBgNVBAgMBVNw
-					YWluMQ8wDQYDVQQHDAZNYWRyaWQxDjAMBgNVBAoMBUluZHJhMRgwFgYDVQQDDA9sb2NhbC1kZW1v
-					LWNlcnQwHhcNMTAwMzIzMTA1MzM4WhcNMTAwNjAxMTA1MzM4WjBYMQswCQYDVQQGEwJFUzEOMAwG
-					A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExGDAWBgNVBAMMD2xv
-					Y2FsLWRlbW8tY2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfdQ1/mkM9sqqab
-					ri8qqqX4s0J6UEEXyF+0AjLU8RC4WMeYFSZ5tfwnyLsoXY0/9bZLXnBxSibQYaf4SnpZJhlVA4sU
-					0d8qyEWA2OvXGDCm7uspGHG3CRQa7fpHsmHmfIAqho9XDlwpwJdx5gK4Edc6aArcMQfjqMhy1s1n
-					6Of1i1lMGGsGrERIRY7biIQu/8nITbHH18sUAZMG1u/Q0Avi9O3LWyswHXUouZ818fWwG6xru2N5
-					y6vtVO/SL3doRSdqYkEms93TgxTtaKg8XNe24zhNTte6nvWLaKesi2KzZGC57HU47HBFEs8NWk7z
-					9BDf8uLyPz9VDahwVKzMto8CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAgpuReXQ7Dsfdoe5zzy2F
-					6kn1qqtMkRGsBPKnDFCI/GkIZpBiqlfwdh6sipnFKWfKEDlPKN1kEhbkDR2GA1Cp4F4ZSL/HumZM
-					pWabRhDxhTPvHIFbbShPDJY93+jw/yQeaWgMuhw3WzdH9TrVoRZH0Q7sG1pIJo5/6IogIZwFvJHT
-					/NDutKmurU6Lw8Vnde8PfnQd+FTEhz0SEGyKkWjAuhGbJfseBy/z3L+MJq1rdSQ9PF7wXDvWNzJq
-					yaNBUWWBV1TskvkNZXcaguroVPy2XhA1aixlAajWEXLk6Uuj5UYqalrV/reNYvDvY0BV2CIn51r7
-					Ppm8IFVTk8mYfX8/jw==</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Status>
-		<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
-		<saml2p:StatusMessage>urn:oasis:names:tc:SAML:2.0:status:Success</saml2p:StatusMessage>
-	</saml2p:Status>
-	<saml2:Assertion ID="_9ed05849dee5c154e62fa9e3ba53e9f3"
-		IssueInstant="2013-10-08T09:11:17.255Z" Version="2.0">
-		<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://C-PEPS.gov.xx</saml2:Issuer>
-		<saml2:Subject>
-			<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
-				NameQualifier="http://C-PEPS.gov.xx">urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</saml2:NameID>
-			<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
-				<saml2:SubjectConfirmationData
-					Address="111.222.333.444" InResponseTo="_0a22c1120bf2de912714c24e99dd38ed"
-					NotOnOrAfter="2013-10-08T09:16:17.255Z" />
-			</saml2:SubjectConfirmation>
-		</saml2:Subject>
-		<saml2:Conditions NotBefore="2013-10-08T09:11:17.255Z"
-			NotOnOrAfter="2013-10-08T09:16:17.255Z">
-			<saml2:AudienceRestriction>
-				<saml2:Audience>http://S-PEPS.gov.xx</saml2:Audience>
-			</saml2:AudienceRestriction>
-			<saml2:OneTimeUse />
-		</saml2:Conditions>
-		<saml2:AuthnStatement AuthnInstant="2013-10-08T09:11:17.255Z">
-			<saml2:SubjectLocality Address="111.222.333.444" />
-			<saml2:AuthnContext>
-				<saml2:AuthnContextDecl />
-			</saml2:AuthnContext>
-		</saml2:AuthnStatement>
-		<saml2:AttributeStatement>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16/12/2008</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute
-				Name="http://www.stork.gov.eu/1.0/canonicalResidenceAddress"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">
-					<stork:postalCode xsi:type="xs:anyType">105</stork:postalCode>
-					<stork:state xsi:type="xs:anyType">IS</stork:state>
-					<stork:streetNumber xsi:type="xs:anyType">10</stork:streetNumber>
-					<stork:streetName xsi:type="xs:anyType">Gudrunartun</stork:streetName>
-					<stork:town xsi:type="xs:anyType">Reykjavik</stork:town>
-				</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/newAttribute2"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">
-					<stork:value3 xsi:type="xs:anyType">value3</stork:value3>
-					<stork:value4 xsi:type="xs:anyType">value4</stork:value4>
-					<stork:value1 xsi:type="xs:anyType">value1</stork:value1>
-					<stork:value2 xsi:type="xs:anyType">value2</stork:value2>
-				</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16</saml2:AttributeValue>
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">18</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">123456789IS</saml2:AttributeValue>
-			</saml2:Attribute>
-		</saml2:AttributeStatement>
-	</saml2:Assertion>
-</saml2p:Response>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml b/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
deleted file mode 100644
index c48bfde95..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	AssertionConsumerServiceURL="http://S-PEPS.gov.xx/PEPS/ColleagueResponse"
-	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest"
-	ForceAuthn="true" ID="_e54eee285e7b8e2772875c406ec39674" IsPassive="false"
-	IssueInstant="2010-06-08T07:37:54.533Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
-	ProviderName="University of Oxford" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignedInfo>
-			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
-			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
-			<ds:Reference URI="#_e54eee285e7b8e2772875c406ec39674">
-				<ds:Transforms>
-					<ds:Transform
-						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
-					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
-						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
-							PrefixList="ds saml2 saml2p stork storkp xs" />
-					</ds:Transform>
-				</ds:Transforms>
-				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
-				<ds:DigestValue>yzsqaxBNicOrixBUno5cL0CBOpE=</ds:DigestValue>
-			</ds:Reference>
-		</ds:SignedInfo>
-		<ds:SignatureValue>
-			Xycll1PF7hh3Xdykpr6nIr8Q6PQ6OxLIBBBugoGpAm/V4Hu7tKakHJp8TgtRWZ30jG5eolOXnJkC
-			wiaTVUFaQz7cNn27syRJkdA+eYlz9doiwUJ5eD1cAyddZYsNPpSeAj5UK45oN0qCH+/pI9mRw8Oi
-			YIN/BUEtXkoYTjPtkmA=
-		</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIBmDCCAQECBEuWisIwDQYJKoZIhvcNAQEFBQAwEzERMA8GA1UEAxMIY291bnRyeTEwHhcNMTAw
-					MzA5MTc1MjAyWhcNMTAwNjA3MTc1MjAyWjATMREwDwYDVQQDEwhjb3VudHJ5MTCBnzANBgkqhkiG
-					9w0BAQEFAAOBjQAwgYkCgYEAnb2gcchwxvJBclcsfCBWJnYefLJYQnDGCQ3RUtYZc26JznnLXclu
-					h1XfLJlWgYk/pFKz7B9KfJztal47c6mBfisnxjhdcLqcbXOuRIm7E8TZPzdbHEd60WHPDv20jr+r
-					/WkOQs12tKQMbgDX2wtBBcJODLYCDiYa1oQsnyhdOGkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBk
-					3luVRc0EqEE1zZeYvRPi5a2yOZfI9H+/rXI1qNLwmICnuJX++ukUbqJHm/FV1iSPM9O9oqzifJ/K
-					eKL5EcUugJ76Tu5XO8za2FoJvYr+jIZDsEkCg+OSzcp/eljiWAIh2enZcQ/ON6QxWXeSNJPH0xOq
-					KAoZgbUK0Zld3Dsheg==</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<stork:spSector>EDU001</stork:spSector>
-		<stork:spInstitution>OXF001</stork:spInstitution>
-		<stork:spApplication>APP001</stork:spApplication>
-		<stork:spCountry>EN</stork:spCountry>
-		<storkp:eIDSectorShare>true</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>true</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>true</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
-					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">16</stork:AttributeValue>
-				<stork:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
-					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">18</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="false" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml b/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
deleted file mode 100644
index 8766f9a8b..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:stork" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	AssertionConsumerServiceURL="http://localhost:8080/SP/ReturnPage"
-	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://locahost:8080/PEPS/ServiceProvider"
-	ForceAuthn="true" ID="_0c64ff85-1323-4618-847b-12d1983b86e4" IsPassive="false"
-	IssueInstant="2010-04-07T16:45:03.593Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
-	ProviderName="PT-SP" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignatureValue>
-			S6nY97RSCUJXq3HZ5obSLCI341LvtAA3vHjR1FWxrIMDPACQMqlNWBYNnRP1RiZiJV6x0RieH+SR
-			Vkiy03jYyhr0XkwAE5Wd6Huf+zIbeTXjZkdQj7JpAXoB+ky4G/+L0deamvsP3eO7ZJ4grady4gmC
-			Xt8p8tK3EoMocZse2hw=
-		</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIBkTCB+wIESpT8bTANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVzdG9yazAeFw0wOTA4MjYw
-					OTEyMTNaFw0wOTExMjQwOTEyMTNaMBAxDjAMBgNVBAMTBXN0b3JrMIGfMA0GCSqGSIb3DQEBAQUA
-					A4GNADCBiQKBgQDK/QL8NuMd41I1lObObeRA6DaM8bjeYqIz5mg5WnnZv4jlcK7Gq89Lk6htXRFl
-					lAXpDYhI3zolMIMHEMZ3zQQPc7lgTV6Bbz9uD2YTJ9Kx55e8Y6Y49DO+TiiejGJxTzTFUcuBJHaK
-					ipuvLVd1a8N3RAnaGSUOozhrTqxba82mEwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFJgeS18nhUl
-					r7WnvSn9FlkI94U//Hk3iZLc3/cScTu7D7Y/J0eUq4TF8PsSzWX5khGuqrTkswNgfEtl2IpACQ2w
-					kB8+RxeRNdddQlGHlO4ZqnpvxXBwSouiy2yUeAo0y++vMFm6DO4sxfk8eTtimPDo5SzBtjtGtbqS
-					3cyl/wz8</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute
-				Name="http://www.stork.gov.eu/1.0/nationalityCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml b/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
deleted file mode 100644
index 1b1e1646c..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:stork" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	AssertionConsumerServiceURL="http://localhost:8080/SP/ReturnPage"
-	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://localhost:8080/PEPS/ServiceProvider"
-	ForceAuthn="true" ID="_0c64ff85-1323-4618-847b-12d1983b86e4" IsPassive="false"
-	IssueInstant="2010-04-07T16:45:03.593Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
-	ProviderName="PT-SP" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignatureValue>
-			S6nY97RSCUJXq3HZ5obSLCI341LvtAA3vHjR1FWxrIMDPACQMqlNWBYNnRP1RiZiJV6x0RieH+SR
-			Vkiy03jYyhr0XkwAE5Wd6Huf+zIbeTXjZkdQj7JpAXoB+ky4G/+L0deamvsP3eO7ZJ4grady4gmC
-			Xt8p8tK3EoMocZse2hw=
-		</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIBkTCB+wIESpT8bTANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVzdG9yazAeFw0wOTA4MjYw
-					OTEyMTNaFw0wOTExMjQwOTEyMTNaMBAxDjAMBgNVBAMTBXN0b3JrMIGfMA0GCSqGSIb3DQEBAQUA
-					A4GNADCBiQKBgQDK/QL8NuMd41I1lObObeRA6DaM8bjeYqIz5mg5WnnZv4jlcK7Gq89Lk6htXRFl
-					lAXpDYhI3zolMIMHEMZ3zQQPc7lgTV6Bbz9uD2YTJ9Kx55e8Y6Y49DO+TiiejGJxTzTFUcuBJHaK
-					ipuvLVd1a8N3RAnaGSUOozhrTqxba82mEwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFJgeS18nhUl
-					r7WnvSn9FlkI94U//Hk3iZLc3/cScTu7D7Y/J0eUq4TF8PsSzWX5khGuqrTkswNgfEtl2IpACQ2w
-					kB8+RxeRNdddQlGHlO4ZqnpvxXBwSouiy2yUeAo0y++vMFm6DO4sxfk8eTtimPDo5SzBtjtGtbqS
-					3cyl/wz8</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute
-				Name="http://www.stork.gov.eu/1.0/nationalityCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/logback-test.xml b/id/server/SamlEngine-VIDP/src/test/resources/logback-test.xml
deleted file mode 100644
index 99d7d353a..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Basic configuration used until the IdP can load the real configuration -->
-<configuration>
-
-	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-		<layout class="ch.qos.logback.classic.PatternLayout">
-			<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-			</Pattern>
-		</layout>
-	</appender>
-
-	<logger name="eu.stork">
-		<level value="DEBUG" />
-	</logger>
-
-	<root>
-		<appender-ref ref="STDOUT" />
-		<level value="INFO" />
-	</root>
-
-</configuration>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/src/test/resources/p11Conf.cfg b/id/server/SamlEngine-VIDP/src/test/resources/p11Conf.cfg
deleted file mode 100644
index bd9f357ce..000000000
--- a/id/server/SamlEngine-VIDP/src/test/resources/p11Conf.cfg
+++ /dev/null
@@ -1,24 +0,0 @@
-//ATTRIBUTE			VALUE
-//name				name suffix of this provider instance
-//library			pathname of PKCS#11 implementation
-//slotListIndex		slot index
-
-//PREFIX			DESCRIPTION
-//CKO_ 				Object class
-//CKA_ 				Attribute
-//CKK_ 				Key type
-
-//attributes(operation, keytype, keyalgorithm) = {
-//  name1 = value1
-//  [...]
-//}
-
-name=nameProvider
-library=library.dll
-slotListIndex=0
-attributes(*,CKO_PUBLIC_KEY,CKK_RSA)={
-	CKA_VERIFY=true
-}
-attributes(*,CKO_PRIVATE_KEY,CKK_RSA)={
-	CKA_SIGN=true
-}	
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/SamlEngine-1.4.0-sources.jar b/id/server/SamlEngine-VIDP/target/SamlEngine-1.4.0-sources.jar
deleted file mode 100644
index 447c8d8f8..000000000
Binary files a/id/server/SamlEngine-VIDP/target/SamlEngine-1.4.0-sources.jar and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngine.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngine.class
deleted file mode 100644
index d64cbf35a..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngine.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngineUtils.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngineUtils.class
deleted file mode 100644
index cad1781ba..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/SAMLEngineUtils.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/STORKSAMLEngine.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/STORKSAMLEngine.class
deleted file mode 100644
index de028b751..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/STORKSAMLEngine.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/X509PrincipalUtil.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/X509PrincipalUtil.class
deleted file mode 100644
index 6209f6eb5..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/X509PrincipalUtil.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/AuthenticationAttributes.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/AuthenticationAttributes.class
deleted file mode 100644
index f9c79ca30..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/AuthenticationAttributes.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CitizenCountryCode.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CitizenCountryCode.class
deleted file mode 100644
index 7da2c0e42..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CitizenCountryCode.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomAttributeQuery.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomAttributeQuery.class
deleted file mode 100644
index b12c0987d..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomAttributeQuery.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.class
deleted file mode 100644
index f6d4055fe..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.class
deleted file mode 100644
index 082d6024f..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.class
deleted file mode 100644
index 72f9d84a6..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDSectorShare.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDSectorShare.class
deleted file mode 100644
index 57778783e..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/EIDSectorShare.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/QAAAttribute.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/QAAAttribute.class
deleted file mode 100644
index ebe9ed6dd..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/QAAAttribute.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttribute.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttribute.class
deleted file mode 100644
index 2a485d3b5..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttribute.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttributes.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttributes.class
deleted file mode 100644
index 0c2fc75ef..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/RequestedAttributes.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLCore.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLCore.class
deleted file mode 100644
index 25ac4c69e..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLCore.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLEngineSignI.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLEngineSignI.class
deleted file mode 100644
index a6c30d388..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SAMLEngineSignI.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPApplication.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPApplication.class
deleted file mode 100644
index 8f8939d20..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPApplication.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPCountry.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPCountry.class
deleted file mode 100644
index 00982e2a9..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPCountry.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPID.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPID.class
deleted file mode 100644
index 3d686cfc2..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPID.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInformation.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInformation.class
deleted file mode 100644
index 493bdb2de..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInformation.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInstitution.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInstitution.class
deleted file mode 100644
index caf16dc7d..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPInstitution.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPSector.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPSector.class
deleted file mode 100644
index bcaef2a96..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/SPSector.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/STORKSAMLCore.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/STORKSAMLCore.class
deleted file mode 100644
index 3de661743..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/STORKSAMLCore.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.class
deleted file mode 100644
index 8f898214e..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.class
deleted file mode 100644
index 38f3bc5b6..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.class
deleted file mode 100644
index c52b2e7db..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.class
deleted file mode 100644
index 8efebb5e6..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.class
deleted file mode 100644
index 92c532e6e..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.class
deleted file mode 100644
index 79b677b07..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.class
deleted file mode 100644
index 345fa960b..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.class
deleted file mode 100644
index 8e36a67ac..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.class
deleted file mode 100644
index 04cb2a479..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.class
deleted file mode 100644
index fa1c1d3da..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.class
deleted file mode 100644
index cb5fbd326..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.class
deleted file mode 100644
index acffd5114..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.class
deleted file mode 100644
index 069e677c8..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.class
deleted file mode 100644
index 2e95d47c9..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.class
deleted file mode 100644
index 2861c96fa..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.class
deleted file mode 100644
index 4a3efcf63..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.class
deleted file mode 100644
index 030b16a43..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.class
deleted file mode 100644
index 255c5fdb6..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.class
deleted file mode 100644
index 01b48443b..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.class
deleted file mode 100644
index 94d8fc317..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.class
deleted file mode 100644
index f8faa5b80..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.class
deleted file mode 100644
index 3cef6c8c0..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.class
deleted file mode 100644
index 1a270f4e2..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.class
deleted file mode 100644
index d13aee589..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.class
deleted file mode 100644
index 2e3019255..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.class
deleted file mode 100644
index cac3037cf..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.class
deleted file mode 100644
index dd88db632..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.class
deleted file mode 100644
index 7aef0f4fd..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.class
deleted file mode 100644
index 013cb7e68..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.class
deleted file mode 100644
index 9340a804b..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.class
deleted file mode 100644
index 6e47992f2..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.class
deleted file mode 100644
index 783031d78..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.class
deleted file mode 100644
index 06a34b622..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.class
deleted file mode 100644
index ecb7104f6..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.class
deleted file mode 100644
index 7ae6d8f45..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.class
deleted file mode 100644
index 2c878b0e7..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.class
deleted file mode 100644
index cf03e83df..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.class
deleted file mode 100644
index a60f07621..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.class
deleted file mode 100644
index cdf24dffc..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.class
deleted file mode 100644
index ce812be90..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.class
deleted file mode 100644
index ca335f0bf..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.class
deleted file mode 100644
index 2137135e4..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.class
deleted file mode 100644
index d8b4e1c3f..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.class
deleted file mode 100644
index d1179ef11..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.class
deleted file mode 100644
index 79b4fed37..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.class
deleted file mode 100644
index 762681c9d..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDImpl.class
deleted file mode 100644
index 98285837e..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.class
deleted file mode 100644
index 827f8de30..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.class
deleted file mode 100644
index 8f5f14fe2..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.class
deleted file mode 100644
index c3bd1f9b4..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.class
deleted file mode 100644
index 9acde181f..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.class
deleted file mode 100644
index 09863dfee..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.class
deleted file mode 100644
index 0b6c4d39f..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.class
deleted file mode 100644
index 05515dd54..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.class
deleted file mode 100644
index 0a9807fd0..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.class
deleted file mode 100644
index 230330a60..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.class
deleted file mode 100644
index d1897e4fd..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.class
deleted file mode 100644
index e498256ae..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.class
deleted file mode 100644
index 58d18fe48..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.class
deleted file mode 100644
index 097e76b80..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.class
deleted file mode 100644
index 99a0c19ee..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignHW.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignHW.class
deleted file mode 100644
index dc7acbc35..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignHW.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.class
deleted file mode 100644
index 96b8cf7c7..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignP12.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignP12.class
deleted file mode 100644
index ef11ce208..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignP12.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignSW.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignSW.class
deleted file mode 100644
index 87726f6ac..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/SignSW.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.class
deleted file mode 100644
index 5c62d013b..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.class
deleted file mode 100644
index 3749dbffe..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.class
deleted file mode 100644
index be892f684..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.class
deleted file mode 100644
index 850171df3..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.class
deleted file mode 100644
index 61f4e0b2f..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.class
deleted file mode 100644
index b6db104c7..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.class
deleted file mode 100644
index b31a1d586..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.class
deleted file mode 100644
index 2eda7b183..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationCreator.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationCreator.class
deleted file mode 100644
index 97944fb9c..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationCreator.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationEngine.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationEngine.class
deleted file mode 100644
index df1854e68..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationEngine.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationReader.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationReader.class
deleted file mode 100644
index c1edf063d..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationReader.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationSingleton.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationSingleton.class
deleted file mode 100644
index 15f565fc9..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/ConfigurationSingleton.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/InstanceEngine.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/InstanceEngine.class
deleted file mode 100644
index 10ebf1a10..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/configuration/InstanceEngine.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/SAMLEngineException.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/SAMLEngineException.class
deleted file mode 100644
index 1fc62d91c..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/SAMLEngineException.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineException.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineException.class
deleted file mode 100644
index 7ff0077b6..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineException.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.class b/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.class
deleted file mode 100644
index b19b665df..000000000
Binary files a/id/server/SamlEngine-VIDP/target/classes/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/maven-archiver/pom.properties b/id/server/SamlEngine-VIDP/target/maven-archiver/pom.properties
deleted file mode 100644
index c3e05d54d..000000000
--- a/id/server/SamlEngine-VIDP/target/maven-archiver/pom.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Generated by Maven
-#Mon Mar 17 17:10:39 CET 2014
-version=1.4.0
-groupId=eu.stork
-artifactId=SamlEngine
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/SamlEngine.xml b/id/server/SamlEngine-VIDP/target/test-classes/SamlEngine.xml
deleted file mode 100644
index 171e05f12..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/SamlEngine.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<instances>
-
-	<!-- Configuration name -->
-	<instance name="CONF0">
-		<!-- Configurations parameters StorkSamlEngine -->
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf0.xml" />
-		</configuration>
-
-		<!-- Settings module signature -->
-		<configuration name="SignatureConf">
-			<!-- Specific signature module -->
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<!-- Settings specific module -->
-			<parameter name="fileConfiguration" value="SignModule_Conf0.xml" />
-		</configuration>
-	</instance>
-
-	<!-- ******************** CONF1 ******************** -->
-	<!-- Configuration name -->
-	<instance name="CONF1">
-		<!-- Configurations parameters StorkSamlEngine -->
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf1.xml" />
-		</configuration>
-
-		<!-- Settings module signature -->
-		<configuration name="SignatureConf">
-			<!-- Specific signature module -->
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<!-- Settings specific module -->
-			<parameter name="fileConfiguration" value="SignModule_Conf1.xml" />
-		</configuration>
-	</instance>
-
-	<!-- ******************** CONF2 ******************** -->
-
-	<instance name="CONF2">
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf2.xml" />
-		</configuration>
-
-		<configuration name="SignatureConf">
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<parameter name="fileConfiguration" value="SignModule_Conf2.xml" />
-		</configuration>
-	</instance>
-
-	<!-- ******************** CONF3 ******************** -->
-
-	<instance name="CONF3">
-		<configuration name="SamlEngineConf">
-			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf3.xml" />
-		</configuration>
-
-		<configuration name="SignatureConf">
-			<parameter name="class"
-				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
-			<parameter name="fileConfiguration" value="SignModule_Conf3.xml" />
-		</configuration>
-	</instance>
-
-</instances>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf0.xml b/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf0.xml
deleted file mode 100644
index a9f2038b8..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf0.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<!-- properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry0.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=saml-demo-cert,OU=STORK2,O=Advania,L=Reykjavik,ST=Reykjavik,C=IS</entry>
-	<entry key="serialNumber">524D4C6C</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties-->
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\storkDemoKeysTest.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf1.xml b/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf1.xml
deleted file mode 100644
index e556a7331..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf1.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\storkDemoKeysTest.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf2.xml b/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf2.xml
deleted file mode 100644
index 3da1e33df..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry2.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf3.xml b/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf3.xml
deleted file mode 100644
index 4c14a1711..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_Conf3.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SWModule sign with JKS.</comment>
-	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry3.jks</entry>
-	<entry key="keyStorePassword">local-demo</entry>
-	<entry key="keyPassword">local-demo</entry>
-	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
-	<entry key="serialNumber">4BA89DB2</entry>
-	<entry key="keystoreType">JKS</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_P11.xml b/id/server/SamlEngine-VIDP/target/test-classes/SignModule_P11.xml
deleted file mode 100644
index c683d97c3..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/SignModule_P11.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>HWModule sign with interface PKCS11.</comment>
-	<entry key="configurationFile">p11Config.cfg</entry>
-	<entry key="keyPassword">*******</entry>
-	<entry key="issuer">CN=XXXXXXXXX</entry>
-	<entry key="serialNumber">xxxxxxxxxxxxxx</entry>
-	<entry key="keystoreType">PKCS11</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf0.xml b/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf0.xml
deleted file mode 100644
index 8c3a94601..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf0.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-
-	<!-- Allow values: 'obtained', 'prior', 'current-implicit', 'current-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-
-
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. <entry key="eIDSectorShare">true</entry> <entry key="eIDCrossSectorShare">true</entry> 
-		<entry key="eIDCrossBorderShare">true</entry> -->
-
-
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="friendlyName">false</entry>
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="isRequired">true</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time (positive 
-		number) -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-
-	<entry key="textResidenceAddress">http://www.stork.gov.eu/1.0/textResidenceAddress</entry>
-	<entry key="canonicalResidenceAddress">http://www.stork.gov.eu/1.0/canonicalResidenceAddress</entry>
-
-	<entry key="title">http://www.stork.gov.eu/1.0/title</entry>
-	<entry key="residencePermit">http://www.stork.gov.eu/1.0/residencePermit</entry>
-
-	<entry key="signedDoc">http://www.stork.gov.eu/1.0/signedDoc</entry>
-	<entry key="citizen509Certificate">http://www.stork.gov.eu/1.0/citizen509Certificate</entry>
-
-	<entry key="newAttribute1">http://www.stork.gov.eu/1.0/newAttribute1</entry>
-	<entry key="newAttribute2">http://www.stork.gov.eu/1.0/newAttribute2</entry>
-	<entry key="hasDegree">http://www.stork.gov.eu/1.0/hasDegree</entry>
-	<entry key="mandateContent">http://www.stork.gov.eu/1.0/mandateContent</entry>
-
-	<entry key="docRequest">http://www.stork.gov.eu/1.0/docRequest</entry>
-	
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf1.xml b/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf1.xml
deleted file mode 100644
index ad04cc3df..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf1.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-
-	<!-- Allow values: 'obtained', 'prior', 'current-implicit', 'current-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-
-
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. <entry key="eIDSectorShare">true</entry> <entry key="eIDCrossSectorShare">true</entry> 
-		<entry key="eIDCrossBorderShare">true</entry> -->
-
-
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="friendlyName">false</entry>
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="isRequired">true</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time (positive 
-		number) -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-
-	<entry key="textResidenceAddress">http://www.stork.gov.eu/1.0/textResidenceAddress</entry>
-	<entry key="canonicalResidenceAddress">http://www.stork.gov.eu/1.0/canonicalResidenceAddress</entry>
-
-	<entry key="title">http://www.stork.gov.eu/1.0/title</entry>
-	<entry key="residencePermit">http://www.stork.gov.eu/1.0/residencePermit</entry>
-
-	<entry key="signedDoc">http://www.stork.gov.eu/1.0/signedDoc</entry>
-	<entry key="citizen509Certificate">http://www.stork.gov.eu/1.0/citizen509Certificate</entry>
-
-	<entry key="newAttribute1">http://www.stork.gov.eu/1.0/newAttribute1</entry>
-	<entry key="newAttribute2">http://www.stork.gov.eu/1.0/newAttribute2</entry>
-	<entry key="hasDegree">http://www.stork.gov.eu/1.0/hasDegree</entry>
-	<entry key="mandateContent">http://www.stork.gov.eu/1.0/mandateContent</entry>
-
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf2.xml b/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf2.xml
deleted file mode 100644
index fd1db92ac..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf2.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-	<!-- Allow values: 'obtained', 'prior', 'curent-implicit', 'curent-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-	<entry key="eIDSectorShare">false</entry>
-	<entry key="eIDCrossSectorShare">false</entry>
-	<entry key="eIDCrossBorderShare">false</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-	<!-- A friendly name for the attribute that can be displayed to a user -->
-	<entry key="isRequired">false</entry>
-
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf3.xml b/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf3.xml
deleted file mode 100644
index bea40d274..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/StorkSamlEngine_Conf3.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-	<comment>SAML constants for AuthnRequests and Responses.</comment>
-
-	<!-- Types of consent obtained from the user for this authentication and 
-		data transfer. Allow values: 'unspecified'. -->
-	<entry key="consentAuthnRequest">unspecified</entry>
-	<!-- Allow values: 'obtained', 'prior', 'curent-implicit', 'curent-explicit', 
-		'unspecified'. -->
-	<entry key="consentAuthnResponse">obtained</entry>
-
-	<!--URI representing the classification of the identifier Allow values: 
-		'entity'. -->
-	<entry key="formatEntity">entity</entry>
-
-	<!--Only HTTP-POST binding is only supported for inter PEPS -->
-	<!--The SOAP binding is only supported for direct communication between 
-		SP-MW and VIdP -->
-	<entry key="protocolBinding">HTTP-POST</entry>
-
-	<entry key="eIDSectorShare">false</entry>
-	<entry key="eIDCrossSectorShare">false</entry>
-	<entry key="eIDCrossBorderShare">false</entry>
-
-	<!--PEPS in the Service Provider's country -->
-	<entry key="requester">http://S-PEPS.gov.xx</entry>
-
-	<!--PEPS in the citizen's origin country -->
-	<entry key="responder">http://C-PEPS.gov.xx</entry>
-
-	<!--Subject cannot be confirmed on or after this seconds time -->
-	<entry key="timeNotOnOrAfter">300</entry>
-
-	<!--Validation IP of the response -->
-	<entry key="ipAddrValidation">false</entry>
-
-	<!--Subject Attribute Definitions -->
-	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
-	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
-	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
-	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
-	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
-	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
-	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
-	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
-	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
-	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
-	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
-	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
-	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
-	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
-	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
-	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
-	<entry key="unknown">http://www.stork.gov.eu/1.0/unknown</entry>
-</properties>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml b/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
deleted file mode 100644
index 3764389e4..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
-	Destination="http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest" ID="_939726f0a02072f40b548de378612a50"
-	IssueInstant="2013-10-04T16:57:55.547Z" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignedInfo>
-			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
-			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
-			<ds:Reference URI="#_939726f0a02072f40b548de378612a50">
-				<ds:Transforms>
-					<ds:Transform
-						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
-					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
-						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
-							PrefixList="xs" />
-					</ds:Transform>
-				</ds:Transforms>
-				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
-				<ds:DigestValue>BgPDTVCv7BhiWIs6HsC06jaHaag=</ds:DigestValue>
-			</ds:Reference>
-		</ds:SignedInfo>
-		<ds:SignatureValue>dIC61bGi6Jqp1zSVojpjaVq9WaZcDtNImXgo1Dyze5/hJA07Sy4TaHu+/IuLEC99aLjM6rxh2UUNqpPaQCFlF5eVkVv/c4gHEZVyevhjJKTidqmnuhlI78PGMx2thfxFsHsPcqHqOzy1Z6w18K1ds6APQP+aXI9TNKis+pykn4nJititYuiSseD0VY0F4QnXx+U6k3raoi1CAFE5fe7EuI/KfxuhhQLAbLq90Vm8R94ITBjfSS25mXstXNe9zppTSjDB42ld1TjDovDwXAn5OxiZasIEb5m68sRlxgoQ/2/+ZdYNNINFLAwkCbb8MiCbGASd626Bme0Kx+ropeWdxw==</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIDXjCCAkagAwIBAgIEUk1MbDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJJUzESMBAGA1UE
-					CAwJUmV5a2phdmlrMRIwEAYDVQQHDAlSZXlramF2aWsxEDAOBgNVBAoMB0FkdmFuaWExDzANBgNV
-					BAsMBlNUT1JLMjEXMBUGA1UEAwwOc2FtbC1kZW1vLWNlcnQwHhcNMTMxMDAzMTA1MzEyWhcNMjMx
-					MDAzMTA1MzEyWjBxMQswCQYDVQQGEwJJUzESMBAGA1UECAwJUmV5a2phdmlrMRIwEAYDVQQHDAlS
-					ZXlramF2aWsxEDAOBgNVBAoMB0FkdmFuaWExDzANBgNVBAsMBlNUT1JLMjEXMBUGA1UEAwwOc2Ft
-					bC1kZW1vLWNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCkSgTxZkNRXZTKLB0c
-					4oz7/8Dh56FX+0cYg7hjw4e8vn+ITXkxzrmUH57FtsvKln4mq1H0FHXL80u3IiWX8qY+QLgNeKeB
-					m85lXuyOb3wWpKAaQvpLAkejGLCx22AN2L0WZkKZV2puwRQVsRHCq6U6vToJXDZ6Ui6ltKsAl/ZS
-					8qUFpiIvqD5ea4ohz4JsFE/uApRc7pbJ4VbOmAAeH/tQTayptq2kPb2vvUVk+2cH5J7UD+GCI88E
-					e+mS+C33tV9NmWUHL69mYEe8FXjumbKA5e9i1ejn9i0/BLUtHFonHnL9YFMim0foI7NNc5mNg9aw
-					vm0PuByVU3kuibQkqGBLAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAA9X5B4NBmVuhjECi+KOnRRX
-					5oUV+jbYKhGZODDPi+F4Uo7ZtPFQ6sS3tE54+8AoDl5zQ5q5fDDVXhB42IIIjDxHKo8cBXie5FZ6
-					mJtErvWZWYWdO0uV2OQAUALq2LieidqSFDJ+Pjl8w1New8oi3migwyE0jZo4Q97lJGDfJTruV0A2
-					JE/Gt6QAAcWhhN2hZl92pYkIi5OeqHXyzBUp5vg8LLfNmeyziCAiXDC1Sy/aQU/cllZ3zFJMrqZM
-					s2xBpmB4sF1YRbIrr2OqEVE6M6DUx+pAQOd2uogV3AMT9D5MYpckI1jx/o/Tto7ju74nIVOskDiN
-					K0FR8izxcT0HixM=</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="false" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16</stork:AttributeValue>
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">18</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">Sveinbjorn</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">ES/IS/1234567890</stork:AttributeValue>
-			</stork:RequestedAttribute>
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-	<saml2:Subject>
-		<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer" />
-	</saml2:Subject>
-</saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml b/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
deleted file mode 100644
index d64572829..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" AssertionConsumerServiceURL="http://S-PEPS.gov.xx/PEPS/ColleagueResponse" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest" ID="_334488599e0c2781ff34857c4964debb" IssueInstant="2014-02-06T22:09:18.113Z" Version="2.0"><saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><ds:Reference URI="#_334488599e0c2781ff34857c4964debb"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xs"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>X1nUVB6qXdoKbJzNekiSo9ExLdw=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>ExCPHHC/9OhdhOl1Ou+43Qw1nvskpbMYMu9vqa7m16doxM2PIUmK7LUw7hZiKtjIdBxuhpca3OrjO8O6MuTDN1FksWoj+7B1KTLFtmspucT5O7Cu2OqhK5WIVuCaLuA7CD0N2UfFouRwR5NlLHyzn9Trd7IM5OjA41dGb5jqYl7Ir+62+MgjhZRlLooDzb5fDAczbxv9LHGiKRBpgnk40w3gDAvoSPNdEuKhZi8LPQWWNBvVi3N5ZmJmAIacZWBqePywXTjygmChWAc8p7ptAX6tw0hpBxyxoW3aaZZzWQNcwobTRYbn89fcM11gqIz/YK7VXtiQ7WEQt1enQD/GAA==</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIDIjCCAgqgAwIBAgIES6idsjANBgkqhkiG9w0BAQUFADBTMQswCQYDVQQGEwJFUzEOMAwGA1UE
-CAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExEzARBgNVBAMMCmxvY2Fs
-LWRlbW8wHhcNMTMwODI4MTY0NzM1WhcNMTUwODI4MTY0NzM1WjBTMQswCQYDVQQGEwJFUzEOMAwG
-A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExEzARBgNVBAMMCmxv
-Y2FsLWRlbW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx+7zEQUbt8Ot9dByR5TuY
-NPmTwaKhECtnkxYAx9tl+Ga3kFiv+dOSeDoQOhxkICG1ZMaG0Gtk0EQWjscC1cLwDXpAOdhOm5xh
-ndFHxa3V3Y3zomFZA7A3nwP8wt17wDrc1xi2Ye8VrwO7Vjb/F8Rgutlcrvq+LF4g9nQLoRiKUq8w
-NFvDlvhBbLr8hMVBMY/jY7tSQ85qLqKUkWRcoDttJjgWZoO1vpBS4m+FywtYdOoHnN6fv4Dvf1r2
-rNLgebgBvSfwznxiulwW6FBLasYX0rYKP7RfwG8TJ+FumOgAjADj2LdwK25RZNg44XU2V1z1Fp37
-fNXhfo08LpdD1ueFAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBADMRGTWOmadZyCoJNluV+M7LopjC
-9WpFUj76X0cAoNXmt12zYqYe8hjRmBr6l2V/FXT3/TyWET1nILG46zwwAxslw3b2LvkhU+9QcuB8
-yC8TCJJ0kgsTZ/EUZPSbwUG7Nn2jkMiyjlyKcjSCQOzEKQyR1xYwyZG40+BPeGbYjmRgm6kcmCxY
-USWoPwNyfke9gNT80f0pUj7wJ9YwWbTIz1rhf/h7rxoMYypXo+JXwaXW/Ra8v1uDcwfKpE5ZgwAU
-nubLXF4A+H7/N7ZvB5XDwJ4W+99nuPsKfwacD8m1sflTXcEPzzhOq6iQ9anJT94/pMctnp827zXA
-y66jvDrin5I=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><saml2p:Extensions><stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel><stork:spCountry>IS</stork:spCountry><storkp:eIDSectorShare>false</storkp:eIDSectorShare><storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare><storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare><storkp:RequestedAttributes><stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/docRequest" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"><stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:anyType">IS/IS/fbea6e68-0393-401b-b616-f767fff9418c</stork:AttributeValue></stork:RequestedAttribute></storkp:RequestedAttributes></saml2p:Extensions><saml2:Subject><saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/></saml2:Subject></saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml b/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
deleted file mode 100644
index becc689fe..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
-	Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest" ID="_f6c8fc355b9f125cb5283f038e1b3cdf"
-	IssueInstant="2013-10-03T10:28:15.449Z" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignatureValue>hhQXDKNrJJ3Yy/pkZNZF4GlWrA/Xsx4CH9chgVa5HK4qZQvFXvZwegdw6U7rm7qv0zmI4xaLTv/bpmqJzEPfY3sIvrDRu9EouEKwtjbMbcvVQsx7I+j0yy7/cBcQJe3lRwQwyvazfYVbnSeGFxBN6WOHPqv6uInaQO/hXkicT3tBtm8o3UgUDY6c8wIMuD5A0hWTkL6z6f893AbdN85OQYAdHItNsQWeLOIeiGC918X7qqTfhFtBAB2oGVjlsSEqWox1jNqrPl1jjA0dP76m5SIVSqF8XcDR306ZB9GLJywOHKba0lxGLsXOAzJ+8u9jeixJ6VZKFqZg2Fhl/saKbg==</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIDJzCCAg8CBEuonbIwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMCRVMxDjAMBgNVBAgMBVNw
-					YWluMQ8wDQYDVQQHDAZNYWRyaWQxDjAMBgNVBAoMBUluZHJhMRgwFgYDVQQDDA9sb2NhbC1kZW1v
-					LWNlcnQwHhcNMTAwMzIzMTA1MzM4WhcNMTAwNjAxMTA1MzM4WjBYMQswCQYDVQQGEwJFUzEOMAwG
-					A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExGDAWBgNVBAMMD2xv
-					Y2FsLWRlbW8tY2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfdQ1/mkM9sqqab
-					ri8qqqX4s0J6UEEXyF+0AjLU8RC4WMeYFSZ5tfwnyLsoXY0/9bZLXnBxSibQYaf4SnpZJhlVA4sU
-					0d8qyEWA2OvXGDCm7uspGHG3CRQa7fpHsmHmfIAqho9XDlwpwJdx5gK4Edc6aArcMQfjqMhy1s1n
-					6Of1i1lMGGsGrERIRY7biIQu/8nITbHH18sUAZMG1u/Q0Avi9O3LWyswHXUouZ818fWwG6xru2N5
-					y6vtVO/SL3doRSdqYkEms93TgxTtaKg8XNe24zhNTte6nvWLaKesi2KzZGC57HU47HBFEs8NWk7z
-					9BDf8uLyPz9VDahwVKzMto8CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAgpuReXQ7Dsfdoe5zzy2F
-					6kn1qqtMkRGsBPKnDFCI/GkIZpBiqlfwdh6sipnFKWfKEDlPKN1kEhbkDR2GA1Cp4F4ZSL/HumZM
-					pWabRhDxhTPvHIFbbShPDJY93+jw/yQeaWgMuhw3WzdH9TrVoRZH0Q7sG1pIJo5/6IogIZwFvJHT
-					/NDutKmurU6Lw8Vnde8PfnQd+FTEhz0SEGyKkWjAuhGbJfseBy/z3L+MJq1rdSQ9PF7wXDvWNzJq
-					yaNBUWWBV1TskvkNZXcaguroVPy2XhA1aixlAajWEXLk6Uuj5UYqalrV/reNYvDvY0BV2CIn51r7
-					Ppm8IFVTk8mYfX8/jw==</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="false" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16</stork:AttributeValue>
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">18</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">Sveinbjörn</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">ES/IS/1234567890</stork:AttributeValue>
-			</stork:RequestedAttribute>
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-	<saml2:Subject>
-		<saml2:SubjectConfirmation
-			Method="urn:oasis:names:tc:SAML:1.0:cm:sender-vouches" />
-	</saml2:Subject>
-</saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml b/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
deleted file mode 100644
index 7ea486812..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:obtained"
-	Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest" ID="_483140d440fc4eef8e949ace49669f2e"
-	InResponseTo="_0a22c1120bf2de912714c24e99dd38ed" IssueInstant="2013-10-08T09:11:17.255Z"
-	Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://C-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignedInfo>
-			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
-			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
-			<ds:Reference URI="#_483140d440fc4eef8e949ace49669f2e">
-				<ds:Transforms>
-					<ds:Transform
-						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
-					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
-						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
-							PrefixList="xs" />
-					</ds:Transform>
-				</ds:Transforms>
-				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
-				<ds:DigestValue>yMOVS1T/yRiVh3L6IBM9rR9Ie3w=</ds:DigestValue>
-			</ds:Reference>
-		</ds:SignedInfo>
-		<ds:SignatureValue>d8e/RyNNPmnHRIzTIuRSnW6B60oWGBGxjRua/HvNxTuod0qSarYJxEedhY9Wl1Z9WYXlry28FuKjp3DA3HhzNaVd7A7QpFqNC4dnizSVWFjxlhmoE/Uv3Y/ha9P/fk6nbtHCSKW4kHSX7QfFLeggcLmUG0IULRF8UmRdQ0WerCl0aSZZeSp8J3LsFBPeWCRSwXgfiLn+RehggzZmQU6g0ssxrpnsYEAtjAiOli+YVQGuumsZGaJ8zHA/DgJ2FTGovNUyfuSUFLhd9nLlSqFs2Avnx0Ck7Q1dxDO5truOm6e285YLHqLaGdetFyPQAj/Z4w4RJ5u5X6d7rhBjTfRAAw==</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIDJzCCAg8CBEuonbIwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMCRVMxDjAMBgNVBAgMBVNw
-					YWluMQ8wDQYDVQQHDAZNYWRyaWQxDjAMBgNVBAoMBUluZHJhMRgwFgYDVQQDDA9sb2NhbC1kZW1v
-					LWNlcnQwHhcNMTAwMzIzMTA1MzM4WhcNMTAwNjAxMTA1MzM4WjBYMQswCQYDVQQGEwJFUzEOMAwG
-					A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExGDAWBgNVBAMMD2xv
-					Y2FsLWRlbW8tY2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfdQ1/mkM9sqqab
-					ri8qqqX4s0J6UEEXyF+0AjLU8RC4WMeYFSZ5tfwnyLsoXY0/9bZLXnBxSibQYaf4SnpZJhlVA4sU
-					0d8qyEWA2OvXGDCm7uspGHG3CRQa7fpHsmHmfIAqho9XDlwpwJdx5gK4Edc6aArcMQfjqMhy1s1n
-					6Of1i1lMGGsGrERIRY7biIQu/8nITbHH18sUAZMG1u/Q0Avi9O3LWyswHXUouZ818fWwG6xru2N5
-					y6vtVO/SL3doRSdqYkEms93TgxTtaKg8XNe24zhNTte6nvWLaKesi2KzZGC57HU47HBFEs8NWk7z
-					9BDf8uLyPz9VDahwVKzMto8CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAgpuReXQ7Dsfdoe5zzy2F
-					6kn1qqtMkRGsBPKnDFCI/GkIZpBiqlfwdh6sipnFKWfKEDlPKN1kEhbkDR2GA1Cp4F4ZSL/HumZM
-					pWabRhDxhTPvHIFbbShPDJY93+jw/yQeaWgMuhw3WzdH9TrVoRZH0Q7sG1pIJo5/6IogIZwFvJHT
-					/NDutKmurU6Lw8Vnde8PfnQd+FTEhz0SEGyKkWjAuhGbJfseBy/z3L+MJq1rdSQ9PF7wXDvWNzJq
-					yaNBUWWBV1TskvkNZXcaguroVPy2XhA1aixlAajWEXLk6Uuj5UYqalrV/reNYvDvY0BV2CIn51r7
-					Ppm8IFVTk8mYfX8/jw==</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Status>
-		<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
-		<saml2p:StatusMessage>urn:oasis:names:tc:SAML:2.0:status:Success</saml2p:StatusMessage>
-	</saml2p:Status>
-	<saml2:Assertion ID="_9ed05849dee5c154e62fa9e3ba53e9f3"
-		IssueInstant="2013-10-08T09:11:17.255Z" Version="2.0">
-		<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://C-PEPS.gov.xx</saml2:Issuer>
-		<saml2:Subject>
-			<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
-				NameQualifier="http://C-PEPS.gov.xx">urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</saml2:NameID>
-			<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
-				<saml2:SubjectConfirmationData
-					Address="111.222.333.444" InResponseTo="_0a22c1120bf2de912714c24e99dd38ed"
-					NotOnOrAfter="2013-10-08T09:16:17.255Z" />
-			</saml2:SubjectConfirmation>
-		</saml2:Subject>
-		<saml2:Conditions NotBefore="2013-10-08T09:11:17.255Z"
-			NotOnOrAfter="2013-10-08T09:16:17.255Z">
-			<saml2:AudienceRestriction>
-				<saml2:Audience>http://S-PEPS.gov.xx</saml2:Audience>
-			</saml2:AudienceRestriction>
-			<saml2:OneTimeUse />
-		</saml2:Conditions>
-		<saml2:AuthnStatement AuthnInstant="2013-10-08T09:11:17.255Z">
-			<saml2:SubjectLocality Address="111.222.333.444" />
-			<saml2:AuthnContext>
-				<saml2:AuthnContextDecl />
-			</saml2:AuthnContext>
-		</saml2:AuthnStatement>
-		<saml2:AttributeStatement>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16/12/2008</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute
-				Name="http://www.stork.gov.eu/1.0/canonicalResidenceAddress"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">
-					<stork:postalCode xsi:type="xs:anyType">105</stork:postalCode>
-					<stork:state xsi:type="xs:anyType">IS</stork:state>
-					<stork:streetNumber xsi:type="xs:anyType">10</stork:streetNumber>
-					<stork:streetName xsi:type="xs:anyType">Gudrunartun</stork:streetName>
-					<stork:town xsi:type="xs:anyType">Reykjavik</stork:town>
-				</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/newAttribute2"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">
-					<stork:value3 xsi:type="xs:anyType">value3</stork:value3>
-					<stork:value4 xsi:type="xs:anyType">value4</stork:value4>
-					<stork:value1 xsi:type="xs:anyType">value1</stork:value1>
-					<stork:value2 xsi:type="xs:anyType">value2</stork:value2>
-				</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">16</saml2:AttributeValue>
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">18</saml2:AttributeValue>
-			</saml2:Attribute>
-			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				stork:AttributeStatus="Available">
-				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-					xsi:type="xs:anyType">123456789IS</saml2:AttributeValue>
-			</saml2:Attribute>
-		</saml2:AttributeStatement>
-	</saml2:Assertion>
-</saml2p:Response>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml b/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
deleted file mode 100644
index c48bfde95..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	AssertionConsumerServiceURL="http://S-PEPS.gov.xx/PEPS/ColleagueResponse"
-	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest"
-	ForceAuthn="true" ID="_e54eee285e7b8e2772875c406ec39674" IsPassive="false"
-	IssueInstant="2010-06-08T07:37:54.533Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
-	ProviderName="University of Oxford" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignedInfo>
-			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
-			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
-			<ds:Reference URI="#_e54eee285e7b8e2772875c406ec39674">
-				<ds:Transforms>
-					<ds:Transform
-						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
-					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
-						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
-							PrefixList="ds saml2 saml2p stork storkp xs" />
-					</ds:Transform>
-				</ds:Transforms>
-				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
-				<ds:DigestValue>yzsqaxBNicOrixBUno5cL0CBOpE=</ds:DigestValue>
-			</ds:Reference>
-		</ds:SignedInfo>
-		<ds:SignatureValue>
-			Xycll1PF7hh3Xdykpr6nIr8Q6PQ6OxLIBBBugoGpAm/V4Hu7tKakHJp8TgtRWZ30jG5eolOXnJkC
-			wiaTVUFaQz7cNn27syRJkdA+eYlz9doiwUJ5eD1cAyddZYsNPpSeAj5UK45oN0qCH+/pI9mRw8Oi
-			YIN/BUEtXkoYTjPtkmA=
-		</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIBmDCCAQECBEuWisIwDQYJKoZIhvcNAQEFBQAwEzERMA8GA1UEAxMIY291bnRyeTEwHhcNMTAw
-					MzA5MTc1MjAyWhcNMTAwNjA3MTc1MjAyWjATMREwDwYDVQQDEwhjb3VudHJ5MTCBnzANBgkqhkiG
-					9w0BAQEFAAOBjQAwgYkCgYEAnb2gcchwxvJBclcsfCBWJnYefLJYQnDGCQ3RUtYZc26JznnLXclu
-					h1XfLJlWgYk/pFKz7B9KfJztal47c6mBfisnxjhdcLqcbXOuRIm7E8TZPzdbHEd60WHPDv20jr+r
-					/WkOQs12tKQMbgDX2wtBBcJODLYCDiYa1oQsnyhdOGkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBk
-					3luVRc0EqEE1zZeYvRPi5a2yOZfI9H+/rXI1qNLwmICnuJX++ukUbqJHm/FV1iSPM9O9oqzifJ/K
-					eKL5EcUugJ76Tu5XO8za2FoJvYr+jIZDsEkCg+OSzcp/eljiWAIh2enZcQ/ON6QxWXeSNJPH0xOq
-					KAoZgbUK0Zld3Dsheg==</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<stork:spSector>EDU001</stork:spSector>
-		<stork:spInstitution>OXF001</stork:spInstitution>
-		<stork:spApplication>APP001</stork:spApplication>
-		<stork:spCountry>EN</stork:spCountry>
-		<storkp:eIDSectorShare>true</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>true</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>true</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true">
-				<stork:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
-					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">16</stork:AttributeValue>
-				<stork:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
-					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">18</stork:AttributeValue>
-			</stork:RequestedAttribute>
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="false" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml b/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
deleted file mode 100644
index 8766f9a8b..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:stork" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	AssertionConsumerServiceURL="http://localhost:8080/SP/ReturnPage"
-	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://locahost:8080/PEPS/ServiceProvider"
-	ForceAuthn="true" ID="_0c64ff85-1323-4618-847b-12d1983b86e4" IsPassive="false"
-	IssueInstant="2010-04-07T16:45:03.593Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
-	ProviderName="PT-SP" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignatureValue>
-			S6nY97RSCUJXq3HZ5obSLCI341LvtAA3vHjR1FWxrIMDPACQMqlNWBYNnRP1RiZiJV6x0RieH+SR
-			Vkiy03jYyhr0XkwAE5Wd6Huf+zIbeTXjZkdQj7JpAXoB+ky4G/+L0deamvsP3eO7ZJ4grady4gmC
-			Xt8p8tK3EoMocZse2hw=
-		</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIBkTCB+wIESpT8bTANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVzdG9yazAeFw0wOTA4MjYw
-					OTEyMTNaFw0wOTExMjQwOTEyMTNaMBAxDjAMBgNVBAMTBXN0b3JrMIGfMA0GCSqGSIb3DQEBAQUA
-					A4GNADCBiQKBgQDK/QL8NuMd41I1lObObeRA6DaM8bjeYqIz5mg5WnnZv4jlcK7Gq89Lk6htXRFl
-					lAXpDYhI3zolMIMHEMZ3zQQPc7lgTV6Bbz9uD2YTJ9Kx55e8Y6Y49DO+TiiejGJxTzTFUcuBJHaK
-					ipuvLVd1a8N3RAnaGSUOozhrTqxba82mEwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFJgeS18nhUl
-					r7WnvSn9FlkI94U//Hk3iZLc3/cScTu7D7Y/J0eUq4TF8PsSzWX5khGuqrTkswNgfEtl2IpACQ2w
-					kB8+RxeRNdddQlGHlO4ZqnpvxXBwSouiy2yUeAo0y++vMFm6DO4sxfk8eTtimPDo5SzBtjtGtbqS
-					3cyl/wz8</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute
-				Name="http://www.stork.gov.eu/1.0/nationalityCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml b/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
deleted file mode 100644
index 1b1e1646c..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
-	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:stork" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
-	AssertionConsumerServiceURL="http://localhost:8080/SP/ReturnPage"
-	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://localhost:8080/PEPS/ServiceProvider"
-	ForceAuthn="true" ID="_0c64ff85-1323-4618-847b-12d1983b86e4" IsPassive="false"
-	IssueInstant="2010-04-07T16:45:03.593Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
-	ProviderName="PT-SP" Version="2.0">
-	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
-	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-		<ds:SignatureValue>
-			S6nY97RSCUJXq3HZ5obSLCI341LvtAA3vHjR1FWxrIMDPACQMqlNWBYNnRP1RiZiJV6x0RieH+SR
-			Vkiy03jYyhr0XkwAE5Wd6Huf+zIbeTXjZkdQj7JpAXoB+ky4G/+L0deamvsP3eO7ZJ4grady4gmC
-			Xt8p8tK3EoMocZse2hw=
-		</ds:SignatureValue>
-		<ds:KeyInfo>
-			<ds:X509Data>
-				<ds:X509Certificate>MIIBkTCB+wIESpT8bTANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVzdG9yazAeFw0wOTA4MjYw
-					OTEyMTNaFw0wOTExMjQwOTEyMTNaMBAxDjAMBgNVBAMTBXN0b3JrMIGfMA0GCSqGSIb3DQEBAQUA
-					A4GNADCBiQKBgQDK/QL8NuMd41I1lObObeRA6DaM8bjeYqIz5mg5WnnZv4jlcK7Gq89Lk6htXRFl
-					lAXpDYhI3zolMIMHEMZ3zQQPc7lgTV6Bbz9uD2YTJ9Kx55e8Y6Y49DO+TiiejGJxTzTFUcuBJHaK
-					ipuvLVd1a8N3RAnaGSUOozhrTqxba82mEwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFJgeS18nhUl
-					r7WnvSn9FlkI94U//Hk3iZLc3/cScTu7D7Y/J0eUq4TF8PsSzWX5khGuqrTkswNgfEtl2IpACQ2w
-					kB8+RxeRNdddQlGHlO4ZqnpvxXBwSouiy2yUeAo0y++vMFm6DO4sxfk8eTtimPDo5SzBtjtGtbqS
-					3cyl/wz8</ds:X509Certificate>
-			</ds:X509Data>
-		</ds:KeyInfo>
-	</ds:Signature>
-	<saml2p:Extensions>
-		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
-		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
-		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
-		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
-		<storkp:RequestedAttributes>
-			<stork:RequestedAttribute
-				Name="http://www.stork.gov.eu/1.0/nationalityCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
-				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
-				isRequired="true" />
-		</storkp:RequestedAttributes>
-	</saml2p:Extensions>
-</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SSETestUtils.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SSETestUtils.class
deleted file mode 100644
index 04ee36e06..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SSETestUtils.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SimpleBaseTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SimpleBaseTest.class
deleted file mode 100644
index d2e26053d..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/SimpleBaseTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.class
deleted file mode 100644
index ef33ccfac..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.class
deleted file mode 100644
index d6a90501c..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAuthRequestTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAuthRequestTest.class
deleted file mode 100644
index 9aae365f2..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkAuthRequestTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutRequestTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutRequestTest.class
deleted file mode 100644
index 8edfc3c0a..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutRequestTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutResponseTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutResponseTest.class
deleted file mode 100644
index 6381cbbd4..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkLogoutResponseTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkNewResponseTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkNewResponseTest.class
deleted file mode 100644
index c7c95781f..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkNewResponseTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkResponseTest.class b/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkResponseTest.class
deleted file mode 100644
index 36c9d64eb..000000000
Binary files a/id/server/SamlEngine-VIDP/target/test-classes/eu/stork/peps/test/simple/StorkResponseTest.class and /dev/null differ
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/logback-test.xml b/id/server/SamlEngine-VIDP/target/test-classes/logback-test.xml
deleted file mode 100644
index 99d7d353a..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/logback-test.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Basic configuration used until the IdP can load the real configuration -->
-<configuration>
-
-	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-		<layout class="ch.qos.logback.classic.PatternLayout">
-			<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-			</Pattern>
-		</layout>
-	</appender>
-
-	<logger name="eu.stork">
-		<level value="DEBUG" />
-	</logger>
-
-	<root>
-		<appender-ref ref="STDOUT" />
-		<level value="INFO" />
-	</root>
-
-</configuration>
\ No newline at end of file
diff --git a/id/server/SamlEngine-VIDP/target/test-classes/p11Conf.cfg b/id/server/SamlEngine-VIDP/target/test-classes/p11Conf.cfg
deleted file mode 100644
index bd9f357ce..000000000
--- a/id/server/SamlEngine-VIDP/target/test-classes/p11Conf.cfg
+++ /dev/null
@@ -1,24 +0,0 @@
-//ATTRIBUTE			VALUE
-//name				name suffix of this provider instance
-//library			pathname of PKCS#11 implementation
-//slotListIndex		slot index
-
-//PREFIX			DESCRIPTION
-//CKO_ 				Object class
-//CKA_ 				Attribute
-//CKK_ 				Key type
-
-//attributes(operation, keytype, keyalgorithm) = {
-//  name1 = value1
-//  [...]
-//}
-
-name=nameProvider
-library=library.dll
-slotListIndex=0
-attributes(*,CKO_PUBLIC_KEY,CKK_RSA)={
-	CKA_VERIFY=true
-}
-attributes(*,CKO_PRIVATE_KEY,CKK_RSA)={
-	CKA_SIGN=true
-}	
\ No newline at end of file
diff --git a/id/server/stork2-commons/.svn/all-wcprops b/id/server/stork2-commons/.svn/all-wcprops
new file mode 100644
index 000000000..013d868be
--- /dev/null
+++ b/id/server/stork2-commons/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons
+END
+pom.xml
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/pom.xml
+END
+Releases
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/Releases
+END
diff --git a/id/server/stork2-commons/.svn/dir-prop-base b/id/server/stork2-commons/.svn/dir-prop-base
new file mode 100644
index 000000000..9dc541cfd
--- /dev/null
+++ b/id/server/stork2-commons/.svn/dir-prop-base
@@ -0,0 +1,10 @@
+K 10
+svn:ignore
+V 44
+.classpath
+.project
+.settings
+report
+target
+
+END
diff --git a/id/server/stork2-commons/.svn/entries b/id/server/stork2-commons/.svn/entries
new file mode 100644
index 000000000..6956e0c9c
--- /dev/null
+++ b/id/server/stork2-commons/.svn/entries
@@ -0,0 +1,99 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+Releases
+file
+
+
+
+
+2014-03-05T09:36:08.094515Z
+5013e8d011c7d67a3faac86ae0ec7aae
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2653
+
+src
+dir
+
+pom.xml
+file
+
+
+
+
+2014-03-05T09:36:08.086515Z
+c245a61144c036e0dc82e0adfed566aa
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5777
+
diff --git a/id/server/stork2-commons/.svn/text-base/Releases.svn-base b/id/server/stork2-commons/.svn/text-base/Releases.svn-base
new file mode 100644
index 000000000..6550affd0
--- /dev/null
+++ b/id/server/stork2-commons/.svn/text-base/Releases.svn-base
@@ -0,0 +1,73 @@
+Created 06-04-2011
+
+Branch : STORKCommons_0_5_UPDATE_06042011
+Date   : 06-04-2011
+Changes: No changes.
+
+Branch : STORKCommons_0_5_UPDATE_07072011
+Date   : 07-07-2011
+Changes: Inserted constants to HttpOnly HTTP Header.
+
+Branch : STORKCommons_0_6
+Date   : 07-11-2011
+Changes: Improved error exception handling (few changes on the exception classes).
+         Improved Constansts (unused removed, others added).
+         Unit Tests include (almost all the code is cover).
+         Fix some minor bugs found on unit tests.
+         New Copyright License added.
+         PEPUtils refactored.
+         Improved error code message (three kind of messages: to citizen, admin and saml token).
+
+Branch : STORKCommons_0_6_1
+Date   : 28-11-2011
+Changes: Removed unnecessary javadoc package file.
+         Updated pepsUtils.properties file (check attribute value had old error message)
+
+Branch : STORKCommons_0_9
+Date   : 02-12-2011
+Changes: Updated Version to 0.9
+
+Branch : STORKCommons_1_0
+Date   : 02-12-2011
+Changes: Updated Version to 1.0
+
+Branch : STORKCommons_1_1_0
+Date   : 01-11-2013
+Changes: Updated Version to 1.1.0
+		 Dependencies updated
+	     Business Logic Part I changes
+	     SAML Engine Changes merged (from SamlEngine/1.1.0/Commons branch to be easier to merge this branch with trunk)
+         Fixed some errors on Test Case	    
+         
+Branch : STORKCommons_1_1_1
+Date   : 02-12-2013
+Changes: Updated Version to 1.1.1
+		 Added mandate error code
+	     PMD quality code changes (some final identifier missing)
+	     Added new methods to personal attribute list to get Mandatory/Optional and/or Simple/Complex attributes
+	     Added new unit tests     
+
+Branch : Commons_1_1_2
+Date   : 13-12-2013
+Changes: Updated Version to 1.1.2
+         Added request flow of PV (incomplete)
+         Added AP mandatory attribute to get data for business attributes
+          *) based on configuration file it adds the missing attributes (eIdentifier, givenName, surname and dateOfBirth) or change isRequired to true.
+             changes original isRequired state in response
+         Added new Interface (IAttributeListProcessor) to make some operations on attribute lists
+       
+Branch : Commons_1_1_3
+Date   : 21-12-2013
+Changes: Updated Version to 1.1.3
+         Power Validation is complete now
+		 Business Logic I and II integration (Request Complete!)         
+
+Branch : Commons_1_1_4
+Date   : 08-01-2014
+Changes: Updated Version to 1.1.4
+         Added new method to Personal attribute List to check if there is at least one attribute with no value.
+
+Branch : Commons_1_4_0
+Date   : 28-02-2014
+Changes: Updated Version to 1.4.0
+         Removed AUB
\ No newline at end of file
diff --git a/id/server/stork2-commons/.svn/text-base/pom.xml.svn-base b/id/server/stork2-commons/.svn/text-base/pom.xml.svn-base
new file mode 100644
index 000000000..04b35f5f5
--- /dev/null
+++ b/id/server/stork2-commons/.svn/text-base/pom.xml.svn-base
@@ -0,0 +1,213 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>eu.stork</groupId>
+	<artifactId>Commons</artifactId>
+	<packaging>jar</packaging>
+	<name>Stork Commons</name>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<stork.version>1.4.0</stork.version>
+		<opensaml.version>2.6.0</opensaml.version>
+	</properties>
+	<version>${stork.version}</version>
+  <description>
+        The STORKCommons library provides beans, Java Interfaces and utility classes to integrate PEPS and SAML Engine.
+  </description>
+   
+	<dependencies>
+
+		<!-- Joda -->
+		<dependency>
+			<groupId>joda-time</groupId>
+			<artifactId>joda-time</artifactId>
+			<version>2.3</version>
+		</dependency>
+
+		<!-- Log4J -->
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.17</version>
+			<exclusions>
+				<exclusion>
+					<groupId>javax.jms</groupId>
+					<artifactId>jms</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>com.sun.jdmk</groupId>
+					<artifactId>jmxtools</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>com.sun.jmx</groupId>
+					<artifactId>jmxri</artifactId>
+				</exclusion>
+				<exclusion>
+					<artifactId>mail</artifactId>
+					<groupId>javax.mail</groupId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opensaml</groupId>
+			<artifactId>opensaml</artifactId>
+			<version>${opensaml.version}</version>
+			<exclusions>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>slf4j-api</artifactId>
+				</exclusion>
+				<exclusion>
+				 	<groupId>org.slf4j</groupId>
+				    <artifactId>slf4j-simple</artifactId>
+				</exclusion>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>jcl-over-slf4j</artifactId>
+				</exclusion>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>log4j-over-slf4j</artifactId>
+				</exclusion>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>jul-to-slf4j</artifactId>
+				</exclusion>
+			</exclusions>			
+		</dependency>
+
+		<!-- Bouncy Castle -->
+		<dependency>
+			<groupId>org.bouncycastle</groupId>
+			<artifactId>bcprov-jdk16</artifactId>
+			<version>1.46</version>
+		</dependency>
+
+		<!-- Servlet API -->
+		<!-- provided by Application Server -->
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.5</version>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.6</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<finalName>commons</finalName>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>3.1</version>
+					<configuration>
+						<source>1.7</source>
+						<target>1.7</target>
+					</configuration>
+				</plugin>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-surefire-plugin</artifactId>
+					<configuration>
+            			<runOrder>reversealphabetical</runOrder>
+						<skip>false</skip>
+          				<includes>
+                            <runOrder>reversealphabetical</runOrder>
+				            <include>**/PEPSUtilTest.java</include>
+				            <include>**/PersonalAttributeTestCase.java</include>
+				            <include>**/PersonalAttributeListTestCase.java</include>
+            				<include>**/DateUtilTestCase.java</include>
+				            <include>**/AttributeUtilTest.java</include>
+          				</includes>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.9.1</version>
+				<configuration>
+					<links>
+						<link>http://commons.apache.org/lang/api/</link>
+						<link>http://java.sun.com/j2se/1.6.0/docs/api/</link>
+						<link>http://www.bouncycastle.org/docs/docs1.6/</link>
+						<link>http://docs.oracle.com/javase/6/docs/api/</link>
+					</links>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<version>2.2.1</version>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>jar-no-fork</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<testResources>
+			<testResource>
+				<directory>src/test/resources</directory>
+				<includes>
+					<include>log4j.xml</include>
+				</includes>
+			</testResource>
+		</testResources>
+	</build>
+	<profiles>
+		<profile>
+			<id>embedded</id>
+			<build>
+				<resources>
+					<resource>
+						<directory> ${project.basedir}/src/main/resources</directory>
+					</resource>
+					<resource>
+						<directory> ${project.basedir}/src/main/config/embedded</directory>
+					</resource>
+				</resources>
+			</build>
+		</profile>
+		<profile>
+			<id>metrics</id>
+			<build>
+			<plugins>
+				<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>cobertura-maven-plugin</artifactId>
+				<version>2.5.1</version>
+					<configuration>
+						<formats>
+							<format>html</format>
+							<format>xml</format>
+							</formats>
+					</configuration>
+				</plugin>
+			</plugins>
+			</build>
+		</profile>
+		</profiles>
+</project>
diff --git a/id/server/stork2-commons/Releases b/id/server/stork2-commons/Releases
new file mode 100644
index 000000000..6550affd0
--- /dev/null
+++ b/id/server/stork2-commons/Releases
@@ -0,0 +1,73 @@
+Created 06-04-2011
+
+Branch : STORKCommons_0_5_UPDATE_06042011
+Date   : 06-04-2011
+Changes: No changes.
+
+Branch : STORKCommons_0_5_UPDATE_07072011
+Date   : 07-07-2011
+Changes: Inserted constants to HttpOnly HTTP Header.
+
+Branch : STORKCommons_0_6
+Date   : 07-11-2011
+Changes: Improved error exception handling (few changes on the exception classes).
+         Improved Constansts (unused removed, others added).
+         Unit Tests include (almost all the code is cover).
+         Fix some minor bugs found on unit tests.
+         New Copyright License added.
+         PEPUtils refactored.
+         Improved error code message (three kind of messages: to citizen, admin and saml token).
+
+Branch : STORKCommons_0_6_1
+Date   : 28-11-2011
+Changes: Removed unnecessary javadoc package file.
+         Updated pepsUtils.properties file (check attribute value had old error message)
+
+Branch : STORKCommons_0_9
+Date   : 02-12-2011
+Changes: Updated Version to 0.9
+
+Branch : STORKCommons_1_0
+Date   : 02-12-2011
+Changes: Updated Version to 1.0
+
+Branch : STORKCommons_1_1_0
+Date   : 01-11-2013
+Changes: Updated Version to 1.1.0
+		 Dependencies updated
+	     Business Logic Part I changes
+	     SAML Engine Changes merged (from SamlEngine/1.1.0/Commons branch to be easier to merge this branch with trunk)
+         Fixed some errors on Test Case	    
+         
+Branch : STORKCommons_1_1_1
+Date   : 02-12-2013
+Changes: Updated Version to 1.1.1
+		 Added mandate error code
+	     PMD quality code changes (some final identifier missing)
+	     Added new methods to personal attribute list to get Mandatory/Optional and/or Simple/Complex attributes
+	     Added new unit tests     
+
+Branch : Commons_1_1_2
+Date   : 13-12-2013
+Changes: Updated Version to 1.1.2
+         Added request flow of PV (incomplete)
+         Added AP mandatory attribute to get data for business attributes
+          *) based on configuration file it adds the missing attributes (eIdentifier, givenName, surname and dateOfBirth) or change isRequired to true.
+             changes original isRequired state in response
+         Added new Interface (IAttributeListProcessor) to make some operations on attribute lists
+       
+Branch : Commons_1_1_3
+Date   : 21-12-2013
+Changes: Updated Version to 1.1.3
+         Power Validation is complete now
+		 Business Logic I and II integration (Request Complete!)         
+
+Branch : Commons_1_1_4
+Date   : 08-01-2014
+Changes: Updated Version to 1.1.4
+         Added new method to Personal attribute List to check if there is at least one attribute with no value.
+
+Branch : Commons_1_4_0
+Date   : 28-02-2014
+Changes: Updated Version to 1.4.0
+         Removed AUB
\ No newline at end of file
diff --git a/id/server/stork2-commons/pom.xml b/id/server/stork2-commons/pom.xml
new file mode 100644
index 000000000..04b35f5f5
--- /dev/null
+++ b/id/server/stork2-commons/pom.xml
@@ -0,0 +1,213 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>eu.stork</groupId>
+	<artifactId>Commons</artifactId>
+	<packaging>jar</packaging>
+	<name>Stork Commons</name>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<stork.version>1.4.0</stork.version>
+		<opensaml.version>2.6.0</opensaml.version>
+	</properties>
+	<version>${stork.version}</version>
+  <description>
+        The STORKCommons library provides beans, Java Interfaces and utility classes to integrate PEPS and SAML Engine.
+  </description>
+   
+	<dependencies>
+
+		<!-- Joda -->
+		<dependency>
+			<groupId>joda-time</groupId>
+			<artifactId>joda-time</artifactId>
+			<version>2.3</version>
+		</dependency>
+
+		<!-- Log4J -->
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.17</version>
+			<exclusions>
+				<exclusion>
+					<groupId>javax.jms</groupId>
+					<artifactId>jms</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>com.sun.jdmk</groupId>
+					<artifactId>jmxtools</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>com.sun.jmx</groupId>
+					<artifactId>jmxri</artifactId>
+				</exclusion>
+				<exclusion>
+					<artifactId>mail</artifactId>
+					<groupId>javax.mail</groupId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opensaml</groupId>
+			<artifactId>opensaml</artifactId>
+			<version>${opensaml.version}</version>
+			<exclusions>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>slf4j-api</artifactId>
+				</exclusion>
+				<exclusion>
+				 	<groupId>org.slf4j</groupId>
+				    <artifactId>slf4j-simple</artifactId>
+				</exclusion>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>jcl-over-slf4j</artifactId>
+				</exclusion>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>log4j-over-slf4j</artifactId>
+				</exclusion>
+				<exclusion>
+				    <groupId>org.slf4j</groupId>
+				    <artifactId>jul-to-slf4j</artifactId>
+				</exclusion>
+			</exclusions>			
+		</dependency>
+
+		<!-- Bouncy Castle -->
+		<dependency>
+			<groupId>org.bouncycastle</groupId>
+			<artifactId>bcprov-jdk16</artifactId>
+			<version>1.46</version>
+		</dependency>
+
+		<!-- Servlet API -->
+		<!-- provided by Application Server -->
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.5</version>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.6</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<finalName>commons</finalName>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>3.1</version>
+					<configuration>
+						<source>1.7</source>
+						<target>1.7</target>
+					</configuration>
+				</plugin>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-surefire-plugin</artifactId>
+					<configuration>
+            			<runOrder>reversealphabetical</runOrder>
+						<skip>false</skip>
+          				<includes>
+                            <runOrder>reversealphabetical</runOrder>
+				            <include>**/PEPSUtilTest.java</include>
+				            <include>**/PersonalAttributeTestCase.java</include>
+				            <include>**/PersonalAttributeListTestCase.java</include>
+            				<include>**/DateUtilTestCase.java</include>
+				            <include>**/AttributeUtilTest.java</include>
+          				</includes>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.9.1</version>
+				<configuration>
+					<links>
+						<link>http://commons.apache.org/lang/api/</link>
+						<link>http://java.sun.com/j2se/1.6.0/docs/api/</link>
+						<link>http://www.bouncycastle.org/docs/docs1.6/</link>
+						<link>http://docs.oracle.com/javase/6/docs/api/</link>
+					</links>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<version>2.2.1</version>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>jar-no-fork</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<testResources>
+			<testResource>
+				<directory>src/test/resources</directory>
+				<includes>
+					<include>log4j.xml</include>
+				</includes>
+			</testResource>
+		</testResources>
+	</build>
+	<profiles>
+		<profile>
+			<id>embedded</id>
+			<build>
+				<resources>
+					<resource>
+						<directory> ${project.basedir}/src/main/resources</directory>
+					</resource>
+					<resource>
+						<directory> ${project.basedir}/src/main/config/embedded</directory>
+					</resource>
+				</resources>
+			</build>
+		</profile>
+		<profile>
+			<id>metrics</id>
+			<build>
+			<plugins>
+				<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>cobertura-maven-plugin</artifactId>
+				<version>2.5.1</version>
+					<configuration>
+						<formats>
+							<format>html</format>
+							<format>xml</format>
+							</formats>
+					</configuration>
+				</plugin>
+			</plugins>
+			</build>
+		</profile>
+		</profiles>
+</project>
diff --git a/id/server/stork2-commons/src/.svn/all-wcprops b/id/server/stork2-commons/src/.svn/all-wcprops
new file mode 100644
index 000000000..b2a57db4c
--- /dev/null
+++ b/id/server/stork2-commons/src/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src
+END
diff --git a/id/server/stork2-commons/src/.svn/entries b/id/server/stork2-commons/src/.svn/entries
new file mode 100644
index 000000000..35f74102a
--- /dev/null
+++ b/id/server/stork2-commons/src/.svn/entries
@@ -0,0 +1,34 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+test
+dir
+
+main
+dir
+
diff --git a/id/server/stork2-commons/src/main/.svn/all-wcprops b/id/server/stork2-commons/src/main/.svn/all-wcprops
new file mode 100644
index 000000000..ca1ee03bd
--- /dev/null
+++ b/id/server/stork2-commons/src/main/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main
+END
diff --git a/id/server/stork2-commons/src/main/.svn/entries b/id/server/stork2-commons/src/main/.svn/entries
new file mode 100644
index 000000000..76ff91c7b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/.svn/entries
@@ -0,0 +1,37 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+resources
+dir
+
+java
+dir
+
+config
+dir
+
diff --git a/id/server/stork2-commons/src/main/config/.svn/all-wcprops b/id/server/stork2-commons/src/main/config/.svn/all-wcprops
new file mode 100644
index 000000000..e39a1da21
--- /dev/null
+++ b/id/server/stork2-commons/src/main/config/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/config
+END
diff --git a/id/server/stork2-commons/src/main/config/.svn/entries b/id/server/stork2-commons/src/main/config/.svn/entries
new file mode 100644
index 000000000..9a3950062
--- /dev/null
+++ b/id/server/stork2-commons/src/main/config/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/config
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+embedded
+dir
+
diff --git a/id/server/stork2-commons/src/main/config/embedded/.svn/all-wcprops b/id/server/stork2-commons/src/main/config/embedded/.svn/all-wcprops
new file mode 100644
index 000000000..61c832a4b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/config/embedded/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 70
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/config/embedded
+END
+pepsUtil.properties
+K 25
+svn:wc:ra_dav:version-url
+V 90
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/config/embedded/pepsUtil.properties
+END
diff --git a/id/server/stork2-commons/src/main/config/embedded/.svn/entries b/id/server/stork2-commons/src/main/config/embedded/.svn/entries
new file mode 100644
index 000000000..3dcc1bccf
--- /dev/null
+++ b/id/server/stork2-commons/src/main/config/embedded/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/config/embedded
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+pepsUtil.properties
+file
+
+
+
+
+2014-03-05T09:36:08.010515Z
+2d984e7eb1a7f6c6ba7048f46b85920b
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7885
+
diff --git a/id/server/stork2-commons/src/main/config/embedded/.svn/text-base/pepsUtil.properties.svn-base b/id/server/stork2-commons/src/main/config/embedded/.svn/text-base/pepsUtil.properties.svn-base
new file mode 100644
index 000000000..ae811dda7
--- /dev/null
+++ b/id/server/stork2-commons/src/main/config/embedded/.svn/text-base/pepsUtil.properties.svn-base
@@ -0,0 +1,269 @@
+#Max allowed params size
+validation.active=true
+max.spUrl.size=150
+max.attrList.size=20000
+max.invalidAttributeList.size=20000
+max.attrName.size=100
+max.callback.size=300
+max.idp.url.size=300
+max.atp.url.size=300
+max.cpepsURL.size=300
+max.attrValue.size=20000
+max.attrType.size=25
+max.spId.size=40
+max.providerName.size=128
+max.spName.size=25
+max.country.size=150
+max.qaaLevel.size=1
+max.spQaaLevel.size=1
+max.errorCode.size=5
+max.errorMessage.size=300
+max.username.size=30
+max.spepsRedirectUrl.size=300
+max.speps.redirectUrl.size=300
+max.cpeps.redirectUrl.size=300
+max.cpepsRedirectUrl.size=300
+max.spepsAssertionUrl.size=300
+max.SAMLRequest.size=131072
+max.SAMLResponse.size=131072
+max.RelayState.size=80
+max.remoteAddr.size=300
+max.remoteHost.size=300
+max.localAddr.size=300
+max.localName.size=300
+max.apepsUrl.size=300
+max.apeps.callbackUrl.size=300
+
+dtl.url=http://localhost:8080/DocumentService/DocumentService
+
+#ERROR codes/messages (accordingly to specification)
+
+#CountrySelector Interface errors
+spCountrySelector.invalidSPQAA.code=0000001
+spCountrySelector.invalidSPQAA.message=invalid.spQAA.parameter
+
+spCountrySelector.invalidQaaSPid.code=0000001
+spCountrySelector.invalidQaaSPid.message=invalid.spQAAId.parameter
+
+spCountrySelector.invalidSpId.code=000002
+spCountrySelector.invalidSpId.message=invalid.spId.parameter
+
+spCountrySelector.invalidSpURL.code=000003
+spCountrySelector.invalidSpURL.message=invalid.spUrl.parameter
+
+domain.CountrySelectorAction.code=000003
+domain.CountrySelectorAction.message=invalid.cs.domain
+
+requests.CountrySelectorAction.code=000004
+requests.CountrySelectorAction.message=reached.max.requests.cs
+
+spCountrySelector.spNotAllowed.code=000006
+spCountrySelector.spNotAllowed.message=attr.access.deny
+
+spCountrySelector.invalidAttr.code=000007
+spCountrySelector.invalidAttr.message=invalid.spAttr.parameter
+
+spCountrySelector.invalidProviderName.code=000008
+spCountrySelector.invalidProviderName.message=invalid.spProvidername.parameter
+
+spCountrySelector.errorCreatingSAML.code=203001
+spCountrySelector.errorCreatingSAML.message=error.create.sp.saml
+
+spepsSAMLRequest.code=203001
+spepsSAMLRequest.message=error.create.saml.speps
+
+#ServiceProvider Interface errors
+sProviderAction.invalidSPQAA.code=200001
+sProviderAction.invalidSPQAA.message=invalid.sp.qaa
+
+sProviderAction.invalidSPQAAId.code=200001
+sProviderAction.invalidSPQAAId.message=invalid.sp.qaaid
+
+sProviderAction.invalidSPId.code=200002
+sProviderAction.invalidSPId.message=invalid.sp.id
+
+domain.ServiceProviderAction.code=200003
+domain.ServiceProviderAction.message=invalid.sp.domain
+
+sProviderAction.invalidSPDomain.code=200003
+sProviderAction.invalidSPDomain.message=invalid.sp.domain
+
+sProviderAction.invalidCountry.code=200004
+sProviderAction.invalidCountry.message=invalid.sp.country
+
+sProviderAction.spNotAllowed.code=200005
+sProviderAction.spNotAllowed.message=sp.not.allowed
+
+sProviderAction.invalidSaml.code=200006
+sProviderAction.invalidSaml.message=invalid.sp.samlrequest
+
+sProviderAction.invalidSPProviderName.code=200007
+sProviderAction.invalidSPProviderName.message=sp.not.identified
+
+sProviderAction.invalidSPRedirect.code=200008
+sProviderAction.invalidSPRedirect.message=invalid.sp.redirectUrl
+
+sProviderAction.invalidRelayState.code=200009
+sProviderAction.invalidRelayState.message=invalid.sp.relaystate
+
+sProviderAction.invalidAttr.code=200011
+sProviderAction.invalidAttr.message=invalid.sp.attr
+
+requests.ServiceProviderAction.code=200012
+requests.ServiceProviderAction.message=reached.max.requests.sp
+
+sPPowerValidationAction.invalidSPPVAttrList.code=200013
+sPPowerValidationAction.invalidSPPVAttrList.message=invalid.sp.pv.attrlist
+
+invalid.sp.pv.attrlist.code=200013
+invalid.sp.pv.attrlist.message=invalid.sp.pv.attrlist
+
+sProviderAction.invalidSPAlias.code=203003
+sProviderAction.invalidSPAlias.message=invalid.sp.alias
+
+sProviderAction.errorCreatingSAML.code=203001
+sProviderAction.errorCreatingSAML.message=error.create.saml.speps
+
+#Internal Error 
+internalError.code=203001
+internalError.message=internalError
+
+attrList.code=202005
+attrList.message=invalid.attrList.parameter
+
+missing.sessionId.code=203010
+missing.sessionId.message=missing.session.id
+
+sessionError.code=203011
+sessionError.message=invalid.session.id
+
+invalid.sessionId.code=203011
+invalid.sessionId.message=invalid.session.id
+
+missing.mandate.code=203013
+missing.mandate.message=missing.mandate
+
+invalid.session.code=203012
+invalid.session.message=invalid.session
+
+callback.code=203006
+callback.message=invalid.callback.url
+
+idp.url.code=203006
+idp.url.message=invalid.idp.url
+
+IdPSAMLResponse.code=002001
+IdPSAMLResponse.message=invalid.idp.response
+
+authenticationFailed.code=003002
+authenticationFailed.message=authentication.failed
+
+username.code=003002
+username.message=authentication.failed
+
+invalidAttributeList.code=203001
+invalidAttributeList.message=invalid.attrlist
+
+invalidAttributeValue.code=203001
+invalidAttributeValue.message=invalid.attr.value
+
+attVerification.mandatory.code=202010
+attVerification.mandatory.message=missing.mandatory.attr
+
+attrValue.verification.code=203008
+attrValue.verification.message=invalid.stork.attrValue
+
+cpepsSAMLResponse.code=202012
+cpepsSAMLResponse.message=error.gen.cpeps.saml
+
+AtPSAMLResponse.code=202009
+AtPSAMLResponse.message=error.gen.atp.saml
+
+atp.url.code=203006
+atp.url.message=invalid.atp.url
+
+hash.error.code=203001
+hash.error.message=error.hash
+
+qaaLevel.code=203006
+qaaLevel.message=invalid.cpeps.qaalevel
+
+SAMLRequest.code=203001
+SAMLRequest.message=invalid.SAMLRequest
+
+atp.response.error.code=202011
+atp.response.error.message=atp.response.error
+
+#Colleague Request Interface errors
+
+colleagueRequest.invalidSAML.code=201002
+colleagueRequest.invalidSAML.message=invalid.speps.samlrequest
+
+colleagueRequest.invalidCountryCode.code=002001
+colleagueRequest.invalidCountryCode.message=country.cpeps.nomatch
+
+colleagueRequest.errorCreatingSAML.code=203001
+colleagueRequest.errorCreatingSAML.message=error.create.saml.cpeps
+
+colleagueRequest.invalidQaa.code=202004
+colleagueRequest.invalidQaa.message=invalid.requested.cpeps.qaalevel
+
+colleagueRequest.attrNull.code=202005
+colleagueRequest.attrNull.message=invalid.requested.attrlist.cpeps
+
+colleaguePVRequest.invalidPVAttrList.code=202013
+colleaguePVRequest.invalidPVAttrList.message=invalid.speps.pv.attrlist
+
+colleagueRequest.invalidRedirect.code=202001
+colleagueRequest.invalidRedirect.message=invalid.redirecturl.cpeps
+
+colleagueRequest.invalidDestUrl.code=203006
+colleagueRequest.invalidDestUrl.message=invalid.cpeps.destUrl
+
+cpepsRedirectUrl.code=203006
+cpepsRedirectUrl.message=invalid.cpeps.redirectUrl
+
+#Citizen Consent Interfaces errors
+
+citizenResponse.mandatory.code=202007
+citizenResponse.mandatory.message=no.consent.mand.attr
+
+cPeps.attrNull.code=202005
+cPeps.attrNull.message=invalid.attrList.cpeps
+
+citizenNoConsent.mandatory.code=202012
+citizenNoConsent.mandatory.message=no.consent.val.mand.attr
+
+#Colleague Response Interface errors
+
+colleagueResponse.invalidSAML.code=202002
+colleagueResponse.invalidSAML.message=invalid.cpeps.samlresp
+
+auRequestIdError.code=201005
+auRequestIdError.message=invalid.speps.saml.id
+
+audienceRestrictionError.code=201004
+audienceRestrictionError.message=speps.saml.condition.notmet
+
+spepsSAMLResponse.code=200010
+spepsSAMLResponse.message=error.gen.speps.saml
+
+
+invalid.apepsRedirectUrl.code=001001
+invalid.apepsRedirectUrl.message=invalid.apeps.redirectUrl
+
+apepsSAMLRequest.code=001002
+apepsSAMLRequest.message=invalid.apeps.saml.request
+
+apepsSAMLResponse.code=001003
+apepsSAMLResponse.message=invalid.apeps.saml.response
+
+invalid.apepsCallbackUrl.code=001004
+invalid.apepsCallbackUrl.message=invalid.apeps.callback.url
+
+colleagueAttributeRequest.invalidSAML.code=001005
+colleagueAttributeRequest.invalidSAML.message=invalid.attr.request.saml
+
+
+#Hash Digests
+hashDigest.className=org.bouncycastle.crypto.digests.SHA512Digest
diff --git a/id/server/stork2-commons/src/main/config/embedded/pepsUtil.properties b/id/server/stork2-commons/src/main/config/embedded/pepsUtil.properties
new file mode 100644
index 000000000..ae811dda7
--- /dev/null
+++ b/id/server/stork2-commons/src/main/config/embedded/pepsUtil.properties
@@ -0,0 +1,269 @@
+#Max allowed params size
+validation.active=true
+max.spUrl.size=150
+max.attrList.size=20000
+max.invalidAttributeList.size=20000
+max.attrName.size=100
+max.callback.size=300
+max.idp.url.size=300
+max.atp.url.size=300
+max.cpepsURL.size=300
+max.attrValue.size=20000
+max.attrType.size=25
+max.spId.size=40
+max.providerName.size=128
+max.spName.size=25
+max.country.size=150
+max.qaaLevel.size=1
+max.spQaaLevel.size=1
+max.errorCode.size=5
+max.errorMessage.size=300
+max.username.size=30
+max.spepsRedirectUrl.size=300
+max.speps.redirectUrl.size=300
+max.cpeps.redirectUrl.size=300
+max.cpepsRedirectUrl.size=300
+max.spepsAssertionUrl.size=300
+max.SAMLRequest.size=131072
+max.SAMLResponse.size=131072
+max.RelayState.size=80
+max.remoteAddr.size=300
+max.remoteHost.size=300
+max.localAddr.size=300
+max.localName.size=300
+max.apepsUrl.size=300
+max.apeps.callbackUrl.size=300
+
+dtl.url=http://localhost:8080/DocumentService/DocumentService
+
+#ERROR codes/messages (accordingly to specification)
+
+#CountrySelector Interface errors
+spCountrySelector.invalidSPQAA.code=0000001
+spCountrySelector.invalidSPQAA.message=invalid.spQAA.parameter
+
+spCountrySelector.invalidQaaSPid.code=0000001
+spCountrySelector.invalidQaaSPid.message=invalid.spQAAId.parameter
+
+spCountrySelector.invalidSpId.code=000002
+spCountrySelector.invalidSpId.message=invalid.spId.parameter
+
+spCountrySelector.invalidSpURL.code=000003
+spCountrySelector.invalidSpURL.message=invalid.spUrl.parameter
+
+domain.CountrySelectorAction.code=000003
+domain.CountrySelectorAction.message=invalid.cs.domain
+
+requests.CountrySelectorAction.code=000004
+requests.CountrySelectorAction.message=reached.max.requests.cs
+
+spCountrySelector.spNotAllowed.code=000006
+spCountrySelector.spNotAllowed.message=attr.access.deny
+
+spCountrySelector.invalidAttr.code=000007
+spCountrySelector.invalidAttr.message=invalid.spAttr.parameter
+
+spCountrySelector.invalidProviderName.code=000008
+spCountrySelector.invalidProviderName.message=invalid.spProvidername.parameter
+
+spCountrySelector.errorCreatingSAML.code=203001
+spCountrySelector.errorCreatingSAML.message=error.create.sp.saml
+
+spepsSAMLRequest.code=203001
+spepsSAMLRequest.message=error.create.saml.speps
+
+#ServiceProvider Interface errors
+sProviderAction.invalidSPQAA.code=200001
+sProviderAction.invalidSPQAA.message=invalid.sp.qaa
+
+sProviderAction.invalidSPQAAId.code=200001
+sProviderAction.invalidSPQAAId.message=invalid.sp.qaaid
+
+sProviderAction.invalidSPId.code=200002
+sProviderAction.invalidSPId.message=invalid.sp.id
+
+domain.ServiceProviderAction.code=200003
+domain.ServiceProviderAction.message=invalid.sp.domain
+
+sProviderAction.invalidSPDomain.code=200003
+sProviderAction.invalidSPDomain.message=invalid.sp.domain
+
+sProviderAction.invalidCountry.code=200004
+sProviderAction.invalidCountry.message=invalid.sp.country
+
+sProviderAction.spNotAllowed.code=200005
+sProviderAction.spNotAllowed.message=sp.not.allowed
+
+sProviderAction.invalidSaml.code=200006
+sProviderAction.invalidSaml.message=invalid.sp.samlrequest
+
+sProviderAction.invalidSPProviderName.code=200007
+sProviderAction.invalidSPProviderName.message=sp.not.identified
+
+sProviderAction.invalidSPRedirect.code=200008
+sProviderAction.invalidSPRedirect.message=invalid.sp.redirectUrl
+
+sProviderAction.invalidRelayState.code=200009
+sProviderAction.invalidRelayState.message=invalid.sp.relaystate
+
+sProviderAction.invalidAttr.code=200011
+sProviderAction.invalidAttr.message=invalid.sp.attr
+
+requests.ServiceProviderAction.code=200012
+requests.ServiceProviderAction.message=reached.max.requests.sp
+
+sPPowerValidationAction.invalidSPPVAttrList.code=200013
+sPPowerValidationAction.invalidSPPVAttrList.message=invalid.sp.pv.attrlist
+
+invalid.sp.pv.attrlist.code=200013
+invalid.sp.pv.attrlist.message=invalid.sp.pv.attrlist
+
+sProviderAction.invalidSPAlias.code=203003
+sProviderAction.invalidSPAlias.message=invalid.sp.alias
+
+sProviderAction.errorCreatingSAML.code=203001
+sProviderAction.errorCreatingSAML.message=error.create.saml.speps
+
+#Internal Error 
+internalError.code=203001
+internalError.message=internalError
+
+attrList.code=202005
+attrList.message=invalid.attrList.parameter
+
+missing.sessionId.code=203010
+missing.sessionId.message=missing.session.id
+
+sessionError.code=203011
+sessionError.message=invalid.session.id
+
+invalid.sessionId.code=203011
+invalid.sessionId.message=invalid.session.id
+
+missing.mandate.code=203013
+missing.mandate.message=missing.mandate
+
+invalid.session.code=203012
+invalid.session.message=invalid.session
+
+callback.code=203006
+callback.message=invalid.callback.url
+
+idp.url.code=203006
+idp.url.message=invalid.idp.url
+
+IdPSAMLResponse.code=002001
+IdPSAMLResponse.message=invalid.idp.response
+
+authenticationFailed.code=003002
+authenticationFailed.message=authentication.failed
+
+username.code=003002
+username.message=authentication.failed
+
+invalidAttributeList.code=203001
+invalidAttributeList.message=invalid.attrlist
+
+invalidAttributeValue.code=203001
+invalidAttributeValue.message=invalid.attr.value
+
+attVerification.mandatory.code=202010
+attVerification.mandatory.message=missing.mandatory.attr
+
+attrValue.verification.code=203008
+attrValue.verification.message=invalid.stork.attrValue
+
+cpepsSAMLResponse.code=202012
+cpepsSAMLResponse.message=error.gen.cpeps.saml
+
+AtPSAMLResponse.code=202009
+AtPSAMLResponse.message=error.gen.atp.saml
+
+atp.url.code=203006
+atp.url.message=invalid.atp.url
+
+hash.error.code=203001
+hash.error.message=error.hash
+
+qaaLevel.code=203006
+qaaLevel.message=invalid.cpeps.qaalevel
+
+SAMLRequest.code=203001
+SAMLRequest.message=invalid.SAMLRequest
+
+atp.response.error.code=202011
+atp.response.error.message=atp.response.error
+
+#Colleague Request Interface errors
+
+colleagueRequest.invalidSAML.code=201002
+colleagueRequest.invalidSAML.message=invalid.speps.samlrequest
+
+colleagueRequest.invalidCountryCode.code=002001
+colleagueRequest.invalidCountryCode.message=country.cpeps.nomatch
+
+colleagueRequest.errorCreatingSAML.code=203001
+colleagueRequest.errorCreatingSAML.message=error.create.saml.cpeps
+
+colleagueRequest.invalidQaa.code=202004
+colleagueRequest.invalidQaa.message=invalid.requested.cpeps.qaalevel
+
+colleagueRequest.attrNull.code=202005
+colleagueRequest.attrNull.message=invalid.requested.attrlist.cpeps
+
+colleaguePVRequest.invalidPVAttrList.code=202013
+colleaguePVRequest.invalidPVAttrList.message=invalid.speps.pv.attrlist
+
+colleagueRequest.invalidRedirect.code=202001
+colleagueRequest.invalidRedirect.message=invalid.redirecturl.cpeps
+
+colleagueRequest.invalidDestUrl.code=203006
+colleagueRequest.invalidDestUrl.message=invalid.cpeps.destUrl
+
+cpepsRedirectUrl.code=203006
+cpepsRedirectUrl.message=invalid.cpeps.redirectUrl
+
+#Citizen Consent Interfaces errors
+
+citizenResponse.mandatory.code=202007
+citizenResponse.mandatory.message=no.consent.mand.attr
+
+cPeps.attrNull.code=202005
+cPeps.attrNull.message=invalid.attrList.cpeps
+
+citizenNoConsent.mandatory.code=202012
+citizenNoConsent.mandatory.message=no.consent.val.mand.attr
+
+#Colleague Response Interface errors
+
+colleagueResponse.invalidSAML.code=202002
+colleagueResponse.invalidSAML.message=invalid.cpeps.samlresp
+
+auRequestIdError.code=201005
+auRequestIdError.message=invalid.speps.saml.id
+
+audienceRestrictionError.code=201004
+audienceRestrictionError.message=speps.saml.condition.notmet
+
+spepsSAMLResponse.code=200010
+spepsSAMLResponse.message=error.gen.speps.saml
+
+
+invalid.apepsRedirectUrl.code=001001
+invalid.apepsRedirectUrl.message=invalid.apeps.redirectUrl
+
+apepsSAMLRequest.code=001002
+apepsSAMLRequest.message=invalid.apeps.saml.request
+
+apepsSAMLResponse.code=001003
+apepsSAMLResponse.message=invalid.apeps.saml.response
+
+invalid.apepsCallbackUrl.code=001004
+invalid.apepsCallbackUrl.message=invalid.apeps.callback.url
+
+colleagueAttributeRequest.invalidSAML.code=001005
+colleagueAttributeRequest.invalidSAML.message=invalid.attr.request.saml
+
+
+#Hash Digests
+hashDigest.className=org.bouncycastle.crypto.digests.SHA512Digest
diff --git a/id/server/stork2-commons/src/main/java/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/.svn/all-wcprops
new file mode 100644
index 000000000..ca59ad1e3
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java
+END
diff --git a/id/server/stork2-commons/src/main/java/.svn/entries b/id/server/stork2-commons/src/main/java/.svn/entries
new file mode 100644
index 000000000..ff9dfce64
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+eu
+dir
+
diff --git a/id/server/stork2-commons/src/main/java/eu/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/.svn/all-wcprops
new file mode 100644
index 000000000..30e4698c0
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/.svn/entries b/id/server/stork2-commons/src/main/java/eu/.svn/entries
new file mode 100644
index 000000000..4c0ceff03
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+stork
+dir
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/.svn/all-wcprops
new file mode 100644
index 000000000..8e248afa5
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/.svn/entries
new file mode 100644
index 000000000..ff2fa64d7
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+peps
+dir
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/all-wcprops
new file mode 100644
index 000000000..da872cf08
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/entries
new file mode 100644
index 000000000..f0c47a6d2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/.svn/entries
@@ -0,0 +1,34 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork/peps
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+auth
+dir
+
+complex
+dir
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/all-wcprops
new file mode 100644
index 000000000..78e9d344c
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/java/eu/stork/peps/auth
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/entries
new file mode 100644
index 000000000..253bfd218
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/.svn/entries
@@ -0,0 +1,34 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork/peps/auth
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+specific
+dir
+
+commons
+dir
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/all-wcprops
new file mode 100644
index 000000000..edb1120b5
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/all-wcprops
@@ -0,0 +1,191 @@
+K 25
+svn:wc:ra_dav:version-url
+V 86
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/java/eu/stork/peps/auth/commons
+END
+AttributeSource.java
+K 25
+svn:wc:ra_dav:version-url
+V 107
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/AttributeSource.java
+END
+package-info.java
+K 25
+svn:wc:ra_dav:version-url
+V 103
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/package-info.java
+END
+PEPSValues.java
+K 25
+svn:wc:ra_dav:version-url
+V 102
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/PEPSValues.java
+END
+STORKAttrQueryRequest.java
+K 25
+svn:wc:ra_dav:version-url
+V 113
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryRequest.java
+END
+CitizenConsent.java
+K 25
+svn:wc:ra_dav:version-url
+V 106
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/CitizenConsent.java
+END
+AttributeProvidersMap.java
+K 25
+svn:wc:ra_dav:version-url
+V 113
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvidersMap.java
+END
+STORKAttrQueryResponse.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryResponse.java
+END
+PersonalAttributeList.java
+K 25
+svn:wc:ra_dav:version-url
+V 113
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java
+END
+AttributeName.java
+K 25
+svn:wc:ra_dav:version-url
+V 105
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/AttributeName.java
+END
+PEPSUtil.java
+K 25
+svn:wc:ra_dav:version-url
+V 100
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/PEPSUtil.java
+END
+PersonalAttribute.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttribute.java
+END
+IAttributeListProcessor.java
+K 25
+svn:wc:ra_dav:version-url
+V 115
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/IAttributeListProcessor.java
+END
+STORKAuthnRequest.java
+K 25
+svn:wc:ra_dav:version-url
+V 108
+/CITnet/svn/STORK2/!svn/ver/56/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnRequest.java
+END
+STORKLogoutResponse.java
+K 25
+svn:wc:ra_dav:version-url
+V 111
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutResponse.java
+END
+IStorkLogger.java
+K 25
+svn:wc:ra_dav:version-url
+V 103
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/IStorkLogger.java
+END
+DateUtil.java
+K 25
+svn:wc:ra_dav:version-url
+V 99
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/DateUtil.java
+END
+AttributeProvider.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvider.java
+END
+IStorkSession.java
+K 25
+svn:wc:ra_dav:version-url
+V 104
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/IStorkSession.java
+END
+Linker.java
+K 25
+svn:wc:ra_dav:version-url
+V 98
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/Linker.java
+END
+PEPSParameters.java
+K 25
+svn:wc:ra_dav:version-url
+V 106
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/PEPSParameters.java
+END
+AttributeConstants.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/AttributeConstants.java
+END
+STORKStatusCode.java
+K 25
+svn:wc:ra_dav:version-url
+V 106
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKStatusCode.java
+END
+AttributeUtil.java
+K 25
+svn:wc:ra_dav:version-url
+V 105
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/AttributeUtil.java
+END
+Country.java
+K 25
+svn:wc:ra_dav:version-url
+V 98
+/CITnet/svn/STORK2/!svn/ver/96/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/Country.java
+END
+PEPSErrors.java
+K 25
+svn:wc:ra_dav:version-url
+V 102
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/PEPSErrors.java
+END
+STORKLogoutRequest.java
+K 25
+svn:wc:ra_dav:version-url
+V 110
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutRequest.java
+END
+IAttributeProvidersMap.java
+K 25
+svn:wc:ra_dav:version-url
+V 113
+/CITnet/svn/STORK2/!svn/ver/31/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/IAttributeProvidersMap.java
+END
+STORKSubStatusCode.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKSubStatusCode.java
+END
+IPersonalAttributeList.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/IPersonalAttributeList.java
+END
+CountryCodes.java
+K 25
+svn:wc:ra_dav:version-url
+V 103
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/CountryCodes.java
+END
+STORKAuthnResponse.java
+K 25
+svn:wc:ra_dav:version-url
+V 110
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnResponse.java
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/entries
new file mode 100644
index 000000000..0b8070876
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/entries
@@ -0,0 +1,1085 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork/peps/auth/commons
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+AttributeConstants.java
+file
+
+
+
+
+2013-12-20T12:27:56.638475Z
+940dcb9e93ede62e221f4b25abd6576b
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1831
+
+STORKStatusCode.java
+file
+
+
+
+
+2013-12-20T12:27:56.638475Z
+771689c75a8263c7e3966e820d59025e
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1906
+
+AttributeUtil.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+2859d3335dfe719ca04258fae54e69a3
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7927
+
+exceptions
+dir
+
+Country.java
+file
+
+
+
+
+2013-12-20T12:27:56.638475Z
+9cbde5f25b646d02dae7ccf424906b4a
+2013-11-01T20:35:30.927048Z
+96
+emferreri
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2208
+
+PEPSErrors.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+bfe69afce772675187fdd637453ed12f
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12165
+
+STORKLogoutRequest.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+af445a2013f21ffecd3db7773ae3236e
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4343
+
+IAttributeProvidersMap.java
+file
+
+
+
+
+2013-12-20T12:27:56.634475Z
+225257e8d6d7b9e6bcc4bea2463c33be
+2013-10-10T17:38:31.956327Z
+31
+emlelisst
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2534
+
+STORKSubStatusCode.java
+file
+
+
+
+
+2013-12-20T12:27:56.634475Z
+65e615e0119d4125d5f4f58af8bcd18b
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2181
+
+IPersonalAttributeList.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+b441a2c6c3eddcf1043c55e55f48faa6
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6598
+
+STORKAuthnResponse.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+f2247f9a89e8ad01f9a24ad716f993ca
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8724
+
+CountryCodes.java
+file
+
+
+
+
+2013-12-20T12:27:56.638475Z
+f91b0f8df0b2a68fe1b900d425257c23
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3527
+
+package-info.java
+file
+
+
+
+
+2013-12-20T12:27:56.638475Z
+8d8068e217f10425f76a8d37192ccd80
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+277
+
+AttributeSource.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+a0555599193656bc17e02c3ce23043be
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4501
+
+PEPSValues.java
+file
+
+
+
+
+2014-03-05T09:36:07.946515Z
+4a94fe7623d8d6b679efddecd8d49009
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7899
+
+STORKAttrQueryRequest.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+2d4ac505f71020c482ebbefa10484552
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10617
+
+CitizenConsent.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+39e236d6888f266d9b4967f19726126c
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3445
+
+AttributeProvidersMap.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+b487da35df5353c8b2aba47ab3cdb68d
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2608
+
+STORKAttrQueryResponse.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+93fc508be2bc0fd29ae453b0868e1d2b
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9080
+
+PersonalAttributeList.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+0036d26679cc31fe7d1bdea1b8b3555a
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12041
+
+AttributeName.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+164e63d1f4e5aeb47d371caff534eaab
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1504
+
+PEPSUtil.java
+file
+
+
+
+
+2014-03-05T09:36:07.946515Z
+9aa5d40e80a49d19293f42db68feca97
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12702
+
+PersonalAttribute.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+ce98ef39a754869644b5516cdcfcb40d
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8914
+
+IAttributeListProcessor.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+07efc5b742cc9e4b80a2f8b17fe4b946
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4713
+
+DateUtil.java
+file
+
+
+
+
+2013-12-20T12:27:56.634475Z
+59f9cd2a3d1169a0f1a797b28719921a
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5702
+
+IStorkLogger.java
+file
+
+
+
+
+2013-12-20T12:27:56.634475Z
+f15979b29f52d1674103528aed914ae7
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4766
+
+STORKLogoutResponse.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+880a05076cf8412311766aa40cf6a63f
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5474
+
+STORKAuthnRequest.java
+file
+
+
+
+
+2013-12-20T12:27:56.634475Z
+3f36e65f0c4f1c7df753784b2e64f00b
+2013-10-24T15:44:04.704923Z
+56
+emgrtargr
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11269
+
+AttributeProvider.java
+file
+
+
+
+
+2014-03-05T09:36:07.946515Z
+54177f09aad369707021fb3c0f5b2b1e
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2914
+
+IStorkSession.java
+file
+
+
+
+
+2013-12-20T12:27:56.634475Z
+5a8701b1fd27998d5cf3280a5c99bcb0
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2745
+
+Linker.java
+file
+
+
+
+
+2014-01-21T08:38:55.336702Z
+98f46baee16310e3dc59ef224ba5b5ab
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8950
+
+PEPSParameters.java
+file
+
+
+
+
+2014-03-05T09:36:07.946515Z
+ba1718cf8c1a52eae81aa6b182315b95
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15394
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeConstants.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeConstants.java.svn-base
new file mode 100644
index 000000000..09769641c
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeConstants.java.svn-base
@@ -0,0 +1,72 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the STORK PEPS, Commons and Specific errors
+ * constant identifiers.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2010-11-17 05:15:28 $
+ */
+public enum AttributeConstants {
+  
+  /**
+   * Represents the attribute's name index.
+   */
+  ATTR_NAME_INDEX(0),
+  /**
+   * Represents the attribute's type index.
+   */
+  ATTR_TYPE_INDEX(1),
+  /**
+   * Represents the attribute's value index.
+   */
+  ATTR_VALUE_INDEX(2),
+  /**
+   * Represents the attribute's status index.
+   */
+  ATTR_STATUS_INDEX(3),
+  /**
+   * Represents the number of allowed tuples.
+   */
+  NUMBER_TUPLES(4);
+  
+  /**
+   * Represents the constant's value.
+   */
+  private int attribute;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param attr The Attribute Constant value.
+   */
+  AttributeConstants(final int attr) {
+    
+    this.attribute = attr;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public int intValue() {
+    
+    return attribute;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeName.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeName.java.svn-base
new file mode 100644
index 000000000..a44768c7e
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeName.java.svn-base
@@ -0,0 +1,74 @@
+package eu.stork.peps.auth.commons;
+
+/**
+ * This class is a bean used to store information relative to Attribute Names.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.00 $, $Date: 2013-11-26 $
+ */
+public final class AttributeName {
+  
+  /**
+   * Attribute Id.
+   */
+  private String attributeId;
+  
+  /**
+   * Attribute Name.
+   */
+  private String attributeName;
+
+  /**
+   * Attribute Name Constructor.
+   * 
+   * @param aId Id of the Attribute Name.
+   * @param aName Name of the Attribute Name.
+   */
+  public AttributeName(final String aId, final String aName) {
+    
+    this.attributeId = aId;
+    this.attributeName = aName;
+  }
+  
+  /**
+   * Getter for the attributeId value.
+   * 
+   * @return The attributeId value.
+   */
+  public String getAttributeId() {
+    
+    return attributeId;
+  }
+  
+  /**
+   * Setter for the attributeId value.
+   * 
+   * @param aId Id of the Attribute Name.
+   */
+  public void setAttributeId(final String aId) {
+    
+    this.attributeId = aId;
+  }
+  
+  /**
+   * Getter for the attributeName value.
+   * 
+   * @return The attributeName value.
+   */
+  public String getAttributeName() {
+    
+    return attributeName;
+  }
+  
+  /**
+   * Setter for the attributeName value.
+   * 
+   * @param name Name of the Attribute Name.
+   */
+  public void setAttributeName(final String name) {
+    
+    this.attributeName = name;
+  }
+  
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvider.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvider.java.svn-base
new file mode 100644
index 000000000..575732e27
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvider.java.svn-base
@@ -0,0 +1,123 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * This class is a bean used to store the information relative to the Attribute Provider.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.01 $, $Date: 2014-01-13 $
+ */
+public final class AttributeProvider implements Serializable {
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 7210186241917444559L;
+
+ /**
+   * Provider Id.
+   */
+  private String providerId;
+  
+  /**
+   * Provider Name.
+   */
+  private String providerName;
+
+  /**
+   * Allowed groups of attribute names.
+   */
+  private List<String> allowedGroups;
+
+  /**
+   * Attribute Provider Constructor.
+   * 
+   * @param pId Id of the Attribute Provider.
+   * @param pName Name of the Attribute Provider.
+   */
+  public AttributeProvider(final String pId, final String pName, final List<String> pAllowedGroups) {
+    
+    this.providerId = pId;
+    this.providerName = pName;
+    this.allowedGroups = pAllowedGroups;
+  }
+  
+  /**
+   * Getter for the providerId value.
+   * 
+   * @return The providerId value.
+   */
+  public String getProviderId() {
+    
+    return providerId;
+  }
+  
+  /**
+   * Setter for the providerId value.
+   * 
+   * @param pId Id of the Attribute Provider.
+   */
+  public void setProviderId(final String pId) {
+    
+    this.providerId = pId;
+  }
+  
+  /**
+   * Getter for the providerName value.
+   * 
+   * @return The providerName value.
+   */
+  public String getProviderName() {
+    
+    return providerName;
+  }
+  
+  /**
+   * Setter for the providerName value.
+   * 
+   * @param name Name of the Attribute Provider.
+   */
+  public void setProviderName(final String name) {
+    
+    this.providerName = name;
+  }
+
+  /**
+   * Getter for the allowedGroups value.
+   * 
+   * @return The allowedGroups value.
+   */
+  public List<String> getAllowedGroups() {
+    
+    return allowedGroups;
+  }
+  
+  /**
+   * Setter for the allowedGroups value.
+   * 
+   * @param name AllowedGroups of the Attribute Provider.
+   */
+  public void setAllowedGroups(final List<String> pAllowedGroups) {
+    
+    this.allowedGroups = pAllowedGroups;
+  }
+
+  /**
+   * Check if an attribute name is allowed for this Attribute Provider
+   * 
+   * @param pAttrName the Attribute Name to check
+   * @return true if the name is allowed, false otherwise
+   */
+  public boolean isAttributeNameAllowed(final String pAttrName) {
+	if ( allowedGroups==null || pAttrName==null )
+	  return false;
+	else if ( allowedGroups.contains(PEPSParameters.ATTRIBUTE_GROUPS_ALL.toString()) )
+		return true;
+	else if ( allowedGroups.contains(PEPSParameters.ATTRIBUTE_GROUPS_NONE.toString()) )
+		return false;
+	else
+	  return allowedGroups.contains(pAttrName);
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvidersMap.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvidersMap.java.svn-base
new file mode 100644
index 000000000..85aec2625
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeProvidersMap.java.svn-base
@@ -0,0 +1,96 @@
+package eu.stork.peps.auth.commons;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Implementation of the AttributeProviderMap using a LinkedHashMap.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.01 $, $Date: 2013-09-20 $
+ *
+ * @see LinkedHashMap
+ */
+public class AttributeProvidersMap extends LinkedHashMap<AttributeSource, IPersonalAttributeList>
+   implements IAttributeProvidersMap {
+	/**
+	 * Logger object.
+	 */
+	private static final Logger LOG = Logger.getLogger(AttributeProvidersMap.class.getName());
+   
+	/**
+	 * Unique identifier.
+	 */
+	private static final long serialVersionUID = 8949081185106296122L;
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public IPersonalAttributeList get(final AttributeSource key) {
+		return this.get((Object) key);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public IPersonalAttributeList remove(final AttributeSource key) {
+		return this.remove((Object) key);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean containsKey(final AttributeSource key) {
+		return this.containsKey((Object) key);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Iterator<AttributeSource> keyIterator() {
+		return this.keySet().iterator();
+	}
+
+	public void trace() {
+		Iterator<AttributeSource> iterator;
+		Iterator<PersonalAttribute> iterator2;
+		AttributeSource source;
+		IPersonalAttributeList pal;
+		PersonalAttribute pa;
+
+		iterator = this.keyIterator();
+		LOG.trace("Start dumping of AttributeProvidersMap\n=======================");
+		while (iterator.hasNext()) {
+			source = iterator.next();
+
+			LOG.trace("Source details: type [" + source.getSourceType() + "], URL [" + source.getProviderURL() + "]");
+
+			if(source.getSourceType() == AttributeSource.SOURCE_LOCAL_APROVIDER) {
+				LOG.trace("-> Attribute Provider: ID [" + source.getProvider().getProviderId() + "], name [" + source.getProvider().getProviderName() + "]");
+			}
+			else {
+				LOG.trace("-> Country: ID [" + source.getCountry().getCountryId() + "], name [" + source.getCountry().getCountryName() + "]");
+			}
+
+			pal = this.get(source);
+			LOG.trace("++++++++=>");
+			iterator2 = pal.iterator();
+			while (iterator2.hasNext()) {
+				pa = iterator2.next();
+
+				LOG.trace("-> Citizen Attribute: name [" + pa.getName() + "], required [" + pa.isRequired() + "]");
+			}
+			LOG.trace("<=++++++++");
+
+			LOG.trace("-----------------------");
+		}
+		LOG.trace("END\n=======================");
+	}
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeSource.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeSource.java.svn-base
new file mode 100644
index 000000000..846f54f67
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeSource.java.svn-base
@@ -0,0 +1,188 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information relative to the Attribute Source (either AttributeProvider or Country).
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.10 $, $Date: 2013-11-29 $
+ */
+public final class AttributeSource implements Serializable {
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 432243595968469014L;
+
+  public static final int SOURCE_LOCAL_APROVIDER = 1;
+  public static final int SOURCE_REMOTE_COUNTRY = 2;
+
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(AttributeSource.class.getName());
+
+  /**
+   * Provider source.
+   */
+  private int sourceType;
+  
+  /**
+   * Provider URL.
+   */
+  private String providerURL;
+
+  /**
+   * The local Attribute Provider.
+   */
+  private AttributeProvider provider;
+
+  /**
+   * The remote Country.
+   */
+  private Country country;
+  
+  /**
+   * Attribute Source Constructor.
+   * 
+   * @param provider The local Attribute Provider.
+   * @param pURL URL of the Attribute Provider.
+   */
+  public AttributeSource(final AttributeProvider provider, final String pURL) {
+    this.setSourceType(SOURCE_LOCAL_APROVIDER);
+
+    this.setProvider(provider);
+    this.setProviderURL(pURL);
+  }
+  
+  /**
+   * Attribute Source Constructor.
+   * 
+   * @param country The remote Country.
+   * @param pURL URL of the Country.
+   */
+  public AttributeSource(final Country country, final String pURL) {
+    this.setSourceType(SOURCE_REMOTE_COUNTRY);
+
+    this.setCountry(country);
+    this.setProviderURL(pURL);
+  }
+
+  /**
+   * @param sourceType the sourceType to set
+   */
+  public void setSourceType(final int sourceType) {
+	  this.sourceType = sourceType;
+  }
+
+  /**
+   * @return the sourceType
+   */
+  public int getSourceType() {
+	  return sourceType;
+  }
+
+  /**
+   * @param providerURL the providerURL to set
+   */
+  public void setProviderURL(final String providerURL) {
+	  this.providerURL = providerURL;
+  }
+
+  /**
+   * @return the providerURL
+   */
+  public String getProviderURL() {
+	  return providerURL;
+  }
+
+  /**
+   * @param provider the provider to set
+   */
+  public void setProvider(final AttributeProvider provider) {
+	  this.setSourceType(SOURCE_LOCAL_APROVIDER);
+
+	  this.provider = provider;
+  }
+
+  /**
+   * @return the provider
+   */
+  public AttributeProvider getProvider() {
+	  return provider;
+  }
+
+  /**
+   * @param country the country to set
+   */
+  public void setCountry(final Country country) {
+	  this.setSourceType(SOURCE_REMOTE_COUNTRY);
+
+	  this.country = country;
+  }
+
+  /**
+   * @return the country
+   */
+  public Country getCountry() {
+	  return country;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean equals(Object obj) {
+	  boolean outcome = false;
+
+	  LOG.debug("Calling equals with Object.");
+	  if ( obj instanceof AttributeSource ) {
+		  LOG.debug("Calling equals with AttributeSource.");
+		  outcome = this.equals((AttributeSource)obj);
+	  }
+
+	  LOG.debug("Object equals outcome: " + outcome);
+	  return outcome;
+  }
+
+  /**
+   * Compare the given AttributeSource with the current object in order to determinine
+   * if they are equal.
+   * 
+   * @param obj The AttributeSource to compare to
+   * 
+   * @return true if the two objects are equal
+   */
+  public boolean equals(AttributeSource obj) {
+	  boolean outcome = false;
+
+	  if ( this.sourceType==obj.getSourceType() ) {
+		  if ( this.sourceType==AttributeSource.SOURCE_LOCAL_APROVIDER ) {
+			  if ( this.provider.getProviderId().equals(obj.getProvider().getProviderId()) )
+				  outcome = true;
+		  }
+		  else if ( this.sourceType==AttributeSource.SOURCE_REMOTE_COUNTRY ) {
+			  if ( this.country.getCountryId().equals(obj.getCountry().getCountryId()) )
+				  outcome = true;
+		  }
+	  }
+
+	  LOG.debug("AttributeSource equals outcome: " + outcome);
+	  return outcome;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public int hashCode() {
+	  int hash = 1;
+	  hash = hash * 17 + this.sourceType;
+	  if ( this.sourceType==AttributeSource.SOURCE_LOCAL_APROVIDER )
+		  hash = hash * 31 + this.provider.getProviderName().hashCode();
+	  else
+		  hash = hash * 31 + this.country.getCountryName().hashCode();
+	  return hash;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeUtil.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeUtil.java.svn-base
new file mode 100644
index 000000000..af7ab6cf3
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/AttributeUtil.java.svn-base
@@ -0,0 +1,231 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * This class holds static helper methods.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.5 $, $Date: 2010-12-15 23:19:59 $
+ */
+public final class AttributeUtil {
+  
+  /**
+   * Private constructor. Prevents the class from being instantiated.
+   */
+  private AttributeUtil() {
+    // empty constructor
+  }
+  
+  /**
+   * Safe escape any given string.
+   * 
+   * @param value The HTTP Value to escaped.
+   * 
+   * @return The value escaped value.
+   */
+  public static String escape(final String value) {
+    
+    final String attrSep = PEPSValues.ATTRIBUTE_SEP.toString();
+    final String attrTupleSep = PEPSValues.ATTRIBUTE_TUPLE_SEP.toString();
+    final String attrValueSep = PEPSValues.ATTRIBUTE_VALUE_SEP.toString();
+    
+    final String escAttrSep = "%" + (int) attrSep.charAt(0);
+    final String escAttrTupleSep = "%" + (int) attrTupleSep.charAt(0);
+    final String escAttrValueSep = "%" + (int) attrValueSep.charAt(0);
+    
+    return value.replace(attrSep, escAttrSep)
+      .replace(attrTupleSep, escAttrTupleSep)
+      .replace(attrValueSep, escAttrValueSep);
+  }
+  
+  /**
+   * Unescape any given string.
+   * 
+   * @param value The HTTP Value to be unescaped.
+   * 
+   * @return The value unescaped value.
+   */
+  public static String unescape(final String value) {
+    final String attrSep = PEPSValues.ATTRIBUTE_SEP.toString();
+    final String attrTupleSep = PEPSValues.ATTRIBUTE_TUPLE_SEP.toString();
+    final String attrValueSep = PEPSValues.ATTRIBUTE_VALUE_SEP.toString();
+    
+    final String escAttrSep = "%" + (int) attrSep.charAt(0);
+    final String escAttrTupleSep = "%" + (int) attrTupleSep.charAt(0);
+    final String escAttrValueSep = "%" + (int) attrValueSep.charAt(0);
+    
+    return value.replace(escAttrSep, attrSep)
+      .replace(escAttrTupleSep, attrTupleSep)
+      .replace(escAttrValueSep, attrValueSep);
+  }
+  
+  /**
+   * Appends the string representation of an object to a StringBuilder.
+   * 
+   * @param strBuilder The StringBuilder to append to.
+   * @param val The string representation of an object.
+   */
+  public static void appendIfNotNull(final StringBuilder strBuilder,
+    final Object val) {
+    
+    if (val != null) {
+      strBuilder.append(val);
+    }
+  }
+  
+  /**
+   * Given a separator and a list of strings, joins the list, as a string,
+   * separated by the separator string.
+   * 
+   * @param list The list of strings to join.
+   * @param separator The separator string.
+   * @return the list, as a string, separated by the separator string.
+   */
+  public static String listToString(final List<String> list,
+    final String separator) {
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    for (final String s : list) {
+      if (!StringUtils.isEmpty(s)) {
+        strBuilder.append(AttributeUtil.escape(s) + separator);
+      }
+    }
+    return strBuilder.toString();
+  }
+  
+  /**
+   * Given a separator and a map of strings to strings, joins the map, as a
+   * string, separated by the separator string with the pair key/value
+   * concatenated with a '='.
+   * 
+   * @param map The map of strings to join.
+   * @param separator The separator string.
+   * 
+   * @return the map of strings, as a string, separated by the separator string
+   *         with the pair key/value concatenated with a '='.
+   */
+  public static String mapToString(final Map<String, String> map,
+    final String separator) {
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    final Iterator<Entry<String, String>> valuesIt = map.entrySet().iterator();
+    while (valuesIt.hasNext()) {
+      final Entry<String, String> entry = valuesIt.next();
+      strBuilder.append(entry.getKey());
+      strBuilder.append('=');
+      strBuilder.append(AttributeUtil.escape(entry.getValue()));
+      strBuilder.append(separator);
+    }
+    return strBuilder.toString();
+  }
+  
+  /**
+   * Validates the attribute value format.
+   * 
+   * @param value The attribute value to validate.
+   * 
+   * @return true if value has a valid format.
+   */
+  public static boolean isValidValue(final String value) {
+    boolean retVal = false;
+    if (value != null && value.charAt(0) == '[' && value.endsWith("]")) {
+      final String tmpAttrValue = value.substring(1, value.length() - 1);
+      final String[] vals =
+        tmpAttrValue.split(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+      
+      if (tmpAttrValue.length() >= 0
+        || (vals.length > 0 && vals[0].length() > 0)) {
+        retVal = true;
+      }
+    }
+    return retVal;
+  }
+  
+  /**
+   * Validates the attribute type value. It's case insensitive. E.g. return true
+   * value to: a) "true", "TRUE", "True", ... b) "false", "FALSE", "False", ...
+   * 
+   * @param type The attribute type value.
+   * 
+   * @return true if type has a true or false (case insensitive) value.
+   */
+  public static boolean isValidType(final String type) {
+      return StringUtils.isNotEmpty(type) && (PEPSValues.TRUE.toString().equalsIgnoreCase(type) || PEPSValues.FALSE.toString().equalsIgnoreCase(type)) ;
+  }
+  
+  /**
+   * Validates the Personal attribute tuple. E.g. name:type:[value]:status
+   * 
+   * @param tuples The Personal attribute's tuple.
+   * 
+   * @return true if the tuples' format is valid.
+   * 
+   * @see PEPSUtil#validateParameter(String, String, String)
+   * @see String#equalsIgnoreCase(String)
+   */
+  public static boolean hasValidTuples(final String[] tuples) {
+    boolean retVal = false;
+
+      final int numberTuples = AttributeConstants.NUMBER_TUPLES.intValue();
+      if (tuples != null && tuples.length == numberTuples) {
+      // validate attrName
+      final int attrNameIndex = AttributeConstants.ATTR_NAME_INDEX.intValue();
+      final int attrTypeIndex = AttributeConstants.ATTR_TYPE_INDEX.intValue();
+      final int attrValueIndex = AttributeConstants.ATTR_VALUE_INDEX.intValue();
+      
+      retVal =
+        StringUtils.isNotEmpty(tuples[attrNameIndex])
+          && StringUtils.isNotEmpty(tuples[attrTypeIndex])
+          && StringUtils.isNotEmpty(tuples[attrValueIndex])
+          && AttributeUtil.isValidType(tuples[attrTypeIndex])
+          && AttributeUtil.isValidValue(tuples[attrValueIndex]);
+    }
+    return retVal;
+  }
+  
+  /**
+   * Check if all mandatory attributes have values.
+   * 
+   * @param personalAttrList The Personal Attributes List.
+   * 
+   * @return true if all mandatory attributes have values, false if at least one
+   *         attribute doesn't have value.
+   */
+  public static boolean checkMandatoryAttributes(
+    final IPersonalAttributeList personalAttrList) {
+    
+    final Iterator<PersonalAttribute> itAttributes =
+      personalAttrList.values().iterator();
+    boolean retVal = true;
+    while (itAttributes.hasNext() && retVal) {
+      final PersonalAttribute attr = itAttributes.next();
+      if (attr.isRequired()
+        && !STORKStatusCode.STATUS_AVAILABLE.toString()
+          .equals(attr.getStatus())) {
+        retVal = false;
+      }
+    }
+    return retVal;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CitizenConsent.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CitizenConsent.java.svn-base
new file mode 100644
index 000000000..9ebcfbd5a
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CitizenConsent.java.svn-base
@@ -0,0 +1,123 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class is a bean used to store the information relative to the Citizen
+ * Consent.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.15 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class CitizenConsent {
+  
+  /**
+   * Mandatory attributes list.
+   */
+  private List<String> mandatoryList;
+  
+  /**
+   * Optional attributes list.
+   */
+  private List<String> optionalList;
+  
+  /**
+   * Citizen Consent default Constructor.
+   */
+  public CitizenConsent() {
+    this.mandatoryList = new ArrayList<String>();
+    this.optionalList = new ArrayList<String>();
+  }
+  
+  /**
+   * Getter for the mandatoryList value.
+   * 
+   * @return The mandatoryList value.
+   */
+  public List<String> getMandatoryList() {
+    return this.mandatoryList;
+  }
+  
+  /**
+   * Setter for the mandatoryList value.
+   * 
+   * @param mandatoryAttrList Mandatory parameters list.
+   */
+  public void setMandatoryList(final List<String> mandatoryAttrList) {
+    this.mandatoryList = mandatoryAttrList;
+  }
+  
+  /**
+   * Setter for some mandatoryAttribute. Adds the input parameter to the
+   * mandatoryList.
+   * 
+   * @param mandatoryAttr Attribute to add to the mandatoryList.
+   */
+  public void setMandatoryAttribute(final String mandatoryAttr) {
+    this.mandatoryList.add(mandatoryAttr);
+  }
+  
+  /**
+   * Getter for the optionalList value.
+   * 
+   * @return The optionalList value.
+   */
+  public List<String> getOptionalList() {
+    return optionalList;
+  }
+  
+  /**
+   * Setter for the optionalList value.
+   * 
+   * @param optAttrList Optional parameters list.
+   */
+  public void setOptionalList(final List<String> optAttrList) {
+    this.optionalList = optAttrList;
+  }
+  
+  /**
+   * Setter for some optionalAttr. Adds the input parameter to the optionalList.
+   * 
+   * @param optionalAttr Attribute to add to the optionalList.
+   */
+  public void setOptionalAttribute(final String optionalAttr) {
+    this.optionalList.add(optionalAttr);
+  }
+  
+  /**
+   * Returns a string in the following format. "Mandatory attributes:
+   * mandatoryAttr1;mandatoryAttr2;mandatoryAttrN Optional attributes:
+   * optionalAttr1;optionalAttr2;optionalAttrN"
+   * 
+   * @return {@inheritDoc}
+   */
+  public String toString() {
+    final StringBuilder strbldr = new StringBuilder(46);
+    strbldr.append("Mandatory attributes: ");
+    for (final String str : mandatoryList) {
+      strbldr.append(str).append(';');
+    }
+    strbldr.append(" Optional attributes: ");
+    for (final String str : optionalList) {
+      strbldr.append(str).append(';');
+    }
+    return strbldr.toString();
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Country.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Country.java.svn-base
new file mode 100644
index 000000000..001f9317a
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Country.java.svn-base
@@ -0,0 +1,95 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+/**
+ * This class is a bean used to store the information relative to the Country.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.10 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class Country implements Serializable {
+  
+  /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1135994036496370993L;
+
+/**
+   * Country Id.
+   */
+  private String countryId;
+  
+  /**
+   * Country Name.
+   */
+  private String countryName;
+  
+  /**
+   * Country Constructor.
+   * 
+   * @param cId Id of the Country.
+   * @param cName Name of the Country.
+   */
+  public Country(final String cId, final String cName) {
+    
+    this.countryId = cId;
+    this.countryName = cName;
+  }
+  
+  /**
+   * Getter for the countryId value.
+   * 
+   * @return The countryId value.
+   */
+  public String getCountryId() {
+    
+    return countryId;
+  }
+  
+  /**
+   * Setter for the countryId value.
+   * 
+   * @param cId Id of the Country.
+   */
+  public void setCountryId(final String cId) {
+    
+    this.countryId = cId;
+  }
+  
+  /**
+   * Getter for the countryName value.
+   * 
+   * @return The countryName value.
+   */
+  public String getCountryName() {
+    
+    return countryName;
+  }
+  
+  /**
+   * Setter for the countryName value.
+   * 
+   * @param name Name of the Country.
+   */
+  public void setCountryName(final String name) {
+    
+    this.countryName = name;
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CountryCodes.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CountryCodes.java.svn-base
new file mode 100644
index 000000000..54345f3ea
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/CountryCodes.java.svn-base
@@ -0,0 +1,79 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This class contains all the ISO 3166-1 Alpha 3 Country Codes.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2011-04-14 00:24:56 $
+ */
+public final class CountryCodes {
+  
+  /**
+   * Private Constructor.
+   */
+  private CountryCodes() {
+    
+  }
+  
+  /**
+   * ISO 3166-1 Alpha 3 Country Codes.
+   */
+  private static List<String> countrysAlpha3 = Arrays.asList("ABW", "AFG",
+    "AGO", "AIA", "ALA", "ALB", "AND", "ANT", "ARE", "ARG", "ARM", "ASM",
+    "ATA", "ATF", "ATG", "AUS", "AUT", "AZE", "BDI", "BEL", "BEN", "BES",
+    "BFA", "BGD", "BGR", "BHR", "BHS", "BIH", "BLM", "BLR", "BLZ", "BMU",
+    "BOL", "BRA", "BRB", "BRN", "BTN", "BUR", "BVT", "BWA", "BYS", "CAF",
+    "CAN", "CCK", "CHE", "CHL", "CHN", "CIV", "CMR", "COD", "COG", "COK",
+    "COL", "COM", "CPV", "CRI", "CSK", "CUB", "CUW", "CXR", "CYM", "CYP",
+    "CZE", "DEU", "DJI", "DMA", "DNK", "DOM", "DZA", "ECU", "EGY", "ERI",
+    "ESH", "ESP", "EST", "ETH", "FIN", "FJI", "FLK", "FRA", "FRO", "FSM",
+    "GAB", "GBR", "GEO", "GGY", "GHA", "GIB", "GIN", "GLP", "GMB", "GNB",
+    "GNQ", "GRC", "GRD", "GRL", "GTM", "GUF", "GUM", "GUY", "HKG", "HMD",
+    "HND", "HRV", "HTI", "HUN", "IDN", "IMN", "IND", "IOT", "IRL", "IRN",
+    "IRQ", "ISL", "ISR", "ITA", "JAM", "JEY", "JOR", "JPN", "KAZ", "KEN",
+    "KGZ", "KHM", "KIR", "KNA", "KOR", "KWT", "LAO", "LBN", "LBR", "LBY",
+    "LCA", "LIE", "LKA", "LSO", "LTU", "LUX", "LVA", "MAC", "MAF", "MAR",
+    "MCO", "MDA", "MDG", "MDV", "MEX", "MHL", "MKD", "MLI", "MLT", "MMR",
+    "MNE", "MNG", "MNP", "MOZ", "MRT", "MSR", "MTQ", "MUS", "MWI", "MYS",
+    "MYT", "NAM", "NCL", "NER", "NFK", "NGA", "NIC", "NIU", "NLD", "NOR",
+    "NPL", "NRU", "NZL", "OMN", "PAK", "PAN", "PCN", "PER", "PHL", "PLW",
+    "PNG", "POL", "PRI", "PRK", "PRT", "PRY", "PSE", "PYF", "QAT", "REU",
+    "ROM", "ROU", "RUS", "RWA", "SAU", "SCG", "SDN", "SEN", "SGP", "SGS",
+    "SHN", "SJM", "SLB", "SLE", "SLV", "SMR", "SOM", "SPM", "SRB", "STP",
+    "SUR", "SVK", "SVN", "SXW", "SWE", "SWZ", "SYC", "SYR", "TCA", "TCD",
+    "TGO", "THA", "TJK", "TKL", "TKM", "TLS", "TMP", "TON", "TTO", "TUN",
+    "TUR", "TUV", "TWN", "TZA", "UGA", "UKR", "UMI", "URY", "USA", "UZB",
+    "VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF", "WSM", "YEM",
+    "YUG", "ZAF", "ZAR", "ZMB", "ZWE");
+  
+  /**
+   * Searches the CountryCode (3166-1 alpha3 format) an return true if it
+   * exists.
+   * 
+   * @param countryCode The Country code to search.
+   * 
+   * @return true if the CountryCode exists, false otherwise.
+   */
+  public static boolean hasCountryCodeAlpha3(final String countryCode) {
+    
+    return CountryCodes.countrysAlpha3.contains(countryCode);
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/DateUtil.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/DateUtil.java.svn-base
new file mode 100644
index 000000000..9c0bd6775
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/DateUtil.java.svn-base
@@ -0,0 +1,169 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.sql.Timestamp;
+import java.util.GregorianCalendar;
+
+import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
+import org.joda.time.Years;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import eu.stork.peps.auth.commons.exceptions.SecurityPEPSException;
+
+/**
+ * This class holds static helper methods for Date Operations.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.4 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class DateUtil {
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(DateUtil.class.getName());
+  
+  /**
+   * yyyy Date format size.
+   */
+  private static final int YEAR_DATE_SIZE = 4;
+  
+  /**
+   * yyyyMM Date format size.
+   */
+  private static final int MONTH_DATE_SIZE = 6;
+  
+  /**
+   * Private constructor. Prevents the class from being instantiated.
+   */
+  private DateUtil() {
+    // empty constructor
+  }
+  
+  /**
+   * Fulfils dateValue with a valid date. The following roles are applied: a) If
+   * the dateValue only contains the year then fulfils with last year's day.
+   * e.g. this method returns 19951231 to the 1995 dateValue. b) If the
+   * dateValue contains the year and the month then fulfils with last month's
+   * day. e.g. this method returns 19950630 to the 199505 dateValue.
+   * 
+   * @param dateValue The date to be fulfilled.
+   * 
+   * @return The dateValue fulfilled.
+   */
+  private static String fulfilDate(final String dateValue) {
+    
+    final StringBuffer strBuf = new StringBuffer();
+    strBuf.append(dateValue);
+    // if the IdP just provides the year then we must fullfil the date.
+    if (dateValue.length() == YEAR_DATE_SIZE) {
+      strBuf.append(PEPSValues.LAST_MONTH.toString());
+    }
+    // if the IdP provides the year and the month then we must fullfil the
+    // date.
+    if (dateValue.length() == MONTH_DATE_SIZE
+      || strBuf.length() == MONTH_DATE_SIZE) {
+      // IdP doesn't provide the day, so we will use DateTime to
+      // calculate it.
+      final String noDayCons = PEPSValues.NO_DAY_DATE_FORMAT.toString();
+      final DateTimeFormatter fmt = DateTimeFormat.forPattern(noDayCons);
+      final DateTime dateTime = fmt.parseDateTime(strBuf.toString());
+      // Append the last month's day.
+      strBuf.append(dateTime.dayOfMonth().withMaximumValue().getDayOfMonth());
+    }
+    
+    return strBuf.toString();
+  }
+  
+  /**
+   * Validates the dateValue format: a) if has a valid size; b) if has a numeric
+   * value; Note: dateValue must have the format yyyyMMdd.
+   * 
+   * @param dateValueTmp The date to be validated.
+   * @param pattern The accepted date format.
+   * 
+   * @return true if the date has a valid format.
+   */
+  public static boolean isValidFormatDate(final String dateValueTmp,
+    final String pattern) {
+    
+    boolean retVal = true;
+    try {
+      final String dateValue = DateUtil.fulfilDate(dateValueTmp);
+      
+      final DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
+      fmt.parseDateTime(dateValue);
+    } catch (final Exception e) {
+      // We catch Exception because we only have to return false
+      // value!
+      retVal = false;
+    }
+    return retVal;
+  }
+  
+  /**
+   * Calculates the age for a given date string.
+   * 
+   * @param dateVal The date to be validated.
+   * @param now The current date.
+   * @param pattern The date pattern.
+   * 
+   * @return The age value.
+   */
+  public static int calculateAge(final String dateVal, final DateTime now,
+    final String pattern) {
+    
+    if (DateUtil.isValidFormatDate(dateVal, pattern)) {
+      try {
+        final String dateValueTemp = DateUtil.fulfilDate(dateVal);
+        final DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
+        final DateTime dateTime = fmt.parseDateTime(dateValueTemp);
+        // Calculating age
+        final Years age = Years.yearsBetween(dateTime, now);
+        
+        return age.getYears();
+      } catch (final IllegalArgumentException e) {
+        LOG.warn("Invalid date format (" + pattern
+          + ") or an invalid dateValue.");
+        throw new SecurityPEPSException(
+          PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorCode()),
+          PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorMessage()),
+          e);
+      }
+    } else {
+      LOG.warn("Couldn't calculate Age, invalid date!");
+      throw new SecurityPEPSException(
+        PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorCode()),
+        PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorMessage()));
+    }
+    
+  }
+  
+  /**
+   * Generates the current timestamp.
+   * 
+   * @return timestamp The current timestamp
+   */
+  public static Timestamp currentTimeStamp() {
+    final GregorianCalendar cal = new GregorianCalendar();
+    final long millis = cal.getTimeInMillis();
+    return new Timestamp(millis);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeListProcessor.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeListProcessor.java.svn-base
new file mode 100644
index 000000000..b13c70f04
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeListProcessor.java.svn-base
@@ -0,0 +1,148 @@
+package eu.stork.peps.auth.commons;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Interface for {@link AttributeListProcessor}.
+ * 
+ * @author ricardo.ferreira@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ * 
+ * @see IPersonalAttributeList
+ */
+public interface IAttributeListProcessor {
+  
+  /**
+   * Checks if attribute list only contains allowed attributes.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the allowed attributes
+   * 
+   * @return true is all the attributes are allowed.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasAllowedAttributes(final IPersonalAttributeList attrList, final List<String> attributes);
+  
+  /**
+   * Lookup for business attribute.
+   * 
+   * @param attrList the requested attribute list
+   * @param normalAttributes the normal attributes
+   * 
+   * @return true is at least one business attribute was requested.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasBusinessAttributes(final IPersonalAttributeList attrList, final List<String> normalAttributes);
+  
+  /**
+   * Lookup for business attribute in normal attribute list (loaded by
+   * implementation).
+   * 
+   * @param attrList the requested attribute list
+   * 
+   * @return true is at least one business attribute was requested.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasBusinessAttributes(final IPersonalAttributeList attrList);
+  
+  /**
+   * Adds eIdentifier, name, surname, and DateOfBirth attributes to get business
+   * attributes from some AP.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the list of attributes to add (eIdentifier, name,
+   *          surname, and DateOfBirth).
+   * 
+   * @return the requested attribute list and the new attributes added
+   *         (eIdentifier, name, surname, and DateOfBirth).
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList addAPMandatoryAttributes(final IPersonalAttributeList attrList, final List<String> attributes);
+  
+  /**
+   * Adds eIdentifier, name, surname, and DateOfBirth attributes, loaded by
+   * implementation, to get business attributes from some AP.
+   * 
+   * @param attrList the requested attribute list
+   * 
+   * @return the requested attribute list and the new attributes added
+   *         (eIdentifier, name, surname, and DateOfBirth).
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList addAPMandatoryAttributes(final IPersonalAttributeList attrList);
+  
+  /**
+   * Removes from attribute list the given list of attributes.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the list of attributes to remove.
+   * 
+   * @return the requested attribute list and the attributes removed.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList removeAPMandatoryAttributes(final IPersonalAttributeList attrList, final List<String> attributes);
+  
+  /**
+   * Removes from attribute list the given list of attributes and change
+   * attributes status if attribute was optional in the request.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the map of attributes (attribute name, mandatory/optional) to remove.
+   * 
+   * @return the requested attribute list and the attributes removed
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList removeAPMandatoryAttributes(IPersonalAttributeList attrList, Map<String, Boolean> attributes);
+  
+  /**
+   * Checks if mandate attribute exist in the requested Attribute List. Power
+   * attribute name to lookup is loaded by implementation.
+   * 
+   * @param attrList the requested attribute list.
+   * 
+   * @return true if mandate attribute exists or false otherwise.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasPowerAttribute(final IPersonalAttributeList attrList);
+  
+  /**
+   * Checks if attribute name was requested and has value.
+   * 
+   * @param attrList the requested attribute list.
+   * @param attrName the attribute name to lookup for .
+   * 
+   * @return true if attribute was requested and has value or false otherwise.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasAttributeValue(final IPersonalAttributeList attrList, final String attrName);
+  
+  /**
+   * Checks if attribute has value.
+   * 
+   * @param attr the attribute to check.
+   * 
+   * @return true if has value;
+   * 
+   * @see PersonalAttribute
+   */
+  boolean hasAttributeValue(final PersonalAttribute attr);
+  
+  /**
+   * Gets a map (attribute name, attribute isRequired) of attributes added to attribute list.
+   * 
+   * @return the Map of attributes added and if is required to attribute list.
+   */
+  Map<String, Boolean> getNormalAttributesAdded();
+
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeProvidersMap.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeProvidersMap.java.svn-base
new file mode 100644
index 000000000..733399ca3
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IAttributeProvidersMap.java.svn-base
@@ -0,0 +1,82 @@
+package eu.stork.peps.auth.commons;
+
+import java.util.Iterator;
+
+/**
+ * Interface for Attributes Providers map.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.00 $, $Date: 2013-09-20 $
+ */
+public interface IAttributeProvidersMap {
+  
+  /**
+   * Returns the object associated the the given key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return The object associated the the given key.
+   */
+  IPersonalAttributeList get(AttributeSource key);
+  
+  /**
+   * Associates a key to a value, and inserts them in the session object.
+   * 
+   * @param key with which the specified value is to be associated.
+   * @param value to be associated with the specified key.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  Object put(AttributeSource key, IPersonalAttributeList value);
+  
+  /**
+   * Removes the mapping for this key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  IPersonalAttributeList remove(AttributeSource key);
+  
+  /**
+   * Returns the number of key-value mappings in this map.
+   * 
+   * @return the number of key-value mappings in this map.
+   */
+  int size();
+  
+  /**
+   * Returns true if this map contains a mapping for the specified key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return true if this map contains a mapping for the specified key.
+   */
+  boolean containsKey(AttributeSource key);
+  
+  /**
+   * Removes all mappings from this map.
+   */
+  void clear();
+  
+  /**
+   * Returns true if this map contains no key-value mappings.
+   * 
+   * @return true if this map contains no key-value mappings.
+   */
+  boolean isEmpty();
+
+  /**
+   * Returns an Iterator of the keys contained in this map. The implementation must
+   * take care in order for the Iterator to have predictable order of the returned
+   * keys.
+   *
+   * @return an iterator of the keys contained in this map
+   */
+  Iterator<AttributeSource> keyIterator();
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IPersonalAttributeList.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IPersonalAttributeList.java.svn-base
new file mode 100644
index 000000000..b24c915c0
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IPersonalAttributeList.java.svn-base
@@ -0,0 +1,194 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Interface for {@link PersonalAttributeList}.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.16 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see PersonalAttribute
+ */
+@SuppressWarnings("PMD.CloneMethodMustImplementCloneable")
+public interface IPersonalAttributeList extends Iterable<PersonalAttribute>,
+  Cloneable {
+  
+  /**
+   * Associates the specified value with the specified key in this Personal
+   * Attribute List.
+   * 
+   * @param key with which the specified value is to be associated.
+   * @param value to be associated with the specified key.
+   * 
+   * @return the previous value associated with key, or null if there was no
+   *         mapping for key.
+   * 
+   * @see PersonalAttribute
+   */
+  PersonalAttribute put(String key, PersonalAttribute value);
+  
+  /**
+   * Returns the value to which the specified key is mapped, or null if this map
+   * contains no mapping for the key.
+   * 
+   * @param key whose associated value is to be returned.
+   * 
+   * @return The value to which the specified key is mapped, or null if this map
+   *         contains no mapping for the key.
+   * 
+   * @see PersonalAttribute
+   */
+  PersonalAttribute get(Object key);
+  
+  /**
+   * Adds to the PersonalAttributeList the given PersonalAttribute. It sets the
+   * attribute name as the key to the attribute value.
+   * 
+   * @param value PersonalAttribute to add to the PersonalAttributeList
+   */
+  void add(PersonalAttribute value);
+  
+  /**
+   * Get the size of the Personal Attribute List.
+   * 
+   * @return size of the Personal Attribute List.
+   */
+  int size();
+  
+  /**
+   * Checks if the Personal Attribute List contains the given key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return true if the Personal Attribute List contains the given key, false
+   *         otherwise.
+   */
+  boolean containsKey(Object key);
+  
+  /**
+   * Getter for the iterator of the Personal Attribute List values.
+   * 
+   * @return The iterator for the Personal Attribute List values.
+   * 
+   * @see PersonalAttribute
+   */
+  Iterator<PersonalAttribute> iterator();
+  
+  /**
+   * Creates a Personal Attribute List from a String representing an Attribute
+   * List.
+   * 
+   * @param attrList String Object representing the attribute list.
+   */
+  void populate(String attrList);
+  
+  /**
+   * Removes the mapping for this key from this map if present.
+   * 
+   * @param key key whose mapping is to be removed from the map.
+   * @return previous value associated with specified key, or <tt>null</tt> if
+   *         there was no mapping for key. A <tt>null</tt> return can also
+   *         indicate that the map previously associated <tt>null</tt> with the
+   *         specified key.
+   */
+  PersonalAttribute remove(Object key);
+  
+  /**
+   * Returns a collection view of the values contained in this map. The
+   * collection is backed by the map, so changes to the map are reflected in the
+   * collection, and vice-versa. The collection supports element removal, which
+   * removes the corresponding mapping from this map, via the
+   * <tt>Iterator.remove</tt>, <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+   * <tt>retainAll</tt>, and <tt>clear</tt> operations. It does not support the
+   * <tt>add</tt> or <tt>addAll</tt> operations.
+   * 
+   * @return a collection view of the values contained in this map.
+   */
+  Collection<PersonalAttribute> values();
+  
+  /**
+   * Returns a {@link Set} view of the keys contained in this map.
+   * The set is backed by the map, so changes to the map are
+   * reflected in the set, and vice-versa.  If the map is modified
+   * while an iteration over the set is in progress (except through
+   * the iterator's own <tt>remove</tt> operation), the results of
+   * the iteration are undefined.  The set supports element removal,
+   * which removes the corresponding mapping from the map, via the
+   * <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
+   * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
+   * operations.  It does not support the <tt>add</tt> or <tt>addAll</tt>
+   * operations.
+   *
+   * @return a set view of the keys contained in this map
+   */
+  Set<String> keySet();
+  
+  
+  /**
+   * Returns a IPersonalAttributeList of the complex attributes.
+   * 
+   * @return an IPersonalAttributeList of the complex attributes.
+   */
+  IPersonalAttributeList getComplexAttributes();
+  
+  /**
+   * Returns a IPersonalAttributeList of the simple value attributes.
+   * 
+   * @return an IPersonalAttributeList of the simple value attributes.
+   */
+  IPersonalAttributeList getSimpleValueAttributes();
+  
+  /**
+   * Returns a IPersonalAttributeList of the mandatory attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map.
+   */
+  IPersonalAttributeList getMandatoryAttributes();
+  
+  /**
+   * Returns a IPersonalAttributeList of the optional attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the optional attributes contained in this map.
+   */
+  IPersonalAttributeList getOptionalAttributes();
+  
+  /**
+   * Returns <tt>true</tt> if this map contains no key-value mappings.
+   * 
+   * @return <tt>true</tt> if this map contains no key-value mappings.
+   */
+  boolean isEmpty();
+  
+  /**
+   * Returns <tt>true</tt> if this map contains at least one element that doesn't have value.
+   * 
+   * @return <tt>true</tt> if this map contains at least one element that doesn't have value.
+   */
+  boolean hasMissingValues();
+
+  /**
+   * Returns a copy of this <tt>IPersonalAttributeList</tt> instance.
+   *
+   * @return The copy of this IPersonalAttributeList.
+   */
+  Object clone() throws CloneNotSupportedException;
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkLogger.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkLogger.java.svn-base
new file mode 100644
index 000000000..33eb618f0
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkLogger.java.svn-base
@@ -0,0 +1,239 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * Interface for stork logging.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.10 $, $Date: 2011-02-17 22:44:34 $
+ */
+public interface IStorkLogger {
+  
+  /**
+   * Getter for SpApplication.
+   * 
+   * @return The SpApplication value.
+   */
+  String getSpApplication();
+  
+  /**
+   * Setter for SpApplication.
+   * 
+   * @param spApplication The SP Application.
+   */
+  void setSpApplication(String spApplication);
+  
+  /**
+   * Getter for ProviderName.
+   * 
+   * @return The ProviderName value.
+   */
+  String getProviderName();
+  
+  /**
+   * Setter for ProviderName.
+   * 
+   * @param providerName The provider name.
+   */
+  void setProviderName(String providerName);
+  
+  /**
+   * 
+   * Getter for Origin.
+   * 
+   * @return The Origin value.
+   * 
+   */
+  String getOrigin();
+  
+  /**
+   * Setter for Origin.
+   * 
+   * @param origin The origin.
+   */
+  void setOrigin(String origin);
+  
+  /**
+   * 
+   * Getter for QAA Level.
+   * 
+   * @return The QAA Level value.
+   * 
+   */
+  int getQaaLevel();
+  
+  /**
+   * Setter for QAA Level.
+   * 
+   * @param qaaLevel The qaa level.
+   */
+  void setQaaLevel(int qaaLevel);
+  
+  /**
+   * 
+   * Getter for timestamp.
+   * 
+   * @return The timestamp value.
+   * 
+   */
+  String getTimestamp();
+  
+  /**
+   * Setter for timestamp.
+   * 
+   * @param timestamp The request's timestamp.
+   */
+  void setTimestamp(String timestamp);
+  
+  /**
+   * Getter for InResponseTo.
+   * 
+   * @return The InResponseTo value.
+   */
+  String getInResponseTo();
+  
+  /**
+   * Setter for InResponseTo.
+   * 
+   * @param inResponseTo The Saml's response id.
+   */
+  void setInResponseTo(String inResponseTo);
+  
+  /**
+   * Getter for InResponseToSPReq.
+   * 
+   * @return The InResponseToSPReq value.
+   */
+  String getInResponseToSPReq();
+  
+  /**
+   * Setter for InResponseToSPRequ.
+   * 
+   * @param inResponseToSPReq The Saml's response id.
+   */
+  void setInResponseToSPReq(String inResponseToSPReq);
+  
+  /**
+   * Getter for opType.
+   * 
+   * @return The opType value.
+   */
+  String getOpType();
+  
+  /**
+   * Setter for opType.
+   * 
+   * @param opType The operation type.
+   */
+  void setOpType(String opType);
+  
+  /**
+   * Getter for destination.
+   * 
+   * @return The destination value.
+   */
+  String getDestination();
+  
+  /**
+   * Setter for destinationIp.
+   * 
+   * @param destination The remote IP.
+   */
+  void setDestination(String destination);
+  
+  /**
+   * Getter for message or assertion consumer.
+   * 
+   * @return The message or assertion consumer.
+   */
+  String getMessage();
+  
+  /**
+   * Setter for message or assertion consumer.
+   * 
+   * @param message or assertion consumer.
+   */
+  void setMessage(String message);
+  
+  /**
+   * Getter for country.
+   * 
+   * @return The country value.
+   */
+  String getCountry();
+  
+  /**
+   * Setter for country.
+   * 
+   * @param country The country.
+   */
+  void setCountry(String country);
+  
+  /**
+   * Getter for samlHash.
+   * 
+   * @return The samlHash value.
+   */
+  byte[] getSamlHash();
+  
+  /**
+   * Setter for samlHash.
+   * 
+   * @param samlHash the encrypted SAML token
+   */
+  void setSamlHash(byte[] samlHash);
+  
+  /**
+   * Getter for msgId.
+   * 
+   * @return the msgId
+   */
+  String getMsgId();
+  
+  /**
+   * Setter for msgId.
+   * 
+   * @param msgId the ID of the originator of this message
+   */
+  void setMsgId(String msgId);
+  
+  /**
+   * Getter for sPMsgId.
+   * 
+   * @return the sPMsgId
+   */
+  String getSPMsgId();
+  
+  /**
+   * Setter for sPMsgId.
+   * 
+   * @param sPMsgId the ID of the originator of this message
+   */
+  void setSPMsgId(String sPMsgId);
+  
+  /**
+   * The format of the returned String must be the following:
+   * "requestCounter#ddMMMyyyykk:mm:ss#opType#originIp#originName
+   * #destinationIp#destinationName#samlHash#[originatorName#msgId#]"
+   * 
+   * The values enclosed in '[]' only apply when logging responses.
+   * 
+   * @return {@inheritDoc}
+   */
+  @Override
+  String toString();
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkSession.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkSession.java.svn-base
new file mode 100644
index 000000000..f38b41838
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/IStorkSession.java.svn-base
@@ -0,0 +1,85 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * Interface for stork session.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.9 $, $Date: 2010-11-17 05:15:28 $
+ */
+public interface IStorkSession {
+  
+  /**
+   * Returns the object associated the the given key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return The object associated the the given key.
+   */
+  Object get(Object key);
+  
+  /**
+   * Associates a key to a value, and inserts them in the session object.
+   * 
+   * @param key with which the specified value is to be associated.
+   * @param value to be associated with the specified key.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  Object put(String key, Object value);
+  
+  /**
+   * Removes the mapping for this key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  Object remove(Object key);
+  
+  /**
+   * Returns the number of key-value mappings in this map.
+   * 
+   * @return the number of key-value mappings in this map.
+   */
+  int size();
+  
+  /**
+   * Returns true if this map contains a mapping for the specified key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return true if this map contains a mapping for the specified key.
+   */
+  boolean containsKey(Object key);
+  
+  /**
+   * Removes all mappings from this map.
+   */
+  void clear();
+  
+  /**
+   * Returns true if this map contains no key-value mappings.
+   * 
+   * @return true if this map contains no key-value mappings.
+   */
+  boolean isEmpty();
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Linker.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Linker.java.svn-base
new file mode 100644
index 000000000..6e7c891da
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/Linker.java.svn-base
@@ -0,0 +1,316 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information of Attribute Providers, the Attribute
+ * List to be requested, the Assertions returned by the Attribute Providers and the values
+ * that each Attribute has. This information along with the current status of the Linker (the
+ * attribute providers that were queried and the remaining providers) is used by the PEPS
+ * actions in order to complete the Attribute gathering.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.50 $, $Date: 2013-11-28 $
+ */
+public final class Linker implements Serializable {
+	/**
+	 * Unique identifier.
+	 */
+	private static final long serialVersionUID = -3268006381745987237L;
+
+	/**
+	 * Logger object.
+	 */
+	private static final Logger LOG = Logger.getLogger(Linker.class.getName());
+
+	/**
+	 * Attributes Providers map.
+	 */
+	private IAttributeProvidersMap attributeProvidersMap;
+
+	/**
+	 * Assertion map.
+	 */
+	private LinkedHashMap<AttributeSource, STORKAttrQueryResponse> assertions;
+
+	/**
+	 * The current index of local (domestic) Attribute Providers.
+	 */
+	private int localIndex;
+
+	/**
+	 * The current index of remote (foreign) Attribute Providers - countries.
+	 */
+	private int remoteIndex;
+
+	/**
+	 * Constructs an empty Linker object.
+	 */
+	public Linker() {
+		localIndex = 0;
+		remoteIndex = 0;
+		
+		assertions = new LinkedHashMap<AttributeSource, STORKAttrQueryResponse>();
+	}
+
+	/**
+	 * Based on the internal state of the Linker it returns the next local Attribute Source
+	 *
+	 * @return The next Attribute Source or null if not found
+	 *
+	 * @see AttributeSource
+	 */
+	public AttributeSource getNextLocalProvider() {
+		Iterator<AttributeSource> iterator;
+		AttributeSource source, found;
+		int curIndex = 0;
+
+		found = null;
+
+		if ( attributeProvidersMap!=null && !attributeProvidersMap.isEmpty() ) {
+			iterator = attributeProvidersMap.keyIterator();
+			while (iterator.hasNext()) {
+				source = iterator.next();
+
+				if ( source.getSourceType()==AttributeSource.SOURCE_LOCAL_APROVIDER ) {
+					if ( curIndex>=localIndex ) {
+						found = source;
+
+						break;
+					}
+
+					curIndex++;
+				}
+			}
+		}
+
+		return found;
+	}
+
+	/**
+	 * Based on the internal state of the Linker it returns the next remote Attribute Source
+	 *
+	 * @return The next Attribute Source or null if not found
+	 *
+	 * @see AttributeSource
+	 */
+	public AttributeSource getNextRemoteProvider() {
+		Iterator<AttributeSource> iterator;
+		AttributeSource source, found;
+		int curIndex = 0;
+
+		found = null;
+
+		if ( attributeProvidersMap !=null && !attributeProvidersMap.isEmpty() ) {
+			iterator = attributeProvidersMap.keyIterator();
+			while (iterator.hasNext()) {
+				source = iterator.next();
+
+				if ( source.getSourceType()==AttributeSource.SOURCE_REMOTE_COUNTRY ) {
+					if ( curIndex>=remoteIndex ) {
+						found = source;
+
+						break;
+					}
+
+					curIndex++;
+				}
+			}
+		}
+
+		return found;
+	}
+
+	/**
+	 * It updates the Linker with the values returned by the Attribute Source. It also advances
+	 * to the next index in order to mark this attribute source as completed.
+	 * 
+	 * @param source The Attribute Source that was queried for attribute values.
+	 * @param attrResponse The attrResponse returned by the Attribute Source that contains the attribute values.
+	 *
+	 * @see AttributeSource, STORKAttrQueryResponse
+	 */
+	public void setProviderReponse(AttributeSource source, STORKAttrQueryResponse attrResponse) {
+		if ( source.getSourceType()==AttributeSource.SOURCE_REMOTE_COUNTRY )
+			remoteIndex++;
+		else
+			localIndex++;
+
+		//Assertion storage
+		this.assertions.put(source, attrResponse);
+
+		this.attributeProvidersMap.put(source, attrResponse.getPersonalAttributeList());
+		//this.attributeProvidersMap.put(source, attrResponse.getTotalPersonalAttributeList());
+	}
+
+	/**
+	 * Reset the internal state of the local Attribute Source in order to start over.
+	 */
+	public void resetLocalIndex() {
+		localIndex = 0;
+	}
+
+	/**
+	 * Reset the internal state of the remote Attribute Source in order to start over.
+	 */
+	public void resetRemoteIndex() {
+		remoteIndex = 0;
+	}
+
+	/**
+	 * Setter for attributeProvidersMap.
+	 * 
+	 * @param attributeProvidersMap The attributeProvidersMap to set.
+	 */
+	public void setAttributeProvidersMap(IAttributeProvidersMap attributeProvidersMap) {
+		this.attributeProvidersMap = attributeProvidersMap;
+	}
+
+	/**
+	 * Getter for attributeProvidersMap.
+	 * 
+	 * @return attributeProvidersMap
+	 */
+	public IAttributeProvidersMap getAttributeProvidersMap() {
+		return attributeProvidersMap;
+	}
+
+	/**
+	 * Returns the Personal Attribute list of the provided Attribute Source.
+	 *
+	 * @param source The attributeSource in reference
+	 * 
+	 * @return The IPersonalAttributeList assosiated with this source or null if empty
+	 *
+	 * @see IPersonalAttributeList
+	 */
+	public IPersonalAttributeList getProviderAttributes(AttributeSource source) {
+		if ( attributeProvidersMap.containsKey(source) )
+			return attributeProvidersMap.get(source);
+		else
+			return null;
+	}
+
+	/**
+	 * Returns the merged Personal Attribute list from all the Attribute Sources.
+	 *
+	 * @return The IPersonalAttributeList merged Personal Attribute list or null if empty
+	 *
+	 * @see IPersonalAttributeList
+	 */
+	public IPersonalAttributeList getAllAttributes() {
+		Iterator<AttributeSource> iterator;
+		AttributeSource source;
+		IPersonalAttributeList list, merged;
+
+		merged = null;
+
+		if ( attributeProvidersMap !=null && !attributeProvidersMap.isEmpty() ) {
+			iterator = attributeProvidersMap.keyIterator();
+
+			merged = new PersonalAttributeList();
+			while (iterator.hasNext()) {
+				source = iterator.next();
+				list = this.getProviderAttributes(source);
+
+				for (final PersonalAttribute pa : list) {
+					merged.add(pa);
+				}
+			}
+		}
+
+		return merged;
+	}
+
+	/**
+	 * Returns a List with all the assertions gathered by the AAS-PEPS module
+	 * returned both by local APs or remote A-PEPS.
+	 * 
+	 * @return The assertions returned from the APs and A-PEPS
+	 */
+	public List<STORKAttrQueryResponse> getAttrQueryResponseList() {
+		List<STORKAttrQueryResponse> originalAssertions;
+		
+		originalAssertions = new ArrayList<STORKAttrQueryResponse>();
+
+		//Gather all assertions
+	    for (STORKAttrQueryResponse element : this.assertions.values()) {
+			originalAssertions.add(element);
+	    }
+
+		return originalAssertions;
+	}
+
+	/**
+	 * Checks the internal state of the Linker and if all Attribute Sources where visited
+	 * returns true, otherwise it returns false. So if you go directly from AtPLinkerAction
+	 * to MoreAttributesAction the call will have, since the method setProviderReponse
+	 * was not executed from every Attribute Source.
+	 * 
+	 * @return true if everything is OK, false otherwise
+	 */
+	public boolean isComplete() {
+		boolean outcome = false;
+
+		LOG.debug("Check if linkder is complete: R[" + remoteIndex + "], L[" + localIndex + "], S[" + attributeProvidersMap.size() + "]");
+		if ( attributeProvidersMap !=null && !attributeProvidersMap.isEmpty() ) {
+			if ( (remoteIndex + localIndex)==attributeProvidersMap.size() )
+				outcome = true;
+		}
+		else {
+			outcome = true;
+		}
+
+		return outcome;
+	}
+
+	/**
+	 * Merge the two Linker objects. 
+	 * 
+	 * @param previous The other Linker object to merge with this one.
+	 */
+	public void mergeWith(Linker previous) {
+		//BEFORE
+		if ( LOG.isDebugEnabled() ) {
+			LOG.debug("The attributeProvidersMap from the current object.");
+			((AttributeProvidersMap)this.attributeProvidersMap).trace();
+			LOG.debug("The attributeProvidersMap from the provided object.");
+			((AttributeProvidersMap)previous.getAttributeProvidersMap()).trace();
+		}
+
+		IAttributeProvidersMap map = previous.getAttributeProvidersMap();
+		Iterator<AttributeSource> items = map.keyIterator();
+		while( items.hasNext() ) {
+			AttributeSource item = items.next();
+			IPersonalAttributeList pal = map.get(item);
+
+			if ( this.attributeProvidersMap.containsKey(item) ) {
+				IPersonalAttributeList new_pal = this.attributeProvidersMap.get(item);
+
+				for(PersonalAttribute pa : pal)
+					new_pal.add(pa);
+			}
+			else {
+				if ( item.getSourceType()==AttributeSource.SOURCE_REMOTE_COUNTRY )
+					remoteIndex++;
+				else
+					localIndex++;
+
+				this.attributeProvidersMap.put(item, pal);
+			}
+		}
+
+		//AFTER
+		if ( LOG.isDebugEnabled() ) {
+			LOG.debug("The attributeProvidersMap after the merge.");
+			((AttributeProvidersMap)this.attributeProvidersMap).trace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSErrors.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSErrors.java.svn-base
new file mode 100644
index 000000000..5da9ba494
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSErrors.java.svn-base
@@ -0,0 +1,392 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the STORK PEPS, Commons and Specific errors
+ * constant identifiers.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.10 $, $Date: 2011-02-17 22:44:34 $
+ */
+public enum PEPSErrors {
+  
+  /**
+   * Represents the 'authenticationFailed' constant error identifier.
+   */
+  AUTHENTICATION_FAILED_ERROR("authenticationFailed"),
+  /**
+   * Represents the 'spCountrySelector.errorCreatingSAML' constant error
+   * identifier.
+   */
+  SP_COUNTRY_SELECTOR_ERROR_CREATE_SAML("spCountrySelector.errorCreatingSAML"),
+  /**
+   * Represents the 'spCountrySelector.destNull' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_DESTNULL("spCountrySelector.destNull"),
+  /**
+   * Represents the 'spCountrySelector.invalidAttr' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_ATTR("spCountrySelector.invalidAttr"),
+  /**
+   * Represents the 'spCountrySelector.invalidProviderName' constant error
+   * identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_PROVIDER_NAME(
+    "spCountrySelector.invalidProviderName"),
+  /**
+   * Represents the 'spCountrySelector.invalidQaaSPid' constant error
+   * identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_QAASPID("spCountrySelector.invalidQaaSPid"),
+  /**
+   * Represents the 'spCountrySelector.invalidSpId' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_SPID("spCountrySelector.invalidSpId"),
+  /**
+   * Represents the 'spCountrySelector.invalidSPQAA' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_SPQAA("spCountrySelector.invalidSPQAA"),
+  /**
+   * Represents the 'spCountrySelector.invalidSpURL' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_SPURL("spCountrySelector.invalidSpURL"),
+  /**
+   * Represents the 'spCountrySelector.spNotAllowed' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_SPNOTALLOWED("spCountrySelector.spNotAllowed"),
+  
+  /**
+   * Represents the 'sProviderAction.errorCreatingSAML' constant error
+   * identifier.
+   */
+  SPROVIDER_SELECTOR_ERROR_CREATE_SAML("sProviderAction.errorCreatingSAML"),
+  /**
+   * Represents the 'sProviderAction.attr' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_ATTR("sProviderAction.invalidAttr"),
+  /**
+   * Represents the 'sProviderAction.country' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_COUNTRY("sProviderAction.invalidCountry"),
+  /**
+   * Represents the 'sProviderAction.relayState' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_RELAY_STATE("sProviderAction.invalidRelayState"),
+  /**
+   * Represents the 'sProviderAction.saml' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SAML("sProviderAction.invalidSaml"),
+  /**
+   * Represents the 'sProviderAction.spAlias' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPALIAS("sProviderAction.invalidSPAlias"),
+  /**
+   * Represents the 'sProviderAction.spDomain' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPDOMAIN("sProviderAction.invalidSPDomain"),
+  /**
+   * Represents the 'sProviderAction.spId' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPID("sProviderAction.invalidSPId"),
+  /**
+   * Represents the 'sProviderAction.spQAA' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPQAA("sProviderAction.invalidSPQAA"),
+  /**
+   * Represents the 'sProviderAction.spQAAId' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPQAAID("sProviderAction.invalidSPQAAId"),
+  /**
+   * Represents the 'sProviderAction.spRedirect' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPREDIRECT("sProviderAction.invalidSPRedirect"),
+  /**
+   * Represents the 'sPPowerValidationAction.invalidSPPVAttrList' constant error identifier.
+   */
+  SPPOWERVALIDATION_SELECTOR_INVALID_SP_PV_ATTR_LIST("sPPowerValidationAction.invalidSPPVAttrList"),
+  
+  /**
+   * Represents the 'sProviderAction.invalidSPProviderName' constant error
+   * identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SP_PROVIDERNAME(
+    "sProviderAction.invalidSPProviderName"),
+  /**
+   * Represents the 'sProviderAction.spNotAllowed' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_SPNOTALLOWED("sProviderAction.spNotAllowed"),
+  
+
+  /**
+   * Represents the 'internalError' constant error identifier.
+   */
+  INTERNAL_ERROR("internalError"),
+  
+  /**
+   * Represents the 'colleagueRequest.attrNull' constant error identifier.
+   */
+  COLLEAGUE_REQ_ATTR_NULL("colleagueRequest.attrNull"),
+  /**
+   * Represents the 'colleagueRequest.errorCreatingSAML' constant error
+   * identifier.
+   */
+  COLLEAGUE_REQ_ERROR_CREATE_SAML("colleagueRequest.errorCreatingSAML"),
+  /**
+   * Represents the 'colleagueRequest.invalidCountryCode' constant error
+   * identifier.
+   */
+  COLLEAGUE_REQ_INVALID_COUNTRYCODE("colleagueRequest.invalidCountryCode"),
+  /**
+   * Represents the 'colleagueRequest.invalidDestUrl' constant error identifier.
+   */
+  COLLEAGUE_REQ_INVALID_DEST_URL("colleagueRequest.invalidDestUrl"),
+  /**
+   * Represents the 'colleagueRequest.invalidQaa' constant error identifier.
+   */
+  COLLEAGUE_REQ_INVALID_QAA("colleagueRequest.invalidQaa"),
+  /**
+   * Represents the 'colleagueRequest.invalidRedirect' constant error
+   * identifier.
+   */
+  COLLEAGUE_REQ_INVALID_REDIRECT("colleagueRequest.invalidRedirect"),
+  /**
+   * Represents the 'colleagueRequest.invalidSAML' constant error identifier.
+   */
+  COLLEAGUE_REQ_INVALID_SAML("colleagueRequest.invalidSAML"),
+  
+  /**
+   * Represents the 'colleaguePVRequest.invalidPVAttrList' constant error identifier.
+   */
+  COLLEAGUE_PV_REQ_INVALID_PV_ATTR_LIST("colleaguePVRequest.invalidPVAttrList"),
+  
+  
+  /**
+   * Represents the 'cpepsRedirectUrl' constant error identifier.
+   */
+  CPEPS_REDIRECT_URL("cpepsRedirectUrl"),
+  /**
+   * Represents the 'spepsRedirectUrl' constant error identifier.
+   */
+  SPEPS_REDIRECT_URL("spepsRedirectUrl"),
+  /**
+   * Represents the 'sProviderAction.invCountry' constant error identifier.
+   */
+  SP_ACTION_INV_COUNTRY("sProviderAction.invCountry"),
+  
+  /**
+   * Represents the 'providernameAlias.invalid' constant error identifier.
+   */
+  PROVIDER_ALIAS_INVALID("providernameAlias.invalid"),
+  
+  
+  /**
+   * Represents the 'cPeps.attrNull' constant error identifier.
+   */
+  CPEPS_ATTR_NULL("cPeps.attrNull"),
+  
+  /**
+   * Represents the 'colleagueResponse.invalidSAML' constant error identifier.
+   */
+  COLLEAGUE_RESP_INVALID_SAML("colleagueResponse.invalidSAML"),
+  
+  /**
+   * Represents the 'citizenNoConsent.mandatory' constant error identifier.
+   */
+  CITIZEN_NO_CONSENT_MANDATORY("citizenNoConsent.mandatory"),
+  /**
+   * Represents the 'citizenResponse.mandatory' constant error identifier.
+   */
+  CITIZEN_RESPONSE_MANDATORY("citizenResponse.mandatory"),
+  /**
+   * Represents the 'attVerification.mandatory' constant error identifier.
+   */
+  ATT_VERIFICATION_MANDATORY("attVerification.mandatory"),
+  /**
+   * Represents the 'attrValue.verification' constant error identifier.
+   */
+  ATTR_VALUE_VERIFICATION("attrValue.verification"),
+  
+  /**
+   * Represents the 'audienceRestrictionError' constant error identifier.
+   */
+  AUDIENCE_RESTRICTION("audienceRestrictionError"),
+  /**
+   * Represents the 'auRequestIdError' constant error identifier.
+   */
+  AU_REQUEST_ID("auRequestIdError"),
+  /**
+   * Represents the 'domain' constant error identifier.
+   */
+  DOMAIN("domain"),
+  /**
+   * Represents the 'hash.error' constant error identifier.
+   */
+  HASH_ERROR("hash.error"),
+  /**
+   * Represents the 'invalidAttributeList' constant error identifier.
+   */
+  INVALID_ATTRIBUTE_LIST("invalidAttributeList"),
+  /**
+   * Represents the 'invalidAttributeValue' constant error identifier.
+   */
+  INVALID_ATTRIBUTE_VALUE("invalidAttributeValue"),
+  /**
+   * Represents the 'qaaLevel' constant error identifier.
+   */
+  QAALEVEL("qaaLevel"),
+  /**
+   * Represents the 'requests' constant error identifier.
+   */
+  REQUESTS("requests"),
+  /**
+   * Represents the 'SPSAMLRequest' constant error identifier.
+   */
+  SP_SAML_REQUEST("SPSAMLRequest"),
+  /**
+   * Represents the 'spepsSAMLRequest' constant error identifier.
+   */
+  SPEPS_SAML_REQUEST("spepsSAMLRequest"),
+  /**
+   * Represents the 'IdPSAMLResponse' constant error identifier.
+   */
+  IDP_SAML_RESPONSE("IdPSAMLResponse"),
+  /**
+   * Represents the 'cpepsSAMLResponse' constant error identifier.
+   */
+  CPEPS_SAML_RESPONSE("cpepsSAMLResponse"),
+  /**
+   * Represents the 'cpepsSAMLResponse' constant error identifier.
+   */
+  SPEPS_SAML_RESPONSE("spepsSAMLResponse"),
+  /**
+   * Represents the 'session' constant error identifier.
+   */
+  SESSION("session"),
+  /**
+   * Represents the 'invalid.session' constant error identifier.
+   */
+  INVALID_SESSION("invalid.session"),
+  /**
+   * Represents the 'invalid.sessionId' constant error identifier.
+   */
+  INVALID_SESSION_ID("invalid.sessionId"),
+  /**
+   * Represents the 'missing.sessionId' constant error identifier.
+   */
+  MISSING_SESSION_ID("sessionError"),
+  /**
+   * Represents the 'missing.mandate' constant error identifier.
+   */
+  MISSING_MANDATE("missing.mandate"),
+  /**
+   * Represents the 'AtPSAMLResponse' constant error identifier.
+   */
+  ATP_SAML_RESPONSE("AtPSAMLResponse"),
+  
+  /**
+   * Represents the 'AtPSAMLResponse' constant error identifier.
+   */
+  ATP_RESPONSE_ERROR("atp.response.error"),
+  
+  /**
+   * Represents the 'apepsSAMLRequest' constant error identifier.
+   */
+  APEPS_SAML_REQUEST("apepsSAMLRequest"),
+  
+  /**
+   * Represents the 'apepsSAMLResponse' constant error identifier.
+   */
+  APEPS_SAML_RESPONSE("apepsSAMLResponse"),
+  
+  /**
+   * Represents the 'invalid.apepsRedirectUrl' constant error identifier.
+   */  
+  INVALID_APEPS_REDIRECT_URL("invalid.apepsRedirectUrl"),
+  
+  /**
+   * Represents the 'invalid.apepsCallbackUrl' constant error identifier.
+   */  
+  INVALID_APEPS_CALLBACK_URL("invalid.apepsCallbackUrl"),
+  
+  /**
+   * Represents the 'colleagueAttributeRequest.invalidSAML' constant error identifier.
+   */
+  COLLEAGUE_ATTR_REQ_INVALID_SAML("colleagueAttributeRequest.invalidSAML");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String error;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param nError The Constant error value.
+   */
+  PEPSErrors(final String nError) {
+    this.error = nError;
+  }
+  
+  /**
+   * Construct the errorCode Constant value.
+   * 
+   * @return The errorCode Constant.
+   */
+  public String errorCode() {
+    return error + ".code";
+  }
+  
+  /**
+   * Construct the errorCode Constant value with the given code text.
+   * 
+   * @param text the code text to append to the constant.
+   * 
+   * @return The errorCode Constant for the given code text.
+   */
+  public String errorCode(final String text) {
+    return error + "." + text + ".code";
+  }
+  
+  /**
+   * Construct the errorMessage constant value.
+   * 
+   * @return The errorMessage constant.
+   */
+  public String errorMessage() {
+    return error + ".message";
+  }
+  
+  /**
+   * Construct the errorMessage Constant value with the given message text.
+   * 
+   * @param text the message text to append to the constant.
+   * 
+   * @return The errorMessage Constant for the given text.
+   */
+  public String errorMessage(final String text) {
+    return error + "." + text + ".message";
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    return error;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSParameters.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSParameters.java.svn-base
new file mode 100644
index 000000000..15c2ae552
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSParameters.java.svn-base
@@ -0,0 +1,625 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the STORK PEPS, Commons and Specific Parameters.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2011-07-07 20:48:45 $
+ */
+public enum PEPSParameters {
+  
+  /**
+   * Represents the 'apId' parameter constant.
+   */
+  AP_ID("apId"),
+  /**
+   * Represents the 'apUrl' parameter constant.
+   */
+  AP_URL("apUrl"),
+  /**
+   * Represents the 'ap.number' parameter constant.
+   */
+  AP_NUMBER("ap.number"),
+  
+  /**
+   * Represents the 'assertionConsumerServiceURL' parameter constant.
+   */
+  ASSERTION_CONSUMER_S_URL("assertionConsumerServiceURL"),
+  
+  /**
+   * Represents the 'auth' parameter constant.
+   */
+  AUTHENTICATION("auth"),
+  
+  /**
+   * Represents the 'attr' parameter constant.
+   */
+  ATTRIBUTE("attr"),
+  /**
+   * Represents the 'attrName' parameter constant.
+   */
+  ATTRIBUTE_NAME("attrName"),
+  /**
+   * Represents the 'attrStatus' parameter constant.
+   */
+  ATTRIBUTE_STATUS("attrStatus"),
+  /**
+   * Represents the 'attrType' parameter constant.
+   */
+  ATTRIBUTE_TYPE("attrType"),
+  /**
+   * Represents the 'attrValue' parameter constant.
+   */
+  ATTRIBUTE_VALUE("attrValue"),
+  /**
+   * Represents the 'attrList' parameter constant.
+   */
+  ATTRIBUTE_LIST("attrList"),
+  /**
+   * Represents the 'apMandAttrList' parameter constant.
+   */
+  AP_MANDATORY_ATTRIBUTE_LIST("apMandAttrList"),
+  /**
+   * Represents the 'attrTuple' parameter constant.
+   */
+  ATTRIBUTE_TUPLE("attrTuple"),
+  /**
+   * Represents the 'attribute-missing' parameter constant.
+   */
+  ATTRIBUTE_MISSING("attribute-missing"),
+  /**
+   * Represents the 'attributesNotAllowed' parameter constant.
+   */
+  ATTRIBUTES_NOT_ALLOWED("attributesNotAllowed"),
+  /**
+   * Represents the 'authnRequest' parameter constant.
+   */
+  AUTH_REQUEST("authnRequest"),
+  
+  /**
+   * Represents the 'attrValue.number' parameter constant.
+   */
+  ATTR_VALUE_NUMBER("attrValue.number"),
+  
+  /**
+   * Represents the 'derivation.date.format' parameter constant.
+   */
+  DERIVATION_DATE_FORMAT("derivation.date.format"),
+  /**
+   * Represents the 'deriveAttr.number' parameter constant.
+   */
+  DERIVE_ATTRIBUTE_NUMBER("deriveAttr.number"),
+  
+  /**
+   * Represents the complex attributes parameter constant.
+   */
+  COMPLEX_ADDRESS_VALUE("canonicalResidenceAddress"),
+  COMPLEX_NEWATTRIBUTE_VALUE("newAttribute2"),
+  COMPLEX_HASDEGREE_VALUE("hasDegree"),
+  COMPLEX_MANDATECONTENT_VALUE("mandateContent"),
+  /**
+   * Represents the 'consent-type' parameter constant.
+   */
+  CONSENT_TYPE("consent-type"),
+  /**
+   * Represents the 'consent-value' parameter constant.
+   */
+  CONSENT_VALUE("consent-value"),
+  /**
+   * Represents the 'country' parameter constant.
+   */
+  COUNTRY("country"),
+  /**
+   * Represents the 'countryOrigin' parameter constant.
+   */
+  COUNTRY_ORIGIN("countryOrigin"),
+  
+  /**
+   * Represents the 'cpepsURL' parameter constant.
+   */
+  CPEPS_URL("cpepsURL"),
+  /**
+   * Represents the 'callback' parameter constant.
+   */
+  CPEPS_CALLBACK("callback"),
+  /**
+   * Represents the 'peps.specificidpredirect.url' parameter constant.
+   */
+  CPEPS_IDP_CALLBACK_VALUE("peps.specificidpredirect.url"),
+  /**
+   * Represents the 'peps.specificapredirect.url' parameter constant.
+   */
+  CPEPS_AP_CALLBACK_VALUE("peps.specificapredirect.url"),
+  
+  /**
+   * Represents the 'errorCode' parameter constant.
+   */
+  ERROR_CODE("errorCode"),
+  /**
+   * Represents the 'subCode' parameter constant.
+   */
+  ERROR_SUBCODE("subCode"),
+  /**
+   * Represents the 'errorMessage' parameter constant.
+   */
+  ERROR_MESSAGE("errorMessage"),
+  /**
+   * Represents the 'errorRedirectUrl' parameter constant.
+   */
+  ERROR_REDIRECT_URL("errorRedirectUrl"),
+  
+  /**
+   * errorRedirectUrl Represents the 'external-authentication' parameter
+   * constant.
+   */
+  EXTERNAL_AUTH("external-authentication"),
+  /**
+   * Represents the 'external-ap' parameter constant.
+   */
+  EXTERNAL_AP("external-ap"),
+  /**
+   * Represents the 'external-pv' parameter constant.
+   */
+  EXTERNAL_PV("external-pv"),
+  /**
+   * Represents the 'external-sig-module' parameter constant.
+   */
+  EXT_SIG_CREATOR_MOD("external-sig-module"),
+  
+  /**
+   * Represents the 'http-x-forwarded-for' parameter constant.
+   */
+  HTTP_X_FORWARDED_FOR("http-x-forwarded-for"),
+  
+  /**
+   * Represents the 'idp.url' parameter constant.
+   */
+  IDP_URL("idp.url"),
+  /**
+   * Represents the 'internal-authentication' parameter constant.
+   */
+  INTERNAL_AUTH("internal-authentication"),
+  /**
+   * Represents the 'internal-ap' parameter constant.
+   */
+  INTERNAL_AP("internal-ap"),
+  /**
+   * Represents the 'internal-pv' parameter constant.
+   */
+  INTERNAL_PV("internal-pv"),
+  
+  /**
+   * Represents the 'samlIssuer' parameter constant.
+   */
+  ISSUER("samlIssuer"),
+  /**
+   * Represents the 'samlIssuer.idp' parameter constant.
+   */
+  ISSUER_IDP("samlIssuer.idp"),
+  /**
+   * Represents the 'samlIssuer.atp' parameter constant.
+   */
+  ISSUER_ATP("samlIssuer.atp"),
+  
+  /**
+   * Represents the 'mandatory' parameter constant.
+   */
+  MANDATORY("mandatory"),
+  /**
+   * Represents the 'mandatoryAttributeMissing' parameter constant.
+   */
+  MANDATORY_ATTR_MISSING("mandatoryAttributeMissing"),
+  /**
+   * Represents the 'mandatoryConsentAttrMissing' parameter constant.
+   */
+  MANDATORY_CONSENT_MISSING("mandatoryConsentAttrMissing"),
+  /**
+   * Represents the 'missing-attrs' parameter constant.
+   */
+  MISSING_ATTRS("missing-attrs"),
+  /**
+   * Represents the 'no-more-attrs' parameter constant.
+   */
+  NO_MORE_ATTRS("no-more-attrs"),
+  
+  /**
+   * Represents the 'optional' parameter constant.
+   */
+  OPTIONAL("optional"),
+  
+  /**
+   * Represents the 'no-consent-type' parameter constant.
+   */
+  NO_CONSENT_TYPE("no-consent-type"),
+  /**
+   * Represents the 'no-consent-value' parameter constant.
+   */
+  NO_CONSENT_VALUE("no-consent-value"),
+  
+  /**
+   * Represents the 'provider.name' parameter constant.
+   */
+  PROVIDER_NAME_VALUE("providerName"),
+  /**
+   * Represents the 'cpeps.askconsent' parameter constant.
+   */
+  PEPS_ASK_CONSENT("cpeps.askconsent"),
+  /**
+   * Represents the 'cpeps.askconsentvalue' parameter constant.
+   */
+  PEPS_ASK_CONSENT_VALUE("cpeps.askconsentvalue"),
+  /**
+   * Represents the 'pepsAuth' parameter constant.
+   */
+  PEPS_AUTH_CONSENT("pepsAuth"),
+  /**
+   * Represents the 'validation.bypass' parameter constant.
+   */
+  PEPS_BYPASS("validation.bypass"),
+  /**
+   * Represents the 'cpeps.number' parameter constant.
+   */
+  PEPS_NUMBER("cpeps.number"),
+  /**
+   * Represents the 'cpeps.specificapredirect.url' parameter constant.
+   */
+  PEPS_SPECIFIC_URL("cpeps.specificapredirect.url"),
+  /**
+   * Represents the 'pv.url' parameter constant.
+   */
+  PV_URL("pv.url"),
+  
+  /**
+   * Represents the 'qaaLevel' parameter constant.
+   */
+  QAALEVEL("qaaLevel"),
+  
+  /**
+   * Represents the 'speps.redirectUrl' parameter constant.
+   */
+  SPEPS_REDIRECT_URL("speps.redirectUrl"),
+  
+  /**
+   * Represents the 'sp.redirectUrl' parameter constant.
+   */
+  SP_REDIRECT_URL("sp.redirectUrl"),
+  /**
+   * Represents the 'cpeps.redirectUrl' parameter constant.
+   */
+  CPEPS_REDIRECT_URL("cpeps.redirectUrl"),
+  /**
+   * Represents the 'RelayState' parameter constant.
+   */
+  RELAY_STATE("RelayState"),
+  /**
+   * Represents the 'remoteAddr' parameter constant.
+   */
+  REMOTE_ADDR("remoteAddr"),
+  /**
+   * Represents the 'remoteUser' parameter constant.
+   */
+  REMOTE_USER("remoteUser"),
+  
+  /**
+   * Represents the 'SAMLRequest' parameter constant.
+   */
+  SAML_REQUEST("SAMLRequest"),
+  /**
+   * Represents the 'SAMLResponse' parameter constant.
+   */
+  SAML_RESPONSE("SAMLResponse"),
+  /**
+   * Represents the 'SAMLFail' parameter constant.
+   */
+  SAML_TOKEN_FAIL("SAMLFail"),
+  /**
+   * Represents the 'TokenId' parameter constant.
+   */
+  SAML_TOKEN_ID("TokenId"),
+  /**
+   * Represents the 'inResponseTo' parameter constant.
+   */
+  SAML_IN_RESPONSE_TO("inResponseTo"),
+  /**
+   * Represents the 'inResponseTo.idp' parameter constant.
+   */
+  SAML_IN_RESPONSE_TO_IDP("inResponseTo.idp"),
+  /**
+   * Represents the 'inResponseTo.atp' parameter constant.
+   */
+  SAML_IN_RESPONSE_TO_ATP("inResponseTo.atp"),
+  /**
+   * Represents the 'SignatureResponse' parameter constant.
+   */
+  SIGNATURE_RESPONSE("SignatureResponse"),
+  
+  /**
+   * Represents the 'cPepsSession' parameter constant.
+   */
+  SESSION_ID_URL("cPepsSession"),
+  /**
+   * Represents the 'spId' parameter constant.
+   */
+  SP_ID("spId"),
+  /**
+   * Represents the 'spQaaLevel' parameter constant.
+   */
+  SP_QAALEVEL("spQaaLevel"),
+  /**
+   * Represents the 'spUrl' parameter constant.
+   */
+  SP_URL("spUrl"),
+  
+  /**
+   * Represents the 'allow.derivation.all' parameter constant.
+   */
+  SPECIFIC_ALLOW_DERIVATION_ALL("allow.derivation.all"),
+  /**
+   * Represents the ''allow.unknowns parameter constant.
+   */
+  SPECIFIC_ALLOW_UNKNOWNS("allow.unknowns"),
+  /**
+   * Represents the 'derivation.date.separator' parameter constant.
+   */
+  SPECIFIC_DERIVATION_DATE_SEP("derivation.date.separator"),
+  /**
+   * Represents the 'derivation.month.position' parameter constant.
+   */
+  SPECIFIC_DERIVATION_MONTH_POS("derivation.month.position"),
+  /**
+   * Represents the 'derivation.day.position' parameter constant.
+   */
+  SPECIFIC_DERIVATION_DAY_POS("derivation.day.position"),
+  /**
+   * Represents the 'derivation.year.position' parameter constant.
+   */
+  SPECIFIC_DERIVATION_YEAR_POS("derivation.year.position"),
+  
+  /**
+   * sp.authorized.parameters Represents the '' parameter constant.
+   */
+  SPEPS_AUTHORIZED("sp.authorized.parameters"),
+  
+  /**
+   * Represents the 'spSector' constant value.
+   */
+  SPSECTOR("spSector"),
+  /**
+   * Represents the 'spApplication' constant value.
+   */
+  SPAPPLICATION("spApplication"),
+  /**
+   * Represents the 'spCountry' constant value.
+   */
+  SPCOUNTRY("spCountry"),
+  /**
+   * Represents the 'spInstitution' constant value.
+   */
+  SPINSTITUTION("spInstitution"),
+  /**
+   * Represents the 'storkAttribute.number' parameter constant.
+   */
+  STORK_ATTRIBUTE_NUMBER("storkAttribute.number"),
+  /**
+   * Represents the 'storkAttributeValue.number' parameter constant.
+   */
+  STORK_ATTRIBUTE_VALUE_NUMBER("storkAttributeValue.number"),
+  
+  /**
+   * Represents the 'username' parameter constant.
+   */
+  USERNAME("username"),
+  
+  /**
+   * Represents the 'tooManyParameters' parameter constant.
+   */
+  TOO_MANY_PARAMETERS("tooManyParameters"),
+  /**
+   * Represents the 'validation.active' parameter constant.
+   */
+  VALIDATION_ACTIVE("validation.active"),
+  
+  /**
+   * Represents the 'x-forwarded-for' parameter constant.
+   */
+  X_FORWARDED_FOR("x-forwarded-for"),
+  /**
+   * Represents the 'x-forwarded-host' parameter constant.
+   */
+  X_FORWARDED_HOST("x-forwarded-host"),
+  /**
+   * Represents the 'XMLResponse' parameter constant.
+   */
+  XML_RESPONSE("XMLResponse"),
+
+  /**
+   * Represents the 'ap-cpeps.number' parameter constant.
+   */
+  AP_PEPS_NUMBER("ap-cpeps.number"),
+
+  /**
+   * Represents the 'atp.number' parameter constant.
+   */
+  ATTRIBUTE_PROVIDER_NUMBER("atp.number"),
+
+  /**
+   * Represents the 'atn.number' parameter constant.
+   */
+  ATTRIBUTE_NAME_NUMBER("atn.number"),
+
+  /**
+   * Represents the 'apLinker' parameter constant.
+   */
+  AP_LINKER("apLinker"),
+
+  /**
+   * Represents the 'prevApLinker' parameter constant.
+   */
+  PREV_AP_LINKER("prevApLinker"),
+
+  /**
+   * Represents the 'NOSEL' parameter constant (no attribute provider selected).
+   */
+  AP_NO_SELECTION("NOSEL"),
+
+  /**
+   * Represents the 'OCSEL' parameter constant (attribute provider in another country).
+   */
+  AP_OTHER_COUNTRY("OCSEL"),
+
+  /**
+   * Represents the '_provider' suffix parameter constant.
+   */
+  AP_PROVIDER_SELECT_SUFFIX("_provider"),
+
+  /**
+   * Represents the '_country' suffix parameter constant.
+   */
+  AP_COUNTRY_SELECT_SUFFIX("_country"),
+
+  /**
+   * Represents the '_name' suffix parameter constant.
+   */
+  AP_NAME_SELECT_SUFFIX("_name"),
+
+  /**
+   * Represents the 'next-ap' parameter constant.
+   */
+  NEXT_AP("next-ap"),
+
+  /**
+   * Represents the 'next-apeps' parameter constant.
+   */
+  NEXT_APEPS("next-apeps"),
+
+  /**
+   * Represents the 'back-to-apeps' parameter constant.
+   */
+  BACK_TO_APEPS("back-to-apeps"),
+
+  /**
+   * Represents the 'is-remote-apeps' parameter constant.
+   */
+  IS_REMOTE_APEPS("is-remote-apeps"),
+
+  /**
+   * Represents the 'more-attributes' parameter constant.
+   */
+  MORE_ATTRIBUTES("more-attributes"),
+
+  /**
+   * Represents the 'attr-filter.number' parameter constant.
+   */
+  ATTRIBUTES_FILTER_NUMBER("attr-filter.number"),
+
+  /**
+   * Represents the 'attr-group' parameter constant.
+   */
+  ATTRIBUTE_GROUPS("attr-group"),
+
+  /**
+   * Represents the 'all' parameter constant for attribute groups.
+   */
+  ATTRIBUTE_GROUPS_ALL("all"),
+
+  /**
+   * Represents the 'none' parameter constant for attribute groups.
+   */
+  ATTRIBUTE_GROUPS_NONE("none"),
+
+  /**
+   * Represents the 'atp.url' parameter constant.
+   */
+  ATP_URL("atp.url"), 
+   /**
+   * Represents the 'apepsURL' parameter constant.
+   */
+  APEPS_URL("apepsUrl"),
+  
+  /**
+   * Represents the 'apepsCountry' parameter constant.
+   */
+  APEPS_COUNTRY("apepsCountry"),
+  
+  /**
+   * Represents the 'apepsAuthRequest' parameter constant.
+   */
+  APEPS_ATTR_REQUEST("apepsAttrRequest"),
+  
+  /**
+   * Represents the 'isApepsRequest' parameter constant.
+   */
+  APEPS_REQUEST_COMPLETE("apeps-request-complete"),
+  
+  /**
+   * Represents the 'apeps.callbackUrl' parameter constant.
+   */  
+  APEPS_CALLBACK_URL("apeps.callbackUrl"),
+  /**
+   * Represents the 'attrListMand' parameter constant.
+   */
+  ATTR_LIST_MAND("attrListMand"),
+  
+  /**
+   * Represents the 'attrListOpt' parameter constant.
+   */
+  ATTR_LIST_OPT("attrListOpt"),
+  
+  /**
+   * Represents the 'simpleAttrListMand' parameter constant.
+   */
+  SIMPLE_ATTR_LIST_MAND("simpleAttrListMand"), 
+  
+  /**
+   * Represents the 'simpleAttrListOpt' parameter constant.
+   */
+  SIMPLE_ATTR_LIST_OPT("simpleAttrListOpt"), 
+  
+  /**
+   * Represents the 'complexAttrListMand' parameter constant.
+   */
+  COMPLEX_ATTR_LIST_MAND("complexAttrListMand"), 
+  
+  /**
+   * Represents the 'complexAttrListOpt' parameter constant.
+   */
+  COMPLEX_ATTR_LIST_OPT("complexAttrListOpt");
+
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param nValue The Constant value.
+   */
+  PEPSParameters(final String nValue) {
+    this.value = nValue;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    return value;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSUtil.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSUtil.java.svn-base
new file mode 100644
index 000000000..69729c0bb
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSUtil.java.svn-base
@@ -0,0 +1,391 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Properties;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.bouncycastle.crypto.Digest;
+import org.bouncycastle.util.encoders.Base64;
+import org.bouncycastle.util.encoders.UrlBase64;
+
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+import eu.stork.peps.auth.commons.exceptions.InvalidParameterPEPSException;
+
+/**
+ * This class holds static helper methods.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.75 $, $Date: 2010-11-23 00:05:35 $
+ */
+public final class PEPSUtil {
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(PEPSUtil.class.getName());
+  
+  /**
+   * Configurations object.
+   */
+  private static Properties configs;
+  
+  /**
+   * Max prefix.
+   */
+  private static final String MAX_PARAM_PREFIX = "max.";
+  
+  /**
+   * Code prefix to get error code.
+   */
+  private static final String CODE_PARAM_SUFFIX = ".code";
+  
+  /**
+   * param's size prefix to get max param size.
+   */
+  private static final String MAX_PARAM_SUFFIX = ".size";
+  
+  /**
+   * Message prefix to get error message.
+   */
+  private static final String MSG_PARAM_SUFFIX = ".message";
+  
+  /**
+   * Private constructor. Prevents the class from being instantiated.
+   */
+  private PEPSUtil() {
+    // empty constructor
+  }
+  
+  /**
+   * Creates a single instance of this class and sets the properties.
+   * 
+   * @param nConfigs The set of available configurations.
+   * 
+   * @return The created PEPSUtil's class.
+   */
+  public static PEPSUtil createInstance(final Properties nConfigs) {
+    if (nConfigs != null) {
+      PEPSUtil.configs = nConfigs;
+    }
+    return new PEPSUtil();
+  }
+  
+  /**
+   * Getter for the Properties.
+   * 
+   * @return configs The properties value.
+   */
+  public Properties getConfigs() {
+    return configs;
+  }
+  
+  /**
+   * Setter for the Properties.
+   * 
+   * @param nConfigs The new properties value.
+   */
+  public static void setConfigs(final Properties nConfigs) {
+    if (nConfigs != null) {
+      PEPSUtil.configs = nConfigs;
+    }
+  }
+  
+  /**
+   * Returns the identifier of some configuration given a set of configurations
+   * and the corresponding configuration key.
+   * 
+   * @param configKey The key that IDs some configuration.
+   * 
+   * @return The configuration String value.
+   */
+  public static String getConfig(final String configKey) {
+    return configs.getProperty(configKey);
+  }
+  
+  /**
+   * Validates the input paramValue identified by the paramName.
+   * 
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   * 
+   * @return true if the parameter is valid.
+   */
+  public static boolean isValidParameter(final String paramName,
+    final String paramValue) {
+    
+    final String validationParam =
+      PEPSUtil.getConfig(PEPSParameters.VALIDATION_ACTIVE.toString());
+    boolean retVal = true;
+    
+    final String paramConf = MAX_PARAM_PREFIX + paramName + MAX_PARAM_SUFFIX;
+    
+    if (PEPSValues.TRUE.toString().equals(validationParam)) {
+      final String paramSizeStr = PEPSUtil.getConfig(paramConf);
+      // Checking if the parameter size exists and if it's numeric
+      if (StringUtils.isNumeric(paramSizeStr)) {
+        final int maxParamSize = Integer.valueOf(paramSizeStr);
+        if (StringUtils.isEmpty(paramValue)
+          || paramValue.length() > maxParamSize) {
+          retVal = false;
+          LOG.warn("Invalid parameter [" + paramName + "] value " + paramValue);
+        }
+      } else {
+        retVal = false;
+        LOG.error("Missing " + paramConf
+          + " configuration in the pepsUtils.properties configuration file");
+      }
+    }
+    return retVal;
+  }
+  
+  /**
+   * Validates the Parameter and throws an exception if an error occurs. Throws
+   * an InvalidParameterPEPSException runtime exception if the parameter is
+   * invalid.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final Object paramValue) {
+    
+    if (paramValue == null) {
+      PEPSUtil.validateParameter(className, paramName, "");
+    } else {
+      PEPSUtil.validateParameter(className, paramName, paramValue.toString());
+    }
+  }
+  
+  /**
+   * Validates the Parameters and throws an exception if an error occurs.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final String paramValue) {
+    
+    PEPSUtil.validateParameter(className, paramName, paramValue,
+      PEPSUtil.getErrorCode(paramName), PEPSUtil.getErrorMessage(paramName));
+  }
+  
+  /**
+   * Validates the Parameters and throws an exception if an error occurs.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   * @param error The PEPSError to get error code and messages from configs.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final String paramValue, final PEPSErrors error) {
+    
+    PEPSUtil.validateParameter(className, paramName, paramValue,
+      PEPSUtil.getConfig(error.errorCode()),
+      PEPSUtil.getConfig(error.errorMessage()));
+  }
+  
+  /**
+   * Validates the HTTP Parameter and throws an exception if an error occurs.
+   * Throws an InvalidParameterPEPSException runtime exception if the parameter
+   * is invalid.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   * @param errorCode The error code to include on the exception.
+   * @param errorMessage The error message to include on the exception.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final String paramValue, final String errorCode,
+    final String errorMessage) {
+    
+    if (!isValidParameter(paramName, paramValue)) {
+      LOG.warn("Invalid parameter [" + paramName + "] value found at "
+        + className);
+      throw new InvalidParameterPEPSException(errorCode, errorMessage);
+    }
+  }
+  
+  /**
+   * Getter for the error code of some given error related to the input param.
+   * 
+   * @param paramName The name of the parameter associated with the error.
+   * 
+   * @return The code of the error.
+   */
+  private static String getErrorCode(final String paramName) {
+    return getConfig(paramName + CODE_PARAM_SUFFIX);
+  }
+  
+  /**
+   * Getter for the error message of some given error related to the input
+   * parameter.
+   * 
+   * @param paramName The name of the parameter associated with the message.
+   * 
+   * @return The message for the error.
+   */
+  private static String getErrorMessage(final String paramName) {
+    return getConfig(paramName + MSG_PARAM_SUFFIX);
+  }
+  
+  /**
+   * {@link Base64} encodes the input samlToken parameter.
+   * 
+   * @param samlToken the SAML Token to be encoded.
+   * 
+   * @return The Base64 String representing the samlToken.
+   * 
+   * @see Base64#encode
+   */
+  public static String encodeSAMLToken(final byte[] samlToken) {
+      try {
+          return new String(Base64.encode(samlToken), "UTF8");
+      } catch (final UnsupportedEncodingException e) {
+          LOG.error(PEPSErrors.INTERNAL_ERROR.errorMessage(), e);
+          return null;
+      }
+  }
+  
+  /**
+   * Encode samltoken url safe
+   * @param samlToken the saml token to encode
+   * @return the bas64 encoded string
+   */
+  public static String encodeSAMLTokenUrlSafe(final byte[] samlToken) {
+      try {
+          return new String(UrlBase64.encode(samlToken), "UTF8");
+      } catch (final UnsupportedEncodingException e) {
+          LOG.error(PEPSErrors.INTERNAL_ERROR.errorMessage(), e);
+          return null;
+      }
+  }
+  
+  /**
+   * Decodes the {@link Base64} String input parameter representing a samlToken.
+   * 
+   * @param samlToken the SAML Token to be decoded.
+   * 
+   * @return The samlToken decoded bytes.
+   * 
+   * @see Base64#decode
+   */
+  public static byte[] decodeSAMLToken(final String samlToken) {
+    return Base64.decode(samlToken);
+  }
+  
+  /**
+   * Decode URL save base64 saml token
+   * @param samlToken the SAML toke to decode
+   * @return The decoded bytes
+   */
+  public static byte[] decodeSAMLTokenUrlSafe(final String samlToken) {
+	    return UrlBase64.decode(samlToken);
+	  }
+  
+  /**
+   * Hashes a SAML token. Throws an InternalErrorPEPSException runtime exception
+   * if the Cryptographic Engine fails.
+   * 
+   * @param samlToken the SAML Token to be hashed.
+   * 
+   * @return byte[] with the hashed SAML Token.
+   */
+  public static byte[] hashPersonalToken(final byte[] samlToken) {
+    try {
+      final String className =
+        PEPSUtil.getConfig(PEPSValues.HASH_DIGEST_CLASS.toString());
+      
+      final Digest digest =
+        (Digest) Class.forName(className).getConstructor()
+          .newInstance((Object[]) null);
+      digest.update(samlToken, 0, samlToken.length);
+      
+      final int retLength = digest.getDigestSize();
+      final byte[] ret = new byte[retLength];
+      
+      digest.doFinal(ret, 0);
+      return ret;
+      
+    } catch (final Exception e) {
+      // For all those exceptions that could be thrown, we always log it and
+      // thrown an InternalErrorPEPSException.
+      LOG.error(PEPSErrors.HASH_ERROR.errorMessage(), e);
+      throw new InternalErrorPEPSException(
+        PEPSUtil.getConfig(PEPSErrors.HASH_ERROR.errorCode()),
+        PEPSUtil.getConfig(PEPSErrors.HASH_ERROR.errorMessage()), e);
+    }
+  }
+  
+  /**
+   * Gets the Stork error code in the error message if exists!
+   * 
+   * @param errorMessage The message to get the error code if exists;
+   * 
+   * @return the error code if exists. Returns null otherwise.
+   */
+  public static String getStorkErrorCode(final String errorMessage) {
+    if (StringUtils.isNotBlank(errorMessage)
+      && errorMessage.indexOf(PEPSValues.ERROR_MESSAGE_SEP.toString()) >= 0) {
+      final String[] msgSplitted =
+        errorMessage.split(PEPSValues.ERROR_MESSAGE_SEP.toString());
+      if (msgSplitted.length == 2 && StringUtils.isNumeric(msgSplitted[0])) {
+        return msgSplitted[0];
+      }
+    }
+    return null;
+  }
+  
+  /**
+   * Gets the Stork error message in the saml message if exists!
+   * 
+   * @param errorMessage The message to get in the saml message if exists;
+   * 
+   * @return the error message if exists. Returns the original message
+   *         otherwise.
+   */
+  public static String getStorkErrorMessage(final String errorMessage) {
+    if (StringUtils.isNotBlank(errorMessage)
+      && errorMessage.indexOf(PEPSValues.ERROR_MESSAGE_SEP.toString()) >= 0) {
+      final String[] msgSplitted =
+        errorMessage.split(PEPSValues.ERROR_MESSAGE_SEP.toString());
+      if (msgSplitted.length == 2 && StringUtils.isNumeric(msgSplitted[0])) {
+        return msgSplitted[1];
+      }
+    }
+    return errorMessage;
+  }
+  
+  /**
+   * Get inputstream from string
+   * @param string the string to convert
+   * @param codePage the codepage of string
+   * @return an inputstream
+   * @throws UnsupportedEncodingException
+   */
+  public static InputStream getStream(final String string, final String codePage) throws UnsupportedEncodingException
+  {
+		return new ByteArrayInputStream(string.getBytes(codePage));
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSValues.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSValues.java.svn-base
new file mode 100644
index 000000000..89cf8fa9b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PEPSValues.java.svn-base
@@ -0,0 +1,342 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the value constants.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.17 $, $Date: 2011-07-07 20:48:45 $
+ */
+public enum PEPSValues {
+  
+  /**
+   * Represents the 'all' constant value.
+   */
+  ALL("all"),
+  /**
+   * Represents the 'none' constant value.
+   */
+  NONE("none"),
+  /**
+   * Represents the 'true' constant value.
+   */
+  TRUE("true"),
+  /**
+   * Represents the 'false' constant value.
+   */
+  FALSE("false"),
+  /**
+   * Represents the empty string constant value.
+   */
+  EMPTY_STRING(""),
+  
+  /**
+   * Represents the ',' separator constant value.
+   */
+  ATTRIBUTE_VALUE_SEP(","),
+  /**
+   * Represents the ';' separator constant value.
+   */
+  ATTRIBUTE_SEP(";"),
+  /**
+   * Represents the ':' separator constant value.
+   */
+  ATTRIBUTE_TUPLE_SEP(":"),
+  /**
+   * Represents the '/' separator constant value.
+   */
+  EID_SEPARATOR("/"),
+  /**
+   * Represents the ' - ' separator constant value.
+   */
+  ERROR_MESSAGE_SEP(" - "),
+  /**
+   * Represents the '#' parameter constant value.
+   */
+  LOGGER_SEP("#"),
+  /**
+   * Represents the 'NOT_AVAILABLE' parameter constant value.
+   */
+  NOT_AVAILABLE("NotAvailable"),
+  /**
+   * Represents the ';' parameter constant value.
+   */
+  SPEPS_AUTHORIZED_SEP(";"),
+  
+  /**
+   * Represents the 'ap' constant value.
+   */
+  AP("ap"),
+  /**
+   * Represents the 'C-PEPS' constant value.
+   */
+  CPEPS("C-PEPS"),
+  /**
+   * Represents the 'cpeps' constant value.
+   */
+  CPEPS_PREFIX("cpeps"),
+  /**
+   * Represents the 'peps' constant value.
+   */
+  PEPS("peps"),
+  /**
+   * Represents the '-PEPS' constant value.
+   */
+  PEPS_SUFFIX("-PEPS"),
+  /**
+   * Represents the 'SP' constant value.
+   */
+  SP("SP"),
+  /**
+   * Represents the 'S-PEPS' constant value.
+   */
+  SPEPS("S-PEPS"),
+  /**
+   * Represents the 'speps' constant value.
+   */
+  SPEPS_PREFIX("speps"),
+  /**
+   * Represents the 'sp.default.parameters' constant value.
+   */
+  DEFAULT("sp.default.parameters"),
+  /**
+   * Represents the default saml id constant value.
+   */
+  DEFAULT_SAML_ID("1"),
+  /**
+   * Represents the 'hashDigest.className' constant value.
+   */
+  HASH_DIGEST_CLASS("hashDigest.className"),
+  
+  /**
+   * Represents the 'eu.stork.communication.requests' constant value.
+   */
+  STORK_PACKAGE_REQUEST_LOGGER_VALUE("eu.stork.communication.requests"),
+  /**
+   * Represents the 'eu.stork.communication.responses' constant value.
+   */
+  STORK_PACKAGE_RESPONSE_LOGGER_VALUE("eu.stork.communication.responses"),
+  
+  /**
+   * Represents the 'S-PEPS receives request from SP' constant value.
+   */
+  SP_REQUEST("S-PEPS receives request from SP"),
+  /**
+   * Represents the 'Get Citizen Consent' constant value.
+   */
+  CITIZEN_CONSENT_LOG("Get Citizen Consent"),
+  /**
+   * Represents the 'C-PEPS receives request from S-PEPS' constant value.
+   */
+  CPEPS_REQUEST("C-PEPS receives request from S-PEPS"),
+  /**
+   * Represents the 'C-PEPS generates response to S-PEPS' constant value.
+   */
+  CPEPS_RESPONSE("C-PEPS generates response to S-PEPS"),
+  /**
+   * Represents the 'S-PEPS generates request to C-PEPS' constant value.
+   */
+  SPEPS_REQUEST("S-PEPS generates request to C-PEPS"),
+  /**
+   * Represents the 'S-PEPS receives response from C-PEPS' constant value.
+   */
+  SPEPS_RESPONSE("S-PEPS receives response from C-PEPS"),
+  /**
+   * Represents the 'S-PEPS generates response to SP' constant value.
+   */
+  SP_RESPONSE("S-PEPS generates response to SP"),
+  /**
+   * Represents the 'Success' constant value.
+   */
+  SUCCESS("Success"),
+  /**
+   * Represents the December's month number constant value.
+   */
+  LAST_MONTH("12"),
+  /**
+   * Represents the yyyyMM constant value.
+   */
+  NO_DAY_DATE_FORMAT("yyyyMM"),
+  
+  /**
+   * Represents the 'attrValue' constant value.
+   */
+  ATTRIBUTE("attrValue"),
+  /**
+   * Represents the 'derivedAttr' constant value.
+   */
+  DERIVE_ATTRIBUTE("deriveAttr"),
+  /**
+   * Represents the 'storkAttribute' constant value.
+   */
+  STORK_ATTRIBUTE("storkAttribute"),
+  
+  /**
+   * Represents the 'properties' constant value.
+   */
+  PROPERTIES("properties"),
+  /**
+   * Represents the 'referer' constant value.
+   */
+  REFERER("referer"),
+  /**
+   * Represents the 'host' constant value.
+   */
+  HOST("host"),
+  /**
+   * Represents the 'spid' constant value.
+   */
+  SPID("spid"),
+  /**
+   * Represents the 'domain' constant value.
+   */
+  DOMAIN("domain"),
+  /**
+   * Represents the '.validation' constant value.
+   */
+  VALIDATION_SUFFIX(".validation"),
+  /**
+   * Represents the 'jsessionid' constant value.
+   */
+  EQUAL("="),
+  /**
+   * Represents the 'HttpOnly' constant value.
+   */
+  HTTP_ONLY("HttpOnly"),
+  /**
+   * Represents the 'SET-COOKIE' constant value.
+   */
+  JSSESSION("JSESSIONID"),
+  /**
+   * Represents the '=' constant value.
+   */
+  SETCOOKIE("SET-COOKIE"),
+  /**
+   * Represents the ';' constant value.
+   */
+  SEMICOLON(";"),
+  /**
+   * Represents the ' ' constant value.
+   */
+  SPACE(" "),
+  /**
+   * Represents the 'atp' constant value.
+   */
+  APROVIDER_PREFIX("atp"),
+  /**
+   * Represents the 'atn' constant value.
+   */
+  ANAME_PREFIX("atn"),
+  /**
+   * Represents the 'ap-cpeps' constant value.
+   */
+  AP_CPEPS_PREFIX("ap-cpeps"),
+  /**
+   * Represents the 'attr-filter' constant value.
+   */
+  AP_ATTRFILTER_PREFIX("attr-filter");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param val The Constant value.
+   */
+  PEPSValues(final String val) {
+    
+    this.value = val;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    
+    return value;
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".id".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String index(final int index) {
+    
+    return value + index + ".id";
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".value".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated string value.
+   */
+  public String value(final int index) {
+    
+    return value + index + ".value";
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".name".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String name(final int index) {
+    
+    return value + index + ".name";
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".url".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String url(final int index) {
+    
+    return value + index + ".url";
+  }
+
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".allowedGroups".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String allowedGroups(final int index) {
+    
+    return value + index + ".allowedGroups";
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttribute.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttribute.java.svn-base
new file mode 100644
index 000000000..5d8281445
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttribute.java.svn-base
@@ -0,0 +1,348 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.log4j.Logger;
+
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * PersonalAttribute.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.22 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class PersonalAttribute implements Serializable, Cloneable {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 2612951678412632174L;
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(PersonalAttribute.class
+    .getName());
+  
+  /**
+   * Name of the personal attribute.
+   */
+  private String name;
+  
+  /**
+   * Values of the personal attribute.
+   */
+  private List<String> value = new ArrayList<String>();
+  
+  /**
+   * Type of the personal attribute.
+   */
+ private String type;
+  
+  /**
+   * Complex values of the personal attribute.
+   */
+  private Map<String, String> complexValue = new ConcurrentHashMap<String, String>();
+  
+  /**
+   * Is the personal attribute mandatory?
+   */
+  private transient boolean required;
+  
+  /**
+   * Returned status of the attribute from the IdP.
+   */
+  private String status;
+  
+  /**
+   * Name of the personal attribute.
+   */
+  private String friendlyName;
+  
+  /**
+   * Empty Constructor.
+   */
+  public PersonalAttribute() {
+    super();
+  }
+  
+  /**
+   * PersonalAttribute Constructor for complex values.
+   * 
+   * @param attrName The attribute name.
+   * @param attrIsRequired The attribute type value.
+   * @param attrComplexValue The attribute's value.
+   * @param attrStatus The attribute's status value.
+   */
+  public PersonalAttribute(final String attrName, final boolean attrIsRequired,
+    final List<String> attrComplexValue, final String attrStatus) {
+    this.setName(attrName);
+    this.setIsRequired(attrIsRequired);
+    this.setValue(attrComplexValue);
+    this.setStatus(attrStatus);
+  }
+  
+  /**
+   * PersonalAttribute Constructor for complex values.
+   * 
+   * @param attrName The attribute name.
+   * @param attrIsRequired The attribute type value.
+   * @param attrComplexValue The attribute's complex value.
+   * @param attrStatus The attribute's status value.
+   */
+  public PersonalAttribute(final String attrName, final boolean attrIsRequired,
+    final Map<String, String> attrComplexValue, final String attrStatus) {
+    this.setName(attrName);
+    this.setIsRequired(attrIsRequired);
+    this.setComplexValue(attrComplexValue);
+    this.setStatus(attrStatus);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  @SuppressWarnings("unchecked")
+  public Object clone() {
+    
+    try {
+      final PersonalAttribute personalAttr = (PersonalAttribute) super.clone();
+      personalAttr.setIsRequired(this.isRequired());
+      personalAttr.setName(this.getName());
+      personalAttr.setStatus(this.getStatus());
+      if (!isEmptyValue()) {
+        final List<String> val =
+          (List<String>) ((ArrayList<String>) this.getValue()).clone();
+        personalAttr.setValue(val);
+      }
+      if (!isEmptyComplexValue()) {
+        final Map<String, String> complexVal =
+          (Map<String, String>) ((HashMap<String, String>) this
+            .getComplexValue()).clone();
+        personalAttr.setComplexValue(complexVal);
+      }
+      return personalAttr;
+    } catch (final CloneNotSupportedException e) {
+      // assert false;
+      LOG.trace("Nothing to do.");
+      throw new InternalErrorPEPSException(
+        PEPSUtil.getConfig(PEPSErrors.INTERNAL_ERROR.errorCode()),
+        PEPSUtil.getConfig(PEPSErrors.INTERNAL_ERROR.errorMessage()), e);
+    }
+  }
+  
+  /**
+   * Getter for the required value.
+   * 
+   * @return The required value.
+   */
+  public boolean isRequired() {
+    return required;
+  }
+  
+  /**
+   * Setter for the required value.
+   * 
+   * @param attrIsRequired this attribute?
+   */
+  public void setIsRequired(final boolean attrIsRequired) {
+    this.required = attrIsRequired;
+  }
+  
+  /**
+   * Getter for the name value.
+   * 
+   * @return The name value.
+   */
+  public String getName() {
+    return name;
+  }
+  
+  /**
+   * Setter for the name value.
+   * 
+   * @param attrName The personal attribute name.
+   */
+  public void setName(final String attrName) {
+    this.name = attrName;
+  }
+  
+  /**
+   * Getter for the value.
+   * 
+   * @return The list of values.
+   */
+  public List<String> getValue() {
+    return value;
+  }
+  
+  /**
+   * Setter for the list of values.
+   * 
+   * @param attrValue The personal attribute value.
+   */
+  public void setValue(final List<String> attrValue) {
+    if (attrValue != null) {
+      this.value = attrValue;
+    }
+  }
+  
+
+  /**
+   * Getter for the type value.
+   * 
+   * @return The name value.
+   */
+  public String getType() {
+    return type;
+  }
+  
+  /**
+   * Setter for the type value.
+   * 
+   * @param attrName The personal attribute type.
+   */
+  public void setType(final String attrType) {
+    this.type = attrType;
+  }
+  
+  /**
+   * Getter for the status.
+   * 
+   * @return The status value.
+   */
+  public String getStatus() {
+    return status;
+  }
+  
+  /**
+   * Setter for the status value.
+   * 
+   * @param attrStatus The personal attribute status.
+   */
+  public void setStatus(final String attrStatus) {
+    this.status = attrStatus;
+  }
+  
+  /**
+   * Getter for the complex value.
+   * 
+   * @return The complex value.
+   */
+  public Map<String, String> getComplexValue() {
+    return complexValue;
+  }
+  
+  /**
+   * Setter for the complex value.
+   * 
+   * @param complexVal The personal attribute Complex value.
+   */
+  public void setComplexValue(final Map<String, String> complexVal) {
+    if (complexVal != null) {
+      this.complexValue = complexVal;
+    }
+  }
+  
+  /**
+   * Getter for the personal's friendly name.
+   * 
+   * @return The personal's friendly name value.
+   */
+  public String getFriendlyName() {
+    return friendlyName;
+  }
+  
+  /**
+   * Setter for the personal's friendly name.
+   * 
+   * @param fName The personal's friendly name.
+   */
+  public void setFriendlyName(final String fName) {
+    this.friendlyName = fName;
+  }
+  
+  /**
+   * Return true the value is empty.
+   * 
+   * @return True if the value is empty "[]";
+   */
+  public boolean isEmptyValue() {
+    return value.isEmpty() || (value.size() == 1 && value.get(0).length() == 0);
+  }
+  
+  /**
+   * Returns true if the Complex Value is empty.
+   * 
+   * @return True if the Complex Value is empty;
+   */
+  public boolean isEmptyComplexValue() {
+    return complexValue.isEmpty();
+  }
+  
+  /**
+   * Returns true if the Status is empty.
+   * 
+   * @return True if the Status is empty;
+   */
+  public boolean isEmptyStatus() {
+    return (status == null || status.length() == 0);
+  }
+  
+  /**
+   * Prints the PersonalAttribute in the following format.
+   * name:required:[v,a,l,u,e,s]|[v=a,l=u,e=s]:status;
+   * 
+   * @return The PersonalAttribute as a string.
+   */
+  public String toString() {
+    final StringBuilder strBuild = new StringBuilder();
+    
+    AttributeUtil.appendIfNotNull(strBuild, getName());
+    strBuild.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString());
+    AttributeUtil.appendIfNotNull(strBuild, String.valueOf(isRequired()));
+    strBuild.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString());
+    strBuild.append('[');
+    
+    if (isEmptyValue()) {
+      if (!isEmptyComplexValue()) {
+        AttributeUtil.appendIfNotNull(strBuild, AttributeUtil.mapToString(
+          getComplexValue(), PEPSValues.ATTRIBUTE_VALUE_SEP.toString()));
+      }
+    } else {
+      AttributeUtil.appendIfNotNull(
+        strBuild,
+        AttributeUtil.listToString(getValue(),
+          PEPSValues.ATTRIBUTE_VALUE_SEP.toString()));
+    }
+    
+    strBuild.append(']');
+    strBuild.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString());
+    AttributeUtil.appendIfNotNull(strBuild, getStatus());
+    strBuild.append(PEPSValues.ATTRIBUTE_SEP.toString());
+    
+    return strBuild.toString();
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttributeList.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttributeList.java.svn-base
new file mode 100644
index 000000000..642b249d4
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/PersonalAttributeList.java.svn-base
@@ -0,0 +1,396 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.StringTokenizer;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * PersonalAttributeList.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.27 $, $Date: 2010-11-18 22:54:56 $
+ * 
+ * @see PersonalAttribute
+ */
+@SuppressWarnings("PMD")
+public final class PersonalAttributeList extends
+	ConcurrentHashMap<String, PersonalAttribute> implements IPersonalAttributeList{
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger
+    .getLogger(PersonalAttributeList.class.getName());
+  
+  /**
+   * Serial id.
+   */
+  private static final long serialVersionUID = 7375127363889975062L;
+  
+  /**
+   * Hash with the latest fetched attribute name alias.
+   */
+  private final transient Map<String, Integer> latestAttrAlias =
+    new HashMap<String, Integer>();
+  
+  /**
+   * Hash with mapping number of alias or the attribute name.
+   */
+  private final transient Map<String, Integer> attrAliasNumber =
+    new HashMap<String, Integer>();
+  
+  /**
+   * Default constructor.
+   */
+  public PersonalAttributeList() {
+    // The best practices recommend to call the super constructor.
+    super();
+  }
+  
+  /**
+   * Constructor with initial capacity for the PersonalAttributeList size.
+   * 
+   * @param capacity The initial capacity for the PersonalAttributeList.
+   */
+  public PersonalAttributeList(final int capacity) {
+    super(capacity);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public Iterator<PersonalAttribute> iterator() {
+    return this.values().iterator();
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public PersonalAttribute get(final Object key) {
+    String attrName = (String) key;
+    
+    if (this.latestAttrAlias.containsKey(key)) {
+      attrName = attrName + this.latestAttrAlias.get(key);
+    } else {
+      if (this.attrAliasNumber.containsKey(key)) {
+        this.latestAttrAlias.put(attrName, this.attrAliasNumber.get(key));
+      }
+    }
+    return super.get(attrName);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public void add(final PersonalAttribute value) {
+    if (value != null) {
+      this.put(value.getName(), value);
+    }
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public PersonalAttribute put(final String key, final PersonalAttribute val) {
+    if (StringUtils.isNotEmpty(key) && val != null) {
+      // Validate if attribute name already exists!
+      String attrAlias = key;
+      if (this.containsKey(attrAlias)) {
+    	//TODO isAgeOver should not be hardcoded, a better way of handling multipe isAgeOver requests should be implemented.
+        if (!val.isEmptyValue() && StringUtils.isNumeric(val.getValue().get(0)) && "isAgeOver".equals( val.getName() ) ) {
+          final String attrValue = val.getValue().get(0);
+          attrAlias = key + attrValue;
+          this.attrAliasNumber.put(key, Integer.valueOf(attrValue));
+        } else {
+          final PersonalAttribute attr = super.get(key);
+          if (!attr.isEmptyValue()
+            && StringUtils.isNumeric(attr.getValue().get(0))) {
+            attrAlias = key + attr.getValue().get(0);
+            super.put(key, (PersonalAttribute) attr);
+            this.attrAliasNumber.put(key, null);
+          }
+        }
+      }
+      return super.put(attrAlias, val);
+    } else {
+      return null;
+    }
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public void populate(final String attrList) {
+    final StringTokenizer strToken =
+      new StringTokenizer(attrList, PEPSValues.ATTRIBUTE_SEP.toString());
+    
+    while (strToken.hasMoreTokens()) {
+      final PersonalAttribute persAttr = new PersonalAttribute();
+      String[] tuples =
+        strToken.nextToken().split(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString(),
+          AttributeConstants.NUMBER_TUPLES.intValue());
+      
+      // Convert to the new format if needed!
+      tuples = convertFormat(tuples);
+      
+      if (AttributeUtil.hasValidTuples(tuples)) {
+        final int attrValueIndex =
+          AttributeConstants.ATTR_VALUE_INDEX.intValue();
+        final String tmpAttrValue =
+          tuples[attrValueIndex].substring(1,
+            tuples[attrValueIndex].length() - 1);
+        final String[] vals =
+          tmpAttrValue.split(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+        
+        persAttr.setName(tuples[AttributeConstants.ATTR_NAME_INDEX.intValue()]);
+        persAttr.setIsRequired(Boolean
+          .valueOf(tuples[AttributeConstants.ATTR_TYPE_INDEX.intValue()]));
+        
+        // check if it is a complex value
+        if (isComplexValue(vals)) {
+          persAttr.setComplexValue(createComplexValue(vals));
+        }
+        else 
+        {
+        	persAttr.setValue(createValues(vals));
+        }
+        
+        if (tuples.length == AttributeConstants.NUMBER_TUPLES.intValue()) {
+          persAttr.setStatus(tuples[AttributeConstants.ATTR_STATUS_INDEX
+            .intValue()]);
+        }
+        this.put(tuples[AttributeConstants.ATTR_NAME_INDEX.intValue()],
+          persAttr);
+        
+      } else {
+        LOG.warn("Invalid personal attribute list tuples");
+      }
+      
+    }
+  }
+
+  /**
+  * Returns a copy of this <tt>IPersonalAttributeList</tt> instance.
+  *
+  * @return The copy of this IPersonalAttributeList.
+  */
+  public Object clone() {
+	  try {
+	    return (PersonalAttributeList) super.clone();
+	  } catch (CloneNotSupportedException e) {
+	    return null;
+	  }
+  }
+  
+  /**
+   * Creates a string in the following format.
+   * 
+   * attrName:attrType:[attrValue1,attrValue2=attrComplexValue]:attrStatus;
+   * 
+   * @return {@inheritDoc}
+   */
+  @Override
+  public String toString() {
+    final Iterator<Entry<String, PersonalAttribute>> itAttrs =
+      this.entrySet().iterator();
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    while (itAttrs.hasNext()) {
+      final Entry<String, PersonalAttribute> attrEntry = itAttrs.next();
+      final PersonalAttribute attr = attrEntry.getValue();
+      //strBuilder.append(attr.toString());
+      strBuilder.insert(0, attr.toString());
+    }
+    
+    return strBuilder.toString();
+  }
+  
+  /**
+   * Validates and creates the attribute's complex values.
+   * 
+   * @param values The complex values.
+   * 
+   * @return The {@link Map} with the complex values.
+   * 
+   * @see Map
+   */
+  private Map<String, String> createComplexValue(final String[] values) {
+    final Map<String, String> complexValue = new HashMap<String, String>();
+    for (final String val : values) {
+      final String[] tVal = val.split("=");
+      if (StringUtils.isNotEmpty(val) && tVal.length == 2) {
+        complexValue.put(tVal[0], AttributeUtil.unescape(tVal[1]));
+      }
+    }
+    return complexValue;
+  }
+  
+  /**
+   * Checks if value is complex or not
+   * @param values The values to check
+   * @return True if succesful
+   */
+  private boolean isComplexValue(final String[] values) {
+	  boolean isComplex = false;
+	  if (values.length > 0) {	  
+	      final String[] tVal = values[0].split("=");
+	      if (StringUtils.isNotEmpty(values[0]) && tVal.length == 2) {
+	        isComplex = true;
+	      }
+	    }
+	  return isComplex;
+  }
+  
+  /**
+   * Validates and creates the attribute values.
+   * 
+   * @param vals The attribute values.
+   * 
+   * @return The {@link List} with the attribute values.
+   * 
+   * @see List
+   */
+  private List<String> createValues(final String[] vals) {
+    final List<String> values = new ArrayList<String>();
+    for (final String val : vals) {
+      if (StringUtils.isNotEmpty(val)) {
+        values.add(AttributeUtil.unescape(val));
+      }
+    }
+    return values;
+  }
+  
+  /**
+   * Converts the attribute tuple (attrName:attrType...) to the new format.
+   * 
+   * @param tuples The attribute tuples to convert.
+   * 
+   * @return The attribute tuples in the new format.
+   */
+  private String[] convertFormat(final String[] tuples) {
+    final String[] newFormatTuples =
+      new String[AttributeConstants.NUMBER_TUPLES.intValue()];
+    if (tuples != null) {
+      System.arraycopy(tuples, 0, newFormatTuples, 0, tuples.length);
+      
+      for (int i = tuples.length; i < newFormatTuples.length; i++) {
+        if (i == AttributeConstants.ATTR_VALUE_INDEX.intValue()) {
+          newFormatTuples[i] = "[]";
+        } else {
+          newFormatTuples[i] = "";
+        }
+      }
+    }
+    return newFormatTuples;
+  }
+
+  /**
+   * Returns a IPersonalAttributeList of the complex attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the complex attributes contained in this map.
+   */
+  public IPersonalAttributeList getComplexAttributes() {
+	  LOG.info("get complex attributes");
+	  IPersonalAttributeList attrList = new PersonalAttributeList();
+	  for(PersonalAttribute attr: this) {
+		  if(!attr.getComplexValue().isEmpty()) {
+			  attrList.put(attr.getName(), attr);
+			  LOG.info("adding complex attribute:"+attr.getName());
+		  }
+	  }
+	  return attrList;
+  }
+  
+  /**
+   * Returns a IPersonalAttributeList of the mandatory attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map.
+   */
+  public IPersonalAttributeList getSimpleValueAttributes() {
+	  LOG.info("get simple attributes");
+	  IPersonalAttributeList attrList = new PersonalAttributeList();
+	  for(PersonalAttribute attr: this) {
+		  if(attr.getComplexValue().isEmpty()) {
+			  attrList.put(attr.getName(), attr);
+			  LOG.info("adding simple attribute:"+attr.getName());
+		  }
+	  }
+	  return attrList;
+  }
+  
+  
+  
+  /**
+   * Returns a IPersonalAttributeList of the mandatory attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map.
+   */
+  public IPersonalAttributeList getMandatoryAttributes() {
+	  return getAttributesByParam(true);
+  }
+
+  
+  /**
+   * Returns a IPersonalAttributeList of the attributes in this map by parameter value.
+   * 
+   * @param compareValue The boolean to get mandatory (true) or optional (false) attributes. 
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map if compareValue is true or optional otherwise.
+   */
+  private IPersonalAttributeList getAttributesByParam(final boolean compareValue) {
+	  LOG.info("get attributes by param :"+compareValue);
+	  IPersonalAttributeList attrList = new PersonalAttributeList();
+	  for(PersonalAttribute attr: this) {
+		  if(attr.isRequired() == compareValue) {
+			  attrList.put(attr.getName(), attr);
+			  LOG.info("adding attribute:"+attr.getName());
+		  }
+	  }
+	  return attrList;
+  }
+  
+  
+  /**
+   * Returns a IPersonalAttributeList of the optional attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the optional attributes contained in this map.
+   */
+  public IPersonalAttributeList getOptionalAttributes() {
+	return getAttributesByParam(false);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean hasMissingValues() {
+    for(PersonalAttribute attr: this) {
+      if(attr.isEmptyValue() && attr.isEmptyComplexValue()) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryRequest.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryRequest.java.svn-base
new file mode 100644
index 000000000..65936f1a8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryRequest.java.svn-base
@@ -0,0 +1,447 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+import org.apache.log4j.Logger;
+
+public class STORKAttrQueryRequest implements Serializable, Cloneable {
+	
+	/** The Constant serialVersionUID. */
+	  private static final long serialVersionUID = 4778480781609392750L;
+	  
+	  /**
+	   * Logger object.
+	   */
+	  private static final Logger LOG = Logger.getLogger(STORKAttrQueryRequest.class
+	    .getName());
+	  
+	  /** The samlId. */
+	  private String samlId;
+	  	  
+	  /** The destination. */
+	  private String destination;
+	  
+	  /** The assertion consumer service url. */
+	  private String serviceURL;
+
+	  /** The distinguished name. */
+	  private String distinguishedName;
+	  
+	  /** The e id sector share. */
+	  private boolean eIDSectorShare;
+	  
+	  /** The e id cross sector share. */
+	  private boolean eIDCrossSectorShare;
+	  
+	  /** The e id cross border share. */
+	  private boolean eIDCrossBorderShare;
+	  
+	  /** The personal attribute list. */
+	  private IPersonalAttributeList attributeList = new PersonalAttributeList();
+	  
+	  /** The qaa. */
+	  private int qaa;
+	  
+	  /** The token saml. */
+	  private byte[] tokenSaml = new byte[0];
+	  
+	  /** The issuer. */
+	  private String issuer;
+	  
+	  /** The service provider sector. */
+	  private String spSector;
+	  
+	  /** The service provider institution. */
+	  private String spInstitution;
+	  
+	  /** The service provider application. */
+	  private String spApplication;
+	  
+	  /** The service provider country. */
+	  private String spCountry;
+	  
+	  /** The country. */
+	  private String country;
+	  
+	  /** The citizen country code. */
+	  private String citizenCountry;
+	  
+	  /** The Service Provider ID. */
+	  private String sPID;
+	  
+	  /** The Alias used at the keystore for saving this certificate. */
+	  private String alias;
+	  
+	  /**
+	   * Gets the SP's Certificate Alias.
+	   * 
+	   * @return alias The SP's Certificate Alias.
+	   */
+	  public String getAlias() {
+	    return alias;
+	  }
+	  
+	  /**
+	   * Sets the SP's Certificate Alias.
+	   * 
+	   * @param nAlias The SP's Certificate Alias.
+	   */
+	  public void setAlias(final String nAlias) {
+	    this.alias = nAlias;
+	  }
+	  
+	  /**
+	   * Gets the SP ID.
+	   * 
+	   * @return sPID The SP ID.
+	   */
+	  public String getSPID() {
+	    return sPID;
+	  }
+	  
+	  /**
+	   * Sets the SP ID.
+	   * 
+	   * @param sPId The new sp samlId.
+	   */
+	  public void setSPID(final String sPId) {
+	    this.sPID = sPId;
+	  }
+	  
+	  /**
+	   * Gets the citizen country code.
+	   * 
+	   * @return The citizen country code value.
+	   */
+	  public String getCitizenCountryCode() {
+	    return citizenCountry;
+	  }
+	  
+	  /**
+	   * Sets the citizen country code.
+	   * 
+	   * @param countryCode the new citizen country code value.
+	   */
+	  public void setCitizenCountryCode(final String countryCode) {
+	    this.citizenCountry = countryCode;
+	  }
+	  
+	  /**
+	   * Gets the sp country.
+	   * 
+	   * @return The sp country value.
+	   */
+	  public String getSpCountry() {
+	    return spCountry;
+	  }
+	  
+	  /**
+	   * Sets the sp country.
+	   * 
+	   * @param sPCountry the new sp country value.
+	   */
+	  public void setSpCountry(final String sPCountry) {
+	    this.spCountry = sPCountry;
+	  }
+	  
+	  /**
+	   * Gets the issuer.
+	   * 
+	   * @return The issuer value.
+	   */
+	  public String getIssuer() {
+	    return issuer;
+	  }
+	  
+	  /**
+	   * Sets the issuer.
+	   * 
+	   * @param samlIssuer the new issuer value.
+	   */
+	  public void setIssuer(final String samlIssuer) {
+	    this.issuer = samlIssuer;
+	  }
+	  
+	  /**
+	   * Gets the SAML Token.
+	   * 
+	   * @return The SAML Token value.
+	   */
+	  public byte[] getTokenSaml() {
+	    return tokenSaml.clone();
+	  }
+	  
+	  /**
+	   * Sets the SAML Token.
+	   * 
+	   * @param samlToken The new SAML Token value.
+	   */
+	  public void setTokenSaml(final byte[] samlToken) {
+	    if (samlToken != null) {
+	      this.tokenSaml = samlToken.clone();
+	    }
+	  }
+	  
+	  /**
+	   * Gets the country.
+	   * 
+	   * @return The country value.
+	   */
+	  public String getCountry() {
+	    return country;
+	  }
+	  
+	  /**
+	   * Sets the country.
+	   * 
+	   * @param nCountry the new country value.
+	   */
+	  public void setCountry(final String nCountry) {
+	    this.country = nCountry;
+	  }
+	  
+	  /**
+	   * Getter for the qaa value.
+	   * 
+	   * @return The qaa value value.
+	   */
+	  public int getQaa() {
+	    return qaa;
+	  }
+	  
+	  /**
+	   * Setter for the qaa value.
+	   * 
+	   * @param qaaLevel The new qaa value.
+	   */
+	  public void setQaa(final int qaaLevel) {
+	    this.qaa = qaaLevel;
+	  }	  
+	  
+	  /**
+	   * Getter for the serviceURL value.
+	   * 
+	   * @return The serviceURL value.
+	   */
+	  public String getAssertionConsumerServiceURL() {
+	    return serviceURL;
+	  }
+	  
+	  /**
+	   * Setter for the serviceURL value.
+	   * 
+	   * @param newServiceURL the assertion consumer service URL.
+	   */
+	  public void setAssertionConsumerServiceURL(final String newServiceURL) {
+	    this.serviceURL = newServiceURL;
+	  }
+	  
+	  /**
+	   * Getter for the destination value.
+	   * 
+	   * @return The destination value.
+	   */
+	  public String getDestination() {
+	    return destination;
+	  }
+	  
+	  /**
+	   * Setter for the destination value.
+	   * 
+	   * @param detination the new destination value.
+	   */
+	  public void setDestination(final String detination) {
+	    this.destination = detination;
+	  }
+	  
+	  /**
+	   * Getter for the samlId value.
+	   * 
+	   * @return The samlId value.
+	   */
+	  public String getSamlId() {
+	    return samlId;
+	  }
+	  
+	  /**
+	   * Setter for the samlId value.
+	   * 
+	   * @param newSamlId the new samlId value.
+	   */
+	  public void setSamlId(final String newSamlId) {
+	    this.samlId = newSamlId;
+	  }
+	  
+	  
+	  /**
+	   * Getter for the attributeList value.
+	   * 
+	   * @return The attributeList value.
+	   * 
+	   * @see IPersonalAttributeList
+	   */
+	  public IPersonalAttributeList getPersonalAttributeList() {
+	      IPersonalAttributeList personnalAttributeList = null;
+	      try {
+	          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+	      } catch (CloneNotSupportedException e1) {
+	          LOG.trace("[PersonalAttribute] Nothing to do.");
+	      }
+	      return personnalAttributeList;
+	  }
+	  
+	  /**
+	   * Setter for the attributeList value.
+	   * 
+	   * @param attrList the personal attribute list value.
+	   * 
+	   * @see IPersonalAttributeList
+	   */
+	  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+	    if (attrList != null) {
+	      this.attributeList = attrList;
+	    }
+	  }
+	  
+	  /**
+	   * Getter for the distinguishedName value.
+	   * 
+	   * @return The distinguishedName value.
+	   */
+	  public String getDistinguishedName() {
+	    return distinguishedName;
+	  }
+	  
+	  /**
+	   * Setter for the distinguishedName value.
+	   * 
+	   * @param certDN the distinguished name value.
+	   */
+	  public void setDistinguishedName(final String certDN) {
+	    this.distinguishedName = certDN;
+	  }
+	  
+	  /**
+	   * Gets the service provider sector.
+	   * 
+	   * @return The service provider sector value.
+	   */
+	  public String getSpSector() {
+	    return spSector;
+	  }
+	  
+	  /**
+	   * Sets the service provider sector.
+	   * 
+	   * @param samlSPSector the new service provider sector value.
+	   */
+	  public void setSpSector(final String samlSPSector) {
+	    this.spSector = samlSPSector;
+	  }
+	  
+	  /**
+	   * Gets the service provider institution.
+	   * 
+	   * @return The service provider institution value.
+	   */
+	  public String getSpInstitution() {
+	    return spInstitution;
+	  }
+	  
+	  /**
+	   * Sets the service provider institution.
+	   * 
+	   * @param samlSPInst the new service provider institution value.
+	   */
+	  public void setSpInstitution(final String samlSPInst) {
+	    this.spInstitution = samlSPInst;
+	  }
+	  
+	  /**
+	   * Gets the service provider application.
+	   * 
+	   * @return The service provider application value.
+	   */
+	  public String getSpApplication() {
+	    return spApplication;
+	  }
+	  
+	  /**
+	   * Sets the service provider application.
+	   * 
+	   * @param samlSPApp the new service provider application value.
+	   */
+	  public void setSpApplication(final String samlSPApp) {
+	    this.spApplication = samlSPApp;
+	  }
+	  
+	  /**
+	   * Checks if is eId sector share.
+	   * 
+	   * @return true, if is eId sector share.
+	   */
+	  public boolean isEIDSectorShare() {
+	    return eIDSectorShare;
+	  }
+	  
+	  /**
+	   * Sets the eId sector share.
+	   * 
+	   * @param eIdSectorShare the new eId sector share value.
+	   */
+	  public void setEIDSectorShare(final boolean eIdSectorShare) {
+	    this.eIDSectorShare = eIdSectorShare;
+	  }
+	  
+	  /**
+	   * Checks if is eId cross sector share.
+	   * 
+	   * @return true, if is eId cross sector share.
+	   */
+	  public boolean isEIDCrossSectorShare() {
+	    return eIDCrossSectorShare;
+	  }
+	  
+	  /**
+	   * Sets the eId cross sector share.
+	   * 
+	   * @param eIdCrossSectorShare the new eId cross sector share value.
+	   */
+	  public void setEIDCrossSectorShare(final boolean eIdCrossSectorShare) {
+	    this.eIDCrossSectorShare = eIdCrossSectorShare;
+	  }
+	  
+	  /**
+	   * Checks if is eId cross border share.
+	   * 
+	   * @return true, if is eId cross border share.
+	   */
+	  public boolean isEIDCrossBorderShare() {
+	    return eIDCrossBorderShare;
+	  }
+	  
+	  /**
+	   * Sets the eId cross border share.
+	   * 
+	   * @param eIdCrossBorderShare the new eId cross border share value.
+	   */
+	  public void setEIDCrossBorderShare(final boolean eIdCrossBorderShare) {
+	    this.eIDCrossBorderShare = eIdCrossBorderShare;
+	  }
+	  
+	  /**
+	   * Returns a copy of this <tt>STORKAttrQueryRequest</tt> instance.
+	   * 
+	   * @return The copy of this STORKAttrQueryRequest.
+	   * @throws CloneNotSupportedException on clone exception
+	   */
+	  @Override
+	  public Object clone() throws CloneNotSupportedException{
+		  STORKAttrQueryRequest storkAttrQueryReq = null;
+	      storkAttrQueryReq = (STORKAttrQueryRequest) super.clone();
+	      storkAttrQueryReq.setPersonalAttributeList(getPersonalAttributeList());
+	      storkAttrQueryReq.setTokenSaml(getTokenSaml());
+	    return storkAttrQueryReq;
+	  }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryResponse.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryResponse.java.svn-base
new file mode 100644
index 000000000..4e40d6d01
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAttrQueryResponse.java.svn-base
@@ -0,0 +1,388 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
+import org.opensaml.saml2.core.Assertion;
+
+public class STORKAttrQueryResponse {
+  
+  /** Response Id. */
+  private String samlId;
+  
+  /** Request failed? */
+  private boolean fail;
+  
+  /** Status code. */
+  private String statusCode;
+  
+  /** Secondary status code. */
+  private String subStatusCode;
+  
+  /** Audience restriction. */
+  private transient String audienceRest;
+  
+  /** Error message. */
+  private String message;
+  
+  /** Id of the request that originated this response. */
+  private String inResponseTo;
+  
+  /** Expiration date. */
+  private DateTime notOnOrAfter;
+  
+  /** Creation date. */
+  private DateTime notBefore;
+  
+  /** The SAML token. */
+  private byte[] tokenSaml = new byte[0];
+  
+  /** Country. */
+  private String country;
+  
+  /** The complete assertion **/
+  private Assertion assertion;
+  
+  /** List of all assertions in response **/
+  private List<Assertion> assertions;
+  
+  /** The complete list from all assertions **/
+  private transient IPersonalAttributeList totalAttributeList = new PersonalAttributeList();
+  
+  /** All personal attribute lists **/
+  private List<IPersonalAttributeList> attributeLists;
+   
+  /** Citizen's personal attribute list. */
+  private transient IPersonalAttributeList attributeList = new PersonalAttributeList();
+
+    /**
+     * Logger object.
+     */
+    private static final Logger LOG = Logger.getLogger(STORKAttrQueryResponse.class.getName());
+  
+  /**
+   * Getter for the subStatusCode.
+   * 
+   * @return The subStatusCode value.
+   */
+  public String getSubStatusCode() {
+    return subStatusCode;
+  }
+  
+  /**
+   * Setter for the subStatusCode.
+   * 
+   * @param samlSubStatusCode the new subStatusCode value.
+   */
+  public void setSubStatusCode(final String samlSubStatusCode) {
+    this.subStatusCode = samlSubStatusCode;
+  }
+  
+  /**
+   * Getter for audienceRest.
+   * 
+   * @return The audienceRest value.
+   */
+  public String getAudienceRestriction() {
+    return audienceRest;
+  }
+  
+  /**
+   * Setter for audienceRest.
+   * 
+   * @param audRest the new audienceRest value.
+   */
+  public void setAudienceRestriction(final String audRest) {
+    this.audienceRest = audRest;
+  }
+  
+  /**
+   * Getter for the samlToken.
+   * 
+   * @return The samlToken value.
+   */
+  public byte[] getTokenSaml() {
+    return tokenSaml.clone();
+  }
+  
+  /**
+   * Setter for samlToken.
+   * 
+   * @param samlToken the new tokenSaml value.
+   */
+  public void setTokenSaml(final byte[] samlToken) {
+    if (samlToken != null) {
+      this.tokenSaml = samlToken.clone();
+    }
+  }
+  
+  /**
+   * Getter for the country name.
+   * 
+   * @return The country name value.
+   */
+  public String getCountry() {
+    return country;
+  }
+  
+  /**
+   * Setter for the country name.
+   * 
+   * @param cCountry the new country name value.
+   */
+  public void setCountry(final String cCountry) {
+    this.country = cCountry;
+  }
+  
+  /**
+   * Getter for pal value.
+   * 
+   * @return The pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.attributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for the inResponseTo value.
+   * 
+   * @return The inResponseTo value.
+   */
+  public String getInResponseTo() {
+    return inResponseTo;
+  }
+  
+  /**
+   * Setter for the inResponseTo value.
+   * 
+   * @param samlInResponseTo the new inResponseTo value.
+   */
+  public void setInResponseTo(final String samlInResponseTo) {
+    this.inResponseTo = samlInResponseTo;
+  }
+  
+  /**
+   * Getter for the fail value.
+   * 
+   * @return The fail value.
+   */
+  public boolean isFail() {
+    return fail;
+  }
+  
+  /**
+   * Setter for the fail value.
+   * 
+   * @param failVal the new fail value.
+   */
+  public void setFail(final boolean failVal) {
+    this.fail = failVal;
+  }
+  
+  /**
+   * Getter for the message value.
+   * 
+   * @return The message value.
+   */
+  public String getMessage() {
+    return message;
+  }
+  
+  /**
+   * Setter for the message value.
+   * 
+   * @param msg the new message value.
+   */
+  public void setMessage(final String msg) {
+    this.message = msg;
+  }
+  
+  /**
+   * Getter for the statusCode value.
+   * 
+   * @return The statusCode value.
+   */
+  public String getStatusCode() {
+    return statusCode;
+  }
+  
+  /**
+   * Setter for the statusCode value.
+   * 
+   * @param status the new statusCode value.
+   */
+  public void setStatusCode(final String status) {
+    this.statusCode = status;
+  }
+  
+  /**
+   * Getter for the samlId value.
+   * 
+   * @return The samlId value.
+   */
+  public String getSamlId() {
+    return samlId;
+  }
+  
+  /**
+   * Setter for the samlId value.
+   * 
+   * @param nSamlId the new samlId value.
+   */
+  public void setSamlId(final String nSamlId) {
+    this.samlId = nSamlId;
+  }
+  
+  /**
+   * Getter for the notOnOrAfter value.
+   * 
+   * @return The notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotOnOrAfter() {
+    return this.notOnOrAfter;
+  }
+  
+  /**
+   * Setter for the notOnOrAfter value.
+   * 
+   * @param nOnOrAfter the new notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public void setNotOnOrAfter(final DateTime nOnOrAfter) {
+    this.notOnOrAfter = nOnOrAfter;
+  }
+  
+  /**
+   * Getter for the notBefore value.
+   * 
+   * @return The notBefore value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotBefore() {
+    return notBefore;
+  }
+  
+  /**
+   * Setter for the notBefore value.
+   * 
+   * @param nBefore the new notBefore value.
+   * 
+   * @see DateTime
+   */
+  public void setNotBefore(final DateTime nBefore) {
+    this.notBefore = nBefore;
+  }
+  
+  /** Get the assertion from the response **/
+  public Assertion getAssertion() {
+	  return assertion;
+  }
+  
+  /** Set the assertion in the response **/
+  public void setAssertion(final Assertion nAssertion) {
+	  this.assertion = nAssertion;
+  }
+  
+  public void setAssertions(List<Assertion> newAssert) {
+	  this.assertions = newAssert;
+  }
+  
+  public List<Assertion> getAssertions() {
+	  return assertions;
+  }
+  
+  /**
+   * Getter for the toal pal value.
+   * 
+   * @return The total pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getTotalPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) totalAttributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the total Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setTotalPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.totalAttributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for personal attribute lists
+   * 
+   * @return The lists
+   * 
+   * @see PersonalAttributeList
+   */
+  public List<IPersonalAttributeList> getPersonalAttributeLists() {
+      return attributeLists;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeLists(final List<IPersonalAttributeList> attrLists) {
+    if (attrLists != null) {
+      this.attributeLists = attrLists;
+    }
+  }
+  
+}
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnRequest.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnRequest.java.svn-base
new file mode 100644
index 000000000..2354d0eb1
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnRequest.java.svn-base
@@ -0,0 +1,495 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * STORKAuthnRequest (SAML Token Request).
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.21 $, $Date: 2011-02-17 22:44:34 $
+ */
+public final class STORKAuthnRequest implements Serializable, Cloneable {
+  
+  /** The Constant serialVersionUID. */
+  private static final long serialVersionUID = 4778480781609392750L;
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(STORKAuthnRequest.class
+    .getName());
+  
+  /** The samlId. */
+  private String samlId;
+  
+  /** The assertion consumer service url. */
+  private String serviceURL;
+  
+  /** The destination. */
+  private String destination;
+  
+  /** The provider name. */
+  private String providerName;
+  
+  /** The distinguished name. */
+  private String distinguishedName;
+  
+  /** The e id sector share. */
+  private boolean eIDSectorShare;
+  
+  /** The e id cross sector share. */
+  private boolean eIDCrossSectorShare;
+  
+  /** The e id cross border share. */
+  private boolean eIDCrossBorderShare;
+  
+  /** The personal attribute list. */
+  private IPersonalAttributeList attributeList = new PersonalAttributeList();
+  
+  /** The qaa. */
+  private int qaa;
+  
+  /** The token saml. */
+  private byte[] tokenSaml = new byte[0];
+  
+  /** The issuer. */
+  private String issuer;
+  
+  /** The service provider sector. */
+  private String spSector;
+  
+  /** The service provider institution. */
+  private String spInstitution;
+  
+  /** The service provider application. */
+  private String spApplication;
+  
+  /** The service provider country. */
+  private String spCountry;
+  
+  /** The country. */
+  private String country;
+  
+  /** The citizen country code. */
+  private String citizenCountry;
+  
+  /** The Service Provider ID. */
+  private String sPID;
+  
+  /** The Alias used at the keystore for saving this certificate. */
+  private String alias;
+  
+  /**
+   * Gets the SP's Certificate Alias.
+   * 
+   * @return alias The SP's Certificate Alias.
+   */
+  public String getAlias() {
+    return alias;
+  }
+  
+  /**
+   * Sets the SP's Certificate Alias.
+   * 
+   * @param nAlias The SP's Certificate Alias.
+   */
+  public void setAlias(final String nAlias) {
+    this.alias = nAlias;
+  }
+  
+  /**
+   * Gets the SP ID.
+   * 
+   * @return sPID The SP ID.
+   */
+  public String getSPID() {
+    return sPID;
+  }
+  
+  /**
+   * Sets the SP ID.
+   * 
+   * @param sPId The new sp samlId.
+   */
+  public void setSPID(final String sPId) {
+    this.sPID = sPId;
+  }
+  
+  /**
+   * Gets the citizen country code.
+   * 
+   * @return The citizen country code value.
+   */
+  public String getCitizenCountryCode() {
+    return citizenCountry;
+  }
+  
+  /**
+   * Sets the citizen country code.
+   * 
+   * @param countryCode the new citizen country code value.
+   */
+  public void setCitizenCountryCode(final String countryCode) {
+    this.citizenCountry = countryCode;
+  }
+  
+  /**
+   * Gets the sp country.
+   * 
+   * @return The sp country value.
+   */
+  public String getSpCountry() {
+    return spCountry;
+  }
+  
+  /**
+   * Sets the sp country.
+   * 
+   * @param sPCountry the new sp country value.
+   */
+  public void setSpCountry(final String sPCountry) {
+    this.spCountry = sPCountry;
+  }
+  
+  /**
+   * Gets the issuer.
+   * 
+   * @return The issuer value.
+   */
+  public String getIssuer() {
+    return issuer;
+  }
+  
+  /**
+   * Sets the issuer.
+   * 
+   * @param samlIssuer the new issuer value.
+   */
+  public void setIssuer(final String samlIssuer) {
+    this.issuer = samlIssuer;
+  }
+  
+  /**
+   * Gets the SAML Token.
+   * 
+   * @return The SAML Token value.
+   */
+  public byte[] getTokenSaml() {
+    return tokenSaml.clone();
+  }
+  
+  /**
+   * Sets the SAML Token.
+   * 
+   * @param samlToken The new SAML Token value.
+   */
+  public void setTokenSaml(final byte[] samlToken) {
+    if (samlToken != null) {
+      this.tokenSaml = samlToken.clone();
+    }
+  }
+  
+  /**
+   * Gets the country.
+   * 
+   * @return The country value.
+   */
+  public String getCountry() {
+    return country;
+  }
+  
+  /**
+   * Sets the country.
+   * 
+   * @param nCountry the new country value.
+   */
+  public void setCountry(final String nCountry) {
+    this.country = nCountry;
+  }
+  
+  /**
+   * Getter for the qaa value.
+   * 
+   * @return The qaa value value.
+   */
+  public int getQaa() {
+    return qaa;
+  }
+  
+  /**
+   * Setter for the qaa value.
+   * 
+   * @param qaaLevel The new qaa value.
+   */
+  public void setQaa(final int qaaLevel) {
+    this.qaa = qaaLevel;
+  }
+  
+  /**
+   * Getter for the serviceURL value.
+   * 
+   * @return The serviceURL value.
+   */
+  public String getAssertionConsumerServiceURL() {
+    return serviceURL;
+  }
+  
+  /**
+   * Setter for the serviceURL value.
+   * 
+   * @param newServiceURL the assertion consumer service URL.
+   */
+  public void setAssertionConsumerServiceURL(final String newServiceURL) {
+    this.serviceURL = newServiceURL;
+  }
+  
+  /**
+   * Getter for the destination value.
+   * 
+   * @return The destination value.
+   */
+  public String getDestination() {
+    return destination;
+  }
+  
+  /**
+   * Setter for the destination value.
+   * 
+   * @param detination the new destination value.
+   */
+  public void setDestination(final String detination) {
+    this.destination = detination;
+  }
+  
+  /**
+   * Getter for the samlId value.
+   * 
+   * @return The samlId value.
+   */
+  public String getSamlId() {
+    return samlId;
+  }
+  
+  /**
+   * Setter for the samlId value.
+   * 
+   * @param newSamlId the new samlId value.
+   */
+  public void setSamlId(final String newSamlId) {
+    this.samlId = newSamlId;
+  }
+  
+  /**
+   * Getter for the providerName value.
+   * 
+   * @return The provider name value.
+   */
+  public String getProviderName() {
+    return providerName;
+  }
+  
+  /**
+   * Setter for the providerName value.
+   * 
+   * @param samlProvider the provider name value.
+   */
+  public void setProviderName(final String samlProvider) {
+    this.providerName = samlProvider;
+  }
+  
+  /**
+   * Getter for the attributeList value.
+   * 
+   * @return The attributeList value.
+   * 
+   * @see IPersonalAttributeList
+   */
+  public IPersonalAttributeList getPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the attributeList value.
+   * 
+   * @param attrList the personal attribute list value.
+   * 
+   * @see IPersonalAttributeList
+   */
+  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.attributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for the distinguishedName value.
+   * 
+   * @return The distinguishedName value.
+   */
+  public String getDistinguishedName() {
+    return distinguishedName;
+  }
+  
+  /**
+   * Setter for the distinguishedName value.
+   * 
+   * @param certDN the distinguished name value.
+   */
+  public void setDistinguishedName(final String certDN) {
+    this.distinguishedName = certDN;
+  }
+  
+  /**
+   * Gets the service provider sector.
+   * 
+   * @return The service provider sector value.
+   */
+  public String getSpSector() {
+    return spSector;
+  }
+  
+  /**
+   * Sets the service provider sector.
+   * 
+   * @param samlSPSector the new service provider sector value.
+   */
+  public void setSpSector(final String samlSPSector) {
+    this.spSector = samlSPSector;
+  }
+  
+  /**
+   * Gets the service provider institution.
+   * 
+   * @return The service provider institution value.
+   */
+  public String getSpInstitution() {
+    return spInstitution;
+  }
+  
+  /**
+   * Sets the service provider institution.
+   * 
+   * @param samlSPInst the new service provider institution value.
+   */
+  public void setSpInstitution(final String samlSPInst) {
+    this.spInstitution = samlSPInst;
+  }
+  
+  /**
+   * Gets the service provider application.
+   * 
+   * @return The service provider application value.
+   */
+  public String getSpApplication() {
+    return spApplication;
+  }
+  
+  /**
+   * Sets the service provider application.
+   * 
+   * @param samlSPApp the new service provider application value.
+   */
+  public void setSpApplication(final String samlSPApp) {
+    this.spApplication = samlSPApp;
+  }
+  
+  /**
+   * Checks if is eId sector share.
+   * 
+   * @return true, if is eId sector share.
+   */
+  public boolean isEIDSectorShare() {
+    return eIDSectorShare;
+  }
+  
+  /**
+   * Sets the eId sector share.
+   * 
+   * @param eIdSectorShare the new eId sector share value.
+   */
+  public void setEIDSectorShare(final boolean eIdSectorShare) {
+    this.eIDSectorShare = eIdSectorShare;
+  }
+  
+  /**
+   * Checks if is eId cross sector share.
+   * 
+   * @return true, if is eId cross sector share.
+   */
+  public boolean isEIDCrossSectorShare() {
+    return eIDCrossSectorShare;
+  }
+  
+  /**
+   * Sets the eId cross sector share.
+   * 
+   * @param eIdCrossSectorShare the new eId cross sector share value.
+   */
+  public void setEIDCrossSectorShare(final boolean eIdCrossSectorShare) {
+    this.eIDCrossSectorShare = eIdCrossSectorShare;
+  }
+  
+  /**
+   * Checks if is eId cross border share.
+   * 
+   * @return true, if is eId cross border share.
+   */
+  public boolean isEIDCrossBorderShare() {
+    return eIDCrossBorderShare;
+  }
+  
+  /**
+   * Sets the eId cross border share.
+   * 
+   * @param eIdCrossBorderShare the new eId cross border share value.
+   */
+  public void setEIDCrossBorderShare(final boolean eIdCrossBorderShare) {
+    this.eIDCrossBorderShare = eIdCrossBorderShare;
+  }
+  
+  /**
+   * Returns a copy of this <tt>STORKAuthnRequest</tt> instance.
+   * 
+   * @return The copy of this STORKAuthnRequest.
+   * @throws CloneNotSupportedException on clone exception
+   */
+  @Override
+  public Object clone() throws CloneNotSupportedException{
+    STORKAuthnRequest storkAuthnReq = null;
+    try {
+      storkAuthnReq = (STORKAuthnRequest) super.clone();
+      storkAuthnReq.setPersonalAttributeList(getPersonalAttributeList());
+      storkAuthnReq.setTokenSaml(getTokenSaml());
+    } catch (final CloneNotSupportedException e) {
+      // assert false;
+      LOG.trace("[PersonalAttribute] Nothing to do.");
+    }
+    
+    return storkAuthnReq;
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnResponse.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnResponse.java.svn-base
new file mode 100644
index 000000000..84fadd023
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKAuthnResponse.java.svn-base
@@ -0,0 +1,383 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
+import org.opensaml.saml2.core.Assertion;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * STORKAuthnResponse.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.15 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class STORKAuthnResponse {
+  
+  /** Response Id. */
+  private String samlId;
+  
+  /** Authentication failed? */
+  private boolean fail;
+  
+  /** Status code. */
+  private String statusCode;
+  
+  /** Secondary status code. */
+  private String subStatusCode;
+  
+  /** Audience restriction. */
+  private transient String audienceRest;
+  
+  /** Error message. */
+  private String message;
+  
+  /** Id of the request that originated this response. */
+  private String inResponseTo;
+  
+  /** Expiration date. */
+  private DateTime notOnOrAfter;
+  
+  /** Creation date. */
+  private DateTime notBefore;
+  
+  /** The SAML token. */
+  private byte[] tokenSaml = new byte[0];
+  
+  /** Country. */
+  private String country;
+  
+  /** Citizen's personal attribute list. */
+  private transient IPersonalAttributeList attributeList = new PersonalAttributeList();
+  
+  /** List of all assertions in response **/
+  private List<Assertion> assertions;
+  
+  /** The complete list from all assertions **/
+  private transient IPersonalAttributeList totalAttributeList = new PersonalAttributeList();
+  
+  /** All personal attribute lists **/
+  private List<IPersonalAttributeList> attributeLists;
+  
+    /**
+     * Logger object.
+     */
+    private static final Logger LOG = Logger.getLogger(STORKAuthnResponse.class.getName());
+  
+  /**
+   * Getter for the subStatusCode.
+   * 
+   * @return The subStatusCode value.
+   */
+  public String getSubStatusCode() {
+    return subStatusCode;
+  }
+  
+  /**
+   * Setter for the subStatusCode.
+   * 
+   * @param samlSubStatusCode the new subStatusCode value.
+   */
+  public void setSubStatusCode(final String samlSubStatusCode) {
+    this.subStatusCode = samlSubStatusCode;
+  }
+  
+  /**
+   * Getter for audienceRest.
+   * 
+   * @return The audienceRest value.
+   */
+  public String getAudienceRestriction() {
+    return audienceRest;
+  }
+  
+  /**
+   * Setter for audienceRest.
+   * 
+   * @param audRest the new audienceRest value.
+   */
+  public void setAudienceRestriction(final String audRest) {
+    this.audienceRest = audRest;
+  }
+  
+  /**
+   * Getter for the samlToken.
+   * 
+   * @return The samlToken value.
+   */
+  public byte[] getTokenSaml() {
+    return tokenSaml.clone();
+  }
+  
+  /**
+   * Setter for samlToken.
+   * 
+   * @param samlToken the new tokenSaml value.
+   */
+  public void setTokenSaml(final byte[] samlToken) {
+    if (samlToken != null) {
+      this.tokenSaml = samlToken.clone();
+    }
+  }
+  
+  /**
+   * Getter for the country name.
+   * 
+   * @return The country name value.
+   */
+  public String getCountry() {
+    return country;
+  }
+  
+  /**
+   * Setter for the country name.
+   * 
+   * @param cCountry the new country name value.
+   */
+  public void setCountry(final String cCountry) {
+    this.country = cCountry;
+  }
+  
+  /**
+   * Getter for pal value.
+   * 
+   * @return The pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.attributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for the inResponseTo value.
+   * 
+   * @return The inResponseTo value.
+   */
+  public String getInResponseTo() {
+    return inResponseTo;
+  }
+  
+  /**
+   * Setter for the inResponseTo value.
+   * 
+   * @param samlInResponseTo the new inResponseTo value.
+   */
+  public void setInResponseTo(final String samlInResponseTo) {
+    this.inResponseTo = samlInResponseTo;
+  }
+  
+  /**
+   * Getter for the fail value.
+   * 
+   * @return The fail value.
+   */
+  public boolean isFail() {
+    return fail;
+  }
+  
+  /**
+   * Setter for the fail value.
+   * 
+   * @param failVal the new fail value.
+   */
+  public void setFail(final boolean failVal) {
+    this.fail = failVal;
+  }
+  
+  /**
+   * Getter for the message value.
+   * 
+   * @return The message value.
+   */
+  public String getMessage() {
+    return message;
+  }
+  
+  /**
+   * Setter for the message value.
+   * 
+   * @param msg the new message value.
+   */
+  public void setMessage(final String msg) {
+    this.message = msg;
+  }
+  
+  /**
+   * Getter for the statusCode value.
+   * 
+   * @return The statusCode value.
+   */
+  public String getStatusCode() {
+    return statusCode;
+  }
+  
+  /**
+   * Setter for the statusCode value.
+   * 
+   * @param status the new statusCode value.
+   */
+  public void setStatusCode(final String status) {
+    this.statusCode = status;
+  }
+  
+  /**
+   * Getter for the samlId value.
+   * 
+   * @return The samlId value.
+   */
+  public String getSamlId() {
+    return samlId;
+  }
+  
+  /**
+   * Setter for the samlId value.
+   * 
+   * @param nSamlId the new samlId value.
+   */
+  public void setSamlId(final String nSamlId) {
+    this.samlId = nSamlId;
+  }
+  
+  /**
+   * Getter for the notOnOrAfter value.
+   * 
+   * @return The notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotOnOrAfter() {
+    return this.notOnOrAfter;
+  }
+  
+  /**
+   * Setter for the notOnOrAfter value.
+   * 
+   * @param nOnOrAfter the new notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public void setNotOnOrAfter(final DateTime nOnOrAfter) {
+    this.notOnOrAfter = nOnOrAfter;
+  }
+  
+  /**
+   * Getter for the notBefore value.
+   * 
+   * @return The notBefore value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotBefore() {
+    return notBefore;
+  }
+  
+  /**
+   * Setter for the notBefore value.
+   * 
+   * @param nBefore the new notBefore value.
+   * 
+   * @see DateTime
+   */
+  public void setNotBefore(final DateTime nBefore) {
+    this.notBefore = nBefore;
+  }
+  
+  public void setAssertions(List<Assertion> newAssert) {
+	  this.assertions = newAssert;
+  }
+  
+  public List<Assertion> getAssertions() {
+	  return assertions;
+  }
+  
+  /**
+   * Getter for the toal pal value.
+   * 
+   * @return The total pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getTotalPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) totalAttributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the total Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setTotalPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.totalAttributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for personal attribute lists
+   * 
+   * @return The lists
+   * 
+   * @see PersonalAttributeList
+   */
+  public List<IPersonalAttributeList> getPersonalAttributeLists() {
+      return attributeLists;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeLists(final List<IPersonalAttributeList> attrLists) {
+    if (attrLists != null) {
+      this.attributeLists = attrLists;
+    }
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutRequest.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutRequest.java.svn-base
new file mode 100644
index 000000000..44811aee2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutRequest.java.svn-base
@@ -0,0 +1,197 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+public class STORKLogoutRequest implements Serializable, Cloneable {
+	private static final long serialVersionUID = 4778480781609392750L;
+	  
+	  /** The samlId. */
+	  private String samlId;
+	  	  
+	  /** The destination. */
+	  private String destination;
+
+	  /** The distinguished name. */
+	  private String distinguishedName;
+	  	   
+	  /** The qaa. */
+	  private int qaa;
+	  
+	  /** The token saml. */
+	  private byte[] tokenSaml = new byte[0];
+	  
+	  /** The issuer. */
+	  private String issuer;	 
+	  
+	  /** The country. */
+	  private String country;
+	    
+	  /** The Alias used at the keystore for saving this certificate. */
+	  private String alias;
+	
+	  /** The ID of principal as known to SP **/
+	  private String spProvidedId;
+	  
+	  /**
+	   * Gets the SP's Certificate Alias.
+	   * 
+	   * @return alias The SP's Certificate Alias.
+	   */
+	  public String getAlias() {
+	    return alias;
+	  }
+	  
+	  /**
+	   * Sets the SP's Certificate Alias.
+	   * 
+	   * @param nAlias The SP's Certificate Alias.
+	   */
+	  public void setAlias(final String nAlias) {
+	    this.alias = nAlias;
+	  }
+	  
+	  /**
+	   * Gets the issuer.
+	   * 
+	   * @return The issuer value.
+	   */
+	  public String getIssuer() {
+	    return issuer;
+	  }
+	  
+	  /**
+	   * Sets the issuer.
+	   * 
+	   * @param samlIssuer the new issuer value.
+	   */
+	  public void setIssuer(final String samlIssuer) {
+	    this.issuer = samlIssuer;
+	  }
+	  
+	  /**
+	   * Gets the SAML Token.
+	   * 
+	   * @return The SAML Token value.
+	   */
+	  public byte[] getTokenSaml() {
+	    return tokenSaml.clone();
+	  }
+	  
+	  /**
+	   * Sets the SAML Token.
+	   * 
+	   * @param samlToken The new SAML Token value.
+	   */
+	  public void setTokenSaml(final byte[] samlToken) {
+	    if (samlToken != null) {
+	      this.tokenSaml = samlToken.clone();
+	    }
+	  }
+	  
+	  /**
+	   * Gets the country.
+	   * 
+	   * @return The country value.
+	   */
+	  public String getCountry() {
+	    return country;
+	  }
+	  
+	  /**
+	   * Sets the country.
+	   * 
+	   * @param nCountry the new country value.
+	   */
+	  public void setCountry(final String nCountry) {
+	    this.country = nCountry;
+	  }
+	  
+	  /**
+	   * Getter for the qaa value.
+	   * 
+	   * @return The qaa value value.
+	   */
+	  public int getQaa() {
+	    return qaa;
+	  }
+	  
+	  /**
+	   * Setter for the qaa value.
+	   * 
+	   * @param qaaLevel The new qaa value.
+	   */
+	  public void setQaa(final int qaaLevel) {
+	    this.qaa = qaaLevel;
+	  }	  
+	  
+	  /**
+	   * Getter for the destination value.
+	   * 
+	   * @return The destination value.
+	   */
+	  public String getDestination() {
+	    return destination;
+	  }
+	  
+	  /**
+	   * Setter for the destination value.
+	   * 
+	   * @param detination the new destination value.
+	   */
+	  public void setDestination(final String detination) {
+	    this.destination = detination;
+	  }
+	  
+	  /**
+	   * Getter for the samlId value.
+	   * 
+	   * @return The samlId value.
+	   */
+	  public String getSamlId() {
+	    return samlId;
+	  }
+	  
+	  /**
+	   * Setter for the samlId value.
+	   * 
+	   * @param newSamlId the new samlId value.
+	   */
+	  public void setSamlId(final String newSamlId) {
+	    this.samlId = newSamlId;
+	  }
+	  
+	  /**
+	   * Getter for the distinguishedName value.
+	   * 
+	   * @return The distinguishedName value.
+	   */
+	  public String getDistinguishedName() {
+	    return distinguishedName;
+	  }
+	  
+	  /**
+	   * Setter for the distinguishedName value.
+	   * 
+	   * @param certDN the distinguished name value.
+	   */
+	  public void setDistinguishedName(final String certDN) {
+	    this.distinguishedName = certDN;
+	  }
+	  
+	  /** Getter for spProvidedId **/
+	  public String getSpProvidedId() {
+		  return spProvidedId;
+	  }
+	  
+	  public void setSpProvidedId(final String nSpProvidedId) {
+		  this.spProvidedId = nSpProvidedId;
+	  }
+	  
+	  @Override
+	  public Object clone() throws CloneNotSupportedException{
+		  STORKLogoutRequest storkLogoutRequest = null;
+	      storkLogoutRequest = (STORKLogoutRequest) super.clone();
+	      storkLogoutRequest.setTokenSaml(getTokenSaml());
+	    return storkLogoutRequest;
+	  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutResponse.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutResponse.java.svn-base
new file mode 100644
index 000000000..21b53a652
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKLogoutResponse.java.svn-base
@@ -0,0 +1,250 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+public class STORKLogoutResponse implements Serializable, Cloneable {
+	private static final long serialVersionUID = 4778480781609392750L;
+	  
+	  /** The samlId. */
+	  private String samlId;
+	  	  
+	  /** The destination. */
+	  private String destination;
+
+	  /** The distinguished name. */
+	  private String distinguishedName;
+	  
+	  /** The token saml. */
+	  private byte[] tokenSaml = new byte[0];
+	  
+	  /** The issuer. */
+	  private String issuer;	 
+	  
+	  /** The country. */
+	  private String country;
+	    
+	  /** The Alias used at the keystore for saving this certificate. */
+	  private String alias;
+	
+	  /** Status code. */
+	  private String statusCode;
+	  
+	  /** Secondary status code. */
+	  private String subStatusCode;
+	  
+	  /** Status message. */
+	  private String statusMessage;
+	  
+	  /** Logout failed? */
+	  private boolean fail;
+	  
+	  /**
+	   * Gets the SP's Certificate Alias.
+	   * 
+	   * @return alias The SP's Certificate Alias.
+	   */
+	  public String getAlias() {
+	    return alias;
+	  }
+	  
+	  /**
+	   * Sets the SP's Certificate Alias.
+	   * 
+	   * @param nAlias The SP's Certificate Alias.
+	   */
+	  public void setAlias(final String nAlias) {
+	    this.alias = nAlias;
+	  }
+	  
+	  /**
+	   * Gets the issuer.
+	   * 
+	   * @return The issuer value.
+	   */
+	  public String getIssuer() {
+	    return issuer;
+	  }
+	  
+	  /**
+	   * Sets the issuer.
+	   * 
+	   * @param samlIssuer the new issuer value.
+	   */
+	  public void setIssuer(final String samlIssuer) {
+	    this.issuer = samlIssuer;
+	  }
+	  
+	  /**
+	   * Gets the SAML Token.
+	   * 
+	   * @return The SAML Token value.
+	   */
+	  public byte[] getTokenSaml() {
+	    return tokenSaml.clone();
+	  }
+	  
+	  /**
+	   * Sets the SAML Token.
+	   * 
+	   * @param samlToken The new SAML Token value.
+	   */
+	  public void setTokenSaml(final byte[] samlToken) {
+	    if (samlToken != null) {
+	      this.tokenSaml = samlToken.clone();
+	    }
+	  }
+	  
+	  /**
+	   * Gets the country.
+	   * 
+	   * @return The country value.
+	   */
+	  public String getCountry() {
+	    return country;
+	  }
+	  
+	  /**
+	   * Sets the country.
+	   * 
+	   * @param nCountry the new country value.
+	   */
+	  public void setCountry(final String nCountry) {
+	    this.country = nCountry;
+	  }	    
+	  
+	  /**
+	   * Getter for the destination value.
+	   * 
+	   * @return The destination value.
+	   */
+	  public String getDestination() {
+	    return destination;
+	  }
+	  
+	  /**
+	   * Setter for the destination value.
+	   * 
+	   * @param detination the new destination value.
+	   */
+	  public void setDestination(final String detination) {
+	    this.destination = detination;
+	  }
+	  
+	  /**
+	   * Getter for the samlId value.
+	   * 
+	   * @return The samlId value.
+	   */
+	  public String getSamlId() {
+	    return samlId;
+	  }
+	  
+	  /**
+	   * Setter for the samlId value.
+	   * 
+	   * @param newSamlId the new samlId value.
+	   */
+	  public void setSamlId(final String newSamlId) {
+	    this.samlId = newSamlId;
+	  }
+	  
+	  /**
+	   * Getter for the distinguishedName value.
+	   * 
+	   * @return The distinguishedName value.
+	   */
+	  public String getDistinguishedName() {
+	    return distinguishedName;
+	  }
+	  
+	  /**
+	   * Setter for the distinguishedName value.
+	   * 
+	   * @param certDN the distinguished name value.
+	   */
+	  public void setDistinguishedName(final String certDN) {
+	    this.distinguishedName = certDN;
+	  }
+	  	  
+	  
+	  /**
+	   * Getter for the fail value.
+	   * 
+	   * @return The fail value.
+	   */
+	  public boolean isFail() {
+	    return fail;
+	  }
+	  
+	  /**
+	   * Setter for the fail value.
+	   * 
+	   * @param failVal the new fail value.
+	   */
+	  public void setFail(final boolean failVal) {
+	    this.fail = failVal;
+	  }
+	  
+	  /**
+	   * Getter for the statusCode value.
+	   * 
+	   * @return The statusCode value.
+	   */
+	  public String getStatusCode() {
+	    return statusCode;
+	  }
+	  
+	  /**
+	   * Getter for the subStatusCode.
+	   * 
+	   * @return The subStatusCode value.
+	   */
+	  public String getSubStatusCode() {
+	    return subStatusCode;
+	  }
+	  
+	  /**
+	   * Setter for the subStatusCode.
+	   * 
+	   * @param samlSubStatusCode the new subStatusCode value.
+	   */
+	  public void setSubStatusCode(final String samlSubStatusCode) {
+	    this.subStatusCode = samlSubStatusCode;
+	  }
+	  
+	  /**
+	   * Setter for the statusMessage value.
+	   * 
+	   * @param status the new statusMessage value.
+	   */
+	  public void setStatusMessage(final String status) {
+	    this.statusMessage = status;
+	  }
+	  
+	  /**
+	   * Getter for the statusMessage value.
+	   * 
+	   * @return The statusMessage value.
+	   */
+	  public String getStatusMessage() {
+	    return statusMessage;
+	  }
+	  
+	  /**
+	   * Setter for the statusCode value.
+	   * 
+	   * @param status the new statusCode value.
+	   */
+	  public void setStatusCode(final String status) {
+	    this.statusCode = status;
+	  }
+	  
+	  @Override
+	  public Object clone() throws CloneNotSupportedException{
+		  STORKLogoutResponse storkLogoutResponse = null;
+	      storkLogoutResponse = (STORKLogoutResponse) super.clone();
+	      storkLogoutResponse.setTokenSaml(getTokenSaml());
+	    return storkLogoutResponse;
+	  }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKStatusCode.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKStatusCode.java.svn-base
new file mode 100644
index 000000000..a9c4a156b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKStatusCode.java.svn-base
@@ -0,0 +1,68 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains the SAML Token Status Code.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2010-11-17 05:15:28 $
+ */
+public enum STORKStatusCode {
+  
+  /** URI for Requester status code. */
+  REQUESTER_URI("urn:oasis:names:tc:SAML:2.0:status:Requester"),
+  
+  /** URI for Responder status code. */
+  RESPONDER_URI("urn:oasis:names:tc:SAML:2.0:status:Responder"),
+  
+  /** URI for Success status code. */
+  SUCCESS_URI("urn:oasis:names:tc:SAML:2.0:status:Success"),
+  
+  /** Attribute is Available. */
+  STATUS_AVAILABLE("Available"),
+  
+  /** Attribute is NotAvailable. */
+  STATUS_NOT_AVAILABLE("NotAvailable"),
+  
+  /** Attribute is Withheld. */
+  STATUS_WITHHELD("Withheld");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param val The Constant value.
+   */
+  private STORKStatusCode(final String val) {
+    
+    this.value = val;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    
+    return value;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKSubStatusCode.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKSubStatusCode.java.svn-base
new file mode 100644
index 000000000..0a711c9b7
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/STORKSubStatusCode.java.svn-base
@@ -0,0 +1,71 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains the SAML Token Sub Status Code.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.7 $, $Date: 2010-11-17 05:15:28 $
+ */
+public enum STORKSubStatusCode {
+  
+  /** URI for AuthnFailed status code. */
+  AUTHN_FAILED_URI("urn:oasis:names:tc:SAML:2.0:status:AuthnFailed"),
+  
+  /** URI for InvalidAttrNameOrValue status code. */
+  INVALID_ATTR_NAME_VALUE_URI(
+    "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue"),
+  
+  /** URI for InvalidNameIDPolicy status code. */
+  INVALID_NAMEID_POLICY_URI(
+    "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy"),
+  
+  /** URI for VersionMismatch status code. */
+  VERSION_MISMATCH_URI("urn:oasis:names:tc:SAML:2.0:status:VersionMismatch"),
+  
+  /** URI for RequestDenied status code. */
+  REQUEST_DENIED_URI("urn:oasis:names:tc:SAML:2.0:status:RequestDenied"),
+  
+  /** URI for QaaNotSupported status code. */
+  QAA_NOT_SUPPORTED(
+    "http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param val The Constant value.
+   */
+  private STORKSubStatusCode(final String val) {
+    
+    this.value = val;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    
+    return value;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/package-info.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/package-info.java.svn-base
new file mode 100644
index 000000000..19d45aaa2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/.svn/text-base/package-info.java.svn-base
@@ -0,0 +1,9 @@
+/**
+ * Common Authentication Service functionalities to be deployed in every PEPS 
+ * is contained in this package.
+ * In particular, it contains the SAML Engine that implements the SAML messages
+ * management
+ * 
+ * @since 1.0
+ */
+package eu.stork.peps.auth.commons;
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeConstants.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeConstants.java
new file mode 100644
index 000000000..09769641c
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeConstants.java
@@ -0,0 +1,72 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the STORK PEPS, Commons and Specific errors
+ * constant identifiers.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2010-11-17 05:15:28 $
+ */
+public enum AttributeConstants {
+  
+  /**
+   * Represents the attribute's name index.
+   */
+  ATTR_NAME_INDEX(0),
+  /**
+   * Represents the attribute's type index.
+   */
+  ATTR_TYPE_INDEX(1),
+  /**
+   * Represents the attribute's value index.
+   */
+  ATTR_VALUE_INDEX(2),
+  /**
+   * Represents the attribute's status index.
+   */
+  ATTR_STATUS_INDEX(3),
+  /**
+   * Represents the number of allowed tuples.
+   */
+  NUMBER_TUPLES(4);
+  
+  /**
+   * Represents the constant's value.
+   */
+  private int attribute;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param attr The Attribute Constant value.
+   */
+  AttributeConstants(final int attr) {
+    
+    this.attribute = attr;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public int intValue() {
+    
+    return attribute;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeName.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeName.java
new file mode 100644
index 000000000..a44768c7e
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeName.java
@@ -0,0 +1,74 @@
+package eu.stork.peps.auth.commons;
+
+/**
+ * This class is a bean used to store information relative to Attribute Names.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.00 $, $Date: 2013-11-26 $
+ */
+public final class AttributeName {
+  
+  /**
+   * Attribute Id.
+   */
+  private String attributeId;
+  
+  /**
+   * Attribute Name.
+   */
+  private String attributeName;
+
+  /**
+   * Attribute Name Constructor.
+   * 
+   * @param aId Id of the Attribute Name.
+   * @param aName Name of the Attribute Name.
+   */
+  public AttributeName(final String aId, final String aName) {
+    
+    this.attributeId = aId;
+    this.attributeName = aName;
+  }
+  
+  /**
+   * Getter for the attributeId value.
+   * 
+   * @return The attributeId value.
+   */
+  public String getAttributeId() {
+    
+    return attributeId;
+  }
+  
+  /**
+   * Setter for the attributeId value.
+   * 
+   * @param aId Id of the Attribute Name.
+   */
+  public void setAttributeId(final String aId) {
+    
+    this.attributeId = aId;
+  }
+  
+  /**
+   * Getter for the attributeName value.
+   * 
+   * @return The attributeName value.
+   */
+  public String getAttributeName() {
+    
+    return attributeName;
+  }
+  
+  /**
+   * Setter for the attributeName value.
+   * 
+   * @param name Name of the Attribute Name.
+   */
+  public void setAttributeName(final String name) {
+    
+    this.attributeName = name;
+  }
+  
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvider.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvider.java
new file mode 100644
index 000000000..575732e27
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvider.java
@@ -0,0 +1,123 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * This class is a bean used to store the information relative to the Attribute Provider.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.01 $, $Date: 2014-01-13 $
+ */
+public final class AttributeProvider implements Serializable {
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 7210186241917444559L;
+
+ /**
+   * Provider Id.
+   */
+  private String providerId;
+  
+  /**
+   * Provider Name.
+   */
+  private String providerName;
+
+  /**
+   * Allowed groups of attribute names.
+   */
+  private List<String> allowedGroups;
+
+  /**
+   * Attribute Provider Constructor.
+   * 
+   * @param pId Id of the Attribute Provider.
+   * @param pName Name of the Attribute Provider.
+   */
+  public AttributeProvider(final String pId, final String pName, final List<String> pAllowedGroups) {
+    
+    this.providerId = pId;
+    this.providerName = pName;
+    this.allowedGroups = pAllowedGroups;
+  }
+  
+  /**
+   * Getter for the providerId value.
+   * 
+   * @return The providerId value.
+   */
+  public String getProviderId() {
+    
+    return providerId;
+  }
+  
+  /**
+   * Setter for the providerId value.
+   * 
+   * @param pId Id of the Attribute Provider.
+   */
+  public void setProviderId(final String pId) {
+    
+    this.providerId = pId;
+  }
+  
+  /**
+   * Getter for the providerName value.
+   * 
+   * @return The providerName value.
+   */
+  public String getProviderName() {
+    
+    return providerName;
+  }
+  
+  /**
+   * Setter for the providerName value.
+   * 
+   * @param name Name of the Attribute Provider.
+   */
+  public void setProviderName(final String name) {
+    
+    this.providerName = name;
+  }
+
+  /**
+   * Getter for the allowedGroups value.
+   * 
+   * @return The allowedGroups value.
+   */
+  public List<String> getAllowedGroups() {
+    
+    return allowedGroups;
+  }
+  
+  /**
+   * Setter for the allowedGroups value.
+   * 
+   * @param name AllowedGroups of the Attribute Provider.
+   */
+  public void setAllowedGroups(final List<String> pAllowedGroups) {
+    
+    this.allowedGroups = pAllowedGroups;
+  }
+
+  /**
+   * Check if an attribute name is allowed for this Attribute Provider
+   * 
+   * @param pAttrName the Attribute Name to check
+   * @return true if the name is allowed, false otherwise
+   */
+  public boolean isAttributeNameAllowed(final String pAttrName) {
+	if ( allowedGroups==null || pAttrName==null )
+	  return false;
+	else if ( allowedGroups.contains(PEPSParameters.ATTRIBUTE_GROUPS_ALL.toString()) )
+		return true;
+	else if ( allowedGroups.contains(PEPSParameters.ATTRIBUTE_GROUPS_NONE.toString()) )
+		return false;
+	else
+	  return allowedGroups.contains(pAttrName);
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvidersMap.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvidersMap.java
new file mode 100644
index 000000000..85aec2625
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeProvidersMap.java
@@ -0,0 +1,96 @@
+package eu.stork.peps.auth.commons;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Implementation of the AttributeProviderMap using a LinkedHashMap.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.01 $, $Date: 2013-09-20 $
+ *
+ * @see LinkedHashMap
+ */
+public class AttributeProvidersMap extends LinkedHashMap<AttributeSource, IPersonalAttributeList>
+   implements IAttributeProvidersMap {
+	/**
+	 * Logger object.
+	 */
+	private static final Logger LOG = Logger.getLogger(AttributeProvidersMap.class.getName());
+   
+	/**
+	 * Unique identifier.
+	 */
+	private static final long serialVersionUID = 8949081185106296122L;
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public IPersonalAttributeList get(final AttributeSource key) {
+		return this.get((Object) key);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public IPersonalAttributeList remove(final AttributeSource key) {
+		return this.remove((Object) key);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean containsKey(final AttributeSource key) {
+		return this.containsKey((Object) key);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Iterator<AttributeSource> keyIterator() {
+		return this.keySet().iterator();
+	}
+
+	public void trace() {
+		Iterator<AttributeSource> iterator;
+		Iterator<PersonalAttribute> iterator2;
+		AttributeSource source;
+		IPersonalAttributeList pal;
+		PersonalAttribute pa;
+
+		iterator = this.keyIterator();
+		LOG.trace("Start dumping of AttributeProvidersMap\n=======================");
+		while (iterator.hasNext()) {
+			source = iterator.next();
+
+			LOG.trace("Source details: type [" + source.getSourceType() + "], URL [" + source.getProviderURL() + "]");
+
+			if(source.getSourceType() == AttributeSource.SOURCE_LOCAL_APROVIDER) {
+				LOG.trace("-> Attribute Provider: ID [" + source.getProvider().getProviderId() + "], name [" + source.getProvider().getProviderName() + "]");
+			}
+			else {
+				LOG.trace("-> Country: ID [" + source.getCountry().getCountryId() + "], name [" + source.getCountry().getCountryName() + "]");
+			}
+
+			pal = this.get(source);
+			LOG.trace("++++++++=>");
+			iterator2 = pal.iterator();
+			while (iterator2.hasNext()) {
+				pa = iterator2.next();
+
+				LOG.trace("-> Citizen Attribute: name [" + pa.getName() + "], required [" + pa.isRequired() + "]");
+			}
+			LOG.trace("<=++++++++");
+
+			LOG.trace("-----------------------");
+		}
+		LOG.trace("END\n=======================");
+	}
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeSource.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeSource.java
new file mode 100644
index 000000000..846f54f67
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeSource.java
@@ -0,0 +1,188 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information relative to the Attribute Source (either AttributeProvider or Country).
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.10 $, $Date: 2013-11-29 $
+ */
+public final class AttributeSource implements Serializable {
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 432243595968469014L;
+
+  public static final int SOURCE_LOCAL_APROVIDER = 1;
+  public static final int SOURCE_REMOTE_COUNTRY = 2;
+
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(AttributeSource.class.getName());
+
+  /**
+   * Provider source.
+   */
+  private int sourceType;
+  
+  /**
+   * Provider URL.
+   */
+  private String providerURL;
+
+  /**
+   * The local Attribute Provider.
+   */
+  private AttributeProvider provider;
+
+  /**
+   * The remote Country.
+   */
+  private Country country;
+  
+  /**
+   * Attribute Source Constructor.
+   * 
+   * @param provider The local Attribute Provider.
+   * @param pURL URL of the Attribute Provider.
+   */
+  public AttributeSource(final AttributeProvider provider, final String pURL) {
+    this.setSourceType(SOURCE_LOCAL_APROVIDER);
+
+    this.setProvider(provider);
+    this.setProviderURL(pURL);
+  }
+  
+  /**
+   * Attribute Source Constructor.
+   * 
+   * @param country The remote Country.
+   * @param pURL URL of the Country.
+   */
+  public AttributeSource(final Country country, final String pURL) {
+    this.setSourceType(SOURCE_REMOTE_COUNTRY);
+
+    this.setCountry(country);
+    this.setProviderURL(pURL);
+  }
+
+  /**
+   * @param sourceType the sourceType to set
+   */
+  public void setSourceType(final int sourceType) {
+	  this.sourceType = sourceType;
+  }
+
+  /**
+   * @return the sourceType
+   */
+  public int getSourceType() {
+	  return sourceType;
+  }
+
+  /**
+   * @param providerURL the providerURL to set
+   */
+  public void setProviderURL(final String providerURL) {
+	  this.providerURL = providerURL;
+  }
+
+  /**
+   * @return the providerURL
+   */
+  public String getProviderURL() {
+	  return providerURL;
+  }
+
+  /**
+   * @param provider the provider to set
+   */
+  public void setProvider(final AttributeProvider provider) {
+	  this.setSourceType(SOURCE_LOCAL_APROVIDER);
+
+	  this.provider = provider;
+  }
+
+  /**
+   * @return the provider
+   */
+  public AttributeProvider getProvider() {
+	  return provider;
+  }
+
+  /**
+   * @param country the country to set
+   */
+  public void setCountry(final Country country) {
+	  this.setSourceType(SOURCE_REMOTE_COUNTRY);
+
+	  this.country = country;
+  }
+
+  /**
+   * @return the country
+   */
+  public Country getCountry() {
+	  return country;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean equals(Object obj) {
+	  boolean outcome = false;
+
+	  LOG.debug("Calling equals with Object.");
+	  if ( obj instanceof AttributeSource ) {
+		  LOG.debug("Calling equals with AttributeSource.");
+		  outcome = this.equals((AttributeSource)obj);
+	  }
+
+	  LOG.debug("Object equals outcome: " + outcome);
+	  return outcome;
+  }
+
+  /**
+   * Compare the given AttributeSource with the current object in order to determinine
+   * if they are equal.
+   * 
+   * @param obj The AttributeSource to compare to
+   * 
+   * @return true if the two objects are equal
+   */
+  public boolean equals(AttributeSource obj) {
+	  boolean outcome = false;
+
+	  if ( this.sourceType==obj.getSourceType() ) {
+		  if ( this.sourceType==AttributeSource.SOURCE_LOCAL_APROVIDER ) {
+			  if ( this.provider.getProviderId().equals(obj.getProvider().getProviderId()) )
+				  outcome = true;
+		  }
+		  else if ( this.sourceType==AttributeSource.SOURCE_REMOTE_COUNTRY ) {
+			  if ( this.country.getCountryId().equals(obj.getCountry().getCountryId()) )
+				  outcome = true;
+		  }
+	  }
+
+	  LOG.debug("AttributeSource equals outcome: " + outcome);
+	  return outcome;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public int hashCode() {
+	  int hash = 1;
+	  hash = hash * 17 + this.sourceType;
+	  if ( this.sourceType==AttributeSource.SOURCE_LOCAL_APROVIDER )
+		  hash = hash * 31 + this.provider.getProviderName().hashCode();
+	  else
+		  hash = hash * 31 + this.country.getCountryName().hashCode();
+	  return hash;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeUtil.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeUtil.java
new file mode 100644
index 000000000..af7ab6cf3
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/AttributeUtil.java
@@ -0,0 +1,231 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * This class holds static helper methods.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.5 $, $Date: 2010-12-15 23:19:59 $
+ */
+public final class AttributeUtil {
+  
+  /**
+   * Private constructor. Prevents the class from being instantiated.
+   */
+  private AttributeUtil() {
+    // empty constructor
+  }
+  
+  /**
+   * Safe escape any given string.
+   * 
+   * @param value The HTTP Value to escaped.
+   * 
+   * @return The value escaped value.
+   */
+  public static String escape(final String value) {
+    
+    final String attrSep = PEPSValues.ATTRIBUTE_SEP.toString();
+    final String attrTupleSep = PEPSValues.ATTRIBUTE_TUPLE_SEP.toString();
+    final String attrValueSep = PEPSValues.ATTRIBUTE_VALUE_SEP.toString();
+    
+    final String escAttrSep = "%" + (int) attrSep.charAt(0);
+    final String escAttrTupleSep = "%" + (int) attrTupleSep.charAt(0);
+    final String escAttrValueSep = "%" + (int) attrValueSep.charAt(0);
+    
+    return value.replace(attrSep, escAttrSep)
+      .replace(attrTupleSep, escAttrTupleSep)
+      .replace(attrValueSep, escAttrValueSep);
+  }
+  
+  /**
+   * Unescape any given string.
+   * 
+   * @param value The HTTP Value to be unescaped.
+   * 
+   * @return The value unescaped value.
+   */
+  public static String unescape(final String value) {
+    final String attrSep = PEPSValues.ATTRIBUTE_SEP.toString();
+    final String attrTupleSep = PEPSValues.ATTRIBUTE_TUPLE_SEP.toString();
+    final String attrValueSep = PEPSValues.ATTRIBUTE_VALUE_SEP.toString();
+    
+    final String escAttrSep = "%" + (int) attrSep.charAt(0);
+    final String escAttrTupleSep = "%" + (int) attrTupleSep.charAt(0);
+    final String escAttrValueSep = "%" + (int) attrValueSep.charAt(0);
+    
+    return value.replace(escAttrSep, attrSep)
+      .replace(escAttrTupleSep, attrTupleSep)
+      .replace(escAttrValueSep, attrValueSep);
+  }
+  
+  /**
+   * Appends the string representation of an object to a StringBuilder.
+   * 
+   * @param strBuilder The StringBuilder to append to.
+   * @param val The string representation of an object.
+   */
+  public static void appendIfNotNull(final StringBuilder strBuilder,
+    final Object val) {
+    
+    if (val != null) {
+      strBuilder.append(val);
+    }
+  }
+  
+  /**
+   * Given a separator and a list of strings, joins the list, as a string,
+   * separated by the separator string.
+   * 
+   * @param list The list of strings to join.
+   * @param separator The separator string.
+   * @return the list, as a string, separated by the separator string.
+   */
+  public static String listToString(final List<String> list,
+    final String separator) {
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    for (final String s : list) {
+      if (!StringUtils.isEmpty(s)) {
+        strBuilder.append(AttributeUtil.escape(s) + separator);
+      }
+    }
+    return strBuilder.toString();
+  }
+  
+  /**
+   * Given a separator and a map of strings to strings, joins the map, as a
+   * string, separated by the separator string with the pair key/value
+   * concatenated with a '='.
+   * 
+   * @param map The map of strings to join.
+   * @param separator The separator string.
+   * 
+   * @return the map of strings, as a string, separated by the separator string
+   *         with the pair key/value concatenated with a '='.
+   */
+  public static String mapToString(final Map<String, String> map,
+    final String separator) {
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    final Iterator<Entry<String, String>> valuesIt = map.entrySet().iterator();
+    while (valuesIt.hasNext()) {
+      final Entry<String, String> entry = valuesIt.next();
+      strBuilder.append(entry.getKey());
+      strBuilder.append('=');
+      strBuilder.append(AttributeUtil.escape(entry.getValue()));
+      strBuilder.append(separator);
+    }
+    return strBuilder.toString();
+  }
+  
+  /**
+   * Validates the attribute value format.
+   * 
+   * @param value The attribute value to validate.
+   * 
+   * @return true if value has a valid format.
+   */
+  public static boolean isValidValue(final String value) {
+    boolean retVal = false;
+    if (value != null && value.charAt(0) == '[' && value.endsWith("]")) {
+      final String tmpAttrValue = value.substring(1, value.length() - 1);
+      final String[] vals =
+        tmpAttrValue.split(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+      
+      if (tmpAttrValue.length() >= 0
+        || (vals.length > 0 && vals[0].length() > 0)) {
+        retVal = true;
+      }
+    }
+    return retVal;
+  }
+  
+  /**
+   * Validates the attribute type value. It's case insensitive. E.g. return true
+   * value to: a) "true", "TRUE", "True", ... b) "false", "FALSE", "False", ...
+   * 
+   * @param type The attribute type value.
+   * 
+   * @return true if type has a true or false (case insensitive) value.
+   */
+  public static boolean isValidType(final String type) {
+      return StringUtils.isNotEmpty(type) && (PEPSValues.TRUE.toString().equalsIgnoreCase(type) || PEPSValues.FALSE.toString().equalsIgnoreCase(type)) ;
+  }
+  
+  /**
+   * Validates the Personal attribute tuple. E.g. name:type:[value]:status
+   * 
+   * @param tuples The Personal attribute's tuple.
+   * 
+   * @return true if the tuples' format is valid.
+   * 
+   * @see PEPSUtil#validateParameter(String, String, String)
+   * @see String#equalsIgnoreCase(String)
+   */
+  public static boolean hasValidTuples(final String[] tuples) {
+    boolean retVal = false;
+
+      final int numberTuples = AttributeConstants.NUMBER_TUPLES.intValue();
+      if (tuples != null && tuples.length == numberTuples) {
+      // validate attrName
+      final int attrNameIndex = AttributeConstants.ATTR_NAME_INDEX.intValue();
+      final int attrTypeIndex = AttributeConstants.ATTR_TYPE_INDEX.intValue();
+      final int attrValueIndex = AttributeConstants.ATTR_VALUE_INDEX.intValue();
+      
+      retVal =
+        StringUtils.isNotEmpty(tuples[attrNameIndex])
+          && StringUtils.isNotEmpty(tuples[attrTypeIndex])
+          && StringUtils.isNotEmpty(tuples[attrValueIndex])
+          && AttributeUtil.isValidType(tuples[attrTypeIndex])
+          && AttributeUtil.isValidValue(tuples[attrValueIndex]);
+    }
+    return retVal;
+  }
+  
+  /**
+   * Check if all mandatory attributes have values.
+   * 
+   * @param personalAttrList The Personal Attributes List.
+   * 
+   * @return true if all mandatory attributes have values, false if at least one
+   *         attribute doesn't have value.
+   */
+  public static boolean checkMandatoryAttributes(
+    final IPersonalAttributeList personalAttrList) {
+    
+    final Iterator<PersonalAttribute> itAttributes =
+      personalAttrList.values().iterator();
+    boolean retVal = true;
+    while (itAttributes.hasNext() && retVal) {
+      final PersonalAttribute attr = itAttributes.next();
+      if (attr.isRequired()
+        && !STORKStatusCode.STATUS_AVAILABLE.toString()
+          .equals(attr.getStatus())) {
+        retVal = false;
+      }
+    }
+    return retVal;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CitizenConsent.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CitizenConsent.java
new file mode 100644
index 000000000..9ebcfbd5a
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CitizenConsent.java
@@ -0,0 +1,123 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class is a bean used to store the information relative to the Citizen
+ * Consent.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.15 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class CitizenConsent {
+  
+  /**
+   * Mandatory attributes list.
+   */
+  private List<String> mandatoryList;
+  
+  /**
+   * Optional attributes list.
+   */
+  private List<String> optionalList;
+  
+  /**
+   * Citizen Consent default Constructor.
+   */
+  public CitizenConsent() {
+    this.mandatoryList = new ArrayList<String>();
+    this.optionalList = new ArrayList<String>();
+  }
+  
+  /**
+   * Getter for the mandatoryList value.
+   * 
+   * @return The mandatoryList value.
+   */
+  public List<String> getMandatoryList() {
+    return this.mandatoryList;
+  }
+  
+  /**
+   * Setter for the mandatoryList value.
+   * 
+   * @param mandatoryAttrList Mandatory parameters list.
+   */
+  public void setMandatoryList(final List<String> mandatoryAttrList) {
+    this.mandatoryList = mandatoryAttrList;
+  }
+  
+  /**
+   * Setter for some mandatoryAttribute. Adds the input parameter to the
+   * mandatoryList.
+   * 
+   * @param mandatoryAttr Attribute to add to the mandatoryList.
+   */
+  public void setMandatoryAttribute(final String mandatoryAttr) {
+    this.mandatoryList.add(mandatoryAttr);
+  }
+  
+  /**
+   * Getter for the optionalList value.
+   * 
+   * @return The optionalList value.
+   */
+  public List<String> getOptionalList() {
+    return optionalList;
+  }
+  
+  /**
+   * Setter for the optionalList value.
+   * 
+   * @param optAttrList Optional parameters list.
+   */
+  public void setOptionalList(final List<String> optAttrList) {
+    this.optionalList = optAttrList;
+  }
+  
+  /**
+   * Setter for some optionalAttr. Adds the input parameter to the optionalList.
+   * 
+   * @param optionalAttr Attribute to add to the optionalList.
+   */
+  public void setOptionalAttribute(final String optionalAttr) {
+    this.optionalList.add(optionalAttr);
+  }
+  
+  /**
+   * Returns a string in the following format. "Mandatory attributes:
+   * mandatoryAttr1;mandatoryAttr2;mandatoryAttrN Optional attributes:
+   * optionalAttr1;optionalAttr2;optionalAttrN"
+   * 
+   * @return {@inheritDoc}
+   */
+  public String toString() {
+    final StringBuilder strbldr = new StringBuilder(46);
+    strbldr.append("Mandatory attributes: ");
+    for (final String str : mandatoryList) {
+      strbldr.append(str).append(';');
+    }
+    strbldr.append(" Optional attributes: ");
+    for (final String str : optionalList) {
+      strbldr.append(str).append(';');
+    }
+    return strbldr.toString();
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Country.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Country.java
new file mode 100644
index 000000000..001f9317a
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Country.java
@@ -0,0 +1,95 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+/**
+ * This class is a bean used to store the information relative to the Country.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.10 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class Country implements Serializable {
+  
+  /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1135994036496370993L;
+
+/**
+   * Country Id.
+   */
+  private String countryId;
+  
+  /**
+   * Country Name.
+   */
+  private String countryName;
+  
+  /**
+   * Country Constructor.
+   * 
+   * @param cId Id of the Country.
+   * @param cName Name of the Country.
+   */
+  public Country(final String cId, final String cName) {
+    
+    this.countryId = cId;
+    this.countryName = cName;
+  }
+  
+  /**
+   * Getter for the countryId value.
+   * 
+   * @return The countryId value.
+   */
+  public String getCountryId() {
+    
+    return countryId;
+  }
+  
+  /**
+   * Setter for the countryId value.
+   * 
+   * @param cId Id of the Country.
+   */
+  public void setCountryId(final String cId) {
+    
+    this.countryId = cId;
+  }
+  
+  /**
+   * Getter for the countryName value.
+   * 
+   * @return The countryName value.
+   */
+  public String getCountryName() {
+    
+    return countryName;
+  }
+  
+  /**
+   * Setter for the countryName value.
+   * 
+   * @param name Name of the Country.
+   */
+  public void setCountryName(final String name) {
+    
+    this.countryName = name;
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CountryCodes.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CountryCodes.java
new file mode 100644
index 000000000..54345f3ea
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/CountryCodes.java
@@ -0,0 +1,79 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This class contains all the ISO 3166-1 Alpha 3 Country Codes.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2011-04-14 00:24:56 $
+ */
+public final class CountryCodes {
+  
+  /**
+   * Private Constructor.
+   */
+  private CountryCodes() {
+    
+  }
+  
+  /**
+   * ISO 3166-1 Alpha 3 Country Codes.
+   */
+  private static List<String> countrysAlpha3 = Arrays.asList("ABW", "AFG",
+    "AGO", "AIA", "ALA", "ALB", "AND", "ANT", "ARE", "ARG", "ARM", "ASM",
+    "ATA", "ATF", "ATG", "AUS", "AUT", "AZE", "BDI", "BEL", "BEN", "BES",
+    "BFA", "BGD", "BGR", "BHR", "BHS", "BIH", "BLM", "BLR", "BLZ", "BMU",
+    "BOL", "BRA", "BRB", "BRN", "BTN", "BUR", "BVT", "BWA", "BYS", "CAF",
+    "CAN", "CCK", "CHE", "CHL", "CHN", "CIV", "CMR", "COD", "COG", "COK",
+    "COL", "COM", "CPV", "CRI", "CSK", "CUB", "CUW", "CXR", "CYM", "CYP",
+    "CZE", "DEU", "DJI", "DMA", "DNK", "DOM", "DZA", "ECU", "EGY", "ERI",
+    "ESH", "ESP", "EST", "ETH", "FIN", "FJI", "FLK", "FRA", "FRO", "FSM",
+    "GAB", "GBR", "GEO", "GGY", "GHA", "GIB", "GIN", "GLP", "GMB", "GNB",
+    "GNQ", "GRC", "GRD", "GRL", "GTM", "GUF", "GUM", "GUY", "HKG", "HMD",
+    "HND", "HRV", "HTI", "HUN", "IDN", "IMN", "IND", "IOT", "IRL", "IRN",
+    "IRQ", "ISL", "ISR", "ITA", "JAM", "JEY", "JOR", "JPN", "KAZ", "KEN",
+    "KGZ", "KHM", "KIR", "KNA", "KOR", "KWT", "LAO", "LBN", "LBR", "LBY",
+    "LCA", "LIE", "LKA", "LSO", "LTU", "LUX", "LVA", "MAC", "MAF", "MAR",
+    "MCO", "MDA", "MDG", "MDV", "MEX", "MHL", "MKD", "MLI", "MLT", "MMR",
+    "MNE", "MNG", "MNP", "MOZ", "MRT", "MSR", "MTQ", "MUS", "MWI", "MYS",
+    "MYT", "NAM", "NCL", "NER", "NFK", "NGA", "NIC", "NIU", "NLD", "NOR",
+    "NPL", "NRU", "NZL", "OMN", "PAK", "PAN", "PCN", "PER", "PHL", "PLW",
+    "PNG", "POL", "PRI", "PRK", "PRT", "PRY", "PSE", "PYF", "QAT", "REU",
+    "ROM", "ROU", "RUS", "RWA", "SAU", "SCG", "SDN", "SEN", "SGP", "SGS",
+    "SHN", "SJM", "SLB", "SLE", "SLV", "SMR", "SOM", "SPM", "SRB", "STP",
+    "SUR", "SVK", "SVN", "SXW", "SWE", "SWZ", "SYC", "SYR", "TCA", "TCD",
+    "TGO", "THA", "TJK", "TKL", "TKM", "TLS", "TMP", "TON", "TTO", "TUN",
+    "TUR", "TUV", "TWN", "TZA", "UGA", "UKR", "UMI", "URY", "USA", "UZB",
+    "VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF", "WSM", "YEM",
+    "YUG", "ZAF", "ZAR", "ZMB", "ZWE");
+  
+  /**
+   * Searches the CountryCode (3166-1 alpha3 format) an return true if it
+   * exists.
+   * 
+   * @param countryCode The Country code to search.
+   * 
+   * @return true if the CountryCode exists, false otherwise.
+   */
+  public static boolean hasCountryCodeAlpha3(final String countryCode) {
+    
+    return CountryCodes.countrysAlpha3.contains(countryCode);
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/DateUtil.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/DateUtil.java
new file mode 100644
index 000000000..9c0bd6775
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/DateUtil.java
@@ -0,0 +1,169 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.sql.Timestamp;
+import java.util.GregorianCalendar;
+
+import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
+import org.joda.time.Years;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import eu.stork.peps.auth.commons.exceptions.SecurityPEPSException;
+
+/**
+ * This class holds static helper methods for Date Operations.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.4 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class DateUtil {
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(DateUtil.class.getName());
+  
+  /**
+   * yyyy Date format size.
+   */
+  private static final int YEAR_DATE_SIZE = 4;
+  
+  /**
+   * yyyyMM Date format size.
+   */
+  private static final int MONTH_DATE_SIZE = 6;
+  
+  /**
+   * Private constructor. Prevents the class from being instantiated.
+   */
+  private DateUtil() {
+    // empty constructor
+  }
+  
+  /**
+   * Fulfils dateValue with a valid date. The following roles are applied: a) If
+   * the dateValue only contains the year then fulfils with last year's day.
+   * e.g. this method returns 19951231 to the 1995 dateValue. b) If the
+   * dateValue contains the year and the month then fulfils with last month's
+   * day. e.g. this method returns 19950630 to the 199505 dateValue.
+   * 
+   * @param dateValue The date to be fulfilled.
+   * 
+   * @return The dateValue fulfilled.
+   */
+  private static String fulfilDate(final String dateValue) {
+    
+    final StringBuffer strBuf = new StringBuffer();
+    strBuf.append(dateValue);
+    // if the IdP just provides the year then we must fullfil the date.
+    if (dateValue.length() == YEAR_DATE_SIZE) {
+      strBuf.append(PEPSValues.LAST_MONTH.toString());
+    }
+    // if the IdP provides the year and the month then we must fullfil the
+    // date.
+    if (dateValue.length() == MONTH_DATE_SIZE
+      || strBuf.length() == MONTH_DATE_SIZE) {
+      // IdP doesn't provide the day, so we will use DateTime to
+      // calculate it.
+      final String noDayCons = PEPSValues.NO_DAY_DATE_FORMAT.toString();
+      final DateTimeFormatter fmt = DateTimeFormat.forPattern(noDayCons);
+      final DateTime dateTime = fmt.parseDateTime(strBuf.toString());
+      // Append the last month's day.
+      strBuf.append(dateTime.dayOfMonth().withMaximumValue().getDayOfMonth());
+    }
+    
+    return strBuf.toString();
+  }
+  
+  /**
+   * Validates the dateValue format: a) if has a valid size; b) if has a numeric
+   * value; Note: dateValue must have the format yyyyMMdd.
+   * 
+   * @param dateValueTmp The date to be validated.
+   * @param pattern The accepted date format.
+   * 
+   * @return true if the date has a valid format.
+   */
+  public static boolean isValidFormatDate(final String dateValueTmp,
+    final String pattern) {
+    
+    boolean retVal = true;
+    try {
+      final String dateValue = DateUtil.fulfilDate(dateValueTmp);
+      
+      final DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
+      fmt.parseDateTime(dateValue);
+    } catch (final Exception e) {
+      // We catch Exception because we only have to return false
+      // value!
+      retVal = false;
+    }
+    return retVal;
+  }
+  
+  /**
+   * Calculates the age for a given date string.
+   * 
+   * @param dateVal The date to be validated.
+   * @param now The current date.
+   * @param pattern The date pattern.
+   * 
+   * @return The age value.
+   */
+  public static int calculateAge(final String dateVal, final DateTime now,
+    final String pattern) {
+    
+    if (DateUtil.isValidFormatDate(dateVal, pattern)) {
+      try {
+        final String dateValueTemp = DateUtil.fulfilDate(dateVal);
+        final DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
+        final DateTime dateTime = fmt.parseDateTime(dateValueTemp);
+        // Calculating age
+        final Years age = Years.yearsBetween(dateTime, now);
+        
+        return age.getYears();
+      } catch (final IllegalArgumentException e) {
+        LOG.warn("Invalid date format (" + pattern
+          + ") or an invalid dateValue.");
+        throw new SecurityPEPSException(
+          PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorCode()),
+          PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorMessage()),
+          e);
+      }
+    } else {
+      LOG.warn("Couldn't calculate Age, invalid date!");
+      throw new SecurityPEPSException(
+        PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorCode()),
+        PEPSUtil.getConfig(PEPSErrors.INVALID_ATTRIBUTE_VALUE.errorMessage()));
+    }
+    
+  }
+  
+  /**
+   * Generates the current timestamp.
+   * 
+   * @return timestamp The current timestamp
+   */
+  public static Timestamp currentTimeStamp() {
+    final GregorianCalendar cal = new GregorianCalendar();
+    final long millis = cal.getTimeInMillis();
+    return new Timestamp(millis);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeListProcessor.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeListProcessor.java
new file mode 100644
index 000000000..b13c70f04
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeListProcessor.java
@@ -0,0 +1,148 @@
+package eu.stork.peps.auth.commons;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Interface for {@link AttributeListProcessor}.
+ * 
+ * @author ricardo.ferreira@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ * 
+ * @see IPersonalAttributeList
+ */
+public interface IAttributeListProcessor {
+  
+  /**
+   * Checks if attribute list only contains allowed attributes.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the allowed attributes
+   * 
+   * @return true is all the attributes are allowed.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasAllowedAttributes(final IPersonalAttributeList attrList, final List<String> attributes);
+  
+  /**
+   * Lookup for business attribute.
+   * 
+   * @param attrList the requested attribute list
+   * @param normalAttributes the normal attributes
+   * 
+   * @return true is at least one business attribute was requested.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasBusinessAttributes(final IPersonalAttributeList attrList, final List<String> normalAttributes);
+  
+  /**
+   * Lookup for business attribute in normal attribute list (loaded by
+   * implementation).
+   * 
+   * @param attrList the requested attribute list
+   * 
+   * @return true is at least one business attribute was requested.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasBusinessAttributes(final IPersonalAttributeList attrList);
+  
+  /**
+   * Adds eIdentifier, name, surname, and DateOfBirth attributes to get business
+   * attributes from some AP.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the list of attributes to add (eIdentifier, name,
+   *          surname, and DateOfBirth).
+   * 
+   * @return the requested attribute list and the new attributes added
+   *         (eIdentifier, name, surname, and DateOfBirth).
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList addAPMandatoryAttributes(final IPersonalAttributeList attrList, final List<String> attributes);
+  
+  /**
+   * Adds eIdentifier, name, surname, and DateOfBirth attributes, loaded by
+   * implementation, to get business attributes from some AP.
+   * 
+   * @param attrList the requested attribute list
+   * 
+   * @return the requested attribute list and the new attributes added
+   *         (eIdentifier, name, surname, and DateOfBirth).
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList addAPMandatoryAttributes(final IPersonalAttributeList attrList);
+  
+  /**
+   * Removes from attribute list the given list of attributes.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the list of attributes to remove.
+   * 
+   * @return the requested attribute list and the attributes removed.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList removeAPMandatoryAttributes(final IPersonalAttributeList attrList, final List<String> attributes);
+  
+  /**
+   * Removes from attribute list the given list of attributes and change
+   * attributes status if attribute was optional in the request.
+   * 
+   * @param attrList the requested attribute list
+   * @param attributes the map of attributes (attribute name, mandatory/optional) to remove.
+   * 
+   * @return the requested attribute list and the attributes removed
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList removeAPMandatoryAttributes(IPersonalAttributeList attrList, Map<String, Boolean> attributes);
+  
+  /**
+   * Checks if mandate attribute exist in the requested Attribute List. Power
+   * attribute name to lookup is loaded by implementation.
+   * 
+   * @param attrList the requested attribute list.
+   * 
+   * @return true if mandate attribute exists or false otherwise.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasPowerAttribute(final IPersonalAttributeList attrList);
+  
+  /**
+   * Checks if attribute name was requested and has value.
+   * 
+   * @param attrList the requested attribute list.
+   * @param attrName the attribute name to lookup for .
+   * 
+   * @return true if attribute was requested and has value or false otherwise.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean hasAttributeValue(final IPersonalAttributeList attrList, final String attrName);
+  
+  /**
+   * Checks if attribute has value.
+   * 
+   * @param attr the attribute to check.
+   * 
+   * @return true if has value;
+   * 
+   * @see PersonalAttribute
+   */
+  boolean hasAttributeValue(final PersonalAttribute attr);
+  
+  /**
+   * Gets a map (attribute name, attribute isRequired) of attributes added to attribute list.
+   * 
+   * @return the Map of attributes added and if is required to attribute list.
+   */
+  Map<String, Boolean> getNormalAttributesAdded();
+
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeProvidersMap.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeProvidersMap.java
new file mode 100644
index 000000000..733399ca3
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IAttributeProvidersMap.java
@@ -0,0 +1,82 @@
+package eu.stork.peps.auth.commons;
+
+import java.util.Iterator;
+
+/**
+ * Interface for Attributes Providers map.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.00 $, $Date: 2013-09-20 $
+ */
+public interface IAttributeProvidersMap {
+  
+  /**
+   * Returns the object associated the the given key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return The object associated the the given key.
+   */
+  IPersonalAttributeList get(AttributeSource key);
+  
+  /**
+   * Associates a key to a value, and inserts them in the session object.
+   * 
+   * @param key with which the specified value is to be associated.
+   * @param value to be associated with the specified key.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  Object put(AttributeSource key, IPersonalAttributeList value);
+  
+  /**
+   * Removes the mapping for this key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  IPersonalAttributeList remove(AttributeSource key);
+  
+  /**
+   * Returns the number of key-value mappings in this map.
+   * 
+   * @return the number of key-value mappings in this map.
+   */
+  int size();
+  
+  /**
+   * Returns true if this map contains a mapping for the specified key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return true if this map contains a mapping for the specified key.
+   */
+  boolean containsKey(AttributeSource key);
+  
+  /**
+   * Removes all mappings from this map.
+   */
+  void clear();
+  
+  /**
+   * Returns true if this map contains no key-value mappings.
+   * 
+   * @return true if this map contains no key-value mappings.
+   */
+  boolean isEmpty();
+
+  /**
+   * Returns an Iterator of the keys contained in this map. The implementation must
+   * take care in order for the Iterator to have predictable order of the returned
+   * keys.
+   *
+   * @return an iterator of the keys contained in this map
+   */
+  Iterator<AttributeSource> keyIterator();
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IPersonalAttributeList.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IPersonalAttributeList.java
new file mode 100644
index 000000000..b24c915c0
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IPersonalAttributeList.java
@@ -0,0 +1,194 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Interface for {@link PersonalAttributeList}.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.16 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see PersonalAttribute
+ */
+@SuppressWarnings("PMD.CloneMethodMustImplementCloneable")
+public interface IPersonalAttributeList extends Iterable<PersonalAttribute>,
+  Cloneable {
+  
+  /**
+   * Associates the specified value with the specified key in this Personal
+   * Attribute List.
+   * 
+   * @param key with which the specified value is to be associated.
+   * @param value to be associated with the specified key.
+   * 
+   * @return the previous value associated with key, or null if there was no
+   *         mapping for key.
+   * 
+   * @see PersonalAttribute
+   */
+  PersonalAttribute put(String key, PersonalAttribute value);
+  
+  /**
+   * Returns the value to which the specified key is mapped, or null if this map
+   * contains no mapping for the key.
+   * 
+   * @param key whose associated value is to be returned.
+   * 
+   * @return The value to which the specified key is mapped, or null if this map
+   *         contains no mapping for the key.
+   * 
+   * @see PersonalAttribute
+   */
+  PersonalAttribute get(Object key);
+  
+  /**
+   * Adds to the PersonalAttributeList the given PersonalAttribute. It sets the
+   * attribute name as the key to the attribute value.
+   * 
+   * @param value PersonalAttribute to add to the PersonalAttributeList
+   */
+  void add(PersonalAttribute value);
+  
+  /**
+   * Get the size of the Personal Attribute List.
+   * 
+   * @return size of the Personal Attribute List.
+   */
+  int size();
+  
+  /**
+   * Checks if the Personal Attribute List contains the given key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return true if the Personal Attribute List contains the given key, false
+   *         otherwise.
+   */
+  boolean containsKey(Object key);
+  
+  /**
+   * Getter for the iterator of the Personal Attribute List values.
+   * 
+   * @return The iterator for the Personal Attribute List values.
+   * 
+   * @see PersonalAttribute
+   */
+  Iterator<PersonalAttribute> iterator();
+  
+  /**
+   * Creates a Personal Attribute List from a String representing an Attribute
+   * List.
+   * 
+   * @param attrList String Object representing the attribute list.
+   */
+  void populate(String attrList);
+  
+  /**
+   * Removes the mapping for this key from this map if present.
+   * 
+   * @param key key whose mapping is to be removed from the map.
+   * @return previous value associated with specified key, or <tt>null</tt> if
+   *         there was no mapping for key. A <tt>null</tt> return can also
+   *         indicate that the map previously associated <tt>null</tt> with the
+   *         specified key.
+   */
+  PersonalAttribute remove(Object key);
+  
+  /**
+   * Returns a collection view of the values contained in this map. The
+   * collection is backed by the map, so changes to the map are reflected in the
+   * collection, and vice-versa. The collection supports element removal, which
+   * removes the corresponding mapping from this map, via the
+   * <tt>Iterator.remove</tt>, <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+   * <tt>retainAll</tt>, and <tt>clear</tt> operations. It does not support the
+   * <tt>add</tt> or <tt>addAll</tt> operations.
+   * 
+   * @return a collection view of the values contained in this map.
+   */
+  Collection<PersonalAttribute> values();
+  
+  /**
+   * Returns a {@link Set} view of the keys contained in this map.
+   * The set is backed by the map, so changes to the map are
+   * reflected in the set, and vice-versa.  If the map is modified
+   * while an iteration over the set is in progress (except through
+   * the iterator's own <tt>remove</tt> operation), the results of
+   * the iteration are undefined.  The set supports element removal,
+   * which removes the corresponding mapping from the map, via the
+   * <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
+   * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
+   * operations.  It does not support the <tt>add</tt> or <tt>addAll</tt>
+   * operations.
+   *
+   * @return a set view of the keys contained in this map
+   */
+  Set<String> keySet();
+  
+  
+  /**
+   * Returns a IPersonalAttributeList of the complex attributes.
+   * 
+   * @return an IPersonalAttributeList of the complex attributes.
+   */
+  IPersonalAttributeList getComplexAttributes();
+  
+  /**
+   * Returns a IPersonalAttributeList of the simple value attributes.
+   * 
+   * @return an IPersonalAttributeList of the simple value attributes.
+   */
+  IPersonalAttributeList getSimpleValueAttributes();
+  
+  /**
+   * Returns a IPersonalAttributeList of the mandatory attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map.
+   */
+  IPersonalAttributeList getMandatoryAttributes();
+  
+  /**
+   * Returns a IPersonalAttributeList of the optional attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the optional attributes contained in this map.
+   */
+  IPersonalAttributeList getOptionalAttributes();
+  
+  /**
+   * Returns <tt>true</tt> if this map contains no key-value mappings.
+   * 
+   * @return <tt>true</tt> if this map contains no key-value mappings.
+   */
+  boolean isEmpty();
+  
+  /**
+   * Returns <tt>true</tt> if this map contains at least one element that doesn't have value.
+   * 
+   * @return <tt>true</tt> if this map contains at least one element that doesn't have value.
+   */
+  boolean hasMissingValues();
+
+  /**
+   * Returns a copy of this <tt>IPersonalAttributeList</tt> instance.
+   *
+   * @return The copy of this IPersonalAttributeList.
+   */
+  Object clone() throws CloneNotSupportedException;
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkLogger.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkLogger.java
new file mode 100644
index 000000000..33eb618f0
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkLogger.java
@@ -0,0 +1,239 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * Interface for stork logging.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.10 $, $Date: 2011-02-17 22:44:34 $
+ */
+public interface IStorkLogger {
+  
+  /**
+   * Getter for SpApplication.
+   * 
+   * @return The SpApplication value.
+   */
+  String getSpApplication();
+  
+  /**
+   * Setter for SpApplication.
+   * 
+   * @param spApplication The SP Application.
+   */
+  void setSpApplication(String spApplication);
+  
+  /**
+   * Getter for ProviderName.
+   * 
+   * @return The ProviderName value.
+   */
+  String getProviderName();
+  
+  /**
+   * Setter for ProviderName.
+   * 
+   * @param providerName The provider name.
+   */
+  void setProviderName(String providerName);
+  
+  /**
+   * 
+   * Getter for Origin.
+   * 
+   * @return The Origin value.
+   * 
+   */
+  String getOrigin();
+  
+  /**
+   * Setter for Origin.
+   * 
+   * @param origin The origin.
+   */
+  void setOrigin(String origin);
+  
+  /**
+   * 
+   * Getter for QAA Level.
+   * 
+   * @return The QAA Level value.
+   * 
+   */
+  int getQaaLevel();
+  
+  /**
+   * Setter for QAA Level.
+   * 
+   * @param qaaLevel The qaa level.
+   */
+  void setQaaLevel(int qaaLevel);
+  
+  /**
+   * 
+   * Getter for timestamp.
+   * 
+   * @return The timestamp value.
+   * 
+   */
+  String getTimestamp();
+  
+  /**
+   * Setter for timestamp.
+   * 
+   * @param timestamp The request's timestamp.
+   */
+  void setTimestamp(String timestamp);
+  
+  /**
+   * Getter for InResponseTo.
+   * 
+   * @return The InResponseTo value.
+   */
+  String getInResponseTo();
+  
+  /**
+   * Setter for InResponseTo.
+   * 
+   * @param inResponseTo The Saml's response id.
+   */
+  void setInResponseTo(String inResponseTo);
+  
+  /**
+   * Getter for InResponseToSPReq.
+   * 
+   * @return The InResponseToSPReq value.
+   */
+  String getInResponseToSPReq();
+  
+  /**
+   * Setter for InResponseToSPRequ.
+   * 
+   * @param inResponseToSPReq The Saml's response id.
+   */
+  void setInResponseToSPReq(String inResponseToSPReq);
+  
+  /**
+   * Getter for opType.
+   * 
+   * @return The opType value.
+   */
+  String getOpType();
+  
+  /**
+   * Setter for opType.
+   * 
+   * @param opType The operation type.
+   */
+  void setOpType(String opType);
+  
+  /**
+   * Getter for destination.
+   * 
+   * @return The destination value.
+   */
+  String getDestination();
+  
+  /**
+   * Setter for destinationIp.
+   * 
+   * @param destination The remote IP.
+   */
+  void setDestination(String destination);
+  
+  /**
+   * Getter for message or assertion consumer.
+   * 
+   * @return The message or assertion consumer.
+   */
+  String getMessage();
+  
+  /**
+   * Setter for message or assertion consumer.
+   * 
+   * @param message or assertion consumer.
+   */
+  void setMessage(String message);
+  
+  /**
+   * Getter for country.
+   * 
+   * @return The country value.
+   */
+  String getCountry();
+  
+  /**
+   * Setter for country.
+   * 
+   * @param country The country.
+   */
+  void setCountry(String country);
+  
+  /**
+   * Getter for samlHash.
+   * 
+   * @return The samlHash value.
+   */
+  byte[] getSamlHash();
+  
+  /**
+   * Setter for samlHash.
+   * 
+   * @param samlHash the encrypted SAML token
+   */
+  void setSamlHash(byte[] samlHash);
+  
+  /**
+   * Getter for msgId.
+   * 
+   * @return the msgId
+   */
+  String getMsgId();
+  
+  /**
+   * Setter for msgId.
+   * 
+   * @param msgId the ID of the originator of this message
+   */
+  void setMsgId(String msgId);
+  
+  /**
+   * Getter for sPMsgId.
+   * 
+   * @return the sPMsgId
+   */
+  String getSPMsgId();
+  
+  /**
+   * Setter for sPMsgId.
+   * 
+   * @param sPMsgId the ID of the originator of this message
+   */
+  void setSPMsgId(String sPMsgId);
+  
+  /**
+   * The format of the returned String must be the following:
+   * "requestCounter#ddMMMyyyykk:mm:ss#opType#originIp#originName
+   * #destinationIp#destinationName#samlHash#[originatorName#msgId#]"
+   * 
+   * The values enclosed in '[]' only apply when logging responses.
+   * 
+   * @return {@inheritDoc}
+   */
+  @Override
+  String toString();
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkSession.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkSession.java
new file mode 100644
index 000000000..f38b41838
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/IStorkSession.java
@@ -0,0 +1,85 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * Interface for stork session.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.9 $, $Date: 2010-11-17 05:15:28 $
+ */
+public interface IStorkSession {
+  
+  /**
+   * Returns the object associated the the given key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return The object associated the the given key.
+   */
+  Object get(Object key);
+  
+  /**
+   * Associates a key to a value, and inserts them in the session object.
+   * 
+   * @param key with which the specified value is to be associated.
+   * @param value to be associated with the specified key.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  Object put(String key, Object value);
+  
+  /**
+   * Removes the mapping for this key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return previous value associated with specified key, or null if there was
+   *         no mapping for key. A null return can also indicate that the map
+   *         previously associated null with the specified key.
+   */
+  Object remove(Object key);
+  
+  /**
+   * Returns the number of key-value mappings in this map.
+   * 
+   * @return the number of key-value mappings in this map.
+   */
+  int size();
+  
+  /**
+   * Returns true if this map contains a mapping for the specified key.
+   * 
+   * @param key with which the specified value is to be associated.
+   * 
+   * @return true if this map contains a mapping for the specified key.
+   */
+  boolean containsKey(Object key);
+  
+  /**
+   * Removes all mappings from this map.
+   */
+  void clear();
+  
+  /**
+   * Returns true if this map contains no key-value mappings.
+   * 
+   * @return true if this map contains no key-value mappings.
+   */
+  boolean isEmpty();
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Linker.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Linker.java
new file mode 100644
index 000000000..6e7c891da
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/Linker.java
@@ -0,0 +1,316 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information of Attribute Providers, the Attribute
+ * List to be requested, the Assertions returned by the Attribute Providers and the values
+ * that each Attribute has. This information along with the current status of the Linker (the
+ * attribute providers that were queried and the remaining providers) is used by the PEPS
+ * actions in order to complete the Attribute gathering.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ *
+ * @version $Revision: 1.50 $, $Date: 2013-11-28 $
+ */
+public final class Linker implements Serializable {
+	/**
+	 * Unique identifier.
+	 */
+	private static final long serialVersionUID = -3268006381745987237L;
+
+	/**
+	 * Logger object.
+	 */
+	private static final Logger LOG = Logger.getLogger(Linker.class.getName());
+
+	/**
+	 * Attributes Providers map.
+	 */
+	private IAttributeProvidersMap attributeProvidersMap;
+
+	/**
+	 * Assertion map.
+	 */
+	private LinkedHashMap<AttributeSource, STORKAttrQueryResponse> assertions;
+
+	/**
+	 * The current index of local (domestic) Attribute Providers.
+	 */
+	private int localIndex;
+
+	/**
+	 * The current index of remote (foreign) Attribute Providers - countries.
+	 */
+	private int remoteIndex;
+
+	/**
+	 * Constructs an empty Linker object.
+	 */
+	public Linker() {
+		localIndex = 0;
+		remoteIndex = 0;
+		
+		assertions = new LinkedHashMap<AttributeSource, STORKAttrQueryResponse>();
+	}
+
+	/**
+	 * Based on the internal state of the Linker it returns the next local Attribute Source
+	 *
+	 * @return The next Attribute Source or null if not found
+	 *
+	 * @see AttributeSource
+	 */
+	public AttributeSource getNextLocalProvider() {
+		Iterator<AttributeSource> iterator;
+		AttributeSource source, found;
+		int curIndex = 0;
+
+		found = null;
+
+		if ( attributeProvidersMap!=null && !attributeProvidersMap.isEmpty() ) {
+			iterator = attributeProvidersMap.keyIterator();
+			while (iterator.hasNext()) {
+				source = iterator.next();
+
+				if ( source.getSourceType()==AttributeSource.SOURCE_LOCAL_APROVIDER ) {
+					if ( curIndex>=localIndex ) {
+						found = source;
+
+						break;
+					}
+
+					curIndex++;
+				}
+			}
+		}
+
+		return found;
+	}
+
+	/**
+	 * Based on the internal state of the Linker it returns the next remote Attribute Source
+	 *
+	 * @return The next Attribute Source or null if not found
+	 *
+	 * @see AttributeSource
+	 */
+	public AttributeSource getNextRemoteProvider() {
+		Iterator<AttributeSource> iterator;
+		AttributeSource source, found;
+		int curIndex = 0;
+
+		found = null;
+
+		if ( attributeProvidersMap !=null && !attributeProvidersMap.isEmpty() ) {
+			iterator = attributeProvidersMap.keyIterator();
+			while (iterator.hasNext()) {
+				source = iterator.next();
+
+				if ( source.getSourceType()==AttributeSource.SOURCE_REMOTE_COUNTRY ) {
+					if ( curIndex>=remoteIndex ) {
+						found = source;
+
+						break;
+					}
+
+					curIndex++;
+				}
+			}
+		}
+
+		return found;
+	}
+
+	/**
+	 * It updates the Linker with the values returned by the Attribute Source. It also advances
+	 * to the next index in order to mark this attribute source as completed.
+	 * 
+	 * @param source The Attribute Source that was queried for attribute values.
+	 * @param attrResponse The attrResponse returned by the Attribute Source that contains the attribute values.
+	 *
+	 * @see AttributeSource, STORKAttrQueryResponse
+	 */
+	public void setProviderReponse(AttributeSource source, STORKAttrQueryResponse attrResponse) {
+		if ( source.getSourceType()==AttributeSource.SOURCE_REMOTE_COUNTRY )
+			remoteIndex++;
+		else
+			localIndex++;
+
+		//Assertion storage
+		this.assertions.put(source, attrResponse);
+
+		this.attributeProvidersMap.put(source, attrResponse.getPersonalAttributeList());
+		//this.attributeProvidersMap.put(source, attrResponse.getTotalPersonalAttributeList());
+	}
+
+	/**
+	 * Reset the internal state of the local Attribute Source in order to start over.
+	 */
+	public void resetLocalIndex() {
+		localIndex = 0;
+	}
+
+	/**
+	 * Reset the internal state of the remote Attribute Source in order to start over.
+	 */
+	public void resetRemoteIndex() {
+		remoteIndex = 0;
+	}
+
+	/**
+	 * Setter for attributeProvidersMap.
+	 * 
+	 * @param attributeProvidersMap The attributeProvidersMap to set.
+	 */
+	public void setAttributeProvidersMap(IAttributeProvidersMap attributeProvidersMap) {
+		this.attributeProvidersMap = attributeProvidersMap;
+	}
+
+	/**
+	 * Getter for attributeProvidersMap.
+	 * 
+	 * @return attributeProvidersMap
+	 */
+	public IAttributeProvidersMap getAttributeProvidersMap() {
+		return attributeProvidersMap;
+	}
+
+	/**
+	 * Returns the Personal Attribute list of the provided Attribute Source.
+	 *
+	 * @param source The attributeSource in reference
+	 * 
+	 * @return The IPersonalAttributeList assosiated with this source or null if empty
+	 *
+	 * @see IPersonalAttributeList
+	 */
+	public IPersonalAttributeList getProviderAttributes(AttributeSource source) {
+		if ( attributeProvidersMap.containsKey(source) )
+			return attributeProvidersMap.get(source);
+		else
+			return null;
+	}
+
+	/**
+	 * Returns the merged Personal Attribute list from all the Attribute Sources.
+	 *
+	 * @return The IPersonalAttributeList merged Personal Attribute list or null if empty
+	 *
+	 * @see IPersonalAttributeList
+	 */
+	public IPersonalAttributeList getAllAttributes() {
+		Iterator<AttributeSource> iterator;
+		AttributeSource source;
+		IPersonalAttributeList list, merged;
+
+		merged = null;
+
+		if ( attributeProvidersMap !=null && !attributeProvidersMap.isEmpty() ) {
+			iterator = attributeProvidersMap.keyIterator();
+
+			merged = new PersonalAttributeList();
+			while (iterator.hasNext()) {
+				source = iterator.next();
+				list = this.getProviderAttributes(source);
+
+				for (final PersonalAttribute pa : list) {
+					merged.add(pa);
+				}
+			}
+		}
+
+		return merged;
+	}
+
+	/**
+	 * Returns a List with all the assertions gathered by the AAS-PEPS module
+	 * returned both by local APs or remote A-PEPS.
+	 * 
+	 * @return The assertions returned from the APs and A-PEPS
+	 */
+	public List<STORKAttrQueryResponse> getAttrQueryResponseList() {
+		List<STORKAttrQueryResponse> originalAssertions;
+		
+		originalAssertions = new ArrayList<STORKAttrQueryResponse>();
+
+		//Gather all assertions
+	    for (STORKAttrQueryResponse element : this.assertions.values()) {
+			originalAssertions.add(element);
+	    }
+
+		return originalAssertions;
+	}
+
+	/**
+	 * Checks the internal state of the Linker and if all Attribute Sources where visited
+	 * returns true, otherwise it returns false. So if you go directly from AtPLinkerAction
+	 * to MoreAttributesAction the call will have, since the method setProviderReponse
+	 * was not executed from every Attribute Source.
+	 * 
+	 * @return true if everything is OK, false otherwise
+	 */
+	public boolean isComplete() {
+		boolean outcome = false;
+
+		LOG.debug("Check if linkder is complete: R[" + remoteIndex + "], L[" + localIndex + "], S[" + attributeProvidersMap.size() + "]");
+		if ( attributeProvidersMap !=null && !attributeProvidersMap.isEmpty() ) {
+			if ( (remoteIndex + localIndex)==attributeProvidersMap.size() )
+				outcome = true;
+		}
+		else {
+			outcome = true;
+		}
+
+		return outcome;
+	}
+
+	/**
+	 * Merge the two Linker objects. 
+	 * 
+	 * @param previous The other Linker object to merge with this one.
+	 */
+	public void mergeWith(Linker previous) {
+		//BEFORE
+		if ( LOG.isDebugEnabled() ) {
+			LOG.debug("The attributeProvidersMap from the current object.");
+			((AttributeProvidersMap)this.attributeProvidersMap).trace();
+			LOG.debug("The attributeProvidersMap from the provided object.");
+			((AttributeProvidersMap)previous.getAttributeProvidersMap()).trace();
+		}
+
+		IAttributeProvidersMap map = previous.getAttributeProvidersMap();
+		Iterator<AttributeSource> items = map.keyIterator();
+		while( items.hasNext() ) {
+			AttributeSource item = items.next();
+			IPersonalAttributeList pal = map.get(item);
+
+			if ( this.attributeProvidersMap.containsKey(item) ) {
+				IPersonalAttributeList new_pal = this.attributeProvidersMap.get(item);
+
+				for(PersonalAttribute pa : pal)
+					new_pal.add(pa);
+			}
+			else {
+				if ( item.getSourceType()==AttributeSource.SOURCE_REMOTE_COUNTRY )
+					remoteIndex++;
+				else
+					localIndex++;
+
+				this.attributeProvidersMap.put(item, pal);
+			}
+		}
+
+		//AFTER
+		if ( LOG.isDebugEnabled() ) {
+			LOG.debug("The attributeProvidersMap after the merge.");
+			((AttributeProvidersMap)this.attributeProvidersMap).trace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSErrors.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSErrors.java
new file mode 100644
index 000000000..5da9ba494
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSErrors.java
@@ -0,0 +1,392 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the STORK PEPS, Commons and Specific errors
+ * constant identifiers.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.10 $, $Date: 2011-02-17 22:44:34 $
+ */
+public enum PEPSErrors {
+  
+  /**
+   * Represents the 'authenticationFailed' constant error identifier.
+   */
+  AUTHENTICATION_FAILED_ERROR("authenticationFailed"),
+  /**
+   * Represents the 'spCountrySelector.errorCreatingSAML' constant error
+   * identifier.
+   */
+  SP_COUNTRY_SELECTOR_ERROR_CREATE_SAML("spCountrySelector.errorCreatingSAML"),
+  /**
+   * Represents the 'spCountrySelector.destNull' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_DESTNULL("spCountrySelector.destNull"),
+  /**
+   * Represents the 'spCountrySelector.invalidAttr' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_ATTR("spCountrySelector.invalidAttr"),
+  /**
+   * Represents the 'spCountrySelector.invalidProviderName' constant error
+   * identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_PROVIDER_NAME(
+    "spCountrySelector.invalidProviderName"),
+  /**
+   * Represents the 'spCountrySelector.invalidQaaSPid' constant error
+   * identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_QAASPID("spCountrySelector.invalidQaaSPid"),
+  /**
+   * Represents the 'spCountrySelector.invalidSpId' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_SPID("spCountrySelector.invalidSpId"),
+  /**
+   * Represents the 'spCountrySelector.invalidSPQAA' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_SPQAA("spCountrySelector.invalidSPQAA"),
+  /**
+   * Represents the 'spCountrySelector.invalidSpURL' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_INVALID_SPURL("spCountrySelector.invalidSpURL"),
+  /**
+   * Represents the 'spCountrySelector.spNotAllowed' constant error identifier.
+   */
+  SP_COUNTRY_SELECTOR_SPNOTALLOWED("spCountrySelector.spNotAllowed"),
+  
+  /**
+   * Represents the 'sProviderAction.errorCreatingSAML' constant error
+   * identifier.
+   */
+  SPROVIDER_SELECTOR_ERROR_CREATE_SAML("sProviderAction.errorCreatingSAML"),
+  /**
+   * Represents the 'sProviderAction.attr' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_ATTR("sProviderAction.invalidAttr"),
+  /**
+   * Represents the 'sProviderAction.country' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_COUNTRY("sProviderAction.invalidCountry"),
+  /**
+   * Represents the 'sProviderAction.relayState' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_RELAY_STATE("sProviderAction.invalidRelayState"),
+  /**
+   * Represents the 'sProviderAction.saml' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SAML("sProviderAction.invalidSaml"),
+  /**
+   * Represents the 'sProviderAction.spAlias' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPALIAS("sProviderAction.invalidSPAlias"),
+  /**
+   * Represents the 'sProviderAction.spDomain' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPDOMAIN("sProviderAction.invalidSPDomain"),
+  /**
+   * Represents the 'sProviderAction.spId' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPID("sProviderAction.invalidSPId"),
+  /**
+   * Represents the 'sProviderAction.spQAA' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPQAA("sProviderAction.invalidSPQAA"),
+  /**
+   * Represents the 'sProviderAction.spQAAId' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPQAAID("sProviderAction.invalidSPQAAId"),
+  /**
+   * Represents the 'sProviderAction.spRedirect' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SPREDIRECT("sProviderAction.invalidSPRedirect"),
+  /**
+   * Represents the 'sPPowerValidationAction.invalidSPPVAttrList' constant error identifier.
+   */
+  SPPOWERVALIDATION_SELECTOR_INVALID_SP_PV_ATTR_LIST("sPPowerValidationAction.invalidSPPVAttrList"),
+  
+  /**
+   * Represents the 'sProviderAction.invalidSPProviderName' constant error
+   * identifier.
+   */
+  SPROVIDER_SELECTOR_INVALID_SP_PROVIDERNAME(
+    "sProviderAction.invalidSPProviderName"),
+  /**
+   * Represents the 'sProviderAction.spNotAllowed' constant error identifier.
+   */
+  SPROVIDER_SELECTOR_SPNOTALLOWED("sProviderAction.spNotAllowed"),
+  
+
+  /**
+   * Represents the 'internalError' constant error identifier.
+   */
+  INTERNAL_ERROR("internalError"),
+  
+  /**
+   * Represents the 'colleagueRequest.attrNull' constant error identifier.
+   */
+  COLLEAGUE_REQ_ATTR_NULL("colleagueRequest.attrNull"),
+  /**
+   * Represents the 'colleagueRequest.errorCreatingSAML' constant error
+   * identifier.
+   */
+  COLLEAGUE_REQ_ERROR_CREATE_SAML("colleagueRequest.errorCreatingSAML"),
+  /**
+   * Represents the 'colleagueRequest.invalidCountryCode' constant error
+   * identifier.
+   */
+  COLLEAGUE_REQ_INVALID_COUNTRYCODE("colleagueRequest.invalidCountryCode"),
+  /**
+   * Represents the 'colleagueRequest.invalidDestUrl' constant error identifier.
+   */
+  COLLEAGUE_REQ_INVALID_DEST_URL("colleagueRequest.invalidDestUrl"),
+  /**
+   * Represents the 'colleagueRequest.invalidQaa' constant error identifier.
+   */
+  COLLEAGUE_REQ_INVALID_QAA("colleagueRequest.invalidQaa"),
+  /**
+   * Represents the 'colleagueRequest.invalidRedirect' constant error
+   * identifier.
+   */
+  COLLEAGUE_REQ_INVALID_REDIRECT("colleagueRequest.invalidRedirect"),
+  /**
+   * Represents the 'colleagueRequest.invalidSAML' constant error identifier.
+   */
+  COLLEAGUE_REQ_INVALID_SAML("colleagueRequest.invalidSAML"),
+  
+  /**
+   * Represents the 'colleaguePVRequest.invalidPVAttrList' constant error identifier.
+   */
+  COLLEAGUE_PV_REQ_INVALID_PV_ATTR_LIST("colleaguePVRequest.invalidPVAttrList"),
+  
+  
+  /**
+   * Represents the 'cpepsRedirectUrl' constant error identifier.
+   */
+  CPEPS_REDIRECT_URL("cpepsRedirectUrl"),
+  /**
+   * Represents the 'spepsRedirectUrl' constant error identifier.
+   */
+  SPEPS_REDIRECT_URL("spepsRedirectUrl"),
+  /**
+   * Represents the 'sProviderAction.invCountry' constant error identifier.
+   */
+  SP_ACTION_INV_COUNTRY("sProviderAction.invCountry"),
+  
+  /**
+   * Represents the 'providernameAlias.invalid' constant error identifier.
+   */
+  PROVIDER_ALIAS_INVALID("providernameAlias.invalid"),
+  
+  
+  /**
+   * Represents the 'cPeps.attrNull' constant error identifier.
+   */
+  CPEPS_ATTR_NULL("cPeps.attrNull"),
+  
+  /**
+   * Represents the 'colleagueResponse.invalidSAML' constant error identifier.
+   */
+  COLLEAGUE_RESP_INVALID_SAML("colleagueResponse.invalidSAML"),
+  
+  /**
+   * Represents the 'citizenNoConsent.mandatory' constant error identifier.
+   */
+  CITIZEN_NO_CONSENT_MANDATORY("citizenNoConsent.mandatory"),
+  /**
+   * Represents the 'citizenResponse.mandatory' constant error identifier.
+   */
+  CITIZEN_RESPONSE_MANDATORY("citizenResponse.mandatory"),
+  /**
+   * Represents the 'attVerification.mandatory' constant error identifier.
+   */
+  ATT_VERIFICATION_MANDATORY("attVerification.mandatory"),
+  /**
+   * Represents the 'attrValue.verification' constant error identifier.
+   */
+  ATTR_VALUE_VERIFICATION("attrValue.verification"),
+  
+  /**
+   * Represents the 'audienceRestrictionError' constant error identifier.
+   */
+  AUDIENCE_RESTRICTION("audienceRestrictionError"),
+  /**
+   * Represents the 'auRequestIdError' constant error identifier.
+   */
+  AU_REQUEST_ID("auRequestIdError"),
+  /**
+   * Represents the 'domain' constant error identifier.
+   */
+  DOMAIN("domain"),
+  /**
+   * Represents the 'hash.error' constant error identifier.
+   */
+  HASH_ERROR("hash.error"),
+  /**
+   * Represents the 'invalidAttributeList' constant error identifier.
+   */
+  INVALID_ATTRIBUTE_LIST("invalidAttributeList"),
+  /**
+   * Represents the 'invalidAttributeValue' constant error identifier.
+   */
+  INVALID_ATTRIBUTE_VALUE("invalidAttributeValue"),
+  /**
+   * Represents the 'qaaLevel' constant error identifier.
+   */
+  QAALEVEL("qaaLevel"),
+  /**
+   * Represents the 'requests' constant error identifier.
+   */
+  REQUESTS("requests"),
+  /**
+   * Represents the 'SPSAMLRequest' constant error identifier.
+   */
+  SP_SAML_REQUEST("SPSAMLRequest"),
+  /**
+   * Represents the 'spepsSAMLRequest' constant error identifier.
+   */
+  SPEPS_SAML_REQUEST("spepsSAMLRequest"),
+  /**
+   * Represents the 'IdPSAMLResponse' constant error identifier.
+   */
+  IDP_SAML_RESPONSE("IdPSAMLResponse"),
+  /**
+   * Represents the 'cpepsSAMLResponse' constant error identifier.
+   */
+  CPEPS_SAML_RESPONSE("cpepsSAMLResponse"),
+  /**
+   * Represents the 'cpepsSAMLResponse' constant error identifier.
+   */
+  SPEPS_SAML_RESPONSE("spepsSAMLResponse"),
+  /**
+   * Represents the 'session' constant error identifier.
+   */
+  SESSION("session"),
+  /**
+   * Represents the 'invalid.session' constant error identifier.
+   */
+  INVALID_SESSION("invalid.session"),
+  /**
+   * Represents the 'invalid.sessionId' constant error identifier.
+   */
+  INVALID_SESSION_ID("invalid.sessionId"),
+  /**
+   * Represents the 'missing.sessionId' constant error identifier.
+   */
+  MISSING_SESSION_ID("sessionError"),
+  /**
+   * Represents the 'missing.mandate' constant error identifier.
+   */
+  MISSING_MANDATE("missing.mandate"),
+  /**
+   * Represents the 'AtPSAMLResponse' constant error identifier.
+   */
+  ATP_SAML_RESPONSE("AtPSAMLResponse"),
+  
+  /**
+   * Represents the 'AtPSAMLResponse' constant error identifier.
+   */
+  ATP_RESPONSE_ERROR("atp.response.error"),
+  
+  /**
+   * Represents the 'apepsSAMLRequest' constant error identifier.
+   */
+  APEPS_SAML_REQUEST("apepsSAMLRequest"),
+  
+  /**
+   * Represents the 'apepsSAMLResponse' constant error identifier.
+   */
+  APEPS_SAML_RESPONSE("apepsSAMLResponse"),
+  
+  /**
+   * Represents the 'invalid.apepsRedirectUrl' constant error identifier.
+   */  
+  INVALID_APEPS_REDIRECT_URL("invalid.apepsRedirectUrl"),
+  
+  /**
+   * Represents the 'invalid.apepsCallbackUrl' constant error identifier.
+   */  
+  INVALID_APEPS_CALLBACK_URL("invalid.apepsCallbackUrl"),
+  
+  /**
+   * Represents the 'colleagueAttributeRequest.invalidSAML' constant error identifier.
+   */
+  COLLEAGUE_ATTR_REQ_INVALID_SAML("colleagueAttributeRequest.invalidSAML");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String error;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param nError The Constant error value.
+   */
+  PEPSErrors(final String nError) {
+    this.error = nError;
+  }
+  
+  /**
+   * Construct the errorCode Constant value.
+   * 
+   * @return The errorCode Constant.
+   */
+  public String errorCode() {
+    return error + ".code";
+  }
+  
+  /**
+   * Construct the errorCode Constant value with the given code text.
+   * 
+   * @param text the code text to append to the constant.
+   * 
+   * @return The errorCode Constant for the given code text.
+   */
+  public String errorCode(final String text) {
+    return error + "." + text + ".code";
+  }
+  
+  /**
+   * Construct the errorMessage constant value.
+   * 
+   * @return The errorMessage constant.
+   */
+  public String errorMessage() {
+    return error + ".message";
+  }
+  
+  /**
+   * Construct the errorMessage Constant value with the given message text.
+   * 
+   * @param text the message text to append to the constant.
+   * 
+   * @return The errorMessage Constant for the given text.
+   */
+  public String errorMessage(final String text) {
+    return error + "." + text + ".message";
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    return error;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSParameters.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSParameters.java
new file mode 100644
index 000000000..15c2ae552
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSParameters.java
@@ -0,0 +1,625 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the STORK PEPS, Commons and Specific Parameters.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2011-07-07 20:48:45 $
+ */
+public enum PEPSParameters {
+  
+  /**
+   * Represents the 'apId' parameter constant.
+   */
+  AP_ID("apId"),
+  /**
+   * Represents the 'apUrl' parameter constant.
+   */
+  AP_URL("apUrl"),
+  /**
+   * Represents the 'ap.number' parameter constant.
+   */
+  AP_NUMBER("ap.number"),
+  
+  /**
+   * Represents the 'assertionConsumerServiceURL' parameter constant.
+   */
+  ASSERTION_CONSUMER_S_URL("assertionConsumerServiceURL"),
+  
+  /**
+   * Represents the 'auth' parameter constant.
+   */
+  AUTHENTICATION("auth"),
+  
+  /**
+   * Represents the 'attr' parameter constant.
+   */
+  ATTRIBUTE("attr"),
+  /**
+   * Represents the 'attrName' parameter constant.
+   */
+  ATTRIBUTE_NAME("attrName"),
+  /**
+   * Represents the 'attrStatus' parameter constant.
+   */
+  ATTRIBUTE_STATUS("attrStatus"),
+  /**
+   * Represents the 'attrType' parameter constant.
+   */
+  ATTRIBUTE_TYPE("attrType"),
+  /**
+   * Represents the 'attrValue' parameter constant.
+   */
+  ATTRIBUTE_VALUE("attrValue"),
+  /**
+   * Represents the 'attrList' parameter constant.
+   */
+  ATTRIBUTE_LIST("attrList"),
+  /**
+   * Represents the 'apMandAttrList' parameter constant.
+   */
+  AP_MANDATORY_ATTRIBUTE_LIST("apMandAttrList"),
+  /**
+   * Represents the 'attrTuple' parameter constant.
+   */
+  ATTRIBUTE_TUPLE("attrTuple"),
+  /**
+   * Represents the 'attribute-missing' parameter constant.
+   */
+  ATTRIBUTE_MISSING("attribute-missing"),
+  /**
+   * Represents the 'attributesNotAllowed' parameter constant.
+   */
+  ATTRIBUTES_NOT_ALLOWED("attributesNotAllowed"),
+  /**
+   * Represents the 'authnRequest' parameter constant.
+   */
+  AUTH_REQUEST("authnRequest"),
+  
+  /**
+   * Represents the 'attrValue.number' parameter constant.
+   */
+  ATTR_VALUE_NUMBER("attrValue.number"),
+  
+  /**
+   * Represents the 'derivation.date.format' parameter constant.
+   */
+  DERIVATION_DATE_FORMAT("derivation.date.format"),
+  /**
+   * Represents the 'deriveAttr.number' parameter constant.
+   */
+  DERIVE_ATTRIBUTE_NUMBER("deriveAttr.number"),
+  
+  /**
+   * Represents the complex attributes parameter constant.
+   */
+  COMPLEX_ADDRESS_VALUE("canonicalResidenceAddress"),
+  COMPLEX_NEWATTRIBUTE_VALUE("newAttribute2"),
+  COMPLEX_HASDEGREE_VALUE("hasDegree"),
+  COMPLEX_MANDATECONTENT_VALUE("mandateContent"),
+  /**
+   * Represents the 'consent-type' parameter constant.
+   */
+  CONSENT_TYPE("consent-type"),
+  /**
+   * Represents the 'consent-value' parameter constant.
+   */
+  CONSENT_VALUE("consent-value"),
+  /**
+   * Represents the 'country' parameter constant.
+   */
+  COUNTRY("country"),
+  /**
+   * Represents the 'countryOrigin' parameter constant.
+   */
+  COUNTRY_ORIGIN("countryOrigin"),
+  
+  /**
+   * Represents the 'cpepsURL' parameter constant.
+   */
+  CPEPS_URL("cpepsURL"),
+  /**
+   * Represents the 'callback' parameter constant.
+   */
+  CPEPS_CALLBACK("callback"),
+  /**
+   * Represents the 'peps.specificidpredirect.url' parameter constant.
+   */
+  CPEPS_IDP_CALLBACK_VALUE("peps.specificidpredirect.url"),
+  /**
+   * Represents the 'peps.specificapredirect.url' parameter constant.
+   */
+  CPEPS_AP_CALLBACK_VALUE("peps.specificapredirect.url"),
+  
+  /**
+   * Represents the 'errorCode' parameter constant.
+   */
+  ERROR_CODE("errorCode"),
+  /**
+   * Represents the 'subCode' parameter constant.
+   */
+  ERROR_SUBCODE("subCode"),
+  /**
+   * Represents the 'errorMessage' parameter constant.
+   */
+  ERROR_MESSAGE("errorMessage"),
+  /**
+   * Represents the 'errorRedirectUrl' parameter constant.
+   */
+  ERROR_REDIRECT_URL("errorRedirectUrl"),
+  
+  /**
+   * errorRedirectUrl Represents the 'external-authentication' parameter
+   * constant.
+   */
+  EXTERNAL_AUTH("external-authentication"),
+  /**
+   * Represents the 'external-ap' parameter constant.
+   */
+  EXTERNAL_AP("external-ap"),
+  /**
+   * Represents the 'external-pv' parameter constant.
+   */
+  EXTERNAL_PV("external-pv"),
+  /**
+   * Represents the 'external-sig-module' parameter constant.
+   */
+  EXT_SIG_CREATOR_MOD("external-sig-module"),
+  
+  /**
+   * Represents the 'http-x-forwarded-for' parameter constant.
+   */
+  HTTP_X_FORWARDED_FOR("http-x-forwarded-for"),
+  
+  /**
+   * Represents the 'idp.url' parameter constant.
+   */
+  IDP_URL("idp.url"),
+  /**
+   * Represents the 'internal-authentication' parameter constant.
+   */
+  INTERNAL_AUTH("internal-authentication"),
+  /**
+   * Represents the 'internal-ap' parameter constant.
+   */
+  INTERNAL_AP("internal-ap"),
+  /**
+   * Represents the 'internal-pv' parameter constant.
+   */
+  INTERNAL_PV("internal-pv"),
+  
+  /**
+   * Represents the 'samlIssuer' parameter constant.
+   */
+  ISSUER("samlIssuer"),
+  /**
+   * Represents the 'samlIssuer.idp' parameter constant.
+   */
+  ISSUER_IDP("samlIssuer.idp"),
+  /**
+   * Represents the 'samlIssuer.atp' parameter constant.
+   */
+  ISSUER_ATP("samlIssuer.atp"),
+  
+  /**
+   * Represents the 'mandatory' parameter constant.
+   */
+  MANDATORY("mandatory"),
+  /**
+   * Represents the 'mandatoryAttributeMissing' parameter constant.
+   */
+  MANDATORY_ATTR_MISSING("mandatoryAttributeMissing"),
+  /**
+   * Represents the 'mandatoryConsentAttrMissing' parameter constant.
+   */
+  MANDATORY_CONSENT_MISSING("mandatoryConsentAttrMissing"),
+  /**
+   * Represents the 'missing-attrs' parameter constant.
+   */
+  MISSING_ATTRS("missing-attrs"),
+  /**
+   * Represents the 'no-more-attrs' parameter constant.
+   */
+  NO_MORE_ATTRS("no-more-attrs"),
+  
+  /**
+   * Represents the 'optional' parameter constant.
+   */
+  OPTIONAL("optional"),
+  
+  /**
+   * Represents the 'no-consent-type' parameter constant.
+   */
+  NO_CONSENT_TYPE("no-consent-type"),
+  /**
+   * Represents the 'no-consent-value' parameter constant.
+   */
+  NO_CONSENT_VALUE("no-consent-value"),
+  
+  /**
+   * Represents the 'provider.name' parameter constant.
+   */
+  PROVIDER_NAME_VALUE("providerName"),
+  /**
+   * Represents the 'cpeps.askconsent' parameter constant.
+   */
+  PEPS_ASK_CONSENT("cpeps.askconsent"),
+  /**
+   * Represents the 'cpeps.askconsentvalue' parameter constant.
+   */
+  PEPS_ASK_CONSENT_VALUE("cpeps.askconsentvalue"),
+  /**
+   * Represents the 'pepsAuth' parameter constant.
+   */
+  PEPS_AUTH_CONSENT("pepsAuth"),
+  /**
+   * Represents the 'validation.bypass' parameter constant.
+   */
+  PEPS_BYPASS("validation.bypass"),
+  /**
+   * Represents the 'cpeps.number' parameter constant.
+   */
+  PEPS_NUMBER("cpeps.number"),
+  /**
+   * Represents the 'cpeps.specificapredirect.url' parameter constant.
+   */
+  PEPS_SPECIFIC_URL("cpeps.specificapredirect.url"),
+  /**
+   * Represents the 'pv.url' parameter constant.
+   */
+  PV_URL("pv.url"),
+  
+  /**
+   * Represents the 'qaaLevel' parameter constant.
+   */
+  QAALEVEL("qaaLevel"),
+  
+  /**
+   * Represents the 'speps.redirectUrl' parameter constant.
+   */
+  SPEPS_REDIRECT_URL("speps.redirectUrl"),
+  
+  /**
+   * Represents the 'sp.redirectUrl' parameter constant.
+   */
+  SP_REDIRECT_URL("sp.redirectUrl"),
+  /**
+   * Represents the 'cpeps.redirectUrl' parameter constant.
+   */
+  CPEPS_REDIRECT_URL("cpeps.redirectUrl"),
+  /**
+   * Represents the 'RelayState' parameter constant.
+   */
+  RELAY_STATE("RelayState"),
+  /**
+   * Represents the 'remoteAddr' parameter constant.
+   */
+  REMOTE_ADDR("remoteAddr"),
+  /**
+   * Represents the 'remoteUser' parameter constant.
+   */
+  REMOTE_USER("remoteUser"),
+  
+  /**
+   * Represents the 'SAMLRequest' parameter constant.
+   */
+  SAML_REQUEST("SAMLRequest"),
+  /**
+   * Represents the 'SAMLResponse' parameter constant.
+   */
+  SAML_RESPONSE("SAMLResponse"),
+  /**
+   * Represents the 'SAMLFail' parameter constant.
+   */
+  SAML_TOKEN_FAIL("SAMLFail"),
+  /**
+   * Represents the 'TokenId' parameter constant.
+   */
+  SAML_TOKEN_ID("TokenId"),
+  /**
+   * Represents the 'inResponseTo' parameter constant.
+   */
+  SAML_IN_RESPONSE_TO("inResponseTo"),
+  /**
+   * Represents the 'inResponseTo.idp' parameter constant.
+   */
+  SAML_IN_RESPONSE_TO_IDP("inResponseTo.idp"),
+  /**
+   * Represents the 'inResponseTo.atp' parameter constant.
+   */
+  SAML_IN_RESPONSE_TO_ATP("inResponseTo.atp"),
+  /**
+   * Represents the 'SignatureResponse' parameter constant.
+   */
+  SIGNATURE_RESPONSE("SignatureResponse"),
+  
+  /**
+   * Represents the 'cPepsSession' parameter constant.
+   */
+  SESSION_ID_URL("cPepsSession"),
+  /**
+   * Represents the 'spId' parameter constant.
+   */
+  SP_ID("spId"),
+  /**
+   * Represents the 'spQaaLevel' parameter constant.
+   */
+  SP_QAALEVEL("spQaaLevel"),
+  /**
+   * Represents the 'spUrl' parameter constant.
+   */
+  SP_URL("spUrl"),
+  
+  /**
+   * Represents the 'allow.derivation.all' parameter constant.
+   */
+  SPECIFIC_ALLOW_DERIVATION_ALL("allow.derivation.all"),
+  /**
+   * Represents the ''allow.unknowns parameter constant.
+   */
+  SPECIFIC_ALLOW_UNKNOWNS("allow.unknowns"),
+  /**
+   * Represents the 'derivation.date.separator' parameter constant.
+   */
+  SPECIFIC_DERIVATION_DATE_SEP("derivation.date.separator"),
+  /**
+   * Represents the 'derivation.month.position' parameter constant.
+   */
+  SPECIFIC_DERIVATION_MONTH_POS("derivation.month.position"),
+  /**
+   * Represents the 'derivation.day.position' parameter constant.
+   */
+  SPECIFIC_DERIVATION_DAY_POS("derivation.day.position"),
+  /**
+   * Represents the 'derivation.year.position' parameter constant.
+   */
+  SPECIFIC_DERIVATION_YEAR_POS("derivation.year.position"),
+  
+  /**
+   * sp.authorized.parameters Represents the '' parameter constant.
+   */
+  SPEPS_AUTHORIZED("sp.authorized.parameters"),
+  
+  /**
+   * Represents the 'spSector' constant value.
+   */
+  SPSECTOR("spSector"),
+  /**
+   * Represents the 'spApplication' constant value.
+   */
+  SPAPPLICATION("spApplication"),
+  /**
+   * Represents the 'spCountry' constant value.
+   */
+  SPCOUNTRY("spCountry"),
+  /**
+   * Represents the 'spInstitution' constant value.
+   */
+  SPINSTITUTION("spInstitution"),
+  /**
+   * Represents the 'storkAttribute.number' parameter constant.
+   */
+  STORK_ATTRIBUTE_NUMBER("storkAttribute.number"),
+  /**
+   * Represents the 'storkAttributeValue.number' parameter constant.
+   */
+  STORK_ATTRIBUTE_VALUE_NUMBER("storkAttributeValue.number"),
+  
+  /**
+   * Represents the 'username' parameter constant.
+   */
+  USERNAME("username"),
+  
+  /**
+   * Represents the 'tooManyParameters' parameter constant.
+   */
+  TOO_MANY_PARAMETERS("tooManyParameters"),
+  /**
+   * Represents the 'validation.active' parameter constant.
+   */
+  VALIDATION_ACTIVE("validation.active"),
+  
+  /**
+   * Represents the 'x-forwarded-for' parameter constant.
+   */
+  X_FORWARDED_FOR("x-forwarded-for"),
+  /**
+   * Represents the 'x-forwarded-host' parameter constant.
+   */
+  X_FORWARDED_HOST("x-forwarded-host"),
+  /**
+   * Represents the 'XMLResponse' parameter constant.
+   */
+  XML_RESPONSE("XMLResponse"),
+
+  /**
+   * Represents the 'ap-cpeps.number' parameter constant.
+   */
+  AP_PEPS_NUMBER("ap-cpeps.number"),
+
+  /**
+   * Represents the 'atp.number' parameter constant.
+   */
+  ATTRIBUTE_PROVIDER_NUMBER("atp.number"),
+
+  /**
+   * Represents the 'atn.number' parameter constant.
+   */
+  ATTRIBUTE_NAME_NUMBER("atn.number"),
+
+  /**
+   * Represents the 'apLinker' parameter constant.
+   */
+  AP_LINKER("apLinker"),
+
+  /**
+   * Represents the 'prevApLinker' parameter constant.
+   */
+  PREV_AP_LINKER("prevApLinker"),
+
+  /**
+   * Represents the 'NOSEL' parameter constant (no attribute provider selected).
+   */
+  AP_NO_SELECTION("NOSEL"),
+
+  /**
+   * Represents the 'OCSEL' parameter constant (attribute provider in another country).
+   */
+  AP_OTHER_COUNTRY("OCSEL"),
+
+  /**
+   * Represents the '_provider' suffix parameter constant.
+   */
+  AP_PROVIDER_SELECT_SUFFIX("_provider"),
+
+  /**
+   * Represents the '_country' suffix parameter constant.
+   */
+  AP_COUNTRY_SELECT_SUFFIX("_country"),
+
+  /**
+   * Represents the '_name' suffix parameter constant.
+   */
+  AP_NAME_SELECT_SUFFIX("_name"),
+
+  /**
+   * Represents the 'next-ap' parameter constant.
+   */
+  NEXT_AP("next-ap"),
+
+  /**
+   * Represents the 'next-apeps' parameter constant.
+   */
+  NEXT_APEPS("next-apeps"),
+
+  /**
+   * Represents the 'back-to-apeps' parameter constant.
+   */
+  BACK_TO_APEPS("back-to-apeps"),
+
+  /**
+   * Represents the 'is-remote-apeps' parameter constant.
+   */
+  IS_REMOTE_APEPS("is-remote-apeps"),
+
+  /**
+   * Represents the 'more-attributes' parameter constant.
+   */
+  MORE_ATTRIBUTES("more-attributes"),
+
+  /**
+   * Represents the 'attr-filter.number' parameter constant.
+   */
+  ATTRIBUTES_FILTER_NUMBER("attr-filter.number"),
+
+  /**
+   * Represents the 'attr-group' parameter constant.
+   */
+  ATTRIBUTE_GROUPS("attr-group"),
+
+  /**
+   * Represents the 'all' parameter constant for attribute groups.
+   */
+  ATTRIBUTE_GROUPS_ALL("all"),
+
+  /**
+   * Represents the 'none' parameter constant for attribute groups.
+   */
+  ATTRIBUTE_GROUPS_NONE("none"),
+
+  /**
+   * Represents the 'atp.url' parameter constant.
+   */
+  ATP_URL("atp.url"), 
+   /**
+   * Represents the 'apepsURL' parameter constant.
+   */
+  APEPS_URL("apepsUrl"),
+  
+  /**
+   * Represents the 'apepsCountry' parameter constant.
+   */
+  APEPS_COUNTRY("apepsCountry"),
+  
+  /**
+   * Represents the 'apepsAuthRequest' parameter constant.
+   */
+  APEPS_ATTR_REQUEST("apepsAttrRequest"),
+  
+  /**
+   * Represents the 'isApepsRequest' parameter constant.
+   */
+  APEPS_REQUEST_COMPLETE("apeps-request-complete"),
+  
+  /**
+   * Represents the 'apeps.callbackUrl' parameter constant.
+   */  
+  APEPS_CALLBACK_URL("apeps.callbackUrl"),
+  /**
+   * Represents the 'attrListMand' parameter constant.
+   */
+  ATTR_LIST_MAND("attrListMand"),
+  
+  /**
+   * Represents the 'attrListOpt' parameter constant.
+   */
+  ATTR_LIST_OPT("attrListOpt"),
+  
+  /**
+   * Represents the 'simpleAttrListMand' parameter constant.
+   */
+  SIMPLE_ATTR_LIST_MAND("simpleAttrListMand"), 
+  
+  /**
+   * Represents the 'simpleAttrListOpt' parameter constant.
+   */
+  SIMPLE_ATTR_LIST_OPT("simpleAttrListOpt"), 
+  
+  /**
+   * Represents the 'complexAttrListMand' parameter constant.
+   */
+  COMPLEX_ATTR_LIST_MAND("complexAttrListMand"), 
+  
+  /**
+   * Represents the 'complexAttrListOpt' parameter constant.
+   */
+  COMPLEX_ATTR_LIST_OPT("complexAttrListOpt");
+
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param nValue The Constant value.
+   */
+  PEPSParameters(final String nValue) {
+    this.value = nValue;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    return value;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSUtil.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSUtil.java
new file mode 100644
index 000000000..69729c0bb
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSUtil.java
@@ -0,0 +1,391 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Properties;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.bouncycastle.crypto.Digest;
+import org.bouncycastle.util.encoders.Base64;
+import org.bouncycastle.util.encoders.UrlBase64;
+
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+import eu.stork.peps.auth.commons.exceptions.InvalidParameterPEPSException;
+
+/**
+ * This class holds static helper methods.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.75 $, $Date: 2010-11-23 00:05:35 $
+ */
+public final class PEPSUtil {
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(PEPSUtil.class.getName());
+  
+  /**
+   * Configurations object.
+   */
+  private static Properties configs;
+  
+  /**
+   * Max prefix.
+   */
+  private static final String MAX_PARAM_PREFIX = "max.";
+  
+  /**
+   * Code prefix to get error code.
+   */
+  private static final String CODE_PARAM_SUFFIX = ".code";
+  
+  /**
+   * param's size prefix to get max param size.
+   */
+  private static final String MAX_PARAM_SUFFIX = ".size";
+  
+  /**
+   * Message prefix to get error message.
+   */
+  private static final String MSG_PARAM_SUFFIX = ".message";
+  
+  /**
+   * Private constructor. Prevents the class from being instantiated.
+   */
+  private PEPSUtil() {
+    // empty constructor
+  }
+  
+  /**
+   * Creates a single instance of this class and sets the properties.
+   * 
+   * @param nConfigs The set of available configurations.
+   * 
+   * @return The created PEPSUtil's class.
+   */
+  public static PEPSUtil createInstance(final Properties nConfigs) {
+    if (nConfigs != null) {
+      PEPSUtil.configs = nConfigs;
+    }
+    return new PEPSUtil();
+  }
+  
+  /**
+   * Getter for the Properties.
+   * 
+   * @return configs The properties value.
+   */
+  public Properties getConfigs() {
+    return configs;
+  }
+  
+  /**
+   * Setter for the Properties.
+   * 
+   * @param nConfigs The new properties value.
+   */
+  public static void setConfigs(final Properties nConfigs) {
+    if (nConfigs != null) {
+      PEPSUtil.configs = nConfigs;
+    }
+  }
+  
+  /**
+   * Returns the identifier of some configuration given a set of configurations
+   * and the corresponding configuration key.
+   * 
+   * @param configKey The key that IDs some configuration.
+   * 
+   * @return The configuration String value.
+   */
+  public static String getConfig(final String configKey) {
+    return configs.getProperty(configKey);
+  }
+  
+  /**
+   * Validates the input paramValue identified by the paramName.
+   * 
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   * 
+   * @return true if the parameter is valid.
+   */
+  public static boolean isValidParameter(final String paramName,
+    final String paramValue) {
+    
+    final String validationParam =
+      PEPSUtil.getConfig(PEPSParameters.VALIDATION_ACTIVE.toString());
+    boolean retVal = true;
+    
+    final String paramConf = MAX_PARAM_PREFIX + paramName + MAX_PARAM_SUFFIX;
+    
+    if (PEPSValues.TRUE.toString().equals(validationParam)) {
+      final String paramSizeStr = PEPSUtil.getConfig(paramConf);
+      // Checking if the parameter size exists and if it's numeric
+      if (StringUtils.isNumeric(paramSizeStr)) {
+        final int maxParamSize = Integer.valueOf(paramSizeStr);
+        if (StringUtils.isEmpty(paramValue)
+          || paramValue.length() > maxParamSize) {
+          retVal = false;
+          LOG.warn("Invalid parameter [" + paramName + "] value " + paramValue);
+        }
+      } else {
+        retVal = false;
+        LOG.error("Missing " + paramConf
+          + " configuration in the pepsUtils.properties configuration file");
+      }
+    }
+    return retVal;
+  }
+  
+  /**
+   * Validates the Parameter and throws an exception if an error occurs. Throws
+   * an InvalidParameterPEPSException runtime exception if the parameter is
+   * invalid.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final Object paramValue) {
+    
+    if (paramValue == null) {
+      PEPSUtil.validateParameter(className, paramName, "");
+    } else {
+      PEPSUtil.validateParameter(className, paramName, paramValue.toString());
+    }
+  }
+  
+  /**
+   * Validates the Parameters and throws an exception if an error occurs.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final String paramValue) {
+    
+    PEPSUtil.validateParameter(className, paramName, paramValue,
+      PEPSUtil.getErrorCode(paramName), PEPSUtil.getErrorMessage(paramName));
+  }
+  
+  /**
+   * Validates the Parameters and throws an exception if an error occurs.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   * @param error The PEPSError to get error code and messages from configs.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final String paramValue, final PEPSErrors error) {
+    
+    PEPSUtil.validateParameter(className, paramName, paramValue,
+      PEPSUtil.getConfig(error.errorCode()),
+      PEPSUtil.getConfig(error.errorMessage()));
+  }
+  
+  /**
+   * Validates the HTTP Parameter and throws an exception if an error occurs.
+   * Throws an InvalidParameterPEPSException runtime exception if the parameter
+   * is invalid.
+   * 
+   * @param className The Class Name that invoked the method.
+   * @param paramName The name of the parameter to validate.
+   * @param paramValue The value of the parameter to validate.
+   * @param errorCode The error code to include on the exception.
+   * @param errorMessage The error message to include on the exception.
+   */
+  public static void validateParameter(final String className,
+    final String paramName, final String paramValue, final String errorCode,
+    final String errorMessage) {
+    
+    if (!isValidParameter(paramName, paramValue)) {
+      LOG.warn("Invalid parameter [" + paramName + "] value found at "
+        + className);
+      throw new InvalidParameterPEPSException(errorCode, errorMessage);
+    }
+  }
+  
+  /**
+   * Getter for the error code of some given error related to the input param.
+   * 
+   * @param paramName The name of the parameter associated with the error.
+   * 
+   * @return The code of the error.
+   */
+  private static String getErrorCode(final String paramName) {
+    return getConfig(paramName + CODE_PARAM_SUFFIX);
+  }
+  
+  /**
+   * Getter for the error message of some given error related to the input
+   * parameter.
+   * 
+   * @param paramName The name of the parameter associated with the message.
+   * 
+   * @return The message for the error.
+   */
+  private static String getErrorMessage(final String paramName) {
+    return getConfig(paramName + MSG_PARAM_SUFFIX);
+  }
+  
+  /**
+   * {@link Base64} encodes the input samlToken parameter.
+   * 
+   * @param samlToken the SAML Token to be encoded.
+   * 
+   * @return The Base64 String representing the samlToken.
+   * 
+   * @see Base64#encode
+   */
+  public static String encodeSAMLToken(final byte[] samlToken) {
+      try {
+          return new String(Base64.encode(samlToken), "UTF8");
+      } catch (final UnsupportedEncodingException e) {
+          LOG.error(PEPSErrors.INTERNAL_ERROR.errorMessage(), e);
+          return null;
+      }
+  }
+  
+  /**
+   * Encode samltoken url safe
+   * @param samlToken the saml token to encode
+   * @return the bas64 encoded string
+   */
+  public static String encodeSAMLTokenUrlSafe(final byte[] samlToken) {
+      try {
+          return new String(UrlBase64.encode(samlToken), "UTF8");
+      } catch (final UnsupportedEncodingException e) {
+          LOG.error(PEPSErrors.INTERNAL_ERROR.errorMessage(), e);
+          return null;
+      }
+  }
+  
+  /**
+   * Decodes the {@link Base64} String input parameter representing a samlToken.
+   * 
+   * @param samlToken the SAML Token to be decoded.
+   * 
+   * @return The samlToken decoded bytes.
+   * 
+   * @see Base64#decode
+   */
+  public static byte[] decodeSAMLToken(final String samlToken) {
+    return Base64.decode(samlToken);
+  }
+  
+  /**
+   * Decode URL save base64 saml token
+   * @param samlToken the SAML toke to decode
+   * @return The decoded bytes
+   */
+  public static byte[] decodeSAMLTokenUrlSafe(final String samlToken) {
+	    return UrlBase64.decode(samlToken);
+	  }
+  
+  /**
+   * Hashes a SAML token. Throws an InternalErrorPEPSException runtime exception
+   * if the Cryptographic Engine fails.
+   * 
+   * @param samlToken the SAML Token to be hashed.
+   * 
+   * @return byte[] with the hashed SAML Token.
+   */
+  public static byte[] hashPersonalToken(final byte[] samlToken) {
+    try {
+      final String className =
+        PEPSUtil.getConfig(PEPSValues.HASH_DIGEST_CLASS.toString());
+      
+      final Digest digest =
+        (Digest) Class.forName(className).getConstructor()
+          .newInstance((Object[]) null);
+      digest.update(samlToken, 0, samlToken.length);
+      
+      final int retLength = digest.getDigestSize();
+      final byte[] ret = new byte[retLength];
+      
+      digest.doFinal(ret, 0);
+      return ret;
+      
+    } catch (final Exception e) {
+      // For all those exceptions that could be thrown, we always log it and
+      // thrown an InternalErrorPEPSException.
+      LOG.error(PEPSErrors.HASH_ERROR.errorMessage(), e);
+      throw new InternalErrorPEPSException(
+        PEPSUtil.getConfig(PEPSErrors.HASH_ERROR.errorCode()),
+        PEPSUtil.getConfig(PEPSErrors.HASH_ERROR.errorMessage()), e);
+    }
+  }
+  
+  /**
+   * Gets the Stork error code in the error message if exists!
+   * 
+   * @param errorMessage The message to get the error code if exists;
+   * 
+   * @return the error code if exists. Returns null otherwise.
+   */
+  public static String getStorkErrorCode(final String errorMessage) {
+    if (StringUtils.isNotBlank(errorMessage)
+      && errorMessage.indexOf(PEPSValues.ERROR_MESSAGE_SEP.toString()) >= 0) {
+      final String[] msgSplitted =
+        errorMessage.split(PEPSValues.ERROR_MESSAGE_SEP.toString());
+      if (msgSplitted.length == 2 && StringUtils.isNumeric(msgSplitted[0])) {
+        return msgSplitted[0];
+      }
+    }
+    return null;
+  }
+  
+  /**
+   * Gets the Stork error message in the saml message if exists!
+   * 
+   * @param errorMessage The message to get in the saml message if exists;
+   * 
+   * @return the error message if exists. Returns the original message
+   *         otherwise.
+   */
+  public static String getStorkErrorMessage(final String errorMessage) {
+    if (StringUtils.isNotBlank(errorMessage)
+      && errorMessage.indexOf(PEPSValues.ERROR_MESSAGE_SEP.toString()) >= 0) {
+      final String[] msgSplitted =
+        errorMessage.split(PEPSValues.ERROR_MESSAGE_SEP.toString());
+      if (msgSplitted.length == 2 && StringUtils.isNumeric(msgSplitted[0])) {
+        return msgSplitted[1];
+      }
+    }
+    return errorMessage;
+  }
+  
+  /**
+   * Get inputstream from string
+   * @param string the string to convert
+   * @param codePage the codepage of string
+   * @return an inputstream
+   * @throws UnsupportedEncodingException
+   */
+  public static InputStream getStream(final String string, final String codePage) throws UnsupportedEncodingException
+  {
+		return new ByteArrayInputStream(string.getBytes(codePage));
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSValues.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSValues.java
new file mode 100644
index 000000000..89cf8fa9b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PEPSValues.java
@@ -0,0 +1,342 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains all the value constants.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.17 $, $Date: 2011-07-07 20:48:45 $
+ */
+public enum PEPSValues {
+  
+  /**
+   * Represents the 'all' constant value.
+   */
+  ALL("all"),
+  /**
+   * Represents the 'none' constant value.
+   */
+  NONE("none"),
+  /**
+   * Represents the 'true' constant value.
+   */
+  TRUE("true"),
+  /**
+   * Represents the 'false' constant value.
+   */
+  FALSE("false"),
+  /**
+   * Represents the empty string constant value.
+   */
+  EMPTY_STRING(""),
+  
+  /**
+   * Represents the ',' separator constant value.
+   */
+  ATTRIBUTE_VALUE_SEP(","),
+  /**
+   * Represents the ';' separator constant value.
+   */
+  ATTRIBUTE_SEP(";"),
+  /**
+   * Represents the ':' separator constant value.
+   */
+  ATTRIBUTE_TUPLE_SEP(":"),
+  /**
+   * Represents the '/' separator constant value.
+   */
+  EID_SEPARATOR("/"),
+  /**
+   * Represents the ' - ' separator constant value.
+   */
+  ERROR_MESSAGE_SEP(" - "),
+  /**
+   * Represents the '#' parameter constant value.
+   */
+  LOGGER_SEP("#"),
+  /**
+   * Represents the 'NOT_AVAILABLE' parameter constant value.
+   */
+  NOT_AVAILABLE("NotAvailable"),
+  /**
+   * Represents the ';' parameter constant value.
+   */
+  SPEPS_AUTHORIZED_SEP(";"),
+  
+  /**
+   * Represents the 'ap' constant value.
+   */
+  AP("ap"),
+  /**
+   * Represents the 'C-PEPS' constant value.
+   */
+  CPEPS("C-PEPS"),
+  /**
+   * Represents the 'cpeps' constant value.
+   */
+  CPEPS_PREFIX("cpeps"),
+  /**
+   * Represents the 'peps' constant value.
+   */
+  PEPS("peps"),
+  /**
+   * Represents the '-PEPS' constant value.
+   */
+  PEPS_SUFFIX("-PEPS"),
+  /**
+   * Represents the 'SP' constant value.
+   */
+  SP("SP"),
+  /**
+   * Represents the 'S-PEPS' constant value.
+   */
+  SPEPS("S-PEPS"),
+  /**
+   * Represents the 'speps' constant value.
+   */
+  SPEPS_PREFIX("speps"),
+  /**
+   * Represents the 'sp.default.parameters' constant value.
+   */
+  DEFAULT("sp.default.parameters"),
+  /**
+   * Represents the default saml id constant value.
+   */
+  DEFAULT_SAML_ID("1"),
+  /**
+   * Represents the 'hashDigest.className' constant value.
+   */
+  HASH_DIGEST_CLASS("hashDigest.className"),
+  
+  /**
+   * Represents the 'eu.stork.communication.requests' constant value.
+   */
+  STORK_PACKAGE_REQUEST_LOGGER_VALUE("eu.stork.communication.requests"),
+  /**
+   * Represents the 'eu.stork.communication.responses' constant value.
+   */
+  STORK_PACKAGE_RESPONSE_LOGGER_VALUE("eu.stork.communication.responses"),
+  
+  /**
+   * Represents the 'S-PEPS receives request from SP' constant value.
+   */
+  SP_REQUEST("S-PEPS receives request from SP"),
+  /**
+   * Represents the 'Get Citizen Consent' constant value.
+   */
+  CITIZEN_CONSENT_LOG("Get Citizen Consent"),
+  /**
+   * Represents the 'C-PEPS receives request from S-PEPS' constant value.
+   */
+  CPEPS_REQUEST("C-PEPS receives request from S-PEPS"),
+  /**
+   * Represents the 'C-PEPS generates response to S-PEPS' constant value.
+   */
+  CPEPS_RESPONSE("C-PEPS generates response to S-PEPS"),
+  /**
+   * Represents the 'S-PEPS generates request to C-PEPS' constant value.
+   */
+  SPEPS_REQUEST("S-PEPS generates request to C-PEPS"),
+  /**
+   * Represents the 'S-PEPS receives response from C-PEPS' constant value.
+   */
+  SPEPS_RESPONSE("S-PEPS receives response from C-PEPS"),
+  /**
+   * Represents the 'S-PEPS generates response to SP' constant value.
+   */
+  SP_RESPONSE("S-PEPS generates response to SP"),
+  /**
+   * Represents the 'Success' constant value.
+   */
+  SUCCESS("Success"),
+  /**
+   * Represents the December's month number constant value.
+   */
+  LAST_MONTH("12"),
+  /**
+   * Represents the yyyyMM constant value.
+   */
+  NO_DAY_DATE_FORMAT("yyyyMM"),
+  
+  /**
+   * Represents the 'attrValue' constant value.
+   */
+  ATTRIBUTE("attrValue"),
+  /**
+   * Represents the 'derivedAttr' constant value.
+   */
+  DERIVE_ATTRIBUTE("deriveAttr"),
+  /**
+   * Represents the 'storkAttribute' constant value.
+   */
+  STORK_ATTRIBUTE("storkAttribute"),
+  
+  /**
+   * Represents the 'properties' constant value.
+   */
+  PROPERTIES("properties"),
+  /**
+   * Represents the 'referer' constant value.
+   */
+  REFERER("referer"),
+  /**
+   * Represents the 'host' constant value.
+   */
+  HOST("host"),
+  /**
+   * Represents the 'spid' constant value.
+   */
+  SPID("spid"),
+  /**
+   * Represents the 'domain' constant value.
+   */
+  DOMAIN("domain"),
+  /**
+   * Represents the '.validation' constant value.
+   */
+  VALIDATION_SUFFIX(".validation"),
+  /**
+   * Represents the 'jsessionid' constant value.
+   */
+  EQUAL("="),
+  /**
+   * Represents the 'HttpOnly' constant value.
+   */
+  HTTP_ONLY("HttpOnly"),
+  /**
+   * Represents the 'SET-COOKIE' constant value.
+   */
+  JSSESSION("JSESSIONID"),
+  /**
+   * Represents the '=' constant value.
+   */
+  SETCOOKIE("SET-COOKIE"),
+  /**
+   * Represents the ';' constant value.
+   */
+  SEMICOLON(";"),
+  /**
+   * Represents the ' ' constant value.
+   */
+  SPACE(" "),
+  /**
+   * Represents the 'atp' constant value.
+   */
+  APROVIDER_PREFIX("atp"),
+  /**
+   * Represents the 'atn' constant value.
+   */
+  ANAME_PREFIX("atn"),
+  /**
+   * Represents the 'ap-cpeps' constant value.
+   */
+  AP_CPEPS_PREFIX("ap-cpeps"),
+  /**
+   * Represents the 'attr-filter' constant value.
+   */
+  AP_ATTRFILTER_PREFIX("attr-filter");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param val The Constant value.
+   */
+  PEPSValues(final String val) {
+    
+    this.value = val;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    
+    return value;
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".id".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String index(final int index) {
+    
+    return value + index + ".id";
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".value".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated string value.
+   */
+  public String value(final int index) {
+    
+    return value + index + ".value";
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".name".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String name(final int index) {
+    
+    return value + index + ".name";
+  }
+  
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".url".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String url(final int index) {
+    
+    return value + index + ".url";
+  }
+
+  /**
+   * Construct the return value with the following structure
+   * CONSTANT_VALUE+index+".allowedGroups".
+   * 
+   * @param index the number.
+   * 
+   * @return The concatenated String value.
+   */
+  public String allowedGroups(final int index) {
+    
+    return value + index + ".allowedGroups";
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttribute.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttribute.java
new file mode 100644
index 000000000..5d8281445
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttribute.java
@@ -0,0 +1,348 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.log4j.Logger;
+
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * PersonalAttribute.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.22 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class PersonalAttribute implements Serializable, Cloneable {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 2612951678412632174L;
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(PersonalAttribute.class
+    .getName());
+  
+  /**
+   * Name of the personal attribute.
+   */
+  private String name;
+  
+  /**
+   * Values of the personal attribute.
+   */
+  private List<String> value = new ArrayList<String>();
+  
+  /**
+   * Type of the personal attribute.
+   */
+ private String type;
+  
+  /**
+   * Complex values of the personal attribute.
+   */
+  private Map<String, String> complexValue = new ConcurrentHashMap<String, String>();
+  
+  /**
+   * Is the personal attribute mandatory?
+   */
+  private transient boolean required;
+  
+  /**
+   * Returned status of the attribute from the IdP.
+   */
+  private String status;
+  
+  /**
+   * Name of the personal attribute.
+   */
+  private String friendlyName;
+  
+  /**
+   * Empty Constructor.
+   */
+  public PersonalAttribute() {
+    super();
+  }
+  
+  /**
+   * PersonalAttribute Constructor for complex values.
+   * 
+   * @param attrName The attribute name.
+   * @param attrIsRequired The attribute type value.
+   * @param attrComplexValue The attribute's value.
+   * @param attrStatus The attribute's status value.
+   */
+  public PersonalAttribute(final String attrName, final boolean attrIsRequired,
+    final List<String> attrComplexValue, final String attrStatus) {
+    this.setName(attrName);
+    this.setIsRequired(attrIsRequired);
+    this.setValue(attrComplexValue);
+    this.setStatus(attrStatus);
+  }
+  
+  /**
+   * PersonalAttribute Constructor for complex values.
+   * 
+   * @param attrName The attribute name.
+   * @param attrIsRequired The attribute type value.
+   * @param attrComplexValue The attribute's complex value.
+   * @param attrStatus The attribute's status value.
+   */
+  public PersonalAttribute(final String attrName, final boolean attrIsRequired,
+    final Map<String, String> attrComplexValue, final String attrStatus) {
+    this.setName(attrName);
+    this.setIsRequired(attrIsRequired);
+    this.setComplexValue(attrComplexValue);
+    this.setStatus(attrStatus);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  @SuppressWarnings("unchecked")
+  public Object clone() {
+    
+    try {
+      final PersonalAttribute personalAttr = (PersonalAttribute) super.clone();
+      personalAttr.setIsRequired(this.isRequired());
+      personalAttr.setName(this.getName());
+      personalAttr.setStatus(this.getStatus());
+      if (!isEmptyValue()) {
+        final List<String> val =
+          (List<String>) ((ArrayList<String>) this.getValue()).clone();
+        personalAttr.setValue(val);
+      }
+      if (!isEmptyComplexValue()) {
+        final Map<String, String> complexVal =
+          (Map<String, String>) ((HashMap<String, String>) this
+            .getComplexValue()).clone();
+        personalAttr.setComplexValue(complexVal);
+      }
+      return personalAttr;
+    } catch (final CloneNotSupportedException e) {
+      // assert false;
+      LOG.trace("Nothing to do.");
+      throw new InternalErrorPEPSException(
+        PEPSUtil.getConfig(PEPSErrors.INTERNAL_ERROR.errorCode()),
+        PEPSUtil.getConfig(PEPSErrors.INTERNAL_ERROR.errorMessage()), e);
+    }
+  }
+  
+  /**
+   * Getter for the required value.
+   * 
+   * @return The required value.
+   */
+  public boolean isRequired() {
+    return required;
+  }
+  
+  /**
+   * Setter for the required value.
+   * 
+   * @param attrIsRequired this attribute?
+   */
+  public void setIsRequired(final boolean attrIsRequired) {
+    this.required = attrIsRequired;
+  }
+  
+  /**
+   * Getter for the name value.
+   * 
+   * @return The name value.
+   */
+  public String getName() {
+    return name;
+  }
+  
+  /**
+   * Setter for the name value.
+   * 
+   * @param attrName The personal attribute name.
+   */
+  public void setName(final String attrName) {
+    this.name = attrName;
+  }
+  
+  /**
+   * Getter for the value.
+   * 
+   * @return The list of values.
+   */
+  public List<String> getValue() {
+    return value;
+  }
+  
+  /**
+   * Setter for the list of values.
+   * 
+   * @param attrValue The personal attribute value.
+   */
+  public void setValue(final List<String> attrValue) {
+    if (attrValue != null) {
+      this.value = attrValue;
+    }
+  }
+  
+
+  /**
+   * Getter for the type value.
+   * 
+   * @return The name value.
+   */
+  public String getType() {
+    return type;
+  }
+  
+  /**
+   * Setter for the type value.
+   * 
+   * @param attrName The personal attribute type.
+   */
+  public void setType(final String attrType) {
+    this.type = attrType;
+  }
+  
+  /**
+   * Getter for the status.
+   * 
+   * @return The status value.
+   */
+  public String getStatus() {
+    return status;
+  }
+  
+  /**
+   * Setter for the status value.
+   * 
+   * @param attrStatus The personal attribute status.
+   */
+  public void setStatus(final String attrStatus) {
+    this.status = attrStatus;
+  }
+  
+  /**
+   * Getter for the complex value.
+   * 
+   * @return The complex value.
+   */
+  public Map<String, String> getComplexValue() {
+    return complexValue;
+  }
+  
+  /**
+   * Setter for the complex value.
+   * 
+   * @param complexVal The personal attribute Complex value.
+   */
+  public void setComplexValue(final Map<String, String> complexVal) {
+    if (complexVal != null) {
+      this.complexValue = complexVal;
+    }
+  }
+  
+  /**
+   * Getter for the personal's friendly name.
+   * 
+   * @return The personal's friendly name value.
+   */
+  public String getFriendlyName() {
+    return friendlyName;
+  }
+  
+  /**
+   * Setter for the personal's friendly name.
+   * 
+   * @param fName The personal's friendly name.
+   */
+  public void setFriendlyName(final String fName) {
+    this.friendlyName = fName;
+  }
+  
+  /**
+   * Return true the value is empty.
+   * 
+   * @return True if the value is empty "[]";
+   */
+  public boolean isEmptyValue() {
+    return value.isEmpty() || (value.size() == 1 && value.get(0).length() == 0);
+  }
+  
+  /**
+   * Returns true if the Complex Value is empty.
+   * 
+   * @return True if the Complex Value is empty;
+   */
+  public boolean isEmptyComplexValue() {
+    return complexValue.isEmpty();
+  }
+  
+  /**
+   * Returns true if the Status is empty.
+   * 
+   * @return True if the Status is empty;
+   */
+  public boolean isEmptyStatus() {
+    return (status == null || status.length() == 0);
+  }
+  
+  /**
+   * Prints the PersonalAttribute in the following format.
+   * name:required:[v,a,l,u,e,s]|[v=a,l=u,e=s]:status;
+   * 
+   * @return The PersonalAttribute as a string.
+   */
+  public String toString() {
+    final StringBuilder strBuild = new StringBuilder();
+    
+    AttributeUtil.appendIfNotNull(strBuild, getName());
+    strBuild.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString());
+    AttributeUtil.appendIfNotNull(strBuild, String.valueOf(isRequired()));
+    strBuild.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString());
+    strBuild.append('[');
+    
+    if (isEmptyValue()) {
+      if (!isEmptyComplexValue()) {
+        AttributeUtil.appendIfNotNull(strBuild, AttributeUtil.mapToString(
+          getComplexValue(), PEPSValues.ATTRIBUTE_VALUE_SEP.toString()));
+      }
+    } else {
+      AttributeUtil.appendIfNotNull(
+        strBuild,
+        AttributeUtil.listToString(getValue(),
+          PEPSValues.ATTRIBUTE_VALUE_SEP.toString()));
+    }
+    
+    strBuild.append(']');
+    strBuild.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString());
+    AttributeUtil.appendIfNotNull(strBuild, getStatus());
+    strBuild.append(PEPSValues.ATTRIBUTE_SEP.toString());
+    
+    return strBuild.toString();
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java
new file mode 100644
index 000000000..9a0f87488
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java
@@ -0,0 +1,397 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.StringTokenizer;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * PersonalAttributeList.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.27 $, $Date: 2010-11-18 22:54:56 $
+ * 
+ * @see PersonalAttribute
+ */
+@SuppressWarnings("PMD")
+public final class PersonalAttributeList extends
+	ConcurrentHashMap<String, PersonalAttribute> implements IPersonalAttributeList, Serializable {
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger
+    .getLogger(PersonalAttributeList.class.getName());
+  
+  /**
+   * Serial id.
+   */
+  private static final long serialVersionUID = 7375127363889975062L;
+  
+  /**
+   * Hash with the latest fetched attribute name alias.
+   */
+  private final Map<String, Integer> latestAttrAlias =
+    new HashMap<String, Integer>();
+  
+  /**
+   * Hash with mapping number of alias or the attribute name.
+   */
+  private final Map<String, Integer> attrAliasNumber =
+    new HashMap<String, Integer>();
+  
+  /**
+   * Default constructor.
+   */
+  public PersonalAttributeList() {
+    // The best practices recommend to call the super constructor.
+    super();
+  }
+  
+  /**
+   * Constructor with initial capacity for the PersonalAttributeList size.
+   * 
+   * @param capacity The initial capacity for the PersonalAttributeList.
+   */
+  public PersonalAttributeList(final int capacity) {
+    super(capacity);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public Iterator<PersonalAttribute> iterator() {
+    return this.values().iterator();
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public PersonalAttribute get(final Object key) {
+    String attrName = (String) key;
+    
+    if (this.latestAttrAlias.containsKey(key)) {
+      attrName = attrName + this.latestAttrAlias.get(key);
+    } else {
+      if (this.attrAliasNumber.containsKey(key)) {
+        this.latestAttrAlias.put(attrName, this.attrAliasNumber.get(key));
+      }
+    }
+    return super.get(attrName);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public void add(final PersonalAttribute value) {
+    if (value != null) {
+      this.put(value.getName(), value);
+    }
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public PersonalAttribute put(final String key, final PersonalAttribute val) {
+    if (StringUtils.isNotEmpty(key) && val != null) {
+      // Validate if attribute name already exists!
+      String attrAlias = key;
+      if (this.containsKey(attrAlias)) {
+    	//TODO isAgeOver should not be hardcoded, a better way of handling multipe isAgeOver requests should be implemented.
+        if (!val.isEmptyValue() && StringUtils.isNumeric(val.getValue().get(0)) && "isAgeOver".equals( val.getName() ) ) {
+          final String attrValue = val.getValue().get(0);
+          attrAlias = key + attrValue;
+          this.attrAliasNumber.put(key, Integer.valueOf(attrValue));
+        } else {
+          final PersonalAttribute attr = super.get(key);
+          if (!attr.isEmptyValue()
+            && StringUtils.isNumeric(attr.getValue().get(0))) {
+            attrAlias = key + attr.getValue().get(0);
+            super.put(key, (PersonalAttribute) attr);
+            this.attrAliasNumber.put(key, null);
+          }
+        }
+      }
+      return super.put(attrAlias, val);
+    } else {
+      return null;
+    }
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public void populate(final String attrList) {
+    final StringTokenizer strToken =
+      new StringTokenizer(attrList, PEPSValues.ATTRIBUTE_SEP.toString());
+    
+    while (strToken.hasMoreTokens()) {
+      final PersonalAttribute persAttr = new PersonalAttribute();
+      String[] tuples =
+        strToken.nextToken().split(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString(),
+          AttributeConstants.NUMBER_TUPLES.intValue());
+      
+      // Convert to the new format if needed!
+      tuples = convertFormat(tuples);
+      
+      if (AttributeUtil.hasValidTuples(tuples)) {
+        final int attrValueIndex =
+          AttributeConstants.ATTR_VALUE_INDEX.intValue();
+        final String tmpAttrValue =
+          tuples[attrValueIndex].substring(1,
+            tuples[attrValueIndex].length() - 1);
+        final String[] vals =
+          tmpAttrValue.split(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+        
+        persAttr.setName(tuples[AttributeConstants.ATTR_NAME_INDEX.intValue()]);
+        persAttr.setIsRequired(Boolean
+          .valueOf(tuples[AttributeConstants.ATTR_TYPE_INDEX.intValue()]));
+        
+        // check if it is a complex value
+        if (isComplexValue(vals)) {
+          persAttr.setComplexValue(createComplexValue(vals));
+        }
+        else 
+        {
+        	persAttr.setValue(createValues(vals));
+        }
+        
+        if (tuples.length == AttributeConstants.NUMBER_TUPLES.intValue()) {
+          persAttr.setStatus(tuples[AttributeConstants.ATTR_STATUS_INDEX
+            .intValue()]);
+        }
+        this.put(tuples[AttributeConstants.ATTR_NAME_INDEX.intValue()],
+          persAttr);
+        
+      } else {
+        LOG.warn("Invalid personal attribute list tuples");
+      }
+      
+    }
+  }
+
+  /**
+  * Returns a copy of this <tt>IPersonalAttributeList</tt> instance.
+  *
+  * @return The copy of this IPersonalAttributeList.
+  */
+  public Object clone() {
+	  try {
+	    return (PersonalAttributeList) super.clone();
+	  } catch (CloneNotSupportedException e) {
+	    return null;
+	  }
+  }
+  
+  /**
+   * Creates a string in the following format.
+   * 
+   * attrName:attrType:[attrValue1,attrValue2=attrComplexValue]:attrStatus;
+   * 
+   * @return {@inheritDoc}
+   */
+  @Override
+  public String toString() {
+    final Iterator<Entry<String, PersonalAttribute>> itAttrs =
+      this.entrySet().iterator();
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    while (itAttrs.hasNext()) {
+      final Entry<String, PersonalAttribute> attrEntry = itAttrs.next();
+      final PersonalAttribute attr = attrEntry.getValue();
+      //strBuilder.append(attr.toString());
+      strBuilder.insert(0, attr.toString());
+    }
+    
+    return strBuilder.toString();
+  }
+  
+  /**
+   * Validates and creates the attribute's complex values.
+   * 
+   * @param values The complex values.
+   * 
+   * @return The {@link Map} with the complex values.
+   * 
+   * @see Map
+   */
+  private Map<String, String> createComplexValue(final String[] values) {
+    final Map<String, String> complexValue = new HashMap<String, String>();
+    for (final String val : values) {
+      final String[] tVal = val.split("=");
+      if (StringUtils.isNotEmpty(val) && tVal.length == 2) {
+        complexValue.put(tVal[0], AttributeUtil.unescape(tVal[1]));
+      }
+    }
+    return complexValue;
+  }
+  
+  /**
+   * Checks if value is complex or not
+   * @param values The values to check
+   * @return True if succesful
+   */
+  private boolean isComplexValue(final String[] values) {
+	  boolean isComplex = false;
+	  if (values.length > 0) {	  
+	      final String[] tVal = values[0].split("=");
+	      if (StringUtils.isNotEmpty(values[0]) && tVal.length == 2) {
+	        isComplex = true;
+	      }
+	    }
+	  return isComplex;
+  }
+  
+  /**
+   * Validates and creates the attribute values.
+   * 
+   * @param vals The attribute values.
+   * 
+   * @return The {@link List} with the attribute values.
+   * 
+   * @see List
+   */
+  private List<String> createValues(final String[] vals) {
+    final List<String> values = new ArrayList<String>();
+    for (final String val : vals) {
+      if (StringUtils.isNotEmpty(val)) {
+        values.add(AttributeUtil.unescape(val));
+      }
+    }
+    return values;
+  }
+  
+  /**
+   * Converts the attribute tuple (attrName:attrType...) to the new format.
+   * 
+   * @param tuples The attribute tuples to convert.
+   * 
+   * @return The attribute tuples in the new format.
+   */
+  private String[] convertFormat(final String[] tuples) {
+    final String[] newFormatTuples =
+      new String[AttributeConstants.NUMBER_TUPLES.intValue()];
+    if (tuples != null) {
+      System.arraycopy(tuples, 0, newFormatTuples, 0, tuples.length);
+      
+      for (int i = tuples.length; i < newFormatTuples.length; i++) {
+        if (i == AttributeConstants.ATTR_VALUE_INDEX.intValue()) {
+          newFormatTuples[i] = "[]";
+        } else {
+          newFormatTuples[i] = "";
+        }
+      }
+    }
+    return newFormatTuples;
+  }
+
+  /**
+   * Returns a IPersonalAttributeList of the complex attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the complex attributes contained in this map.
+   */
+  public IPersonalAttributeList getComplexAttributes() {
+	  LOG.info("get complex attributes");
+	  IPersonalAttributeList attrList = new PersonalAttributeList();
+	  for(PersonalAttribute attr: this) {
+		  if(!attr.getComplexValue().isEmpty()) {
+			  attrList.put(attr.getName(), attr);
+			  LOG.info("adding complex attribute:"+attr.getName());
+		  }
+	  }
+	  return attrList;
+  }
+  
+  /**
+   * Returns a IPersonalAttributeList of the mandatory attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map.
+   */
+  public IPersonalAttributeList getSimpleValueAttributes() {
+	  LOG.info("get simple attributes");
+	  IPersonalAttributeList attrList = new PersonalAttributeList();
+	  for(PersonalAttribute attr: this) {
+		  if(attr.getComplexValue().isEmpty()) {
+			  attrList.put(attr.getName(), attr);
+			  LOG.info("adding simple attribute:"+attr.getName());
+		  }
+	  }
+	  return attrList;
+  }
+  
+  
+  
+  /**
+   * Returns a IPersonalAttributeList of the mandatory attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map.
+   */
+  public IPersonalAttributeList getMandatoryAttributes() {
+	  return getAttributesByParam(true);
+  }
+
+  
+  /**
+   * Returns a IPersonalAttributeList of the attributes in this map by parameter value.
+   * 
+   * @param compareValue The boolean to get mandatory (true) or optional (false) attributes. 
+   * 
+   * @return an IPersonalAttributeList of the mandatory attributes contained in this map if compareValue is true or optional otherwise.
+   */
+  private IPersonalAttributeList getAttributesByParam(final boolean compareValue) {
+	  LOG.info("get attributes by param :"+compareValue);
+	  IPersonalAttributeList attrList = new PersonalAttributeList();
+	  for(PersonalAttribute attr: this) {
+		  if(attr.isRequired() == compareValue) {
+			  attrList.put(attr.getName(), attr);
+			  LOG.info("adding attribute:"+attr.getName());
+		  }
+	  }
+	  return attrList;
+  }
+  
+  
+  /**
+   * Returns a IPersonalAttributeList of the optional attributes in this map.
+   * 
+   * @return an IPersonalAttributeList of the optional attributes contained in this map.
+   */
+  public IPersonalAttributeList getOptionalAttributes() {
+	return getAttributesByParam(false);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean hasMissingValues() {
+    for(PersonalAttribute attr: this) {
+      if(attr.isEmptyValue() && attr.isEmptyComplexValue()) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
\ No newline at end of file
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryRequest.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryRequest.java
new file mode 100644
index 000000000..65936f1a8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryRequest.java
@@ -0,0 +1,447 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+import org.apache.log4j.Logger;
+
+public class STORKAttrQueryRequest implements Serializable, Cloneable {
+	
+	/** The Constant serialVersionUID. */
+	  private static final long serialVersionUID = 4778480781609392750L;
+	  
+	  /**
+	   * Logger object.
+	   */
+	  private static final Logger LOG = Logger.getLogger(STORKAttrQueryRequest.class
+	    .getName());
+	  
+	  /** The samlId. */
+	  private String samlId;
+	  	  
+	  /** The destination. */
+	  private String destination;
+	  
+	  /** The assertion consumer service url. */
+	  private String serviceURL;
+
+	  /** The distinguished name. */
+	  private String distinguishedName;
+	  
+	  /** The e id sector share. */
+	  private boolean eIDSectorShare;
+	  
+	  /** The e id cross sector share. */
+	  private boolean eIDCrossSectorShare;
+	  
+	  /** The e id cross border share. */
+	  private boolean eIDCrossBorderShare;
+	  
+	  /** The personal attribute list. */
+	  private IPersonalAttributeList attributeList = new PersonalAttributeList();
+	  
+	  /** The qaa. */
+	  private int qaa;
+	  
+	  /** The token saml. */
+	  private byte[] tokenSaml = new byte[0];
+	  
+	  /** The issuer. */
+	  private String issuer;
+	  
+	  /** The service provider sector. */
+	  private String spSector;
+	  
+	  /** The service provider institution. */
+	  private String spInstitution;
+	  
+	  /** The service provider application. */
+	  private String spApplication;
+	  
+	  /** The service provider country. */
+	  private String spCountry;
+	  
+	  /** The country. */
+	  private String country;
+	  
+	  /** The citizen country code. */
+	  private String citizenCountry;
+	  
+	  /** The Service Provider ID. */
+	  private String sPID;
+	  
+	  /** The Alias used at the keystore for saving this certificate. */
+	  private String alias;
+	  
+	  /**
+	   * Gets the SP's Certificate Alias.
+	   * 
+	   * @return alias The SP's Certificate Alias.
+	   */
+	  public String getAlias() {
+	    return alias;
+	  }
+	  
+	  /**
+	   * Sets the SP's Certificate Alias.
+	   * 
+	   * @param nAlias The SP's Certificate Alias.
+	   */
+	  public void setAlias(final String nAlias) {
+	    this.alias = nAlias;
+	  }
+	  
+	  /**
+	   * Gets the SP ID.
+	   * 
+	   * @return sPID The SP ID.
+	   */
+	  public String getSPID() {
+	    return sPID;
+	  }
+	  
+	  /**
+	   * Sets the SP ID.
+	   * 
+	   * @param sPId The new sp samlId.
+	   */
+	  public void setSPID(final String sPId) {
+	    this.sPID = sPId;
+	  }
+	  
+	  /**
+	   * Gets the citizen country code.
+	   * 
+	   * @return The citizen country code value.
+	   */
+	  public String getCitizenCountryCode() {
+	    return citizenCountry;
+	  }
+	  
+	  /**
+	   * Sets the citizen country code.
+	   * 
+	   * @param countryCode the new citizen country code value.
+	   */
+	  public void setCitizenCountryCode(final String countryCode) {
+	    this.citizenCountry = countryCode;
+	  }
+	  
+	  /**
+	   * Gets the sp country.
+	   * 
+	   * @return The sp country value.
+	   */
+	  public String getSpCountry() {
+	    return spCountry;
+	  }
+	  
+	  /**
+	   * Sets the sp country.
+	   * 
+	   * @param sPCountry the new sp country value.
+	   */
+	  public void setSpCountry(final String sPCountry) {
+	    this.spCountry = sPCountry;
+	  }
+	  
+	  /**
+	   * Gets the issuer.
+	   * 
+	   * @return The issuer value.
+	   */
+	  public String getIssuer() {
+	    return issuer;
+	  }
+	  
+	  /**
+	   * Sets the issuer.
+	   * 
+	   * @param samlIssuer the new issuer value.
+	   */
+	  public void setIssuer(final String samlIssuer) {
+	    this.issuer = samlIssuer;
+	  }
+	  
+	  /**
+	   * Gets the SAML Token.
+	   * 
+	   * @return The SAML Token value.
+	   */
+	  public byte[] getTokenSaml() {
+	    return tokenSaml.clone();
+	  }
+	  
+	  /**
+	   * Sets the SAML Token.
+	   * 
+	   * @param samlToken The new SAML Token value.
+	   */
+	  public void setTokenSaml(final byte[] samlToken) {
+	    if (samlToken != null) {
+	      this.tokenSaml = samlToken.clone();
+	    }
+	  }
+	  
+	  /**
+	   * Gets the country.
+	   * 
+	   * @return The country value.
+	   */
+	  public String getCountry() {
+	    return country;
+	  }
+	  
+	  /**
+	   * Sets the country.
+	   * 
+	   * @param nCountry the new country value.
+	   */
+	  public void setCountry(final String nCountry) {
+	    this.country = nCountry;
+	  }
+	  
+	  /**
+	   * Getter for the qaa value.
+	   * 
+	   * @return The qaa value value.
+	   */
+	  public int getQaa() {
+	    return qaa;
+	  }
+	  
+	  /**
+	   * Setter for the qaa value.
+	   * 
+	   * @param qaaLevel The new qaa value.
+	   */
+	  public void setQaa(final int qaaLevel) {
+	    this.qaa = qaaLevel;
+	  }	  
+	  
+	  /**
+	   * Getter for the serviceURL value.
+	   * 
+	   * @return The serviceURL value.
+	   */
+	  public String getAssertionConsumerServiceURL() {
+	    return serviceURL;
+	  }
+	  
+	  /**
+	   * Setter for the serviceURL value.
+	   * 
+	   * @param newServiceURL the assertion consumer service URL.
+	   */
+	  public void setAssertionConsumerServiceURL(final String newServiceURL) {
+	    this.serviceURL = newServiceURL;
+	  }
+	  
+	  /**
+	   * Getter for the destination value.
+	   * 
+	   * @return The destination value.
+	   */
+	  public String getDestination() {
+	    return destination;
+	  }
+	  
+	  /**
+	   * Setter for the destination value.
+	   * 
+	   * @param detination the new destination value.
+	   */
+	  public void setDestination(final String detination) {
+	    this.destination = detination;
+	  }
+	  
+	  /**
+	   * Getter for the samlId value.
+	   * 
+	   * @return The samlId value.
+	   */
+	  public String getSamlId() {
+	    return samlId;
+	  }
+	  
+	  /**
+	   * Setter for the samlId value.
+	   * 
+	   * @param newSamlId the new samlId value.
+	   */
+	  public void setSamlId(final String newSamlId) {
+	    this.samlId = newSamlId;
+	  }
+	  
+	  
+	  /**
+	   * Getter for the attributeList value.
+	   * 
+	   * @return The attributeList value.
+	   * 
+	   * @see IPersonalAttributeList
+	   */
+	  public IPersonalAttributeList getPersonalAttributeList() {
+	      IPersonalAttributeList personnalAttributeList = null;
+	      try {
+	          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+	      } catch (CloneNotSupportedException e1) {
+	          LOG.trace("[PersonalAttribute] Nothing to do.");
+	      }
+	      return personnalAttributeList;
+	  }
+	  
+	  /**
+	   * Setter for the attributeList value.
+	   * 
+	   * @param attrList the personal attribute list value.
+	   * 
+	   * @see IPersonalAttributeList
+	   */
+	  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+	    if (attrList != null) {
+	      this.attributeList = attrList;
+	    }
+	  }
+	  
+	  /**
+	   * Getter for the distinguishedName value.
+	   * 
+	   * @return The distinguishedName value.
+	   */
+	  public String getDistinguishedName() {
+	    return distinguishedName;
+	  }
+	  
+	  /**
+	   * Setter for the distinguishedName value.
+	   * 
+	   * @param certDN the distinguished name value.
+	   */
+	  public void setDistinguishedName(final String certDN) {
+	    this.distinguishedName = certDN;
+	  }
+	  
+	  /**
+	   * Gets the service provider sector.
+	   * 
+	   * @return The service provider sector value.
+	   */
+	  public String getSpSector() {
+	    return spSector;
+	  }
+	  
+	  /**
+	   * Sets the service provider sector.
+	   * 
+	   * @param samlSPSector the new service provider sector value.
+	   */
+	  public void setSpSector(final String samlSPSector) {
+	    this.spSector = samlSPSector;
+	  }
+	  
+	  /**
+	   * Gets the service provider institution.
+	   * 
+	   * @return The service provider institution value.
+	   */
+	  public String getSpInstitution() {
+	    return spInstitution;
+	  }
+	  
+	  /**
+	   * Sets the service provider institution.
+	   * 
+	   * @param samlSPInst the new service provider institution value.
+	   */
+	  public void setSpInstitution(final String samlSPInst) {
+	    this.spInstitution = samlSPInst;
+	  }
+	  
+	  /**
+	   * Gets the service provider application.
+	   * 
+	   * @return The service provider application value.
+	   */
+	  public String getSpApplication() {
+	    return spApplication;
+	  }
+	  
+	  /**
+	   * Sets the service provider application.
+	   * 
+	   * @param samlSPApp the new service provider application value.
+	   */
+	  public void setSpApplication(final String samlSPApp) {
+	    this.spApplication = samlSPApp;
+	  }
+	  
+	  /**
+	   * Checks if is eId sector share.
+	   * 
+	   * @return true, if is eId sector share.
+	   */
+	  public boolean isEIDSectorShare() {
+	    return eIDSectorShare;
+	  }
+	  
+	  /**
+	   * Sets the eId sector share.
+	   * 
+	   * @param eIdSectorShare the new eId sector share value.
+	   */
+	  public void setEIDSectorShare(final boolean eIdSectorShare) {
+	    this.eIDSectorShare = eIdSectorShare;
+	  }
+	  
+	  /**
+	   * Checks if is eId cross sector share.
+	   * 
+	   * @return true, if is eId cross sector share.
+	   */
+	  public boolean isEIDCrossSectorShare() {
+	    return eIDCrossSectorShare;
+	  }
+	  
+	  /**
+	   * Sets the eId cross sector share.
+	   * 
+	   * @param eIdCrossSectorShare the new eId cross sector share value.
+	   */
+	  public void setEIDCrossSectorShare(final boolean eIdCrossSectorShare) {
+	    this.eIDCrossSectorShare = eIdCrossSectorShare;
+	  }
+	  
+	  /**
+	   * Checks if is eId cross border share.
+	   * 
+	   * @return true, if is eId cross border share.
+	   */
+	  public boolean isEIDCrossBorderShare() {
+	    return eIDCrossBorderShare;
+	  }
+	  
+	  /**
+	   * Sets the eId cross border share.
+	   * 
+	   * @param eIdCrossBorderShare the new eId cross border share value.
+	   */
+	  public void setEIDCrossBorderShare(final boolean eIdCrossBorderShare) {
+	    this.eIDCrossBorderShare = eIdCrossBorderShare;
+	  }
+	  
+	  /**
+	   * Returns a copy of this <tt>STORKAttrQueryRequest</tt> instance.
+	   * 
+	   * @return The copy of this STORKAttrQueryRequest.
+	   * @throws CloneNotSupportedException on clone exception
+	   */
+	  @Override
+	  public Object clone() throws CloneNotSupportedException{
+		  STORKAttrQueryRequest storkAttrQueryReq = null;
+	      storkAttrQueryReq = (STORKAttrQueryRequest) super.clone();
+	      storkAttrQueryReq.setPersonalAttributeList(getPersonalAttributeList());
+	      storkAttrQueryReq.setTokenSaml(getTokenSaml());
+	    return storkAttrQueryReq;
+	  }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryResponse.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryResponse.java
new file mode 100644
index 000000000..1974f4f66
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAttrQueryResponse.java
@@ -0,0 +1,392 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
+import org.opensaml.saml2.core.Assertion;
+
+public class STORKAttrQueryResponse implements Serializable {
+  
+  /** The Constant serialVersionUID. */
+  private static final long serialVersionUID = 7653893041391541235L;
+
+  /** Response Id. */
+  private String samlId;
+  
+  /** Request failed? */
+  private boolean fail;
+  
+  /** Status code. */
+  private String statusCode;
+  
+  /** Secondary status code. */
+  private String subStatusCode;
+  
+  /** Audience restriction. */
+  private transient String audienceRest;
+  
+  /** Error message. */
+  private String message;
+  
+  /** Id of the request that originated this response. */
+  private String inResponseTo;
+  
+  /** Expiration date. */
+  private DateTime notOnOrAfter;
+  
+  /** Creation date. */
+  private DateTime notBefore;
+  
+  /** The SAML token. */
+  private byte[] tokenSaml = new byte[0];
+  
+  /** Country. */
+  private String country;
+  
+  /** The complete assertion **/
+  private Assertion assertion;
+  
+  /** List of all assertions in response **/
+  private List<Assertion> assertions;
+  
+  /** The complete list from all assertions **/
+  private transient IPersonalAttributeList totalAttributeList = new PersonalAttributeList();
+  
+  /** All personal attribute lists **/
+  private List<IPersonalAttributeList> attributeLists;
+   
+  /** Citizen's personal attribute list. */
+  private IPersonalAttributeList attributeList = new PersonalAttributeList();
+
+    /**
+     * Logger object.
+     */
+    private static final Logger LOG = Logger.getLogger(STORKAttrQueryResponse.class.getName());
+  
+  /**
+   * Getter for the subStatusCode.
+   * 
+   * @return The subStatusCode value.
+   */
+  public String getSubStatusCode() {
+    return subStatusCode;
+  }
+  
+  /**
+   * Setter for the subStatusCode.
+   * 
+   * @param samlSubStatusCode the new subStatusCode value.
+   */
+  public void setSubStatusCode(final String samlSubStatusCode) {
+    this.subStatusCode = samlSubStatusCode;
+  }
+  
+  /**
+   * Getter for audienceRest.
+   * 
+   * @return The audienceRest value.
+   */
+  public String getAudienceRestriction() {
+    return audienceRest;
+  }
+  
+  /**
+   * Setter for audienceRest.
+   * 
+   * @param audRest the new audienceRest value.
+   */
+  public void setAudienceRestriction(final String audRest) {
+    this.audienceRest = audRest;
+  }
+  
+  /**
+   * Getter for the samlToken.
+   * 
+   * @return The samlToken value.
+   */
+  public byte[] getTokenSaml() {
+    return tokenSaml.clone();
+  }
+  
+  /**
+   * Setter for samlToken.
+   * 
+   * @param samlToken the new tokenSaml value.
+   */
+  public void setTokenSaml(final byte[] samlToken) {
+    if (samlToken != null) {
+      this.tokenSaml = samlToken.clone();
+    }
+  }
+  
+  /**
+   * Getter for the country name.
+   * 
+   * @return The country name value.
+   */
+  public String getCountry() {
+    return country;
+  }
+  
+  /**
+   * Setter for the country name.
+   * 
+   * @param cCountry the new country name value.
+   */
+  public void setCountry(final String cCountry) {
+    this.country = cCountry;
+  }
+  
+  /**
+   * Getter for pal value.
+   * 
+   * @return The pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.attributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for the inResponseTo value.
+   * 
+   * @return The inResponseTo value.
+   */
+  public String getInResponseTo() {
+    return inResponseTo;
+  }
+  
+  /**
+   * Setter for the inResponseTo value.
+   * 
+   * @param samlInResponseTo the new inResponseTo value.
+   */
+  public void setInResponseTo(final String samlInResponseTo) {
+    this.inResponseTo = samlInResponseTo;
+  }
+  
+  /**
+   * Getter for the fail value.
+   * 
+   * @return The fail value.
+   */
+  public boolean isFail() {
+    return fail;
+  }
+  
+  /**
+   * Setter for the fail value.
+   * 
+   * @param failVal the new fail value.
+   */
+  public void setFail(final boolean failVal) {
+    this.fail = failVal;
+  }
+  
+  /**
+   * Getter for the message value.
+   * 
+   * @return The message value.
+   */
+  public String getMessage() {
+    return message;
+  }
+  
+  /**
+   * Setter for the message value.
+   * 
+   * @param msg the new message value.
+   */
+  public void setMessage(final String msg) {
+    this.message = msg;
+  }
+  
+  /**
+   * Getter for the statusCode value.
+   * 
+   * @return The statusCode value.
+   */
+  public String getStatusCode() {
+    return statusCode;
+  }
+  
+  /**
+   * Setter for the statusCode value.
+   * 
+   * @param status the new statusCode value.
+   */
+  public void setStatusCode(final String status) {
+    this.statusCode = status;
+  }
+  
+  /**
+   * Getter for the samlId value.
+   * 
+   * @return The samlId value.
+   */
+  public String getSamlId() {
+    return samlId;
+  }
+  
+  /**
+   * Setter for the samlId value.
+   * 
+   * @param nSamlId the new samlId value.
+   */
+  public void setSamlId(final String nSamlId) {
+    this.samlId = nSamlId;
+  }
+  
+  /**
+   * Getter for the notOnOrAfter value.
+   * 
+   * @return The notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotOnOrAfter() {
+    return this.notOnOrAfter;
+  }
+  
+  /**
+   * Setter for the notOnOrAfter value.
+   * 
+   * @param nOnOrAfter the new notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public void setNotOnOrAfter(final DateTime nOnOrAfter) {
+    this.notOnOrAfter = nOnOrAfter;
+  }
+  
+  /**
+   * Getter for the notBefore value.
+   * 
+   * @return The notBefore value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotBefore() {
+    return notBefore;
+  }
+  
+  /**
+   * Setter for the notBefore value.
+   * 
+   * @param nBefore the new notBefore value.
+   * 
+   * @see DateTime
+   */
+  public void setNotBefore(final DateTime nBefore) {
+    this.notBefore = nBefore;
+  }
+  
+  /** Get the assertion from the response **/
+  public Assertion getAssertion() {
+	  return assertion;
+  }
+  
+  /** Set the assertion in the response **/
+  public void setAssertion(final Assertion nAssertion) {
+	  this.assertion = nAssertion;
+  }
+  
+  public void setAssertions(List<Assertion> newAssert) {
+	  this.assertions = newAssert;
+  }
+  
+  public List<Assertion> getAssertions() {
+	  return assertions;
+  }
+  
+  /**
+   * Getter for the toal pal value.
+   * 
+   * @return The total pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getTotalPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) totalAttributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the total Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setTotalPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.totalAttributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for personal attribute lists
+   * 
+   * @return The lists
+   * 
+   * @see PersonalAttributeList
+   */
+  public List<IPersonalAttributeList> getPersonalAttributeLists() {
+      return attributeLists;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeLists(final List<IPersonalAttributeList> attrLists) {
+    if (attrLists != null) {
+      this.attributeLists = attrLists;
+    }
+  }
+  
+}
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnRequest.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnRequest.java
new file mode 100644
index 000000000..2354d0eb1
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnRequest.java
@@ -0,0 +1,495 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+import org.apache.log4j.Logger;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * STORKAuthnRequest (SAML Token Request).
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.21 $, $Date: 2011-02-17 22:44:34 $
+ */
+public final class STORKAuthnRequest implements Serializable, Cloneable {
+  
+  /** The Constant serialVersionUID. */
+  private static final long serialVersionUID = 4778480781609392750L;
+  
+  /**
+   * Logger object.
+   */
+  private static final Logger LOG = Logger.getLogger(STORKAuthnRequest.class
+    .getName());
+  
+  /** The samlId. */
+  private String samlId;
+  
+  /** The assertion consumer service url. */
+  private String serviceURL;
+  
+  /** The destination. */
+  private String destination;
+  
+  /** The provider name. */
+  private String providerName;
+  
+  /** The distinguished name. */
+  private String distinguishedName;
+  
+  /** The e id sector share. */
+  private boolean eIDSectorShare;
+  
+  /** The e id cross sector share. */
+  private boolean eIDCrossSectorShare;
+  
+  /** The e id cross border share. */
+  private boolean eIDCrossBorderShare;
+  
+  /** The personal attribute list. */
+  private IPersonalAttributeList attributeList = new PersonalAttributeList();
+  
+  /** The qaa. */
+  private int qaa;
+  
+  /** The token saml. */
+  private byte[] tokenSaml = new byte[0];
+  
+  /** The issuer. */
+  private String issuer;
+  
+  /** The service provider sector. */
+  private String spSector;
+  
+  /** The service provider institution. */
+  private String spInstitution;
+  
+  /** The service provider application. */
+  private String spApplication;
+  
+  /** The service provider country. */
+  private String spCountry;
+  
+  /** The country. */
+  private String country;
+  
+  /** The citizen country code. */
+  private String citizenCountry;
+  
+  /** The Service Provider ID. */
+  private String sPID;
+  
+  /** The Alias used at the keystore for saving this certificate. */
+  private String alias;
+  
+  /**
+   * Gets the SP's Certificate Alias.
+   * 
+   * @return alias The SP's Certificate Alias.
+   */
+  public String getAlias() {
+    return alias;
+  }
+  
+  /**
+   * Sets the SP's Certificate Alias.
+   * 
+   * @param nAlias The SP's Certificate Alias.
+   */
+  public void setAlias(final String nAlias) {
+    this.alias = nAlias;
+  }
+  
+  /**
+   * Gets the SP ID.
+   * 
+   * @return sPID The SP ID.
+   */
+  public String getSPID() {
+    return sPID;
+  }
+  
+  /**
+   * Sets the SP ID.
+   * 
+   * @param sPId The new sp samlId.
+   */
+  public void setSPID(final String sPId) {
+    this.sPID = sPId;
+  }
+  
+  /**
+   * Gets the citizen country code.
+   * 
+   * @return The citizen country code value.
+   */
+  public String getCitizenCountryCode() {
+    return citizenCountry;
+  }
+  
+  /**
+   * Sets the citizen country code.
+   * 
+   * @param countryCode the new citizen country code value.
+   */
+  public void setCitizenCountryCode(final String countryCode) {
+    this.citizenCountry = countryCode;
+  }
+  
+  /**
+   * Gets the sp country.
+   * 
+   * @return The sp country value.
+   */
+  public String getSpCountry() {
+    return spCountry;
+  }
+  
+  /**
+   * Sets the sp country.
+   * 
+   * @param sPCountry the new sp country value.
+   */
+  public void setSpCountry(final String sPCountry) {
+    this.spCountry = sPCountry;
+  }
+  
+  /**
+   * Gets the issuer.
+   * 
+   * @return The issuer value.
+   */
+  public String getIssuer() {
+    return issuer;
+  }
+  
+  /**
+   * Sets the issuer.
+   * 
+   * @param samlIssuer the new issuer value.
+   */
+  public void setIssuer(final String samlIssuer) {
+    this.issuer = samlIssuer;
+  }
+  
+  /**
+   * Gets the SAML Token.
+   * 
+   * @return The SAML Token value.
+   */
+  public byte[] getTokenSaml() {
+    return tokenSaml.clone();
+  }
+  
+  /**
+   * Sets the SAML Token.
+   * 
+   * @param samlToken The new SAML Token value.
+   */
+  public void setTokenSaml(final byte[] samlToken) {
+    if (samlToken != null) {
+      this.tokenSaml = samlToken.clone();
+    }
+  }
+  
+  /**
+   * Gets the country.
+   * 
+   * @return The country value.
+   */
+  public String getCountry() {
+    return country;
+  }
+  
+  /**
+   * Sets the country.
+   * 
+   * @param nCountry the new country value.
+   */
+  public void setCountry(final String nCountry) {
+    this.country = nCountry;
+  }
+  
+  /**
+   * Getter for the qaa value.
+   * 
+   * @return The qaa value value.
+   */
+  public int getQaa() {
+    return qaa;
+  }
+  
+  /**
+   * Setter for the qaa value.
+   * 
+   * @param qaaLevel The new qaa value.
+   */
+  public void setQaa(final int qaaLevel) {
+    this.qaa = qaaLevel;
+  }
+  
+  /**
+   * Getter for the serviceURL value.
+   * 
+   * @return The serviceURL value.
+   */
+  public String getAssertionConsumerServiceURL() {
+    return serviceURL;
+  }
+  
+  /**
+   * Setter for the serviceURL value.
+   * 
+   * @param newServiceURL the assertion consumer service URL.
+   */
+  public void setAssertionConsumerServiceURL(final String newServiceURL) {
+    this.serviceURL = newServiceURL;
+  }
+  
+  /**
+   * Getter for the destination value.
+   * 
+   * @return The destination value.
+   */
+  public String getDestination() {
+    return destination;
+  }
+  
+  /**
+   * Setter for the destination value.
+   * 
+   * @param detination the new destination value.
+   */
+  public void setDestination(final String detination) {
+    this.destination = detination;
+  }
+  
+  /**
+   * Getter for the samlId value.
+   * 
+   * @return The samlId value.
+   */
+  public String getSamlId() {
+    return samlId;
+  }
+  
+  /**
+   * Setter for the samlId value.
+   * 
+   * @param newSamlId the new samlId value.
+   */
+  public void setSamlId(final String newSamlId) {
+    this.samlId = newSamlId;
+  }
+  
+  /**
+   * Getter for the providerName value.
+   * 
+   * @return The provider name value.
+   */
+  public String getProviderName() {
+    return providerName;
+  }
+  
+  /**
+   * Setter for the providerName value.
+   * 
+   * @param samlProvider the provider name value.
+   */
+  public void setProviderName(final String samlProvider) {
+    this.providerName = samlProvider;
+  }
+  
+  /**
+   * Getter for the attributeList value.
+   * 
+   * @return The attributeList value.
+   * 
+   * @see IPersonalAttributeList
+   */
+  public IPersonalAttributeList getPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the attributeList value.
+   * 
+   * @param attrList the personal attribute list value.
+   * 
+   * @see IPersonalAttributeList
+   */
+  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.attributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for the distinguishedName value.
+   * 
+   * @return The distinguishedName value.
+   */
+  public String getDistinguishedName() {
+    return distinguishedName;
+  }
+  
+  /**
+   * Setter for the distinguishedName value.
+   * 
+   * @param certDN the distinguished name value.
+   */
+  public void setDistinguishedName(final String certDN) {
+    this.distinguishedName = certDN;
+  }
+  
+  /**
+   * Gets the service provider sector.
+   * 
+   * @return The service provider sector value.
+   */
+  public String getSpSector() {
+    return spSector;
+  }
+  
+  /**
+   * Sets the service provider sector.
+   * 
+   * @param samlSPSector the new service provider sector value.
+   */
+  public void setSpSector(final String samlSPSector) {
+    this.spSector = samlSPSector;
+  }
+  
+  /**
+   * Gets the service provider institution.
+   * 
+   * @return The service provider institution value.
+   */
+  public String getSpInstitution() {
+    return spInstitution;
+  }
+  
+  /**
+   * Sets the service provider institution.
+   * 
+   * @param samlSPInst the new service provider institution value.
+   */
+  public void setSpInstitution(final String samlSPInst) {
+    this.spInstitution = samlSPInst;
+  }
+  
+  /**
+   * Gets the service provider application.
+   * 
+   * @return The service provider application value.
+   */
+  public String getSpApplication() {
+    return spApplication;
+  }
+  
+  /**
+   * Sets the service provider application.
+   * 
+   * @param samlSPApp the new service provider application value.
+   */
+  public void setSpApplication(final String samlSPApp) {
+    this.spApplication = samlSPApp;
+  }
+  
+  /**
+   * Checks if is eId sector share.
+   * 
+   * @return true, if is eId sector share.
+   */
+  public boolean isEIDSectorShare() {
+    return eIDSectorShare;
+  }
+  
+  /**
+   * Sets the eId sector share.
+   * 
+   * @param eIdSectorShare the new eId sector share value.
+   */
+  public void setEIDSectorShare(final boolean eIdSectorShare) {
+    this.eIDSectorShare = eIdSectorShare;
+  }
+  
+  /**
+   * Checks if is eId cross sector share.
+   * 
+   * @return true, if is eId cross sector share.
+   */
+  public boolean isEIDCrossSectorShare() {
+    return eIDCrossSectorShare;
+  }
+  
+  /**
+   * Sets the eId cross sector share.
+   * 
+   * @param eIdCrossSectorShare the new eId cross sector share value.
+   */
+  public void setEIDCrossSectorShare(final boolean eIdCrossSectorShare) {
+    this.eIDCrossSectorShare = eIdCrossSectorShare;
+  }
+  
+  /**
+   * Checks if is eId cross border share.
+   * 
+   * @return true, if is eId cross border share.
+   */
+  public boolean isEIDCrossBorderShare() {
+    return eIDCrossBorderShare;
+  }
+  
+  /**
+   * Sets the eId cross border share.
+   * 
+   * @param eIdCrossBorderShare the new eId cross border share value.
+   */
+  public void setEIDCrossBorderShare(final boolean eIdCrossBorderShare) {
+    this.eIDCrossBorderShare = eIdCrossBorderShare;
+  }
+  
+  /**
+   * Returns a copy of this <tt>STORKAuthnRequest</tt> instance.
+   * 
+   * @return The copy of this STORKAuthnRequest.
+   * @throws CloneNotSupportedException on clone exception
+   */
+  @Override
+  public Object clone() throws CloneNotSupportedException{
+    STORKAuthnRequest storkAuthnReq = null;
+    try {
+      storkAuthnReq = (STORKAuthnRequest) super.clone();
+      storkAuthnReq.setPersonalAttributeList(getPersonalAttributeList());
+      storkAuthnReq.setTokenSaml(getTokenSaml());
+    } catch (final CloneNotSupportedException e) {
+      // assert false;
+      LOG.trace("[PersonalAttribute] Nothing to do.");
+    }
+    
+    return storkAuthnReq;
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnResponse.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnResponse.java
new file mode 100644
index 000000000..c4a3e2b6c
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKAuthnResponse.java
@@ -0,0 +1,387 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
+import org.opensaml.saml2.core.Assertion;
+
+/**
+ * This class is a bean used to store the information relative to the
+ * STORKAuthnResponse.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.15 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class STORKAuthnResponse implements Serializable {
+  
+  /** The Constant serialVersionUID. */
+  private static final long serialVersionUID = -9100982727074068660L;
+
+  /** Response Id. */
+  private String samlId;
+  
+  /** Authentication failed? */
+  private boolean fail;
+  
+  /** Status code. */
+  private String statusCode;
+  
+  /** Secondary status code. */
+  private String subStatusCode;
+  
+  /** Audience restriction. */
+  private transient String audienceRest;
+  
+  /** Error message. */
+  private String message;
+  
+  /** Id of the request that originated this response. */
+  private String inResponseTo;
+  
+  /** Expiration date. */
+  private DateTime notOnOrAfter;
+  
+  /** Creation date. */
+  private DateTime notBefore;
+  
+  /** The SAML token. */
+  private byte[] tokenSaml = new byte[0];
+  
+  /** Country. */
+  private String country;
+  
+  /** Citizen's personal attribute list. */
+  private IPersonalAttributeList attributeList = new PersonalAttributeList();
+  
+  /** List of all assertions in response **/
+  private List<Assertion> assertions;
+  
+  /** The complete list from all assertions **/
+  private transient IPersonalAttributeList totalAttributeList = new PersonalAttributeList();
+  
+  /** All personal attribute lists **/
+  private List<IPersonalAttributeList> attributeLists;
+  
+    /**
+     * Logger object.
+     */
+    private static final Logger LOG = Logger.getLogger(STORKAuthnResponse.class.getName());
+  
+  /**
+   * Getter for the subStatusCode.
+   * 
+   * @return The subStatusCode value.
+   */
+  public String getSubStatusCode() {
+    return subStatusCode;
+  }
+  
+  /**
+   * Setter for the subStatusCode.
+   * 
+   * @param samlSubStatusCode the new subStatusCode value.
+   */
+  public void setSubStatusCode(final String samlSubStatusCode) {
+    this.subStatusCode = samlSubStatusCode;
+  }
+  
+  /**
+   * Getter for audienceRest.
+   * 
+   * @return The audienceRest value.
+   */
+  public String getAudienceRestriction() {
+    return audienceRest;
+  }
+  
+  /**
+   * Setter for audienceRest.
+   * 
+   * @param audRest the new audienceRest value.
+   */
+  public void setAudienceRestriction(final String audRest) {
+    this.audienceRest = audRest;
+  }
+  
+  /**
+   * Getter for the samlToken.
+   * 
+   * @return The samlToken value.
+   */
+  public byte[] getTokenSaml() {
+    return tokenSaml.clone();
+  }
+  
+  /**
+   * Setter for samlToken.
+   * 
+   * @param samlToken the new tokenSaml value.
+   */
+  public void setTokenSaml(final byte[] samlToken) {
+    if (samlToken != null) {
+      this.tokenSaml = samlToken.clone();
+    }
+  }
+  
+  /**
+   * Getter for the country name.
+   * 
+   * @return The country name value.
+   */
+  public String getCountry() {
+    return country;
+  }
+  
+  /**
+   * Setter for the country name.
+   * 
+   * @param cCountry the new country name value.
+   */
+  public void setCountry(final String cCountry) {
+    this.country = cCountry;
+  }
+  
+  /**
+   * Getter for pal value.
+   * 
+   * @return The pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) attributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.attributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for the inResponseTo value.
+   * 
+   * @return The inResponseTo value.
+   */
+  public String getInResponseTo() {
+    return inResponseTo;
+  }
+  
+  /**
+   * Setter for the inResponseTo value.
+   * 
+   * @param samlInResponseTo the new inResponseTo value.
+   */
+  public void setInResponseTo(final String samlInResponseTo) {
+    this.inResponseTo = samlInResponseTo;
+  }
+  
+  /**
+   * Getter for the fail value.
+   * 
+   * @return The fail value.
+   */
+  public boolean isFail() {
+    return fail;
+  }
+  
+  /**
+   * Setter for the fail value.
+   * 
+   * @param failVal the new fail value.
+   */
+  public void setFail(final boolean failVal) {
+    this.fail = failVal;
+  }
+  
+  /**
+   * Getter for the message value.
+   * 
+   * @return The message value.
+   */
+  public String getMessage() {
+    return message;
+  }
+  
+  /**
+   * Setter for the message value.
+   * 
+   * @param msg the new message value.
+   */
+  public void setMessage(final String msg) {
+    this.message = msg;
+  }
+  
+  /**
+   * Getter for the statusCode value.
+   * 
+   * @return The statusCode value.
+   */
+  public String getStatusCode() {
+    return statusCode;
+  }
+  
+  /**
+   * Setter for the statusCode value.
+   * 
+   * @param status the new statusCode value.
+   */
+  public void setStatusCode(final String status) {
+    this.statusCode = status;
+  }
+  
+  /**
+   * Getter for the samlId value.
+   * 
+   * @return The samlId value.
+   */
+  public String getSamlId() {
+    return samlId;
+  }
+  
+  /**
+   * Setter for the samlId value.
+   * 
+   * @param nSamlId the new samlId value.
+   */
+  public void setSamlId(final String nSamlId) {
+    this.samlId = nSamlId;
+  }
+  
+  /**
+   * Getter for the notOnOrAfter value.
+   * 
+   * @return The notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotOnOrAfter() {
+    return this.notOnOrAfter;
+  }
+  
+  /**
+   * Setter for the notOnOrAfter value.
+   * 
+   * @param nOnOrAfter the new notOnOrAfter value.
+   * 
+   * @see DateTime
+   */
+  public void setNotOnOrAfter(final DateTime nOnOrAfter) {
+    this.notOnOrAfter = nOnOrAfter;
+  }
+  
+  /**
+   * Getter for the notBefore value.
+   * 
+   * @return The notBefore value.
+   * 
+   * @see DateTime
+   */
+  public DateTime getNotBefore() {
+    return notBefore;
+  }
+  
+  /**
+   * Setter for the notBefore value.
+   * 
+   * @param nBefore the new notBefore value.
+   * 
+   * @see DateTime
+   */
+  public void setNotBefore(final DateTime nBefore) {
+    this.notBefore = nBefore;
+  }
+  
+  public void setAssertions(List<Assertion> newAssert) {
+	  this.assertions = newAssert;
+  }
+  
+  public List<Assertion> getAssertions() {
+	  return assertions;
+  }
+  
+  /**
+   * Getter for the toal pal value.
+   * 
+   * @return The total pal value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public IPersonalAttributeList getTotalPersonalAttributeList() {
+      IPersonalAttributeList personnalAttributeList = null;
+      try {
+          personnalAttributeList = (IPersonalAttributeList) totalAttributeList.clone();
+      } catch (CloneNotSupportedException e1) {
+          LOG.trace("[PersonalAttribute] Nothing to do.");
+      }
+      return personnalAttributeList;
+  }
+  
+  /**
+   * Setter for the total Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setTotalPersonalAttributeList(final IPersonalAttributeList attrList) {
+    if (attrList != null) {
+      this.totalAttributeList = attrList;
+    }
+  }
+  
+  /**
+   * Getter for personal attribute lists
+   * 
+   * @return The lists
+   * 
+   * @see PersonalAttributeList
+   */
+  public List<IPersonalAttributeList> getPersonalAttributeLists() {
+      return attributeLists;
+  }
+  
+  /**
+   * Setter for the Personal Attribute List value.
+   * 
+   * @param attrList the new value.
+   * 
+   * @see PersonalAttributeList
+   */
+  public void setPersonalAttributeLists(final List<IPersonalAttributeList> attrLists) {
+    if (attrLists != null) {
+      this.attributeLists = attrLists;
+    }
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutRequest.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutRequest.java
new file mode 100644
index 000000000..44811aee2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutRequest.java
@@ -0,0 +1,197 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+public class STORKLogoutRequest implements Serializable, Cloneable {
+	private static final long serialVersionUID = 4778480781609392750L;
+	  
+	  /** The samlId. */
+	  private String samlId;
+	  	  
+	  /** The destination. */
+	  private String destination;
+
+	  /** The distinguished name. */
+	  private String distinguishedName;
+	  	   
+	  /** The qaa. */
+	  private int qaa;
+	  
+	  /** The token saml. */
+	  private byte[] tokenSaml = new byte[0];
+	  
+	  /** The issuer. */
+	  private String issuer;	 
+	  
+	  /** The country. */
+	  private String country;
+	    
+	  /** The Alias used at the keystore for saving this certificate. */
+	  private String alias;
+	
+	  /** The ID of principal as known to SP **/
+	  private String spProvidedId;
+	  
+	  /**
+	   * Gets the SP's Certificate Alias.
+	   * 
+	   * @return alias The SP's Certificate Alias.
+	   */
+	  public String getAlias() {
+	    return alias;
+	  }
+	  
+	  /**
+	   * Sets the SP's Certificate Alias.
+	   * 
+	   * @param nAlias The SP's Certificate Alias.
+	   */
+	  public void setAlias(final String nAlias) {
+	    this.alias = nAlias;
+	  }
+	  
+	  /**
+	   * Gets the issuer.
+	   * 
+	   * @return The issuer value.
+	   */
+	  public String getIssuer() {
+	    return issuer;
+	  }
+	  
+	  /**
+	   * Sets the issuer.
+	   * 
+	   * @param samlIssuer the new issuer value.
+	   */
+	  public void setIssuer(final String samlIssuer) {
+	    this.issuer = samlIssuer;
+	  }
+	  
+	  /**
+	   * Gets the SAML Token.
+	   * 
+	   * @return The SAML Token value.
+	   */
+	  public byte[] getTokenSaml() {
+	    return tokenSaml.clone();
+	  }
+	  
+	  /**
+	   * Sets the SAML Token.
+	   * 
+	   * @param samlToken The new SAML Token value.
+	   */
+	  public void setTokenSaml(final byte[] samlToken) {
+	    if (samlToken != null) {
+	      this.tokenSaml = samlToken.clone();
+	    }
+	  }
+	  
+	  /**
+	   * Gets the country.
+	   * 
+	   * @return The country value.
+	   */
+	  public String getCountry() {
+	    return country;
+	  }
+	  
+	  /**
+	   * Sets the country.
+	   * 
+	   * @param nCountry the new country value.
+	   */
+	  public void setCountry(final String nCountry) {
+	    this.country = nCountry;
+	  }
+	  
+	  /**
+	   * Getter for the qaa value.
+	   * 
+	   * @return The qaa value value.
+	   */
+	  public int getQaa() {
+	    return qaa;
+	  }
+	  
+	  /**
+	   * Setter for the qaa value.
+	   * 
+	   * @param qaaLevel The new qaa value.
+	   */
+	  public void setQaa(final int qaaLevel) {
+	    this.qaa = qaaLevel;
+	  }	  
+	  
+	  /**
+	   * Getter for the destination value.
+	   * 
+	   * @return The destination value.
+	   */
+	  public String getDestination() {
+	    return destination;
+	  }
+	  
+	  /**
+	   * Setter for the destination value.
+	   * 
+	   * @param detination the new destination value.
+	   */
+	  public void setDestination(final String detination) {
+	    this.destination = detination;
+	  }
+	  
+	  /**
+	   * Getter for the samlId value.
+	   * 
+	   * @return The samlId value.
+	   */
+	  public String getSamlId() {
+	    return samlId;
+	  }
+	  
+	  /**
+	   * Setter for the samlId value.
+	   * 
+	   * @param newSamlId the new samlId value.
+	   */
+	  public void setSamlId(final String newSamlId) {
+	    this.samlId = newSamlId;
+	  }
+	  
+	  /**
+	   * Getter for the distinguishedName value.
+	   * 
+	   * @return The distinguishedName value.
+	   */
+	  public String getDistinguishedName() {
+	    return distinguishedName;
+	  }
+	  
+	  /**
+	   * Setter for the distinguishedName value.
+	   * 
+	   * @param certDN the distinguished name value.
+	   */
+	  public void setDistinguishedName(final String certDN) {
+	    this.distinguishedName = certDN;
+	  }
+	  
+	  /** Getter for spProvidedId **/
+	  public String getSpProvidedId() {
+		  return spProvidedId;
+	  }
+	  
+	  public void setSpProvidedId(final String nSpProvidedId) {
+		  this.spProvidedId = nSpProvidedId;
+	  }
+	  
+	  @Override
+	  public Object clone() throws CloneNotSupportedException{
+		  STORKLogoutRequest storkLogoutRequest = null;
+	      storkLogoutRequest = (STORKLogoutRequest) super.clone();
+	      storkLogoutRequest.setTokenSaml(getTokenSaml());
+	    return storkLogoutRequest;
+	  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutResponse.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutResponse.java
new file mode 100644
index 000000000..21b53a652
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKLogoutResponse.java
@@ -0,0 +1,250 @@
+package eu.stork.peps.auth.commons;
+
+import java.io.Serializable;
+
+public class STORKLogoutResponse implements Serializable, Cloneable {
+	private static final long serialVersionUID = 4778480781609392750L;
+	  
+	  /** The samlId. */
+	  private String samlId;
+	  	  
+	  /** The destination. */
+	  private String destination;
+
+	  /** The distinguished name. */
+	  private String distinguishedName;
+	  
+	  /** The token saml. */
+	  private byte[] tokenSaml = new byte[0];
+	  
+	  /** The issuer. */
+	  private String issuer;	 
+	  
+	  /** The country. */
+	  private String country;
+	    
+	  /** The Alias used at the keystore for saving this certificate. */
+	  private String alias;
+	
+	  /** Status code. */
+	  private String statusCode;
+	  
+	  /** Secondary status code. */
+	  private String subStatusCode;
+	  
+	  /** Status message. */
+	  private String statusMessage;
+	  
+	  /** Logout failed? */
+	  private boolean fail;
+	  
+	  /**
+	   * Gets the SP's Certificate Alias.
+	   * 
+	   * @return alias The SP's Certificate Alias.
+	   */
+	  public String getAlias() {
+	    return alias;
+	  }
+	  
+	  /**
+	   * Sets the SP's Certificate Alias.
+	   * 
+	   * @param nAlias The SP's Certificate Alias.
+	   */
+	  public void setAlias(final String nAlias) {
+	    this.alias = nAlias;
+	  }
+	  
+	  /**
+	   * Gets the issuer.
+	   * 
+	   * @return The issuer value.
+	   */
+	  public String getIssuer() {
+	    return issuer;
+	  }
+	  
+	  /**
+	   * Sets the issuer.
+	   * 
+	   * @param samlIssuer the new issuer value.
+	   */
+	  public void setIssuer(final String samlIssuer) {
+	    this.issuer = samlIssuer;
+	  }
+	  
+	  /**
+	   * Gets the SAML Token.
+	   * 
+	   * @return The SAML Token value.
+	   */
+	  public byte[] getTokenSaml() {
+	    return tokenSaml.clone();
+	  }
+	  
+	  /**
+	   * Sets the SAML Token.
+	   * 
+	   * @param samlToken The new SAML Token value.
+	   */
+	  public void setTokenSaml(final byte[] samlToken) {
+	    if (samlToken != null) {
+	      this.tokenSaml = samlToken.clone();
+	    }
+	  }
+	  
+	  /**
+	   * Gets the country.
+	   * 
+	   * @return The country value.
+	   */
+	  public String getCountry() {
+	    return country;
+	  }
+	  
+	  /**
+	   * Sets the country.
+	   * 
+	   * @param nCountry the new country value.
+	   */
+	  public void setCountry(final String nCountry) {
+	    this.country = nCountry;
+	  }	    
+	  
+	  /**
+	   * Getter for the destination value.
+	   * 
+	   * @return The destination value.
+	   */
+	  public String getDestination() {
+	    return destination;
+	  }
+	  
+	  /**
+	   * Setter for the destination value.
+	   * 
+	   * @param detination the new destination value.
+	   */
+	  public void setDestination(final String detination) {
+	    this.destination = detination;
+	  }
+	  
+	  /**
+	   * Getter for the samlId value.
+	   * 
+	   * @return The samlId value.
+	   */
+	  public String getSamlId() {
+	    return samlId;
+	  }
+	  
+	  /**
+	   * Setter for the samlId value.
+	   * 
+	   * @param newSamlId the new samlId value.
+	   */
+	  public void setSamlId(final String newSamlId) {
+	    this.samlId = newSamlId;
+	  }
+	  
+	  /**
+	   * Getter for the distinguishedName value.
+	   * 
+	   * @return The distinguishedName value.
+	   */
+	  public String getDistinguishedName() {
+	    return distinguishedName;
+	  }
+	  
+	  /**
+	   * Setter for the distinguishedName value.
+	   * 
+	   * @param certDN the distinguished name value.
+	   */
+	  public void setDistinguishedName(final String certDN) {
+	    this.distinguishedName = certDN;
+	  }
+	  	  
+	  
+	  /**
+	   * Getter for the fail value.
+	   * 
+	   * @return The fail value.
+	   */
+	  public boolean isFail() {
+	    return fail;
+	  }
+	  
+	  /**
+	   * Setter for the fail value.
+	   * 
+	   * @param failVal the new fail value.
+	   */
+	  public void setFail(final boolean failVal) {
+	    this.fail = failVal;
+	  }
+	  
+	  /**
+	   * Getter for the statusCode value.
+	   * 
+	   * @return The statusCode value.
+	   */
+	  public String getStatusCode() {
+	    return statusCode;
+	  }
+	  
+	  /**
+	   * Getter for the subStatusCode.
+	   * 
+	   * @return The subStatusCode value.
+	   */
+	  public String getSubStatusCode() {
+	    return subStatusCode;
+	  }
+	  
+	  /**
+	   * Setter for the subStatusCode.
+	   * 
+	   * @param samlSubStatusCode the new subStatusCode value.
+	   */
+	  public void setSubStatusCode(final String samlSubStatusCode) {
+	    this.subStatusCode = samlSubStatusCode;
+	  }
+	  
+	  /**
+	   * Setter for the statusMessage value.
+	   * 
+	   * @param status the new statusMessage value.
+	   */
+	  public void setStatusMessage(final String status) {
+	    this.statusMessage = status;
+	  }
+	  
+	  /**
+	   * Getter for the statusMessage value.
+	   * 
+	   * @return The statusMessage value.
+	   */
+	  public String getStatusMessage() {
+	    return statusMessage;
+	  }
+	  
+	  /**
+	   * Setter for the statusCode value.
+	   * 
+	   * @param status the new statusCode value.
+	   */
+	  public void setStatusCode(final String status) {
+	    this.statusCode = status;
+	  }
+	  
+	  @Override
+	  public Object clone() throws CloneNotSupportedException{
+		  STORKLogoutResponse storkLogoutResponse = null;
+	      storkLogoutResponse = (STORKLogoutResponse) super.clone();
+	      storkLogoutResponse.setTokenSaml(getTokenSaml());
+	    return storkLogoutResponse;
+	  }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKStatusCode.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKStatusCode.java
new file mode 100644
index 000000000..a9c4a156b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKStatusCode.java
@@ -0,0 +1,68 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains the SAML Token Status Code.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2010-11-17 05:15:28 $
+ */
+public enum STORKStatusCode {
+  
+  /** URI for Requester status code. */
+  REQUESTER_URI("urn:oasis:names:tc:SAML:2.0:status:Requester"),
+  
+  /** URI for Responder status code. */
+  RESPONDER_URI("urn:oasis:names:tc:SAML:2.0:status:Responder"),
+  
+  /** URI for Success status code. */
+  SUCCESS_URI("urn:oasis:names:tc:SAML:2.0:status:Success"),
+  
+  /** Attribute is Available. */
+  STATUS_AVAILABLE("Available"),
+  
+  /** Attribute is NotAvailable. */
+  STATUS_NOT_AVAILABLE("NotAvailable"),
+  
+  /** Attribute is Withheld. */
+  STATUS_WITHHELD("Withheld");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param val The Constant value.
+   */
+  private STORKStatusCode(final String val) {
+    
+    this.value = val;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    
+    return value;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKSubStatusCode.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKSubStatusCode.java
new file mode 100644
index 000000000..0a711c9b7
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/STORKSubStatusCode.java
@@ -0,0 +1,71 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons;
+
+/**
+ * This enum class contains the SAML Token Sub Status Code.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.7 $, $Date: 2010-11-17 05:15:28 $
+ */
+public enum STORKSubStatusCode {
+  
+  /** URI for AuthnFailed status code. */
+  AUTHN_FAILED_URI("urn:oasis:names:tc:SAML:2.0:status:AuthnFailed"),
+  
+  /** URI for InvalidAttrNameOrValue status code. */
+  INVALID_ATTR_NAME_VALUE_URI(
+    "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue"),
+  
+  /** URI for InvalidNameIDPolicy status code. */
+  INVALID_NAMEID_POLICY_URI(
+    "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy"),
+  
+  /** URI for VersionMismatch status code. */
+  VERSION_MISMATCH_URI("urn:oasis:names:tc:SAML:2.0:status:VersionMismatch"),
+  
+  /** URI for RequestDenied status code. */
+  REQUEST_DENIED_URI("urn:oasis:names:tc:SAML:2.0:status:RequestDenied"),
+  
+  /** URI for QaaNotSupported status code. */
+  QAA_NOT_SUPPORTED(
+    "http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported");
+  
+  /**
+   * Represents the constant's value.
+   */
+  private String value;
+  
+  /**
+   * Solo Constructor.
+   * 
+   * @param val The Constant value.
+   */
+  private STORKSubStatusCode(final String val) {
+    
+    this.value = val;
+  }
+  
+  /**
+   * Return the Constant Value.
+   * 
+   * @return The constant value.
+   */
+  public String toString() {
+    
+    return value;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/all-wcprops
new file mode 100644
index 000000000..14f05b17c
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/all-wcprops
@@ -0,0 +1,53 @@
+K 25
+svn:wc:ra_dav:version-url
+V 96
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions
+END
+InvalidParameterPEPSException.java
+K 25
+svn:wc:ra_dav:version-url
+V 131
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidParameterPEPSException.java
+END
+SecurityPEPSException.java
+K 25
+svn:wc:ra_dav:version-url
+V 123
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/SecurityPEPSException.java
+END
+InvalidSessionPEPSException.java
+K 25
+svn:wc:ra_dav:version-url
+V 129
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidSessionPEPSException.java
+END
+package-info.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/package-info.java
+END
+CPEPSException.java
+K 25
+svn:wc:ra_dav:version-url
+V 116
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/CPEPSException.java
+END
+StorkPEPSException.java
+K 25
+svn:wc:ra_dav:version-url
+V 120
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/StorkPEPSException.java
+END
+AbstractPEPSException.java
+K 25
+svn:wc:ra_dav:version-url
+V 123
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/AbstractPEPSException.java
+END
+InternalErrorPEPSException.java
+K 25
+svn:wc:ra_dav:version-url
+V 128
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InternalErrorPEPSException.java
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/entries
new file mode 100644
index 000000000..8ca1e325f
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/entries
@@ -0,0 +1,300 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork/peps/auth/commons/exceptions
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+CPEPSException.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+5d3cb4a7303baeaf2104aaa7da301b21
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3570
+
+StorkPEPSException.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+fea01f750728ea5f15b449acb517f4b2
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1690
+
+AbstractPEPSException.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+c9aedb030e6dbc9f002c7cd3d52cf03f
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4422
+
+InternalErrorPEPSException.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+36d8f6310e84c550f65bef78d5dc4238
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2471
+
+InvalidParameterPEPSException.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+c6ad53378b03a346ca0fc48a381ed771
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1800
+
+SecurityPEPSException.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+78d50b78a69cb0c630e4e14420e3b7be
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2199
+
+InvalidSessionPEPSException.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+5fd7f04ad6f6cc121084e682b2a4e678
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1555
+
+package-info.java
+file
+
+
+
+
+2013-12-20T12:27:56.626475Z
+7055c01b74382c525c7fcf110646d8fc
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+129
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/AbstractPEPSException.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/AbstractPEPSException.java.svn-base
new file mode 100644
index 000000000..e9a96d7c2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/AbstractPEPSException.java.svn-base
@@ -0,0 +1,173 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+import java.io.Serializable;
+
+/**
+ * Abstract class to represent the various PEPS exceptions.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2010-11-17 05:15:28 $
+ */
+public abstract class AbstractPEPSException extends RuntimeException implements
+  Serializable {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = -1884417567740138022L;
+  
+  /**
+   * Error code.
+   */
+  private String errorCode;
+  
+  /**
+   * Error message.
+   */
+  private String errorMessage;
+  
+  /**
+   * SAML token.
+   */
+  private String samlTokenFail;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param code The error code value.
+   * @param message The error message value.
+   */
+  public AbstractPEPSException(final String code, final String message) {
+    
+    super(message);
+    this.errorCode = code;
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Exception Constructor with the errorMessage as parameters and the Throwable
+   * cause.
+   * 
+   * @param message The error message value.
+   * @param cause The throwable object.
+   */
+  public AbstractPEPSException(final String message, final Throwable cause) {
+    
+    super(message, cause);
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters and the Throwable cause.
+   * 
+   * @param code The error code value.
+   * @param message The error message value.
+   * @param cause The throwable object.
+   */
+  public AbstractPEPSException(final String code, final String message,
+    final Throwable cause) {
+    
+    super(message, cause);
+    this.errorCode = code;
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Exception Constructor with three Strings representing the errorCode,
+   * errorMessage and encoded samlToken as parameters.
+   * 
+   * @param code The error code value.
+   * @param message The error message value.
+   * @param samlToken The error SAML Token.
+   */
+  public AbstractPEPSException(final String code, final String message,
+    final String samlToken) {
+    
+    super(message);
+    this.errorCode = code;
+    this.errorMessage = message;
+    this.samlTokenFail = samlToken;
+  }
+  
+  /**
+   * Constructor with SAML Token as argument. Error message and error code are
+   * embedded in the SAML.
+   * 
+   * @param samlToken The error SAML Token.
+   */
+  public AbstractPEPSException(final String samlToken) {
+    super();
+    this.samlTokenFail = samlToken;
+  }
+  
+  /**
+   * Getter for errorCode.
+   * 
+   * @return The errorCode value.
+   */
+  public final String getErrorCode() {
+    return errorCode;
+  }
+  
+  /**
+   * Setter for errorCode.
+   * 
+   * @param code The error code value.
+   */
+  public final void setErrorCode(final String code) {
+    this.errorCode = code;
+  }
+  
+  /**
+   * Getter for errorMessage.
+   * 
+   * @return The error Message value.
+   */
+  public final String getErrorMessage() {
+    return errorMessage;
+  }
+  
+  /**
+   * Setter for errorMessage.
+   * 
+   * @param message The error message value.
+   */
+  public final void setErrorMessage(final String message) {
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Getter for SAMLTokenFail.
+   * 
+   * @return The error SAML Token.
+   */
+  public final String getSamlTokenFail() {
+    return samlTokenFail;
+  }
+  
+  /**
+   * Setter for SAMLTokenFail.
+   * 
+   * @param samlToken The error SAML token.
+   */
+  public final void setSamlTokenFail(final String samlToken) {
+    this.samlTokenFail = samlToken;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/CPEPSException.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/CPEPSException.java.svn-base
new file mode 100644
index 000000000..69cb20fdd
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/CPEPSException.java.svn-base
@@ -0,0 +1,143 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * This exception is thrown by the C-PEPS service and holds the relative
+ * information to present to the citizen.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.9 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class CPEPSException extends RuntimeException {
+  
+  /**
+   * Serial id.
+   */
+  private static final long serialVersionUID = -4012295047127999362L;
+  
+  /**
+   * Error code.
+   */
+  private String errorCode;
+  
+  /**
+   * Error message.
+   */
+  private String errorMessage;
+  
+  /**
+   * SAML token.
+   */
+  private String samlTokenFail;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param samlToken The SAML Token.
+   * @param code The error code value.
+   * @param message The error message value.
+   */
+  public CPEPSException(final String samlToken, final String code,
+    final String message) {
+    
+    super(message);
+    this.setErrorCode(code);
+    this.setErrorMessage(message);
+    this.setSamlTokenFail(samlToken);
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param samlToken The SAML Token.
+   * @param code The error code value.
+   * @param message The error message value.
+   * @param cause The original exception;
+   */
+  public CPEPSException(final String samlToken, final String code,
+    final String message, final Throwable cause) {
+    
+    super(message, cause);
+    this.setErrorCode(code);
+    this.setErrorMessage(message);
+    this.setSamlTokenFail(samlToken);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public String getMessage() {
+    return this.getErrorMessage() + " (" + this.getErrorCode() + ")";
+  }
+  
+  /**
+   * Getter for the error code.
+   * 
+   * @return The errorCode value.
+   */
+  public String getErrorCode() {
+    return errorCode;
+  }
+  
+  /**
+   * Setter for the error code.
+   * 
+   * @param code The error code.
+   */
+  public void setErrorCode(final String code) {
+    this.errorCode = code;
+  }
+  
+  /**
+   * Getter for the error message.
+   * 
+   * @return The errorMessage value.
+   */
+  public String getErrorMessage() {
+    return errorMessage;
+  }
+  
+  /**
+   * Setter for the error message.
+   * 
+   * @param message The error message.
+   */
+  public void setErrorMessage(final String message) {
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Getter for the samlTokenFail.
+   * 
+   * @return The samlTokenFail value.
+   */
+  public String getSamlTokenFail() {
+    return samlTokenFail;
+  }
+  
+  /**
+   * Setter for the samlTokenFail.
+   * 
+   * @param samlToken The error Saml Token.
+   */
+  public void setSamlTokenFail(final String samlToken) {
+    this.samlTokenFail = samlToken;
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InternalErrorPEPSException.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InternalErrorPEPSException.java.svn-base
new file mode 100644
index 000000000..67514d4fe
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InternalErrorPEPSException.java.svn-base
@@ -0,0 +1,74 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Internal Error Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see AbstractPEPSException
+ */
+public final class InternalErrorPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 1193001455410319795L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters and the Throwable cause.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   * @param cause The throwable object.
+   */
+  public InternalErrorPEPSException(final String errorCode,
+    final String errorMessage, final Throwable cause) {
+    
+    super(errorCode, errorMessage, cause);
+  }
+  
+  /**
+   * Exception Constructor with three strings representing the errorCode,
+   * errorMessage and encoded samlToken as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   * @param samlTokenFail The error SAML Token.
+   */
+  public InternalErrorPEPSException(final String errorCode,
+    final String errorMessage, final String samlTokenFail) {
+    
+    super(errorCode, errorMessage, samlTokenFail);
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   */
+  public InternalErrorPEPSException(final String errorCode,
+    final String errorMessage) {
+    
+    super(errorCode, errorMessage);
+  }
+   
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidParameterPEPSException.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidParameterPEPSException.java.svn-base
new file mode 100644
index 000000000..12c83b589
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidParameterPEPSException.java.svn-base
@@ -0,0 +1,54 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Invalid Parameter Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.11 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see InvalidParameterPEPSException
+ */
+public class InvalidParameterPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 2046282148740524875L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error code message value.
+   */
+  public InvalidParameterPEPSException(final String errorCode,
+    final String errorMessage) {
+    super(errorCode, errorMessage);
+  }
+  
+  /**
+   * Exception Constructor with one String representing the encoded samlToken.
+   * 
+   * @param samlTokenFail The error SAML Token.
+   */
+  public InvalidParameterPEPSException(final String samlTokenFail) {
+    super(samlTokenFail);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidSessionPEPSException.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidSessionPEPSException.java.svn-base
new file mode 100644
index 000000000..800525eee
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/InvalidSessionPEPSException.java.svn-base
@@ -0,0 +1,46 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Invalid session Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.14 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see InvalidParameterPEPSException
+ */
+public class InvalidSessionPEPSException extends InvalidParameterPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 7147090160978319016L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   */
+  public InvalidSessionPEPSException(final String errorCode,
+    final String errorMessage) {
+    
+    super(errorCode, errorMessage);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/SecurityPEPSException.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/SecurityPEPSException.java.svn-base
new file mode 100644
index 000000000..fc27371d2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/SecurityPEPSException.java.svn-base
@@ -0,0 +1,67 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Security PEPS Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.18 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see AbstractPEPSException
+ */
+public final class SecurityPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 5605743302478554967L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMsg The error message value.
+   */
+  public SecurityPEPSException(final String errorCode, final String errorMsg) {
+    super(errorCode, errorMsg);
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters and the Throwable cause.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   * @param cause The throwable object.
+   */
+  public SecurityPEPSException(final String errorCode,
+    final String errorMessage, final Throwable cause) {
+    
+    super(errorCode, errorMessage, cause);
+  }
+  
+  /**
+   * Exception Constructor with one String representing the encoded samlToken.
+   * 
+   * @param samlTokenFail The error SAML Token.
+   */
+  public SecurityPEPSException(final String samlTokenFail) {
+    super(samlTokenFail);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/StorkPEPSException.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/StorkPEPSException.java.svn-base
new file mode 100644
index 000000000..a2da61a02
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/StorkPEPSException.java.svn-base
@@ -0,0 +1,53 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Security PEPS Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.15 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see AbstractPEPSException
+ */
+public final class StorkPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 8048033129798427574L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMsg The error message value.
+   */
+  public StorkPEPSException(final String errorCode, final String errorMsg) {
+    super(errorCode, errorMsg);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public String getMessage() {
+    
+    return "Security Error (" + this.getErrorCode() + ") processing request : "
+      + this.getErrorMessage();
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/package-info.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/package-info.java.svn-base
new file mode 100644
index 000000000..d83068beb
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/.svn/text-base/package-info.java.svn-base
@@ -0,0 +1,7 @@
+/**
+ * Package for the PEPS’ Exceptions handling.
+ * 
+ * @since 1.0
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/AbstractPEPSException.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/AbstractPEPSException.java
new file mode 100644
index 000000000..e9a96d7c2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/AbstractPEPSException.java
@@ -0,0 +1,173 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+import java.io.Serializable;
+
+/**
+ * Abstract class to represent the various PEPS exceptions.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2010-11-17 05:15:28 $
+ */
+public abstract class AbstractPEPSException extends RuntimeException implements
+  Serializable {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = -1884417567740138022L;
+  
+  /**
+   * Error code.
+   */
+  private String errorCode;
+  
+  /**
+   * Error message.
+   */
+  private String errorMessage;
+  
+  /**
+   * SAML token.
+   */
+  private String samlTokenFail;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param code The error code value.
+   * @param message The error message value.
+   */
+  public AbstractPEPSException(final String code, final String message) {
+    
+    super(message);
+    this.errorCode = code;
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Exception Constructor with the errorMessage as parameters and the Throwable
+   * cause.
+   * 
+   * @param message The error message value.
+   * @param cause The throwable object.
+   */
+  public AbstractPEPSException(final String message, final Throwable cause) {
+    
+    super(message, cause);
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters and the Throwable cause.
+   * 
+   * @param code The error code value.
+   * @param message The error message value.
+   * @param cause The throwable object.
+   */
+  public AbstractPEPSException(final String code, final String message,
+    final Throwable cause) {
+    
+    super(message, cause);
+    this.errorCode = code;
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Exception Constructor with three Strings representing the errorCode,
+   * errorMessage and encoded samlToken as parameters.
+   * 
+   * @param code The error code value.
+   * @param message The error message value.
+   * @param samlToken The error SAML Token.
+   */
+  public AbstractPEPSException(final String code, final String message,
+    final String samlToken) {
+    
+    super(message);
+    this.errorCode = code;
+    this.errorMessage = message;
+    this.samlTokenFail = samlToken;
+  }
+  
+  /**
+   * Constructor with SAML Token as argument. Error message and error code are
+   * embedded in the SAML.
+   * 
+   * @param samlToken The error SAML Token.
+   */
+  public AbstractPEPSException(final String samlToken) {
+    super();
+    this.samlTokenFail = samlToken;
+  }
+  
+  /**
+   * Getter for errorCode.
+   * 
+   * @return The errorCode value.
+   */
+  public final String getErrorCode() {
+    return errorCode;
+  }
+  
+  /**
+   * Setter for errorCode.
+   * 
+   * @param code The error code value.
+   */
+  public final void setErrorCode(final String code) {
+    this.errorCode = code;
+  }
+  
+  /**
+   * Getter for errorMessage.
+   * 
+   * @return The error Message value.
+   */
+  public final String getErrorMessage() {
+    return errorMessage;
+  }
+  
+  /**
+   * Setter for errorMessage.
+   * 
+   * @param message The error message value.
+   */
+  public final void setErrorMessage(final String message) {
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Getter for SAMLTokenFail.
+   * 
+   * @return The error SAML Token.
+   */
+  public final String getSamlTokenFail() {
+    return samlTokenFail;
+  }
+  
+  /**
+   * Setter for SAMLTokenFail.
+   * 
+   * @param samlToken The error SAML token.
+   */
+  public final void setSamlTokenFail(final String samlToken) {
+    this.samlTokenFail = samlToken;
+  }
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/CPEPSException.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/CPEPSException.java
new file mode 100644
index 000000000..69cb20fdd
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/CPEPSException.java
@@ -0,0 +1,143 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * This exception is thrown by the C-PEPS service and holds the relative
+ * information to present to the citizen.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.9 $, $Date: 2010-11-17 05:15:28 $
+ */
+public final class CPEPSException extends RuntimeException {
+  
+  /**
+   * Serial id.
+   */
+  private static final long serialVersionUID = -4012295047127999362L;
+  
+  /**
+   * Error code.
+   */
+  private String errorCode;
+  
+  /**
+   * Error message.
+   */
+  private String errorMessage;
+  
+  /**
+   * SAML token.
+   */
+  private String samlTokenFail;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param samlToken The SAML Token.
+   * @param code The error code value.
+   * @param message The error message value.
+   */
+  public CPEPSException(final String samlToken, final String code,
+    final String message) {
+    
+    super(message);
+    this.setErrorCode(code);
+    this.setErrorMessage(message);
+    this.setSamlTokenFail(samlToken);
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param samlToken The SAML Token.
+   * @param code The error code value.
+   * @param message The error message value.
+   * @param cause The original exception;
+   */
+  public CPEPSException(final String samlToken, final String code,
+    final String message, final Throwable cause) {
+    
+    super(message, cause);
+    this.setErrorCode(code);
+    this.setErrorMessage(message);
+    this.setSamlTokenFail(samlToken);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public String getMessage() {
+    return this.getErrorMessage() + " (" + this.getErrorCode() + ")";
+  }
+  
+  /**
+   * Getter for the error code.
+   * 
+   * @return The errorCode value.
+   */
+  public String getErrorCode() {
+    return errorCode;
+  }
+  
+  /**
+   * Setter for the error code.
+   * 
+   * @param code The error code.
+   */
+  public void setErrorCode(final String code) {
+    this.errorCode = code;
+  }
+  
+  /**
+   * Getter for the error message.
+   * 
+   * @return The errorMessage value.
+   */
+  public String getErrorMessage() {
+    return errorMessage;
+  }
+  
+  /**
+   * Setter for the error message.
+   * 
+   * @param message The error message.
+   */
+  public void setErrorMessage(final String message) {
+    this.errorMessage = message;
+  }
+  
+  /**
+   * Getter for the samlTokenFail.
+   * 
+   * @return The samlTokenFail value.
+   */
+  public String getSamlTokenFail() {
+    return samlTokenFail;
+  }
+  
+  /**
+   * Setter for the samlTokenFail.
+   * 
+   * @param samlToken The error Saml Token.
+   */
+  public void setSamlTokenFail(final String samlToken) {
+    this.samlTokenFail = samlToken;
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InternalErrorPEPSException.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InternalErrorPEPSException.java
new file mode 100644
index 000000000..67514d4fe
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InternalErrorPEPSException.java
@@ -0,0 +1,74 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Internal Error Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.13 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see AbstractPEPSException
+ */
+public final class InternalErrorPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 1193001455410319795L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters and the Throwable cause.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   * @param cause The throwable object.
+   */
+  public InternalErrorPEPSException(final String errorCode,
+    final String errorMessage, final Throwable cause) {
+    
+    super(errorCode, errorMessage, cause);
+  }
+  
+  /**
+   * Exception Constructor with three strings representing the errorCode,
+   * errorMessage and encoded samlToken as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   * @param samlTokenFail The error SAML Token.
+   */
+  public InternalErrorPEPSException(final String errorCode,
+    final String errorMessage, final String samlTokenFail) {
+    
+    super(errorCode, errorMessage, samlTokenFail);
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   */
+  public InternalErrorPEPSException(final String errorCode,
+    final String errorMessage) {
+    
+    super(errorCode, errorMessage);
+  }
+   
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidParameterPEPSException.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidParameterPEPSException.java
new file mode 100644
index 000000000..12c83b589
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidParameterPEPSException.java
@@ -0,0 +1,54 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Invalid Parameter Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.11 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see InvalidParameterPEPSException
+ */
+public class InvalidParameterPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 2046282148740524875L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error code message value.
+   */
+  public InvalidParameterPEPSException(final String errorCode,
+    final String errorMessage) {
+    super(errorCode, errorMessage);
+  }
+  
+  /**
+   * Exception Constructor with one String representing the encoded samlToken.
+   * 
+   * @param samlTokenFail The error SAML Token.
+   */
+  public InvalidParameterPEPSException(final String samlTokenFail) {
+    super(samlTokenFail);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidSessionPEPSException.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidSessionPEPSException.java
new file mode 100644
index 000000000..800525eee
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/InvalidSessionPEPSException.java
@@ -0,0 +1,46 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Invalid session Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.14 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see InvalidParameterPEPSException
+ */
+public class InvalidSessionPEPSException extends InvalidParameterPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 7147090160978319016L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   */
+  public InvalidSessionPEPSException(final String errorCode,
+    final String errorMessage) {
+    
+    super(errorCode, errorMessage);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/SecurityPEPSException.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/SecurityPEPSException.java
new file mode 100644
index 000000000..fc27371d2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/SecurityPEPSException.java
@@ -0,0 +1,67 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Security PEPS Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.18 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see AbstractPEPSException
+ */
+public final class SecurityPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 5605743302478554967L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMsg The error message value.
+   */
+  public SecurityPEPSException(final String errorCode, final String errorMsg) {
+    super(errorCode, errorMsg);
+  }
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters and the Throwable cause.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMessage The error message value.
+   * @param cause The throwable object.
+   */
+  public SecurityPEPSException(final String errorCode,
+    final String errorMessage, final Throwable cause) {
+    
+    super(errorCode, errorMessage, cause);
+  }
+  
+  /**
+   * Exception Constructor with one String representing the encoded samlToken.
+   * 
+   * @param samlTokenFail The error SAML Token.
+   */
+  public SecurityPEPSException(final String samlTokenFail) {
+    super(samlTokenFail);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/StorkPEPSException.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/StorkPEPSException.java
new file mode 100644
index 000000000..a2da61a02
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/StorkPEPSException.java
@@ -0,0 +1,53 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
+/**
+ * Security PEPS Exception class.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.15 $, $Date: 2010-11-17 05:15:28 $
+ * 
+ * @see AbstractPEPSException
+ */
+public final class StorkPEPSException extends AbstractPEPSException {
+  
+  /**
+   * Unique identifier.
+   */
+  private static final long serialVersionUID = 8048033129798427574L;
+  
+  /**
+   * Exception Constructor with two Strings representing the errorCode and
+   * errorMessage as parameters.
+   * 
+   * @param errorCode The error code value.
+   * @param errorMsg The error message value.
+   */
+  public StorkPEPSException(final String errorCode, final String errorMsg) {
+    super(errorCode, errorMsg);
+  }
+  
+  /**
+   * {@inheritDoc}
+   */
+  public String getMessage() {
+    
+    return "Security Error (" + this.getErrorCode() + ") processing request : "
+      + this.getErrorMessage();
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/package-info.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/package-info.java
new file mode 100644
index 000000000..d83068beb
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/exceptions/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * Package for the PEPS’ Exceptions handling.
+ * 
+ * @since 1.0
+ */
+package eu.stork.peps.auth.commons.exceptions;
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/package-info.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/package-info.java
new file mode 100644
index 000000000..19d45aaa2
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/package-info.java
@@ -0,0 +1,9 @@
+/**
+ * Common Authentication Service functionalities to be deployed in every PEPS 
+ * is contained in this package.
+ * In particular, it contains the SAML Engine that implements the SAML messages
+ * management
+ * 
+ * @since 1.0
+ */
+package eu.stork.peps.auth.commons;
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/all-wcprops
new file mode 100644
index 000000000..3cd5d5378
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/all-wcprops
@@ -0,0 +1,41 @@
+K 25
+svn:wc:ra_dav:version-url
+V 87
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/specific
+END
+IDeriveAttribute.java
+K 25
+svn:wc:ra_dav:version-url
+V 108
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/specific/IDeriveAttribute.java
+END
+IAUService.java
+K 25
+svn:wc:ra_dav:version-url
+V 103
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/specific/IAUService.java
+END
+INormaliseValue.java
+K 25
+svn:wc:ra_dav:version-url
+V 107
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/specific/INormaliseValue.java
+END
+ITranslatorService.java
+K 25
+svn:wc:ra_dav:version-url
+V 111
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/main/java/eu/stork/peps/auth/specific/ITranslatorService.java
+END
+package-info.java
+K 25
+svn:wc:ra_dav:version-url
+V 104
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/specific/package-info.java
+END
+ICheckAttributeValue.java
+K 25
+svn:wc:ra_dav:version-url
+V 112
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/java/eu/stork/peps/auth/specific/ICheckAttributeValue.java
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/entries
new file mode 100644
index 000000000..acd798b61
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/entries
@@ -0,0 +1,232 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork/peps/auth/specific
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+ITranslatorService.java
+file
+
+
+
+
+2014-01-21T08:38:55.228702Z
+c027ed5506150c744b8e586b325de5fb
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3120
+
+package-info.java
+file
+
+
+
+
+2013-12-20T12:27:56.654475Z
+eef7721d55c2edb02a432fc08ae9e487
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+164
+
+ICheckAttributeValue.java
+file
+
+
+
+
+2013-12-20T12:27:56.654475Z
+b0472ff15d1c86f175da134b0f0eda71
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1321
+
+IDeriveAttribute.java
+file
+
+
+
+
+2013-12-20T12:27:56.654475Z
+dce3856a97583f739cdf50ca78491277
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1504
+
+IAUService.java
+file
+
+
+
+
+2014-01-21T08:38:55.228702Z
+b622aaaa29b0cd72261ca7799db691b9
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7023
+
+INormaliseValue.java
+file
+
+
+
+
+2013-12-20T12:27:56.654475Z
+09f6e376875762fca294be4dfecb71f1
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1237
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IAUService.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IAUService.java.svn-base
new file mode 100644
index 000000000..5c24cc5a8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IAUService.java.svn-base
@@ -0,0 +1,215 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import java.util.Map;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.IStorkSession;
+import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
+import eu.stork.peps.auth.commons.STORKAuthnResponse;
+
+/**
+ * Interface for Specific Authentication methods.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface IAUService {
+  
+  /**
+   * Prepares the citizen to be redirected to the IdP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * @param requestAttributes The Requested attributes.
+   * 
+   * @return byte[] containing a SAML Request.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  byte[] prepareCitizenAuthentication(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session);
+  
+  /**
+   * Prepares the citizen to be redirected to the PV.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * @param requestAttributes The Requested attributes.
+   * 
+   * @return byte[] containing a SAML Request.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  byte[] preparePVRequest(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session);
+  
+  /**
+   * Authenticates a citizen.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param requestAttributes The requested attributes.
+   * 
+   * @return The updated Personal Attribute List.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList authenticateCitizen(
+    IPersonalAttributeList personalList, Map<String, Object> parameters,
+    Map<String, Object> requestAttributes);
+  
+  /**
+   * Validates a power.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param requestAttributes The requested attributes.
+   * 
+   * @return The updated Personal Attribute List (power validated).
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList powerValidation(
+    IPersonalAttributeList personalList, Map<String, Object> parameters,
+    Map<String, Object> requestAttributes);
+  
+  /**
+   * Prepares the Citizen browser to be redirected to the AP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * @param requestAttributes The requested attributes.
+   * 
+   * @return true in case of no error.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  boolean prepareAPRedirect(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session);
+  
+  /**
+   * Returns the attributes values from the AP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param requestAttributes The request attributes.
+   * 
+   * @return The updated Personal Attribute List.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList getAttributesFromAttributeProviders(
+    IPersonalAttributeList personalList, Map<String, Object> parameters,
+    Map<String, Object> requestAttributes);
+  
+  /**
+   * Get the attributes from the AP with verification.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The HTTP Parameters.
+   * @param requestAttributes The requested Attributes.
+   * @param session The session object.
+   * @param auProcessId The SAML identifier.
+   * 
+   * @return true if the attributes were correctly verified.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  boolean getAttributesWithVerification(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session, String auProcessId);
+  
+  /**
+   * Validates a SAML Response.
+   * 
+   * @param samlToken The SAML Token.
+   * @param session The session object.
+   * 
+   * @return the STORKAuthnResponse associated with the validated response.
+   * 
+   * @see IStorkSession
+   */
+  STORKAuthnResponse processAuthenticationResponse(byte[] samlToken,
+    IStorkSession session);
+  
+  /**
+   * Generates a SAML Response in case of error.
+   * 
+   * @param inResponseTo The SAML's identifier to response.
+   * @param issuer The issuer value.
+   * @param assertionURL The assertion URL.
+   * @param code The error code.
+   * @param subcode The sub error code.
+   * @param message The error message.
+   * @param ipUserAddress The user IP address.
+   * 
+   * @return byte[] containing the SAML Response.
+   */
+  byte[] generateErrorAuthenticationResponse(String inResponseTo,
+    String issuer, String assertionURL, String code, String subcode,
+    String message, String ipUserAddress);
+  
+  /**
+   * Compares two given personal attribute lists.
+   * 
+   * @param original The original Personal Attribute List.
+   * @param modified The modified Personal Attribute List.
+   * @return true if the original list contains the modified one. False
+   *         otherwise.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean comparePersonalAttributeLists(IPersonalAttributeList original,
+    IPersonalAttributeList modified);
+  
+  /**
+   * Prepares the citizen to be redirected to the AtP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * 
+   * @return byte[] containing a SAML Request.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  byte[] prepareAttributeRequest(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, IStorkSession session);
+
+  /**
+   * Validates a SAML Response.
+   * 
+   * @param samlToken The SAML Token.
+   * @param session The session object.
+   * 
+   * @return the STORKAttrQueryResponse associated with the validated response.
+   * 
+   * @see IStorkSession
+   */
+  STORKAttrQueryResponse processAttributeResponse(byte[] samlToken,
+    IStorkSession session);
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ICheckAttributeValue.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ICheckAttributeValue.java.svn-base
new file mode 100644
index 000000000..31a8d78ff
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ICheckAttributeValue.java.svn-base
@@ -0,0 +1,37 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import java.util.List;
+
+/**
+ * Interface that defines the methods to work with the validation of attributes.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface ICheckAttributeValue {
+  
+  /**
+   * Checks if the list of values contains the expected value.
+   * 
+   * @param values The List of values.
+   * @param expectedValue The value to check if it exists on the list.
+   * 
+   * @return boolean true, if the value is present in the list. False,
+   *         otherwise.
+   */
+  boolean checkValue(List<String> values, String expectedValue);
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IDeriveAttribute.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IDeriveAttribute.java.svn-base
new file mode 100644
index 000000000..78eb53004
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/IDeriveAttribute.java.svn-base
@@ -0,0 +1,40 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import eu.stork.peps.auth.commons.IStorkSession;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+
+/**
+ * Interface that defines the methods to work with derivation of attributes.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface IDeriveAttribute {
+  
+  /**
+   * Derives the attribute value. Set the Personal Attribute value to null if
+   * the value in session or the value of age are invalid (non-numeric or null).
+   * 
+   * @param personalAttrList The Personal Attribute List.
+   * @param session The session object.
+   * 
+   * @see PersonalAttribute The personal Attribute
+   * @see IStorkSession The session object.
+   */
+  void deriveAttributeToData(PersonalAttribute personalAttrList,
+    IStorkSession session);
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/INormaliseValue.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/INormaliseValue.java.svn-base
new file mode 100644
index 000000000..ca2114e32
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/INormaliseValue.java.svn-base
@@ -0,0 +1,35 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+
+/**
+ * Interface for attribute's value normalisation.
+ * 
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface INormaliseValue {
+  
+  /**
+   * Translates the attribute's value from local format to STORK format.
+   * 
+   * @param personalAttribute The Personal Attribute to normalise the value.
+   * 
+   * @see PersonalAttribute
+   */
+  void normaliseAttributeValueToStork(PersonalAttribute personalAttribute);
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ITranslatorService.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ITranslatorService.java.svn-base
new file mode 100644
index 000000000..8a33897d8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/ITranslatorService.java.svn-base
@@ -0,0 +1,100 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.IStorkSession;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+
+/**
+ * Interface for attributes normalization.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface ITranslatorService {
+  
+  /**
+   * Translates the attributes from local format to STORK format.
+   * 
+   * @param personalList The Personal Attribute List.
+   * 
+   * @return The Personal Attribute List with normalised attributes.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList normaliseAttributeNamesToStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Translates the attributes values from local format to STORK format.
+   * 
+   * @param personalList The Personal Attribute List.
+   * 
+   * @return The PersonalAttributeList with normalised values.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList normaliseAttributeValuesToStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Translates the attributes from STORK format to local format.
+   * 
+   * @param personalList The Personal Attribute List.
+   * 
+   * @return The PersonalAttributeList with normalised attributes.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList normaliseAttributeNamesFromStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Derive Attribute Names To Stork format.
+   * 
+   * @param personalList The Personal Attribute List,
+   * 
+   * @return The PersonalAttributeList with derived attributes.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList deriveAttributeFromStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Derive Attribute Names from Stork format.
+   * 
+   * @param session The session object.
+   * @param modifiedList The Personal Attribute List.
+   * 
+   * @return The PersonalAttributeList with derived attributes.
+   * 
+   * @see IStorkSession
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList deriveAttributeToStork(IStorkSession session,
+    IPersonalAttributeList modifiedList);
+  
+  /**
+   * Validate the values of the attributes.
+   * 
+   * @param pal The attribute list
+   * 
+   * @return True, if all the attributes have values. False, otherwise.
+   * 
+   * @see STORKAuthnRequest
+   */
+  boolean checkAttributeValues(IPersonalAttributeList pa);
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/package-info.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/package-info.java.svn-base
new file mode 100644
index 000000000..a25c52311
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/.svn/text-base/package-info.java.svn-base
@@ -0,0 +1,8 @@
+/**
+ * Specific PEPS Interfaces that implements functionality of the Authentication
+ * Service.
+ * 
+ * @since 1.0
+ */
+package eu.stork.peps.auth.specific;
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IAUService.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IAUService.java
new file mode 100644
index 000000000..5c24cc5a8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IAUService.java
@@ -0,0 +1,215 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import java.util.Map;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.IStorkSession;
+import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
+import eu.stork.peps.auth.commons.STORKAuthnResponse;
+
+/**
+ * Interface for Specific Authentication methods.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface IAUService {
+  
+  /**
+   * Prepares the citizen to be redirected to the IdP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * @param requestAttributes The Requested attributes.
+   * 
+   * @return byte[] containing a SAML Request.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  byte[] prepareCitizenAuthentication(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session);
+  
+  /**
+   * Prepares the citizen to be redirected to the PV.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * @param requestAttributes The Requested attributes.
+   * 
+   * @return byte[] containing a SAML Request.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  byte[] preparePVRequest(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session);
+  
+  /**
+   * Authenticates a citizen.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param requestAttributes The requested attributes.
+   * 
+   * @return The updated Personal Attribute List.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList authenticateCitizen(
+    IPersonalAttributeList personalList, Map<String, Object> parameters,
+    Map<String, Object> requestAttributes);
+  
+  /**
+   * Validates a power.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param requestAttributes The requested attributes.
+   * 
+   * @return The updated Personal Attribute List (power validated).
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList powerValidation(
+    IPersonalAttributeList personalList, Map<String, Object> parameters,
+    Map<String, Object> requestAttributes);
+  
+  /**
+   * Prepares the Citizen browser to be redirected to the AP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * @param requestAttributes The requested attributes.
+   * 
+   * @return true in case of no error.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  boolean prepareAPRedirect(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session);
+  
+  /**
+   * Returns the attributes values from the AP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param requestAttributes The request attributes.
+   * 
+   * @return The updated Personal Attribute List.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList getAttributesFromAttributeProviders(
+    IPersonalAttributeList personalList, Map<String, Object> parameters,
+    Map<String, Object> requestAttributes);
+  
+  /**
+   * Get the attributes from the AP with verification.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The HTTP Parameters.
+   * @param requestAttributes The requested Attributes.
+   * @param session The session object.
+   * @param auProcessId The SAML identifier.
+   * 
+   * @return true if the attributes were correctly verified.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  boolean getAttributesWithVerification(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, Map<String, Object> requestAttributes,
+    IStorkSession session, String auProcessId);
+  
+  /**
+   * Validates a SAML Response.
+   * 
+   * @param samlToken The SAML Token.
+   * @param session The session object.
+   * 
+   * @return the STORKAuthnResponse associated with the validated response.
+   * 
+   * @see IStorkSession
+   */
+  STORKAuthnResponse processAuthenticationResponse(byte[] samlToken,
+    IStorkSession session);
+  
+  /**
+   * Generates a SAML Response in case of error.
+   * 
+   * @param inResponseTo The SAML's identifier to response.
+   * @param issuer The issuer value.
+   * @param assertionURL The assertion URL.
+   * @param code The error code.
+   * @param subcode The sub error code.
+   * @param message The error message.
+   * @param ipUserAddress The user IP address.
+   * 
+   * @return byte[] containing the SAML Response.
+   */
+  byte[] generateErrorAuthenticationResponse(String inResponseTo,
+    String issuer, String assertionURL, String code, String subcode,
+    String message, String ipUserAddress);
+  
+  /**
+   * Compares two given personal attribute lists.
+   * 
+   * @param original The original Personal Attribute List.
+   * @param modified The modified Personal Attribute List.
+   * @return true if the original list contains the modified one. False
+   *         otherwise.
+   * 
+   * @see IPersonalAttributeList
+   */
+  boolean comparePersonalAttributeLists(IPersonalAttributeList original,
+    IPersonalAttributeList modified);
+  
+  /**
+   * Prepares the citizen to be redirected to the AtP.
+   * 
+   * @param personalList The Personal Attribute List.
+   * @param parameters The parameters.
+   * @param session The session object.
+   * 
+   * @return byte[] containing a SAML Request.
+   * 
+   * @see IPersonalAttributeList
+   * @see IStorkSession
+   */
+  byte[] prepareAttributeRequest(IPersonalAttributeList personalList,
+    Map<String, Object> parameters, IStorkSession session);
+
+  /**
+   * Validates a SAML Response.
+   * 
+   * @param samlToken The SAML Token.
+   * @param session The session object.
+   * 
+   * @return the STORKAttrQueryResponse associated with the validated response.
+   * 
+   * @see IStorkSession
+   */
+  STORKAttrQueryResponse processAttributeResponse(byte[] samlToken,
+    IStorkSession session);
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ICheckAttributeValue.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ICheckAttributeValue.java
new file mode 100644
index 000000000..31a8d78ff
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ICheckAttributeValue.java
@@ -0,0 +1,37 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import java.util.List;
+
+/**
+ * Interface that defines the methods to work with the validation of attributes.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface ICheckAttributeValue {
+  
+  /**
+   * Checks if the list of values contains the expected value.
+   * 
+   * @param values The List of values.
+   * @param expectedValue The value to check if it exists on the list.
+   * 
+   * @return boolean true, if the value is present in the list. False,
+   *         otherwise.
+   */
+  boolean checkValue(List<String> values, String expectedValue);
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IDeriveAttribute.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IDeriveAttribute.java
new file mode 100644
index 000000000..78eb53004
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/IDeriveAttribute.java
@@ -0,0 +1,40 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import eu.stork.peps.auth.commons.IStorkSession;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+
+/**
+ * Interface that defines the methods to work with derivation of attributes.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface IDeriveAttribute {
+  
+  /**
+   * Derives the attribute value. Set the Personal Attribute value to null if
+   * the value in session or the value of age are invalid (non-numeric or null).
+   * 
+   * @param personalAttrList The Personal Attribute List.
+   * @param session The session object.
+   * 
+   * @see PersonalAttribute The personal Attribute
+   * @see IStorkSession The session object.
+   */
+  void deriveAttributeToData(PersonalAttribute personalAttrList,
+    IStorkSession session);
+  
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/INormaliseValue.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/INormaliseValue.java
new file mode 100644
index 000000000..ca2114e32
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/INormaliseValue.java
@@ -0,0 +1,35 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+
+/**
+ * Interface for attribute's value normalisation.
+ * 
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface INormaliseValue {
+  
+  /**
+   * Translates the attribute's value from local format to STORK format.
+   * 
+   * @param personalAttribute The Personal Attribute to normalise the value.
+   * 
+   * @see PersonalAttribute
+   */
+  void normaliseAttributeValueToStork(PersonalAttribute personalAttribute);
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ITranslatorService.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ITranslatorService.java
new file mode 100644
index 000000000..8a33897d8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/ITranslatorService.java
@@ -0,0 +1,100 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.auth.specific;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.IStorkSession;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+
+/**
+ * Interface for attributes normalization.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com
+ */
+public interface ITranslatorService {
+  
+  /**
+   * Translates the attributes from local format to STORK format.
+   * 
+   * @param personalList The Personal Attribute List.
+   * 
+   * @return The Personal Attribute List with normalised attributes.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList normaliseAttributeNamesToStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Translates the attributes values from local format to STORK format.
+   * 
+   * @param personalList The Personal Attribute List.
+   * 
+   * @return The PersonalAttributeList with normalised values.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList normaliseAttributeValuesToStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Translates the attributes from STORK format to local format.
+   * 
+   * @param personalList The Personal Attribute List.
+   * 
+   * @return The PersonalAttributeList with normalised attributes.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList normaliseAttributeNamesFromStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Derive Attribute Names To Stork format.
+   * 
+   * @param personalList The Personal Attribute List,
+   * 
+   * @return The PersonalAttributeList with derived attributes.
+   * 
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList deriveAttributeFromStork(
+    IPersonalAttributeList personalList);
+  
+  /**
+   * Derive Attribute Names from Stork format.
+   * 
+   * @param session The session object.
+   * @param modifiedList The Personal Attribute List.
+   * 
+   * @return The PersonalAttributeList with derived attributes.
+   * 
+   * @see IStorkSession
+   * @see IPersonalAttributeList
+   */
+  IPersonalAttributeList deriveAttributeToStork(IStorkSession session,
+    IPersonalAttributeList modifiedList);
+  
+  /**
+   * Validate the values of the attributes.
+   * 
+   * @param pal The attribute list
+   * 
+   * @return True, if all the attributes have values. False, otherwise.
+   * 
+   * @see STORKAuthnRequest
+   */
+  boolean checkAttributeValues(IPersonalAttributeList pa);
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/package-info.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/package-info.java
new file mode 100644
index 000000000..a25c52311
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/specific/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * Specific PEPS Interfaces that implements functionality of the Authentication
+ * Service.
+ * 
+ * @since 1.0
+ */
+package eu.stork.peps.auth.specific;
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/all-wcprops
new file mode 100644
index 000000000..d792fc132
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/entries
new file mode 100644
index 000000000..e43413c41
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork/peps/complex
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+attributes
+dir
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/all-wcprops b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/all-wcprops
new file mode 100644
index 000000000..76286973c
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/all-wcprops
@@ -0,0 +1,125 @@
+K 25
+svn:wc:ra_dav:version-url
+V 92
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes
+END
+ObjectFactory.java
+K 25
+svn:wc:ra_dav:version-url
+V 111
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/ObjectFactory.java
+END
+IsTeacherOfType.java
+K 25
+svn:wc:ra_dav:version-url
+V 113
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/IsTeacherOfType.java
+END
+CanonicalAddressType.java
+K 25
+svn:wc:ra_dav:version-url
+V 118
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/CanonicalAddressType.java
+END
+IsCourseCoordinatorType.java
+K 25
+svn:wc:ra_dav:version-url
+V 121
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/IsCourseCoordinatorType.java
+END
+MandateContentType.java
+K 25
+svn:wc:ra_dav:version-url
+V 116
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/MandateContentType.java
+END
+Habilitation.java
+K 25
+svn:wc:ra_dav:version-url
+V 110
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/Habilitation.java
+END
+IsHCPType.java
+K 25
+svn:wc:ra_dav:version-url
+V 107
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/IsHCPType.java
+END
+IsAcademicStaffType.java
+K 25
+svn:wc:ra_dav:version-url
+V 117
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/IsAcademicStaffType.java
+END
+AttributeStatusType.java
+K 25
+svn:wc:ra_dav:version-url
+V 117
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/AttributeStatusType.java
+END
+HabilitationType.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/HabilitationType.java
+END
+IsAdminStaffType.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/IsAdminStaffType.java
+END
+MandateType.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/MandateType.java
+END
+HasAccountInBankType.java
+K 25
+svn:wc:ra_dav:version-url
+V 118
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/HasAccountInBankType.java
+END
+IsHealthCareProfessionalType.java
+K 25
+svn:wc:ra_dav:version-url
+V 126
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/IsHealthCareProfessionalType.java
+END
+IsStudentType.java
+K 25
+svn:wc:ra_dav:version-url
+V 111
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/IsStudentType.java
+END
+package-info.java
+K 25
+svn:wc:ra_dav:version-url
+V 110
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/package-info.java
+END
+AcTitleType.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/AcTitleType.java
+END
+RequestedAttributeType.java
+K 25
+svn:wc:ra_dav:version-url
+V 120
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/RequestedAttributeType.java
+END
+HasDegreeType.java
+K 25
+svn:wc:ra_dav:version-url
+V 111
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/HasDegreeType.java
+END
+RepresentationPersonType.java
+K 25
+svn:wc:ra_dav:version-url
+V 122
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes/RepresentationPersonType.java
+END
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/entries b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/entries
new file mode 100644
index 000000000..434de60f8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/entries
@@ -0,0 +1,708 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/java/eu/stork/peps/complex/attributes
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+IsHCPType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+c7794f438dce3f5e4e27e605a642a22a
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3801
+
+IsAcademicStaffType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+43d67ea6cedb4601555d0394db95417a
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3818
+
+HabilitationType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+6e9cc940cbe5298156c5e7b524936f11
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2314
+
+AttributeStatusType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+4e30a60177a9ab03aececf580482fad1
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1734
+
+IsAdminStaffType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+5a49a39f1d260a3c306216069751260f
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2341
+
+MandateType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+2fbb38548efd320e4df27959a9842731
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3581
+
+HasAccountInBankType.java
+file
+
+
+
+
+2014-03-05T09:36:07.894515Z
+f71b4c28dd5c9580fb87c3573435837b
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2339
+
+IsHealthCareProfessionalType.java
+file
+
+
+
+
+2014-03-05T09:36:07.894515Z
+2a4106ac8c87cc056b853b7f9ffb6fbc
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3834
+
+package-info.java
+file
+
+
+
+
+2014-03-05T09:36:07.894515Z
+5a2f7df8040e53c9e0dc7beacc8f3457
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+549
+
+IsStudentType.java
+file
+
+
+
+
+2014-03-05T09:36:07.894515Z
+a576b2ef395482c49cb968e91e33ec89
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3714
+
+AcTitleType.java
+file
+
+
+
+
+2014-03-05T09:36:07.894515Z
+df18729d7dbd509aeeac2f17ef036e19
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2388
+
+RequestedAttributeType.java
+file
+
+
+
+
+2014-03-05T09:36:07.894515Z
+c6ada26a7ff439713e9a4588d1b62b0a
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6089
+
+HasDegreeType.java
+file
+
+
+
+
+2014-03-05T09:36:07.894515Z
+3a54a31f40c97b44d31f1a70e0767daa
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4432
+
+RepresentationPersonType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+84b6c9432085cf590c3ed06e58b4307f
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7205
+
+ObjectFactory.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+bc36df4b11e93ab03119dfb25626bfb1
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+18679
+
+IsTeacherOfType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+1575bd6840471d713bd61c5d337d3900
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3668
+
+CanonicalAddressType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+63bc0e23343775a0c252a03a5a3b09d1
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6847
+
+IsCourseCoordinatorType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+9927ea145575d05bd2984bee0e3550be
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2423
+
+MandateContentType.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+debc98ce374d669b7621dea674120dfc
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6205
+
+Habilitation.java
+file
+
+
+
+
+2014-03-05T09:36:07.898515Z
+248b26e8c89ddc3366c528cf3852d27b
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2298
+
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AcTitleType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AcTitleType.java.svn-base
new file mode 100644
index 000000000..3c214cb7b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AcTitleType.java.svn-base
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for acTitleType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="acTitleType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="titleNormalised" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}titleNormalisedType"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "acTitleType", propOrder = {
+    "titleNormalised",
+    "aqaa"
+})
+public class AcTitleType {
+
+    @XmlElement(required = true)
+    protected String titleNormalised;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the titleNormalised property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTitleNormalised() {
+        return titleNormalised;
+    }
+
+    /**
+     * Sets the value of the titleNormalised property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTitleNormalised(String value) {
+        this.titleNormalised = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AttributeStatusType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AttributeStatusType.java.svn-base
new file mode 100644
index 000000000..1a815e944
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/AttributeStatusType.java.svn-base
@@ -0,0 +1,61 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for AttributeStatusType.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * <p>
+ * <pre>
+ * &lt;simpleType name="AttributeStatusType">
+ *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *     &lt;enumeration value="Available"/>
+ *     &lt;enumeration value="NotAvailable"/>
+ *     &lt;enumeration value="Withheld"/>
+ *   &lt;/restriction>
+ * &lt;/simpleType>
+ * </pre>
+ * 
+ */
+@XmlType(name = "AttributeStatusType")
+@XmlEnum
+public enum AttributeStatusType {
+
+    @XmlEnumValue("Available")
+    AVAILABLE("Available"),
+    @XmlEnumValue("NotAvailable")
+    NOT_AVAILABLE("NotAvailable"),
+    @XmlEnumValue("Withheld")
+    WITHHELD("Withheld");
+    private final String value;
+
+    AttributeStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static AttributeStatusType fromValue(String v) {
+        for (AttributeStatusType c: AttributeStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/CanonicalAddressType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/CanonicalAddressType.java.svn-base
new file mode 100644
index 000000000..fa0289cfa
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/CanonicalAddressType.java.svn-base
@@ -0,0 +1,264 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+
+/**
+ * <p>Java class for canonicalAddressType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="canonicalAddressType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="countryCodeAddress" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}CountryCodeType"/>
+ *         &lt;element name="state" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="municipalityCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="town" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="postalCode" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="streetName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="streetNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="apartmentNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "canonicalAddressType", propOrder = {
+    "countryCodeAddress",
+    "state",
+    "municipalityCode",
+    "town",
+    "postalCode",
+    "streetName",
+    "streetNumber",
+    "apartmentNumber"
+})
+public class CanonicalAddressType {
+
+    @XmlElement(required = true)
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    protected String countryCodeAddress;
+    protected String state;
+    protected String municipalityCode;
+    @XmlElement(required = true)
+    protected String town;
+    @XmlElement(required = true)
+    protected String postalCode;
+    @XmlElement(required = true)
+    protected String streetName;
+    protected String streetNumber;
+    protected String apartmentNumber;
+
+    /**
+     * Gets the value of the countryCodeAddress property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getCountryCodeAddress() {
+        return countryCodeAddress;
+    }
+
+    /**
+     * Sets the value of the countryCodeAddress property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setCountryCodeAddress(String value) {
+        this.countryCodeAddress = value;
+    }
+
+    /**
+     * Gets the value of the state property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getState() {
+        return state;
+    }
+
+    /**
+     * Sets the value of the state property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setState(String value) {
+        this.state = value;
+    }
+
+    /**
+     * Gets the value of the municipalityCode property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getMunicipalityCode() {
+        return municipalityCode;
+    }
+
+    /**
+     * Sets the value of the municipalityCode property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setMunicipalityCode(String value) {
+        this.municipalityCode = value;
+    }
+
+    /**
+     * Gets the value of the town property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTown() {
+        return town;
+    }
+
+    /**
+     * Sets the value of the town property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTown(String value) {
+        this.town = value;
+    }
+
+    /**
+     * Gets the value of the postalCode property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getPostalCode() {
+        return postalCode;
+    }
+
+    /**
+     * Sets the value of the postalCode property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setPostalCode(String value) {
+        this.postalCode = value;
+    }
+
+    /**
+     * Gets the value of the streetName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStreetName() {
+        return streetName;
+    }
+
+    /**
+     * Sets the value of the streetName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStreetName(String value) {
+        this.streetName = value;
+    }
+
+    /**
+     * Gets the value of the streetNumber property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStreetNumber() {
+        return streetNumber;
+    }
+
+    /**
+     * Sets the value of the streetNumber property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStreetNumber(String value) {
+        this.streetNumber = value;
+    }
+
+    /**
+     * Gets the value of the apartmentNumber property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getApartmentNumber() {
+        return apartmentNumber;
+    }
+
+    /**
+     * Sets the value of the apartmentNumber property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setApartmentNumber(String value) {
+        this.apartmentNumber = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/Habilitation.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/Habilitation.java.svn-base
new file mode 100644
index 000000000..3d99c9600
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/Habilitation.java.svn-base
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for habilitation complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="habilitation">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="ability" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "habilitation", propOrder = {
+    "ability",
+    "aqaa"
+})
+public class Habilitation {
+
+    @XmlElement(required = true)
+    protected String ability;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the ability property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAbility() {
+        return ability;
+    }
+
+    /**
+     * Sets the value of the ability property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAbility(String value) {
+        this.ability = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HabilitationType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HabilitationType.java.svn-base
new file mode 100644
index 000000000..6a5cb7b00
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HabilitationType.java.svn-base
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for habilitationType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="habilitationType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="ability" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "habilitationType", propOrder = {
+    "ability",
+    "aqaa"
+})
+public class HabilitationType {
+
+    @XmlElement(required = true)
+    protected String ability;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the ability property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAbility() {
+        return ability;
+    }
+
+    /**
+     * Sets the value of the ability property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAbility(String value) {
+        this.ability = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasAccountInBankType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasAccountInBankType.java.svn-base
new file mode 100644
index 000000000..cc09f0486
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasAccountInBankType.java.svn-base
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for hasAccountInBankType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="hasAccountInBankType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="bankName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "hasAccountInBankType", propOrder = {
+    "bankName",
+    "aqaa"
+})
+public class HasAccountInBankType {
+
+    @XmlElement(required = true)
+    protected String bankName;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the bankName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getBankName() {
+        return bankName;
+    }
+
+    /**
+     * Sets the value of the bankName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setBankName(String value) {
+        this.bankName = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasDegreeType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasDegreeType.java.svn-base
new file mode 100644
index 000000000..ea466cb18
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/HasDegreeType.java.svn-base
@@ -0,0 +1,174 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for hasDegreeType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="hasDegreeType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="study" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}studyType"/>
+ *         &lt;element name="level" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}LevelType"/>
+ *         &lt;element name="yearObtained" type="{http://www.w3.org/2001/XMLSchema}integer"/>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "hasDegreeType", propOrder = {
+    "study",
+    "level",
+    "yearObtained",
+    "nameOfInstitution",
+    "aqaa"
+})
+public class HasDegreeType {
+
+    @XmlElement(required = true)
+    protected String study;
+    @XmlElement(required = true)
+    protected String level;
+    @XmlElement(required = true)
+    protected BigInteger yearObtained;
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the study property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStudy() {
+        return study;
+    }
+
+    /**
+     * Sets the value of the study property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStudy(String value) {
+        this.study = value;
+    }
+
+    /**
+     * Gets the value of the level property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLevel() {
+        return level;
+    }
+
+    /**
+     * Sets the value of the level property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLevel(String value) {
+        this.level = value;
+    }
+
+    /**
+     * Gets the value of the yearObtained property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getYearObtained() {
+        return yearObtained;
+    }
+
+    /**
+     * Sets the value of the yearObtained property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setYearObtained(BigInteger value) {
+        this.yearObtained = value;
+    }
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAcademicStaffType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAcademicStaffType.java.svn-base
new file mode 100644
index 000000000..02d9286d8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAcademicStaffType.java.svn-base
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isAcademicStaffType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isAcademicStaffType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="occupation" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}occupationType"/>
+ *         &lt;element name="knowledgearea" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isAcademicStaffType", propOrder = {
+    "nameOfInstitution",
+    "occupation",
+    "knowledgearea",
+    "aqaa"
+})
+public class IsAcademicStaffType {
+
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(required = true)
+    protected String occupation;
+    @XmlElement(required = true)
+    protected String knowledgearea;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the occupation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getOccupation() {
+        return occupation;
+    }
+
+    /**
+     * Sets the value of the occupation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setOccupation(String value) {
+        this.occupation = value;
+    }
+
+    /**
+     * Gets the value of the knowledgearea property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getKnowledgearea() {
+        return knowledgearea;
+    }
+
+    /**
+     * Sets the value of the knowledgearea property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setKnowledgearea(String value) {
+        this.knowledgearea = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAdminStaffType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAdminStaffType.java.svn-base
new file mode 100644
index 000000000..0de16ee77
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsAdminStaffType.java.svn-base
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isAdminStaffType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isAdminStaffType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="adminStaff" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isAdminStaffType", propOrder = {
+    "adminStaff",
+    "aqaa"
+})
+public class IsAdminStaffType {
+
+    @XmlElement(required = true)
+    protected String adminStaff;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the adminStaff property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAdminStaff() {
+        return adminStaff;
+    }
+
+    /**
+     * Sets the value of the adminStaff property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAdminStaff(String value) {
+        this.adminStaff = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsCourseCoordinatorType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsCourseCoordinatorType.java.svn-base
new file mode 100644
index 000000000..58caa2f22
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsCourseCoordinatorType.java.svn-base
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isCourseCoordinatorType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isCourseCoordinatorType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="courseCoodinator" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isCourseCoordinatorType", propOrder = {
+    "courseCoodinator",
+    "aqaa"
+})
+public class IsCourseCoordinatorType {
+
+    @XmlElement(required = true)
+    protected String courseCoodinator;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the courseCoodinator property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getCourseCoodinator() {
+        return courseCoodinator;
+    }
+
+    /**
+     * Sets the value of the courseCoodinator property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setCourseCoodinator(String value) {
+        this.courseCoodinator = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHCPType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHCPType.java.svn-base
new file mode 100644
index 000000000..17e315d2d
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHCPType.java.svn-base
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isHCPType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isHCPType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfOrganisation" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="HCPType" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}HCPType"/>
+ *         &lt;element name="specialisation" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}specialisationType"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isHCPType", propOrder = {
+    "nameOfOrganisation",
+    "hcpType",
+    "specialisation",
+    "aqaa"
+})
+public class IsHCPType {
+
+    @XmlElement(required = true)
+    protected String nameOfOrganisation;
+    @XmlElement(name = "HCPType", required = true)
+    protected String hcpType;
+    @XmlElement(required = true)
+    protected String specialisation;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfOrganisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfOrganisation() {
+        return nameOfOrganisation;
+    }
+
+    /**
+     * Sets the value of the nameOfOrganisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfOrganisation(String value) {
+        this.nameOfOrganisation = value;
+    }
+
+    /**
+     * Gets the value of the hcpType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHCPType() {
+        return hcpType;
+    }
+
+    /**
+     * Sets the value of the hcpType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHCPType(String value) {
+        this.hcpType = value;
+    }
+
+    /**
+     * Gets the value of the specialisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSpecialisation() {
+        return specialisation;
+    }
+
+    /**
+     * Sets the value of the specialisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSpecialisation(String value) {
+        this.specialisation = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHealthCareProfessionalType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHealthCareProfessionalType.java.svn-base
new file mode 100644
index 000000000..de2003a3f
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsHealthCareProfessionalType.java.svn-base
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isHealthCareProfessionalType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isHealthCareProfessionalType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfOrganisation" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}HCPType"/>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}specialisation"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isHealthCareProfessionalType", propOrder = {
+    "nameOfOrganisation",
+    "hcpType",
+    "specialisation",
+    "aqaa"
+})
+public class IsHealthCareProfessionalType {
+
+    @XmlElement(required = true)
+    protected String nameOfOrganisation;
+    @XmlElement(name = "HCPType", required = true)
+    protected String hcpType;
+    @XmlElement(required = true)
+    protected String specialisation;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfOrganisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfOrganisation() {
+        return nameOfOrganisation;
+    }
+
+    /**
+     * Sets the value of the nameOfOrganisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfOrganisation(String value) {
+        this.nameOfOrganisation = value;
+    }
+
+    /**
+     * Gets the value of the hcpType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHCPType() {
+        return hcpType;
+    }
+
+    /**
+     * Sets the value of the hcpType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHCPType(String value) {
+        this.hcpType = value;
+    }
+
+    /**
+     * Gets the value of the specialisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSpecialisation() {
+        return specialisation;
+    }
+
+    /**
+     * Sets the value of the specialisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSpecialisation(String value) {
+        this.specialisation = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsStudentType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsStudentType.java.svn-base
new file mode 100644
index 000000000..6a7dc838a
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsStudentType.java.svn-base
@@ -0,0 +1,146 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isStudentType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isStudentType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}study"/>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="course" type="{http://www.w3.org/2001/XMLSchema}integer"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isStudentType", propOrder = {
+    "study",
+    "nameOfInstitution",
+    "course",
+    "aqaa"
+})
+public class IsStudentType {
+
+    @XmlElement(required = true)
+    protected String study;
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(required = true)
+    protected BigInteger course;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the study property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStudy() {
+        return study;
+    }
+
+    /**
+     * Sets the value of the study property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStudy(String value) {
+        this.study = value;
+    }
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the course property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getCourse() {
+        return course;
+    }
+
+    /**
+     * Sets the value of the course property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setCourse(BigInteger value) {
+        this.course = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsTeacherOfType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsTeacherOfType.java.svn-base
new file mode 100644
index 000000000..810f652c1
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/IsTeacherOfType.java.svn-base
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isTeacherOfType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isTeacherOfType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="course" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="role" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isTeacherOfType", propOrder = {
+    "nameOfInstitution",
+    "course",
+    "role",
+    "aqaa"
+})
+public class IsTeacherOfType {
+
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(required = true)
+    protected String course;
+    @XmlElement(required = true)
+    protected String role;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the course property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getCourse() {
+        return course;
+    }
+
+    /**
+     * Sets the value of the course property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setCourse(String value) {
+        this.course = value;
+    }
+
+    /**
+     * Gets the value of the role property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getRole() {
+        return role;
+    }
+
+    /**
+     * Sets the value of the role property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setRole(String value) {
+        this.role = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateContentType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateContentType.java.svn-base
new file mode 100644
index 000000000..84ce2727b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateContentType.java.svn-base
@@ -0,0 +1,233 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * <p>Java class for mandateContentType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="mandateContentType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="validFrom" type="{http://www.w3.org/2001/XMLSchema}date"/>
+ *         &lt;element name="validTo" type="{http://www.w3.org/2001/XMLSchema}date"/>
+ *         &lt;element name="transactionLimit" type="{http://www.w3.org/2001/XMLSchema}integer"/>
+ *         &lt;element name="transactionLimitCurrency" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}currencyType"/>
+ *         &lt;element name="isJoint" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="ischained" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ *         &lt;element name="typePower" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "mandateContentType", propOrder = {
+    "validFrom",
+    "validTo",
+    "transactionLimit",
+    "transactionLimitCurrency",
+    "isJoint",
+    "ischained",
+    "typePower"
+})
+public class MandateContentType {
+
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "date")
+    protected XMLGregorianCalendar validFrom;
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "date")
+    protected XMLGregorianCalendar validTo;
+    @XmlElement(required = true)
+    protected BigInteger transactionLimit;
+    @XmlElement(required = true)
+    protected String transactionLimitCurrency;
+    @XmlElement(required = true)
+    protected String isJoint;
+    protected boolean ischained;
+    @XmlElement(required = true)
+    protected String typePower;
+
+    /**
+     * Gets the value of the validFrom property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getValidFrom() {
+        return validFrom;
+    }
+
+    /**
+     * Sets the value of the validFrom property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setValidFrom(XMLGregorianCalendar value) {
+        this.validFrom = value;
+    }
+
+    /**
+     * Gets the value of the validTo property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getValidTo() {
+        return validTo;
+    }
+
+    /**
+     * Sets the value of the validTo property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setValidTo(XMLGregorianCalendar value) {
+        this.validTo = value;
+    }
+
+    /**
+     * Gets the value of the transactionLimit property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getTransactionLimit() {
+        return transactionLimit;
+    }
+
+    /**
+     * Sets the value of the transactionLimit property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setTransactionLimit(BigInteger value) {
+        this.transactionLimit = value;
+    }
+
+    /**
+     * Gets the value of the transactionLimitCurrency property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTransactionLimitCurrency() {
+        return transactionLimitCurrency;
+    }
+
+    /**
+     * Sets the value of the transactionLimitCurrency property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTransactionLimitCurrency(String value) {
+        this.transactionLimitCurrency = value;
+    }
+
+    /**
+     * Gets the value of the isJoint property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getIsJoint() {
+        return isJoint;
+    }
+
+    /**
+     * Sets the value of the isJoint property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setIsJoint(String value) {
+        this.isJoint = value;
+    }
+
+    /**
+     * Gets the value of the ischained property.
+     * 
+     */
+    public boolean isIschained() {
+        return ischained;
+    }
+
+    /**
+     * Sets the value of the ischained property.
+     * 
+     */
+    public void setIschained(boolean value) {
+        this.ischained = value;
+    }
+
+    /**
+     * Gets the value of the typePower property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTypePower() {
+        return typePower;
+    }
+
+    /**
+     * Sets the value of the typePower property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTypePower(String value) {
+        this.typePower = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateType.java.svn-base
new file mode 100644
index 000000000..26597dc6b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/MandateType.java.svn-base
@@ -0,0 +1,125 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for mandateType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="mandateType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="represented" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}representationPersonType"/>
+ *         &lt;element name="representing" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}representationPersonType"/>
+ *         &lt;element name="mandateContent" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}mandateContentType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "mandateType", propOrder = {
+    "represented",
+    "representing",
+    "mandateContent"
+})
+public class MandateType {
+
+    @XmlElement(required = true)
+    protected RepresentationPersonType represented;
+    @XmlElement(required = true)
+    protected RepresentationPersonType representing;
+    @XmlElement(required = true)
+    protected MandateContentType mandateContent;
+
+    /**
+     * Gets the value of the represented property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public RepresentationPersonType getRepresented() {
+        return represented;
+    }
+
+    /**
+     * Sets the value of the represented property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public void setRepresented(RepresentationPersonType value) {
+        this.represented = value;
+    }
+
+    /**
+     * Gets the value of the representing property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public RepresentationPersonType getRepresenting() {
+        return representing;
+    }
+
+    /**
+     * Sets the value of the representing property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public void setRepresenting(RepresentationPersonType value) {
+        this.representing = value;
+    }
+
+    /**
+     * Gets the value of the mandateContent property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link MandateContentType }
+     *     
+     */
+    public MandateContentType getMandateContent() {
+        return mandateContent;
+    }
+
+    /**
+     * Sets the value of the mandateContent property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link MandateContentType }
+     *     
+     */
+    public void setMandateContent(MandateContentType value) {
+        this.mandateContent = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/ObjectFactory.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/ObjectFactory.java.svn-base
new file mode 100644
index 000000000..eca4ca3de
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/ObjectFactory.java.svn-base
@@ -0,0 +1,433 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each 
+ * Java content interface and Java element interface 
+ * generated in the eu.stork.peps.complex.attributes package. 
+ * <p>An ObjectFactory allows you to programatically 
+ * construct new instances of the Java representation 
+ * for XML content. The Java representation of XML 
+ * content can consist of schema derived interfaces 
+ * and classes representing the binding of schema 
+ * type definitions, element declarations and model 
+ * groups.  Factory methods for each of these are 
+ * provided in this class.
+ * 
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _Habilitation_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "habilitation");
+    private final static QName _HasDegree_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "hasDegree");
+    private final static QName _SpApplication_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "spApplication");
+    private final static QName _Specialisation_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "specialisation");
+    private final static QName _IsStudent_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isStudent");
+    private final static QName _AQAA_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "AQAA");
+    private final static QName _HCPType_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "HCPType");
+    private final static QName _CanonicalResidenceAddress_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "canonicalResidenceAddress");
+    private final static QName _AcTitle_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "acTitle");
+    private final static QName _QualityAuthenticationAssuranceLevel_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "QualityAuthenticationAssuranceLevel");
+    private final static QName _IsAcademicStaff_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isAcademicStaff");
+    private final static QName _IsTeacherOf_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isTeacherOf");
+    private final static QName _IsCourseCoordinator_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isCourseCoordinator");
+    private final static QName _CanonicalRegisteredAddress_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "canonicalRegisteredAddress");
+    private final static QName _SpCountry_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "spCountry");
+    private final static QName _IsAdminStaff_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isAdminStaff");
+    private final static QName _CitizenCountryCode_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "CitizenCountryCode");
+    private final static QName _AttributeValue_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "AttributeValue");
+    private final static QName _HasAccountInBank_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "hasAccountInBank");
+    private final static QName _CountryCodeAddress_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "countryCodeAddress");
+    private final static QName _Study_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "study");
+    private final static QName _IsHealthCareProfessional_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isHealthCareProfessional");
+    private final static QName _Mandate_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "mandate");
+    private final static QName _RequestedAttribute_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "RequestedAttribute");
+    private final static QName _SpSector_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "spSector");
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: eu.stork.peps.complex.attributes
+     * 
+     */
+    public ObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link RequestedAttributeType }
+     * 
+     */
+    public RequestedAttributeType createRequestedAttributeType() {
+        return new RequestedAttributeType();
+    }
+
+    /**
+     * Create an instance of {@link MandateType }
+     * 
+     */
+    public MandateType createMandateType() {
+        return new MandateType();
+    }
+
+    /**
+     * Create an instance of {@link HasAccountInBankType }
+     * 
+     */
+    public HasAccountInBankType createHasAccountInBankType() {
+        return new HasAccountInBankType();
+    }
+
+    /**
+     * Create an instance of {@link IsHealthCareProfessionalType }
+     * 
+     */
+    public IsHealthCareProfessionalType createIsHealthCareProfessionalType() {
+        return new IsHealthCareProfessionalType();
+    }
+
+    /**
+     * Create an instance of {@link IsAdminStaffType }
+     * 
+     */
+    public IsAdminStaffType createIsAdminStaffType() {
+        return new IsAdminStaffType();
+    }
+
+    /**
+     * Create an instance of {@link CanonicalAddressType }
+     * 
+     */
+    public CanonicalAddressType createCanonicalAddressType() {
+        return new CanonicalAddressType();
+    }
+
+    /**
+     * Create an instance of {@link IsCourseCoordinatorType }
+     * 
+     */
+    public IsCourseCoordinatorType createIsCourseCoordinatorType() {
+        return new IsCourseCoordinatorType();
+    }
+
+    /**
+     * Create an instance of {@link IsAcademicStaffType }
+     * 
+     */
+    public IsAcademicStaffType createIsAcademicStaffType() {
+        return new IsAcademicStaffType();
+    }
+
+    /**
+     * Create an instance of {@link IsTeacherOfType }
+     * 
+     */
+    public IsTeacherOfType createIsTeacherOfType() {
+        return new IsTeacherOfType();
+    }
+
+    /**
+     * Create an instance of {@link AcTitleType }
+     * 
+     */
+    public AcTitleType createAcTitleType() {
+        return new AcTitleType();
+    }
+
+    /**
+     * Create an instance of {@link IsStudentType }
+     * 
+     */
+    public IsStudentType createIsStudentType() {
+        return new IsStudentType();
+    }
+
+    /**
+     * Create an instance of {@link HasDegreeType }
+     * 
+     */
+    public HasDegreeType createHasDegreeType() {
+        return new HasDegreeType();
+    }
+
+    /**
+     * Create an instance of {@link HabilitationType }
+     * 
+     */
+    public HabilitationType createHabilitationType() {
+        return new HabilitationType();
+    }
+
+    /**
+     * Create an instance of {@link MandateContentType }
+     * 
+     */
+    public MandateContentType createMandateContentType() {
+        return new MandateContentType();
+    }
+
+    /**
+     * Create an instance of {@link RepresentationPersonType }
+     * 
+     */
+    public RepresentationPersonType createRepresentationPersonType() {
+        return new RepresentationPersonType();
+    }
+
+    /**
+     * Create an instance of {@link Habilitation }
+     * 
+     */
+    public Habilitation createHabilitation() {
+        return new Habilitation();
+    }
+
+    /**
+     * Create an instance of {@link IsHCPType }
+     * 
+     */
+    public IsHCPType createIsHCPType() {
+        return new IsHCPType();
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link HabilitationType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "habilitation")
+    public JAXBElement<HabilitationType> createHabilitation(HabilitationType value) {
+        return new JAXBElement<HabilitationType>(_Habilitation_QNAME, HabilitationType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link HasDegreeType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "hasDegree")
+    public JAXBElement<HasDegreeType> createHasDegree(HasDegreeType value) {
+        return new JAXBElement<HasDegreeType>(_HasDegree_QNAME, HasDegreeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "spApplication")
+    public JAXBElement<String> createSpApplication(String value) {
+        return new JAXBElement<String>(_SpApplication_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "specialisation")
+    public JAXBElement<String> createSpecialisation(String value) {
+        return new JAXBElement<String>(_Specialisation_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsStudentType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isStudent")
+    public JAXBElement<IsStudentType> createIsStudent(IsStudentType value) {
+        return new JAXBElement<IsStudentType>(_IsStudent_QNAME, IsStudentType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "AQAA")
+    public JAXBElement<Integer> createAQAA(Integer value) {
+        return new JAXBElement<Integer>(_AQAA_QNAME, Integer.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "HCPType")
+    public JAXBElement<String> createHCPType(String value) {
+        return new JAXBElement<String>(_HCPType_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link CanonicalAddressType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "canonicalResidenceAddress")
+    public JAXBElement<CanonicalAddressType> createCanonicalResidenceAddress(CanonicalAddressType value) {
+        return new JAXBElement<CanonicalAddressType>(_CanonicalResidenceAddress_QNAME, CanonicalAddressType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AcTitleType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "acTitle")
+    public JAXBElement<AcTitleType> createAcTitle(AcTitleType value) {
+        return new JAXBElement<AcTitleType>(_AcTitle_QNAME, AcTitleType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "QualityAuthenticationAssuranceLevel")
+    public JAXBElement<Integer> createQualityAuthenticationAssuranceLevel(Integer value) {
+        return new JAXBElement<Integer>(_QualityAuthenticationAssuranceLevel_QNAME, Integer.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsAcademicStaffType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isAcademicStaff")
+    public JAXBElement<IsAcademicStaffType> createIsAcademicStaff(IsAcademicStaffType value) {
+        return new JAXBElement<IsAcademicStaffType>(_IsAcademicStaff_QNAME, IsAcademicStaffType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsTeacherOfType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isTeacherOf")
+    public JAXBElement<IsTeacherOfType> createIsTeacherOf(IsTeacherOfType value) {
+        return new JAXBElement<IsTeacherOfType>(_IsTeacherOf_QNAME, IsTeacherOfType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsCourseCoordinatorType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isCourseCoordinator")
+    public JAXBElement<IsCourseCoordinatorType> createIsCourseCoordinator(IsCourseCoordinatorType value) {
+        return new JAXBElement<IsCourseCoordinatorType>(_IsCourseCoordinator_QNAME, IsCourseCoordinatorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link CanonicalAddressType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "canonicalRegisteredAddress")
+    public JAXBElement<CanonicalAddressType> createCanonicalRegisteredAddress(CanonicalAddressType value) {
+        return new JAXBElement<CanonicalAddressType>(_CanonicalRegisteredAddress_QNAME, CanonicalAddressType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "spCountry")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    public JAXBElement<String> createSpCountry(String value) {
+        return new JAXBElement<String>(_SpCountry_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsAdminStaffType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isAdminStaff")
+    public JAXBElement<IsAdminStaffType> createIsAdminStaff(IsAdminStaffType value) {
+        return new JAXBElement<IsAdminStaffType>(_IsAdminStaff_QNAME, IsAdminStaffType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "CitizenCountryCode")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    public JAXBElement<String> createCitizenCountryCode(String value) {
+        return new JAXBElement<String>(_CitizenCountryCode_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Object }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "AttributeValue")
+    public JAXBElement<Object> createAttributeValue(Object value) {
+        return new JAXBElement<Object>(_AttributeValue_QNAME, Object.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link HasAccountInBankType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "hasAccountInBank")
+    public JAXBElement<HasAccountInBankType> createHasAccountInBank(HasAccountInBankType value) {
+        return new JAXBElement<HasAccountInBankType>(_HasAccountInBank_QNAME, HasAccountInBankType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "countryCodeAddress")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    public JAXBElement<String> createCountryCodeAddress(String value) {
+        return new JAXBElement<String>(_CountryCodeAddress_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "study")
+    public JAXBElement<String> createStudy(String value) {
+        return new JAXBElement<String>(_Study_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsHealthCareProfessionalType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isHealthCareProfessional")
+    public JAXBElement<IsHealthCareProfessionalType> createIsHealthCareProfessional(IsHealthCareProfessionalType value) {
+        return new JAXBElement<IsHealthCareProfessionalType>(_IsHealthCareProfessional_QNAME, IsHealthCareProfessionalType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link MandateType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "mandate")
+    public JAXBElement<MandateType> createMandate(MandateType value) {
+        return new JAXBElement<MandateType>(_Mandate_QNAME, MandateType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RequestedAttributeType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "RequestedAttribute")
+    public JAXBElement<RequestedAttributeType> createRequestedAttribute(RequestedAttributeType value) {
+        return new JAXBElement<RequestedAttributeType>(_RequestedAttribute_QNAME, RequestedAttributeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "spSector")
+    public JAXBElement<String> createSpSector(String value) {
+        return new JAXBElement<String>(_SpSector_QNAME, String.class, null, value);
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RepresentationPersonType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RepresentationPersonType.java.svn-base
new file mode 100644
index 000000000..b1d993f89
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RepresentationPersonType.java.svn-base
@@ -0,0 +1,289 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for representationPersonType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="representationPersonType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;choice>
+ *         &lt;sequence>
+ *           &lt;element name="eIdentifier" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="givenName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="surname" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="dateOfBirth" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;/sequence>
+ *         &lt;sequence>
+ *           &lt;element name="eLPIdentifier" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="address" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="canonicalAddress" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}canonicalAddressType"/>
+ *           &lt;element name="type" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;/sequence>
+ *       &lt;/choice>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "representationPersonType", propOrder = {
+    "eIdentifier",
+    "givenName",
+    "surname",
+    "dateOfBirth",
+    "elpIdentifier",
+    "name",
+    "address",
+    "canonicalAddress",
+    "type"
+})
+public class RepresentationPersonType {
+
+    protected String eIdentifier;
+    protected String givenName;
+    protected String surname;
+    protected String dateOfBirth;
+    @XmlElement(name = "eLPIdentifier")
+    protected String elpIdentifier;
+    protected String name;
+    protected String address;
+    protected CanonicalAddressType canonicalAddress;
+    protected String type;
+
+    /**
+     * Gets the value of the eIdentifier property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getEIdentifier() {
+        return eIdentifier;
+    }
+
+    /**
+     * Sets the value of the eIdentifier property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setEIdentifier(String value) {
+        this.eIdentifier = value;
+    }
+
+    /**
+     * Gets the value of the givenName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGivenName() {
+        return givenName;
+    }
+
+    /**
+     * Sets the value of the givenName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGivenName(String value) {
+        this.givenName = value;
+    }
+
+    /**
+     * Gets the value of the surname property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSurname() {
+        return surname;
+    }
+
+    /**
+     * Sets the value of the surname property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSurname(String value) {
+        this.surname = value;
+    }
+
+    /**
+     * Gets the value of the dateOfBirth property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDateOfBirth() {
+        return dateOfBirth;
+    }
+
+    /**
+     * Sets the value of the dateOfBirth property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDateOfBirth(String value) {
+        this.dateOfBirth = value;
+    }
+
+    /**
+     * Gets the value of the elpIdentifier property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getELPIdentifier() {
+        return elpIdentifier;
+    }
+
+    /**
+     * Sets the value of the elpIdentifier property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setELPIdentifier(String value) {
+        this.elpIdentifier = value;
+    }
+
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    /**
+     * Gets the value of the address property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAddress() {
+        return address;
+    }
+
+    /**
+     * Sets the value of the address property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAddress(String value) {
+        this.address = value;
+    }
+
+    /**
+     * Gets the value of the canonicalAddress property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link CanonicalAddressType }
+     *     
+     */
+    public CanonicalAddressType getCanonicalAddress() {
+        return canonicalAddress;
+    }
+
+    /**
+     * Sets the value of the canonicalAddress property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link CanonicalAddressType }
+     *     
+     */
+    public void setCanonicalAddress(CanonicalAddressType value) {
+        this.canonicalAddress = value;
+    }
+
+    /**
+     * Gets the value of the type property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * Sets the value of the type property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setType(String value) {
+        this.type = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RequestedAttributeType.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RequestedAttributeType.java.svn-base
new file mode 100644
index 000000000..6a7c0b443
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/RequestedAttributeType.java.svn-base
@@ -0,0 +1,212 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.namespace.QName;
+
+
+/**
+ * <p>Java class for RequestedAttributeType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="RequestedAttributeType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}AttributeValue" maxOccurs="unbounded" minOccurs="0"/>
+ *       &lt;/sequence>
+ *       &lt;attribute name="Name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       &lt;attribute name="NameFormat" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *       &lt;attribute name="FriendlyName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       &lt;attribute name="isRequired" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *       &lt;anyAttribute processContents='lax' namespace='##other'/>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "RequestedAttributeType", propOrder = {
+    "attributeValue"
+})
+public class RequestedAttributeType {
+
+    @XmlElement(name = "AttributeValue")
+    protected List<Object> attributeValue;
+    @XmlAttribute(name = "Name", required = true)
+    protected String name;
+    @XmlAttribute(name = "NameFormat", required = true)
+    @XmlSchemaType(name = "anyURI")
+    protected String nameFormat;
+    @XmlAttribute(name = "FriendlyName")
+    protected String friendlyName;
+    @XmlAttribute(name = "isRequired")
+    protected Boolean isRequired;
+    @XmlAnyAttribute
+    private Map<QName, String> otherAttributes = new HashMap<QName, String>();
+
+    /**
+     * Gets the value of the attributeValue property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the attributeValue property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAttributeValue().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAttributeValue() {
+        if (attributeValue == null) {
+            attributeValue = new ArrayList<Object>();
+        }
+        return this.attributeValue;
+    }
+
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    /**
+     * Gets the value of the nameFormat property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameFormat() {
+        return nameFormat;
+    }
+
+    /**
+     * Sets the value of the nameFormat property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameFormat(String value) {
+        this.nameFormat = value;
+    }
+
+    /**
+     * Gets the value of the friendlyName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getFriendlyName() {
+        return friendlyName;
+    }
+
+    /**
+     * Sets the value of the friendlyName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setFriendlyName(String value) {
+        this.friendlyName = value;
+    }
+
+    /**
+     * Gets the value of the isRequired property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link Boolean }
+     *     
+     */
+    public Boolean isIsRequired() {
+        return isRequired;
+    }
+
+    /**
+     * Sets the value of the isRequired property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link Boolean }
+     *     
+     */
+    public void setIsRequired(Boolean value) {
+        this.isRequired = value;
+    }
+
+    /**
+     * Gets a map that contains attributes that aren't bound to any typed property on this class.
+     * 
+     * <p>
+     * the map is keyed by the name of the attribute and 
+     * the value is the string value of the attribute.
+     * 
+     * the map returned by this method is live, and you can add new attribute
+     * by updating the map directly. Because of this design, there's no setter.
+     * 
+     * 
+     * @return
+     *     always non-null
+     */
+    public Map<QName, String> getOtherAttributes() {
+        return otherAttributes;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/package-info.java.svn-base b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/package-info.java.svn-base
new file mode 100644
index 000000000..47e225d22
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/.svn/text-base/package-info.java.svn-base
@@ -0,0 +1,9 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+@javax.xml.bind.annotation.XmlSchema(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+package eu.stork.peps.complex.attributes;
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AcTitleType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AcTitleType.java
new file mode 100644
index 000000000..3c214cb7b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AcTitleType.java
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for acTitleType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="acTitleType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="titleNormalised" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}titleNormalisedType"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "acTitleType", propOrder = {
+    "titleNormalised",
+    "aqaa"
+})
+public class AcTitleType {
+
+    @XmlElement(required = true)
+    protected String titleNormalised;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the titleNormalised property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTitleNormalised() {
+        return titleNormalised;
+    }
+
+    /**
+     * Sets the value of the titleNormalised property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTitleNormalised(String value) {
+        this.titleNormalised = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AttributeStatusType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AttributeStatusType.java
new file mode 100644
index 000000000..1a815e944
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/AttributeStatusType.java
@@ -0,0 +1,61 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for AttributeStatusType.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * <p>
+ * <pre>
+ * &lt;simpleType name="AttributeStatusType">
+ *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *     &lt;enumeration value="Available"/>
+ *     &lt;enumeration value="NotAvailable"/>
+ *     &lt;enumeration value="Withheld"/>
+ *   &lt;/restriction>
+ * &lt;/simpleType>
+ * </pre>
+ * 
+ */
+@XmlType(name = "AttributeStatusType")
+@XmlEnum
+public enum AttributeStatusType {
+
+    @XmlEnumValue("Available")
+    AVAILABLE("Available"),
+    @XmlEnumValue("NotAvailable")
+    NOT_AVAILABLE("NotAvailable"),
+    @XmlEnumValue("Withheld")
+    WITHHELD("Withheld");
+    private final String value;
+
+    AttributeStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static AttributeStatusType fromValue(String v) {
+        for (AttributeStatusType c: AttributeStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/CanonicalAddressType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/CanonicalAddressType.java
new file mode 100644
index 000000000..fa0289cfa
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/CanonicalAddressType.java
@@ -0,0 +1,264 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+
+/**
+ * <p>Java class for canonicalAddressType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="canonicalAddressType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="countryCodeAddress" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}CountryCodeType"/>
+ *         &lt;element name="state" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="municipalityCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="town" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="postalCode" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="streetName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="streetNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="apartmentNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "canonicalAddressType", propOrder = {
+    "countryCodeAddress",
+    "state",
+    "municipalityCode",
+    "town",
+    "postalCode",
+    "streetName",
+    "streetNumber",
+    "apartmentNumber"
+})
+public class CanonicalAddressType {
+
+    @XmlElement(required = true)
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    protected String countryCodeAddress;
+    protected String state;
+    protected String municipalityCode;
+    @XmlElement(required = true)
+    protected String town;
+    @XmlElement(required = true)
+    protected String postalCode;
+    @XmlElement(required = true)
+    protected String streetName;
+    protected String streetNumber;
+    protected String apartmentNumber;
+
+    /**
+     * Gets the value of the countryCodeAddress property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getCountryCodeAddress() {
+        return countryCodeAddress;
+    }
+
+    /**
+     * Sets the value of the countryCodeAddress property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setCountryCodeAddress(String value) {
+        this.countryCodeAddress = value;
+    }
+
+    /**
+     * Gets the value of the state property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getState() {
+        return state;
+    }
+
+    /**
+     * Sets the value of the state property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setState(String value) {
+        this.state = value;
+    }
+
+    /**
+     * Gets the value of the municipalityCode property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getMunicipalityCode() {
+        return municipalityCode;
+    }
+
+    /**
+     * Sets the value of the municipalityCode property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setMunicipalityCode(String value) {
+        this.municipalityCode = value;
+    }
+
+    /**
+     * Gets the value of the town property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTown() {
+        return town;
+    }
+
+    /**
+     * Sets the value of the town property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTown(String value) {
+        this.town = value;
+    }
+
+    /**
+     * Gets the value of the postalCode property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getPostalCode() {
+        return postalCode;
+    }
+
+    /**
+     * Sets the value of the postalCode property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setPostalCode(String value) {
+        this.postalCode = value;
+    }
+
+    /**
+     * Gets the value of the streetName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStreetName() {
+        return streetName;
+    }
+
+    /**
+     * Sets the value of the streetName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStreetName(String value) {
+        this.streetName = value;
+    }
+
+    /**
+     * Gets the value of the streetNumber property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStreetNumber() {
+        return streetNumber;
+    }
+
+    /**
+     * Sets the value of the streetNumber property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStreetNumber(String value) {
+        this.streetNumber = value;
+    }
+
+    /**
+     * Gets the value of the apartmentNumber property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getApartmentNumber() {
+        return apartmentNumber;
+    }
+
+    /**
+     * Sets the value of the apartmentNumber property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setApartmentNumber(String value) {
+        this.apartmentNumber = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/Habilitation.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/Habilitation.java
new file mode 100644
index 000000000..3d99c9600
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/Habilitation.java
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for habilitation complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="habilitation">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="ability" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "habilitation", propOrder = {
+    "ability",
+    "aqaa"
+})
+public class Habilitation {
+
+    @XmlElement(required = true)
+    protected String ability;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the ability property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAbility() {
+        return ability;
+    }
+
+    /**
+     * Sets the value of the ability property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAbility(String value) {
+        this.ability = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HabilitationType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HabilitationType.java
new file mode 100644
index 000000000..6a5cb7b00
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HabilitationType.java
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for habilitationType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="habilitationType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="ability" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "habilitationType", propOrder = {
+    "ability",
+    "aqaa"
+})
+public class HabilitationType {
+
+    @XmlElement(required = true)
+    protected String ability;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the ability property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAbility() {
+        return ability;
+    }
+
+    /**
+     * Sets the value of the ability property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAbility(String value) {
+        this.ability = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasAccountInBankType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasAccountInBankType.java
new file mode 100644
index 000000000..cc09f0486
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasAccountInBankType.java
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for hasAccountInBankType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="hasAccountInBankType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="bankName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "hasAccountInBankType", propOrder = {
+    "bankName",
+    "aqaa"
+})
+public class HasAccountInBankType {
+
+    @XmlElement(required = true)
+    protected String bankName;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the bankName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getBankName() {
+        return bankName;
+    }
+
+    /**
+     * Sets the value of the bankName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setBankName(String value) {
+        this.bankName = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasDegreeType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasDegreeType.java
new file mode 100644
index 000000000..ea466cb18
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/HasDegreeType.java
@@ -0,0 +1,174 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for hasDegreeType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="hasDegreeType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="study" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}studyType"/>
+ *         &lt;element name="level" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}LevelType"/>
+ *         &lt;element name="yearObtained" type="{http://www.w3.org/2001/XMLSchema}integer"/>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "hasDegreeType", propOrder = {
+    "study",
+    "level",
+    "yearObtained",
+    "nameOfInstitution",
+    "aqaa"
+})
+public class HasDegreeType {
+
+    @XmlElement(required = true)
+    protected String study;
+    @XmlElement(required = true)
+    protected String level;
+    @XmlElement(required = true)
+    protected BigInteger yearObtained;
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the study property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStudy() {
+        return study;
+    }
+
+    /**
+     * Sets the value of the study property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStudy(String value) {
+        this.study = value;
+    }
+
+    /**
+     * Gets the value of the level property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLevel() {
+        return level;
+    }
+
+    /**
+     * Sets the value of the level property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLevel(String value) {
+        this.level = value;
+    }
+
+    /**
+     * Gets the value of the yearObtained property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getYearObtained() {
+        return yearObtained;
+    }
+
+    /**
+     * Sets the value of the yearObtained property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setYearObtained(BigInteger value) {
+        this.yearObtained = value;
+    }
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAcademicStaffType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAcademicStaffType.java
new file mode 100644
index 000000000..02d9286d8
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAcademicStaffType.java
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isAcademicStaffType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isAcademicStaffType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="occupation" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}occupationType"/>
+ *         &lt;element name="knowledgearea" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isAcademicStaffType", propOrder = {
+    "nameOfInstitution",
+    "occupation",
+    "knowledgearea",
+    "aqaa"
+})
+public class IsAcademicStaffType {
+
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(required = true)
+    protected String occupation;
+    @XmlElement(required = true)
+    protected String knowledgearea;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the occupation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getOccupation() {
+        return occupation;
+    }
+
+    /**
+     * Sets the value of the occupation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setOccupation(String value) {
+        this.occupation = value;
+    }
+
+    /**
+     * Gets the value of the knowledgearea property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getKnowledgearea() {
+        return knowledgearea;
+    }
+
+    /**
+     * Sets the value of the knowledgearea property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setKnowledgearea(String value) {
+        this.knowledgearea = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAdminStaffType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAdminStaffType.java
new file mode 100644
index 000000000..0de16ee77
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsAdminStaffType.java
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isAdminStaffType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isAdminStaffType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="adminStaff" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isAdminStaffType", propOrder = {
+    "adminStaff",
+    "aqaa"
+})
+public class IsAdminStaffType {
+
+    @XmlElement(required = true)
+    protected String adminStaff;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the adminStaff property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAdminStaff() {
+        return adminStaff;
+    }
+
+    /**
+     * Sets the value of the adminStaff property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAdminStaff(String value) {
+        this.adminStaff = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsCourseCoordinatorType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsCourseCoordinatorType.java
new file mode 100644
index 000000000..58caa2f22
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsCourseCoordinatorType.java
@@ -0,0 +1,89 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isCourseCoordinatorType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isCourseCoordinatorType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="courseCoodinator" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isCourseCoordinatorType", propOrder = {
+    "courseCoodinator",
+    "aqaa"
+})
+public class IsCourseCoordinatorType {
+
+    @XmlElement(required = true)
+    protected String courseCoodinator;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the courseCoodinator property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getCourseCoodinator() {
+        return courseCoodinator;
+    }
+
+    /**
+     * Sets the value of the courseCoodinator property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setCourseCoodinator(String value) {
+        this.courseCoodinator = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHCPType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHCPType.java
new file mode 100644
index 000000000..17e315d2d
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHCPType.java
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isHCPType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isHCPType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfOrganisation" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="HCPType" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}HCPType"/>
+ *         &lt;element name="specialisation" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}specialisationType"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isHCPType", propOrder = {
+    "nameOfOrganisation",
+    "hcpType",
+    "specialisation",
+    "aqaa"
+})
+public class IsHCPType {
+
+    @XmlElement(required = true)
+    protected String nameOfOrganisation;
+    @XmlElement(name = "HCPType", required = true)
+    protected String hcpType;
+    @XmlElement(required = true)
+    protected String specialisation;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfOrganisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfOrganisation() {
+        return nameOfOrganisation;
+    }
+
+    /**
+     * Sets the value of the nameOfOrganisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfOrganisation(String value) {
+        this.nameOfOrganisation = value;
+    }
+
+    /**
+     * Gets the value of the hcpType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHCPType() {
+        return hcpType;
+    }
+
+    /**
+     * Sets the value of the hcpType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHCPType(String value) {
+        this.hcpType = value;
+    }
+
+    /**
+     * Gets the value of the specialisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSpecialisation() {
+        return specialisation;
+    }
+
+    /**
+     * Sets the value of the specialisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSpecialisation(String value) {
+        this.specialisation = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHealthCareProfessionalType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHealthCareProfessionalType.java
new file mode 100644
index 000000000..de2003a3f
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsHealthCareProfessionalType.java
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isHealthCareProfessionalType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isHealthCareProfessionalType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfOrganisation" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}HCPType"/>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}specialisation"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isHealthCareProfessionalType", propOrder = {
+    "nameOfOrganisation",
+    "hcpType",
+    "specialisation",
+    "aqaa"
+})
+public class IsHealthCareProfessionalType {
+
+    @XmlElement(required = true)
+    protected String nameOfOrganisation;
+    @XmlElement(name = "HCPType", required = true)
+    protected String hcpType;
+    @XmlElement(required = true)
+    protected String specialisation;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfOrganisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfOrganisation() {
+        return nameOfOrganisation;
+    }
+
+    /**
+     * Sets the value of the nameOfOrganisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfOrganisation(String value) {
+        this.nameOfOrganisation = value;
+    }
+
+    /**
+     * Gets the value of the hcpType property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHCPType() {
+        return hcpType;
+    }
+
+    /**
+     * Sets the value of the hcpType property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHCPType(String value) {
+        this.hcpType = value;
+    }
+
+    /**
+     * Gets the value of the specialisation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSpecialisation() {
+        return specialisation;
+    }
+
+    /**
+     * Sets the value of the specialisation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSpecialisation(String value) {
+        this.specialisation = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsStudentType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsStudentType.java
new file mode 100644
index 000000000..6a7dc838a
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsStudentType.java
@@ -0,0 +1,146 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isStudentType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isStudentType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}study"/>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="course" type="{http://www.w3.org/2001/XMLSchema}integer"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isStudentType", propOrder = {
+    "study",
+    "nameOfInstitution",
+    "course",
+    "aqaa"
+})
+public class IsStudentType {
+
+    @XmlElement(required = true)
+    protected String study;
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(required = true)
+    protected BigInteger course;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the study property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getStudy() {
+        return study;
+    }
+
+    /**
+     * Sets the value of the study property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setStudy(String value) {
+        this.study = value;
+    }
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the course property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getCourse() {
+        return course;
+    }
+
+    /**
+     * Sets the value of the course property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setCourse(BigInteger value) {
+        this.course = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsTeacherOfType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsTeacherOfType.java
new file mode 100644
index 000000000..810f652c1
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/IsTeacherOfType.java
@@ -0,0 +1,145 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for isTeacherOfType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="isTeacherOfType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="nameOfInstitution" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="course" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="role" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="AQAA" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}QualityAuthenticationAssuranceLevelType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "isTeacherOfType", propOrder = {
+    "nameOfInstitution",
+    "course",
+    "role",
+    "aqaa"
+})
+public class IsTeacherOfType {
+
+    @XmlElement(required = true)
+    protected String nameOfInstitution;
+    @XmlElement(required = true)
+    protected String course;
+    @XmlElement(required = true)
+    protected String role;
+    @XmlElement(name = "AQAA")
+    protected int aqaa;
+
+    /**
+     * Gets the value of the nameOfInstitution property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameOfInstitution() {
+        return nameOfInstitution;
+    }
+
+    /**
+     * Sets the value of the nameOfInstitution property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameOfInstitution(String value) {
+        this.nameOfInstitution = value;
+    }
+
+    /**
+     * Gets the value of the course property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getCourse() {
+        return course;
+    }
+
+    /**
+     * Sets the value of the course property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setCourse(String value) {
+        this.course = value;
+    }
+
+    /**
+     * Gets the value of the role property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getRole() {
+        return role;
+    }
+
+    /**
+     * Sets the value of the role property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setRole(String value) {
+        this.role = value;
+    }
+
+    /**
+     * Gets the value of the aqaa property.
+     * 
+     */
+    public int getAQAA() {
+        return aqaa;
+    }
+
+    /**
+     * Sets the value of the aqaa property.
+     * 
+     */
+    public void setAQAA(int value) {
+        this.aqaa = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateContentType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateContentType.java
new file mode 100644
index 000000000..84ce2727b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateContentType.java
@@ -0,0 +1,233 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * <p>Java class for mandateContentType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="mandateContentType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="validFrom" type="{http://www.w3.org/2001/XMLSchema}date"/>
+ *         &lt;element name="validTo" type="{http://www.w3.org/2001/XMLSchema}date"/>
+ *         &lt;element name="transactionLimit" type="{http://www.w3.org/2001/XMLSchema}integer"/>
+ *         &lt;element name="transactionLimitCurrency" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}currencyType"/>
+ *         &lt;element name="isJoint" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="ischained" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ *         &lt;element name="typePower" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "mandateContentType", propOrder = {
+    "validFrom",
+    "validTo",
+    "transactionLimit",
+    "transactionLimitCurrency",
+    "isJoint",
+    "ischained",
+    "typePower"
+})
+public class MandateContentType {
+
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "date")
+    protected XMLGregorianCalendar validFrom;
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "date")
+    protected XMLGregorianCalendar validTo;
+    @XmlElement(required = true)
+    protected BigInteger transactionLimit;
+    @XmlElement(required = true)
+    protected String transactionLimitCurrency;
+    @XmlElement(required = true)
+    protected String isJoint;
+    protected boolean ischained;
+    @XmlElement(required = true)
+    protected String typePower;
+
+    /**
+     * Gets the value of the validFrom property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getValidFrom() {
+        return validFrom;
+    }
+
+    /**
+     * Sets the value of the validFrom property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setValidFrom(XMLGregorianCalendar value) {
+        this.validFrom = value;
+    }
+
+    /**
+     * Gets the value of the validTo property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getValidTo() {
+        return validTo;
+    }
+
+    /**
+     * Sets the value of the validTo property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setValidTo(XMLGregorianCalendar value) {
+        this.validTo = value;
+    }
+
+    /**
+     * Gets the value of the transactionLimit property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getTransactionLimit() {
+        return transactionLimit;
+    }
+
+    /**
+     * Sets the value of the transactionLimit property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setTransactionLimit(BigInteger value) {
+        this.transactionLimit = value;
+    }
+
+    /**
+     * Gets the value of the transactionLimitCurrency property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTransactionLimitCurrency() {
+        return transactionLimitCurrency;
+    }
+
+    /**
+     * Sets the value of the transactionLimitCurrency property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTransactionLimitCurrency(String value) {
+        this.transactionLimitCurrency = value;
+    }
+
+    /**
+     * Gets the value of the isJoint property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getIsJoint() {
+        return isJoint;
+    }
+
+    /**
+     * Sets the value of the isJoint property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setIsJoint(String value) {
+        this.isJoint = value;
+    }
+
+    /**
+     * Gets the value of the ischained property.
+     * 
+     */
+    public boolean isIschained() {
+        return ischained;
+    }
+
+    /**
+     * Sets the value of the ischained property.
+     * 
+     */
+    public void setIschained(boolean value) {
+        this.ischained = value;
+    }
+
+    /**
+     * Gets the value of the typePower property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTypePower() {
+        return typePower;
+    }
+
+    /**
+     * Sets the value of the typePower property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTypePower(String value) {
+        this.typePower = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateType.java
new file mode 100644
index 000000000..26597dc6b
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/MandateType.java
@@ -0,0 +1,125 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for mandateType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="mandateType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="represented" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}representationPersonType"/>
+ *         &lt;element name="representing" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}representationPersonType"/>
+ *         &lt;element name="mandateContent" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}mandateContentType"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "mandateType", propOrder = {
+    "represented",
+    "representing",
+    "mandateContent"
+})
+public class MandateType {
+
+    @XmlElement(required = true)
+    protected RepresentationPersonType represented;
+    @XmlElement(required = true)
+    protected RepresentationPersonType representing;
+    @XmlElement(required = true)
+    protected MandateContentType mandateContent;
+
+    /**
+     * Gets the value of the represented property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public RepresentationPersonType getRepresented() {
+        return represented;
+    }
+
+    /**
+     * Sets the value of the represented property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public void setRepresented(RepresentationPersonType value) {
+        this.represented = value;
+    }
+
+    /**
+     * Gets the value of the representing property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public RepresentationPersonType getRepresenting() {
+        return representing;
+    }
+
+    /**
+     * Sets the value of the representing property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RepresentationPersonType }
+     *     
+     */
+    public void setRepresenting(RepresentationPersonType value) {
+        this.representing = value;
+    }
+
+    /**
+     * Gets the value of the mandateContent property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link MandateContentType }
+     *     
+     */
+    public MandateContentType getMandateContent() {
+        return mandateContent;
+    }
+
+    /**
+     * Sets the value of the mandateContent property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link MandateContentType }
+     *     
+     */
+    public void setMandateContent(MandateContentType value) {
+        this.mandateContent = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/ObjectFactory.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/ObjectFactory.java
new file mode 100644
index 000000000..eca4ca3de
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/ObjectFactory.java
@@ -0,0 +1,433 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each 
+ * Java content interface and Java element interface 
+ * generated in the eu.stork.peps.complex.attributes package. 
+ * <p>An ObjectFactory allows you to programatically 
+ * construct new instances of the Java representation 
+ * for XML content. The Java representation of XML 
+ * content can consist of schema derived interfaces 
+ * and classes representing the binding of schema 
+ * type definitions, element declarations and model 
+ * groups.  Factory methods for each of these are 
+ * provided in this class.
+ * 
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _Habilitation_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "habilitation");
+    private final static QName _HasDegree_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "hasDegree");
+    private final static QName _SpApplication_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "spApplication");
+    private final static QName _Specialisation_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "specialisation");
+    private final static QName _IsStudent_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isStudent");
+    private final static QName _AQAA_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "AQAA");
+    private final static QName _HCPType_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "HCPType");
+    private final static QName _CanonicalResidenceAddress_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "canonicalResidenceAddress");
+    private final static QName _AcTitle_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "acTitle");
+    private final static QName _QualityAuthenticationAssuranceLevel_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "QualityAuthenticationAssuranceLevel");
+    private final static QName _IsAcademicStaff_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isAcademicStaff");
+    private final static QName _IsTeacherOf_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isTeacherOf");
+    private final static QName _IsCourseCoordinator_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isCourseCoordinator");
+    private final static QName _CanonicalRegisteredAddress_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "canonicalRegisteredAddress");
+    private final static QName _SpCountry_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "spCountry");
+    private final static QName _IsAdminStaff_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isAdminStaff");
+    private final static QName _CitizenCountryCode_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "CitizenCountryCode");
+    private final static QName _AttributeValue_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "AttributeValue");
+    private final static QName _HasAccountInBank_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "hasAccountInBank");
+    private final static QName _CountryCodeAddress_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "countryCodeAddress");
+    private final static QName _Study_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "study");
+    private final static QName _IsHealthCareProfessional_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "isHealthCareProfessional");
+    private final static QName _Mandate_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "mandate");
+    private final static QName _RequestedAttribute_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "RequestedAttribute");
+    private final static QName _SpSector_QNAME = new QName("urn:eu:stork:names:tc:STORK:1.0:assertion", "spSector");
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: eu.stork.peps.complex.attributes
+     * 
+     */
+    public ObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link RequestedAttributeType }
+     * 
+     */
+    public RequestedAttributeType createRequestedAttributeType() {
+        return new RequestedAttributeType();
+    }
+
+    /**
+     * Create an instance of {@link MandateType }
+     * 
+     */
+    public MandateType createMandateType() {
+        return new MandateType();
+    }
+
+    /**
+     * Create an instance of {@link HasAccountInBankType }
+     * 
+     */
+    public HasAccountInBankType createHasAccountInBankType() {
+        return new HasAccountInBankType();
+    }
+
+    /**
+     * Create an instance of {@link IsHealthCareProfessionalType }
+     * 
+     */
+    public IsHealthCareProfessionalType createIsHealthCareProfessionalType() {
+        return new IsHealthCareProfessionalType();
+    }
+
+    /**
+     * Create an instance of {@link IsAdminStaffType }
+     * 
+     */
+    public IsAdminStaffType createIsAdminStaffType() {
+        return new IsAdminStaffType();
+    }
+
+    /**
+     * Create an instance of {@link CanonicalAddressType }
+     * 
+     */
+    public CanonicalAddressType createCanonicalAddressType() {
+        return new CanonicalAddressType();
+    }
+
+    /**
+     * Create an instance of {@link IsCourseCoordinatorType }
+     * 
+     */
+    public IsCourseCoordinatorType createIsCourseCoordinatorType() {
+        return new IsCourseCoordinatorType();
+    }
+
+    /**
+     * Create an instance of {@link IsAcademicStaffType }
+     * 
+     */
+    public IsAcademicStaffType createIsAcademicStaffType() {
+        return new IsAcademicStaffType();
+    }
+
+    /**
+     * Create an instance of {@link IsTeacherOfType }
+     * 
+     */
+    public IsTeacherOfType createIsTeacherOfType() {
+        return new IsTeacherOfType();
+    }
+
+    /**
+     * Create an instance of {@link AcTitleType }
+     * 
+     */
+    public AcTitleType createAcTitleType() {
+        return new AcTitleType();
+    }
+
+    /**
+     * Create an instance of {@link IsStudentType }
+     * 
+     */
+    public IsStudentType createIsStudentType() {
+        return new IsStudentType();
+    }
+
+    /**
+     * Create an instance of {@link HasDegreeType }
+     * 
+     */
+    public HasDegreeType createHasDegreeType() {
+        return new HasDegreeType();
+    }
+
+    /**
+     * Create an instance of {@link HabilitationType }
+     * 
+     */
+    public HabilitationType createHabilitationType() {
+        return new HabilitationType();
+    }
+
+    /**
+     * Create an instance of {@link MandateContentType }
+     * 
+     */
+    public MandateContentType createMandateContentType() {
+        return new MandateContentType();
+    }
+
+    /**
+     * Create an instance of {@link RepresentationPersonType }
+     * 
+     */
+    public RepresentationPersonType createRepresentationPersonType() {
+        return new RepresentationPersonType();
+    }
+
+    /**
+     * Create an instance of {@link Habilitation }
+     * 
+     */
+    public Habilitation createHabilitation() {
+        return new Habilitation();
+    }
+
+    /**
+     * Create an instance of {@link IsHCPType }
+     * 
+     */
+    public IsHCPType createIsHCPType() {
+        return new IsHCPType();
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link HabilitationType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "habilitation")
+    public JAXBElement<HabilitationType> createHabilitation(HabilitationType value) {
+        return new JAXBElement<HabilitationType>(_Habilitation_QNAME, HabilitationType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link HasDegreeType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "hasDegree")
+    public JAXBElement<HasDegreeType> createHasDegree(HasDegreeType value) {
+        return new JAXBElement<HasDegreeType>(_HasDegree_QNAME, HasDegreeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "spApplication")
+    public JAXBElement<String> createSpApplication(String value) {
+        return new JAXBElement<String>(_SpApplication_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "specialisation")
+    public JAXBElement<String> createSpecialisation(String value) {
+        return new JAXBElement<String>(_Specialisation_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsStudentType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isStudent")
+    public JAXBElement<IsStudentType> createIsStudent(IsStudentType value) {
+        return new JAXBElement<IsStudentType>(_IsStudent_QNAME, IsStudentType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "AQAA")
+    public JAXBElement<Integer> createAQAA(Integer value) {
+        return new JAXBElement<Integer>(_AQAA_QNAME, Integer.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "HCPType")
+    public JAXBElement<String> createHCPType(String value) {
+        return new JAXBElement<String>(_HCPType_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link CanonicalAddressType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "canonicalResidenceAddress")
+    public JAXBElement<CanonicalAddressType> createCanonicalResidenceAddress(CanonicalAddressType value) {
+        return new JAXBElement<CanonicalAddressType>(_CanonicalResidenceAddress_QNAME, CanonicalAddressType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AcTitleType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "acTitle")
+    public JAXBElement<AcTitleType> createAcTitle(AcTitleType value) {
+        return new JAXBElement<AcTitleType>(_AcTitle_QNAME, AcTitleType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Integer }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "QualityAuthenticationAssuranceLevel")
+    public JAXBElement<Integer> createQualityAuthenticationAssuranceLevel(Integer value) {
+        return new JAXBElement<Integer>(_QualityAuthenticationAssuranceLevel_QNAME, Integer.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsAcademicStaffType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isAcademicStaff")
+    public JAXBElement<IsAcademicStaffType> createIsAcademicStaff(IsAcademicStaffType value) {
+        return new JAXBElement<IsAcademicStaffType>(_IsAcademicStaff_QNAME, IsAcademicStaffType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsTeacherOfType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isTeacherOf")
+    public JAXBElement<IsTeacherOfType> createIsTeacherOf(IsTeacherOfType value) {
+        return new JAXBElement<IsTeacherOfType>(_IsTeacherOf_QNAME, IsTeacherOfType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsCourseCoordinatorType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isCourseCoordinator")
+    public JAXBElement<IsCourseCoordinatorType> createIsCourseCoordinator(IsCourseCoordinatorType value) {
+        return new JAXBElement<IsCourseCoordinatorType>(_IsCourseCoordinator_QNAME, IsCourseCoordinatorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link CanonicalAddressType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "canonicalRegisteredAddress")
+    public JAXBElement<CanonicalAddressType> createCanonicalRegisteredAddress(CanonicalAddressType value) {
+        return new JAXBElement<CanonicalAddressType>(_CanonicalRegisteredAddress_QNAME, CanonicalAddressType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "spCountry")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    public JAXBElement<String> createSpCountry(String value) {
+        return new JAXBElement<String>(_SpCountry_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsAdminStaffType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isAdminStaff")
+    public JAXBElement<IsAdminStaffType> createIsAdminStaff(IsAdminStaffType value) {
+        return new JAXBElement<IsAdminStaffType>(_IsAdminStaff_QNAME, IsAdminStaffType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "CitizenCountryCode")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    public JAXBElement<String> createCitizenCountryCode(String value) {
+        return new JAXBElement<String>(_CitizenCountryCode_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link Object }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "AttributeValue")
+    public JAXBElement<Object> createAttributeValue(Object value) {
+        return new JAXBElement<Object>(_AttributeValue_QNAME, Object.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link HasAccountInBankType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "hasAccountInBank")
+    public JAXBElement<HasAccountInBankType> createHasAccountInBank(HasAccountInBankType value) {
+        return new JAXBElement<HasAccountInBankType>(_HasAccountInBank_QNAME, HasAccountInBankType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "countryCodeAddress")
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    public JAXBElement<String> createCountryCodeAddress(String value) {
+        return new JAXBElement<String>(_CountryCodeAddress_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "study")
+    public JAXBElement<String> createStudy(String value) {
+        return new JAXBElement<String>(_Study_QNAME, String.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link IsHealthCareProfessionalType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "isHealthCareProfessional")
+    public JAXBElement<IsHealthCareProfessionalType> createIsHealthCareProfessional(IsHealthCareProfessionalType value) {
+        return new JAXBElement<IsHealthCareProfessionalType>(_IsHealthCareProfessional_QNAME, IsHealthCareProfessionalType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link MandateType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "mandate")
+    public JAXBElement<MandateType> createMandate(MandateType value) {
+        return new JAXBElement<MandateType>(_Mandate_QNAME, MandateType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RequestedAttributeType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "RequestedAttribute")
+    public JAXBElement<RequestedAttributeType> createRequestedAttribute(RequestedAttributeType value) {
+        return new JAXBElement<RequestedAttributeType>(_RequestedAttribute_QNAME, RequestedAttributeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", name = "spSector")
+    public JAXBElement<String> createSpSector(String value) {
+        return new JAXBElement<String>(_SpSector_QNAME, String.class, null, value);
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RepresentationPersonType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RepresentationPersonType.java
new file mode 100644
index 000000000..b1d993f89
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RepresentationPersonType.java
@@ -0,0 +1,289 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for representationPersonType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="representationPersonType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;choice>
+ *         &lt;sequence>
+ *           &lt;element name="eIdentifier" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="givenName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="surname" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="dateOfBirth" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;/sequence>
+ *         &lt;sequence>
+ *           &lt;element name="eLPIdentifier" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="address" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *           &lt;element name="canonicalAddress" type="{urn:eu:stork:names:tc:STORK:1.0:assertion}canonicalAddressType"/>
+ *           &lt;element name="type" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;/sequence>
+ *       &lt;/choice>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "representationPersonType", propOrder = {
+    "eIdentifier",
+    "givenName",
+    "surname",
+    "dateOfBirth",
+    "elpIdentifier",
+    "name",
+    "address",
+    "canonicalAddress",
+    "type"
+})
+public class RepresentationPersonType {
+
+    protected String eIdentifier;
+    protected String givenName;
+    protected String surname;
+    protected String dateOfBirth;
+    @XmlElement(name = "eLPIdentifier")
+    protected String elpIdentifier;
+    protected String name;
+    protected String address;
+    protected CanonicalAddressType canonicalAddress;
+    protected String type;
+
+    /**
+     * Gets the value of the eIdentifier property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getEIdentifier() {
+        return eIdentifier;
+    }
+
+    /**
+     * Sets the value of the eIdentifier property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setEIdentifier(String value) {
+        this.eIdentifier = value;
+    }
+
+    /**
+     * Gets the value of the givenName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGivenName() {
+        return givenName;
+    }
+
+    /**
+     * Sets the value of the givenName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGivenName(String value) {
+        this.givenName = value;
+    }
+
+    /**
+     * Gets the value of the surname property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getSurname() {
+        return surname;
+    }
+
+    /**
+     * Sets the value of the surname property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setSurname(String value) {
+        this.surname = value;
+    }
+
+    /**
+     * Gets the value of the dateOfBirth property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getDateOfBirth() {
+        return dateOfBirth;
+    }
+
+    /**
+     * Sets the value of the dateOfBirth property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setDateOfBirth(String value) {
+        this.dateOfBirth = value;
+    }
+
+    /**
+     * Gets the value of the elpIdentifier property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getELPIdentifier() {
+        return elpIdentifier;
+    }
+
+    /**
+     * Sets the value of the elpIdentifier property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setELPIdentifier(String value) {
+        this.elpIdentifier = value;
+    }
+
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    /**
+     * Gets the value of the address property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAddress() {
+        return address;
+    }
+
+    /**
+     * Sets the value of the address property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAddress(String value) {
+        this.address = value;
+    }
+
+    /**
+     * Gets the value of the canonicalAddress property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link CanonicalAddressType }
+     *     
+     */
+    public CanonicalAddressType getCanonicalAddress() {
+        return canonicalAddress;
+    }
+
+    /**
+     * Sets the value of the canonicalAddress property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link CanonicalAddressType }
+     *     
+     */
+    public void setCanonicalAddress(CanonicalAddressType value) {
+        this.canonicalAddress = value;
+    }
+
+    /**
+     * Gets the value of the type property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * Sets the value of the type property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setType(String value) {
+        this.type = value;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RequestedAttributeType.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RequestedAttributeType.java
new file mode 100644
index 000000000..6a7c0b443
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/RequestedAttributeType.java
@@ -0,0 +1,212 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+
+package eu.stork.peps.complex.attributes;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.namespace.QName;
+
+
+/**
+ * <p>Java class for RequestedAttributeType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="RequestedAttributeType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element ref="{urn:eu:stork:names:tc:STORK:1.0:assertion}AttributeValue" maxOccurs="unbounded" minOccurs="0"/>
+ *       &lt;/sequence>
+ *       &lt;attribute name="Name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       &lt;attribute name="NameFormat" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *       &lt;attribute name="FriendlyName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       &lt;attribute name="isRequired" type="{http://www.w3.org/2001/XMLSchema}boolean" />
+ *       &lt;anyAttribute processContents='lax' namespace='##other'/>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "RequestedAttributeType", propOrder = {
+    "attributeValue"
+})
+public class RequestedAttributeType {
+
+    @XmlElement(name = "AttributeValue")
+    protected List<Object> attributeValue;
+    @XmlAttribute(name = "Name", required = true)
+    protected String name;
+    @XmlAttribute(name = "NameFormat", required = true)
+    @XmlSchemaType(name = "anyURI")
+    protected String nameFormat;
+    @XmlAttribute(name = "FriendlyName")
+    protected String friendlyName;
+    @XmlAttribute(name = "isRequired")
+    protected Boolean isRequired;
+    @XmlAnyAttribute
+    private Map<QName, String> otherAttributes = new HashMap<QName, String>();
+
+    /**
+     * Gets the value of the attributeValue property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the attributeValue property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAttributeValue().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAttributeValue() {
+        if (attributeValue == null) {
+            attributeValue = new ArrayList<Object>();
+        }
+        return this.attributeValue;
+    }
+
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    /**
+     * Gets the value of the nameFormat property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getNameFormat() {
+        return nameFormat;
+    }
+
+    /**
+     * Sets the value of the nameFormat property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setNameFormat(String value) {
+        this.nameFormat = value;
+    }
+
+    /**
+     * Gets the value of the friendlyName property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getFriendlyName() {
+        return friendlyName;
+    }
+
+    /**
+     * Sets the value of the friendlyName property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setFriendlyName(String value) {
+        this.friendlyName = value;
+    }
+
+    /**
+     * Gets the value of the isRequired property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link Boolean }
+     *     
+     */
+    public Boolean isIsRequired() {
+        return isRequired;
+    }
+
+    /**
+     * Sets the value of the isRequired property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link Boolean }
+     *     
+     */
+    public void setIsRequired(Boolean value) {
+        this.isRequired = value;
+    }
+
+    /**
+     * Gets a map that contains attributes that aren't bound to any typed property on this class.
+     * 
+     * <p>
+     * the map is keyed by the name of the attribute and 
+     * the value is the string value of the attribute.
+     * 
+     * the map returned by this method is live, and you can add new attribute
+     * by updating the map directly. Because of this design, there's no setter.
+     * 
+     * 
+     * @return
+     *     always non-null
+     */
+    public Map<QName, String> getOtherAttributes() {
+        return otherAttributes;
+    }
+
+}
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/package-info.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/package-info.java
new file mode 100644
index 000000000..47e225d22
--- /dev/null
+++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/complex/attributes/package-info.java
@@ -0,0 +1,9 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2014.02.17 at 10:36:59 AM GMT 
+//
+
+@javax.xml.bind.annotation.XmlSchema(namespace = "urn:eu:stork:names:tc:STORK:1.0:assertion", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+package eu.stork.peps.complex.attributes;
diff --git a/id/server/stork2-commons/src/main/resources/.svn/all-wcprops b/id/server/stork2-commons/src/main/resources/.svn/all-wcprops
new file mode 100644
index 000000000..7f5879720
--- /dev/null
+++ b/id/server/stork2-commons/src/main/resources/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/resources
+END
+log4j.xml
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/main/resources/log4j.xml
+END
+StorkcomplexAttributes.xsd
+K 25
+svn:wc:ra_dav:version-url
+V 91
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/main/resources/StorkcomplexAttributes.xsd
+END
diff --git a/id/server/stork2-commons/src/main/resources/.svn/entries b/id/server/stork2-commons/src/main/resources/.svn/entries
new file mode 100644
index 000000000..3cafa50cf
--- /dev/null
+++ b/id/server/stork2-commons/src/main/resources/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/main/resources
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+log4j.xml
+file
+
+
+
+
+2013-12-20T12:27:56.554475Z
+aa8c46e41a236b8c7049713b3eeecc49
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+660
+
+StorkcomplexAttributes.xsd
+file
+
+
+
+
+2014-03-05T09:36:07.834515Z
+312be97fd22ecb2f274bf9fdebd85b29
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10938
+
diff --git a/id/server/stork2-commons/src/main/resources/.svn/text-base/StorkcomplexAttributes.xsd.svn-base b/id/server/stork2-commons/src/main/resources/.svn/text-base/StorkcomplexAttributes.xsd.svn-base
new file mode 100644
index 000000000..3c56bd318
--- /dev/null
+++ b/id/server/stork2-commons/src/main/resources/.svn/text-base/StorkcomplexAttributes.xsd.svn-base
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified"
+	targetNamespace="urn:eu:stork:names:tc:STORK:1.0:assertion" 
+	xmlns:xs="http://www.w3.org/2001/XMLSchema"
+	xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol" 
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	<!--QAA -->
+	<xs:element name="QualityAuthenticationAssuranceLevel"
+		type="stork:QualityAuthenticationAssuranceLevelType" />
+	<xs:element name="spSector" type="stork:SPSectorType" />
+	<xs:element name="spApplication" type="stork:SPApplicationType" />
+	<xs:element name="spCountry" type="stork:CountryCodeType" />
+	<xs:element name="CitizenCountryCode" type="stork:CountryCodeType" />
+	<xs:element name="RequestedAttribute" type="stork:RequestedAttributeType" />
+	<xs:element name="AttributeValue" type="xs:anyType" />
+	<xs:element name="canonicalResidenceAddress" type="stork:canonicalAddressType" />
+	<xs:element name="countryCodeAddress" type="stork:CountryCodeType" />
+
+	<xs:element name="hasDegree" type="stork:hasDegreeType" />
+	<xs:element name="isStudent" type="stork:isStudentType" />
+	<xs:element name="isAcademicStaff" type="stork:isAcademicStaffType" />
+	<xs:element name="isTeacherOf" type="stork:isTeacherOfType" />
+	<xs:element name="isCourseCoordinator" type="stork:isCourseCoordinatorType" />
+	<xs:element name="isAdminStaff" type="stork:isAdminStaffType" />
+	<xs:element name="habilitation" type="stork:habilitationType" />
+	<xs:element name="acTitle" type="stork:acTitleType" />
+	<xs:element name="hasAccountInBank" type="stork:hasAccountInBankType" />
+	<xs:element name="isHealthCareProfessional" type="stork:isHealthCareProfessionalType" />
+	<xs:element name="canonicalRegisteredAddress" type="stork:canonicalAddressType" />
+	<xs:element name="AQAA"
+		type="stork:QualityAuthenticationAssuranceLevelType" />
+	<xs:element name="mandate" type="stork:mandateType" />
+	<xs:element name="study" type="stork:studyType" />
+	<xs:element name="HCPType" type="stork:HCPType" />
+
+	<xs:attribute name="AttributeStatus" type="stork:AttributeStatusType" />
+
+	<xs:simpleType name="SPSectorType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="20" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="SPApplicationType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="100" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="AttributeStatusType">
+		<xs:restriction base="xs:string">
+			<xs:enumeration value="Available" />
+			<xs:enumeration value="NotAvailable" />
+			<xs:enumeration value="Withheld" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="studyType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="2" />
+			<xs:maxLength value="5" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="LevelType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="currencyType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="3" />
+			<xs:maxLength value="3" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="occupationType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="titleNormalisedType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="HCPType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="specialisationType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+
+	<xs:simpleType name="QualityAuthenticationAssuranceLevelType">
+		<xs:restriction base="xs:integer">
+			<xs:minInclusive value="1" />
+			<xs:maxInclusive value="4" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:complexType name="canonicalAddressType">
+		<xs:sequence>
+			<xs:element name="countryCodeAddress" type="stork:CountryCodeType" />
+			<xs:element name="state" type="xs:string" minOccurs="0" />
+			<xs:element name="municipalityCode" type="xs:string"
+				minOccurs="0" />
+			<xs:element name="town" type="xs:string" />
+			<xs:element name="postalCode" type="xs:string" />
+			<xs:element name="streetName" type="xs:string" />
+			<xs:element name="streetNumber" type="xs:string"
+				minOccurs="0" />
+			<xs:element name="apartmentNumber" type="xs:string"
+				minOccurs="0" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="hasDegreeType">
+		<xs:sequence>
+			<xs:element name="study" type="stork:studyType" />
+			<xs:element name="level" type="stork:LevelType" />
+			<xs:element name="yearObtained" type="xs:integer" />
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isAcademicStaffType">
+		<xs:sequence>
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="occupation" type="stork:occupationType" />
+			<xs:element name="knowledgearea" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isTeacherOfType">
+		<xs:sequence>
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="course" type="xs:string" />
+			<xs:element name="role" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isCourseCoordinatorType">
+		<xs:sequence>
+			<xs:element name="courseCoodinator" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isAdminStaffType">
+		<xs:sequence>
+			<xs:element name="adminStaff" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="habilitation">
+		<xs:sequence>
+			<xs:element name="ability" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="acTitleType">
+		<xs:sequence>
+			<xs:element name="titleNormalised" type="stork:titleNormalisedType" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="hasAccountInBankType">
+		<xs:sequence>
+			<xs:element name="bankName" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isHCPType">
+		<xs:sequence>
+			<xs:element name="nameOfOrganisation" type="xs:string" />
+			<xs:element name="HCPType" type="stork:HCPType" />
+			<xs:element name="specialisation" type="stork:specialisationType" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="representationPersonType">
+		<xs:choice>
+			<xs:sequence>
+				<xs:element name="eIdentifier" type="xs:string" />
+				<xs:element name="givenName" type="xs:string" />
+				<xs:element name="surname" type="xs:string" />
+				<xs:element name="dateOfBirth" type="xs:string" />
+			</xs:sequence>
+			<xs:sequence>
+				<xs:element name="eLPIdentifier" type="xs:string" />
+				<xs:element name="name" type="xs:string" />
+				<xs:element name="address" type="xs:string" />
+				<xs:element name="canonicalAddress" type="stork:canonicalAddressType" />
+				<xs:element name="type" type="xs:string" />
+			</xs:sequence>
+		</xs:choice>
+	</xs:complexType>
+
+	<xs:complexType name="mandateType">
+		<xs:sequence>
+			<xs:element name="represented" type="stork:representationPersonType" />
+			<xs:element name="representing" type="stork:representationPersonType" />
+			<xs:element name="mandateContent" type="stork:mandateContentType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="mandateContentType">
+		<xs:sequence>
+			<xs:element name="validFrom" type="xs:date" />
+			<xs:element name="validTo" type="xs:date" />
+			<xs:element name="transactionLimit" type="xs:integer" />
+			<xs:element name="transactionLimitCurrency" type="stork:currencyType" />
+			<xs:element name="isJoint" type="xs:string" />
+			<xs:element name="ischained" type="xs:boolean" />
+			<xs:element name="typePower" type="xs:string" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:simpleType name="CountryCodeType">
+		<xs:restriction base="xs:token">
+			<xs:pattern value="[A-Z]{2}" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:complexType name="RequestedAttributeType">
+		<xs:sequence>
+			<xs:element minOccurs="0" maxOccurs="unbounded" ref="stork:AttributeValue" />
+		</xs:sequence>
+		<xs:attribute name="Name" use="required" type="xs:string" />
+		<xs:attribute name="NameFormat" use="required" type="xs:anyURI" />
+		<xs:attribute name="FriendlyName" use="optional" type="xs:string" />
+		<xs:attribute name="isRequired" use="optional" type="xs:boolean" />
+		<xs:anyAttribute namespace="##other" processContents="lax" />
+	</xs:complexType>
+
+	<xs:complexType name="isStudentType">
+		<xs:sequence>
+			<xs:element ref="stork:study" />
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="course" type="xs:integer" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="habilitationType">
+		<xs:sequence>
+			<xs:element name="ability" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isHealthCareProfessionalType">
+		<xs:sequence>
+			<xs:element name="nameOfOrganisation" type="xs:string" />
+			<xs:element ref="stork:HCPType" />
+			<xs:element ref="stork:specialisation" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:element name="specialisation" type="stork:specialisationType" />
+	<xs:simpleType name="medical">
+		<xs:restriction base="xs:string">
+			<xs:maxLength value="2" />
+			<xs:minLength value="2" />
+		</xs:restriction>
+	</xs:simpleType>
+
+</xs:schema>
diff --git a/id/server/stork2-commons/src/main/resources/.svn/text-base/log4j.xml.svn-base b/id/server/stork2-commons/src/main/resources/.svn/text-base/log4j.xml.svn-base
new file mode 100644
index 000000000..8bce0bec0
--- /dev/null
+++ b/id/server/stork2-commons/src/main/resources/.svn/text-base/log4j.xml.svn-base
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+	<appender name="MainLogger" class="org.apache.log4j.DailyRollingFileAppender">
+		<param name="File" value="/opt/storklogs/stork-commons.log" />
+		<param name="DatePattern" value="'.'yyyy-MM-dd" />
+		<param name="Append" value="true" />
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss:SSS} - %p - %C{1} - %m%n" />
+		</layout>
+	</appender>
+
+	<root>
+		<priority value="info" />
+		<appender-ref ref="MainLogger" />
+	</root>
+
+</log4j:configuration>
diff --git a/id/server/stork2-commons/src/main/resources/StorkcomplexAttributes.xsd b/id/server/stork2-commons/src/main/resources/StorkcomplexAttributes.xsd
new file mode 100644
index 000000000..3c56bd318
--- /dev/null
+++ b/id/server/stork2-commons/src/main/resources/StorkcomplexAttributes.xsd
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified"
+	targetNamespace="urn:eu:stork:names:tc:STORK:1.0:assertion" 
+	xmlns:xs="http://www.w3.org/2001/XMLSchema"
+	xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol" 
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	<!--QAA -->
+	<xs:element name="QualityAuthenticationAssuranceLevel"
+		type="stork:QualityAuthenticationAssuranceLevelType" />
+	<xs:element name="spSector" type="stork:SPSectorType" />
+	<xs:element name="spApplication" type="stork:SPApplicationType" />
+	<xs:element name="spCountry" type="stork:CountryCodeType" />
+	<xs:element name="CitizenCountryCode" type="stork:CountryCodeType" />
+	<xs:element name="RequestedAttribute" type="stork:RequestedAttributeType" />
+	<xs:element name="AttributeValue" type="xs:anyType" />
+	<xs:element name="canonicalResidenceAddress" type="stork:canonicalAddressType" />
+	<xs:element name="countryCodeAddress" type="stork:CountryCodeType" />
+
+	<xs:element name="hasDegree" type="stork:hasDegreeType" />
+	<xs:element name="isStudent" type="stork:isStudentType" />
+	<xs:element name="isAcademicStaff" type="stork:isAcademicStaffType" />
+	<xs:element name="isTeacherOf" type="stork:isTeacherOfType" />
+	<xs:element name="isCourseCoordinator" type="stork:isCourseCoordinatorType" />
+	<xs:element name="isAdminStaff" type="stork:isAdminStaffType" />
+	<xs:element name="habilitation" type="stork:habilitationType" />
+	<xs:element name="acTitle" type="stork:acTitleType" />
+	<xs:element name="hasAccountInBank" type="stork:hasAccountInBankType" />
+	<xs:element name="isHealthCareProfessional" type="stork:isHealthCareProfessionalType" />
+	<xs:element name="canonicalRegisteredAddress" type="stork:canonicalAddressType" />
+	<xs:element name="AQAA"
+		type="stork:QualityAuthenticationAssuranceLevelType" />
+	<xs:element name="mandate" type="stork:mandateType" />
+	<xs:element name="study" type="stork:studyType" />
+	<xs:element name="HCPType" type="stork:HCPType" />
+
+	<xs:attribute name="AttributeStatus" type="stork:AttributeStatusType" />
+
+	<xs:simpleType name="SPSectorType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="20" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="SPApplicationType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="100" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="AttributeStatusType">
+		<xs:restriction base="xs:string">
+			<xs:enumeration value="Available" />
+			<xs:enumeration value="NotAvailable" />
+			<xs:enumeration value="Withheld" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="studyType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="2" />
+			<xs:maxLength value="5" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="LevelType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="currencyType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="3" />
+			<xs:maxLength value="3" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="occupationType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="titleNormalisedType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="HCPType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:simpleType name="specialisationType">
+		<xs:restriction base="xs:string">
+			<xs:minLength value="1" />
+			<xs:maxLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+
+
+	<xs:simpleType name="QualityAuthenticationAssuranceLevelType">
+		<xs:restriction base="xs:integer">
+			<xs:minInclusive value="1" />
+			<xs:maxInclusive value="4" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:complexType name="canonicalAddressType">
+		<xs:sequence>
+			<xs:element name="countryCodeAddress" type="stork:CountryCodeType" />
+			<xs:element name="state" type="xs:string" minOccurs="0" />
+			<xs:element name="municipalityCode" type="xs:string"
+				minOccurs="0" />
+			<xs:element name="town" type="xs:string" />
+			<xs:element name="postalCode" type="xs:string" />
+			<xs:element name="streetName" type="xs:string" />
+			<xs:element name="streetNumber" type="xs:string"
+				minOccurs="0" />
+			<xs:element name="apartmentNumber" type="xs:string"
+				minOccurs="0" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="hasDegreeType">
+		<xs:sequence>
+			<xs:element name="study" type="stork:studyType" />
+			<xs:element name="level" type="stork:LevelType" />
+			<xs:element name="yearObtained" type="xs:integer" />
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isAcademicStaffType">
+		<xs:sequence>
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="occupation" type="stork:occupationType" />
+			<xs:element name="knowledgearea" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isTeacherOfType">
+		<xs:sequence>
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="course" type="xs:string" />
+			<xs:element name="role" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isCourseCoordinatorType">
+		<xs:sequence>
+			<xs:element name="courseCoodinator" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isAdminStaffType">
+		<xs:sequence>
+			<xs:element name="adminStaff" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="habilitation">
+		<xs:sequence>
+			<xs:element name="ability" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="acTitleType">
+		<xs:sequence>
+			<xs:element name="titleNormalised" type="stork:titleNormalisedType" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="hasAccountInBankType">
+		<xs:sequence>
+			<xs:element name="bankName" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isHCPType">
+		<xs:sequence>
+			<xs:element name="nameOfOrganisation" type="xs:string" />
+			<xs:element name="HCPType" type="stork:HCPType" />
+			<xs:element name="specialisation" type="stork:specialisationType" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="representationPersonType">
+		<xs:choice>
+			<xs:sequence>
+				<xs:element name="eIdentifier" type="xs:string" />
+				<xs:element name="givenName" type="xs:string" />
+				<xs:element name="surname" type="xs:string" />
+				<xs:element name="dateOfBirth" type="xs:string" />
+			</xs:sequence>
+			<xs:sequence>
+				<xs:element name="eLPIdentifier" type="xs:string" />
+				<xs:element name="name" type="xs:string" />
+				<xs:element name="address" type="xs:string" />
+				<xs:element name="canonicalAddress" type="stork:canonicalAddressType" />
+				<xs:element name="type" type="xs:string" />
+			</xs:sequence>
+		</xs:choice>
+	</xs:complexType>
+
+	<xs:complexType name="mandateType">
+		<xs:sequence>
+			<xs:element name="represented" type="stork:representationPersonType" />
+			<xs:element name="representing" type="stork:representationPersonType" />
+			<xs:element name="mandateContent" type="stork:mandateContentType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="mandateContentType">
+		<xs:sequence>
+			<xs:element name="validFrom" type="xs:date" />
+			<xs:element name="validTo" type="xs:date" />
+			<xs:element name="transactionLimit" type="xs:integer" />
+			<xs:element name="transactionLimitCurrency" type="stork:currencyType" />
+			<xs:element name="isJoint" type="xs:string" />
+			<xs:element name="ischained" type="xs:boolean" />
+			<xs:element name="typePower" type="xs:string" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:simpleType name="CountryCodeType">
+		<xs:restriction base="xs:token">
+			<xs:pattern value="[A-Z]{2}" />
+		</xs:restriction>
+	</xs:simpleType>
+
+	<xs:complexType name="RequestedAttributeType">
+		<xs:sequence>
+			<xs:element minOccurs="0" maxOccurs="unbounded" ref="stork:AttributeValue" />
+		</xs:sequence>
+		<xs:attribute name="Name" use="required" type="xs:string" />
+		<xs:attribute name="NameFormat" use="required" type="xs:anyURI" />
+		<xs:attribute name="FriendlyName" use="optional" type="xs:string" />
+		<xs:attribute name="isRequired" use="optional" type="xs:boolean" />
+		<xs:anyAttribute namespace="##other" processContents="lax" />
+	</xs:complexType>
+
+	<xs:complexType name="isStudentType">
+		<xs:sequence>
+			<xs:element ref="stork:study" />
+			<xs:element name="nameOfInstitution" type="xs:string" />
+			<xs:element name="course" type="xs:integer" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="habilitationType">
+		<xs:sequence>
+			<xs:element name="ability" type="xs:string" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:complexType name="isHealthCareProfessionalType">
+		<xs:sequence>
+			<xs:element name="nameOfOrganisation" type="xs:string" />
+			<xs:element ref="stork:HCPType" />
+			<xs:element ref="stork:specialisation" />
+			<xs:element name="AQAA"
+				type="stork:QualityAuthenticationAssuranceLevelType" />
+		</xs:sequence>
+	</xs:complexType>
+
+	<xs:element name="specialisation" type="stork:specialisationType" />
+	<xs:simpleType name="medical">
+		<xs:restriction base="xs:string">
+			<xs:maxLength value="2" />
+			<xs:minLength value="2" />
+		</xs:restriction>
+	</xs:simpleType>
+
+</xs:schema>
diff --git a/id/server/stork2-commons/src/main/resources/log4j.xml b/id/server/stork2-commons/src/main/resources/log4j.xml
new file mode 100644
index 000000000..8bce0bec0
--- /dev/null
+++ b/id/server/stork2-commons/src/main/resources/log4j.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+	<appender name="MainLogger" class="org.apache.log4j.DailyRollingFileAppender">
+		<param name="File" value="/opt/storklogs/stork-commons.log" />
+		<param name="DatePattern" value="'.'yyyy-MM-dd" />
+		<param name="Append" value="true" />
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss:SSS} - %p - %C{1} - %m%n" />
+		</layout>
+	</appender>
+
+	<root>
+		<priority value="info" />
+		<appender-ref ref="MainLogger" />
+	</root>
+
+</log4j:configuration>
diff --git a/id/server/stork2-commons/src/test/.svn/all-wcprops b/id/server/stork2-commons/src/test/.svn/all-wcprops
new file mode 100644
index 000000000..20c6abf40
--- /dev/null
+++ b/id/server/stork2-commons/src/test/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/test
+END
diff --git a/id/server/stork2-commons/src/test/.svn/entries b/id/server/stork2-commons/src/test/.svn/entries
new file mode 100644
index 000000000..2340f1ba0
--- /dev/null
+++ b/id/server/stork2-commons/src/test/.svn/entries
@@ -0,0 +1,34 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+resources
+dir
+
+java
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/.svn/all-wcprops
new file mode 100644
index 000000000..0539c7776
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/test/java
+END
diff --git a/id/server/stork2-commons/src/test/java/.svn/entries b/id/server/stork2-commons/src/test/java/.svn/entries
new file mode 100644
index 000000000..022ccbba6
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+eu
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops
new file mode 100644
index 000000000..1074db391
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/test/java/eu
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/.svn/entries b/id/server/stork2-commons/src/test/java/eu/.svn/entries
new file mode 100644
index 000000000..b692975a3
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+stork
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops
new file mode 100644
index 000000000..7b9321684
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/test/java/eu/stork
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/.svn/entries b/id/server/stork2-commons/src/test/java/eu/stork/.svn/entries
new file mode 100644
index 000000000..1b9026249
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu/stork
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+peps
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops
new file mode 100644
index 000000000..1a4a3889b
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/test/java/eu/stork/peps
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries
new file mode 100644
index 000000000..568fa8c62
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu/stork/peps
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+tests
+dir
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops
new file mode 100644
index 000000000..fd0288d3a
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/all-wcprops
@@ -0,0 +1,59 @@
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/test/java/eu/stork/peps/tests
+END
+AttributeSourceTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 108
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
+END
+ComplexAttributesMarshalling.java
+K 25
+svn:wc:ra_dav:version-url
+V 113
+/CITnet/svn/STORK2/!svn/ver/721/trunk/Commons/src/test/java/eu/stork/peps/tests/ComplexAttributesMarshalling.java
+END
+PEPSUtilTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 100
+/CITnet/svn/STORK2/!svn/ver/96/trunk/Commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
+END
+PersonalAttributeTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 109
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
+END
+package-info.java
+K 25
+svn:wc:ra_dav:version-url
+V 96
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/java/eu/stork/peps/tests/package-info.java
+END
+DateUtilTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 100
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
+END
+AttributeProvidersMapTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/712/trunk/Commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
+END
+AttributeUtilTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 105
+/CITnet/svn/STORK2/!svn/ver/96/trunk/Commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
+END
+PersonalAttributeListTestCase.java
+K 25
+svn:wc:ra_dav:version-url
+V 114
+/CITnet/svn/STORK2/!svn/ver/484/trunk/Commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
+END
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries
new file mode 100644
index 000000000..7c5cf8a9d
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/entries
@@ -0,0 +1,334 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/java/eu/stork/peps/tests
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+PersonalAttributeTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+77386880d5ffadd21c9b3a3c7d51b990
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5449
+
+package-info.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+04f136539bda0caa3d5ccdfee912cfce
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+92
+
+DateUtilTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+244cc6104660a7835dbf72dadb305d71
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8907
+
+AttributeProvidersMapTestCase.java
+file
+
+
+
+
+2014-03-05T09:36:07.758515Z
+1490c44149a87308c4a6cc0e2af88a85
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3995
+
+AttributeUtilTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+6037f125adf7f4c2f6873a0d99ab0705
+2013-11-01T20:35:30.927048Z
+96
+emferreri
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+16318
+
+PersonalAttributeListTestCase.java
+file
+
+
+
+
+2014-01-21T08:38:55.140702Z
+ae552dce95a6b83d15e381306e2f5e59
+2014-01-15T09:44:59.969756Z
+484
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+24508
+
+AttributeSourceTestCase.java
+file
+
+
+
+
+2014-03-05T09:36:07.758515Z
+1505085e4fd6c684d4f6a8db3d5ba233
+2014-03-03T15:10:40.224759Z
+712
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2465
+
+ComplexAttributesMarshalling.java
+file
+
+
+
+
+2014-03-05T09:36:07.758515Z
+aca1d76d312b0dc5026f852bb14ab5a5
+2014-03-04T14:10:03.192908Z
+721
+emrepisja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6363
+
+PEPSUtilTestCase.java
+file
+
+
+
+
+2013-12-20T12:27:56.518475Z
+f54beadeab9af936f44af326eb1116d2
+2013-11-01T20:35:30.927048Z
+96
+emferreri
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+16714
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base
new file mode 100644
index 000000000..89f5adbed
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeProvidersMapTestCase.java.svn-base
@@ -0,0 +1,134 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeProvidersMap;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+import eu.stork.peps.auth.commons.IAttributeProvidersMap;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public class AttributeProvidersMapTestCase {
+
+	@Test
+	public void testObjectOK1() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK2() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			if ( map.get(source)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK3() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK4() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			if ( map.get(target)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectNOK1() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new Country("ID1", "Name 1"), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+
+	@Test
+	public void testObjectNOK2() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new AttributeProvider("ID2", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base
new file mode 100644
index 000000000..e0f685ade
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeSourceTestCase.java.svn-base
@@ -0,0 +1,88 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeSourceTestCase {
+	private final AttributeSource ap1 = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL1");
+	private final AttributeSource ap2 = new AttributeSource(new AttributeProvider("ID2", "Name 2", null), "URL2");
+	private final AttributeSource ap3 = new AttributeSource(new AttributeProvider("ID1", "Name 2", null), "URL2");
+	private final AttributeSource ap4 = new AttributeSource(new AttributeProvider("ID1", "Name 2", null), "URL1");
+	private final AttributeSource ap5 = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL1");
+
+	private final AttributeSource c1 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+	private final AttributeSource c2 = new AttributeSource(new Country("ID2", "Name 2"), "URL2");
+	private final AttributeSource c3 = new AttributeSource(new Country("ID1", "Name 2"), "URL2");
+	private final AttributeSource c4 = new AttributeSource(new Country("ID1", "Name 2"), "URL1");
+	private final AttributeSource c5 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+
+	@Test
+	public void testNotEquals1() {
+		assertFalse(ap1.equals(ap2));
+	}
+
+	@Test
+	public void testNotEquals2() {
+		assertFalse(ap1.equals(c1));
+	}
+
+	@Test
+	public void testNotEquals3() {
+		assertFalse(c1.equals(c2));
+	}
+
+	@Test
+	public void testEquals1() {
+		assertTrue(ap1.equals(ap3));
+	}
+
+	@Test
+	public void testEquals2() {
+		assertTrue(ap1.equals(ap4));
+	}
+
+	@Test
+	public void testEquals3() {
+		assertTrue(ap1.equals(ap5));
+	}
+
+	@Test
+	public void testEquals4() {
+		assertTrue(c1.equals(c3));
+	}
+
+	@Test
+	public void testEquals5() {
+		assertTrue(c1.equals(c4));
+	}
+
+	@Test
+	public void testEquals6() {
+		assertTrue(c1.equals(c5));
+	}
+
+	@Test
+	public void testEquals7() {
+		final Object obj = ap5;
+		assertTrue(ap1.equals(obj));
+	}
+
+	@Test
+	public void testEquals8() {
+		final Object obj = c5;
+		assertTrue(c1.equals(obj));
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base
new file mode 100644
index 000000000..77fc4b9c2
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/AttributeUtilTestCase.java.svn-base
@@ -0,0 +1,537 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeUtil;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSValues;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeUtilTestCase {
+  
+  /**
+   * Empty String to be used on the tests.
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * Tuple value sample to be used on the tests.
+   */
+  private static final String[] TUPLE_STRING = new String[] { "age", "true",
+    "[18]", "Available" };
+  
+  /**
+   * Complex value to be used on escape/unescape tests.
+   */
+  private static final String COMPLEX_VAL = "postalCode=4100,"
+    + "apartmentNumber=A,state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,";
+  
+  /**
+   * Escaped Complex value to be used on escape/unescape tests.
+   */
+  private static final String ESC_COMPLEX_VAL = "postalCode=4100%44"
+    + "apartmentNumber=A%44state=Porto%44countryCodeAddress=PT%44"
+    + "streetNumber=379%44streetName=Avenida Sidonio Pais%44town=Porto%44";
+  
+  /**
+   * Simple value to be used on escape/unescape tests.
+   */
+  private static final String SIMPLE_VAL = "Avenida da Boavista, Porto";
+  
+  /**
+   * Escaped simple value to be used on escape/unescape tests.
+   */
+  private static final String ESC_SIMPLE_VAL = "Avenida da Boavista%44 Porto";
+  
+  /**
+   * Simple text to be used on escape/unescape tests. Must match the escaped
+   * text.
+   */
+  private static final String SIMPLE_TEXT = "John Doe";
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given complex
+   * attribute value (canonical address' example attribute value).
+   */
+  @Test
+  public void testEscapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.escape(COMPLEX_VAL), ESC_COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given
+   * attribute value.
+   */
+  @Test
+  public void testEscapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.escape(SIMPLE_VAL), ESC_SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to escape.
+   */
+  @Test
+  public void testEscapeNormalChars() {
+    assertEquals(AttributeUtil.escape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#unescape(String)} method for the given
+   * escape complex attribute value (canonical address' example attribute
+   * value).
+   */
+  @Test
+  public void testUnescapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.unescape(ESC_COMPLEX_VAL), COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given escape
+   * attribute value.
+   */
+  @Test
+  public void testUnescapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.unescape(ESC_SIMPLE_VAL), SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to unescape.
+   */
+  @Test
+  public void testUnescapeNormalChars() {
+    assertEquals(AttributeUtil.unescape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given empty string.
+   */
+  @Test
+  public void testAppendIfNotNullEmptyStr() {
+    final StringBuilder strBuilder = new StringBuilder(SIMPLE_TEXT);
+    AttributeUtil.appendIfNotNull(strBuilder, EMPTY_STRING);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given string.
+   */
+  @Test
+  public void testAppendIfNotNullStr() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, SIMPLE_TEXT);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given null value.
+   */
+  @Test
+  public void testAppendIfNotNull() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, null);
+    assertEquals(strBuilder.toString(), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with two values.
+   */
+  @Test
+  public void testListToStringTwoVals() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    vals.add(SIMPLE_TEXT);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one values.
+   */
+  @Test
+  public void testListToStringOneVal() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one value.
+   */
+  @Test
+  public void testListToStringEmptyVal() {
+    final List<String> vals = new ArrayList<String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given Map with one value.
+   */
+  @Test
+  public void testMapToStringOneVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    vals.put("CanonicalAddress", COMPLEX_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("CanonicalAddress=");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given empty Map.
+   */
+  @Test
+  public void testMapToStringEmptyVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid List.
+   */
+  @Test
+  public void testIsValidValueInvalidList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * null value.
+   */
+  @Test
+  public void testIsValidValueNullList() {
+    assertFalse(AttributeUtil.isValidValue(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyList() {
+    assertTrue(AttributeUtil.isValidValue("[]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyCommaList() {
+    assertTrue(AttributeUtil.isValidValue("[,]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * multi value List.
+   */
+  @Test
+  public void testIsValidValueMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid multi value List.
+   */
+  @Test
+  public void testIsValidValueInvalidMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * true type.
+   */
+  @Test
+  public void testIsValidTypetrue() {
+    assertTrue(AttributeUtil.isValidType("true"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * True type.
+   */
+  @Test
+  public void testIsValidTypeTrue() {
+    assertTrue(AttributeUtil.isValidType("True"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * TRUE type.
+   */
+  @Test
+  public void testIsValidTypeTRUE() {
+    assertTrue(AttributeUtil.isValidType("TRUE"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * invalid type.
+   */
+  @Test
+  public void testIsValidTypeInvalidType() {
+    assertFalse(AttributeUtil.isValidType("str"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * false type.
+   */
+  @Test
+  public void testIsValidTypefalse() {
+    assertTrue(AttributeUtil.isValidType("false"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * False type.
+   */
+  @Test
+  public void testIsValidTypeFalse() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * FALSE type.
+   */
+  @Test
+  public void testIsValidTypeFALSEVal() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * null.
+   */
+  @Test
+  public void testIsValidTypeNullVal() {
+    assertFalse(AttributeUtil.isValidType(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given valid tuple.
+   */
+  @Test
+  public void testHasValidTuples() {
+    assertTrue(AttributeUtil.hasValidTuples(TUPLE_STRING));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple. 
+   */
+  @Test
+  public void testHasValidTuplesInvalid() {
+    final String[] tuple = new String[]{"name", "type"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple with valid size.
+   */
+  @Test
+  public void testHasValidTuplesSameSizeInvalidValues() {
+    final String[] tuple = new String[] { "age", "type", "[18]", "Available"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given null value.
+   */
+  @Test
+  public void testHasValidTuplesNull() {
+    assertFalse(AttributeUtil.hasValidTuples(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list..
+   */
+  @Test
+  public void testCheckMandatoryAttributes() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[18,]:Available;");
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+    
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testCheckMandatoryAttributesNullAttrList() {
+    assertTrue(AttributeUtil.checkMandatoryAttributes(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given empty attribute list.
+   */
+  @Test
+  public void testCheckMandatoryAttributesEmptyAttrList() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list (missing mandatory attribute).
+   */
+  @Test
+  public void testCheckMandatoryAttributesMissingAttr() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[]:NotAvailable;");
+    assertFalse(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/ComplexAttributesMarshalling.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/ComplexAttributesMarshalling.java.svn-base
new file mode 100644
index 000000000..c7e195fa6
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/ComplexAttributesMarshalling.java.svn-base
@@ -0,0 +1,187 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ * 
+ * ---
+ * 
+ * Test cases for marshalling complex attributes.
+ * 
+ * Implemented are two testcases for marshalling and unmarshalling.  These testcases are
+ * for canonical residenc address and has bank account.
+ */
+
+package eu.stork.peps.tests;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.stream.StreamSource;
+
+import org.junit.Test;
+
+import eu.stork.peps.complex.attributes.CanonicalAddressType;
+import eu.stork.peps.complex.attributes.HasAccountInBankType;
+import eu.stork.peps.complex.attributes.ObjectFactory;
+
+/**
+ * @author Advania
+ * 
+ * Examples on how to use the jaxb marshaller.
+ * 
+ * The classes are created from the StorkcomplexAttributes.xsd schema located in resources.
+ * 
+ * @version $Revision: 1.00 $, $Date: 2014-17-02 11:15:00 $ 
+ *
+ */
+
+public class ComplexAttributesMarshalling {
+
+	/**
+	 * Test marshalling canonical address
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 *  <canonicalResidenceAddress xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 *   <countryCodeAddress>IS</countryCodeAddress>
+	 *   <state>Reykjavik</state>
+	 *   <municipalityCode>RVK</municipalityCode>
+	 *   <town>Reykjavik</town>
+	 *   <postalCode>101</postalCode>
+	 *   <streetName>Laugavegur</streetName>
+	 *   <streetNumber>1</streetNumber>
+	 *   <apartmentNumber>10</apartmentNumber>
+	 *	</canonicalResidenceAddress>
+	 */
+	@Test
+	public void testMarshallCanonicalResidencAddress() 
+	{
+		try 
+		{
+		    final CanonicalAddressType object = new CanonicalAddressType();
+		    object.setApartmentNumber("10");
+		    object.setCountryCodeAddress("IS");
+		    object.setMunicipalityCode("RVK");
+		    object.setPostalCode("101");
+		    object.setState("Reykjavik");
+		    object.setStreetName("Laugavegur");
+		    object.setStreetNumber("1");
+		    object.setTown("Reykjavik");
+
+		    final JAXBContext context = JAXBContext.newInstance(CanonicalAddressType.class);
+		    final Marshaller m = context.createMarshaller();
+		    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+		    final ObjectFactory objf = new ObjectFactory();
+			
+		    m.marshal(objf.createCanonicalResidenceAddress(object), new FileOutputStream("CanonicalAddressType.xml"));		    
+			m.marshal(objf.createCanonicalResidenceAddress(object), System.out);
+		}
+		catch (JAXBException | FileNotFoundException e) 
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Test unmarshalling canonical address
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 *  <canonicalResidenceAddress xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 *   <countryCodeAddress>IS</countryCodeAddress>
+	 *   <state>Reykjavik</state>
+	 *   <municipalityCode>RVK</municipalityCode>
+	 *   <town>Reykjavik</town>
+	 *   <postalCode>101</postalCode>
+	 *   <streetName>Laugavegur</streetName>
+	 *   <streetNumber>1</streetNumber>
+	 *   <apartmentNumber>10</apartmentNumber>
+	 *	</canonicalResidenceAddress>
+	 */
+	@Test
+	public void testUnmarshallCanonicalAddress() 
+	{
+	    JAXBContext uContext;
+		try 
+		{
+			uContext = JAXBContext.newInstance(CanonicalAddressType.class);
+		    final Unmarshaller u = uContext.createUnmarshaller();
+			final File file = new File("CanonicalAddressType.xml");			
+		    
+			final JAXBElement<CanonicalAddressType> root = u.unmarshal(new StreamSource(file), CanonicalAddressType.class);
+			final CanonicalAddressType foo = root.getValue();
+    
+		    final String A = foo.getStreetName();
+		    final String B = foo.getStreetNumber();
+		 
+		    System.out.println("Streetname: " + A);
+		    System.out.println("Streetnumber: " + B);
+
+		} 
+		catch (final JAXBException e) 
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Test marshalling has bank account
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 * 		<hasAccountInBank xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 * 			<bankName>Arion</bankName>
+	 * 			<AQAA>3</AQAA>
+	 * 		</hasAccountInBank>
+	 */
+	@Test
+	public void testMarshallHasBankAccount()
+	{
+		try 
+		{
+			final HasAccountInBankType object = new HasAccountInBankType();
+			object.setAQAA(3);
+			object.setBankName("Arion Bank");
+					final JAXBContext context = JAXBContext.newInstance(HasAccountInBankType.class);
+			final Marshaller m = context.createMarshaller();
+		    final ObjectFactory o = new ObjectFactory();
+			m.marshal(o.createHasAccountInBank(object), new FileOutputStream ("hasbankaccount.xml"));
+			m.marshal(o.createHasAccountInBank(object), System.out);
+			
+		} catch (JAXBException | FileNotFoundException e) {
+			e.printStackTrace();
+		}
+	}
+	/**
+	 * Test unmarshalling has bank account
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 * 		<hasAccountInBank xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 * 			<bankName>Arion</bankName>
+	 * 			<AQAA>3</AQAA>
+	 * 		</hasAccountInBank>
+	 */
+	@Test
+	public void testUnmarshallHasBankAccount()
+	{
+		try 
+		{
+			final JAXBContext context = JAXBContext.newInstance(HasAccountInBankType.class);
+			final Unmarshaller um = context.createUnmarshaller();
+			final File file = new File("hasbankaccount.xml");			
+			final JAXBElement<HasAccountInBankType> root = um.unmarshal(new StreamSource(file), HasAccountInBankType.class);
+			final HasAccountInBankType foo = root.getValue();
+			System.out.println(foo.getBankName());
+		} catch (final JAXBException e) {
+			e.printStackTrace();
+		}
+	}
+	
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base
new file mode 100644
index 000000000..5d2296997
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/DateUtilTestCase.java.svn-base
@@ -0,0 +1,294 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import java.sql.Timestamp;
+import java.util.Properties;
+
+import org.joda.time.DateTime;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.DateUtil;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.exceptions.SecurityPEPSException;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class DateUtilTestCase {
+  
+  /**
+   * Stork Format date.
+   */
+  private static final String FORMAT = "yyyyMMdd";
+  
+  /**
+   * Expected 10 value.
+   */
+  private static final int TEN = 10;
+  
+  /**
+   * Expected 11 value.
+   */
+  private static final int ELEVEN = 11;
+  
+  /**
+   * The testing Date ("current" date).
+   */
+  private static final DateTime TESTDATE = new DateTime(2011, 10, 10, 15, 20,
+    0, 0);
+  
+  /**
+   * Init DateUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Properties configs = new Properties();
+    configs.setProperty("invalidAgeDateValue.code", "35");
+    configs.setProperty("invalidAttributeValue.code", "34");
+    configs
+      .setProperty(
+        "invalidAttributeValue.message",
+        "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+    PEPSUtil.createInstance(configs);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year against
+   * the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromYear() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("2000", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyMonth() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("200001", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromSameMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200010", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyFullDate() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20000101", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromSameDay() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20001010", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterFullDate() {
+    Assert.assertTrue(TEN == DateUtil
+      .calculateAge("20001011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDate() {
+    DateUtil.calculateAge("200", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidMonth() {
+    DateUtil.calculateAge("200013", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDay() {
+    DateUtil.calculateAge("20000230", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullDate() {
+    DateUtil.calculateAge(null, TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullCurDate() {
+    DateUtil.calculateAge("2000", null, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullFormat() {
+    DateUtil.calculateAge("2000", TESTDATE, null);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return true
+   */
+  @Test
+  public void isValidFormatDateFromYear() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("2000", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year and
+   * month. Must return true.
+   */
+  @Test
+  public void isValidFormatDateFromMonth() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("200001", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDate() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("20000101", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidYear() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidMonth() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200013", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("20010229", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate(null, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullFormat() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("2000", null));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampBefore() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertNotSame(ts, DateUtil.currentTimeStamp());
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampAfter() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertEquals(DateUtil.currentTimeStamp(), ts);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base
new file mode 100644
index 000000000..d4841ed43
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PEPSUtilTestCase.java.svn-base
@@ -0,0 +1,553 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSErrors;
+import eu.stork.peps.auth.commons.PEPSParameters;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+import eu.stork.peps.auth.commons.exceptions.InvalidParameterPEPSException;
+
+/**
+ * The PEPSUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class PEPSUtilTestCase {
+  
+  /**
+   * Message example.
+   */
+  private static final String MESSAGE_SAMPLE = "003002 - Authentication Failed";
+  
+  /**
+   * Error message example.
+   */
+  private static final String ERROR_MESSAGE_SAMPLE = "Authentication Failed";
+  
+  /**
+   * Error code example.
+   */
+  private static final String ERROR_CODE_SAMPLE = "003002";
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS1 = new Properties();
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS2 = new Properties();
+  
+  /**
+   * The empty string value: "".
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * The empty byte value: [].
+   */
+  private static final byte[] EMPTY_BYTE = new byte[] {};
+  
+  /**
+   * The empty byte hash value.
+   */
+  private static final byte[] EMPTY_HASH_BYTE = new byte[] { -49, -125, -31,
+    53, 126, -17, -72, -67, -15, 84, 40, 80, -42, 109, -128, 7, -42, 32, -28,
+    5, 11, 87, 21, -36, -125, -12, -87, 33, -45, 108, -23, -50, 71, -48, -47,
+    60, 93, -123, -14, -80, -1, -125, 24, -46, -121, 126, -20, 47, 99, -71, 49,
+    -67, 71, 65, 122, -127, -91, 56, 50, 122, -7, 39, -38, 62 };
+  
+  /**
+   * The SAML example byte[] value.
+   */
+  private static final byte[] SAML_BYTE_SAMPLE = new byte[] { 60, 115, 97, 109,
+    108, 62, 46, 46, 46, 60, 47, 115, 97, 109, 108 };
+  
+  /**
+   * The SAML's Base64 example value.
+   */
+  private static final String SAML_BASE64_SAMPLE = "PHNhbWw+Li4uPC9zYW1s";
+  
+  /**
+   * The SAML's Base64 byte[] example value.
+   */
+  private static byte[] SAML_BASE64_BYTE_SAMPLE = new byte[] { 80, 72, 78, 104,
+    98, 87, 119, 43, 76, 105, 52, 117, 80, 67, 57, 122, 89, 87, 49, 115 };
+  
+  /**
+   * The SAML's Base64 Hash byte[] example value.
+   */
+  private static byte[] HASH_BYTE_SAMPLE = new byte[] { 67, 38, 11, 115, 49,
+    -5, 54, -85, 38, 43, -99, 96, 71, -41, 50, -96, 71, -86, 90, -97, 66, -67,
+    90, 101, 30, 82, -13, 60, -106, -72, -103, -75, 19, 2, -107, 107, -6, -56,
+    34, -111, -44, -57, -26, -5, 33, 78, -1, 30, 21, 74, -26, 118, -46, -12,
+    -102, 12, -56, 30, -59, -104, -21, -42, -103, 82 };
+  
+  /**
+   * Init PEPSUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    
+    CONFIGS1.setProperty("max.attrList.size", "20000");
+    CONFIGS1.setProperty("attrList.code", "202005");
+    CONFIGS1.setProperty("attrList.message", "invalid.attrList.parameter");
+    
+    CONFIGS1.setProperty("max.qaaLevel.size", "1");
+    CONFIGS1.setProperty("max.spUrl.size", "inv");
+    CONFIGS1.setProperty("validation.active", "true");
+    CONFIGS1.setProperty("hashDigest.className",
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+    CONFIGS1.setProperty("invalidAgeDateValue.code", "35");
+    CONFIGS1.setProperty("invalidAttributeValue.code", "34");
+    CONFIGS1.setProperty("invalidAttributeValue.message",
+      "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+  }
+   
+  /**
+   * Tests the {@link PEPSUtil#createInstance(Properties)} method for the given
+   * properties object.
+   */
+  @Test
+  public void testCreateInstance() {
+    Assert.assertNotNull(PEPSUtil.createInstance(CONFIGS2));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigs() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertEquals(pepsUtils.getConfigs(), CONFIGS1);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigsDifferent() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertNotSame(pepsUtils.getConfigs(), CONFIGS2);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given existing
+   * config.
+   */
+  @Test
+  public void testGetConfigExists() {
+    assertEquals(PEPSUtil.getConfig("hashDigest.className"),
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given not
+   * existing config.
+   */
+  @Test
+  public void testGetConfigNoExists() {
+    assertNull(PEPSUtil.getConfig("doesnt.exists"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given null
+   * value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testGetConfigNull() {
+    assertNull(PEPSUtil.getConfig(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExists() {
+    assertTrue(PEPSUtil.isValidParameter("qaaLevel", "1"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsGreat() {
+    assertFalse(PEPSUtil.isValidParameter("qaaLevel", "12"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsIvalidConf() {
+    assertFalse(PEPSUtil
+      .isValidParameter("spUrl", "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNotExists() {
+    assertFalse(PEPSUtil.isValidParameter("doesntexists",
+      "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamName() {
+    assertFalse(PEPSUtil.isValidParameter(null, "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamValue() {
+    assertFalse(PEPSUtil.isValidParameter("spUrl", null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given object values.
+   */
+  @Test
+  public void testValidateParameterValid() {
+    final IPersonalAttributeList persAttrList = new PersonalAttributeList();
+    persAttrList.populate("isAgeOver:true:[15,]:Available;");
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), persAttrList);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNull() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), null);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, String)} method
+   * for the given string values.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameter() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, PEPSErrors)}
+   * method for the given string value and {@link PEPSErrors} enum.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameterPEPSErrors() {
+    PEPSUtil.validateParameter("CountrySelectorAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;",
+      PEPSErrors.SP_COUNTRY_SELECTOR_INVALID_ATTR);
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test
+  public void testValidateParameterValidParams() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "10",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "doesnt.exists", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", null, "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", null,
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * string value.
+   */
+  @Test
+  public void testEncodeSAMLToken() {
+    assertEquals(PEPSUtil.encodeSAMLToken(SAML_BYTE_SAMPLE), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * null.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testEncodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.encodeSAMLToken(null), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * empty byte[] value.
+   */
+  @Test
+  public void testEncodeSAMLTokenEmpty() {
+    assertEquals(PEPSUtil.encodeSAMLToken(EMPTY_BYTE), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testDecodeSAMLToken() {
+    assertArrayEquals(PEPSUtil.decodeSAMLToken(SAML_BASE64_SAMPLE),
+      SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testDecodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.decodeSAMLToken(null), SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * empty string value.
+   */
+  @Test(expected = StringIndexOutOfBoundsException.class)
+  public void testDecodeSAMLTokenEmpty() {
+    assertTrue(PEPSUtil.decodeSAMLToken(EMPTY_STRING) == EMPTY_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testHashPersonalToken() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(SAML_BASE64_BYTE_SAMPLE),
+      HASH_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = InternalErrorPEPSException.class)
+  public void testHashPersonalTokenNull() {
+    assertNull(PEPSUtil.hashPersonalToken(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * empty value.
+   */
+  @Test
+  public void testHashPersonalTokenEmpty() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(EMPTY_BYTE), EMPTY_HASH_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * correct message.
+   */
+  @Test
+  public void testGetStorkErrorCodeExists() {
+    assertEquals(PEPSUtil.getStorkErrorCode(MESSAGE_SAMPLE), ERROR_CODE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNoExists() {
+    assertNull(PEPSUtil.getStorkErrorCode(ERROR_MESSAGE_SAMPLE));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * empty message.
+   */
+  @Test
+  public void testGetStorkErrorCodeEmpty() {
+    assertNull(PEPSUtil.getStorkErrorCode(EMPTY_STRING));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * null message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNull() {
+    assertNull(PEPSUtil.getStorkErrorCode(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("-"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepAndCodeFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("000001 -"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given correct message.
+   */
+  @Test
+  public void testGetStorkErrorMessageExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNoExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(ERROR_MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given empty message.
+   */
+  @Test
+  public void testGetStorkErrorMessageEmpty() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(EMPTY_STRING),
+      EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given null message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNull() {
+    assertNull(PEPSUtil.getStorkErrorMessage(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("-"),"-");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepAndCodeFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("000001 -"),"000001 -");
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base
new file mode 100644
index 000000000..7052b320a
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeListTestCase.java.svn-base
@@ -0,0 +1,747 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttributeList's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.5 $, $Date: 2010-11-17 05:17:02 $
+ */
+public final class PersonalAttributeListTestCase {
+  
+  /**
+   * isAgeOver constant value.
+   */
+  private static final String ISAGEOVER_CONS = "isAgeOver";
+  
+  /**
+   * 1 constant value.
+   */
+  private static final int ONE_CONS = 1;
+  
+  /**
+   * 2 constant value.
+   */
+  private static final int TWO_CONS = 2;
+  
+  /**
+   * An empty attribute.
+   */
+  @SuppressWarnings("unused")
+  private static final PersonalAttributeList EMPTY_ATTR_LIST =
+    new PersonalAttributeList(0);
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST =
+    "isAgeOver:true:[15,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST2 =
+    "isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3 = 
+    "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3_REVERSE = 
+    "isAgeOver:true:[18,]:Available;isAgeOver:true:[15,]:Available;";
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String COMPLEX_ATTRLIST =
+    "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=Ed. B,"
+    + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;";
+  /**
+   * Mix attribute list string.
+   */
+  private static final String STR_MIX_ATTR_LIST =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:"
+    + "Available;";
+  
+  /**
+   * Mix attribute list 2 string.
+   */
+  private static final String STR_MIX_ATTR_LIST2 =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:Available;"
+    + "mandateContent:true:["
+    + "isJoint=\"isjoint\",typeOfPower=\"power\",ValidTo=\"validto\",validfrom=\"validfrom\",AQAA=\"3\",isChained=\"ischained\",]:"
+    + "Available;";
+  
+  /**
+   * Attribute List example.
+   */
+  @SuppressWarnings({ "serial" })
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeListTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "Ed. B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testAddSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testAddCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testAddNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Simple Value.
+   */
+  @Test
+  public void testPutSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Complex Value.
+   */
+  @Test
+  public void testPutComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testPutNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put("", null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testGetSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertEquals(ATTR_VALUE, attrList.get(ATTR_VALUE.getName()));
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testGetCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertEquals(complexAttrValue.toString(),
+      attrList.get(complexAttrValue.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testGetIsAgeOverAttr() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST,
+      attrList.get(attrValueUnder.getName()).toString());
+    Assert.assertEquals(SIMPLE_ATTRLIST2,
+      attrList.get(attrValueOver.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple attribute.
+   */
+  @Test
+  public void testPopulateSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Complex attribute.
+   */
+  @Test
+  public void testPopulateComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple and Complex attribute.
+   */
+  @Test
+  public void testPopulateMixAttrs() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using put.
+   * 
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromSimplePopulate() {
+    final String strAttrList = "isAgeOver:true";
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(strAttrList);
+    Assert.assertEquals("isAgeOver:true:[]:;", attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromPopulate() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST3);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid values.
+   */
+  @Test
+  public void testPopulateWithInvalidValuesFormat() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type:values:status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid format.
+   */
+  @Test
+  public void testPopulateWithInvalidFormat() {
+    
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type::status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using put.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using populate.
+   */
+  @Test
+  public void testCloneFromPopulate() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertNotSame(pal, pal.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List iterator.
+   */
+  @Test
+  public void testIterator() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    final Iterator<PersonalAttribute> itAttr = pal.iterator();
+    while (itAttr.hasNext()) {
+      final PersonalAttribute attr = itAttr.next();
+      Assert.assertEquals(ISAGEOVER_CONS, attr.getName());
+    }
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetOptionalAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method without optional attributes.
+   */
+  @Test
+  public void testGetOptionalAttributesWithoutOptional() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with one optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOneOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:true:[15,]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with two optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOnlyOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method without mandatory attributes.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithoutMandatory() {
+    final String strAttrList =
+      "isAgeOver:false:[15,]:Available;isAgeOver:false:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with one mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOneMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:false:[15,]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOnlyMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method without simple attributes.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method with one simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOneSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOnlySimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetComplexAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method without complex attributes.
+   */
+  @Test
+  public void testGetComplexAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST2);
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method with one complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOneComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getComplexAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with only two Complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOnlyComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST2);
+    Assert.assertTrue(pal.getComplexAttributes().size() == TWO_CONS);
+  }
+
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base
new file mode 100644
index 000000000..458d510e0
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/PersonalAttributeTestCase.java.svn-base
@@ -0,0 +1,182 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.4 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class PersonalAttributeTestCase {
+  
+  /**
+   * An empty attribute.
+   */
+  private static final PersonalAttribute EMPTYATTR = new PersonalAttribute();
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * An attribute with a simple value (age).
+   */
+  @SuppressWarnings("serial")
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given simple
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringValues() {
+    Assert.assertEquals("age:true:[15,]:Available;", ATTR_VALUE.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given complex
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringComplexValues() {
+    Assert.assertEquals(
+      "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=B,"
+        + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+        + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;",
+      complexAttrValue.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithNull() {
+    Assert.assertTrue(EMPTYATTR.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * new attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithEmptyString() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setStatus("");
+    Assert.assertTrue(attr.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setValue(null);
+    Assert.assertTrue(attr.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setComplexValue(null);
+    Assert.assertTrue(attr.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithEmptyComplexValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToComplexValue() {
+    Assert.assertNotSame(complexAttrValue, complexAttrValue.clone());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToValue() {
+    Assert.assertNotSame(ATTR_VALUE, ATTR_VALUE.clone());
+  }
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base
new file mode 100644
index 000000000..452602210
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/.svn/text-base/package-info.java.svn-base
@@ -0,0 +1,5 @@
+/**
+ * This package provides all JUnit test classes.
+ */
+package eu.stork.peps.tests;
+
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
new file mode 100644
index 000000000..89f5adbed
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeProvidersMapTestCase.java
@@ -0,0 +1,134 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeProvidersMap;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+import eu.stork.peps.auth.commons.IAttributeProvidersMap;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public class AttributeProvidersMapTestCase {
+
+	@Test
+	public void testObjectOK1() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK2() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(source) ) {
+			if ( map.get(source)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK3() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectOK4() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			if ( map.get(target)!=null ) {
+				outcome = true;
+			}
+		}
+
+		assertTrue(outcome);
+	}
+
+	@Test
+	public void testObjectNOK1() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new Country("ID1", "Name 1"), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+
+	@Test
+	public void testObjectNOK2() {
+		final IAttributeProvidersMap map = new AttributeProvidersMap();
+		final AttributeSource source = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL");
+		final AttributeSource target = new AttributeSource(new AttributeProvider("ID2", "Name 1", null), "URL");
+		final IPersonalAttributeList pal = new PersonalAttributeList();
+		boolean outcome = false;
+
+		//Add a single item
+		map.put(source, pal);
+
+		if ( map.containsKey(target) ) {
+			outcome = true;
+		}
+
+		assertFalse(outcome);
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
new file mode 100644
index 000000000..e0f685ade
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeSourceTestCase.java
@@ -0,0 +1,88 @@
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeProvider;
+import eu.stork.peps.auth.commons.AttributeSource;
+import eu.stork.peps.auth.commons.Country;
+
+/**
+ * The AttributeSource's Test Case.
+ * 
+ * @author Stelios Lelis (stelios.lelis@aegean.gr), Elias Pastos (ilias@aegean.gr)
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeSourceTestCase {
+	private final AttributeSource ap1 = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL1");
+	private final AttributeSource ap2 = new AttributeSource(new AttributeProvider("ID2", "Name 2", null), "URL2");
+	private final AttributeSource ap3 = new AttributeSource(new AttributeProvider("ID1", "Name 2", null), "URL2");
+	private final AttributeSource ap4 = new AttributeSource(new AttributeProvider("ID1", "Name 2", null), "URL1");
+	private final AttributeSource ap5 = new AttributeSource(new AttributeProvider("ID1", "Name 1", null), "URL1");
+
+	private final AttributeSource c1 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+	private final AttributeSource c2 = new AttributeSource(new Country("ID2", "Name 2"), "URL2");
+	private final AttributeSource c3 = new AttributeSource(new Country("ID1", "Name 2"), "URL2");
+	private final AttributeSource c4 = new AttributeSource(new Country("ID1", "Name 2"), "URL1");
+	private final AttributeSource c5 = new AttributeSource(new Country("ID1", "Name 1"), "URL1");
+
+	@Test
+	public void testNotEquals1() {
+		assertFalse(ap1.equals(ap2));
+	}
+
+	@Test
+	public void testNotEquals2() {
+		assertFalse(ap1.equals(c1));
+	}
+
+	@Test
+	public void testNotEquals3() {
+		assertFalse(c1.equals(c2));
+	}
+
+	@Test
+	public void testEquals1() {
+		assertTrue(ap1.equals(ap3));
+	}
+
+	@Test
+	public void testEquals2() {
+		assertTrue(ap1.equals(ap4));
+	}
+
+	@Test
+	public void testEquals3() {
+		assertTrue(ap1.equals(ap5));
+	}
+
+	@Test
+	public void testEquals4() {
+		assertTrue(c1.equals(c3));
+	}
+
+	@Test
+	public void testEquals5() {
+		assertTrue(c1.equals(c4));
+	}
+
+	@Test
+	public void testEquals6() {
+		assertTrue(c1.equals(c5));
+	}
+
+	@Test
+	public void testEquals7() {
+		final Object obj = ap5;
+		assertTrue(ap1.equals(obj));
+	}
+
+	@Test
+	public void testEquals8() {
+		final Object obj = c5;
+		assertTrue(c1.equals(obj));
+	}
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
new file mode 100644
index 000000000..77fc4b9c2
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/AttributeUtilTestCase.java
@@ -0,0 +1,537 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.AttributeUtil;
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSValues;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+
+/**
+ * The AttributeUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class AttributeUtilTestCase {
+  
+  /**
+   * Empty String to be used on the tests.
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * Tuple value sample to be used on the tests.
+   */
+  private static final String[] TUPLE_STRING = new String[] { "age", "true",
+    "[18]", "Available" };
+  
+  /**
+   * Complex value to be used on escape/unescape tests.
+   */
+  private static final String COMPLEX_VAL = "postalCode=4100,"
+    + "apartmentNumber=A,state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,";
+  
+  /**
+   * Escaped Complex value to be used on escape/unescape tests.
+   */
+  private static final String ESC_COMPLEX_VAL = "postalCode=4100%44"
+    + "apartmentNumber=A%44state=Porto%44countryCodeAddress=PT%44"
+    + "streetNumber=379%44streetName=Avenida Sidonio Pais%44town=Porto%44";
+  
+  /**
+   * Simple value to be used on escape/unescape tests.
+   */
+  private static final String SIMPLE_VAL = "Avenida da Boavista, Porto";
+  
+  /**
+   * Escaped simple value to be used on escape/unescape tests.
+   */
+  private static final String ESC_SIMPLE_VAL = "Avenida da Boavista%44 Porto";
+  
+  /**
+   * Simple text to be used on escape/unescape tests. Must match the escaped
+   * text.
+   */
+  private static final String SIMPLE_TEXT = "John Doe";
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given complex
+   * attribute value (canonical address' example attribute value).
+   */
+  @Test
+  public void testEscapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.escape(COMPLEX_VAL), ESC_COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given
+   * attribute value.
+   */
+  @Test
+  public void testEscapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.escape(SIMPLE_VAL), ESC_SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to escape.
+   */
+  @Test
+  public void testEscapeNormalChars() {
+    assertEquals(AttributeUtil.escape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#unescape(String)} method for the given
+   * escape complex attribute value (canonical address' example attribute
+   * value).
+   */
+  @Test
+  public void testUnescapeSpecialCharsComplexVal() {
+    assertEquals(AttributeUtil.unescape(ESC_COMPLEX_VAL), COMPLEX_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given escape
+   * attribute value.
+   */
+  @Test
+  public void testUnescapeSpecialCharsVal() {
+    assertEquals(AttributeUtil.unescape(ESC_SIMPLE_VAL), SIMPLE_VAL);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#escape(String)} method for the given simple
+   * text: no special characters to unescape.
+   */
+  @Test
+  public void testUnescapeNormalChars() {
+    assertEquals(AttributeUtil.unescape(SIMPLE_TEXT), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given empty string.
+   */
+  @Test
+  public void testAppendIfNotNullEmptyStr() {
+    final StringBuilder strBuilder = new StringBuilder(SIMPLE_TEXT);
+    AttributeUtil.appendIfNotNull(strBuilder, EMPTY_STRING);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given string.
+   */
+  @Test
+  public void testAppendIfNotNullStr() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, SIMPLE_TEXT);
+    assertEquals(strBuilder.toString(), SIMPLE_TEXT);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#appendIfNotNull(StringBuilder, Object)}
+   * method for the given null value.
+   */
+  @Test
+  public void testAppendIfNotNull() {
+    final StringBuilder strBuilder = new StringBuilder();
+    AttributeUtil.appendIfNotNull(strBuilder, null);
+    assertEquals(strBuilder.toString(), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with two values.
+   */
+  @Test
+  public void testListToStringTwoVals() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    vals.add(SIMPLE_TEXT);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one values.
+   */
+  @Test
+  public void testListToStringOneVal() {
+    final List<String> vals = new ArrayList<String>();
+    vals.add(SIMPLE_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#listToString(List, String)} method for the
+   * given List with one value.
+   */
+  @Test
+  public void testListToStringEmptyVal() {
+    final List<String> vals = new ArrayList<String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(
+      AttributeUtil.listToString(vals,
+        PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given Map with one value.
+   */
+  @Test
+  public void testMapToStringOneVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    vals.put("CanonicalAddress", COMPLEX_VAL);
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("CanonicalAddress=");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#mapToString(java.util.Map, String)} method
+   * for the given empty Map.
+   */
+  @Test
+  public void testMapToStringEmptyVal() {
+    final Map<String, String> vals = new HashMap<String, String>();
+    
+    final StringBuilder strBuilder = new StringBuilder();
+    
+    assertEquals(AttributeUtil.mapToString(vals,
+      PEPSValues.ATTRIBUTE_VALUE_SEP.toString()), strBuilder.toString());
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid List.
+   */
+  @Test
+  public void testIsValidValueInvalidList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * null value.
+   */
+  @Test
+  public void testIsValidValueNullList() {
+    assertFalse(AttributeUtil.isValidValue(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyList() {
+    assertTrue(AttributeUtil.isValidValue("[]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * empty List.
+   */
+  @Test
+  public void testIsValidValueEmptyCommaList() {
+    assertTrue(AttributeUtil.isValidValue("[,]"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one simple value List.
+   */
+  @Test
+  public void testIsValidValueOneValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * one complex value List.
+   */
+  @Test
+  public void testIsValidValueOneComplexValueCommaList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_COMPLEX_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * multi value List.
+   */
+  @Test
+  public void testIsValidValueMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append("[");
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertTrue(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidValue(String)} method for the given
+   * invalid multi value List.
+   */
+  @Test
+  public void testIsValidValueInvalidMultiValueList() {
+    final StringBuilder strBuilder = new StringBuilder();
+    strBuilder.append(ESC_SIMPLE_VAL);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append(SIMPLE_TEXT);
+    strBuilder.append(PEPSValues.ATTRIBUTE_VALUE_SEP.toString());
+    strBuilder.append("]");
+    assertFalse(AttributeUtil.isValidValue(strBuilder.toString()));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * true type.
+   */
+  @Test
+  public void testIsValidTypetrue() {
+    assertTrue(AttributeUtil.isValidType("true"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * True type.
+   */
+  @Test
+  public void testIsValidTypeTrue() {
+    assertTrue(AttributeUtil.isValidType("True"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * TRUE type.
+   */
+  @Test
+  public void testIsValidTypeTRUE() {
+    assertTrue(AttributeUtil.isValidType("TRUE"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * invalid type.
+   */
+  @Test
+  public void testIsValidTypeInvalidType() {
+    assertFalse(AttributeUtil.isValidType("str"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * false type.
+   */
+  @Test
+  public void testIsValidTypefalse() {
+    assertTrue(AttributeUtil.isValidType("false"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * False type.
+   */
+  @Test
+  public void testIsValidTypeFalse() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * FALSE type.
+   */
+  @Test
+  public void testIsValidTypeFALSEVal() {
+    assertTrue(AttributeUtil.isValidType("False"));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#isValidType(String)} method for the given
+   * null.
+   */
+  @Test
+  public void testIsValidTypeNullVal() {
+    assertFalse(AttributeUtil.isValidType(null));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given valid tuple.
+   */
+  @Test
+  public void testHasValidTuples() {
+    assertTrue(AttributeUtil.hasValidTuples(TUPLE_STRING));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple. 
+   */
+  @Test
+  public void testHasValidTuplesInvalid() {
+    final String[] tuple = new String[]{"name", "type"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given invalid tuple with valid size.
+   */
+  @Test
+  public void testHasValidTuplesSameSizeInvalidValues() {
+    final String[] tuple = new String[] { "age", "type", "[18]", "Available"};
+    assertFalse(AttributeUtil.hasValidTuples(tuple));
+  }
+  
+  /**
+   * Tests the {@link AttributeUtil#hasValidTuples(String[])} method for the
+   * given null value.
+   */
+  @Test
+  public void testHasValidTuplesNull() {
+    assertFalse(AttributeUtil.hasValidTuples(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list..
+   */
+  @Test
+  public void testCheckMandatoryAttributes() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[18,]:Available;");
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+    
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testCheckMandatoryAttributesNullAttrList() {
+    assertTrue(AttributeUtil.checkMandatoryAttributes(null));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given empty attribute list.
+   */
+  @Test
+  public void testCheckMandatoryAttributesEmptyAttrList() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    assertTrue(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+  /**
+   * Tests the
+   * {@link AttributeUtil#checkMandatoryAttributes(IPersonalAttributeList)}
+   * method for the given attribute list (missing mandatory attribute).
+   */
+  @Test
+  public void testCheckMandatoryAttributesMissingAttr() {
+    final IPersonalAttributeList attrList = new PersonalAttributeList();
+    attrList.populate("isAgeOver:true:[]:NotAvailable;");
+    assertFalse(AttributeUtil.checkMandatoryAttributes(attrList));
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/ComplexAttributesMarshalling.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/ComplexAttributesMarshalling.java
new file mode 100644
index 000000000..c7e195fa6
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/ComplexAttributesMarshalling.java
@@ -0,0 +1,187 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ * 
+ * ---
+ * 
+ * Test cases for marshalling complex attributes.
+ * 
+ * Implemented are two testcases for marshalling and unmarshalling.  These testcases are
+ * for canonical residenc address and has bank account.
+ */
+
+package eu.stork.peps.tests;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.stream.StreamSource;
+
+import org.junit.Test;
+
+import eu.stork.peps.complex.attributes.CanonicalAddressType;
+import eu.stork.peps.complex.attributes.HasAccountInBankType;
+import eu.stork.peps.complex.attributes.ObjectFactory;
+
+/**
+ * @author Advania
+ * 
+ * Examples on how to use the jaxb marshaller.
+ * 
+ * The classes are created from the StorkcomplexAttributes.xsd schema located in resources.
+ * 
+ * @version $Revision: 1.00 $, $Date: 2014-17-02 11:15:00 $ 
+ *
+ */
+
+public class ComplexAttributesMarshalling {
+
+	/**
+	 * Test marshalling canonical address
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 *  <canonicalResidenceAddress xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 *   <countryCodeAddress>IS</countryCodeAddress>
+	 *   <state>Reykjavik</state>
+	 *   <municipalityCode>RVK</municipalityCode>
+	 *   <town>Reykjavik</town>
+	 *   <postalCode>101</postalCode>
+	 *   <streetName>Laugavegur</streetName>
+	 *   <streetNumber>1</streetNumber>
+	 *   <apartmentNumber>10</apartmentNumber>
+	 *	</canonicalResidenceAddress>
+	 */
+	@Test
+	public void testMarshallCanonicalResidencAddress() 
+	{
+		try 
+		{
+		    final CanonicalAddressType object = new CanonicalAddressType();
+		    object.setApartmentNumber("10");
+		    object.setCountryCodeAddress("IS");
+		    object.setMunicipalityCode("RVK");
+		    object.setPostalCode("101");
+		    object.setState("Reykjavik");
+		    object.setStreetName("Laugavegur");
+		    object.setStreetNumber("1");
+		    object.setTown("Reykjavik");
+
+		    final JAXBContext context = JAXBContext.newInstance(CanonicalAddressType.class);
+		    final Marshaller m = context.createMarshaller();
+		    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+		    final ObjectFactory objf = new ObjectFactory();
+			
+		    m.marshal(objf.createCanonicalResidenceAddress(object), new FileOutputStream("CanonicalAddressType.xml"));		    
+			m.marshal(objf.createCanonicalResidenceAddress(object), System.out);
+		}
+		catch (JAXBException | FileNotFoundException e) 
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Test unmarshalling canonical address
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 *  <canonicalResidenceAddress xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 *   <countryCodeAddress>IS</countryCodeAddress>
+	 *   <state>Reykjavik</state>
+	 *   <municipalityCode>RVK</municipalityCode>
+	 *   <town>Reykjavik</town>
+	 *   <postalCode>101</postalCode>
+	 *   <streetName>Laugavegur</streetName>
+	 *   <streetNumber>1</streetNumber>
+	 *   <apartmentNumber>10</apartmentNumber>
+	 *	</canonicalResidenceAddress>
+	 */
+	@Test
+	public void testUnmarshallCanonicalAddress() 
+	{
+	    JAXBContext uContext;
+		try 
+		{
+			uContext = JAXBContext.newInstance(CanonicalAddressType.class);
+		    final Unmarshaller u = uContext.createUnmarshaller();
+			final File file = new File("CanonicalAddressType.xml");			
+		    
+			final JAXBElement<CanonicalAddressType> root = u.unmarshal(new StreamSource(file), CanonicalAddressType.class);
+			final CanonicalAddressType foo = root.getValue();
+    
+		    final String A = foo.getStreetName();
+		    final String B = foo.getStreetNumber();
+		 
+		    System.out.println("Streetname: " + A);
+		    System.out.println("Streetnumber: " + B);
+
+		} 
+		catch (final JAXBException e) 
+		{
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Test marshalling has bank account
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 * 		<hasAccountInBank xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 * 			<bankName>Arion</bankName>
+	 * 			<AQAA>3</AQAA>
+	 * 		</hasAccountInBank>
+	 */
+	@Test
+	public void testMarshallHasBankAccount()
+	{
+		try 
+		{
+			final HasAccountInBankType object = new HasAccountInBankType();
+			object.setAQAA(3);
+			object.setBankName("Arion Bank");
+					final JAXBContext context = JAXBContext.newInstance(HasAccountInBankType.class);
+			final Marshaller m = context.createMarshaller();
+		    final ObjectFactory o = new ObjectFactory();
+			m.marshal(o.createHasAccountInBank(object), new FileOutputStream ("hasbankaccount.xml"));
+			m.marshal(o.createHasAccountInBank(object), System.out);
+			
+		} catch (JAXBException | FileNotFoundException e) {
+			e.printStackTrace();
+		}
+	}
+	/**
+	 * Test unmarshalling has bank account
+	 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+	 * 		<hasAccountInBank xmlns="urn:eu:stork:names:tc:STORK:1.0:assertion">
+	 * 			<bankName>Arion</bankName>
+	 * 			<AQAA>3</AQAA>
+	 * 		</hasAccountInBank>
+	 */
+	@Test
+	public void testUnmarshallHasBankAccount()
+	{
+		try 
+		{
+			final JAXBContext context = JAXBContext.newInstance(HasAccountInBankType.class);
+			final Unmarshaller um = context.createUnmarshaller();
+			final File file = new File("hasbankaccount.xml");			
+			final JAXBElement<HasAccountInBankType> root = um.unmarshal(new StreamSource(file), HasAccountInBankType.class);
+			final HasAccountInBankType foo = root.getValue();
+			System.out.println(foo.getBankName());
+		} catch (final JAXBException e) {
+			e.printStackTrace();
+		}
+	}
+	
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
new file mode 100644
index 000000000..5d2296997
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/DateUtilTestCase.java
@@ -0,0 +1,294 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import java.sql.Timestamp;
+import java.util.Properties;
+
+import org.joda.time.DateTime;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.DateUtil;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.exceptions.SecurityPEPSException;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.2 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class DateUtilTestCase {
+  
+  /**
+   * Stork Format date.
+   */
+  private static final String FORMAT = "yyyyMMdd";
+  
+  /**
+   * Expected 10 value.
+   */
+  private static final int TEN = 10;
+  
+  /**
+   * Expected 11 value.
+   */
+  private static final int ELEVEN = 11;
+  
+  /**
+   * The testing Date ("current" date).
+   */
+  private static final DateTime TESTDATE = new DateTime(2011, 10, 10, 15, 20,
+    0, 0);
+  
+  /**
+   * Init DateUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Properties configs = new Properties();
+    configs.setProperty("invalidAgeDateValue.code", "35");
+    configs.setProperty("invalidAttributeValue.code", "34");
+    configs
+      .setProperty(
+        "invalidAttributeValue.message",
+        "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+    PEPSUtil.createInstance(configs);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year against
+   * the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromYear() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("2000", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyMonth() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("200001", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromSameMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200010", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given year and month
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterMonth() {
+    Assert.assertTrue(TEN == DateUtil.calculateAge("200011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromEarlyFullDate() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20000101", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 11.
+   */
+  @Test
+  public void calculateAgeFromSameDay() {
+    Assert.assertTrue(ELEVEN == DateUtil.calculateAge("20001010", TESTDATE,
+      FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return 10.
+   */
+  @Test
+  public void calculateAgeFromLaterFullDate() {
+    Assert.assertTrue(TEN == DateUtil
+      .calculateAge("20001011", TESTDATE, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDate() {
+    DateUtil.calculateAge("200", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidMonth() {
+    DateUtil.calculateAge("200013", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromInvalidDay() {
+    DateUtil.calculateAge("20000230", TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullDate() {
+    DateUtil.calculateAge(null, TESTDATE, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullCurDate() {
+    DateUtil.calculateAge("2000", null, FORMAT);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#calculateAge} method for the given full date
+   * against the testDate: 2011-10-10 15:20:00.0. Must return a
+   * SecurityPEPSException exception.
+   */
+  @Test(expected = SecurityPEPSException.class)
+  public void calculateAgeFromNullFormat() {
+    DateUtil.calculateAge("2000", TESTDATE, null);
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return true
+   */
+  @Test
+  public void isValidFormatDateFromYear() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("2000", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year and
+   * month. Must return true.
+   */
+  @Test
+  public void isValidFormatDateFromMonth() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("200001", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDate() {
+    Assert.assertTrue(DateUtil.isValidFormatDate("20000101", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidYear() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidMonth() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("200013", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateInvalidDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("20010229", FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullDate() {
+    Assert.assertFalse(DateUtil.isValidFormatDate(null, FORMAT));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#isValidFormatDate} method for the given year.
+   * Must return false.
+   */
+  @Test
+  public void isValidFormatDateNullFormat() {
+    Assert.assertFalse(DateUtil.isValidFormatDate("2000", null));
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampBefore() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertNotSame(ts, DateUtil.currentTimeStamp());
+  }
+  
+  /**
+   * Tests the {@link DateUtil#currentTimeStamp()} method for the current
+   * TimeStamp (TS). Must return true.
+   */
+  @Test
+  public void testCurrentTimeStampAfter() {
+    Timestamp ts = DateUtil.currentTimeStamp();
+    Assert.assertEquals(DateUtil.currentTimeStamp(), ts);
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
new file mode 100644
index 000000000..d4841ed43
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PEPSUtilTestCase.java
@@ -0,0 +1,553 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSErrors;
+import eu.stork.peps.auth.commons.PEPSParameters;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.exceptions.InternalErrorPEPSException;
+import eu.stork.peps.auth.commons.exceptions.InvalidParameterPEPSException;
+
+/**
+ * The PEPSUtil's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com
+ * 
+ * @version $Revision: $, $Date: $
+ */
+public final class PEPSUtilTestCase {
+  
+  /**
+   * Message example.
+   */
+  private static final String MESSAGE_SAMPLE = "003002 - Authentication Failed";
+  
+  /**
+   * Error message example.
+   */
+  private static final String ERROR_MESSAGE_SAMPLE = "Authentication Failed";
+  
+  /**
+   * Error code example.
+   */
+  private static final String ERROR_CODE_SAMPLE = "003002";
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS1 = new Properties();
+  
+  /**
+   * Properties values for testing proposes.
+   */
+  private static final Properties CONFIGS2 = new Properties();
+  
+  /**
+   * The empty string value: "".
+   */
+  private static final String EMPTY_STRING = "";
+  
+  /**
+   * The empty byte value: [].
+   */
+  private static final byte[] EMPTY_BYTE = new byte[] {};
+  
+  /**
+   * The empty byte hash value.
+   */
+  private static final byte[] EMPTY_HASH_BYTE = new byte[] { -49, -125, -31,
+    53, 126, -17, -72, -67, -15, 84, 40, 80, -42, 109, -128, 7, -42, 32, -28,
+    5, 11, 87, 21, -36, -125, -12, -87, 33, -45, 108, -23, -50, 71, -48, -47,
+    60, 93, -123, -14, -80, -1, -125, 24, -46, -121, 126, -20, 47, 99, -71, 49,
+    -67, 71, 65, 122, -127, -91, 56, 50, 122, -7, 39, -38, 62 };
+  
+  /**
+   * The SAML example byte[] value.
+   */
+  private static final byte[] SAML_BYTE_SAMPLE = new byte[] { 60, 115, 97, 109,
+    108, 62, 46, 46, 46, 60, 47, 115, 97, 109, 108 };
+  
+  /**
+   * The SAML's Base64 example value.
+   */
+  private static final String SAML_BASE64_SAMPLE = "PHNhbWw+Li4uPC9zYW1s";
+  
+  /**
+   * The SAML's Base64 byte[] example value.
+   */
+  private static byte[] SAML_BASE64_BYTE_SAMPLE = new byte[] { 80, 72, 78, 104,
+    98, 87, 119, 43, 76, 105, 52, 117, 80, 67, 57, 122, 89, 87, 49, 115 };
+  
+  /**
+   * The SAML's Base64 Hash byte[] example value.
+   */
+  private static byte[] HASH_BYTE_SAMPLE = new byte[] { 67, 38, 11, 115, 49,
+    -5, 54, -85, 38, 43, -99, 96, 71, -41, 50, -96, 71, -86, 90, -97, 66, -67,
+    90, 101, 30, 82, -13, 60, -106, -72, -103, -75, 19, 2, -107, 107, -6, -56,
+    34, -111, -44, -57, -26, -5, 33, 78, -1, 30, 21, 74, -26, 118, -46, -12,
+    -102, 12, -56, 30, -59, -104, -21, -42, -103, 82 };
+  
+  /**
+   * Init PEPSUtilTestCase class.
+   */
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    
+    CONFIGS1.setProperty("max.attrList.size", "20000");
+    CONFIGS1.setProperty("attrList.code", "202005");
+    CONFIGS1.setProperty("attrList.message", "invalid.attrList.parameter");
+    
+    CONFIGS1.setProperty("max.qaaLevel.size", "1");
+    CONFIGS1.setProperty("max.spUrl.size", "inv");
+    CONFIGS1.setProperty("validation.active", "true");
+    CONFIGS1.setProperty("hashDigest.className",
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+    CONFIGS1.setProperty("invalidAgeDateValue.code", "35");
+    CONFIGS1.setProperty("invalidAttributeValue.code", "34");
+    CONFIGS1.setProperty("invalidAttributeValue.message",
+      "Unexpected or invalid content was encountered within a "
+        + "<saml:Attribute> or <saml:AttributeValue> element.");
+  }
+   
+  /**
+   * Tests the {@link PEPSUtil#createInstance(Properties)} method for the given
+   * properties object.
+   */
+  @Test
+  public void testCreateInstance() {
+    Assert.assertNotNull(PEPSUtil.createInstance(CONFIGS2));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigs() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertEquals(pepsUtils.getConfigs(), CONFIGS1);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfigs()}.
+   */
+  @Test
+  public void testGetConfigsDifferent() {
+    final PEPSUtil pepsUtils = PEPSUtil.createInstance(CONFIGS1);
+    assertNotSame(pepsUtils.getConfigs(), CONFIGS2);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given existing
+   * config.
+   */
+  @Test
+  public void testGetConfigExists() {
+    assertEquals(PEPSUtil.getConfig("hashDigest.className"),
+      "org.bouncycastle.crypto.digests.SHA512Digest");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given not
+   * existing config.
+   */
+  @Test
+  public void testGetConfigNoExists() {
+    assertNull(PEPSUtil.getConfig("doesnt.exists"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getConfig(String)} method for the given null
+   * value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testGetConfigNull() {
+    assertNull(PEPSUtil.getConfig(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExists() {
+    assertTrue(PEPSUtil.isValidParameter("qaaLevel", "1"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsGreat() {
+    assertFalse(PEPSUtil.isValidParameter("qaaLevel", "12"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterExistsIvalidConf() {
+    assertFalse(PEPSUtil
+      .isValidParameter("spUrl", "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNotExists() {
+    assertFalse(PEPSUtil.isValidParameter("doesntexists",
+      "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamName() {
+    assertFalse(PEPSUtil.isValidParameter(null, "http://localhost:8080/SP/"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#isValidParameter(String, String)} method for the
+   * given param values.
+   */
+  @Test
+  public void testIsValidParameterNullParamValue() {
+    assertFalse(PEPSUtil.isValidParameter("spUrl", null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given object values.
+   */
+  @Test
+  public void testValidateParameterValid() {
+    final IPersonalAttributeList persAttrList = new PersonalAttributeList();
+    persAttrList.populate("isAgeOver:true:[15,]:Available;");
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), persAttrList);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, Object)} method
+   * for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNull() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(), null);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#validateParameter(String, String, String)} method
+   * for the given string values.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameter() {
+    PEPSUtil.validateParameter("ServiceProviderAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, PEPSErrors)}
+   * method for the given string value and {@link PEPSErrors} enum.
+   * 
+   * The tested class just invokes
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * so further tests will be later.
+   */
+  @Test
+  public void testValidateParameterPEPSErrors() {
+    PEPSUtil.validateParameter("CountrySelectorAction",
+      PEPSParameters.ATTRIBUTE_LIST.toString(),
+      "isAgeOver:true:[15,]:Available;",
+      PEPSErrors.SP_COUNTRY_SELECTOR_INVALID_ATTR);
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test
+  public void testValidateParameterValidParams() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", "10",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterInvalidParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "doesnt.exists", "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamName() {
+    PEPSUtil.validateParameter("ServiceProviderAction", null, "1",
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the
+   * {@link PEPSUtil#validateParameter(String, String, String, String, String)}
+   * method for the given string values.
+   */
+  @Test(expected = InvalidParameterPEPSException.class)
+  public void testValidateParameterNullParamValue() {
+    PEPSUtil.validateParameter("ServiceProviderAction", "qaaLevel", null,
+      "qaaLevel.code", "qaaLevel.message");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * string value.
+   */
+  @Test
+  public void testEncodeSAMLToken() {
+    assertEquals(PEPSUtil.encodeSAMLToken(SAML_BYTE_SAMPLE), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * null.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testEncodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.encodeSAMLToken(null), SAML_BASE64_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#encodeSAMLToken(byte[])} method for the given
+   * empty byte[] value.
+   */
+  @Test
+  public void testEncodeSAMLTokenEmpty() {
+    assertEquals(PEPSUtil.encodeSAMLToken(EMPTY_BYTE), EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testDecodeSAMLToken() {
+    assertArrayEquals(PEPSUtil.decodeSAMLToken(SAML_BASE64_SAMPLE),
+      SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = NullPointerException.class)
+  public void testDecodeSAMLTokenNull() {
+    assertNotSame(PEPSUtil.decodeSAMLToken(null), SAML_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#decodeSAMLToken(byte[])} method for the given
+   * empty string value.
+   */
+  @Test(expected = StringIndexOutOfBoundsException.class)
+  public void testDecodeSAMLTokenEmpty() {
+    assertTrue(PEPSUtil.decodeSAMLToken(EMPTY_STRING) == EMPTY_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * byte[] value.
+   */
+  @Test
+  public void testHashPersonalToken() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(SAML_BASE64_BYTE_SAMPLE),
+      HASH_BYTE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * null value.
+   */
+  @Test(expected = InternalErrorPEPSException.class)
+  public void testHashPersonalTokenNull() {
+    assertNull(PEPSUtil.hashPersonalToken(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#hashPersonalToken(byte[])} method for the given
+   * empty value.
+   */
+  @Test
+  public void testHashPersonalTokenEmpty() {
+    assertArrayEquals(PEPSUtil.hashPersonalToken(EMPTY_BYTE), EMPTY_HASH_BYTE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * correct message.
+   */
+  @Test
+  public void testGetStorkErrorCodeExists() {
+    assertEquals(PEPSUtil.getStorkErrorCode(MESSAGE_SAMPLE), ERROR_CODE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNoExists() {
+    assertNull(PEPSUtil.getStorkErrorCode(ERROR_MESSAGE_SAMPLE));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * empty message.
+   */
+  @Test
+  public void testGetStorkErrorCodeEmpty() {
+    assertNull(PEPSUtil.getStorkErrorCode(EMPTY_STRING));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * null message.
+   */
+  @Test
+  public void testGetStorkErrorCodeNull() {
+    assertNull(PEPSUtil.getStorkErrorCode(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("-"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorCode(String)} method for the given
+   * invalid message.
+   */
+  @Test
+  public void testGetStorkErrorCodeWithSepAndCodeFake() {
+    assertNull(PEPSUtil.getStorkErrorCode("000001 -"));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given correct message.
+   */
+  @Test
+  public void testGetStorkErrorMessageExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNoExists() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(ERROR_MESSAGE_SAMPLE),
+      ERROR_MESSAGE_SAMPLE);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given empty message.
+   */
+  @Test
+  public void testGetStorkErrorMessageEmpty() {
+    assertEquals(PEPSUtil.getStorkErrorMessage(EMPTY_STRING),
+      EMPTY_STRING);
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given null message.
+   */
+  @Test
+  public void testGetStorkErrorMessageNull() {
+    assertNull(PEPSUtil.getStorkErrorMessage(null));
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("-"),"-");
+  }
+  
+  /**
+   * Tests the {@link PEPSUtil#getStorkErrorMessage(String)} method for the
+   * given invalid message.
+   */
+  @Test
+  public void testGetStorkErrorMessageWithSepAndCodeFake() {
+    assertEquals(PEPSUtil.getStorkErrorMessage("000001 -"),"000001 -");
+  }
+  
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
new file mode 100644
index 000000000..7052b320a
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeListTestCase.java
@@ -0,0 +1,747 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttributeList's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.5 $, $Date: 2010-11-17 05:17:02 $
+ */
+public final class PersonalAttributeListTestCase {
+  
+  /**
+   * isAgeOver constant value.
+   */
+  private static final String ISAGEOVER_CONS = "isAgeOver";
+  
+  /**
+   * 1 constant value.
+   */
+  private static final int ONE_CONS = 1;
+  
+  /**
+   * 2 constant value.
+   */
+  private static final int TWO_CONS = 2;
+  
+  /**
+   * An empty attribute.
+   */
+  @SuppressWarnings("unused")
+  private static final PersonalAttributeList EMPTY_ATTR_LIST =
+    new PersonalAttributeList(0);
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST =
+    "isAgeOver:true:[15,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST2 =
+    "isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3 = 
+    "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+  
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String SIMPLE_ATTRLIST3_REVERSE = 
+    "isAgeOver:true:[18,]:Available;isAgeOver:true:[15,]:Available;";
+  /**
+   * Simple attribute value list string.
+   */
+  private static final String COMPLEX_ATTRLIST =
+    "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=Ed. B,"
+    + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+    + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;";
+  /**
+   * Mix attribute list string.
+   */
+  private static final String STR_MIX_ATTR_LIST =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:"
+    + "Available;";
+  
+  /**
+   * Mix attribute list 2 string.
+   */
+  private static final String STR_MIX_ATTR_LIST2 =
+    "isAgeOver:true:[15,]:Available;canonicalResidenceAddress:true:["
+    + "postalCode=4100,apartmentNumber=Ed.B,state=Porto,countryCodeAddress=PT,"
+    + "streetNumber=379,streetName=Avenida Sidonio Pais,town=Porto,]:Available;"
+    + "mandateContent:true:["
+    + "isJoint=\"isjoint\",typeOfPower=\"power\",ValidTo=\"validto\",validfrom=\"validfrom\",AQAA=\"3\",isChained=\"ischained\",]:"
+    + "Available;";
+  
+  /**
+   * Attribute List example.
+   */
+  @SuppressWarnings({ "serial" })
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeListTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "Ed. B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testAddSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testAddCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testAddNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Same attribute name added
+   * twice. Personal Attribute list must be size 2 - IsAgeOver attribute added
+   * twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testAddSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Simple Value.
+   */
+  @Test
+  public void testPutSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), ATTR_VALUE);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 1 - Complex Value.
+   */
+  @Test
+  public void testPutComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(ATTR_VALUE.getName(), complexAttrValue);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 0 - no attribute.
+   */
+  @Test
+  public void testPutNull() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put("", null);
+    Assert.assertTrue(attrList.size() == 0);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrName() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List put method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute added twice.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testPutSameAttrNameEmpty() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 1 - Simple attribute.
+   */
+  @Test
+  public void testGetSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(ATTR_VALUE);
+    Assert.assertEquals(ATTR_VALUE, attrList.get(ATTR_VALUE.getName()));
+  }
+  
+  /**
+   * Testing Personal Attribute List add method. Personal Attribute list must be
+   * size 1 - Complex attribute.
+   */
+  @Test
+  public void testGetCompleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(complexAttrValue);
+    Assert.assertEquals(complexAttrValue.toString(),
+      attrList.get(complexAttrValue.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List get method. Personal Attribute list must be
+   * size 2 - IsAgeOver attribute.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testGetIsAgeOverAttr() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST,
+      attrList.get(attrValueUnder.getName()).toString());
+    Assert.assertEquals(SIMPLE_ATTRLIST2,
+      attrList.get(attrValueOver.getName()).toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple attribute.
+   */
+  @Test
+  public void testPopulateSimpleAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Complex attribute.
+   */
+  @Test
+  public void testPopulateComplexAttr() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(attrList.size() == 1);
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method. Personal Attribute list
+   * must be size 1 - Simple and Complex attribute.
+   */
+  @Test
+  public void testPopulateMixAttrs() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(attrList.size() == 2);
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using put.
+   * 
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testToStringFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromSimplePopulate() {
+    final String strAttrList = "isAgeOver:true";
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(strAttrList);
+    Assert.assertEquals("isAgeOver:true:[]:;", attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List toString method using populate.
+   */
+  @Test
+  public void testToStringFromPopulate() {
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.populate(SIMPLE_ATTRLIST3);
+    Assert.assertEquals(SIMPLE_ATTRLIST3_REVERSE, attrList.toString());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid values.
+   */
+  @Test
+  public void testPopulateWithInvalidValuesFormat() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type:values:status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List populate method, with invalid format.
+   */
+  @Test
+  public void testPopulateWithInvalidFormat() {
+    
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate("name:type::status;");
+    Assert.assertEquals(pal, new PersonalAttributeList());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using add.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromAdd() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.add(attrValueUnder);
+    attrList.add(attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using put.
+   */
+  @SuppressWarnings("serial")
+  @Test
+  public void testCloneFromPut() {
+    final PersonalAttribute attrValueUnder =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("15");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+    final PersonalAttribute attrValueOver =
+      new PersonalAttribute(ISAGEOVER_CONS, true, new ArrayList<String>() {
+        {
+          add("18");
+        }
+      }, STORKStatusCode.STATUS_AVAILABLE.toString());
+    final PersonalAttributeList attrList = new PersonalAttributeList(1);
+    attrList.put(attrValueUnder.getName(), attrValueUnder);
+    attrList.put(attrValueOver.getName(), attrValueOver);
+    Assert.assertNotSame(attrList, attrList.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List clone method using populate.
+   */
+  @Test
+  public void testCloneFromPopulate() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertNotSame(pal, pal.clone());
+  }
+  
+  /**
+   * Testing Personal Attribute List iterator.
+   */
+  @Test
+  public void testIterator() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    final Iterator<PersonalAttribute> itAttr = pal.iterator();
+    while (itAttr.hasNext()) {
+      final PersonalAttribute attr = itAttr.next();
+      Assert.assertEquals(ISAGEOVER_CONS, attr.getName());
+    }
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetOptionalAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method without optional attributes.
+   */
+  @Test
+  public void testGetOptionalAttributesWithoutOptional() {
+    final String strAttrList =
+      "isAgeOver:true:[15,]:Available;isAgeOver:true:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with one optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOneOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:true:[15,]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetOptionalAttributes method with two optional attribute.
+   */
+  @Test
+  public void testGetOptionalAttributesWithOnlyOptional() {
+    final String strAttrList =
+      "age:false:[]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getOptionalAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getMandatoryAttributes method without mandatory attributes.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithoutMandatory() {
+    final String strAttrList =
+      "isAgeOver:false:[15,]:Available;isAgeOver:false:[18,]:Available;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with one mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOneMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:false:[15,]:;isAgeOver:false:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two mandatory attribute.
+   */
+  @Test
+  public void testGetMandatoryAttributesWithOnlyMandatory() {
+    final String strAttrList =
+      "age:true:[]:;isAgeOver:true:[18,]:;";
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(strAttrList);
+    Assert.assertTrue(pal.getMandatoryAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method without simple attributes.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(COMPLEX_ATTRLIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getSimpleValueAttributes() method with one simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOneSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with two simple attribute.
+   */
+  @Test
+  public void testGetSimpleValueAttributesWithOnlySimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST3);
+    Assert.assertTrue(pal.getSimpleValueAttributes().size() == TWO_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexValueAttributes method with empty attribute list.
+   */
+  @Test
+  public void testGetComplexAttributesWithEmptyList() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method without complex attributes.
+   */
+  @Test
+  public void testGetComplexAttributesWithoutSimple() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(SIMPLE_ATTRLIST2);
+    Assert.assertTrue(pal.getComplexAttributes().isEmpty());
+  }
+  
+  /**
+   * Testing Personal Attribute List's getComplexAttributes() method with one complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOneComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST);
+    Assert.assertTrue(pal.getComplexAttributes().size() == ONE_CONS);
+  }
+  
+  /**
+   * Testing Personal Attribute List's GetMandatoryAttributes method with only two Complex attribute.
+   */
+  @Test
+  public void testGetComplexAttributesWithOnlyComplex() {
+    final PersonalAttributeList pal = new PersonalAttributeList();
+    pal.populate(STR_MIX_ATTR_LIST2);
+    Assert.assertTrue(pal.getComplexAttributes().size() == TWO_CONS);
+  }
+
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
new file mode 100644
index 000000000..458d510e0
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/PersonalAttributeTestCase.java
@@ -0,0 +1,182 @@
+/*
+ * This work is Open Source and licensed by the European Commission under the
+ * conditions of the European Public License v1.1 
+ *  
+ * (http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1); 
+ * 
+ * any use of this file implies acceptance of the conditions of this license. 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package eu.stork.peps.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+
+/**
+ * The PersonalAttribute's Test Case.
+ * 
+ * @author ricardo.ferreira@multicert.com, renato.portela@multicert.com,
+ *         luis.felix@multicert.com, hugo.magalhaes@multicert.com,
+ *         paulo.ribeiro@multicert.com
+ * @version $Revision: 1.4 $, $Date: 2010-11-17 05:17:03 $
+ */
+public final class PersonalAttributeTestCase {
+  
+  /**
+   * An empty attribute.
+   */
+  private static final PersonalAttribute EMPTYATTR = new PersonalAttribute();
+  
+  /**
+   * An attribute with a complex value (canonicalResidenceAddress).
+   */
+  private static PersonalAttribute complexAttrValue = null;
+  
+  /**
+   * An attribute with a simple value (age).
+   */
+  @SuppressWarnings("serial")
+  private static final PersonalAttribute ATTR_VALUE = new PersonalAttribute(
+    "age", true, new ArrayList<String>() {
+      {
+        add("15");
+      }
+    }, STORKStatusCode.STATUS_AVAILABLE.toString());
+  
+  /**
+   * Init PersonalAttributeTestCase class.
+   */
+  @SuppressWarnings("serial")
+  @BeforeClass
+  public static void runsBeforeTheTestSuite() {
+    final Map<String, String> values = new HashMap<String, String>() {
+      {
+        put("countryCodeAddress", "PT");
+        put("state", "Porto");
+        put("town", "Porto");
+        put("postalCode", "4100");
+        put("streetName", "Avenida Sidonio Pais");
+        put("streetNumber", "379");
+        put("apartmentNumber", "B");
+      }
+    };
+    
+    complexAttrValue =
+      new PersonalAttribute("canonicalResidenceAddress", true, values,
+        STORKStatusCode.STATUS_AVAILABLE.toString());
+    
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given simple
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringValues() {
+    Assert.assertEquals("age:true:[15,]:Available;", ATTR_VALUE.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#toString()} method for the given complex
+   * attribute value. Values must match.
+   */
+  @Test
+  public void testToStringComplexValues() {
+    Assert.assertEquals(
+      "canonicalResidenceAddress:true:[postalCode=4100,apartmentNumber=B,"
+        + "state=Porto,countryCodeAddress=PT,streetNumber=379,"
+        + "streetName=Avenida Sidonio Pais,town=Porto,]:Available;",
+      complexAttrValue.toString());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithNull() {
+    Assert.assertTrue(EMPTYATTR.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyStatus()} method for the given
+   * new attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyStatusWithEmptyString() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setStatus("");
+    Assert.assertTrue(attr.isEmptyStatus());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setValue(null);
+    Assert.assertTrue(attr.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyValue()} method for the given
+   * empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithNull() {
+    final PersonalAttribute attr = (PersonalAttribute) EMPTYATTR.clone();
+    attr.setComplexValue(null);
+    Assert.assertTrue(attr.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#isEmptyComplexValue()} method for the
+   * given empty attribute. Must return true.
+   */
+  @Test
+  public void testToIsEmptyComplexValueWithEmptyComplexValue() {
+    Assert.assertTrue(EMPTYATTR.isEmptyComplexValue());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToComplexValue() {
+    Assert.assertNotSame(complexAttrValue, complexAttrValue.clone());
+  }
+  
+  /**
+   * Tests the {@link PersonalAttribute#clone()} method for the given attribute.
+   * Must return true.
+   */
+  @Test
+  public void testCloneToValue() {
+    Assert.assertNotSame(ATTR_VALUE, ATTR_VALUE.clone());
+  }
+}
diff --git a/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java
new file mode 100644
index 000000000..452602210
--- /dev/null
+++ b/id/server/stork2-commons/src/test/java/eu/stork/peps/tests/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * This package provides all JUnit test classes.
+ */
+package eu.stork.peps.tests;
+
diff --git a/id/server/stork2-commons/src/test/resources/.svn/all-wcprops b/id/server/stork2-commons/src/test/resources/.svn/all-wcprops
new file mode 100644
index 000000000..a3a21b424
--- /dev/null
+++ b/id/server/stork2-commons/src/test/resources/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/resources
+END
+log4j.xml
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/CITnet/svn/STORK2/!svn/ver/19/trunk/Commons/src/test/resources/log4j.xml
+END
diff --git a/id/server/stork2-commons/src/test/resources/.svn/entries b/id/server/stork2-commons/src/test/resources/.svn/entries
new file mode 100644
index 000000000..9274deb98
--- /dev/null
+++ b/id/server/stork2-commons/src/test/resources/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+776
+https://webgate.ec.europa.eu/CITnet/svn/STORK2/trunk/Commons/src/test/resources
+https://webgate.ec.europa.eu/CITnet/svn/STORK2
+
+
+
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+aa842e49-f825-43fc-93ba-11ee9fd5a035
+
+log4j.xml
+file
+
+
+
+
+2013-12-20T12:27:56.542475Z
+4e990a84da0033594135b05cd01a9cdd
+2013-07-25T08:54:09.995385Z
+7
+emsomavmi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+645
+
diff --git a/id/server/stork2-commons/src/test/resources/.svn/text-base/log4j.xml.svn-base b/id/server/stork2-commons/src/test/resources/.svn/text-base/log4j.xml.svn-base
new file mode 100644
index 000000000..0ad2ea9a4
--- /dev/null
+++ b/id/server/stork2-commons/src/test/resources/.svn/text-base/log4j.xml.svn-base
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+	<appender name="MainLogger" class="org.apache.log4j.DailyRollingFileAppender">
+		<param name="File" value="stork-commons.log" />
+		<param name="DatePattern" value="'.'yyyy-MM-dd" />
+		<param name="Append" value="true" />
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss:SSS} - %p - %C{1} - %m%n" />
+		</layout>
+	</appender>
+
+	<root>
+		<priority value="info" />
+		<appender-ref ref="MainLogger" />
+	</root>
+
+</log4j:configuration>
diff --git a/id/server/stork2-commons/src/test/resources/log4j.xml b/id/server/stork2-commons/src/test/resources/log4j.xml
new file mode 100644
index 000000000..0ad2ea9a4
--- /dev/null
+++ b/id/server/stork2-commons/src/test/resources/log4j.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+	<appender name="MainLogger" class="org.apache.log4j.DailyRollingFileAppender">
+		<param name="File" value="stork-commons.log" />
+		<param name="DatePattern" value="'.'yyyy-MM-dd" />
+		<param name="Append" value="true" />
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%d{HH:mm:ss:SSS} - %p - %C{1} - %m%n" />
+		</layout>
+	</appender>
+
+	<root>
+		<priority value="info" />
+		<appender-ref ref="MainLogger" />
+	</root>
+
+</log4j:configuration>
diff --git a/id/server/stork2-saml-engine/pom.xml b/id/server/stork2-saml-engine/pom.xml
new file mode 100644
index 000000000..cead61eb8
--- /dev/null
+++ b/id/server/stork2-saml-engine/pom.xml
@@ -0,0 +1,201 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <groupId>MOA.id</groupId>
+        <artifactId>moa-id</artifactId>
+        <version>1.9.98-SNAPSHOT</version>
+    </parent>
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>eu.stork</groupId>
+	<artifactId>SamlEngine</artifactId>
+	<packaging>jar</packaging>
+	<name>STORKSAMLEngine</name>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<saml.version>1.4.0</saml.version>
+		<samlspec.version>0.5.2</samlspec.version>
+		<samlspecacept.version>0.5.1</samlspecacept.version>
+		<commons.version>1.4.0</commons.version>
+		<opensaml.version>2.6.0</opensaml.version>
+		<timestamp>${maven.build.timestamp}</timestamp>
+	</properties>
+	<version>${saml.version}</version>
+	<description>
+        The STORKSAMLEngine library provides tools to support developers working with the Security Assertion Markup Language (SAML).
+    </description>
+
+	<repositories>
+		<repository>
+			<id>org.opensaml</id>
+			<url>https://build.shibboleth.net/nexus/content/repositories/releases</url>
+		</repository>
+		<!-- repository OpenSaml -->
+		<repository>
+			<id>shibboleth-release</id>
+			<name>Internet2 Releases</name>
+			<layout>default</layout>
+			<url>https://build.shibboleth.net/nexus/content/repositories/releases</url>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<!-- Compile dependencies -->
+		<dependency>
+			<groupId>eu.stork</groupId>
+			<artifactId>Commons</artifactId>
+			<version>${commons.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opensaml</groupId>
+			<artifactId>opensaml</artifactId>
+			<version>${opensaml.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>slf4j-api</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>slf4j-simple</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>jcl-over-slf4j</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>log4j-over-slf4j</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>jul-to-slf4j</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+			<version>1.7.5</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-simple</artifactId>
+			<version>1.7.5</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>jcl-over-slf4j</artifactId>
+			<version>1.7.5</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>log4j-over-slf4j</artifactId>
+			<version>1.7.5</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>jul-to-slf4j</artifactId>
+			<version>1.7.5</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.2</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>xerces</groupId>
+			<artifactId>xercesImpl</artifactId>
+			<version>2.11.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>2.3.2</version>
+					<configuration>
+						<source>1.6</source>
+						<target>1.6</target>
+					</configuration>
+				</plugin>
+
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-surefire-plugin</artifactId>
+					<configuration>
+						<skip>true</skip>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifestEntries>
+							<SAMLEngineVersion>${saml.version}</SAMLEngineVersion>
+							<SAMLSpecVersion-accept>${samlspecacept.version}</SAMLSpecVersion-accept>
+							<SAMLSpecVersion-send>${samlspec.version}</SAMLSpecVersion-send>
+							<SAMLSpecKnownIssues>None</SAMLSpecKnownIssues>
+							<timestamp>${timestamp}</timestamp>
+						</manifestEntries>
+					</archive>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<profiles>
+		<profile>
+			<id>metrics</id>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.codehaus.mojo</groupId>
+						<artifactId>cobertura-maven-plugin</artifactId>
+						<version>2.5.1</version>
+						<configuration>
+							<formats>
+								<format>html</format>
+								<format>xml</format>
+							</formats>
+						</configuration>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+	<reporting>
+	</reporting>
+</project>
diff --git a/id/server/stork2-saml-engine/src/main/java/META-INF/MANIFEST.MF b/id/server/stork2-saml-engine/src/main/java/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..254272e1c
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java
new file mode 100644
index 000000000..26635e337
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngine.java
@@ -0,0 +1,415 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine;
+
+import java.io.ByteArrayInputStream;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.opensaml.Configuration;
+import org.opensaml.DefaultBootstrap;
+import org.opensaml.common.SAMLObject;
+import org.opensaml.common.SignableSAMLObject;
+import org.opensaml.xml.ConfigurationException;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.Marshaller;
+import org.opensaml.xml.io.MarshallerFactory;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.io.Unmarshaller;
+import org.opensaml.xml.io.UnmarshallerFactory;
+import org.opensaml.xml.io.UnmarshallingException;
+import org.opensaml.xml.parse.BasicParserPool;
+import org.opensaml.xml.parse.XMLParserException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
+import eu.stork.peps.auth.engine.core.STORKSAMLCore;
+import eu.stork.peps.auth.engine.core.impl.CustomAttributeQueryMarshaller;
+import eu.stork.peps.auth.engine.core.impl.CustomAttributeQueryUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.SignModuleFactory;
+import eu.stork.peps.configuration.ConfigurationCreator;
+import eu.stork.peps.configuration.ConfigurationReader;
+import eu.stork.peps.configuration.InstanceEngine;
+import eu.stork.peps.exceptions.SAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
+
+/**
+ * Class that wraps the operations over SAML tokens, both generation and
+ * validation of SAML requests and SAML responses. Compliant with "OASIS Secure
+ * Assertion Markup Language (SAML) 2.0, May 2005", but taking into account
+ * STORK specific requirements.
+ * 
+ * @author fjquevedo
+ * @author iinigo
+ */
+
+public class SAMLEngine {
+
+	/** The Document Builder Factory. */
+	private static javax.xml.parsers.DocumentBuilderFactory dbf = null;
+
+	/** The instance of every engine SAML. */
+	private static Map<String, InstanceEngine> instanceConfigs;
+
+	/** The instances of SAML engine. */
+	private static Map<String, Map<String, Object>> instances;
+
+	/** The logger. */
+	private static final Logger LOG = LoggerFactory.getLogger(SAMLEngine.class
+			.getName());
+
+	/** The Constant MODULE_SIGN_CONF. */
+	private static final String MODULE_SIGN_CONF = "SignatureConf";
+
+	/** The Constant SAML_ENGINE_SIGN_CLASS. */
+	private static final String SAML_ENGINE_SIGN_CLASS = "class";
+
+	/** The Constant SAML_ENGINE_CONF. */
+	private static final String SAML_ENGINE_CONF = "SamlEngineConf";
+
+	/** The Constant SAML_ENGINE_FILE_CONF. */
+	private static final String SAML_ENGINE_FILE_CONF = "fileConfiguration";
+
+	/** The codification of characters. */
+	private static final String CHARACTER_ENCODING = "UTF-8";
+
+	/** The SAML core. */
+	private STORKSAMLCore samlCore;
+
+	/** The Module of Signature. */
+	private SAMLEngineSignI signer;
+
+
+	/** Initializes the SAML engine. */
+	/** Configure Document Builder Factory. */
+
+	static {
+		startUp();
+		loadDocumentFactory();
+	}
+
+	/**
+	 * Load document factory.
+	 */
+	private static void loadDocumentFactory() {
+		try {
+			dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance();
+			dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+			dbf.setNamespaceAware(true);
+			dbf.setIgnoringComments(true);
+		} catch (ParserConfigurationException e) {
+			LOG.error("Error parser configuration.");
+			throw new STORKSAMLEngineRuntimeException(e);
+		}
+	}
+
+	/**
+	 * Method that initializes the basic services for the SAML Engine, like the
+	 * OpenSAML library and the BouncyCastle provider.
+	 */
+	private static void startUp() {
+
+		LOG.info("SAMLEngine: Initialize OpenSAML");
+
+
+
+/* Commented because it makes a problems with PVP2 MOA-ID
+		try {
+			DefaultBootstrap.bootstrap();
+		} catch (ConfigurationException e) {
+			LOG.error("Problem initializing the OpenSAML library.");
+			throw new STORKSAMLEngineRuntimeException(e);
+		}
+*/
+
+		LOG.debug("Read all file configurations. (instances of SAMLEngine)");
+		try {
+			instanceConfigs = ConfigurationReader.readConfiguration();
+		} catch (SAMLEngineException e) {
+			LOG.error("Error read configuration file.");
+			throw new STORKSAMLEngineRuntimeException(e);
+		}
+
+		LOG.debug("Create all instances of saml engine. (instances of SAMLEngine)");
+		try {
+			instances = ConfigurationCreator
+					.createConfiguration(instanceConfigs);
+		} catch (STORKSAMLEngineException e) {
+			LOG.error("Error initializing instances from Stork SAML engine.");
+			throw new STORKSAMLEngineRuntimeException(e);
+		}
+	}
+
+	/**
+	 * Instantiates a new SAML engine.
+	 * 
+	 * @param nameInstance the name instance
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	protected SAMLEngine(final String nameInstance)
+			throws STORKSAMLEngineException {
+		LOG.info("Loading Specific Configuration.");
+
+		LOG.debug("Create intance of saml messages.");
+
+		Map<String, Object> instance = instances.get(nameInstance);
+
+		if (instance == null || instance.isEmpty()) {
+			LOG.error("Instance: " + nameInstance + " not exist.");
+			throw new STORKSAMLEngineException("Instance: " + nameInstance
+					+ " not exist.");
+		}
+
+		Properties properties = (Properties) instance.get(SAML_ENGINE_CONF);
+
+		if (properties == null) {
+			LOG.error("SamlEngine.xml: not exist.");
+			throw new STORKSAMLEngineException("SamlEngine.xml: not exist.");
+		}
+
+		samlCore = new STORKSAMLCore(properties);
+
+		final HashMap<String, String> propertiesSign = (HashMap<String, String>) instance
+				.get(MODULE_SIGN_CONF);
+
+		LOG.debug("Loading Module of sign.");
+		signer = SignModuleFactory.getInstance(propertiesSign
+				.get(SAML_ENGINE_SIGN_CLASS));
+
+		try {
+			LOG.info("Initialize module of sign.");
+			signer.init(propertiesSign.get(SAML_ENGINE_FILE_CONF));
+			LOG.info("Load cryptographic service provider of module of sign.");
+			signer.loadCryptServiceProvider();
+		} catch (SAMLEngineException e) {
+			LOG.error("Error create signature module: "
+					+ propertiesSign.get(SAML_ENGINE_FILE_CONF));
+			LOG.info("Exception" + e);
+			throw new STORKSAMLEngineException(e);
+		}
+	}
+
+	/**
+	 * Gets the Signer properties.
+	 * 
+	 * @return the SAML Sign properties
+	 */
+	protected SAMLEngineSignI getSigner() {
+		return signer;
+	}
+
+	/**
+	 * Gets the SAML core properties.
+	 * 
+	 * @return the SAML core properties
+	 */
+	protected final STORKSAMLCore getSamlCoreProperties() {
+		return samlCore;
+	}
+
+	/**
+	 * Method that transform the received SAML object into a byte array
+	 * representation.
+	 * 
+	 * @param samlToken the SAML token.
+	 * 
+	 * @return the byte[] of the SAML token.
+	 * 
+	 * @throws SAMLEngineException the SAML engine exception
+	 */
+	private byte[] marshall(final XMLObject samlToken)
+			throws SAMLEngineException {
+
+		try {
+			javax.xml.parsers.DocumentBuilder docBuilder = null;
+
+			final MarshallerFactory marshallerFactory = Configuration
+					.getMarshallerFactory();
+
+			final Marshaller marshaller;
+			if (samlToken.getElementQName().toString().endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
+				marshaller = new CustomAttributeQueryMarshaller();
+			else
+				marshaller = marshallerFactory
+				.getMarshaller(samlToken);
+
+			docBuilder = dbf.newDocumentBuilder();
+
+			final Document doc = docBuilder.newDocument();
+
+			marshaller.marshall(samlToken, doc);
+
+			// Obtain a byte array representation of the marshalled SAML object
+			final DOMSource domSource = new DOMSource(doc);
+			final StringWriter writer = new StringWriter();
+			final StreamResult result = new StreamResult(writer);
+			final TransformerFactory transFactory = TransformerFactory
+					.newInstance();
+			Transformer transformer;
+
+			transformer = transFactory.newTransformer();
+			transformer.transform(domSource, result);
+			LOG.debug("SAML request \n"+ writer.toString());
+			return writer.toString().getBytes(CHARACTER_ENCODING);
+
+		} catch (ParserConfigurationException e) {
+			LOG.error("ParserConfigurationException.");
+			throw new SAMLEngineException(e);
+		} catch (MarshallingException e) {
+			LOG.error("MarshallingException.");
+			throw new SAMLEngineException(e);
+		} catch (TransformerConfigurationException e) {
+			LOG.error("TransformerConfigurationException.");
+			throw new SAMLEngineException(e);
+		} catch (TransformerException e) {
+			LOG.error("TransformerException.");
+			throw new SAMLEngineException(e);
+		} catch (UnsupportedEncodingException e) {
+			LOG.error("UnsupportedEncodingException: " + CHARACTER_ENCODING);
+			throw new SAMLEngineException(e);
+		}
+	}
+
+	/**
+	 * Method that signs a SAML Token.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * 
+	 * @return the SAML object sign
+	 * 
+	 * @throws SAMLEngineException the SAML engine exception
+	 */
+	private SignableSAMLObject sign(final SignableSAMLObject tokenSaml)
+			throws SAMLEngineException {
+		LOG.debug("Sign SamlToken.");
+		signer.sign(tokenSaml);
+		return tokenSaml;
+	}
+
+	/**
+	 * Sign and transform to byte array.
+	 * 
+	 * @param samlToken the SAML token
+	 * 
+	 * @return the byte[] of the SAML token
+	 * 
+	 * @throws SAMLEngineException the SAML engine exception
+	 */
+	protected final byte[] signAndMarshall(final SignableSAMLObject samlToken)
+			throws SAMLEngineException {
+		LOG.debug("Marshall Saml Token.");
+		SignableSAMLObject signElement = sign(samlToken);
+		return marshall(signElement);
+	}
+
+	/**
+	 * Method that unmarshalls a SAML Object from a byte array representation to
+	 * an XML Object.
+	 * 
+	 * @param samlToken Byte array representation of a SAML Object
+	 * 
+	 * @return XML Object (superclass of SAMLObject)
+	 * 
+	 * @throws SAMLEngineException the SAML engine exception
+	 */
+	protected final XMLObject unmarshall(final byte[] samlToken)
+			throws SAMLEngineException {
+		try {
+			// Get parser pool manager
+			final BasicParserPool ppMgr = new BasicParserPool();
+			// Note: this is necessary due to an unresolved Xerces deferred DOM
+			// issue/bug
+			final HashMap<String, Boolean> features = new HashMap<String, Boolean>();
+			features.put(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+			ppMgr.setBuilderFeatures(features);
+
+			ppMgr.setNamespaceAware(true);
+
+			// Parse SAMLToken
+			Document document = ppMgr.parse(new ByteArrayInputStream(samlToken));
+			if (document != null){
+				final Element root = document.getDocumentElement();
+				// Get appropriate unmarshaller
+				final UnmarshallerFactory unmarshallerFact = Configuration.getUnmarshallerFactory();
+				// Unmarshall using the SAML Token root element
+				if (unmarshallerFact != null && root != null){
+					final Unmarshaller unmarshaller;
+					if (root.getLocalName().equals(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
+						unmarshaller = new CustomAttributeQueryUnmarshaller();
+					else
+						unmarshaller = unmarshallerFact.getUnmarshaller(root);
+					try {
+						return unmarshaller.unmarshall(root);
+					} catch (NullPointerException e){
+						LOG.error("Error element tag incomplet or null.");
+						throw new SAMLEngineException("NullPointerException", e);
+					}
+				} else {
+					LOG.error("Error element tag incomplet or null.");
+					throw new SAMLEngineException("NullPointerException : unmarshallerFact or root is null");
+				}
+			} else {
+				LOG.error("Error element tag incomplet or null.");
+				throw new SAMLEngineException("NullPointerException : document is null");
+			}
+		} catch (XMLParserException e) {
+			LOG.error("XML Parsing Error.", e);
+			throw new SAMLEngineException(e);
+		} catch (UnmarshallingException e) {
+			LOG.error("TransformerException.", e);
+			throw new SAMLEngineException(e);
+		} catch (NullPointerException e) {
+			LOG.error("Error element tag incomplet or null.", e);
+			throw new SAMLEngineException(e);
+		}
+	}
+
+	/**
+	 * Method that validates an XML Signature contained in a SAML Token.
+	 * 
+	 * @param samlToken the SAML token
+	 * 
+	 * @return the SAML object
+	 * 
+	 * @throws SAMLEngineException the SAML engine exception
+	 */
+	protected final SAMLObject validateSignature(
+			final SignableSAMLObject samlToken) throws SAMLEngineException {
+
+		LOG.info("Validate Signature");
+		signer.validateSignature(samlToken);
+
+		return samlToken;
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java
new file mode 100644
index 000000000..1efbb8b32
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/SAMLEngineUtils.java
@@ -0,0 +1,833 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.commons.lang.StringUtils;
+import org.joda.time.DateTime;
+import org.opensaml.Configuration;
+import org.opensaml.common.SAMLVersion;
+import org.opensaml.common.impl.SecureRandomIdentifierGenerator;
+import org.opensaml.saml2.common.Extensions;
+import org.opensaml.saml2.common.impl.ExtensionsBuilder;
+import org.opensaml.saml2.core.Assertion;
+import org.opensaml.saml2.core.Attribute;
+import org.opensaml.saml2.core.AttributeValue;
+import org.opensaml.saml2.core.AuthnContext;
+import org.opensaml.saml2.core.AuthnRequest;
+import org.opensaml.saml2.core.AuthnStatement;
+import org.opensaml.saml2.core.Issuer;
+import org.opensaml.saml2.core.LogoutRequest;
+import org.opensaml.saml2.core.LogoutResponse;
+import org.opensaml.saml2.core.NameID;
+import org.opensaml.saml2.core.Response;
+import org.opensaml.saml2.core.Status;
+import org.opensaml.saml2.core.StatusCode;
+import org.opensaml.saml2.core.StatusMessage;
+import org.opensaml.saml2.core.Subject;
+import org.opensaml.saml2.core.SubjectConfirmation;
+import org.opensaml.saml2.core.SubjectConfirmationData;
+import org.opensaml.saml2.core.SubjectLocality;
+import org.opensaml.saml2.core.impl.AssertionBuilder;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.schema.XSAny;
+import org.opensaml.xml.signature.KeyInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+import eu.stork.peps.auth.engine.core.SAMLCore;
+import eu.stork.peps.auth.engine.core.SPApplication;
+import eu.stork.peps.auth.engine.core.SPCountry;
+import eu.stork.peps.auth.engine.core.SPInstitution;
+import eu.stork.peps.auth.engine.core.SPSector;
+import eu.stork.peps.auth.engine.core.impl.CustomAttributeQueryBuilder;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
+
+/**
+ * The Class SAMLEngineUtils.
+ * 
+ * @author fjquevedo
+ * @author iinigo
+ *
+ */
+public final class SAMLEngineUtils {
+
+	/** The Constant UTF_8. */
+	public static final String UTF_8 = "UTF-8";
+
+	/** The Constant SHA_512. */
+	public static final String SHA_512 = "SHA-512";
+
+	/** The generator. */
+	private static SecureRandomIdentifierGenerator generator;
+
+	/** The Constant LOG. */
+	private static final Logger LOG = LoggerFactory
+			.getLogger(SAMLEngineUtils.class.getName());
+
+	/**
+	 * Method that generates a random value according to NCName grammar.
+	 * 
+	 * NCName ::= NCNameStartChar NCNameChar* NCNameChar ::= NameChar - ':'
+	 * NCNameStartChar ::= Letter | '_' NameStartChar ::= ":" | [A-Z] | "_" |
+	 * [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] |
+	 * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
+	 * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+	 * NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] |
+	 * [#x203F-#x2040] Name ::= NameStartChar (NameChar)* Letter ::= BaseChar |
+	 * Ideographic BaseChar ::= [#x0041-#x005A] | [#x0061-#x007A] |
+	 * [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131] |
+	 * [#x0134-#x013E] | [#x0141-#x0148] | [#x014A-#x017E] | [#x0180-#x01C3] |
+	 * [#x01CD-#x01F0] | [#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250-#x02A8] |
+	 * [#x02BB-#x02C1] | #x0386 | [#x0388-#x038A] | #x038C | [#x038E-#x03A1] |
+	 * [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 |
+	 * [#x03E2-#x03F3] | [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] |
+	 * [#x045E-#x0481] | [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] |
+	 * [#x04D0-#x04EB] | [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] |
+	 * #x0559 | [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] |
+	 * [#x0621-#x063A] | [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] |
+	 * [#x06C0-#x06CE] | [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] |
+	 * [#x0905-#x0939] | #x093D | [#x0958-#x0961] | [#x0985-#x098C] |
+	 * [#x098F-#x0990] | [#x0993-#x09A8] | [#x09AA-#x09B0] | #x09B2 |
+	 * [#x09B6-#x09B9] | [#x09DC-#x09DD] | [#x09DF-#x09E1] | [#x09F0-#x09F1] |
+	 * [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | [#x0A13-#x0A28] | [#x0A2A-#x0A30] |
+	 * [#x0A32-#x0A33] | [#x0A35-#x0A36] | [#x0A38-#x0A39] | [#x0A59-#x0A5C] |
+	 * #x0A5E | [#x0A72-#x0A74] | [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] |
+	 * [#x0A93-#x0AA8] | [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] |
+	 * #x0ABD | #x0AE0 | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] |
+	 * [#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D |
+	 * [#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] |
+	 * [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] |
+	 * [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] |
+	 * [#x0C05-#x0C0C] | [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] |
+	 * [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] |
+	 * [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE |
+	 * [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] |
+	 * [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 |
+	 * [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 |
+	 * [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] |
+	 * [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] |
+	 * #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] |
+	 * [#x0F49-#x0F69] | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 |
+	 * [#x1102-#x1103] | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] |
+	 * [#x110E-#x1112] | #x113C | #x113E | #x1140 | #x114C | #x114E | #x1150 |
+	 * [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | #x1165 | #x1167 |
+	 * #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 | #x119E | #x11A8 |
+	 * #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] |
+	 * #x11EB | #x11F0 | #x11F9 | [#x1E00-#x1E9B] | [#x1EA0-#x1EF9] |
+	 * [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D] |
+	 * [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D] |
+	 * [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4] |
+	 * [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | [#x1FE0-#x1FEC] |
+	 * [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | [#x212A-#x212B] | #x212E |
+	 * [#x2180-#x2182] | [#x3041-#x3094] | [#x30A1-#x30FA] | [#x3105-#x312C] |
+	 * [#xAC00-#xD7A3] Ideographic ::= [#x4E00-#x9FA5] | #x3007 |
+	 * [#x3021-#x3029]
+	 * 
+	 * @return Random ID value
+	 */
+
+	//Initialization of a generator of identifiers for all token SAML.
+	static {
+		loadRandomIdentifierGenerator();
+	}
+
+	/**
+	 * Load random identifier generator.
+	 *
+	 *@throws STORKSAMLEngineRuntimeException the STORKSAML engine runtime exception
+	 */
+	private static void loadRandomIdentifierGenerator() {
+		try {
+			generator = new SecureRandomIdentifierGenerator();
+		} catch (NoSuchAlgorithmException ex) {
+			LOG.error("Error init SecureRandomIdentifierGenerator", ex);
+			throw new STORKSAMLEngineRuntimeException(ex);
+		}
+
+	}
+
+	/**
+	 * Creates the SAML object.
+	 * 
+	 * @param qname the QName
+	 * 
+	 * @return the XML object
+	 */
+	public static XMLObject createSamlObject(final QName qname) {
+		if (qname.toString().endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
+		{
+			CustomAttributeQueryBuilder builder = new CustomAttributeQueryBuilder();
+			return builder.buildObject(qname);
+		}
+		else
+		{
+			return Configuration.getBuilderFactory().getBuilder(qname).buildObject(
+					qname);
+		}
+	}
+
+	/**
+	 * Creates the SAML object.
+	 * 
+	 * @param qname the quality name
+	 * @param qname1 the qname1
+	 * 
+	 * @return the xML object
+	 */
+	public static XMLObject createSamlObject(final QName qname,
+			final QName qname1) {
+		return Configuration.getBuilderFactory().getBuilder(qname1)
+				.buildObject(qname, qname1);
+	}
+
+	/**
+	 * Encode value with an specific algorithm.
+	 * 
+	 * @param value the value
+	 * @param alg the algorithm
+	 * 
+	 * @return the string
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public static String encode(final String value, final String alg)
+			throws STORKSAMLEngineException {
+		LOG.debug("Encode value with  " + alg + " algorithm.");
+		byte[] buffer;
+		final StringBuffer hash = new StringBuffer("");
+		try {
+			buffer = value.getBytes(UTF_8);
+			MessageDigest msgDig;
+			msgDig = MessageDigest.getInstance(alg);
+			msgDig.update(buffer);
+			final byte[] digest = msgDig.digest();
+			final int signedByte = 0xff;
+			for (byte aux : digest) {
+				final int byt = aux & signedByte;
+				if (Integer.toHexString(byt).length() == 1) {
+					hash.append('0');
+				}
+				hash.append(Integer.toHexString(byt));
+			}
+		} catch (UnsupportedEncodingException e1) {
+			LOG.error("UnsupportedEncodingException: " + UTF_8);
+			throw new STORKSAMLEngineException(e1);
+		} catch (NoSuchAlgorithmException e) {
+			LOG.error("NoSuchAlgorithmException: " + alg);
+			throw new STORKSAMLEngineException(e);
+		}
+		return hash.toString();
+	}
+
+	/**
+	 * Generate assertion.
+	 * 
+	 * @param version the version
+	 * @param identifier the identifier
+	 * @param issueInstant the issue instant
+	 * @param issuer the issuer
+	 * 
+	 * @return the assertion
+	 */
+	public static Assertion generateAssertion(final SAMLVersion version,
+			final String identifier, final DateTime issueInstant,
+			final Issuer issuer) {
+		final AssertionBuilder assertionBuilder = new AssertionBuilder();
+		final Assertion assertion = assertionBuilder.buildObject();
+		assertion.setVersion(version);
+		assertion.setID(identifier);
+		assertion.setIssueInstant(issueInstant);
+		// <saml:Issuer>
+		assertion.setIssuer(issuer);
+		return assertion;
+	}
+
+	/**
+	 * Generate authentication statement.
+	 * 
+	 * @param authnInstant the authentication instant
+	 * @param authnContext the authentication context
+	 * 
+	 * @return the authentication statement
+	 */
+	public static AuthnStatement generateAthnStatement(final DateTime authnInstant,
+			final AuthnContext authnContext) {
+		// <saml:AuthnStatement>
+		final AuthnStatement authnStatement = (AuthnStatement) SAMLEngineUtils
+				.createSamlObject(AuthnStatement.DEFAULT_ELEMENT_NAME);
+		authnStatement.setAuthnInstant(authnInstant);
+		authnStatement.setAuthnContext(authnContext);
+		return authnStatement;
+	}
+
+	/**
+	 * Generate attribute from a list of values.
+	 *
+	 * @param name the name of the attribute.
+	 * @param status the status of the parameter: "Available", "NotAvailable" or
+	 * "Withheld".
+	 * @param values the value of the attribute.
+	 * @param isHashing the is hashing with "SHA-512" algorithm.
+	 * @return the attribute
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public static Attribute generateAttrComplex(final String name,
+			final String status, final Map<String, String> values,
+			final boolean isHashing) throws STORKSAMLEngineException {
+		LOG.debug("Generate attribute complex: " + name);
+		final Attribute attribute = (Attribute) SAMLEngineUtils
+				.createSamlObject(Attribute.DEFAULT_ELEMENT_NAME);
+
+		attribute.setName(name);
+		attribute.setNameFormat(Attribute.URI_REFERENCE);
+		attribute.getUnknownAttributes().put(
+				new QName(SAMLCore.STORK10_NS.getValue(), "AttributeStatus",
+						SAMLCore.STORK10_PREFIX.getValue()), status);
+
+		if (!values.isEmpty()) {
+			LOG.debug("Add attribute values.");
+			// Create an attribute that contains all XSAny elements.
+			final XSAny attrValue = (XSAny) SAMLEngineUtils.createSamlObject(
+					AttributeValue.DEFAULT_ELEMENT_NAME, XSAny.TYPE_NAME);
+			final Iterator<Entry<String, String>> iterator = values.entrySet()
+					.iterator();
+			while (iterator.hasNext()) {
+				final Map.Entry<String, String> pairs = iterator.next();
+				final String value = pairs.getValue();
+
+				if (StringUtils.isNotBlank(value)) {
+					// Create the attribute statement
+					final XSAny attrValueSimple = (XSAny) SAMLEngineUtils
+							.createSamlObject(new QName(SAMLCore.STORK10_NS.getValue(),
+									pairs.getKey().toString(),
+									SAMLCore.STORK10_PREFIX.getValue()), XSAny.TYPE_NAME);
+					// if it's necessary encode the information.
+					if (isHashing) {
+						attrValueSimple
+						.setTextContent(encode(value, SHA_512));
+					} else {
+						attrValueSimple.setTextContent(value);
+					}		    
+					attrValue.getUnknownXMLObjects().add(attrValueSimple);
+					attribute.getAttributeValues().add(attrValue);
+				}
+			}
+
+		}
+		return attribute;
+	}
+
+	/**
+	 * Generate extension.
+	 * 
+	 * @return the extensions
+	 */
+	public static Extensions generateExtension() {
+		final ExtensionsBuilder extensionsBuilder = new ExtensionsBuilder();
+		return extensionsBuilder.buildObject(
+				"urn:oasis:names:tc:SAML:2.0:protocol", "Extensions", "saml2p");
+	}
+
+	/**
+	 * Generate issuer.
+	 * 
+	 * @return the issuer
+	 */
+	public static Issuer generateIssuer() {
+		return (Issuer) SAMLEngineUtils
+				.createSamlObject(Issuer.DEFAULT_ELEMENT_NAME);
+	}
+
+	/**
+	 * Generate key info.
+	 * 
+	 * @return the key info
+	 */
+	public static KeyInfo generateKeyInfo() {
+		return (KeyInfo) SAMLEngineUtils
+				.createSamlObject(KeyInfo.DEFAULT_ELEMENT_NAME);
+	}
+
+	/**
+	 * Generate name id.
+	 * 
+	 * @return the name id
+	 */
+	public static NameID generateNameID() {
+		return (NameID) SAMLEngineUtils
+				.createSamlObject(NameID.DEFAULT_ELEMENT_NAME);
+	}
+
+	/**
+	 * Generate name id.
+	 * 
+	 * @param nameQualifier the name qualifier
+	 * @param format the format
+	 * @param spNameQualifier the sP name qualifier
+	 * 
+	 * @return the name id
+	 */
+	public static NameID generateNameID(final String nameQualifier,
+			final String format, final String spNameQualifier) {
+		// <saml:NameID>
+		final NameID nameId = (NameID) Configuration.getBuilderFactory()
+				.getBuilder(NameID.DEFAULT_ELEMENT_NAME).buildObject(
+						NameID.DEFAULT_ELEMENT_NAME);
+		// optional
+		nameId.setNameQualifier(nameQualifier);
+		// optional
+		nameId.setFormat(format);
+		// optional
+		nameId.setSPNameQualifier(spNameQualifier);
+		return nameId;
+	}
+
+	/**
+	 * Generate NCName.
+	 * 
+	 * @return the string
+	 */
+	public static String generateNCName() {
+		return generator.generateIdentifier();
+	}
+
+	/**
+	 * Generate the quality authentication assurance level.
+	 * 
+	 * @param qaal the level of quality authentication assurance.
+	 * 
+	 * @return the quality authentication assurance attribute
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public static QAAAttribute generateQAAAttribute(final int qaal)
+			throws STORKSAMLEngineException {
+		LOG.debug("Generate QAAAttribute.");
+
+		final QAAAttribute qaaAttribute = (QAAAttribute) SAMLEngineUtils
+				.createSamlObject(QAAAttribute.DEF_ELEMENT_NAME);
+		qaaAttribute.setQaaLevel(String.valueOf(qaal));
+		return qaaAttribute;
+	}
+
+	/**
+	 * Generate requested attribute.
+	 * 
+	 * @param name the name
+	 * @param friendlyName the friendly name
+	 * @param isRequired the is required
+	 * @param value the value
+	 * 
+	 * @return the requested attribute
+	 */
+	public static RequestedAttribute generateReqAuthnAttributeSimple(
+			final String name, final String friendlyName,
+			final String isRequired, final List<String> value) {
+		LOG.debug("Generate the requested attribute.");
+
+		final RequestedAttribute requested = (RequestedAttribute) SAMLEngineUtils
+				.createSamlObject(RequestedAttribute.DEF_ELEMENT_NAME);
+		requested.setName(name);
+		requested.setNameFormat(RequestedAttribute.URI_REFERENCE);
+
+		requested.setFriendlyName(friendlyName);
+
+		requested.setIsRequired(isRequired);
+
+		// The value is optional in an authentication request.
+		if (!value.isEmpty()) {
+			for (int nextValue = 0; nextValue < value.size(); nextValue++) {
+				final String valor = value.get(nextValue);
+				if (StringUtils.isNotBlank(valor)) {			
+
+					if(!name.equals("http://www.stork.gov.eu/1.0/signedDoc")){
+
+						// Create the attribute statement
+						final XSAny attrValue = (XSAny) SAMLEngineUtils
+								.createSamlObject(
+										new QName(SAMLCore.STORK10_NS.getValue(),
+												"AttributeValue",
+												SAMLCore.STORK10_PREFIX.getValue()),
+												XSAny.TYPE_NAME);
+
+						attrValue.setTextContent(valor.trim());
+						requested.getAttributeValues().add(attrValue);
+
+					}else{		    	
+
+						DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
+						domFactory.setNamespaceAware(true); 		 
+						Document document = null;				
+						DocumentBuilder builder;
+
+						// Parse the signedDoc value into an XML DOM Document
+						try {
+							builder = domFactory.newDocumentBuilder();
+							InputStream is;
+							is = new ByteArrayInputStream(valor.trim().getBytes(UTF_8));
+							document = builder.parse(is);
+							is.close();						
+						} catch (SAXException e1) {
+							LOG.error("SAX Error while parsing signModule attribute", e1);
+							throw new STORKSAMLEngineRuntimeException(e1);
+						} catch (ParserConfigurationException e2) {
+							LOG.error("Parser Configuration Error while parsing signModule attribute", e2);
+							throw new STORKSAMLEngineRuntimeException(e2);
+						} catch (UnsupportedEncodingException e3) {
+							LOG.error("Unsupported encoding Error while parsing signModule attribute", e3);
+							throw new STORKSAMLEngineRuntimeException(e3);
+						} catch (IOException e4) {
+							LOG.error("IO Error while parsing signModule attribute", e4);
+							throw new STORKSAMLEngineRuntimeException(e4);
+						}
+
+						// Create the XML statement(this will be overwritten with the previous DOM structure)
+						final XSAny xmlValue = (XSAny) SAMLEngineUtils
+								.createSamlObject(
+										new QName(SAMLCore.STORK10_NS.getValue(),
+												"XMLValue",
+												SAMLCore.STORK10_PREFIX.getValue()),
+												XSAny.TYPE_NAME);	
+
+						//Set the signedDoc XML content to this element
+						xmlValue.setDOM(document.getDocumentElement());
+
+						// Create the attribute statement
+						final XSAny attrValue = (XSAny) SAMLEngineUtils
+								.createSamlObject(
+										new QName(SAMLCore.STORK10_NS.getValue(),
+												"AttributeValue",
+												SAMLCore.STORK10_PREFIX.getValue()),
+												XSAny.TYPE_NAME);	
+
+						//Add previous signedDocXML to the AttributeValue Element
+						attrValue.getUnknownXMLObjects().add(xmlValue);
+
+						requested.getAttributeValues().add(attrValue);		    	
+					}
+
+
+				}
+			}
+		}
+
+		return requested;
+	}
+
+	/**
+	 * Generate response.
+	 * 
+	 * @param version the version
+	 * @param identifier the identifier
+	 * @param issueInstant the issue instant
+	 * @param status the status
+	 * 
+	 * @return the response
+	 */
+	public static Response generateResponse(final SAMLVersion version,
+			final String identifier, final DateTime issueInstant,
+			final Status status) {
+		final Response response = (Response) SAMLEngineUtils
+				.createSamlObject(Response.DEFAULT_ELEMENT_NAME);
+		response.setID(identifier);
+		response.setIssueInstant(issueInstant);
+		response.setStatus(status);
+		return response;
+	}
+
+	/**
+	 * Method that generates a SAML Authentication Request basing on the
+	 * provided information.
+	 * 
+	 * @param identifier the identifier
+	 * @param version the version
+	 * @param issueInstant the issue instant
+	 * 
+	 * @return the authentication request
+	 */
+	public static AuthnRequest generateSAMLAuthnRequest(final String identifier,
+			final SAMLVersion version, final DateTime issueInstant) {
+		LOG.debug("Generate basic authentication request.");
+		final AuthnRequest authnRequest = (AuthnRequest) SAMLEngineUtils
+				.createSamlObject(AuthnRequest.DEFAULT_ELEMENT_NAME);
+
+		authnRequest.setID(identifier);
+		authnRequest.setVersion(version);
+		authnRequest.setIssueInstant(issueInstant);
+		return authnRequest;
+	}
+
+	public static CustomAttributeQuery generateSAMLAttrQueryRequest(final String identifier,
+			final SAMLVersion version, final DateTime issueInstant) {
+		LOG.debug("Generate attribute query request.");
+		final CustomAttributeQuery attrQueryRequest = (CustomAttributeQuery) SAMLEngineUtils
+				.createSamlObject(CustomAttributeQuery.DEFAULT_ELEMENT_NAME);
+
+		attrQueryRequest.setID(identifier);
+		attrQueryRequest.setVersion(version);
+		attrQueryRequest.setIssueInstant(issueInstant);
+		return attrQueryRequest;
+	}
+
+	public static LogoutRequest generateSAMLLogoutRequest(final String identifier,
+			final SAMLVersion version, final DateTime issueInstant) {
+		LOG.debug("Generate logout request.");
+		final LogoutRequest logoutRequest = (LogoutRequest)SAMLEngineUtils.
+				createSamlObject(LogoutRequest.DEFAULT_ELEMENT_NAME);
+
+
+		logoutRequest.setID(identifier);
+		logoutRequest.setVersion(version);
+		logoutRequest.setIssueInstant(issueInstant);
+		return logoutRequest;
+	}
+
+	public static LogoutResponse generateSAMLLogoutResponse(final String identifier,
+			final SAMLVersion version, final DateTime issueInstant, 
+			final Status status, final String inResponseTo) {
+		LOG.debug("Generate logout response.");
+		final LogoutResponse logoutResponse = (LogoutResponse)SAMLEngineUtils.
+				createSamlObject(LogoutResponse.DEFAULT_ELEMENT_NAME);
+
+		logoutResponse.setInResponseTo(inResponseTo);
+		logoutResponse.setStatus(status);
+		logoutResponse.setID(identifier);
+		logoutResponse.setVersion(version);
+		logoutResponse.setIssueInstant(issueInstant);
+		return logoutResponse;
+	}
+
+	/**
+	 * Generate service provider application.
+	 * 
+	 * @param spApplication the service provider application
+	 * 
+	 * @return the sP application
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public static SPApplication generateSPApplication(final String spApplication)
+			throws STORKSAMLEngineException {
+		LOG.debug("Generate SPApplication.");
+
+		final SPApplication applicationAttr = (SPApplication) SAMLEngineUtils
+				.createSamlObject(SPApplication.DEF_ELEMENT_NAME);
+		applicationAttr.setSPApplication(spApplication);
+		return applicationAttr;
+	}
+
+	/**
+	 * Generate service provider country.
+	 * 
+	 * @param spCountry the service provider country
+	 * 
+	 * @return the service provider country
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public static SPCountry generateSPCountry(final String spCountry)
+			throws STORKSAMLEngineException {
+		LOG.debug("Generate SPApplication.");
+
+		final SPCountry countryAttribute = (SPCountry) SAMLEngineUtils
+				.createSamlObject(SPCountry.DEF_ELEMENT_NAME);
+		countryAttribute.setSPCountry(spCountry);
+		return countryAttribute;
+	}
+
+	/**
+	 * Generate service provider institution.
+	 * 
+	 * @param spInstitution the service provider institution
+	 * 
+	 * @return the service provider institution
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public static SPInstitution generateSPInstitution(final String spInstitution)
+			throws STORKSAMLEngineException {
+		LOG.debug("Generate SPInstitution.");
+
+		final SPInstitution institutionAttr = (SPInstitution) SAMLEngineUtils
+				.createSamlObject(SPInstitution.DEF_ELEMENT_NAME);
+		institutionAttr.setSPInstitution(spInstitution);
+		return institutionAttr;
+	}
+
+	/**
+	 * Generate service provider sector.
+	 * 
+	 * @param spSector the service provider sector
+	 * 
+	 * @return the service provider sector
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public static SPSector generateSPSector(final String spSector)
+			throws STORKSAMLEngineException {
+		LOG.debug("Generate SPSector.");
+
+		final SPSector sectorAttribute = (SPSector) SAMLEngineUtils
+				.createSamlObject(SPSector.DEF_ELEMENT_NAME);
+		sectorAttribute.setSPSector(spSector);
+		return sectorAttribute;
+	}
+
+	/**
+	 * Generate status.
+	 * 
+	 * @param statusCode the status code
+	 * 
+	 * @return the status
+	 */
+	public static Status generateStatus(final StatusCode statusCode) {
+		final Status status = (Status) SAMLEngineUtils
+				.createSamlObject(Status.DEFAULT_ELEMENT_NAME);
+		status.setStatusCode(statusCode);
+		return status;
+	}
+
+	/**
+	 * Generate status code.
+	 * 
+	 * @param value the value
+	 * 
+	 * @return the status code
+	 */
+	public static StatusCode generateStatusCode(final String value) {
+		final StatusCode statusCode = (StatusCode) SAMLEngineUtils
+				.createSamlObject(StatusCode.DEFAULT_ELEMENT_NAME);
+		statusCode.setValue(value);
+		return statusCode;
+	}
+
+	/**
+	 * Generate status message.
+	 * 
+	 * @param message the message
+	 * 
+	 * @return the status message
+	 */
+	public static StatusMessage generateStatusMessage(final String message) {
+		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+				.createSamlObject(StatusMessage.DEFAULT_ELEMENT_NAME);
+		statusMessage.setMessage(message);
+		return statusMessage;
+	}
+
+	/**
+	 * Generate subject.
+	 * 
+	 * @return the subject
+	 */
+	public static Subject generateSubject() {
+		return (Subject) SAMLEngineUtils
+				.createSamlObject(Subject.DEFAULT_ELEMENT_NAME);
+	}
+
+	/**
+	 * Generate subject confirmation.
+	 * 
+	 * @param method the method
+	 * @param data the data
+	 * 
+	 * @return the subject confirmation
+	 */
+	public static SubjectConfirmation generateSubjectConfirmation(
+			final String method, final SubjectConfirmationData data) {	
+		final SubjectConfirmation subjectConf = (SubjectConfirmation) Configuration
+				.getBuilderFactory().getBuilder(
+						SubjectConfirmation.DEFAULT_ELEMENT_NAME).buildObject(
+								SubjectConfirmation.DEFAULT_ELEMENT_NAME);
+
+		subjectConf.setMethod(method);
+
+		subjectConf.setSubjectConfirmationData(data);
+
+		return subjectConf;
+	}
+
+	/**
+	 * Generate subject confirmation data.
+	 * 
+	 * @param notOnOrAfter the not on or after
+	 * @param recipient the recipient
+	 * @param inResponseTo the in response to
+	 * 
+	 * @return the subject confirmation data
+	 */
+	public static SubjectConfirmationData generateSubjectConfirmationData(
+			final DateTime notOnOrAfter, final String recipient,
+			final String inResponseTo) {
+		final SubjectConfirmationData subjectConfData = (SubjectConfirmationData) SAMLEngineUtils
+				.createSamlObject(SubjectConfirmationData.DEFAULT_ELEMENT_NAME);
+		subjectConfData.setNotOnOrAfter(notOnOrAfter);
+		subjectConfData.setRecipient(recipient);
+		subjectConfData.setInResponseTo(inResponseTo);
+		return subjectConfData;
+	}
+
+	/**
+	 * Generate subject locality.
+	 * 
+	 * @param address the address
+	 * 
+	 * @return the subject locality
+	 */
+	public static SubjectLocality generateSubjectLocality(final String address) {
+		final SubjectLocality subjectLocality = (SubjectLocality) SAMLEngineUtils
+				.createSamlObject(SubjectLocality.DEFAULT_ELEMENT_NAME);
+		subjectLocality.setAddress(address);
+		return subjectLocality;
+	}
+
+	/**
+	 * Method that returns the current time.
+	 * 
+	 * @return the current time
+	 */
+	public static DateTime getCurrentTime() {
+		return new DateTime();
+	}
+
+	/**
+	 * Instantiates a new SAML engine utilities.
+	 */
+	private SAMLEngineUtils() {
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java
new file mode 100644
index 000000000..6bdf7b320
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/STORKSAMLEngine.java
@@ -0,0 +1,3744 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.commons.lang.StringUtils;
+import org.bouncycastle.jce.X509Principal;
+import org.joda.time.DateTime;
+import org.opensaml.Configuration;
+import org.opensaml.common.SAMLVersion;
+import org.opensaml.common.SignableSAMLObject;
+import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml2.common.Extensions;
+import org.opensaml.saml2.core.Assertion;
+import org.opensaml.saml2.core.Attribute;
+import org.opensaml.saml2.core.AttributeStatement;
+import org.opensaml.saml2.core.AttributeValue;
+import org.opensaml.saml2.core.Audience;
+import org.opensaml.saml2.core.AudienceRestriction;
+import org.opensaml.saml2.core.AuthnContext;
+import org.opensaml.saml2.core.AuthnContextDecl;
+import org.opensaml.saml2.core.AuthnRequest;
+import org.opensaml.saml2.core.AuthnStatement;
+import org.opensaml.saml2.core.Conditions;
+import org.opensaml.saml2.core.Issuer;
+import org.opensaml.saml2.core.LogoutRequest;
+import org.opensaml.saml2.core.LogoutResponse;
+import org.opensaml.saml2.core.NameID;
+import org.opensaml.saml2.core.OneTimeUse;
+import org.opensaml.saml2.core.Response;
+import org.opensaml.saml2.core.Status;
+import org.opensaml.saml2.core.StatusCode;
+import org.opensaml.saml2.core.StatusMessage;
+import org.opensaml.saml2.core.Subject;
+import org.opensaml.saml2.core.SubjectConfirmation;
+import org.opensaml.saml2.core.SubjectConfirmationData;
+import org.opensaml.saml2.core.SubjectLocality;
+import org.opensaml.saml2.core.impl.SubjectConfirmationBuilder;
+import org.opensaml.xml.Namespace;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.schema.XSAny;
+import org.opensaml.xml.schema.impl.XSAnyBuilder;
+import org.opensaml.xml.schema.impl.XSAnyImpl;
+import org.opensaml.xml.schema.impl.XSAnyMarshaller;
+import org.opensaml.xml.schema.impl.XSAnyUnmarshaller;
+import org.opensaml.xml.schema.impl.XSStringImpl;
+import org.opensaml.xml.signature.KeyInfo;
+import org.opensaml.xml.util.Base64;
+import org.opensaml.xml.validation.ValidationException;
+import org.opensaml.xml.validation.Validator;
+import org.opensaml.xml.validation.ValidatorSuite;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
+import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+import eu.stork.peps.auth.commons.STORKAuthnResponse;
+import eu.stork.peps.auth.commons.STORKLogoutRequest;
+import eu.stork.peps.auth.commons.STORKLogoutResponse;
+import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
+import eu.stork.peps.auth.engine.core.CitizenCountryCode;
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+import eu.stork.peps.auth.engine.core.CustomRequestAbstractType;
+import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
+import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
+import eu.stork.peps.auth.engine.core.EIDSectorShare;
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+import eu.stork.peps.auth.engine.core.RequestedAttributes;
+import eu.stork.peps.auth.engine.core.SAMLCore;
+import eu.stork.peps.auth.engine.core.SPApplication;
+import eu.stork.peps.auth.engine.core.SPCountry;
+import eu.stork.peps.auth.engine.core.SPID;
+import eu.stork.peps.auth.engine.core.SPInformation;
+import eu.stork.peps.auth.engine.core.SPInstitution;
+import eu.stork.peps.auth.engine.core.SPSector;
+import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
+import eu.stork.peps.auth.engine.core.impl.AuthenticationAttributesBuilder;
+import eu.stork.peps.auth.engine.core.impl.AuthenticationAttributesMarshaller;
+import eu.stork.peps.auth.engine.core.impl.AuthenticationAttributesUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.CitizenCountryCodeBuilder;
+import eu.stork.peps.auth.engine.core.impl.CitizenCountryCodeMarshaller;
+import eu.stork.peps.auth.engine.core.impl.CitizenCountryCodeUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.EIDCrossBorderShareBuilder;
+import eu.stork.peps.auth.engine.core.impl.EIDCrossBorderShareMarshaller;
+import eu.stork.peps.auth.engine.core.impl.EIDCrossBorderShareUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.EIDCrossSectorShareBuilder;
+import eu.stork.peps.auth.engine.core.impl.EIDCrossSectorShareMarshaller;
+import eu.stork.peps.auth.engine.core.impl.EIDCrossSectorShareUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.EIDSectorShareBuilder;
+import eu.stork.peps.auth.engine.core.impl.EIDSectorShareMarshaller;
+import eu.stork.peps.auth.engine.core.impl.EIDSectorShareUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.QAAAttributeBuilder;
+import eu.stork.peps.auth.engine.core.impl.QAAAttributeMarshaller;
+import eu.stork.peps.auth.engine.core.impl.QAAAttributeUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.RequestedAttributeBuilder;
+import eu.stork.peps.auth.engine.core.impl.RequestedAttributeMarshaller;
+import eu.stork.peps.auth.engine.core.impl.RequestedAttributeUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.RequestedAttributesBuilder;
+import eu.stork.peps.auth.engine.core.impl.RequestedAttributesMarshaller;
+import eu.stork.peps.auth.engine.core.impl.RequestedAttributesUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPApplicationBuilder;
+import eu.stork.peps.auth.engine.core.impl.SPApplicationMarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPApplicationUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPCountryBuilder;
+import eu.stork.peps.auth.engine.core.impl.SPCountryMarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPCountryUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPIDBuilder;
+import eu.stork.peps.auth.engine.core.impl.SPIDMarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPIDUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPInformationBuilder;
+import eu.stork.peps.auth.engine.core.impl.SPInformationMarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPInformationUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPInstitutionBuilder;
+import eu.stork.peps.auth.engine.core.impl.SPInstitutionMarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPInstitutionUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPSectorBuilder;
+import eu.stork.peps.auth.engine.core.impl.SPSectorMarshaller;
+import eu.stork.peps.auth.engine.core.impl.SPSectorUnmarshaller;
+import eu.stork.peps.auth.engine.core.impl.VIDPAuthenticationAttributesBuilder;
+import eu.stork.peps.auth.engine.core.impl.VIDPAuthenticationAttributesMarshaller;
+import eu.stork.peps.auth.engine.core.impl.VIDPAuthenticationAttributesUnmarshaller;
+import eu.stork.peps.auth.engine.core.validator.CustomAttributeQueryValidator;
+import eu.stork.peps.auth.engine.core.validator.ExtensionsSchemaValidator;
+import eu.stork.peps.auth.engine.core.validator.MultipleAssertionResponseValidator;
+import eu.stork.peps.auth.engine.core.validator.QAAAttributeSchemaValidator;
+import eu.stork.peps.exceptions.SAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
+
+/**
+ * Class that wraps the operations over SAML tokens, both generation and
+ * validation of SAML STORK requests and SAML STORK responses. Complaint with
+ * "OASIS Secure Assertion Markup Language (SAML) 2.0, May 2005", but taking
+ * into account STORK specific requirements.
+ * 
+ * @author fjquevedo
+ * @author iinigo
+ */
+public final class STORKSAMLEngine extends SAMLEngine {
+
+	/** The Constant LOG. */
+	private static final Logger LOG = LoggerFactory
+	.getLogger(STORKSAMLEngine.class.getName());
+
+    private static final String ATTRIBUTE_EMPTY_LITERAL = "Attribute name is null or empty.";
+	/**
+	 * Gets the single instance of STORKSAMLEngine.
+	 * 
+	 * @param nameInstance the name instance
+	 * 
+	 * @return single instance of STORKSAMLEngine
+	 */
+	public static synchronized STORKSAMLEngine getInstance(
+			final String nameInstance) {
+		STORKSAMLEngine engine = null;
+		LOG.info("Get instance: " + nameInstance);
+		try {
+			engine = new STORKSAMLEngine(nameInstance.trim());
+		} catch (Exception e) {
+			LOG.error("Error getting instance: " + nameInstance);
+            e.printStackTrace();
+		}
+		return engine;
+	}
+
+	/**
+	 * Instantiate a new STORKSAML engine.
+	 * 
+	 * @param nameInstance the name instance
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private STORKSAMLEngine(final String nameInstance)
+	throws STORKSAMLEngineException {
+		// Initialization OpenSAML.
+		super(nameInstance);
+		LOG.info("Register STORK objects provider.");
+		Configuration.registerObjectProvider(QAAAttribute.DEF_ELEMENT_NAME,
+				new QAAAttributeBuilder(), new QAAAttributeMarshaller(),
+				new QAAAttributeUnmarshaller());
+
+		Configuration.registerObjectProvider(EIDSectorShare.DEF_ELEMENT_NAME,
+				new EIDSectorShareBuilder(), new EIDSectorShareMarshaller(),
+				new EIDSectorShareUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				EIDCrossSectorShare.DEF_ELEMENT_NAME,
+				new EIDCrossSectorShareBuilder(),
+				new EIDCrossSectorShareMarshaller(),
+				new EIDCrossSectorShareUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				EIDCrossBorderShare.DEF_ELEMENT_NAME,
+				new EIDCrossBorderShareBuilder(),
+				new EIDCrossBorderShareMarshaller(),
+				new EIDCrossBorderShareUnmarshaller());
+
+		Configuration.registerObjectProvider(SPSector.DEF_ELEMENT_NAME,
+				new SPSectorBuilder(), new SPSectorMarshaller(),
+				new SPSectorUnmarshaller());
+
+		Configuration.registerObjectProvider(SPInstitution.DEF_ELEMENT_NAME,
+				new SPInstitutionBuilder(), new SPInstitutionMarshaller(),
+				new SPInstitutionUnmarshaller());
+
+		Configuration.registerObjectProvider(SPApplication.DEF_ELEMENT_NAME,
+				new SPApplicationBuilder(), new SPApplicationMarshaller(),
+				new SPApplicationUnmarshaller());
+
+		Configuration.registerObjectProvider(SPCountry.DEF_ELEMENT_NAME,
+				new SPCountryBuilder(), new SPCountryMarshaller(),
+				new SPCountryUnmarshaller());
+
+		Configuration.registerObjectProvider(XSAny.TYPE_NAME,
+				new XSAnyBuilder(), new XSAnyMarshaller(),
+				new XSAnyUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				RequestedAttribute.DEF_ELEMENT_NAME,
+				new RequestedAttributeBuilder(),
+				new RequestedAttributeMarshaller(),
+				new RequestedAttributeUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				RequestedAttributes.DEF_ELEMENT_NAME,
+				new RequestedAttributesBuilder(),
+				new RequestedAttributesMarshaller(),
+				new RequestedAttributesUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				AuthenticationAttributes.DEF_ELEMENT_NAME,
+				new AuthenticationAttributesBuilder(),
+				new AuthenticationAttributesMarshaller(),
+				new AuthenticationAttributesUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				VIDPAuthenticationAttributes.DEF_ELEMENT_NAME,
+				new VIDPAuthenticationAttributesBuilder(),
+				new VIDPAuthenticationAttributesMarshaller(),
+				new VIDPAuthenticationAttributesUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				CitizenCountryCode.DEF_ELEMENT_NAME,
+				new CitizenCountryCodeBuilder(),
+				new CitizenCountryCodeMarshaller(),
+				new CitizenCountryCodeUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				SPID.DEF_ELEMENT_NAME,
+				new SPIDBuilder(),
+				new SPIDMarshaller(),
+				new SPIDUnmarshaller());
+
+		Configuration.registerObjectProvider(
+				SPInformation.DEF_ELEMENT_NAME,
+				new SPInformationBuilder(),
+				new SPInformationMarshaller(),
+				new SPInformationUnmarshaller());
+
+		LOG.info("Register STORK object validators.");
+		final ValidatorSuite validatorSuite = new ValidatorSuite(
+				QAAAttribute.DEF_LOCAL_NAME);
+
+		validatorSuite.registerValidator(QAAAttribute.DEF_ELEMENT_NAME,
+				new QAAAttributeSchemaValidator());
+		final Extensions extensions = SAMLEngineUtils.generateExtension();
+		validatorSuite.registerValidator(extensions.getElementQName(),
+				new ExtensionsSchemaValidator());
+
+		Configuration.registerValidatorSuite(
+				"stork:QualityAuthenticationAssuranceLevel", validatorSuite);
+
+	}
+
+	/**
+	 * Generate authentication response base.
+	 * 
+	 * @param status the status
+	 * @param assertConsumerURL the assert consumer URL.
+	 * @param inResponseTo the in response to
+	 * 
+	 * @return the response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private Response genAuthnRespBase(final Status status,
+			final String assertConsumerURL, final String inResponseTo)
+	throws STORKSAMLEngineException {
+		LOG.debug("Generate Authentication Response base.");
+		final Response response = SAMLEngineUtils.generateResponse(
+				SAMLVersion.VERSION_20, SAMLEngineUtils.generateNCName(),
+				SAMLEngineUtils.getCurrentTime(), status);
+
+		// Set name Spaces
+		this.setNameSpaces(response);
+
+		// Mandatory STORK
+		LOG.debug("Generate Issuer");
+		final Issuer issuer = SAMLEngineUtils.generateIssuer();
+		issuer.setValue(super.getSamlCoreProperties().getResponder());
+
+		// Format Entity Optional STORK
+		issuer.setFormat(super.getSamlCoreProperties().getFormatEntity());
+
+		response.setIssuer(issuer);
+
+		// destination Mandatory Stork
+		response.setDestination(assertConsumerURL.trim());
+
+		// inResponseTo Mandatory Stork
+		response.setInResponseTo(inResponseTo.trim());
+
+		// Optional STORK
+		response.setConsent(super.getSamlCoreProperties()
+				.getConsentAuthnResponse());
+
+		return response;
+	}
+	
+	/**
+	 * Generate attribute query response base.
+	 * 
+	 * @param status the status
+	 * @param destinationURL the assert consumer URL.
+	 * @param inResponseTo the in response to
+	 * 
+	 * @return the response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private Response genAttrQueryRespBase(final Status status,
+			final String destinationURL, final String inResponseTo)
+	throws STORKSAMLEngineException {
+		LOG.debug("Generate Attribute query Response base.");
+		final Response response = SAMLEngineUtils.generateResponse(
+				SAMLVersion.VERSION_20, SAMLEngineUtils.generateNCName(),
+				SAMLEngineUtils.getCurrentTime(), status);
+
+		// Set name Spaces
+		this.setNameSpaces(response);
+
+		// Mandatory STORK
+		LOG.debug("Generate Issuer");
+		final Issuer issuer = SAMLEngineUtils.generateIssuer();
+		issuer.setValue(super.getSamlCoreProperties().getResponder());
+
+		// Format Entity Optional STORK
+		issuer.setFormat(super.getSamlCoreProperties().getFormatEntity());
+
+		response.setIssuer(issuer);
+
+		// destination Mandatory Stork
+		response.setDestination(destinationURL.trim());
+
+		// inResponseTo Mandatory Stork
+		response.setInResponseTo(inResponseTo.trim());
+
+		// Optional STORK
+		response.setConsent(super.getSamlCoreProperties()
+				.getConsentAuthnResponse());
+
+		return response;
+	}
+
+	/**
+	 * Generate assertion.
+	 * 
+	 * @param ipAddress the IP address.
+	 * @param assertConsumerURL the assert consumer URL.
+	 * @param inResponseTo the in response to
+	 * @param issuer the issuer
+	 * @param notOnOrAfter the not on or after
+	 * 
+	 * @return the assertion
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private Assertion generateAssertion(final String ipAddress,
+			final String assertConsumerURL, final String inResponseTo,
+			final String issuer, final DateTime notOnOrAfter)
+	throws STORKSAMLEngineException {
+		LOG.info("Generate Assertion.");
+
+		// Mandatory STORK
+		LOG.debug("Generate Issuer to Assertion");
+		final Issuer issuerAssertion = SAMLEngineUtils.generateIssuer();
+		issuerAssertion.setValue(super.getSamlCoreProperties().getResponder());
+
+		// Format Entity Optional STORK
+		issuerAssertion.setFormat(super.getSamlCoreProperties()
+				.getFormatEntity());
+
+		final Assertion assertion = SAMLEngineUtils.generateAssertion(
+				SAMLVersion.VERSION_20, SAMLEngineUtils.generateNCName(),
+				SAMLEngineUtils.getCurrentTime(), issuerAssertion);
+
+		final Subject subject = SAMLEngineUtils.generateSubject();
+
+		// Mandatory STORK verified
+		// String format = NameID.UNSPECIFIED
+		// specification: 'SAML:2.0' exist
+		// opensaml: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
+		// opensaml  "urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified"
+		final String format = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
+
+		final String nameQualifier = "";
+
+		LOG.debug("Generate NameID");
+		final NameID nameId = SAMLEngineUtils.generateNameID(super
+				.getSamlCoreProperties().getResponder(), format, nameQualifier);
+		nameId.setValue(format);
+		subject.setNameID(nameId);
+
+		// Mandatory if urn:oasis:names:tc:SAML:2.0:cm:bearer.
+		// Optional in other case.
+		LOG.debug("Generate SubjectConfirmationData.");
+		final SubjectConfirmationData dataBearer = SAMLEngineUtils
+		.generateSubjectConfirmationData(SAMLEngineUtils
+				.getCurrentTime(), assertConsumerURL, inResponseTo);
+
+		// Mandatory if urn:oasis:names:tc:SAML:2.0:cm:bearer.
+		// Optional in other case.
+		LOG.debug("Generate SubjectConfirmation");
+		final SubjectConfirmation subjectConf = SAMLEngineUtils
+		.generateSubjectConfirmation(SubjectConfirmation.METHOD_BEARER,
+				dataBearer);
+
+		final ArrayList<SubjectConfirmation> listSubjectConf = new ArrayList<SubjectConfirmation>();
+		listSubjectConf.add(subjectConf);
+
+		for (final Iterator<SubjectConfirmation> iter = listSubjectConf
+				.iterator(); iter.hasNext();) {
+			final SubjectConfirmation element = iter.next();
+
+			if (SubjectConfirmation.METHOD_BEARER.equals(element.getMethod())) {
+				// ipAddress Mandatory if method is Bearer.
+
+				if (StringUtils.isBlank(ipAddress)) {
+					throw new STORKSAMLEngineException(
+							"ipAddress is null or empty");
+				}
+				element.getSubjectConfirmationData().setAddress(
+						ipAddress.trim());
+			}
+
+			element.getSubjectConfirmationData()
+			.setRecipient(assertConsumerURL);
+			element.getSubjectConfirmationData().setNotOnOrAfter(notOnOrAfter);
+		}
+
+		// The SAML 2.0 specification allows multiple SubjectConfirmations
+		subject.getSubjectConfirmations().addAll(listSubjectConf);
+
+		// Mandatory Stork
+		assertion.setSubject(subject);
+
+		// Conditions that MUST be evaluated when assessing the validity of
+		// and/or when using the assertion.
+		final Conditions conditions = this.generateConditions(SAMLEngineUtils
+				.getCurrentTime(), notOnOrAfter, issuer);
+
+		assertion.setConditions(conditions);
+
+		LOG.debug("Generate stork Authentication Statement.");
+		final AuthnStatement storkAuthnStat = this
+		.generateStorkAuthStatement(ipAddress);
+		assertion.getAuthnStatements().add(storkAuthnStat);
+
+		return assertion;
+	}
+
+    private String getAttributeName(final PersonalAttribute attribute) throws STORKSAMLEngineException {
+        if (StringUtils.isBlank(attribute.getName())) {
+            LOG.error(ATTRIBUTE_EMPTY_LITERAL);
+            throw new STORKSAMLEngineException(ATTRIBUTE_EMPTY_LITERAL);
+        }
+
+        final String attributeName = super.getSamlCoreProperties()
+                .getProperty(attribute.getName());
+
+        if (StringUtils.isBlank(attributeName)) {
+            LOG.error("Attribute name: {} it is not known.", attribute
+                    .getName());
+            throw new STORKSAMLEngineException("Attribute name: "
+                    + attribute.getName() + " it is not known.");
+        }
+        return attributeName;
+    }
+	/**
+	 * Generate attribute statement.
+	 * 
+	 * @param personalAttrList the personal attribute list
+	 * @param isHashing the is hashing
+	 * 
+	 * @return the attribute statement
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 * @throws IOException
+	 */
+	private AttributeStatement generateAttributeStatement(
+			final IPersonalAttributeList personalAttrList,
+			final boolean isHashing) throws STORKSAMLEngineException {
+		LOG.debug("Generate attribute statement");
+
+		final AttributeStatement attrStatement = (AttributeStatement) SAMLEngineUtils
+		.createSamlObject(AttributeStatement.DEFAULT_ELEMENT_NAME);
+
+		for (PersonalAttribute attribute : personalAttrList) {
+
+            String attributeName = getAttributeName(attribute);
+
+			// Verification that only one value it's permitted, simple or
+			// complex, not both.
+
+			final boolean simpleNull = (attribute.getValue() == null);
+			final boolean simpleEmpty = (simpleNull || (!simpleNull && attribute
+					.getValue().isEmpty()));
+
+			final boolean complexNull = (attribute.getComplexValue() == null);
+			final boolean complexEmpty = (complexNull || (!complexNull && attribute
+					.getComplexValue().isEmpty()));
+
+			if ((!simpleEmpty && !complexEmpty)) {
+				throw new STORKSAMLEngineException(
+						"Attribute name: "
+						+ attribute.getName()
+						+ " must be contain one value, simple or complex value.");
+			} else {
+
+				if (!simpleEmpty) {
+					attrStatement.getAttributes().add(
+							this.generateAttrSimple(attributeName, attribute
+									.getStatus(), attribute.getValue(),
+									isHashing));
+				} else if (!complexEmpty) {
+					attrStatement.getAttributes().add(
+							SAMLEngineUtils.generateAttrComplex(attributeName,
+									attribute.getStatus(), attribute
+									.getComplexValue(), isHashing));
+				} else if (!simpleNull) {
+					attrStatement.getAttributes().add(
+							this.generateAttrSimple(attributeName, attribute
+									.getStatus(), new ArrayList<String>(),
+									isHashing));
+				} else {
+					// Add attribute complex.
+					attrStatement.getAttributes().add(
+							SAMLEngineUtils.generateAttrComplex(attributeName,
+									attribute.getStatus(),
+									new HashMap<String, String>(), isHashing));
+				}
+			}
+		}
+		return attrStatement;
+	}
+    private XSAny createAttributeValueForSignedDoc(final String value, final boolean isHashing) throws STORKSAMLEngineException {
+        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
+        domFactory.setNamespaceAware(true);
+        Document document = null;
+        DocumentBuilder builder;
+
+        // Parse the signedDoc value into an XML DOM Document
+        try {
+            builder = domFactory.newDocumentBuilder();
+            InputStream is;
+            is = new ByteArrayInputStream(value.trim().getBytes("UTF-8"));
+            document = builder.parse(is);
+            is.close();
+        } catch (SAXException e1) {
+            LOG.error("SAX Error while parsing signModule attribute", e1);
+            throw new STORKSAMLEngineRuntimeException(e1);
+        } catch (ParserConfigurationException e2) {
+            LOG.error("Parser Configuration Error while parsing signModule attribute", e2);
+            throw new STORKSAMLEngineRuntimeException(e2);
+        } catch (UnsupportedEncodingException e3) {
+            LOG.error("Unsupported encoding Error while parsing signModule attribute", e3);
+            throw new STORKSAMLEngineRuntimeException(e3);
+        } catch (IOException e4) {
+            LOG.error("IO Error while parsing signModule attribute", e4);
+            throw new STORKSAMLEngineRuntimeException(e4);
+        }
+
+        // Create the attribute statement
+        final XSAny xmlValue = (XSAny) SAMLEngineUtils
+                .createSamlObject(
+                        AttributeValue.DEFAULT_ELEMENT_NAME,
+                        XSAny.TYPE_NAME);
+
+        //Set the signedDoc XML content to this element
+        xmlValue.setDOM(document.getDocumentElement());
+
+        // Create the attribute statement
+        final XSAny attrValue = (XSAny) SAMLEngineUtils
+                .createSamlObject(
+                        AttributeValue.DEFAULT_ELEMENT_NAME,
+                        XSAny.TYPE_NAME);
+
+        //Add previous signedDocXML to the AttributeValue Element
+
+        // if it's necessary encode the information.
+        if (!isHashing) {
+            attrValue.getUnknownXMLObjects().add(xmlValue);
+        }
+        return attrValue;
+    }
+
+    private XSAny createAttributeValueForNonSignedDoc(final String value, final boolean isHashing) throws STORKSAMLEngineException {
+        // Create the attribute statement
+        final XSAny attrValue = (XSAny) SAMLEngineUtils
+                .createSamlObject(
+                        AttributeValue.DEFAULT_ELEMENT_NAME,
+                        XSAny.TYPE_NAME);
+        // if it's necessary encode the information.
+        if (isHashing) {
+            attrValue.setTextContent(SAMLEngineUtils.encode(value, SAMLEngineUtils.SHA_512));
+        } else {
+            attrValue.setTextContent(value);
+        }
+        return attrValue;
+    }
+
+	/**
+	 * Generate attribute from a list of values.
+	 * 
+	 * @param name the name of the attribute.
+	 * @param values the value of the attribute.
+	 * @param isHashing the is hashing with "SHA-512" algorithm.
+	 * @param status the status of the parameter: "Available", "NotAvailable" or
+	 *            "Withheld".
+	 * 
+	 * @return the attribute
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+    private Attribute generateAttrSimple(final String name,
+                                         final String status, final List<String> values,
+                                         final boolean isHashing) throws STORKSAMLEngineException {
+        LOG.debug("Generate attribute simple: " + name);
+        final Attribute attribute = (Attribute) SAMLEngineUtils
+                .createSamlObject(Attribute.DEFAULT_ELEMENT_NAME);
+
+        attribute.setName(name);
+        attribute.setNameFormat(Attribute.URI_REFERENCE);
+
+        attribute.getUnknownAttributes().put(
+                new QName(SAMLCore.STORK10_NS.getValue(), "AttributeStatus",
+                        SAMLCore.STORK10_PREFIX.getValue()), status);
+
+        if (values != null) {
+            LOG.debug("Add attribute values.");
+            for (int i = 0; i < values.size(); i++) {
+                final String value = values.get(i);
+                if (StringUtils.isNotBlank(value)) {
+                    XSAny attrValue = null;
+                    if (!name.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
+                        // Create the attribute statement
+                        attrValue = createAttributeValueForNonSignedDoc(value, isHashing);
+
+                    } else {
+                        attrValue = createAttributeValueForSignedDoc(value, isHashing);
+                        attribute.getAttributeValues().add(attrValue);
+                    }
+                    attribute.getAttributeValues().add(attrValue);
+                }
+            }
+        }
+        return attribute;
+    }
+
+	/**
+	 * Generate conditions that MUST be evaluated when assessing the validity of
+	 * and/or when using the assertion.
+	 * 
+	 * @param notBefore the not before
+	 * @param notOnOrAfter the not on or after
+	 * @param audienceURI the audience URI.
+	 * 
+	 * @return the conditions
+	 */
+	private Conditions generateConditions(final DateTime notBefore,
+			final DateTime notOnOrAfter, final String audienceURI) {
+		LOG.debug("Generate conditions.");
+		final Conditions conditions = (Conditions) SAMLEngineUtils
+		.createSamlObject(Conditions.DEFAULT_ELEMENT_NAME);
+		conditions.setNotBefore(notBefore);
+		conditions.setNotOnOrAfter(notOnOrAfter);
+
+		final AudienceRestriction restrictions = (AudienceRestriction) SAMLEngineUtils
+		.createSamlObject(AudienceRestriction.DEFAULT_ELEMENT_NAME);
+
+		final Audience audience = (Audience) SAMLEngineUtils
+		.createSamlObject(Audience.DEFAULT_ELEMENT_NAME);
+		audience.setAudienceURI(audienceURI);
+
+		restrictions.getAudiences().add(audience);
+		conditions.getAudienceRestrictions().add(restrictions);
+
+		if (super.getSamlCoreProperties().isOneTimeUse()) {
+			final OneTimeUse oneTimeUse = (OneTimeUse) SAMLEngineUtils
+			.createSamlObject(OneTimeUse.DEFAULT_ELEMENT_NAME);
+			conditions.getConditions().add(oneTimeUse);
+		}
+		return conditions;
+	}
+
+	/**
+	 * Generate personal attribute list.
+	 * 
+	 * @param assertion the assertion
+	 * 
+	 * @return the personal attribute list
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private IPersonalAttributeList generatePersonalAttributeList(
+			final Assertion assertion) throws STORKSAMLEngineException {
+		LOG.debug("Generate personal attribute list from XMLObject.");
+		final List<XMLObject> listExtensions = assertion.getOrderedChildren();
+
+		boolean find = false;
+		AttributeStatement requestedAttr = null;
+
+		// Search the attribute statement.
+		for (int i = 0; i < listExtensions.size() && !find; i++) {
+			final XMLObject xml = listExtensions.get(i);
+			if (xml instanceof AttributeStatement) {
+				requestedAttr = (AttributeStatement) xml;
+				find = true;
+			}
+		}
+
+		if (!find) {
+			LOG.error("Error: AttributeStatement it's not present.");
+			throw new STORKSAMLEngineException(
+			"AttributeStatement it's not present.");
+		}
+
+		final List<Attribute> reqAttrs = requestedAttr.getAttributes();
+
+		final IPersonalAttributeList personalAttrList = new PersonalAttributeList();
+		String attributeName;
+
+		// Process the attributes.
+		for (int nextAttribute = 0; nextAttribute < reqAttrs.size(); nextAttribute++) {
+			final Attribute attribute = reqAttrs.get(nextAttribute);
+
+			final PersonalAttribute personalAttribute = new PersonalAttribute();
+
+			attributeName = attribute.getName();
+			personalAttribute.setName(attributeName.substring(attributeName
+					.lastIndexOf('/') + 1));
+
+			personalAttribute.setStatus(attribute.getUnknownAttributes().get(
+					new QName(SAMLCore.STORK10_NS.getValue(),
+							"AttributeStatus", SAMLCore.STORK10_PREFIX
+							.getValue())));
+
+			final ArrayList<String> simpleValues = new ArrayList<String>();
+			final HashMap<String, String> multiValues = new HashMap<String, String>();
+
+			final List<XMLObject> values = attribute.getOrderedChildren();
+			
+						
+			// Process the values.
+			for (int nextValue = 0; nextValue < values.size(); nextValue++) {
+
+				final XMLObject xmlObject = values.get(nextValue);
+
+				if (xmlObject instanceof XSStringImpl) {
+					
+					simpleValues.add(((XSStringImpl) xmlObject).getValue());
+
+				} else if (xmlObject instanceof XSAnyImpl) {
+
+					if (attributeName.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
+
+						final XSAnyImpl xmlString = (XSAnyImpl) values
+								.get(nextValue);
+
+						TransformerFactory transFactory = TransformerFactory
+								.newInstance();
+						Transformer transformer = null;
+						try {
+							transformer = transFactory.newTransformer();
+							transformer.setOutputProperty(
+									OutputKeys.OMIT_XML_DECLARATION, "yes");
+						} catch (TransformerConfigurationException e) {
+                            LOG.error("Error transformer configuration exception", e);
+						}
+						StringWriter buffer = new StringWriter();
+						try {
+                            if (xmlString != null && xmlString.getUnknownXMLObjects() != null && xmlString.getUnknownXMLObjects().size() > 0 ){
+                                transformer.transform(new DOMSource(xmlString
+                                        .getUnknownXMLObjects().get(0).getDOM()),
+                                        new StreamResult(buffer));
+                            }
+						} catch (TransformerException e) {
+                            LOG.error("Error transformer exception", e);
+						}
+						String str = buffer.toString();
+
+						simpleValues.add(str);
+
+					} else if (isComplex(xmlObject))
+					{
+						LOG.info(attributeName + " found");
+						// Process complex value.
+						final XSAnyImpl complexValue = (XSAnyImpl) xmlObject;
+
+						for (int nextComplexValue = 0; nextComplexValue < complexValue
+								.getUnknownXMLObjects().size(); nextComplexValue++) {
+
+							final XSAnyImpl simple = (XSAnyImpl) complexValue
+									.getUnknownXMLObjects().get(
+											nextComplexValue);
+
+							multiValues.put(simple.getElementQName()
+									.getLocalPart(), simple.getTextContent());
+						}
+
+					} 					
+					else {
+						// Process simple value.
+						simpleValues.add(((XSAnyImpl) xmlObject)
+								.getTextContent());
+					}
+
+				} else {
+					LOG.error("Error: attribute value it's unknown.");
+					throw new STORKSAMLEngineException(
+							"Attribute value it's unknown.");
+				}
+			}
+
+			personalAttribute.setValue(simpleValues);
+			personalAttribute.setComplexValue(multiValues);
+			personalAttrList.add(personalAttribute);
+		}
+
+		return personalAttrList;
+	}
+
+	/**
+	 * Generate stork authentication request.
+	 * 
+	 * @param request the request that contain all parameters for generate an
+	 *            authentication request.
+	 * 
+	 * @return the STORK authentication request that has been processed.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAuthnRequest generateSTORKAuthnRequest(
+			final STORKAuthnRequest request) throws STORKSAMLEngineException {
+		LOG.info("Generate SAMLAuthnRequest.");
+
+		// Validate Parameters mandatories
+		validateParamAuthnReq(request);
+
+		final AuthnRequest authnRequestAux = SAMLEngineUtils
+		.generateSAMLAuthnRequest(SAMLEngineUtils.generateNCName(),
+				SAMLVersion.VERSION_20, SAMLEngineUtils
+				.getCurrentTime());
+
+		// Set name spaces.
+		setNameSpaces(authnRequestAux);
+
+		// Add parameter Mandatory STORK
+		authnRequestAux.setForceAuthn(Boolean.TRUE);
+
+		// Add parameter Mandatory STORK
+		authnRequestAux.setIsPassive(Boolean.FALSE);
+
+		authnRequestAux.setAssertionConsumerServiceURL(request
+				.getAssertionConsumerServiceURL());
+
+		authnRequestAux.setProviderName(request.getProviderName());
+
+		// Add protocol binding
+		authnRequestAux.setProtocolBinding(super.getSamlCoreProperties()
+				.getProtocolBinding());
+
+		// Add parameter optional STORK
+		// Destination is mandatory if the destination is a C-PEPS
+		// The application must to know if the destination is a C-PEPS.
+		if (StringUtils.isNotBlank(request.getDestination())) {
+			authnRequestAux.setDestination(request.getDestination());
+		}
+
+		// Consent is optional. Set from SAMLEngine.xml - consent.
+		authnRequestAux.setConsent(super.getSamlCoreProperties()
+				.getConsentAuthnRequest());
+
+		final Issuer issuer = SAMLEngineUtils.generateIssuer();
+		
+		if(request.getIssuer()!=null){
+			issuer.setValue(request.getIssuer());
+        } else {
+			issuer.setValue(super.getSamlCoreProperties().getRequester());
+        }
+
+		// Optional STORK
+		final String formatEntity = super.getSamlCoreProperties()
+		.getFormatEntity();
+		if (StringUtils.isNotBlank(formatEntity)) {
+			issuer.setFormat(formatEntity);
+		}
+
+		authnRequestAux.setIssuer(issuer);
+		
+		// Generate stork extensions.
+		final Extensions storkExtensions = this
+		.generateSTORKExtensions(request);
+		// add the extensions to the SAMLAuthnRequest
+		authnRequestAux.setExtensions(storkExtensions);
+
+		// the result contains an authentication request token (byte[]),
+		// identifier of the token, and all parameters from the request.
+		final STORKAuthnRequest authRequest = processExtensions(authnRequestAux
+				.getExtensions());
+
+		try {
+			authRequest.setTokenSaml(super.signAndMarshall(authnRequestAux));
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		authRequest.setSamlId(authnRequestAux.getID());
+		authRequest.setDestination(authnRequestAux.getDestination());
+		authRequest.setAssertionConsumerServiceURL(authnRequestAux
+				.getAssertionConsumerServiceURL());
+
+		authRequest.setProviderName(authnRequestAux.getProviderName());
+		authRequest.setIssuer(authnRequestAux.getIssuer().getValue());
+
+		return authRequest;
+	}
+
+	/**
+	 * Generate stork authentication response.
+	 * 
+	 * @param request the request
+	 * @param responseAuthReq the response authentication request
+	 * @param ipAddress the IP address
+	 * @param isHashing the is hashing
+	 * 
+	 * @return the sTORK authentication response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAuthnResponse generateSTORKAuthnResponse(
+			final STORKAuthnRequest request,
+			final STORKAuthnResponse responseAuthReq, final String ipAddress,
+			final boolean isHashing) throws STORKSAMLEngineException {
+		LOG.info("generateSTORKAuthnResponse");
+
+		// Validate parameters
+		validateParamResponse(request, responseAuthReq);
+
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode");
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(StatusCode.SUCCESS_URI);
+
+		LOG.debug("Generate Status");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		LOG.debug("Generate StatusMessage");
+		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+		.generateStatusMessage(StatusCode.SUCCESS_URI);
+
+		status.setStatusMessage(statusMessage);
+
+		LOG.debug("Generate Response");
+
+		// RESPONSE
+		final Response response = genAuthnRespBase(status, request
+				.getAssertionConsumerServiceURL(), request.getSamlId());
+
+		DateTime notOnOrAfter = new DateTime();
+
+		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
+				.getTimeNotOnOrAfter());
+
+		final Assertion assertion = this.generateAssertion(ipAddress, request
+				.getAssertionConsumerServiceURL(), request.getSamlId(), request
+				.getIssuer(), notOnOrAfter);
+
+		final AttributeStatement attrStatement = this
+		.generateAttributeStatement(responseAuthReq
+				.getPersonalAttributeList(), isHashing);
+
+		assertion.getAttributeStatements().add(attrStatement);
+
+		// Add assertions
+		response.getAssertions().add(assertion);
+
+		final STORKAuthnResponse authresponse = new STORKAuthnResponse();
+
+		try {
+			authresponse.setTokenSaml(super.signAndMarshall(response));
+			authresponse.setSamlId(response.getID());
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+		return authresponse;
+	}
+	
+	/**
+	 * Generate stork authentication response.
+	 * 
+	 * @param request the request
+	 * @param responseAuthReq the response authentication request
+	 * @param ipAddress the IP address
+	 * @param isHashing the is hashing
+	 * 
+	 * @return the sTORK authentication response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAuthnResponse generateSTORKAuthnResponseAfterQuery(
+			final STORKAuthnRequest request,
+			final STORKAuthnResponse responseAuthReq, final String ipAddress,
+			final boolean isHashing, List<STORKAttrQueryResponse> res) throws STORKSAMLEngineException {
+		LOG.info("generateSTORKAuthnResponse");
+
+		// Validate parameters
+		validateParamResponse(request, responseAuthReq);
+
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode");
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(StatusCode.SUCCESS_URI);
+
+		LOG.debug("Generate Status");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		LOG.debug("Generate StatusMessage");
+		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+		.generateStatusMessage(StatusCode.SUCCESS_URI);
+
+		status.setStatusMessage(statusMessage);
+
+		LOG.debug("Generate Response");
+
+		// RESPONSE
+		final Response response = genAuthnRespBase(status, request
+				.getAssertionConsumerServiceURL(), request.getSamlId());
+
+		DateTime notOnOrAfter = new DateTime();
+
+		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
+				.getTimeNotOnOrAfter());
+
+		final Assertion assertion = this.generateAssertion(ipAddress, request
+				.getAssertionConsumerServiceURL(), request.getSamlId(), request
+				.getIssuer(), notOnOrAfter);
+
+		final AttributeStatement attrStatement = this
+		.generateAttributeStatement(responseAuthReq
+				.getPersonalAttributeList(), isHashing);
+
+		assertion.getAttributeStatements().add(attrStatement);
+
+		// Add assertions
+		response.getAssertions().add(assertion);
+		// Check for response queries
+		if (res != null && res.size() > 0)
+		{
+			//Iterate through them
+			for (int i = 0; i < res.size(); i++)
+			{
+				//If response contains multiple assertions iterate through them as well
+				if (res.get(i).getAssertions().size() > 1)
+				{
+					for (int j = 0; j < res.get(i).getAssertions().size(); j++)
+					{
+						Assertion tempAssertion = res.get(i).getAssertions().get(j);
+						tempAssertion.setParent(response);
+						response.getAssertions().add(tempAssertion);
+					}
+				} else {
+					Assertion tempAssertion = res.get(i).getAssertion();
+					tempAssertion.setParent(response);
+					response.getAssertions().add(tempAssertion);
+				}
+			}
+		}
+
+		final STORKAuthnResponse authresponse = new STORKAuthnResponse();
+
+		try {
+			authresponse.setTokenSaml(super.signAndMarshall(response));
+			authresponse.setSamlId(response.getID());
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+		return authresponse;
+	}
+
+	/**
+	 * Generate stork authentication response fail.
+	 * 
+	 * @param request the request
+	 * @param response the response
+	 * @param ipAddress the IP address
+	 * @param isHashing the is hashing
+	 * 
+	 * @return the sTORK authentication response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAuthnResponse generateSTORKAuthnResponseFail(
+			final STORKAuthnRequest request, final STORKAuthnResponse response,
+			final String ipAddress, final boolean isHashing)
+	throws STORKSAMLEngineException {
+		LOG.info("generateSTORKAuthnResponseFail");
+
+		validateParamResponseFail(request, response);
+
+		// Mandatory
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(response.getStatusCode());
+
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode.");
+		// Subordinate code it's optional in case not covered into next codes:
+		// - urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
+		// - urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue
+		// - urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy
+		// - urn:oasis:names:tc:SAML:2.0:status:RequestDenied
+		// - http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported
+
+		if (StringUtils.isNotBlank(response.getSubStatusCode())) {
+			final StatusCode newStatusCode = SAMLEngineUtils
+			.generateStatusCode(response.getSubStatusCode());
+			statusCode.setStatusCode(newStatusCode);
+		}
+
+		LOG.debug("Generate Status.");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		if (StringUtils.isNotBlank(response.getMessage())) {
+			final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+			.generateStatusMessage(response.getMessage());
+
+			status.setStatusMessage(statusMessage);
+		}
+
+		LOG.debug("Generate Response.");
+		// RESPONSE
+		final Response responseFail = genAuthnRespBase(status, request
+				.getAssertionConsumerServiceURL(), request.getSamlId());
+
+		DateTime notOnOrAfter = new DateTime();
+
+		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
+				.getTimeNotOnOrAfter());
+
+		final Assertion assertion = this.generateAssertion(ipAddress, request
+				.getAssertionConsumerServiceURL(), request.getSamlId(), request
+				.getIssuer(), notOnOrAfter);
+
+		responseFail.getAssertions().add(assertion);
+
+		LOG.debug("Sign and Marshall ResponseFail.");
+
+		final STORKAuthnResponse storkResponse = new STORKAuthnResponse();
+
+		try {
+			storkResponse.setTokenSaml(super.signAndMarshall(responseFail));
+			storkResponse.setSamlId(responseFail.getID());
+		} catch (SAMLEngineException e) {
+			LOG.error("SAMLEngineException.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+		return storkResponse;
+	}
+	
+	/**
+	 * Generate stork attribute query request.
+	 * 
+	 * @param request the request that contain all parameters for generate an
+	 *            attribute query request.
+	 * 
+	 * @return the STORK attribute query request that has been processed.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAttrQueryRequest generateSTORKAttrQueryRequest(
+			final STORKAttrQueryRequest request) throws STORKSAMLEngineException {
+		LOG.info("Generate STORKAttrQueryRequest.");
+
+		// Validate Parameters mandatories
+		validateParamAttrQueryReq(request);
+
+		//final AttributeQuery attrQueryRequestAux = SAMLEngineUtils
+		final CustomAttributeQuery attrQueryRequestAux = SAMLEngineUtils
+		.generateSAMLAttrQueryRequest(SAMLEngineUtils.generateNCName(),
+				SAMLVersion.VERSION_20, SAMLEngineUtils
+				.getCurrentTime());
+
+		// Set name spaces.
+		setNameSpaces(attrQueryRequestAux);
+
+		
+		// Add parameter optional STORK
+		// Destination is mandatory if the destination is a C-PEPS
+		// The application must to know if the destination is a C-PEPS.
+		if (StringUtils.isNotBlank(request.getDestination())) {
+			attrQueryRequestAux.setDestination(request.getDestination());
+		}
+		
+		// Add parameter optional STORK
+		// Consumer URL is needed if using HTTP-Post
+		if (StringUtils.isNotBlank(request.getAssertionConsumerServiceURL())) {
+			attrQueryRequestAux.setAssertionConsumerServiceURL(request.getAssertionConsumerServiceURL());
+		}
+
+		// Consent is optional. Set from SAMLEngine.xml - consent.
+		attrQueryRequestAux.setConsent(super.getSamlCoreProperties()
+				.getConsentAuthnRequest());
+
+		final Issuer issuer = SAMLEngineUtils.generateIssuer();
+		
+		//Set the subject - needed for attribute query validation
+		Subject subject = SAMLEngineUtils.generateSubject();
+		SubjectConfirmationBuilder builder = new SubjectConfirmationBuilder();
+		SubjectConfirmation subjectConfirmation = builder.buildObject();		
+		subjectConfirmation.setMethod("urn:oasis:names:tc:SAML:2.0:cm:bearer");
+		subject.getSubjectConfirmations().add(subjectConfirmation);
+		attrQueryRequestAux.setSubject(subject);
+		
+		if(request.getIssuer()!=null){
+			issuer.setValue(request.getIssuer());
+        } else {
+			issuer.setValue(super.getSamlCoreProperties().getRequester());
+        }
+
+		// Optional STORK
+		final String formatEntity = super.getSamlCoreProperties()
+		.getFormatEntity();
+		if (StringUtils.isNotBlank(formatEntity)) {
+			issuer.setFormat(formatEntity);
+		}
+
+		attrQueryRequestAux.setIssuer(issuer);
+		
+		// Generate stork extensions.
+		final Extensions storkExtensions = this
+		.generateSTORKAttrExtensions(request);
+		// add the extensions to the SAMLAuthnRequest
+		attrQueryRequestAux.setExtensions(storkExtensions);
+
+		// the result contains an authentication request token (byte[]),
+		// identifier of the token, and all parameters from the request.
+		final STORKAttrQueryRequest attrQueryRequest = processAttrExtensions(attrQueryRequestAux
+				.getExtensions());
+
+		try {
+			attrQueryRequest.setTokenSaml(super.signAndMarshall(attrQueryRequestAux));
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		attrQueryRequest.setSamlId(attrQueryRequestAux.getID());
+		attrQueryRequest.setDestination(attrQueryRequestAux.getDestination());
+		attrQueryRequest.setAssertionConsumerServiceURL(attrQueryRequestAux.getAssertionConsumerServiceURL());
+		attrQueryRequest.setIssuer(attrQueryRequestAux.getIssuer().getValue());
+
+		return attrQueryRequest;
+	}
+	
+	/**
+	 * Generate stork attribute query response.
+	 * 
+	 * @param request the request
+	 * @param responseAttrQueryRes the response authentication request
+	 * @param ipAddress the IP address
+	 * @param isHashing the hashing of values
+	 * 
+	 * @return the sTORK authentication response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAttrQueryResponse generateSTORKAttrQueryResponse(
+			final STORKAttrQueryRequest request, 
+			final STORKAttrQueryResponse responseAttrQueryRes, final String ipAddress,
+			final String destinationUrl, final boolean isHashing) throws STORKSAMLEngineException {
+		LOG.info("generateSTORKAttrQueryResponse");
+
+		// Validate parameters
+		validateParamAttrQueryResponse(request, responseAttrQueryRes);
+
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode");
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(StatusCode.SUCCESS_URI);
+
+		LOG.debug("Generate Status");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		LOG.debug("Generate StatusMessage");
+		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+		.generateStatusMessage(StatusCode.SUCCESS_URI);
+
+		status.setStatusMessage(statusMessage);
+
+		LOG.debug("Generate Response");
+
+		// RESPONSE
+		final Response response = genAuthnRespBase(status, destinationUrl,
+				request.getSamlId());
+
+		DateTime notOnOrAfter = new DateTime();
+
+		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
+				.getTimeNotOnOrAfter());
+
+		final Assertion assertion = this.generateAssertion(ipAddress, ""
+				,request.getSamlId(), request.getIssuer(), notOnOrAfter);
+
+		final AttributeStatement attrStatement = this
+		.generateAttributeStatement(responseAttrQueryRes
+				.getPersonalAttributeList(), isHashing);
+
+		assertion.getAttributeStatements().add(attrStatement);
+
+		// Add assertions
+		response.getAssertions().add(assertion);
+
+		final STORKAttrQueryResponse attrQueryResponse = new STORKAttrQueryResponse();
+
+		try {
+			attrQueryResponse.setTokenSaml(super.signAndMarshall(response));
+			attrQueryResponse.setSamlId(response.getID());
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+		return attrQueryResponse;
+	}
+	
+	/**
+	 * Generate stork attribute query response from multiple assertions 
+	 * 
+	 * @param request the request
+	 * @param responseAttrQueryRes the response to the query request
+	 * @param responses the responses to include in the response (aggregation)
+	 * @param ipAddress the IP address
+	 * @param isHashing the hashing of values
+	 * 
+	 * @return the sTORK attribute query response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAttrQueryResponse generateSTORKAttrQueryResponseWithAssertions(
+			final STORKAttrQueryRequest request, final STORKAttrQueryResponse responseAttrQueryRes,
+			final List<STORKAttrQueryResponse> responses, final String ipAddress,
+			final String destinationUrl, final boolean isHashing) throws STORKSAMLEngineException {
+		LOG.info("generateSTORKAttrQueryResponse");
+
+		// Validate parameters
+		validateParamAttrQueryResponseFromAssertions(request, responseAttrQueryRes);
+
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode");
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(StatusCode.SUCCESS_URI);
+
+		LOG.debug("Generate Status");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		LOG.debug("Generate StatusMessage");
+		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+		.generateStatusMessage(StatusCode.SUCCESS_URI);
+
+		status.setStatusMessage(statusMessage);
+
+		LOG.debug("Generate Response");
+
+		// RESPONSE
+		final Response response = genAuthnRespBase(status, destinationUrl,
+				request.getSamlId());
+
+		DateTime notOnOrAfter = new DateTime();
+
+		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
+				.getTimeNotOnOrAfter());
+
+		final Assertion assertion = this.generateAssertion(ipAddress, ""
+				,request.getSamlId(), request.getIssuer(), notOnOrAfter);
+
+		final AttributeStatement attrStatement = this
+		.generateAttributeStatement(responseAttrQueryRes
+				.getPersonalAttributeList(), isHashing);
+
+		assertion.getAttributeStatements().add(attrStatement);
+
+		// Add the assertions from the former Query responses
+		response.getAssertions().add(assertion);
+		if (responses != null && responses.size() > 0)
+		{
+			for (int i = 0; i < responses.size(); i++)
+			{
+				Assertion tempAssertion = responses.get(i).getAssertion();
+				tempAssertion.setParent(response);
+				response.getAssertions().add(tempAssertion);
+			}
+		}
+
+		final STORKAttrQueryResponse attrQueryResponse = new STORKAttrQueryResponse();
+
+		try {
+			attrQueryResponse.setTokenSaml(super.signAndMarshall(response));
+			attrQueryResponse.setSamlId(response.getID());
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+		return attrQueryResponse;
+	}
+	
+	/**
+	 * Generate stork attribute query response fail.
+	 * 
+	 * @param request the request
+	 * @param response the response
+	 * @param ipAddress the IP address
+	 * @param isHashing the is hashing
+	 * 
+	 * @return the STORK attribute query response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAttrQueryResponse generateSTORKAttrQueryResponseFail(
+			final STORKAttrQueryRequest request, final STORKAttrQueryResponse response,
+			final String ipAddress, final String destinationUrl, final boolean isHashing)
+	throws STORKSAMLEngineException {
+		LOG.info("generateSTORKAttrQueryResponseFail");
+
+		validateParamAttrQueryResponseFail(request, response);
+
+		// Mandatory
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(response.getStatusCode());
+
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode.");
+		// Subordinate code it's optional in case not covered into next codes:
+		// - urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
+		// - urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue
+		// - urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy
+		// - urn:oasis:names:tc:SAML:2.0:status:RequestDenied
+		// - http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported
+
+		if (StringUtils.isNotBlank(response.getSubStatusCode())) {
+			final StatusCode newStatusCode = SAMLEngineUtils
+			.generateStatusCode(response.getSubStatusCode());
+			statusCode.setStatusCode(newStatusCode);
+		}
+
+		LOG.debug("Generate Status.");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		if (StringUtils.isNotBlank(response.getMessage())) {
+			final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+			.generateStatusMessage(response.getMessage());
+
+			status.setStatusMessage(statusMessage);
+		}
+
+		LOG.debug("Generate Response.");
+		// RESPONSE
+		final Response responseFail = genAuthnRespBase(status, destinationUrl,
+				request.getSamlId());
+
+		DateTime notOnOrAfter = new DateTime();
+
+		notOnOrAfter = notOnOrAfter.plusSeconds(super.getSamlCoreProperties()
+				.getTimeNotOnOrAfter());
+
+		final Assertion assertion = this.generateAssertion(ipAddress, "", 
+				request.getSamlId(), request
+				.getIssuer(), notOnOrAfter);
+
+		responseFail.getAssertions().add(assertion);
+
+		LOG.debug("Sign and Marshall ResponseFail.");
+
+		final STORKAttrQueryResponse storkResponse = new STORKAttrQueryResponse();
+
+		try {
+			storkResponse.setTokenSaml(super.signAndMarshall(responseFail));
+			storkResponse.setSamlId(responseFail.getID());
+		} catch (SAMLEngineException e) {
+			LOG.error("SAMLEngineException.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+		return storkResponse;
+	}
+	
+	/**
+	 * Generate stork logout request.
+	 * 
+	 * @param request the request that contain all parameters for generate an
+	 *            logout request.
+	 * 
+	 * @return the STORK logout request that has been processed.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKLogoutRequest generateSTORKLogoutRequest(
+			final STORKLogoutRequest request) throws STORKSAMLEngineException {
+		LOG.info("Generate STORKLogoutRequest.");
+
+		// Validate Parameters mandatories
+		validateParamLogoutReq(request);
+
+		final LogoutRequest logoutRequestAux = SAMLEngineUtils
+			.generateSAMLLogoutRequest(SAMLEngineUtils.generateNCName(),
+					SAMLVersion.VERSION_20, SAMLEngineUtils
+					.getCurrentTime());
+
+		// Set name spaces.
+		setNameSpaces(logoutRequestAux);
+
+		
+		// Add parameter optional STORK
+		// Destination is mandatory if the destination is a C-PEPS
+		// The application must to know if the destination is a C-PEPS.
+		if (StringUtils.isNotBlank(request.getDestination())) {
+			logoutRequestAux.setDestination(request.getDestination());
+		}
+				
+		// Consent is optional. Set from SAMLEngine.xml - consent.
+		logoutRequestAux.setConsent(super.getSamlCoreProperties()
+				.getConsentAuthnRequest());
+
+		final Issuer issuer = SAMLEngineUtils.generateIssuer();
+		
+		
+		if(request.getIssuer()!=null){
+			issuer.setValue(request.getIssuer());
+        } else {
+			issuer.setValue(super.getSamlCoreProperties().getRequester());
+        }
+
+		// Optional STORK
+		final String formatEntity = super.getSamlCoreProperties()
+		.getFormatEntity();
+		if (StringUtils.isNotBlank(formatEntity)) {
+			issuer.setFormat(formatEntity);
+		}
+
+		logoutRequestAux.setIssuer(issuer);
+		
+		// Set the name ID
+		final NameID newNameID = SAMLEngineUtils.generateNameID();
+		newNameID.setValue(request.getSpProvidedId());		
+		logoutRequestAux.setNameID(newNameID);
+		
+
+		// the result contains an authentication request token (byte[]),
+		// identifier of the token, and all parameters from the request.
+		final STORKLogoutRequest logoutRequest = new STORKLogoutRequest();
+
+		try {
+			logoutRequest.setTokenSaml(super.signAndMarshall(logoutRequestAux));
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		logoutRequest.setSamlId(logoutRequestAux.getID());
+		logoutRequest.setDestination(logoutRequestAux.getDestination());
+		logoutRequest.setIssuer(logoutRequestAux.getIssuer().getValue());
+		logoutRequest.setSpProvidedId(logoutRequestAux.getNameID().getValue());
+
+		return logoutRequest;
+	}
+	
+
+	/**
+	 * Generate stork logout response.
+	 * @param request the request thats being responded to
+	 * @param response the tesponse that contain all parameters for generate an
+	 *            logout request.
+	 * 
+	 * @return the STORK logout response that has been processed.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKLogoutResponse generateSTORKLogoutResponse(
+			final STORKLogoutRequest request, 
+			final STORKLogoutResponse response) throws STORKSAMLEngineException {
+		LOG.info("Generate STORKLogoutResponse.");
+
+		// Validate Parameters mandatories
+		validateParamLogoutRes(request, response);
+		
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode");
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(StatusCode.SUCCESS_URI);
+
+		LOG.debug("Generate Status");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		LOG.debug("Generate StatusMessage");
+		final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+		.generateStatusMessage(StatusCode.SUCCESS_URI);
+
+		status.setStatusMessage(statusMessage);
+
+		final LogoutResponse logoutResponseAux= SAMLEngineUtils
+			.generateSAMLLogoutResponse(SAMLEngineUtils.generateNCName(),
+					SAMLVersion.VERSION_20, SAMLEngineUtils
+					.getCurrentTime(), status, request.getSamlId());
+
+		// Set name spaces.
+		setNameSpaces(logoutResponseAux);
+
+		
+		// Add parameter optional STORK
+		// Destination is mandatory if the destination is a C-PEPS
+		// The application must to know if the destination is a C-PEPS.
+		if (StringUtils.isNotBlank(response.getDestination())) {
+			logoutResponseAux.setDestination(response.getDestination());
+		}
+				
+		// Consent is optional. Set from SAMLEngine.xml - consent.
+		logoutResponseAux.setConsent(super.getSamlCoreProperties()
+				.getConsentAuthnRequest());
+
+		final Issuer issuer = SAMLEngineUtils.generateIssuer();
+		
+		
+		if(response.getIssuer()!=null){
+			issuer.setValue(response.getIssuer());
+        } else {
+			issuer.setValue(super.getSamlCoreProperties().getRequester());
+        }
+
+		// Optional STORK
+		final String formatEntity = super.getSamlCoreProperties()
+		.getFormatEntity();
+		if (StringUtils.isNotBlank(formatEntity)) {
+			issuer.setFormat(formatEntity);
+		}
+
+		logoutResponseAux.setIssuer(issuer);
+		
+		
+		// the result contains an authentication request token (byte[]),
+		// identifier of the token, and all parameters from the request.
+		final STORKLogoutResponse logoutResponse = new STORKLogoutResponse();
+
+		try {
+			logoutResponse.setTokenSaml(super.signAndMarshall(logoutResponseAux));
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		logoutResponse.setSamlId(logoutResponseAux.getID());
+		logoutResponse.setDestination(logoutResponseAux.getDestination());
+		logoutResponse.setIssuer(logoutResponseAux.getIssuer().getValue());
+		logoutResponse.setStatusCode(logoutResponseAux.getStatus().getStatusCode().toString());
+		logoutResponse.setStatusMessage(logoutResponseAux.getStatus().getStatusMessage().toString());
+
+		return logoutResponse;
+	}
+	
+	/**
+	 * Generate failed stork logout response.
+	 * 
+	 * @param response the response that contain all parameters for generate an
+	 *            logout request.
+	 * 
+	 * @return the STORK logout response that has been processed.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKLogoutResponse generateSTORKLogoutResponseFail(
+			final STORKLogoutRequest request, 
+			final STORKLogoutResponse response ) throws STORKSAMLEngineException {
+		LOG.info("Generate STORKLogoutResponse.");
+
+		// Validate Parameters mandatories
+		validateParamLogoutResFail(request, response);
+		
+		// Mandatory
+		final StatusCode statusCode = SAMLEngineUtils
+		.generateStatusCode(response.getStatusCode());
+
+		// Mandatory SAML
+		LOG.debug("Generate StatusCode.");
+		// Subordinate code it's optional in case not covered into next codes:
+		// - urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
+		// - urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue
+		// - urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy
+		// - urn:oasis:names:tc:SAML:2.0:status:RequestDenied
+		// - http://www.stork.gov.eu/saml20/statusCodes/QAANotSupported
+
+		if (StringUtils.isNotBlank(response.getSubStatusCode())) {
+			final StatusCode newStatusCode = SAMLEngineUtils
+			.generateStatusCode(response.getSubStatusCode());
+			statusCode.setStatusCode(newStatusCode);
+		}
+
+		LOG.debug("Generate Status.");
+		final Status status = SAMLEngineUtils.generateStatus(statusCode);
+
+		if (StringUtils.isNotBlank(response.getStatusMessage())) {
+			final StatusMessage statusMessage = (StatusMessage) SAMLEngineUtils
+			.generateStatusMessage(response.getStatusMessage());
+
+			status.setStatusMessage(statusMessage);
+		}
+
+		final LogoutResponse logoutResponseAux= SAMLEngineUtils
+			.generateSAMLLogoutResponse(SAMLEngineUtils.generateNCName(),
+					SAMLVersion.VERSION_20, SAMLEngineUtils
+					.getCurrentTime(), status, request.getSamlId());
+
+		// Set name spaces.
+		setNameSpaces(logoutResponseAux);
+
+		
+		// Add parameter optional STORK
+		// Destination is mandatory if the destination is a C-PEPS
+		// The application must to know if the destination is a C-PEPS.
+		if (StringUtils.isNotBlank(response.getDestination())) {
+			logoutResponseAux.setDestination(response.getDestination());
+		}
+				
+		// Consent is optional. Set from SAMLEngine.xml - consent.
+		logoutResponseAux.setConsent(super.getSamlCoreProperties()
+				.getConsentAuthnRequest());
+
+		final Issuer issuer = SAMLEngineUtils.generateIssuer();
+		
+		
+		if(response.getIssuer()!=null){
+			issuer.setValue(response.getIssuer());
+        } else {
+			issuer.setValue(super.getSamlCoreProperties().getRequester());
+        }
+
+		// Optional STORK
+		final String formatEntity = super.getSamlCoreProperties()
+		.getFormatEntity();
+		if (StringUtils.isNotBlank(formatEntity)) {
+			issuer.setFormat(formatEntity);
+		}
+
+		logoutResponseAux.setIssuer(issuer);
+		
+		
+		// the result contains an authentication request token (byte[]),
+		// identifier of the token, and all parameters from the request.
+		final STORKLogoutResponse logoutResponse = new STORKLogoutResponse();
+
+		try {
+			logoutResponse.setTokenSaml(super.signAndMarshall(logoutResponseAux));
+		} catch (SAMLEngineException e) {
+			LOG.error("Sign and Marshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		logoutResponse.setSamlId(logoutResponseAux.getID());
+		logoutResponse.setDestination(logoutResponseAux.getDestination());
+		logoutResponse.setIssuer(logoutResponseAux.getIssuer().getValue());
+		logoutResponse.setStatusCode(logoutResponseAux.getStatus().getStatusCode().toString());
+		logoutResponse.setStatusMessage(logoutResponseAux.getStatus().getStatusMessage().toString());
+
+		return logoutResponse;
+	}
+
+	/**
+	 * Generate stork authentication statement for the authentication statement.
+	 * 
+	 * @param ipAddress the IP address
+	 * 
+	 * @return the authentication statement
+	 */
+	private AuthnStatement generateStorkAuthStatement(final String ipAddress) {
+		LOG.debug("Generate stork authenticate statement.");
+		final SubjectLocality subjectLocality = SAMLEngineUtils
+		.generateSubjectLocality(ipAddress);
+
+		final AuthnContext authnContext = (AuthnContext) SAMLEngineUtils
+		.createSamlObject(AuthnContext.DEFAULT_ELEMENT_NAME);
+
+		final AuthnContextDecl authnContextDecl = (AuthnContextDecl) SAMLEngineUtils
+		.createSamlObject(AuthnContextDecl.DEFAULT_ELEMENT_NAME);
+
+		authnContext.setAuthnContextDecl(authnContextDecl);
+
+		final AuthnStatement authnStatement = SAMLEngineUtils
+		.generateAthnStatement(new DateTime(), authnContext);
+
+		// Optional STORK
+		authnStatement.setSessionIndex(null);
+		authnStatement.setSubjectLocality(subjectLocality);
+
+		return authnStatement;
+	}
+
+	/**
+	 * Generate stork extensions.
+	 * 
+	 * @param request the request
+	 * 
+	 * @return the extensions
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private Extensions generateSTORKExtensions(final STORKAuthnRequest request)
+	throws STORKSAMLEngineException {
+		LOG.debug("Generate STORKExtensions");
+
+		final Extensions extensions = SAMLEngineUtils.generateExtension();
+
+		LOG.debug("Generate QAAAttribute");
+		final QAAAttribute qaaAttribute = SAMLEngineUtils
+		.generateQAAAttribute(request.getQaa());
+		extensions.getUnknownXMLObjects().add(qaaAttribute);
+
+
+		if (StringUtils.isNotEmpty(request
+				.getSpSector())) {
+			// Add information about service provider.
+			LOG.debug("Generate SPSector");
+			final SPSector sector = SAMLEngineUtils.generateSPSector(request
+					.getSpSector());
+			extensions.getUnknownXMLObjects().add(sector);
+		}
+
+		//Delete from specification. Kept for compatibility with Provider Name value
+		LOG.debug("Generate SPInstitution");
+		final SPInstitution institution = SAMLEngineUtils
+		.generateSPInstitution(request.getProviderName());
+		extensions.getUnknownXMLObjects().add(institution);
+
+
+		if (StringUtils.isNotEmpty(request.getSpApplication())) {
+			LOG.debug("Generate SPApplication");
+			final SPApplication application = SAMLEngineUtils
+			.generateSPApplication(request.getSpApplication());
+			extensions.getUnknownXMLObjects().add(application);
+		}
+
+		if (StringUtils.isNotEmpty(request.getSpCountry())) {
+			LOG.debug("Generate SPCountry");
+			final SPCountry country = SAMLEngineUtils.generateSPCountry(request
+					.getSpCountry());
+			extensions.getUnknownXMLObjects().add(country);
+		}
+
+		//eIDSectorShare: optional; default value: false.
+		String valueSectorShare = super.getSamlCoreProperties()
+		.iseIDSectorShare();
+
+		if (StringUtils.isNotEmpty(valueSectorShare)) {
+			// Add information about the use of the SAML message.
+			LOG.debug("Generate EIDSectorShare");
+			final EIDSectorShare eIdSectorShare = (EIDSectorShare) SAMLEngineUtils
+			.createSamlObject(EIDSectorShare.DEF_ELEMENT_NAME);
+
+			eIdSectorShare.setEIDSectorShare(String.valueOf(Boolean.valueOf(valueSectorShare)));
+
+			extensions.getUnknownXMLObjects().add(eIdSectorShare);
+		} 
+
+		String valueCrossSectorShare = super.getSamlCoreProperties()
+		.iseIDCrossSectorShare();
+
+		if (StringUtils.isNotEmpty(valueCrossSectorShare)) {
+			LOG.debug("Generate EIDCrossSectorShare");
+			final EIDCrossSectorShare eIdCrossSecShare = (EIDCrossSectorShare) SAMLEngineUtils
+			.createSamlObject(EIDCrossSectorShare.DEF_ELEMENT_NAME);
+			eIdCrossSecShare.setEIDCrossSectorShare(String.valueOf(Boolean.valueOf(valueCrossSectorShare)));
+			extensions.getUnknownXMLObjects().add(eIdCrossSecShare);
+		}
+
+
+		String valueCrossBorderShare = super.getSamlCoreProperties()
+		.iseIDCrossBorderShare();
+
+		if (StringUtils.isNotEmpty(valueCrossBorderShare)) {
+			LOG.debug("Generate EIDCrossBorderShare");
+			final EIDCrossBorderShare eIdCrossBordShare = (EIDCrossBorderShare) SAMLEngineUtils
+			.createSamlObject(EIDCrossBorderShare.DEF_ELEMENT_NAME);
+			eIdCrossBordShare.setEIDCrossBorderShare(String.valueOf(Boolean.valueOf(valueCrossBorderShare)));
+			extensions.getUnknownXMLObjects().add(eIdCrossBordShare);
+		}
+
+
+		// Add information about requested attributes.
+		LOG.debug("Generate RequestedAttributes.");
+		final RequestedAttributes reqAttributes = (RequestedAttributes) SAMLEngineUtils
+		.createSamlObject(RequestedAttributes.DEF_ELEMENT_NAME);
+
+		LOG.debug("SAML Engine configuration properties load.");
+		final Iterator<PersonalAttribute> iterator = request
+		.getPersonalAttributeList().iterator();
+
+		while (iterator.hasNext()) {
+
+			final PersonalAttribute attribute = iterator.next();
+
+			if (attribute == null || StringUtils.isBlank(attribute.getName())) {
+				LOG.error(ATTRIBUTE_EMPTY_LITERAL);
+				throw new STORKSAMLEngineException(ATTRIBUTE_EMPTY_LITERAL);
+			}
+
+			// Verified if exits the attribute name.
+			final String attributeName = super.getSamlCoreProperties()
+			.getProperty(attribute.getName());
+
+			if (StringUtils.isBlank(attributeName)) {
+				LOG.debug("Attribute name: {} was not found.", attribute
+						.getName());
+				throw new STORKSAMLEngineException("Attribute name: "
+						+ attribute.getName() + " was not found.");
+			}
+
+			// Friendly name it's an optional attribute.
+			String friendlyName = null;
+
+			if (super.getSamlCoreProperties().isFriendlyName()) {
+				friendlyName = attribute.getName();
+			}
+
+
+			String isRequired = null;
+			if (super.getSamlCoreProperties().isRequired()) {
+				isRequired = String.valueOf(attribute.isRequired());
+			}
+
+
+			LOG.debug("Generate requested attribute: " + attributeName);
+			final RequestedAttribute requestedAttr = SAMLEngineUtils
+			.generateReqAuthnAttributeSimple(attributeName,
+					friendlyName, isRequired, attribute
+					.getValue());
+
+			// Add requested attribute.
+			reqAttributes.getAttributes().add(requestedAttr);
+		}
+
+		// Add requested attributes.
+		extensions.getUnknownXMLObjects().add(reqAttributes);
+
+		CitizenCountryCode citizenCountryCode = null;
+		if (request.getCitizenCountryCode() != null && StringUtils.isNotBlank(request.getCitizenCountryCode())){
+			LOG.debug("Generate CitizenCountryCode");
+			citizenCountryCode = (CitizenCountryCode) SAMLEngineUtils
+			.createSamlObject(CitizenCountryCode.DEF_ELEMENT_NAME);
+
+			citizenCountryCode.setCitizenCountryCode(request
+					.getCitizenCountryCode().toUpperCase());
+		}		
+
+		SPID spid = null;
+		if(request.getSPID()!=null && StringUtils.isNotBlank(request.getSPID())) {
+			LOG.debug("Generate SPID");
+			spid = (SPID) SAMLEngineUtils
+			.createSamlObject(SPID.DEF_ELEMENT_NAME);
+
+			spid.setSPID(request.getSPID().toUpperCase());
+		}	   
+
+		AuthenticationAttributes authenticationAttr = (AuthenticationAttributes) SAMLEngineUtils
+		.createSamlObject(AuthenticationAttributes.DEF_ELEMENT_NAME);
+
+		final VIDPAuthenticationAttributes vIDPauthenticationAttr = (VIDPAuthenticationAttributes) SAMLEngineUtils
+		.createSamlObject(VIDPAuthenticationAttributes.DEF_ELEMENT_NAME);
+
+		final SPInformation spInformation = (SPInformation) SAMLEngineUtils
+		.createSamlObject(SPInformation.DEF_ELEMENT_NAME);
+
+		if(citizenCountryCode!=null){
+			vIDPauthenticationAttr.setCitizenCountryCode(citizenCountryCode);
+		}
+
+		if(spid!=null){
+			spInformation.setSPID(spid);
+		}
+
+		vIDPauthenticationAttr.setSPInformation(spInformation);
+
+		authenticationAttr
+		.setVIDPAuthenticationAttributes(vIDPauthenticationAttr);
+		extensions.getUnknownXMLObjects().add(authenticationAttr);
+
+
+		return extensions;
+
+	}
+	
+	/**
+	 * Generate stork extensions.
+	 * 
+	 * @param request the attribute query request
+	 * 
+	 * @return the extensions
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private Extensions generateSTORKAttrExtensions(final STORKAttrQueryRequest request)
+	throws STORKSAMLEngineException {
+		LOG.debug("Generate STORKExtensions");
+
+		final Extensions extensions = SAMLEngineUtils.generateExtension();
+
+		LOG.debug("Generate QAAAttribute");
+		final QAAAttribute qaaAttribute = SAMLEngineUtils
+		.generateQAAAttribute(request.getQaa());
+		extensions.getUnknownXMLObjects().add(qaaAttribute);
+
+
+		if (StringUtils.isNotEmpty(request
+				.getSpSector())) {
+			// Add information about service provider.
+			LOG.debug("Generate SPSector");
+			final SPSector sector = SAMLEngineUtils.generateSPSector(request
+					.getSpSector());
+			extensions.getUnknownXMLObjects().add(sector);
+		}
+
+
+		if (StringUtils.isNotEmpty(request.getSpApplication())) {
+			LOG.debug("Generate SPApplication");
+			final SPApplication application = SAMLEngineUtils
+			.generateSPApplication(request.getSpApplication());
+			extensions.getUnknownXMLObjects().add(application);
+		}
+
+		if (StringUtils.isNotEmpty(request.getSpCountry())) {
+			LOG.debug("Generate SPCountry");
+			final SPCountry country = SAMLEngineUtils.generateSPCountry(request
+					.getSpCountry());
+			extensions.getUnknownXMLObjects().add(country);
+		}
+
+		final EIDSectorShare eIdSectorShare = (EIDSectorShare) SAMLEngineUtils
+		.createSamlObject(EIDSectorShare.DEF_ELEMENT_NAME);
+
+		eIdSectorShare.setEIDSectorShare(String.valueOf(request.isEIDSectorShare()));
+
+		extensions.getUnknownXMLObjects().add(eIdSectorShare);
+
+		final EIDCrossSectorShare eIdCrossSecShare = (EIDCrossSectorShare) SAMLEngineUtils
+		.createSamlObject(EIDCrossSectorShare.DEF_ELEMENT_NAME);
+		eIdCrossSecShare.setEIDCrossSectorShare(String.valueOf(request.isEIDCrossSectorShare()));
+		extensions.getUnknownXMLObjects().add(eIdCrossSecShare);
+
+		final EIDCrossBorderShare eIdCrossBordShare = (EIDCrossBorderShare) SAMLEngineUtils
+		.createSamlObject(EIDCrossBorderShare.DEF_ELEMENT_NAME);
+		eIdCrossBordShare.setEIDCrossBorderShare(String.valueOf(request.isEIDCrossBorderShare()));
+		extensions.getUnknownXMLObjects().add(eIdCrossBordShare);
+
+
+		// Add information about requested attributes.
+		LOG.debug("Generate RequestedAttributes.");
+		final RequestedAttributes reqAttributes = (RequestedAttributes) SAMLEngineUtils
+		.createSamlObject(RequestedAttributes.DEF_ELEMENT_NAME);
+
+		LOG.debug("SAML Engine configuration properties load.");
+		final Iterator<PersonalAttribute> iterator = request
+		.getPersonalAttributeList().iterator();
+
+		while (iterator.hasNext()) {
+
+			final PersonalAttribute attribute = iterator.next();
+
+			if (attribute == null || StringUtils.isBlank(attribute.getName())) {
+				LOG.error(ATTRIBUTE_EMPTY_LITERAL);
+				throw new STORKSAMLEngineException(ATTRIBUTE_EMPTY_LITERAL);
+			}
+
+			// Verified if exits the attribute name.
+			final String attributeName = super.getSamlCoreProperties()
+			.getProperty(attribute.getName());
+
+			if (StringUtils.isBlank(attributeName)) {
+				LOG.debug("Attribute name: {} was not found.", attribute
+						.getName());
+				throw new STORKSAMLEngineException("Attribute name: "
+						+ attribute.getName() + " was not found.");
+			}
+
+			// Friendly name it's an optional attribute.
+			String friendlyName = null;
+
+			if (super.getSamlCoreProperties().isFriendlyName()) {
+				friendlyName = attribute.getName();
+			}
+
+
+			String isRequired = null;
+			if (super.getSamlCoreProperties().isRequired()) {
+				isRequired = String.valueOf(attribute.isRequired());
+			}
+
+
+			LOG.debug("Generate requested attribute: " + attributeName);
+			final RequestedAttribute requestedAttr = SAMLEngineUtils
+			.generateReqAuthnAttributeSimple(attributeName,
+					friendlyName, isRequired, attribute
+					.getValue());
+
+			// Add requested attribute.
+			reqAttributes.getAttributes().add(requestedAttr);
+		}
+
+		// Add requested attributes.
+		extensions.getUnknownXMLObjects().add(reqAttributes);
+
+		CitizenCountryCode citizenCountryCode = null;
+		if (request.getCitizenCountryCode() != null && StringUtils.isNotBlank(request.getCitizenCountryCode())){
+			LOG.debug("Generate CitizenCountryCode");
+			citizenCountryCode = (CitizenCountryCode) SAMLEngineUtils
+			.createSamlObject(CitizenCountryCode.DEF_ELEMENT_NAME);
+
+			citizenCountryCode.setCitizenCountryCode(request
+					.getCitizenCountryCode().toUpperCase());
+		}		
+
+		SPID spid = null;
+		if(request.getSPID()!=null && StringUtils.isNotBlank(request.getSPID())) {
+			LOG.debug("Generate SPID");
+			spid = (SPID) SAMLEngineUtils
+			.createSamlObject(SPID.DEF_ELEMENT_NAME);
+
+			spid.setSPID(request.getSPID().toUpperCase());
+		}	   
+
+
+		return extensions;
+
+	}
+	
+	/**
+	 * Gets the alias from X.509 Certificate at keystore.
+	 * 
+	 * @param keyInfo the key info
+	 * @param storkOwnKeyStore 
+	 * @param storkOwnKeyStore 
+	 * 
+	 * @return the alias
+	 */
+    private String getAlias(final KeyInfo keyInfo, KeyStore storkOwnKeyStore) {
+
+        LOG.debug("Recover alias information");
+
+        String alias = null;
+        try {
+            final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
+                    .getX509Datas().get(0).getX509Certificates().get(0);
+
+            // Transform the KeyInfo to X509Certificate.
+            CertificateFactory certFact;
+            certFact = CertificateFactory.getInstance("X.509");
+
+            final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
+                    .decode(xmlCert.getValue()));
+
+            final X509Certificate cert = (X509Certificate) certFact
+                    .generateCertificate(bis);
+
+            final String tokenSerialNumber = cert.getSerialNumber().toString(16);
+            final X509Principal tokenIssuerDN = new X509Principal(cert.getIssuerDN().getName());
+
+
+            String aliasCert;
+            X509Certificate certificate;
+            boolean find = false;
+
+            for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
+                    .hasMoreElements()
+                    && !find; ) {
+                aliasCert = e.nextElement();
+                certificate = (X509Certificate) storkOwnKeyStore
+                        .getCertificate(aliasCert);                
+
+                final String serialNum = certificate.getSerialNumber()
+                        .toString(16);
+
+                X509Principal issuerDN = new X509Principal(certificate
+                        .getIssuerDN().getName());
+
+                if(serialNum.equalsIgnoreCase(tokenSerialNumber)
+                        && X509PrincipalUtil.equals2(issuerDN, tokenIssuerDN)){
+                    alias = aliasCert;
+                    find = true;
+                }
+
+            }
+
+        } catch (KeyStoreException e) {
+            LOG.error("Procces getAlias from certificate associated into the signing keystore..", e);
+        } catch (CertificateException e) {
+            LOG.error("Procces getAlias from certificate associated into the signing keystore..", e);
+        } catch (RuntimeException e) {
+            LOG.error("Procces getAlias from certificate associated into the signing keystore..", e);
+        }
+        return alias;
+    }
+
+	/**
+	 * Gets the country from X.509 Certificate.
+	 * 
+	 * @param keyInfo the key info
+	 * 
+	 * @return the country
+	 */
+	private String getCountry(final KeyInfo keyInfo) {
+		LOG.debug("Recover country information.");
+
+		String result = "";
+		try {
+			final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
+			.getX509Datas().get(0).getX509Certificates().get(0);
+
+			// Transform the KeyInfo to X509Certificate.
+			CertificateFactory certFact;
+			certFact = CertificateFactory.getInstance("X.509");
+
+			final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
+					.decode(xmlCert.getValue()));
+
+			final X509Certificate cert = (X509Certificate) certFact
+			.generateCertificate(bis);
+
+			String distName = cert.getSubjectDN().toString();
+
+			distName = StringUtils.deleteWhitespace(StringUtils
+					.upperCase(distName));
+
+			final String countryCode = "C=";
+			final int init = distName.indexOf(countryCode);
+
+			if (init > StringUtils.INDEX_NOT_FOUND) { // Exist country code.
+				int end = distName.indexOf(',', init);
+
+				if (end <= StringUtils.INDEX_NOT_FOUND) {
+					end = distName.length();
+				}
+
+				if (init < end && end > StringUtils.INDEX_NOT_FOUND) {
+					result = distName.substring(init + countryCode.length(),
+							end);
+					//It must be a two characters value
+					if(result.length()>2){
+						result = result.substring(0, 2);
+                    }
+				}
+			}
+
+		} catch (CertificateException e) {
+			LOG.error("Procces getCountry from certificate.");
+		}
+		return result.trim();
+	}
+
+	/**
+	 * Process all elements XMLObjects from the extensions.
+	 * 
+	 * @param extensions the extensions from the authentication request.
+	 * 
+	 * @return the STORK authentication request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private STORKAuthnRequest processExtensions(final Extensions extensions)
+	throws STORKSAMLEngineException {
+		LOG.debug("Procces the extensions.");
+
+		final STORKAuthnRequest request = new STORKAuthnRequest();
+
+		final QAAAttribute qaa = (QAAAttribute) extensions
+		.getUnknownXMLObjects(QAAAttribute.DEF_ELEMENT_NAME).get(0);
+		request.setQaa(Integer.parseInt(qaa.getQaaLevel()));
+
+		List optionalElements = extensions.getUnknownXMLObjects(
+				SPSector.DEF_ELEMENT_NAME);
+
+		if (!optionalElements.isEmpty()) {
+			final SPSector sector = (SPSector) extensions.getUnknownXMLObjects(
+					SPSector.DEF_ELEMENT_NAME).get(0);
+			request.setSpSector(sector.getSPSector());
+		}
+
+		optionalElements = extensions.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME);
+
+		if (!optionalElements.isEmpty()) {
+			final SPApplication application = (SPApplication) extensions
+			.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME).get(0);
+			request.setSpApplication(application.getSPApplication());
+		}
+
+		optionalElements = extensions.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME);
+
+		if (!optionalElements.isEmpty()) {
+			final SPCountry application = (SPCountry) extensions
+			.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME).get(0);
+			request.setSpCountry(application.getSPCountry());
+		}	
+
+
+		List listCrossBorderShare = extensions
+		.getUnknownXMLObjects(EIDCrossBorderShare.DEF_ELEMENT_NAME);
+
+		if (!listCrossBorderShare .isEmpty()) {
+			final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) listCrossBorderShare.get(0);
+			request.setEIDCrossBorderShare(Boolean.parseBoolean(crossBorderShare
+					.getEIDCrossBorderShare()));		
+		}
+
+
+		List listCrosSectorShare = extensions
+		.getUnknownXMLObjects(EIDCrossSectorShare.DEF_ELEMENT_NAME);
+
+		if (!listCrosSectorShare.isEmpty()) {
+			final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) listCrosSectorShare.get(0);
+			request.setEIDCrossSectorShare(Boolean.parseBoolean(crossSectorShare
+					.getEIDCrossSectorShare()));
+		}
+
+		List listSectorShareExtension = extensions
+		.getUnknownXMLObjects(EIDSectorShare.DEF_ELEMENT_NAME);
+		if (!listSectorShareExtension.isEmpty()) {
+			final EIDSectorShare sectorShare = (EIDSectorShare) listSectorShareExtension.get(0);
+			request.setEIDSectorShare(Boolean.parseBoolean(sectorShare.getEIDSectorShare()));
+		}
+
+
+
+		List<XMLObject> authAttrs = extensions
+		.getUnknownXMLObjects(AuthenticationAttributes.DEF_ELEMENT_NAME);
+
+		if (authAttrs != null && !authAttrs.isEmpty()) {
+
+			final AuthenticationAttributes authnAttr = (AuthenticationAttributes) authAttrs
+			.get(0);	
+
+			VIDPAuthenticationAttributes vidpAuthnAttr = null;
+			if (authnAttr != null && !authAttrs.isEmpty()){
+				vidpAuthnAttr = authnAttr.getVIDPAuthenticationAttributes();
+			}
+
+			CitizenCountryCode citizenCountryCodeElement = null;
+			SPInformation spInformation = null;
+			if (vidpAuthnAttr != null){
+				citizenCountryCodeElement = vidpAuthnAttr.getCitizenCountryCode();
+				spInformation = vidpAuthnAttr.getSPInformation();
+			}
+
+			String citizenCountryCode = null;
+			if(citizenCountryCodeElement!=null){
+				citizenCountryCode = citizenCountryCodeElement.getCitizenCountryCode();
+			}
+
+			if(citizenCountryCode!= null && StringUtils.isNotBlank(citizenCountryCode)){
+				request.setCitizenCountryCode(citizenCountryCode);
+			}	  	    
+
+			SPID spidElement = null;
+			if (spInformation != null){
+				spidElement = spInformation.getSPID();
+			}
+
+			String spid = null;
+			if(spidElement!=null){
+				spid = spidElement.getSPID();
+			}
+
+			if (spid != null && StringUtils.isNotBlank(spid)) {
+				request.setSPID(spid);
+			}
+		}
+
+		if (extensions
+				.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME) == null) {
+			LOG.error("Extensions not contains any requested attribute.");
+			throw new STORKSAMLEngineException(
+			"Extensions not contains any requested attribute.");
+		}
+
+		final RequestedAttributes requestedAttr = (RequestedAttributes) extensions
+		.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME)
+		.get(0);
+
+		final List<RequestedAttribute> reqAttrs = requestedAttr.getAttributes();
+
+		final IPersonalAttributeList personalAttrList = new PersonalAttributeList();
+
+		String attributeName;
+		for (int nextAttribute = 0; nextAttribute < reqAttrs.size(); nextAttribute++) {
+			final RequestedAttribute attribute = reqAttrs.get(nextAttribute);
+			final PersonalAttribute personalAttribute = new PersonalAttribute();
+			personalAttribute.setIsRequired(Boolean.valueOf(attribute.isRequired()));
+			personalAttribute.setFriendlyName(attribute.getFriendlyName());
+			attributeName = attribute.getName();
+
+			// recover the last name from the string.
+			personalAttribute.setName(attributeName.substring(attributeName
+					.lastIndexOf('/') + 1));
+
+			final ArrayList<String> valores = new ArrayList<String>();
+			final List<XMLObject> values = attribute.getOrderedChildren();
+
+			for (int nextSimpleValue = 0; nextSimpleValue < values.size(); nextSimpleValue++) {
+
+				// Process attributes simples. An AuthenticationRequest only
+				// must contains simple values.
+				
+				final XMLObject xmlObject = values.get(nextSimpleValue);
+								
+				if(xmlObject instanceof XSStringImpl){
+					
+					final XSStringImpl xmlString = (XSStringImpl) values
+					.get(nextSimpleValue);
+					valores.add(xmlString.getValue());
+				
+				}else{
+				
+					if (attributeName.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
+						
+						final XSAnyImpl xmlString = (XSAnyImpl) values
+						.get(nextSimpleValue);
+						
+						TransformerFactory transFactory = TransformerFactory.newInstance();
+						Transformer transformer = null;
+						try {
+							transformer = transFactory.newTransformer();
+							transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+						} catch (TransformerConfigurationException e) {
+                            LOG.error("Error transformer configuration exception", e);
+						}
+						StringWriter buffer = new StringWriter();					
+						try {
+                            if (xmlString != null && xmlString.getUnknownXMLObjects() != null && xmlString.getUnknownXMLObjects().size() > 0 ){
+                                transformer.transform(new DOMSource(xmlString.getUnknownXMLObjects().get(0).getDOM()),
+                                      new StreamResult(buffer));
+                            }
+						} catch (TransformerException e) {
+                            LOG.error("Error transformer exception", e);
+						}
+						String str = buffer.toString();
+						
+						valores.add(str);	
+										
+					}else{
+						
+						final XSAnyImpl xmlString = (XSAnyImpl) values
+						.get(nextSimpleValue);
+						valores.add(xmlString.getTextContent());
+					}
+								
+					
+										
+				}
+			}
+			personalAttribute.setValue(valores);
+			personalAttrList.add(personalAttribute);
+		}
+
+		request.setPersonalAttributeList(personalAttrList);
+
+		return request;
+	}
+
+	
+	/**
+	 * Process all elements XMLObjects from the extensions.
+	 * 
+	 * @param extensions the extensions from the authentication request.
+	 * 
+	 * @return the STORK authentication request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private STORKAttrQueryRequest processAttrExtensions(final Extensions extensions)
+	throws STORKSAMLEngineException {
+		LOG.debug("Procces the atribute query extensions.");
+
+		final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+		final QAAAttribute qaa = (QAAAttribute) extensions
+		.getUnknownXMLObjects(QAAAttribute.DEF_ELEMENT_NAME).get(0);
+		request.setQaa(Integer.parseInt(qaa.getQaaLevel()));
+
+		List optionalElements = extensions.getUnknownXMLObjects(
+				SPSector.DEF_ELEMENT_NAME);
+
+		if (!optionalElements.isEmpty()) {
+			final SPSector sector = (SPSector) extensions.getUnknownXMLObjects(
+					SPSector.DEF_ELEMENT_NAME).get(0);
+			request.setSpSector(sector.getSPSector());
+		}
+
+		optionalElements = extensions.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME);
+
+		if (!optionalElements.isEmpty()) {
+			final SPApplication application = (SPApplication) extensions
+			.getUnknownXMLObjects(SPApplication.DEF_ELEMENT_NAME).get(0);
+			request.setSpApplication(application.getSPApplication());
+		}
+
+		optionalElements = extensions.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME);
+
+		if (!optionalElements.isEmpty()) {
+			final SPCountry application = (SPCountry) extensions
+			.getUnknownXMLObjects(SPCountry.DEF_ELEMENT_NAME).get(0);
+			request.setSpCountry(application.getSPCountry());
+		}	
+
+
+		List listCrossBorderShare = extensions
+		.getUnknownXMLObjects(EIDCrossBorderShare.DEF_ELEMENT_NAME);
+
+		if (!listCrossBorderShare .isEmpty()) {
+			final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) listCrossBorderShare.get(0);
+			request.setEIDCrossBorderShare(Boolean.parseBoolean(crossBorderShare
+					.getEIDCrossBorderShare()));		
+		}
+
+
+		List listCrosSectorShare = extensions
+		.getUnknownXMLObjects(EIDCrossSectorShare.DEF_ELEMENT_NAME);
+
+		if (!listCrosSectorShare.isEmpty()) {
+			final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) listCrosSectorShare.get(0);
+			request.setEIDCrossSectorShare(Boolean.parseBoolean(crossSectorShare
+					.getEIDCrossSectorShare()));
+		}
+
+		List listSectorShareExtension = extensions
+		.getUnknownXMLObjects(EIDSectorShare.DEF_ELEMENT_NAME);
+		if (!listSectorShareExtension.isEmpty()) {
+			final EIDSectorShare sectorShare = (EIDSectorShare) listSectorShareExtension.get(0);
+			request.setEIDSectorShare(Boolean.parseBoolean(sectorShare.getEIDSectorShare()));
+		}
+
+
+
+		List<XMLObject> authAttrs = extensions
+		.getUnknownXMLObjects(AuthenticationAttributes.DEF_ELEMENT_NAME);
+
+		if (authAttrs != null && !authAttrs.isEmpty()) {
+
+			final AuthenticationAttributes authnAttr = (AuthenticationAttributes) authAttrs
+			.get(0);	
+
+			VIDPAuthenticationAttributes vidpAuthnAttr = null;
+			if (authnAttr != null && !authAttrs.isEmpty()){
+				vidpAuthnAttr = authnAttr.getVIDPAuthenticationAttributes();
+			}
+
+			CitizenCountryCode citizenCountryCodeElement = null;
+			SPInformation spInformation = null;
+			if (vidpAuthnAttr != null){
+				citizenCountryCodeElement = vidpAuthnAttr.getCitizenCountryCode();
+				spInformation = vidpAuthnAttr.getSPInformation();
+			}
+
+			String citizenCountryCode = null;
+			if(citizenCountryCodeElement!=null){
+				citizenCountryCode = citizenCountryCodeElement.getCitizenCountryCode();
+			}
+
+			if(citizenCountryCode!= null && StringUtils.isNotBlank(citizenCountryCode)){
+				request.setCitizenCountryCode(citizenCountryCode);
+			}	  	    
+
+			SPID spidElement = null;
+			if (spInformation != null){
+				spidElement = spInformation.getSPID();
+			}
+
+			String spid = null;
+			if(spidElement!=null){
+				spid = spidElement.getSPID();
+			}
+
+			if (spid != null && StringUtils.isNotBlank(spid)) {
+				request.setSPID(spid);
+			}
+		}
+
+		if (extensions
+				.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME) == null) {
+			LOG.error("Extensions not contains any requested attribute.");
+			throw new STORKSAMLEngineException(
+			"Extensions not contains any requested attribute.");
+		}
+
+		final RequestedAttributes requestedAttr = (RequestedAttributes) extensions
+		.getUnknownXMLObjects(RequestedAttributes.DEF_ELEMENT_NAME)
+		.get(0);
+
+		final List<RequestedAttribute> reqAttrs = requestedAttr.getAttributes();
+
+		final IPersonalAttributeList personalAttrList = new PersonalAttributeList();
+
+		String attributeName;
+		for (int nextAttribute = 0; nextAttribute < reqAttrs.size(); nextAttribute++) {
+			final RequestedAttribute attribute = reqAttrs.get(nextAttribute);
+			final PersonalAttribute personalAttribute = new PersonalAttribute();
+			personalAttribute.setIsRequired(Boolean.valueOf(attribute.isRequired()));
+			personalAttribute.setFriendlyName(attribute.getFriendlyName());
+			attributeName = attribute.getName();
+
+			// recover the last name from the string.
+			personalAttribute.setName(attributeName.substring(attributeName
+					.lastIndexOf('/') + 1));
+
+			final ArrayList<String> valores = new ArrayList<String>();
+			final List<XMLObject> values = attribute.getOrderedChildren();
+
+			for (int nextSimpleValue = 0; nextSimpleValue < values.size(); nextSimpleValue++) {
+
+				// Process attributes simples. An AuthenticationRequest only
+				// must contains simple values.
+				
+				final XMLObject xmlObject = values.get(nextSimpleValue);
+								
+				if(xmlObject instanceof XSStringImpl){
+					
+					final XSStringImpl xmlString = (XSStringImpl) values
+					.get(nextSimpleValue);
+					valores.add(xmlString.getValue());
+				
+				}else{
+				
+					if (attributeName.equals("http://www.stork.gov.eu/1.0/signedDoc")) {
+						
+						final XSAnyImpl xmlString = (XSAnyImpl) values
+						.get(nextSimpleValue);
+						
+						TransformerFactory transFactory = TransformerFactory.newInstance();
+						Transformer transformer = null;
+						try {
+							transformer = transFactory.newTransformer();
+							transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+						} catch (TransformerConfigurationException e) {
+                            LOG.error("Error transformer configuration exception", e);
+						}
+						StringWriter buffer = new StringWriter();					
+						try {
+                            if (xmlString != null && xmlString.getUnknownXMLObjects() != null && xmlString.getUnknownXMLObjects().size() > 0 ){
+                                transformer.transform(new DOMSource(xmlString.getUnknownXMLObjects().get(0).getDOM()),
+                                      new StreamResult(buffer));
+                            }
+						} catch (TransformerException e) {
+                            LOG.error("Error transformer exception", e);
+						}
+						String str = buffer.toString();
+						
+						valores.add(str);	
+										
+					}else{
+						
+						final XSAnyImpl xmlString = (XSAnyImpl) values
+						.get(nextSimpleValue);
+						valores.add(xmlString.getTextContent());
+					}
+								
+					
+										
+				}
+			}
+			personalAttribute.setValue(valores);
+			personalAttrList.add(personalAttribute);
+		}
+
+		request.setPersonalAttributeList(personalAttrList);
+
+		return request;
+	}
+
+	/**
+	 * Sets the name spaces.
+	 * 
+	 * @param tokenSaml the new name spaces
+	 */
+	private void setNameSpaces(final XMLObject tokenSaml) {
+		LOG.debug("Set namespaces.");
+
+		final Namespace saml2 = new Namespace(SAMLConstants.SAML20_NS,
+				SAMLConstants.SAML20_PREFIX);
+		tokenSaml.addNamespace(saml2);
+
+		final Namespace digSig = new Namespace(
+				"http://www.w3.org/2000/09/xmldsig#", "ds");
+		tokenSaml.addNamespace(digSig);
+
+		final Namespace storkp = new Namespace(SAMLCore.STORK10P_NS.getValue(),
+				SAMLCore.STORK10P_PREFIX.getValue());
+		tokenSaml.addNamespace(storkp);
+
+		final Namespace stork = new Namespace(SAMLCore.STORK10_NS.getValue(),
+				SAMLCore.STORK10_PREFIX.getValue());
+
+		tokenSaml.addNamespace(stork);
+	}
+
+	/**
+	 * Validate parameters from authentication request.
+	 * 
+	 * @param request the request.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamAuthnReq(final STORKAuthnRequest request)
+	throws STORKSAMLEngineException {
+		LOG.info("Validate parameters from authentication request.");
+
+		// URL to which Authentication Response must be sent.
+		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: Assertion Consumer Service URL it's mandatory.");
+		}
+
+		// the name of the original service provider requesting the
+		// authentication.
+		if (StringUtils.isBlank(request.getProviderName())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: Service Provider it's mandatory.");
+		}
+
+		// object that contain all attributes requesting.
+		if (request.getPersonalAttributeList() == null
+				|| request.getPersonalAttributeList().isEmpty()) {
+			throw new STORKSAMLEngineException(
+			"attributeQueries is null or empty.");
+		}
+
+		// Quality authentication assurance level.
+		if ((request.getQaa() < QAAAttribute.MIN_VALUE)
+				|| (request.getQaa() > QAAAttribute.MAX_VALUE)) {
+			throw new STORKSAMLEngineException("Qaal: " + request.getQaa()
+					+ ", is invalid.");
+		}
+
+	}
+	
+	/**
+	 * Validate parameters from attribute query request.
+	 * 
+	 * @param request the request.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamAttrQueryReq(final STORKAttrQueryRequest request)
+	throws STORKSAMLEngineException {
+		LOG.info("Validate parameters from attribute query request.");
+
+		// URL to which AP Response must be sent.
+		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: Assertion Consumer Service URL it's mandatory.");
+		}
+
+		// Destination of the request - not mandatory
+		/*if (StringUtils.isBlank(request.getDestination())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: Destination is mandatory.");
+		}*/
+		
+		// SP country is empty
+		if (StringUtils.isBlank(request.getSpCountry())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: SP country is mandatory.");
+		}
+
+		// object that contain all attributes requesting.
+		if (request.getPersonalAttributeList() == null
+				|| request.getPersonalAttributeList().isEmpty()) {
+			throw new STORKSAMLEngineException(
+			"attributeQueries is null or empty.");
+		}
+
+		// Quality authentication assurance level.
+		if ((request.getQaa() < QAAAttribute.MIN_VALUE)
+				|| (request.getQaa() > QAAAttribute.MAX_VALUE)) {
+			throw new STORKSAMLEngineException("Qaal: " + request.getQaa()
+					+ ", is invalid.");
+		}
+	}
+	
+	/**
+	 * Validate parameters from logout request.
+	 * 
+	 * @param request the request.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamLogoutReq(final STORKLogoutRequest request)
+	throws STORKSAMLEngineException {
+		LOG.info("Validate parameters from logout request.");
+
+		// URL to which AP Response must be sent.
+		/*if (StringUtils.isBlank(request.get())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: Assertion Consumer Service URL it's mandatory.");
+		}*/
+
+		// Destination of the request
+		if (StringUtils.isBlank(request.getDestination())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: Destination is mandatory.");
+		}
+		
+		// SP Provided Id
+		if (StringUtils.isBlank(request.getSpProvidedId())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: SP provided Id is mandatory.");
+		}
+	}
+	
+	/**
+	 * Validate parameters from logout response.
+	 * 
+	 * @param response the response.
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamLogoutRes(final STORKLogoutRequest request, 
+			final STORKLogoutResponse response)	throws STORKSAMLEngineException {
+		LOG.info("Validate parameters from logout request.");
+
+		// Issuer is mandatory
+		if (StringUtils.isBlank(request.getIssuer())) {
+			throw new STORKSAMLEngineException(
+					"Issuer must be not empty or null.");
+		}
+
+		// Destination of the request
+		if (StringUtils.isBlank(response.getDestination())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: Destination is mandatory.");
+		}
+		
+		// SP Provided Id
+		if (StringUtils.isBlank(request.getSpProvidedId())) {
+			throw new STORKSAMLEngineException(
+					"StorkSamlEngine: SP provided Id is mandatory.");
+		}
+		
+		if (StringUtils.isBlank(request.getSamlId())) {
+			throw new STORKSAMLEngineException("request ID is null or empty.");
+		}
+	}
+
+
+	/**
+	 * Validate parameters from response.
+	 * 
+	 * @param request the request
+	 * @param responseAuthReq the response authentication request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamResponse(final STORKAuthnRequest request,
+			final STORKAuthnResponse responseAuthReq)
+	throws STORKSAMLEngineException {
+		LOG.info("Validate parameters response.");
+		if (StringUtils.isBlank(request.getIssuer())) {
+			throw new STORKSAMLEngineException(
+					"Issuer must be not empty or null.");
+		}
+
+		if (responseAuthReq.getPersonalAttributeList() == null
+				|| responseAuthReq.getPersonalAttributeList().isEmpty()) {
+			LOG.error("PersonalAttributeList is null or empty.");
+			throw new STORKSAMLEngineException(
+			"PersonalAttributeList is null or empty.");
+		}
+
+		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
+			throw new STORKSAMLEngineException(
+					"assertionConsumerServiceURL is null or empty.");
+		}
+
+		if (StringUtils.isBlank(request.getSamlId())) {
+			throw new STORKSAMLEngineException("request ID is null or empty.");
+		}
+	}
+	
+	/**
+	 * Validate parameters from response.
+	 * 
+	 * @param request the request
+	 * @param responseAttrQueryReq the response authentication request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamAttrQueryResponse(final STORKAttrQueryRequest request,
+			final STORKAttrQueryResponse responseAttrQueryReq)
+	throws STORKSAMLEngineException {
+		LOG.info("Validate attribute querey parameters response.");
+		if (StringUtils.isBlank(request.getIssuer())) {
+			throw new STORKSAMLEngineException(
+					"Issuer must be not empty or null.");
+		}
+
+		if (responseAttrQueryReq.getPersonalAttributeList() == null
+				|| responseAttrQueryReq.getPersonalAttributeList().isEmpty()) {
+			LOG.error("PersonalAttributeList is null or empty.");
+			throw new STORKSAMLEngineException(
+			"PersonalAttributeList is null or empty.");
+		}
+
+		/*if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
+			throw new STORKSAMLEngineException(
+					"assertionConsumerServiceURL is null or empty.");
+		}*/
+
+		if (StringUtils.isBlank(request.getSamlId())) {
+			throw new STORKSAMLEngineException("request ID is null or empty.");
+		}
+	}
+	
+	/**
+	 * Validate parameters from response.
+	 * 
+	 * @param request the request
+	 * @param responseAttrQueryReq the response authentication request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamAttrQueryResponseFromAssertions(final STORKAttrQueryRequest request,
+			final STORKAttrQueryResponse responseAttrQueryReq)
+	throws STORKSAMLEngineException {
+		LOG.info("Validate attribute querey parameters response.");
+		if (StringUtils.isBlank(request.getIssuer())) {
+			throw new STORKSAMLEngineException(
+					"Issuer must be not empty or null.");
+		}
+
+		/*if (responseAttrQueryReq.getPersonalAttributeList() == null
+				|| responseAttrQueryReq.getPersonalAttributeList().isEmpty()) {
+			LOG.error("PersonalAttributeList is null or empty.");
+			throw new STORKSAMLEngineException(
+			"PersonalAttributeList is null or empty.");
+		}*/
+
+		/*if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
+			throw new STORKSAMLEngineException(
+					"assertionConsumerServiceURL is null or empty.");
+		}*/
+
+		if (StringUtils.isBlank(request.getSamlId())) {
+			throw new STORKSAMLEngineException("request ID is null or empty.");
+		}
+	}
+
+	/**
+	 * Validate parameter from response fail.
+	 * 
+	 * @param request the request
+	 * @param response the response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamResponseFail(final STORKAuthnRequest request,
+			final STORKAuthnResponse response) throws STORKSAMLEngineException {
+		LOG.info("Validate parameters response fail.");
+		if (StringUtils.isBlank(response.getStatusCode())) {
+			throw new STORKSAMLEngineException("Code error it's null or empty.");
+		}
+
+		if (StringUtils.isBlank(request.getAssertionConsumerServiceURL())) {
+			throw new STORKSAMLEngineException(
+					"assertionConsumerServiceURL is null or empty.");
+		}
+
+		if (StringUtils.isBlank(request.getSamlId())) {
+			throw new STORKSAMLEngineException("request ID is null or empty.");
+		}
+	}
+	
+	/**
+	 * Validate parameter from response fail.
+	 * 
+	 * @param request the request
+	 * @param response the response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamAttrQueryResponseFail(final STORKAttrQueryRequest request,
+			final STORKAttrQueryResponse response) throws STORKSAMLEngineException {
+		LOG.info("Validate parameters response fail.");
+		if (StringUtils.isBlank(response.getStatusCode())) {
+			throw new STORKSAMLEngineException("Code error it's null or empty.");
+		}
+
+		if (StringUtils.isBlank(request.getSamlId())) {
+			throw new STORKSAMLEngineException("request ID is null or empty.");
+		}
+	}
+	
+	/**
+	 * Validate parameter from response fail.
+	 * 
+	 * @param request the request
+	 * @param response the response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private void validateParamLogoutResFail(final STORKLogoutRequest request,
+			final STORKLogoutResponse response) throws STORKSAMLEngineException {
+		LOG.info("Validate parameters response fail.");
+		
+		if (StringUtils.isBlank(request.getIssuer())) {
+			throw new STORKSAMLEngineException(
+					"Issuer must be not empty or null.");
+		}
+
+		if (StringUtils.isBlank(response.getStatusCode())) {
+			throw new STORKSAMLEngineException("Code error it's null or empty.");
+		}
+
+		if (StringUtils.isBlank(request.getSamlId())) {
+			throw new STORKSAMLEngineException("request ID is null or empty.");
+		}
+	}
+
+	/**
+	 * Validate stork authentication request.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * 
+	 * @return the sTORK authentication request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAuthnRequest validateSTORKAuthnRequest(final byte[] tokenSaml)
+	throws STORKSAMLEngineException {
+		LOG.info("validateSTORKAuthnRequest");
+
+		final AuthnRequest samlRequest = (AuthnRequest) validateStorkSaml(tokenSaml);
+
+		LOG.debug("Validate Extensions.");
+		final Validator<Extensions> validatorExt = new ExtensionsSchemaValidator();
+		try {
+			validatorExt.validate(samlRequest.getExtensions());
+		} catch (ValidationException e) {
+			LOG.error("ValidationException: validate Extensions.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		LOG.debug("Generate STORKAuthnRequest.");
+		final STORKAuthnRequest authnRequest = processExtensions(samlRequest
+				.getExtensions());
+
+		authnRequest.setCountry(this.getCountry(samlRequest.getSignature()
+				.getKeyInfo()));
+		
+		authnRequest.setAlias(this.getAlias(samlRequest.getSignature()
+				.getKeyInfo(), super.getSigner().getTrustStore()));
+		
+		authnRequest.setSamlId(samlRequest.getID());
+		authnRequest.setDestination(samlRequest.getDestination());
+		authnRequest.setAssertionConsumerServiceURL(samlRequest
+				.getAssertionConsumerServiceURL());
+
+		authnRequest.setProviderName(samlRequest.getProviderName());
+		authnRequest.setIssuer(samlRequest.getIssuer().getValue());
+
+		//Delete unknown elements from requested ones
+		final Iterator<PersonalAttribute> iterator = authnRequest.getPersonalAttributeList().iterator();
+        IPersonalAttributeList cleanPerAttrList = (PersonalAttributeList) authnRequest.getPersonalAttributeList();
+		while (iterator.hasNext()) {
+
+			final PersonalAttribute attribute = iterator.next();
+
+			// Verify if the attribute name exits.
+			final String attributeName = super.getSamlCoreProperties()
+			.getProperty(attribute.getName());
+
+			if (StringUtils.isBlank(attributeName)) {
+				LOG.info("Attribute name: {} was not found. It will be removed from the request object", attribute.getName());
+				cleanPerAttrList.remove(attribute.getName());
+			}
+
+		}	
+		authnRequest.setPersonalAttributeList(cleanPerAttrList);
+
+		return authnRequest;
+
+	}
+	
+	/**
+	 * Validate stork attribute query request.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * 
+	 * @return the STORK attribute query request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAttrQueryRequest validateSTORKAttrQueryRequest(final byte[] tokenSaml)
+	throws STORKSAMLEngineException {
+		LOG.info("validateSTORKAttrQueryRequest");
+
+		//final AttributeQuery samlRequest = (AttributeQuery) validateStorkSaml(tokenSaml);
+		final CustomRequestAbstractType samlRequest = (CustomRequestAbstractType) validateStorkSaml(tokenSaml);
+
+		LOG.debug("Validate Extensions.");
+		final Validator<Extensions> validatorExt = new ExtensionsSchemaValidator();
+		try {
+			validatorExt.validate(samlRequest.getExtensions());
+		} catch (ValidationException e) {
+			LOG.error("ValidationException: validate Extensions.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		LOG.debug("Generate STORKAttrQueryRequest.");
+		final STORKAttrQueryRequest attrRequest = processAttrExtensions(samlRequest
+				.getExtensions());
+
+		attrRequest.setCountry(this.getCountry(samlRequest.getSignature()
+				.getKeyInfo()));
+		
+		attrRequest.setAlias(this.getAlias(samlRequest.getSignature()
+				.getKeyInfo(), super.getSigner().getTrustStore()));
+		
+		attrRequest.setSamlId(samlRequest.getID());
+		attrRequest.setDestination(samlRequest.getDestination());
+		attrRequest.setAssertionConsumerServiceURL(samlRequest
+				.getAssertionConsumerServiceURL());
+
+		/*authnRequest.setProviderName(samlRequest.getProviderName());*/
+		attrRequest.setIssuer(samlRequest.getIssuer().getValue());
+
+		//Delete unknown elements from requested ones
+		final Iterator<PersonalAttribute> iterator = attrRequest.getPersonalAttributeList().iterator();
+        IPersonalAttributeList cleanPerAttrList = (PersonalAttributeList) attrRequest.getPersonalAttributeList();
+		while (iterator.hasNext()) {
+
+			final PersonalAttribute attribute = iterator.next();
+
+			// Verify if the attribute name exits.
+			final String attributeName = super.getSamlCoreProperties()
+			.getProperty(attribute.getName());
+
+			if (StringUtils.isBlank(attributeName)) {
+				LOG.info("Attribute name: {} was not found. It will be removed from the request object", attribute.getName());
+				cleanPerAttrList.remove(attribute.getName());
+			}
+
+		}	
+		attrRequest.setPersonalAttributeList(cleanPerAttrList);
+
+		return attrRequest;
+
+	}
+	
+	/**
+	 * Validate stork logout request.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * 
+	 * @return the STORK logout request
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKLogoutRequest validateSTORKLogoutRequest(final byte[] tokenSaml)
+	throws STORKSAMLEngineException {
+		LOG.info("validateSTORKLogoutRequest");
+
+		final LogoutRequest samlRequest = (LogoutRequest)validateStorkSaml(tokenSaml);
+
+		LOG.debug("Validate Extensions.");
+		final Validator<Extensions> validatorExt = new ExtensionsSchemaValidator();
+		try {
+			validatorExt.validate(samlRequest.getExtensions());
+		} catch (ValidationException e) {
+			LOG.error("ValidationException: validate Extensions.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		LOG.debug("Generate STORKLogoutRequest.");
+		final STORKLogoutRequest logoutRequest = new STORKLogoutRequest();
+
+		logoutRequest.setCountry(this.getCountry(samlRequest.getSignature()
+				.getKeyInfo()));
+		
+		logoutRequest.setAlias(this.getAlias(samlRequest.getSignature()
+				.getKeyInfo(), super.getSigner().getTrustStore()));
+		
+		logoutRequest.setSamlId(samlRequest.getID());
+		logoutRequest.setDestination(samlRequest.getDestination());
+		
+		logoutRequest.setIssuer(samlRequest.getIssuer().getValue());
+
+		logoutRequest.setSpProvidedId(samlRequest.getNameID().getValue());
+
+		return logoutRequest;
+
+	}
+
+	/**
+	 * Validate stork authentication response.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * @param userIP the user IP
+	 * 
+	 * @return the Stork authentication response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAuthnResponse validateSTORKAuthnResponse(
+			final byte[] tokenSaml, final String userIP)
+	throws STORKSAMLEngineException {
+
+		LOG.info("validateSTORKAuthnResponse");
+		final Response samlResponse = (Response) validateStorkSaml(tokenSaml);
+
+		LOG.debug("Create StorkAuthResponse.");
+		final STORKAuthnResponse authnResponse = new STORKAuthnResponse();
+
+		authnResponse.setCountry(this.getCountry(samlResponse.getSignature()
+				.getKeyInfo()));
+
+		LOG.debug("Set ID.");
+		authnResponse.setSamlId(samlResponse.getID());
+		LOG.debug("Set InResponseTo.");
+		authnResponse.setInResponseTo(samlResponse.getInResponseTo());
+		LOG.debug("Set statusCode.");
+		authnResponse.setStatusCode(samlResponse.getStatus().getStatusCode()
+				.getValue());
+
+		// Subordinate code.
+		if (samlResponse.getStatus().getStatusCode().getStatusCode() != null) {
+			authnResponse.setSubStatusCode(samlResponse.getStatus()
+					.getStatusCode().getStatusCode().getValue());
+		}
+
+		if (samlResponse.getStatus().getStatusMessage() != null) {
+			LOG.debug("Set statusMessage.");
+			authnResponse.setMessage(samlResponse.getStatus()
+					.getStatusMessage().getMessage());
+		}
+
+		LOG.debug("validateStorkResponse");
+		final Assertion assertion = (Assertion) validateStorkResponse(
+				samlResponse, userIP);	
+		
+		if(assertion!=null){
+			final DateTime serverDate = new DateTime();
+
+			if (assertion.getConditions().getNotOnOrAfter().isBefore(serverDate)) {
+				LOG.error("Token date expired (getNotOnOrAfter =  "
+						+ assertion.getConditions().getNotOnOrAfter()
+						+ ", server_date: " + serverDate + ")");
+				throw new STORKSAMLEngineException(
+						"Token date expired (getNotOnOrAfter =  "
+						+ assertion.getConditions().getNotOnOrAfter()
+						+ " ), server_date: " + serverDate);
+			}
+
+			LOG.debug("Set notOnOrAfter.");
+			authnResponse.setNotOnOrAfter(assertion.getConditions()
+					.getNotOnOrAfter());
+
+			LOG.debug("Set notBefore.");
+			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
+
+			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
+
+			authnResponse.setAudienceRestriction(((AudienceRestriction) assertion
+					.getConditions().getAudienceRestrictions().get(0))
+					.getAudiences().get(0).getAudienceURI());
+			authnResponse.setAssertions(samlResponse.getAssertions());
+		}
+		
+		// Case no error.
+		if (assertion!=null && StatusCode.SUCCESS_URI.equalsIgnoreCase(authnResponse
+				.getStatusCode())) {
+			LOG.debug("Status Success. Set PersonalAttributeList.");
+			authnResponse
+			.setPersonalAttributeList(generatePersonalAttributeList(assertion));
+			authnResponse.setFail(false);
+		} else {
+			LOG.debug("Status Fail.");
+			authnResponse.setFail(true);
+		}		
+		LOG.debug("Return result.");
+		return authnResponse;
+
+	}
+	
+	/**
+	 * Validate stork authentication response.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * @param userIP the user IP
+	 * 
+	 * @return the Stork authentication response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAuthnResponse validateSTORKAuthnResponseWithQuery(
+			final byte[] tokenSaml, final String userIP)
+	throws STORKSAMLEngineException {
+
+		LOG.info("validateSTORKAuthnResponse");
+		final Response samlResponse = (Response) validateStorkSaml(tokenSaml);
+
+		LOG.debug("Create StorkAuthResponse.");
+		final STORKAuthnResponse authnResponse = new STORKAuthnResponse();
+
+		authnResponse.setCountry(this.getCountry(samlResponse.getSignature()
+				.getKeyInfo()));
+
+		LOG.debug("Set ID.");
+		authnResponse.setSamlId(samlResponse.getID());
+		LOG.debug("Set InResponseTo.");
+		authnResponse.setInResponseTo(samlResponse.getInResponseTo());
+		LOG.debug("Set statusCode.");
+		authnResponse.setStatusCode(samlResponse.getStatus().getStatusCode()
+				.getValue());
+
+		// Subordinate code.
+		if (samlResponse.getStatus().getStatusCode().getStatusCode() != null) {
+			authnResponse.setSubStatusCode(samlResponse.getStatus()
+					.getStatusCode().getStatusCode().getValue());
+		}
+
+		if (samlResponse.getStatus().getStatusMessage() != null) {
+			LOG.debug("Set statusMessage.");
+			authnResponse.setMessage(samlResponse.getStatus()
+					.getStatusMessage().getMessage());
+		}
+
+		LOG.debug("validateStorkResponse");
+		final Assertion assertion = (Assertion) validateStorkResponse(
+				samlResponse, userIP);	
+		
+		if(assertion!=null){
+			final DateTime serverDate = new DateTime();
+
+			if (assertion.getConditions().getNotOnOrAfter().isBefore(serverDate)) {
+				LOG.error("Token date expired (getNotOnOrAfter =  "
+						+ assertion.getConditions().getNotOnOrAfter()
+						+ ", server_date: " + serverDate + ")");
+				throw new STORKSAMLEngineException(
+						"Token date expired (getNotOnOrAfter =  "
+						+ assertion.getConditions().getNotOnOrAfter()
+						+ " ), server_date: " + serverDate);
+			}
+
+			LOG.debug("Set notOnOrAfter.");
+			authnResponse.setNotOnOrAfter(assertion.getConditions()
+					.getNotOnOrAfter());
+
+			LOG.debug("Set notBefore.");
+			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
+
+			authnResponse.setNotBefore(assertion.getConditions().getNotBefore());
+
+			authnResponse.setAudienceRestriction(((AudienceRestriction) assertion
+					.getConditions().getAudienceRestrictions().get(0))
+					.getAudiences().get(0).getAudienceURI());
+		}
+		
+		// Case no error.
+		if (assertion!=null && StatusCode.SUCCESS_URI.equalsIgnoreCase(authnResponse
+				.getStatusCode())) {
+			LOG.debug("Status Success. Set PersonalAttributeList.");
+			authnResponse
+			.setPersonalAttributeList(generatePersonalAttributeList(assertion));
+			authnResponse.setFail(false);
+		} else {
+			LOG.debug("Status Fail.");
+			authnResponse.setFail(true);
+		}
+		
+		authnResponse.setAssertions(samlResponse.getAssertions());
+		if (samlResponse.getAssertions().size() > 1)
+		{
+			PersonalAttributeList total = new PersonalAttributeList();
+			List<IPersonalAttributeList> attrList = new ArrayList();
+			for (int i = 0; i < samlResponse.getAssertions().size(); i++)
+			{
+				Assertion tempAssertion = (Assertion)samlResponse.getAssertions().get(i);
+				IPersonalAttributeList temp = generatePersonalAttributeList(tempAssertion);
+				if (temp != null)
+				{ 
+					attrList.add(temp);
+					for (PersonalAttribute attribute : temp) {
+						PersonalAttribute attr = (PersonalAttribute)attribute.clone();
+						attr.setName(attr.getName()+tempAssertion.getID());
+						total.add(attr);
+					}
+				}
+			}
+			authnResponse.setPersonalAttributeLists(attrList);
+			authnResponse.setTotalPersonalAttributeList(total);
+		}
+		
+		LOG.debug("Return result.");
+		return authnResponse;
+
+	}
+	
+	/**
+	 * Validate stork attribute query response.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * @param userIP the user IP
+	 * 
+	 * @return the Stork attribute query response
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	public STORKAttrQueryResponse validateSTORKAttrQueryResponse(
+			final byte[] tokenSaml, final String userIP)
+	throws STORKSAMLEngineException {
+
+		LOG.info("validateSTORKAttrQueryResponse");
+		final Response samlResponse = (Response) validateStorkSaml(tokenSaml);
+
+		LOG.debug("Create StorkAttrQueryResponse.");
+		final STORKAttrQueryResponse attrQueryResponse = new STORKAttrQueryResponse();
+
+		attrQueryResponse.setCountry(this.getCountry(samlResponse.getSignature()
+				.getKeyInfo()));
+
+		LOG.debug("Set ID.");
+		attrQueryResponse.setSamlId(samlResponse.getID());
+		LOG.debug("Set InResponseTo.");
+		attrQueryResponse.setInResponseTo(samlResponse.getInResponseTo());
+		LOG.debug("Set statusCode.");
+		attrQueryResponse.setStatusCode(samlResponse.getStatus().getStatusCode()
+				.getValue());
+		
+
+		// Subordinate code.
+		if (samlResponse.getStatus().getStatusCode().getStatusCode() != null) {
+			attrQueryResponse.setSubStatusCode(samlResponse.getStatus()
+					.getStatusCode().getStatusCode().getValue());
+		}
+
+		if (samlResponse.getStatus().getStatusMessage() != null) {
+			LOG.debug("Set statusMessage.");
+			attrQueryResponse.setMessage(samlResponse.getStatus()
+					.getStatusMessage().getMessage());
+		}
+
+		LOG.debug("validateStorkResponse");
+		final Assertion assertion = (Assertion) validateStorkResponse(
+				samlResponse, userIP);	
+		
+		if(assertion!=null){
+			final DateTime serverDate = new DateTime();
+
+			attrQueryResponse.setAssertion(assertion);
+
+			if (assertion.getConditions().getNotOnOrAfter().isBefore(serverDate)) {
+				LOG.error("Token date expired (getNotOnOrAfter =  "
+						+ assertion.getConditions().getNotOnOrAfter()
+						+ ", server_date: " + serverDate + ")");
+				throw new STORKSAMLEngineException(
+						"Token date expired (getNotOnOrAfter =  "
+						+ assertion.getConditions().getNotOnOrAfter()
+						+ " ), server_date: " + serverDate);
+			}
+
+			LOG.debug("Set notOnOrAfter.");
+			attrQueryResponse.setNotOnOrAfter(assertion.getConditions()
+					.getNotOnOrAfter());
+
+			LOG.debug("Set notBefore.");
+			attrQueryResponse.setNotBefore(assertion.getConditions().getNotBefore());
+
+			attrQueryResponse.setNotBefore(assertion.getConditions().getNotBefore());
+
+			attrQueryResponse.setAudienceRestriction(((AudienceRestriction) assertion
+					.getConditions().getAudienceRestrictions().get(0))
+					.getAudiences().get(0).getAudienceURI());
+		}
+		
+		// Case no error.
+		if (assertion!=null && StatusCode.SUCCESS_URI.equalsIgnoreCase(attrQueryResponse
+				.getStatusCode())) {
+			LOG.debug("Status Success. Set PersonalAttributeList.");
+			attrQueryResponse
+			.setPersonalAttributeList(generatePersonalAttributeList(assertion));
+			attrQueryResponse.setFail(false);
+		} else {
+			LOG.debug("Status Fail.");
+			attrQueryResponse.setFail(true);
+		}
+		
+		attrQueryResponse.setAssertions(samlResponse.getAssertions());
+		if (samlResponse.getAssertions().size() > 1)
+		{
+			PersonalAttributeList total = new PersonalAttributeList();
+			List<IPersonalAttributeList> attrList = new ArrayList();
+			for (int i = 0; i < samlResponse.getAssertions().size(); i++)
+			{
+				Assertion tempAssertion = (Assertion)samlResponse.getAssertions().get(i);
+				IPersonalAttributeList temp = generatePersonalAttributeList(tempAssertion);
+				if (temp != null)
+				{ 
+					attrList.add(temp);
+					for (PersonalAttribute attribute : temp) {
+						PersonalAttribute attr = (PersonalAttribute)attribute.clone();
+						attr.setName(attr.getName()+tempAssertion.getID());
+						total.add(attr);
+					}
+				}
+			}
+			attrQueryResponse.setPersonalAttributeLists(attrList);
+			attrQueryResponse.setTotalPersonalAttributeList(total);
+		}
+		
+		LOG.debug("Return result.");
+		return attrQueryResponse;
+
+	}
+
+	/**
+	 * Validate stork response.
+	 * 
+	 * @param samlResponse the SAML response
+	 * @param userIP the user IP
+	 * 
+	 * @return the assertion
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private Assertion validateStorkResponse(final Response samlResponse,
+			final String userIP) throws STORKSAMLEngineException {
+		// Exist only one Assertion
+
+		if (samlResponse.getAssertions() == null
+				|| samlResponse.getAssertions().isEmpty()) {
+			LOG.info("Assertion is null or empty."); //in replace of throw new STORKSAMLEngineException("Assertion is null or empty.")
+			return null;
+		}
+
+		final Assertion assertion = (Assertion) samlResponse.getAssertions()
+		.get(0);
+
+		LOG.debug("Verified method Bearer");
+		for (final Iterator<SubjectConfirmation> iter = assertion.getSubject()
+				.getSubjectConfirmations().iterator(); iter.hasNext();) {
+			final SubjectConfirmation element = iter.next();
+			final boolean isBearer = SubjectConfirmation.METHOD_BEARER
+			.equals(element.getMethod());
+
+			final boolean ipValidate = super.getSamlCoreProperties()
+			.isIpValidation();
+
+			if (ipValidate) {
+				if (isBearer) {
+					if (StringUtils.isBlank(userIP)) {
+						LOG.error("browser_ip is null or empty.");
+						throw new STORKSAMLEngineException(
+						"browser_ip is null or empty.");
+					} else if (StringUtils.isBlank(element
+							.getSubjectConfirmationData().getAddress())) {
+						LOG.error("token_ip attribute is null or empty.");
+						throw new STORKSAMLEngineException(
+						"token_ip attribute is null or empty.");
+					}
+				}
+
+				final boolean ipEqual = element.getSubjectConfirmationData()
+				.getAddress().equals(userIP);
+
+				// Validation ipUser
+				if (!ipEqual && ipValidate) {
+					LOG.error("SubjectConfirmation BEARER: ");
+					throw new STORKSAMLEngineException(
+							"IPs doesn't match : token_ip ("
+							+ element.getSubjectConfirmationData()
+							.getAddress() + ") browser_ip ("
+							+ userIP + ")");
+				}
+			}
+
+		}
+		return assertion;
+	}
+
+	/**
+	 * Validate stork SAML.
+	 * 
+	 * @param tokenSaml the token SAML
+	 * 
+	 * @return the signable SAML object
+	 * 
+	 * @throws STORKSAMLEngineException the STORKSAML engine exception
+	 */
+	private SignableSAMLObject validateStorkSaml(final byte[] tokenSaml)
+	throws STORKSAMLEngineException {
+
+		LOG.info("Validate StorkSaml message.");
+
+		if (tokenSaml == null) {
+			LOG.error("Saml authentication request is null.");
+			throw new STORKSAMLEngineException(
+			"Saml authentication request is null.");
+		}
+
+		LOG.debug("Generate AuthnRequest from request.");
+		SignableSAMLObject samlObject;
+
+		try {			
+			samlObject = (SignableSAMLObject) super.unmarshall(tokenSaml);
+		} catch (SAMLEngineException e) {
+			LOG.error("SAMLEngineException unmarshall.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		boolean validateSign = true;
+
+		if (StringUtils.isNotBlank(super.getSamlCoreProperties().getProperty(
+		"validateSignature"))) {
+			validateSign = Boolean.valueOf(super.getSamlCoreProperties()
+					.getProperty("validateSignature"));
+		}
+
+		if (validateSign) {
+			LOG.debug("Validate Signature.");
+			try {
+				super.validateSignature(samlObject);
+			} catch (SAMLEngineException e) {
+				LOG.error("SAMLEngineException validateSignature.", e);
+				throw new STORKSAMLEngineException(e);
+			}
+		}
+
+		LOG.debug("Validate Schema.");
+		final ValidatorSuite validatorSuite = Configuration
+		.getValidatorSuite("saml2-core-schema-validator");
+		try {			
+			if (samlObject.getElementQName().toString().endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
+			{
+				CustomAttributeQueryValidator val = 
+					new CustomAttributeQueryValidator();
+				val.validate((CustomAttributeQuery)samlObject);
+			}
+			else if (samlObject instanceof Response 
+					&& ((Response) samlObject).getAssertions().size() > 1) {
+							 MultipleAssertionResponseValidator val = 
+									 new MultipleAssertionResponseValidator();
+							 val.validate((Response)samlObject);
+			}
+			else
+				validatorSuite.validate(samlObject);
+		} catch (ValidationException e) {
+			LOG.error("ValidationException.", e);
+			throw new STORKSAMLEngineException(e);
+		}
+
+		return samlObject;
+	}
+	
+	private boolean isComplex(XMLObject xmlObject)
+	{
+		boolean isComplex = false;
+		
+		final XSAnyImpl complexValue = (XSAnyImpl) xmlObject;
+
+		for (int nextComplexValue = 0; nextComplexValue < complexValue
+				.getUnknownXMLObjects().size(); nextComplexValue++) {
+
+			final XSAnyImpl simple = (XSAnyImpl) complexValue
+					.getUnknownXMLObjects().get(
+							nextComplexValue);
+			
+			if (simple.getElementQName().getLocalPart() != null)
+			{
+				isComplex = true;
+				break;
+			}
+		}
+		
+		return isComplex;
+	}	
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java
new file mode 100644
index 000000000..724a522d1
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/X509PrincipalUtil.java
@@ -0,0 +1,69 @@
+package eu.stork.peps.auth.engine;
+
+import org.bouncycastle.asn1.DERObjectIdentifier;
+import org.bouncycastle.jce.X509Principal;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility class used to decrease complexity of comparison of 2 X509principal
+ *
+ * @author vanegdi
+ * @version $Revision: 1.00 $, $Date: 2013-05-24 20:53:51 $
+ */
+public final class X509PrincipalUtil{
+
+    private static final DERObjectIdentifier[] DER_OBJECT_IDENTIFIERS_ARRAY= {
+            X509Principal.CN,
+            X509Principal.OU,
+            X509Principal.O,
+            X509Principal.L,
+            X509Principal.ST,
+            X509Principal.C,
+            X509Principal.E
+    };
+    
+    private static final Logger LOG = LoggerFactory.getLogger(eu.stork.peps.auth.engine.X509PrincipalUtil.class);
+
+    /**
+     * Compares 2 X509Principals to detect if they equals
+     * @param principal1
+     * @param principal2
+     * @return true if arguments are not null and equals
+     */
+    public static boolean equals(X509Principal principal1, X509Principal principal2) {
+        boolean continueProcess = true;
+        if (principal1 == null || principal2 == null){
+            return false;
+        }
+        
+        int cpt = 0;
+        while(continueProcess && cpt < DER_OBJECT_IDENTIFIERS_ARRAY.length){
+            continueProcess = continueProcess && x509ValuesByIdentifierEquals(principal1, principal2, DER_OBJECT_IDENTIFIERS_ARRAY[cpt]);
+            cpt++;
+        }
+        return continueProcess;
+    }
+    
+    public static boolean equals2(X509Principal principal1, X509Principal principal2) {
+        
+        if (principal1 == null || principal2 == null){
+            return false;
+        }
+        
+        if (principal1.getName().equals(principal2.getName()))
+        	return true;
+        else
+        	return false;
+        
+    }
+
+    private static boolean x509ValuesByIdentifierEquals(X509Principal principal1, X509Principal principal2, DERObjectIdentifier identifier){
+        return principal1.getValues(identifier).equals(principal2.getValues(identifier));
+    }
+
+    private X509PrincipalUtil(){
+        // default contructor
+        LOG.error("Fake X509PrincipalUtil : never be called");
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java
new file mode 100644
index 000000000..a9efe6362
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/AuthenticationAttributes.java
@@ -0,0 +1,57 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface AuthenticationAttributes.
+ * @author fjquevedo
+ */
+public interface AuthenticationAttributes extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "AuthenticationAttributes";
+
+    /** Default element name. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** Local name of the XSI type. */
+    String TYPE_LOCAL_NAME = "AuthenticationAttributesType";
+
+    /** QName of the XSI type. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+
+    /**
+     * Gets the citizen country code.
+     * 
+     * @return the citizen country code
+     */
+    VIDPAuthenticationAttributes getVIDPAuthenticationAttributes();
+    
+
+    /**
+     * Sets the vIDP authentication attributes.
+     * 
+     * @param newVIDPAuthenticationAttr the new vIDP authentication attributes
+     */
+    void setVIDPAuthenticationAttributes(VIDPAuthenticationAttributes newVIDPAuthenticationAttr);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java
new file mode 100644
index 000000000..4af7524ea
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CitizenCountryCode.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface EIDCrossBorderShare.
+ * @author fjquevedo
+ */
+public interface CitizenCountryCode extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "CitizenCountryCode";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "CitizenCountryCodeType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /**
+     * Gets the SP country.
+     * 
+     * @return the sP country
+     */
+    String getCitizenCountryCode();
+
+
+    /**
+     * Sets the citizen country code.
+     * 
+     * @param citizenCountryCode the new citizen country code
+     */
+    void setCitizenCountryCode(String citizenCountryCode);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java
new file mode 100644
index 000000000..b558fc19d
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomAttributeQuery.java
@@ -0,0 +1,51 @@
+package eu.stork.peps.auth.engine.core;
+
+import java.util.List;
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml2.core.Attribute;
+import org.opensaml.saml2.core.Subject;
+import org.opensaml.saml2.core.SubjectQuery;
+
+public interface CustomAttributeQuery extends CustomRequestAbstractType {
+	/** Element local name. */
+    public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeQuery";
+
+    /** Default element name. */
+    public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
+            SAMLConstants.SAML20P_PREFIX);
+
+    /** Local name of the XSI type. */
+    public static final String TYPE_LOCAL_NAME = "CustomAttributeQueryType";
+
+    /** QName of the XSI type. */
+    public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
+            SAMLConstants.SAML20P_PREFIX);
+    
+    /** AssertionConsumerServiceURL attribute name. */
+    public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME 
+    	= "AssertionConsumerServiceURL";
+
+    /**
+     * Gets the Attributes of this query.
+     * 
+     * @return the list of Attributes of this query
+     */
+    public List<Attribute> getAttributes();       
+    
+    /**
+     * Gets the Subject of this request.
+     * 
+     * @return the Subject of this request
+     */
+    public Subject getSubject();
+
+    /**
+     * Sets the Subject of this request.
+     * 
+     * @param newSubject the Subject of this request
+     */
+    public void setSubject(Subject newSubject);
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java
new file mode 100644
index 000000000..77dd8c4a5
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/CustomRequestAbstractType.java
@@ -0,0 +1,176 @@
+package eu.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.joda.time.DateTime;
+import org.opensaml.common.SAMLVersion;
+import org.opensaml.common.SignableSAMLObject;
+import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml2.common.Extensions;
+import org.opensaml.saml2.core.Issuer;
+
+public interface CustomRequestAbstractType extends SignableSAMLObject {
+	
+	/** Local name of the XSI type. */
+    public static final String TYPE_LOCAL_NAME = "RequestAbstractType";
+
+    /** QName of the XSI type. */
+    public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
+            SAMLConstants.SAML20P_PREFIX);
+
+    /** ID attribute name. */
+    public static final String ID_ATTRIB_NAME = "ID";
+
+    /** Version attribute name. */
+    public static final String VERSION_ATTRIB_NAME = "Version";
+
+    /** IssueInstant attribute name. */
+    public static final String ISSUE_INSTANT_ATTRIB_NAME = "IssueInstant";
+
+    /** Destination attribute name. */
+    public static final String DESTINATION_ATTRIB_NAME = "Destination";
+    
+    /** Destination attribute name. */
+    public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME = "AssertionConsumerServiceURL";
+
+    /** Consent attribute name. */
+    public static final String CONSENT_ATTRIB_NAME = "Consent";
+
+    /** Unspecified consent URI. */
+    public static final String UNSPECIFIED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unspecified";
+
+    /** Obtained consent URI. */
+    public static final String OBTAINED_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:obtained";
+
+    /** Prior consent URI. */
+    public static final String PRIOR_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:prior";
+
+    /** Implicit consent URI. */
+    public static final String IMPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:current-implicit";
+
+    /** Explicit consent URI. */
+    public static final String EXPLICIT_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:current-explicit";
+
+    /** Unavailable consent URI. */
+    public static final String UNAVAILABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:unavailable";
+
+    /** Inapplicable consent URI. */
+    public static final String INAPPLICABLE_CONSENT = "urn:oasis:names:tc:SAML:2.0:consent:inapplicable";
+
+    /**
+     * Gets the SAML Version of this request.
+     * 
+     * @return the SAML Version of this request.
+     */
+    public SAMLVersion getVersion();
+
+    /**
+     * Sets the SAML Version of this request.
+     * 
+     * @param newVersion the SAML Version of this request
+     */
+    public void setVersion(SAMLVersion newVersion);
+
+    /**
+     * Gets the unique identifier of the request.
+     * 
+     * @return the unique identifier of the request
+     */
+    public String getID();
+
+    /**
+     * Sets the unique identifier of the request.
+     * 
+     * @param newID the unique identifier of the request
+     */
+
+    public void setID(String newID);
+
+    /**
+     * Gets the date/time the request was issued.
+     * 
+     * @return the date/time the request was issued
+     */
+
+    public DateTime getIssueInstant();
+
+    /**
+     * Sets the date/time the request was issued.
+     * 
+     * @param newIssueInstant the date/time the request was issued
+     */
+    public void setIssueInstant(DateTime newIssueInstant);
+
+    /**
+     * Gets the URI of the destination of the request.
+     * 
+     * @return the URI of the destination of the request
+     */
+    public String getDestination();
+
+    /**
+     * Sets the URI of the destination of the request.
+     * 
+     * @param newDestination the URI of the destination of the request
+     */
+    public void setDestination(String newDestination);
+    
+    /**
+     * Sets the index of the particular Assertion Consumer Service to which the response to this request should be
+     * delivered.
+     * 
+     * @param newAssertionConsumerServiceIndex the new value of the AssertionConsumerServiceIndex attribute
+     */
+    public void setAssertionConsumerServiceURL(String newServiceUrl);
+
+    /**
+     * Gets the URL of the particular Assertion Consumer Service to which the response to this request should be
+     * delivered.
+     * 
+     * @return the value of the AssertionConsumerServiceURL attribute
+     */
+    public String getAssertionConsumerServiceURL();
+
+    /**
+     * Gets the consent obtained from the principal for sending this request.
+     * 
+     * @return the consent obtained from the principal for sending this request
+     */
+    public String getConsent();
+
+    /**
+     * Sets the consent obtained from the principal for sending this request.
+     * 
+     * @param newConsent the new consent obtained from the principal for sending this request
+     */
+    public void setConsent(String newConsent);
+
+    /**
+     * Gets the issuer of this request.
+     * 
+     * @return the issuer of this request
+     */
+    public Issuer getIssuer();
+
+    /**
+     * Sets the issuer of this request.
+     * 
+     * @param newIssuer the issuer of this request
+     */
+    public void setIssuer(Issuer newIssuer);
+
+    /**
+     * Gets the Extensions of this request.
+     * 
+     * @return the Status of this request
+     */
+    public Extensions getExtensions();
+
+    /**
+     * Sets the Extensions of this request.
+     * 
+     * @param newExtensions the Extensions of this request
+     */
+    public void setExtensions(Extensions newExtensions);
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java
new file mode 100644
index 000000000..03541ece1
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossBorderShare.java
@@ -0,0 +1,58 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface EIDCrossBorderShare.
+ * @author fjquevedo
+ */
+public interface EIDCrossBorderShare extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "eIDCrossBorderShare";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "eIDCrossBorderShareType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+    
+   
+    /**
+     * Gets the eID cross border share.
+     *
+     * @return the eID cross border share
+     */
+    String getEIDCrossBorderShare();
+
+
+    /**
+     * Sets the eID cross border share.
+     *
+     * @param eIDCrossBorderShare the new eID cross border share
+     */
+    void setEIDCrossBorderShare(String eIDCrossBorderShare);
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java
new file mode 100644
index 000000000..14c504510
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDCrossSectorShare.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface EIDCrossSectorShare.
+ * @author fjquevedo
+ */
+public interface EIDCrossSectorShare extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String ELEM_LOCAL_NAME = "eIDCrossSectorShare";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), ELEM_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "eIDCrossSectorShareType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+    
+    /**
+     * Gets the eID cross sector share.
+     *
+     * @return the eID cross sector share
+     */
+    String getEIDCrossSectorShare();
+
+    /**
+     * Sets the eID cross sector share.
+     *
+     * @param eIDCrossSectorShare the new eID cross sector share
+     */
+    void setEIDCrossSectorShare(String eIDCrossSectorShare);
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java
new file mode 100644
index 000000000..0202f000c
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/EIDSectorShare.java
@@ -0,0 +1,57 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface EIDSectorShare.
+ * @author fjquevedo
+ */
+public interface EIDSectorShare extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "eIDSectorShare";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "eIDSectorShare";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+    
+
+    /**
+     * Gets the eID sector share.
+     *
+     * @return the eID sector share
+     */
+    String getEIDSectorShare();
+
+    /**
+     * Sets the eID sector share.
+     *
+     * @param eIDSectorShare the new eID sector share
+     */
+    void setEIDSectorShare(String eIDSectorShare);
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java
new file mode 100644
index 000000000..d99d23896
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/QAAAttribute.java
@@ -0,0 +1,63 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * STORK Quality Authentication Assurance Level Attribute Interface.
+ * 
+ * @author fjquevedo
+ */
+public interface QAAAttribute extends SAMLObject {
+
+    /** Element local name. */
+    String DEF_LOCAL_NAME = "QualityAuthenticationAssuranceLevel";
+
+    /** Default element name. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** Local name of the XSI type. */
+    String TYPE_LOCAL_NAME = "QualityAuthenticationAssuranceLevelAbstractType";
+
+    /** QName of the XSI type. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** The minimum value allowed. */
+    int MIN_VALUE = 1;
+
+    /** The Max value allowed. */
+    int MAX_VALUE = 4;
+
+    /**
+     * Gets the qAA level.
+     * 
+     * @return the qAA level
+     */
+    String getQaaLevel();
+
+    /**
+     * Sets the qAA level.
+     * 
+     * @param qaaLevel the new qAA level
+     * 
+     */
+    void setQaaLevel(String qaaLevel);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java
new file mode 100644
index 000000000..ffd32b3cf
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttribute.java
@@ -0,0 +1,140 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+import org.opensaml.xml.AttributeExtensibleXMLObject;
+import org.opensaml.xml.schema.XSBooleanValue;
+import org.opensaml.xml.XMLObject;
+
+/**
+ * The Interface RequestedAttribute.
+ * 
+ * @author fjquevedo
+ */
+public interface RequestedAttribute extends SAMLObject,
+	AttributeExtensibleXMLObject {
+
+    /** Element local name. */
+    String DEF_LOCAL_NAME = "RequestedAttribute";
+
+    /** Default element name. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** Local name of the XSI type. */
+    String TYPE_LOCAL_NAME = "RequestedAttributeAbstractType";
+
+    /** QName of the XSI type. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** NAME_ATTRIB_NAME attribute name. */
+    String NAME_ATTRIB_NAME = "Name";
+
+    /** NAME_FORMAT_ATTRIB_NAME attribute name. */
+    String NAME_FORMAT_ATTR = "NameFormat";
+
+    /** IS_REQUIRED_ATTRIB_NAME attribute name. */
+    String IS_REQUIRED_ATTR = "isRequired";
+
+    /** FRIENDLY_NAME_ATTRIB_NAME attribute name. */
+    String FRIENDLY_NAME_ATT = "FriendlyName";
+
+    /** Unspecified attribute format ID. */
+    String UNSPECIFIED = "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified";
+
+    /** URI reference attribute format ID. */
+    String URI_REFERENCE = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri";
+
+    /** Basic attribute format ID. */
+    String BASIC = "urn:oasis:names:tc:SAML:2.0:attrname-format:basic";
+
+    /**
+     * Gets the name.
+     * 
+     * @return the name
+     */
+    String getName();
+
+    /**
+     * Sets the name.
+     * 
+     * @param name the new name
+     */
+    void setName(String name);
+
+    /**
+     * Gets the name format.
+     * 
+     * @return the name format
+     */
+    String getNameFormat();
+
+    /**
+     * Sets the name format.
+     * 
+     * @param nameFormat the new name format
+     */
+    void setNameFormat(String nameFormat);
+
+    /**
+     * Gets the friendly name.
+     * 
+     * @return the friendly name
+     */
+    String getFriendlyName();
+
+    /**
+     * Sets the friendly name.
+     * 
+     * @param friendlyName the new friendly name
+     */
+    void setFriendlyName(String friendlyName);
+
+    /**
+     * Gets the checks if is required.
+     * 
+     * @return the checks if is required
+     */
+    String isRequired();
+
+    /**
+     * Gets the checks if is required xs boolean.
+     * 
+     * @return the checks if is required xs boolean
+     */
+    String getIsRequiredXSBoolean();
+
+    /**
+     * Sets the checks if is required.
+     * 
+     * @param newIsRequired the new checks if is required
+     */
+    void setIsRequired(String newIsRequired);
+
+    /**
+     * Gets the attribute values.
+     * 
+     * @return the attribute values
+     */
+    List<XMLObject> getAttributeValues();
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java
new file mode 100644
index 000000000..6e3da28c3
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/RequestedAttributes.java
@@ -0,0 +1,51 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface RequestedAttributes.
+ * 
+ * @author fjquevedo
+ */
+public interface RequestedAttributes extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "RequestedAttributes";
+
+    /** Default element name. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** Local name of the XSI type. */
+    String TYPE_LOCAL_NAME = "RequestedAttributesType";
+
+    /** QName of the XSI type. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /**
+     * Gets the attributes.
+     * 
+     * @return the attributes
+     */
+    List<RequestedAttribute> getAttributes();
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java
new file mode 100644
index 000000000..cbedcf7d9
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLCore.java
@@ -0,0 +1,98 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+/**
+ * The Enumeration SAMLCore.
+ * 
+ * @author fjquevedo
+ */
+
+public enum SAMLCore {
+    
+    /** The consent authentication request. */
+    CONSENT_AUTHN_REQ("consentAuthnRequest"),
+    
+    /** The consent authentication response. */
+    CONSENT_AUTHN_RES("consentAuthnResponse"),
+    
+    /** The FORC e_ auth n_ tag. */
+    FORCE_AUTHN_TAG("forceAuthN"),
+    
+    /** The I s_ passiv e_ tag. */
+    IS_PASSIVE_TAG("isPassive"),
+    
+    /** The FORMA t_ entity. */
+    FORMAT_ENTITY("formatEntity"),
+    
+    /** The FRIENDLY name. */
+    FRIENDLY_NAME("friendlyName"),
+    
+    /** The IS_REQUIRED AN ATTRIBUTE */
+    IS_REQUIRED("isRequired"),
+    
+    /** The PRO t_ bindin g_ tag. */
+    PROT_BINDING_TAG("protocolBinding"),
+    
+    /** The ASSER t_ con s_ tag. */
+    ASSERT_CONS_TAG("assertionConsumerServiceURL"),
+    
+    /** The REQUESTE r_ tag. */
+    REQUESTER_TAG("requester"),
+    
+    /** The RESPONDE r_ tag. */
+    RESPONDER_TAG("responder"),
+    
+    /** The STOR k10_ ns. */
+    STORK10_NS("urn:eu:stork:names:tc:STORK:1.0:assertion"),
+    
+    /** The STOR k10 p_ ns. */
+    STORK10P_NS("urn:eu:stork:names:tc:STORK:1.0:protocol"),
+    
+    /** The STOR k10_ prefix. */
+    STORK10_PREFIX("stork"),
+    
+    /** The STOR k10 p_ prefix. */
+    STORK10P_PREFIX("storkp"),
+    
+    /** The STOR k10_ bas e_ uri. */
+    STORK10_BASE_URI("http://www.stork.gov.eu/1.0/"),
+    
+    /** The ON e_ tim e_ use. */
+    ONE_TIME_USE("oneTimeUse");
+
+    /** The value. */
+    private String value;
+
+    /**
+     * Instantiates a new sAML core.
+     * 
+     * @param fullName the full name
+     */
+    private SAMLCore(final String fullName) {
+	this.value = fullName;
+    }	
+    
+    /**
+     * Gets the value.
+     * 
+     * @return the value
+     */
+    public String getValue() {
+	return value;
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java
new file mode 100644
index 000000000..e846983d8
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SAMLEngineSignI.java
@@ -0,0 +1,88 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+
+import org.opensaml.common.SAMLObject;
+import org.opensaml.common.SignableSAMLObject;
+
+import eu.stork.peps.exceptions.SAMLEngineException;
+
+/**
+ * The Interface SAMLEngineSignI.
+ * 
+ * @author fjquevedo
+ */
+public interface SAMLEngineSignI {
+
+    /**
+     * Sign.
+     * 
+     * @param tokenSaml the token SAML
+     * 
+     * @return the sAML object
+     * 
+     * @throws SAMLEngineException the SAML engine exception
+     */
+    SAMLObject sign(SignableSAMLObject tokenSaml) throws SAMLEngineException;
+
+    /**
+     * Gets the certificate.
+     * 
+     * @return the certificate
+     */
+    X509Certificate getCertificate();
+
+    /**
+     * Gets the trustStore used when validating SAMLTokens
+     * 
+     * @return the trustStore
+     *   
+     */
+	KeyStore getTrustStore();
+	
+    /**
+     * Validate signature.
+     * 
+     * @param tokenSaml the token SAML
+     * 
+     * @return the sAML object
+     * 
+     * @throws SAMLEngineException the SAML engine exception
+     */
+    SAMLObject validateSignature(SignableSAMLObject tokenSaml)
+	    throws SAMLEngineException;
+
+    /**
+     * Initialize the signature module.
+     * 
+     * @param fileConf the configuration file.
+     * 
+     * @throws SAMLEngineException the STORKSAML engine runtime
+     *             exception
+     */
+    void init(String fileConf) throws SAMLEngineException;
+
+    /**
+     * Load cryptographic service provider.
+     * 
+     * @throws SAMLEngineException the SAML engine exception
+     */
+    void loadCryptServiceProvider() throws SAMLEngineException;
+    
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java
new file mode 100644
index 000000000..9510bf790
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPApplication.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface SPApplication.
+ * 
+ * @author fjquevedo
+ */
+public interface SPApplication extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "spApplication";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "spApplicationType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /**
+     * Gets the service provider application.
+     * 
+     * @return the service provider application
+     */
+    String getSPApplication();
+
+    /**
+     * Sets the service provider application.
+     * 
+     * @param spApplication the new service provider application
+     */
+    void setSPApplication(String spApplication);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java
new file mode 100644
index 000000000..829ace878
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPCountry.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface SPCountry.
+ * 
+ * @author fjquevedo
+ */
+public interface SPCountry extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "spCountry";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "spCountryType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /**
+     * Gets the service provider country.
+     * 
+     * @return the service provider country
+     */
+    String getSPCountry();
+
+    /**
+     * Sets the service provider country.
+     * 
+     * @param spCountry the new service provider country
+     */
+    void setSPCountry(String spCountry);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPID.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPID.java
new file mode 100644
index 000000000..bd13f6dbf
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPID.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface EIDCrossBorderShare.
+ * @author iinigo
+ */
+public interface SPID extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "SPID";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "SPIDType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /**
+     * Gets the SP ID.
+     * 
+     * @return the SP ID
+     */
+    String getSPID();
+
+
+    /**
+     * Sets the SP ID.
+     * 
+     * @param SPID the new SP ID
+     */
+    void setSPID(String newSPID);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java
new file mode 100644
index 000000000..bc870c2cc
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInformation.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface EIDCrossBorderShare.
+ * @author iinigo
+ */
+public interface SPInformation extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "SPInformation";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "SPInformationType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /**
+     * Gets the SP Id.
+     * 
+     * @return the SP Id
+     */
+    SPID getSPID();
+
+
+    /**
+     * Sets the SP Id.
+     * 
+     * @param newSPId the new SP Id
+     */
+    void setSPID(SPID newSPID);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java
new file mode 100644
index 000000000..add45023c
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPInstitution.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface EIDCrossBorderShare.
+ * 
+ * @author fjquevedo
+ */
+public interface SPInstitution extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "spInstitution";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "spInstitutionType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /**
+     * Gets the service provider institution.
+     * 
+     * @return the service provider institution
+     */
+    String getSPInstitution();
+
+    /**
+     * Sets the service provider institution.
+     * 
+     * @param spInstitution the new service provider institution
+     */
+    void setSPInstitution(String spInstitution);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java
new file mode 100644
index 000000000..8322a0d47
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/SPSector.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface SPSector.
+ * 
+ * @author fjquevedo
+ */
+public interface SPSector extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "spSector";
+
+    /** The Constant DEFAULT_ELEMENT_NAME. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /** The Constant TYPE_LOCAL_NAME. */
+    String TYPE_LOCAL_NAME = "spSectorType";
+
+    /** The Constant TYPE_NAME. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10_PREFIX.getValue());
+
+    /**
+     * Gets the service provider sector.
+     * 
+     * @return the service provider sector
+     */
+    String getSPSector();
+
+    /**
+     * Sets the service provider sector.
+     * 
+     * @param spSector the new service provider sector
+     */
+    void setSPSector(String spSector);
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java
new file mode 100644
index 000000000..4c314ae68
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/STORKSAMLCore.java
@@ -0,0 +1,508 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import java.util.Properties;
+
+import org.apache.commons.lang.StringUtils;
+import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml2.core.NameIDType;
+import org.opensaml.saml2.core.RequestAbstractType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.exceptions.SAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
+
+/**
+ * The Class SAMLCore.
+ *
+ * @author fjquevedo
+ */
+public final class STORKSAMLCore {
+
+    /** The Constant LOGGER. */
+    private static final Logger LOGGER = LoggerFactory
+    .getLogger(STORKSAMLCore.class.getName());
+
+    /** The consent authentication request. */
+    private String consentAuthnReq = null;
+
+    /** The consent authentication response. */
+    private String consentAuthnResp = null;
+
+    /** The id cross border share. */
+    private String eIDCrossBordShare = null;
+
+    /** The e id cross sect share. */
+    private String eIDCrossSectShare = null;
+
+    /** The e id sector share. */
+    private String eIDSectorShare = null;
+
+    /** The format entity. */
+    private String formatEntity = null;
+
+    /** The friendly name. */
+    private boolean friendlyName = false;
+
+    /** The IP validation. */
+    private boolean ipValidation = false;
+
+    /** The one time use. */
+    private boolean oneTimeUse = true;
+
+    /** The protocol binding. */
+    private String protocolBinding = null;
+
+    /** The requester. */
+    private String requester = null;
+
+
+    /** The responder. */
+    private String responder = null;
+
+    /** The SAML core properties. */
+    private Properties samlCoreProp = null;
+
+    /** The time not on or after. */
+    private Integer timeNotOnOrAfter = null;
+
+    /** The is required parameter. */
+    private boolean isRequired = true;
+
+    private static final String SAML_ENGINE_LITERAL = "SamlEngine.xml: ";
+
+    /**
+    * Gets the isRequired.
+    *
+    * @return the isRequired
+    */
+    public boolean isRequired() {
+    	return isRequired;
+	}
+
+    /**
+     * Sets the isRequired.
+     *
+     * @param isRequired the required.
+     */
+	public void setRequired(boolean isRequired) {
+		this.isRequired = isRequired;
+	}
+
+	/**
+     * Instantiates a new sAML core.
+     *
+     * @param instance the instance
+     */
+    public STORKSAMLCore(final Properties instance) {
+	loadConfiguration(instance);
+    }
+
+    /**
+     * Gets the consent.
+     * 
+     * @return the consent
+     */
+    public String getConsentAuthnRequest() {
+	return consentAuthnReq;
+    }
+
+    /**
+     * Gets the consent authentication response.
+     * 
+     * @return the consent authentication response.
+     */
+    public String getConsentAuthnResp() {
+	return consentAuthnResp;
+    }
+
+    /**
+     * Gets the consent authentication response.
+     * 
+     * @return the consent authentication response
+     */
+    public String getConsentAuthnResponse() {
+	return consentAuthnResp;
+    }
+
+    /**
+     * Gets the format entity.
+     * 
+     * @return the format entity
+     */
+    public String getFormatEntity() {
+	return formatEntity;
+    }
+
+    /**
+     * Gets the property.
+     * 
+     * @param key the key
+     * 
+     * @return the property
+     */
+    public String getProperty(final String key) {
+	return samlCoreProp.getProperty(key);
+    }
+
+    /**
+     * Gets the protocol binding.
+     * 
+     * @return the protocol binding
+     */
+    public String getProtocolBinding() {
+	return protocolBinding;
+    }
+
+    /**
+     * Gets the requester.
+     * 
+     * @return the requester
+     */
+    public String getRequester() {
+	return requester;
+    }
+
+    /**
+     * Gets the responder.
+     * 
+     * @return the responder
+     */
+    public String getResponder() {
+	return responder;
+    }
+
+    /**
+     * Gets the time not on or after.
+     * 
+     * @return the time not on or after
+     */
+    public Integer getTimeNotOnOrAfter() {
+	return timeNotOnOrAfter;
+    }
+
+    /**
+     * Checks if is e id cross border share.
+     * 
+     * @return true, if is e id cross border share
+     */
+    public String iseIDCrossBorderShare() {
+	return eIDCrossBordShare;
+    }
+
+    /**
+     * Checks if is e id cross border share.
+     * 
+     * @return true, if is e id cross border share
+     */
+    public String iseIDCrossBordShare() {
+	return eIDCrossBordShare;
+    }
+
+    /**
+     * Checks if is e id cross sector share.
+     * 
+     * @return true, if is e id cross sector share
+     */
+    public String iseIDCrossSectorShare() {
+	return eIDCrossSectShare;
+    }
+
+    /**
+     * Checks if is e id cross sect share.
+     * 
+     * @return true, if is e id cross sect share
+     */
+    public String iseIDCrossSectShare() {
+	return eIDCrossSectShare;
+    }
+
+    /**
+     * Checks if is e id sector share.
+     * 
+     * @return true, if is e id sector share
+     */
+    public String iseIDSectorShare() {
+	return eIDSectorShare;
+    }
+
+    /**
+     * Checks if is friendly name.
+     * 
+     * @return true, if checks if is friendly name
+     */
+    public boolean isFriendlyName() {
+	return friendlyName;
+    }
+
+    /**
+     * Checks if is IP validation.
+     * 
+     * @return true, if is IP validation
+     */
+    public boolean isIpValidation() {
+	return ipValidation;
+    }
+
+    /**
+     * Checks if is one time use.
+     * 
+     * @return true, if is one time use
+     */
+    public boolean isOneTimeUse() {
+	return oneTimeUse;
+    }
+
+    /**
+     * Method that loads the configuration file for the SAML Engine.
+     * 
+     * @param instance the instance of the Engine properties.
+     */
+    private void loadConfiguration(final Properties instance) {
+
+        try {
+            LOGGER.info("SAMLCore: Loading SAMLEngine properties.");
+
+            samlCoreProp = instance;
+
+            final String parameter = samlCoreProp
+                    .getProperty(SAMLCore.FORMAT_ENTITY.getValue());
+
+            if ("entity".equalsIgnoreCase(parameter)) {
+                formatEntity = NameIDType.ENTITY;
+            }
+
+            friendlyName = Boolean.valueOf(samlCoreProp
+                    .getProperty(SAMLCore.FRIENDLY_NAME.getValue()));
+
+            String isRequiredValue = samlCoreProp.
+                    getProperty(SAMLCore.IS_REQUIRED.getValue());
+            if (isRequiredValue != null) {
+                isRequired = Boolean.valueOf(isRequiredValue);
+            }
+
+            eIDSectorShare = samlCoreProp
+                    .getProperty("eIDSectorShare");
+            eIDCrossSectShare = samlCoreProp
+                    .getProperty("eIDCrossSectorShare");
+            eIDCrossBordShare = samlCoreProp
+                    .getProperty("eIDCrossBorderShare");
+
+            ipValidation = Boolean.valueOf(samlCoreProp
+                    .getProperty("ipAddrValidation"));
+
+            final String oneTimeUseProp = samlCoreProp
+                    .getProperty(SAMLCore.ONE_TIME_USE.getValue());
+
+            if (StringUtils.isNotBlank(oneTimeUseProp)) {
+                oneTimeUse = Boolean.valueOf(oneTimeUseProp);
+            }
+
+            // Protocol Binding
+            loadProtocolBiding();
+
+            // Consent Authentication Request
+            consentAuthnReq = samlCoreProp
+                    .getProperty(SAMLCore.CONSENT_AUTHN_REQ.getValue());
+
+            if ("unspecified".equalsIgnoreCase(consentAuthnReq)) {
+                consentAuthnReq = RequestAbstractType.UNSPECIFIED_CONSENT;
+            }
+
+            loadConsentAuthResp();
+
+            timeNotOnOrAfter = Integer.valueOf(samlCoreProp
+                    .getProperty("timeNotOnOrAfter"));
+
+            if (timeNotOnOrAfter.intValue() < 0) {
+                LOGGER.error(SAML_ENGINE_LITERAL + "timeNotOnOrAfter"
+                        + " is negative number.");
+
+                throw new SAMLEngineException(SAML_ENGINE_LITERAL
+                        + "timeNotOnOrAfter" + " is negative number.");
+            }
+
+            requester = samlCoreProp.getProperty(SAMLCore.REQUESTER_TAG.getValue());
+            responder = samlCoreProp.getProperty(SAMLCore.RESPONDER_TAG.getValue());
+
+        } catch (SAMLEngineException e) {
+            LOGGER.error("SAMLCore: error loadConfiguration. ", e);
+            throw new STORKSAMLEngineRuntimeException(e);
+        } catch (RuntimeException e) {
+            LOGGER.error("SAMLCore: error loadConfiguration. ", e);
+            throw new STORKSAMLEngineRuntimeException(e);
+        }
+    }
+
+    /**
+     * Load consent authentication response.
+     */
+    private void loadConsentAuthResp() {
+	// Consent Authentication Response
+	consentAuthnResp = samlCoreProp
+		.getProperty(SAMLCore.CONSENT_AUTHN_RES.getValue());
+
+	if ("obtained".equalsIgnoreCase(consentAuthnResp)) {
+	    consentAuthnResp = RequestAbstractType.OBTAINED_CONSENT;
+	} else if ("prior".equalsIgnoreCase(consentAuthnResp)) {
+	    consentAuthnResp = RequestAbstractType.PRIOR_CONSENT;
+	} else if ("curent-implicit".equalsIgnoreCase(consentAuthnResp)) {
+	    consentAuthnResp = 
+		"urn:oasis:names:tc:SAML:2.0:consent:current-implicit";
+	} else if ("curent-explicit".equalsIgnoreCase(consentAuthnResp)) {
+	    consentAuthnResp = 
+		"urn:oasis:names:tc:SAML:2.0:consent:current-explicit";
+	} else if ("unspecified".equalsIgnoreCase(consentAuthnResp)) {
+	    consentAuthnResp = RequestAbstractType.UNSPECIFIED_CONSENT;
+	}
+    }
+
+    /**
+     * Load protocol biding.
+     * 
+     * @throws SAMLEngineException the SAML engine exception
+     */
+    private void loadProtocolBiding() throws SAMLEngineException {
+	// Protocol Binding
+	protocolBinding = samlCoreProp.getProperty(SAMLCore.PROT_BINDING_TAG.getValue());
+
+	if (StringUtils.isBlank(protocolBinding)) {
+	    LOGGER.error(SAML_ENGINE_LITERAL + SAMLCore.PROT_BINDING_TAG
+		    + " it's mandatory.");
+	    throw new SAMLEngineException(SAML_ENGINE_LITERAL
+		    + SAMLCore.PROT_BINDING_TAG + " it's mandatory.");
+	} else if (protocolBinding.equalsIgnoreCase("HTTP-POST")) {
+	    protocolBinding = SAMLConstants.SAML2_POST_BINDING_URI;
+	} else {
+	    LOGGER.error(SAML_ENGINE_LITERAL + SAMLCore.PROT_BINDING_TAG
+		    + " it's not supporting.");
+
+	    throw new SAMLEngineException(SAML_ENGINE_LITERAL
+		    + SAMLCore.PROT_BINDING_TAG + " it's not supporting.");
+	}
+    }
+
+    /**
+     * Sets the consent authentication response.
+     * 
+     * @param newConsAuthnResp the new consent authentication response
+     */
+    public void setConsentAuthnResp(final String newConsAuthnResp) {
+	this.consentAuthnResp = newConsAuthnResp;
+    }
+
+    /**
+     * Sets an eID that can be shared outside of the  Service Provider’s member state.
+     * 
+     * @param newEIDCrossBord the new eid cross border share
+     */
+    public void setEIDCrossBordShare(final String newEIDCrossBord) {
+	this.eIDCrossBordShare = newEIDCrossBord;
+    }
+
+    /**
+     * Sets an eID that can be shared outside of the  Service Provider’s sector.
+     * 
+     * @param newEIDCrossSect the new eid cross sect share
+     */
+    public void setEIDCrossSectShare(final String newEIDCrossSect) {
+	this.eIDCrossSectShare = newEIDCrossSect;
+    }
+
+    /**
+     * Sets an eID that can be shared within the Service Provider’s sector.
+     * 
+     * @param newEIDSectorShare the new eid sector share
+     */
+    public void seteIDSectorShare(final String newEIDSectorShare) {
+	this.eIDSectorShare = newEIDSectorShare;
+    }
+
+    /**
+     * Sets the format entity.
+     * 
+     * @param newFormatEntity the new format entity
+     */
+    public void setFormatEntity(final String newFormatEntity) {
+	this.formatEntity = newFormatEntity;
+    }
+
+    /**
+     * Sets the friendly name.
+     * 
+     * @param newFriendlyName the new friendly name
+     */
+    public void setFriendlyName(final boolean newFriendlyName) {
+	this.friendlyName = newFriendlyName;
+    }
+
+    /**
+     * Sets the IP validation.
+     * 
+     * @param newIpValidation the new IP validation
+     */
+    public void setIpValidation(final boolean newIpValidation) {
+	this.ipValidation = newIpValidation;
+    }
+
+    /**
+     * Sets the one time use.
+     * 
+     * @param newOneTimeUse the new one time use
+     */
+    public void setOneTimeUse(final boolean newOneTimeUse) {
+	this.oneTimeUse = newOneTimeUse;
+    }
+
+    /**
+     * Sets the protocol binding.
+     * 
+     * @param newProtBinding the new protocol binding
+     */
+    public void setProtocolBinding(final String newProtBinding) {
+	this.protocolBinding = newProtBinding;
+    }
+
+    /**
+     * Sets the requester.
+     * 
+     * @param newRequester the new requester
+     */
+    public void setRequester(final String newRequester) {
+	this.requester = newRequester;
+    }
+
+    /**
+     * Sets the responder.
+     * 
+     * @param newResponder the new responder
+     */
+    public void setResponder(final String newResponder) {
+	this.responder = newResponder;
+    }
+
+    /**
+     * Sets the time not on or after.
+     * 
+     * @param newTimeNotOnOrAft the new time not on or after
+     */
+    public void setTimeNotOnOrAfter(final Integer newTimeNotOnOrAft) {
+	this.timeNotOnOrAfter = newTimeNotOnOrAft;
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java
new file mode 100644
index 000000000..6ee9e0e1b
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/VIDPAuthenticationAttributes.java
@@ -0,0 +1,72 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.SAMLObject;
+
+/**
+ * The Interface VIDPAuthenticationAttributes.
+ * 
+ * @author fjquevedo
+ */
+public interface VIDPAuthenticationAttributes extends SAMLObject {
+
+    /** The Constant DEFAULT_ELEMENT_LOCAL_NAME. */
+    String DEF_LOCAL_NAME = "VIDPAuthenticationAttributes";
+
+    /** Default element name. */
+    QName DEF_ELEMENT_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), DEF_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+    /** Local name of the XSI type. */
+    String TYPE_LOCAL_NAME = "VIDPAuthenticationAttributesType";
+
+    /** QName of the XSI type. */
+    QName TYPE_NAME = new QName(SAMLCore.STORK10P_NS.getValue(), TYPE_LOCAL_NAME,
+	    SAMLCore.STORK10P_PREFIX.getValue());
+
+
+    /**
+     * Gets the citizen country code.
+     * 
+     * @return the citizen country code
+     */
+    CitizenCountryCode getCitizenCountryCode();
+    
+    /**
+     * Sets the citizen country code.
+     * 
+     * @param newCitizenCountryCode the new citizen country code
+     */
+    void setCitizenCountryCode(CitizenCountryCode newCitizenCountryCode);
+    
+    /**
+     * Gets the SP information
+     * 
+     * @return the SP information
+     */
+    SPInformation getSPInformation();
+    
+    /**
+     * Sets the SP information
+     * 
+     * @param newSPInformation the new SPInformation
+     */
+    void setSPInformation(SPInformation newSPInformation);
+     
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java
new file mode 100644
index 000000000..2d9039d4c
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesBuilder.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
+
+/**
+ * The Class AuthenticationAttributesBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class AuthenticationAttributesBuilder extends
+	AbstractSAMLObjectBuilder<AuthenticationAttributes> {
+
+
+
+    /**
+     * Builds the object.
+     *
+     * @return the authentication attributes
+     */
+    public final AuthenticationAttributes buildObject() {
+	return buildObject(AuthenticationAttributes.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * 
+     * @return the authentication attributes 
+     */
+    public final AuthenticationAttributes buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new AuthenticationAttributesImpl(namespaceURI, localName,
+		namespacePrefix);
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java
new file mode 100644
index 000000000..e0de20f7d
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesImpl.java
@@ -0,0 +1,109 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSignableSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
+import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class AuthenticationAttributesImpl.
+ * 
+ * @author fjquevedo
+ */
+public final class AuthenticationAttributesImpl extends AbstractSignableSAMLObject implements
+AuthenticationAttributes {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AuthenticationAttributesImpl.class.getName());
+
+    /** The indexed children. */
+    private VIDPAuthenticationAttributes vIDPAuthenAttr;
+
+    /**
+     * Instantiates a new authentication attributes implementation.
+     * 
+     * @param namespaceURI the namespace uri
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected AuthenticationAttributesImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {	
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+
+    /**
+     * Gets the ordered children.
+     * 
+     * @return the ordered children
+     * 
+     */
+    public List<XMLObject> getOrderedChildren() {
+	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
+
+	children.add(vIDPAuthenAttr);
+
+	if (getSignature() != null) {
+	    children.add(getSignature());
+	}
+
+	return Collections.unmodifiableList(children);
+    }
+
+    /**
+     * Gets the signature reference id.
+     * 
+     * @return the signature reference id
+     * 
+     */
+    public String getSignatureReferenceID() {	
+	return null;
+    }
+
+    /**
+     * Gets the vidp authentication attributes.
+     * 
+     * @return the VIDP authentication attributes
+     *
+     */
+    public VIDPAuthenticationAttributes getVIDPAuthenticationAttributes() {	
+	return vIDPAuthenAttr;
+    }
+
+    /**
+     * Sets the vidp authentication attributes.
+     * 
+     * @param newVIDPAuthenAttr the new vidp authen attr
+     *
+     */
+    public void setVIDPAuthenticationAttributes(
+	    final VIDPAuthenticationAttributes newVIDPAuthenAttr) {	
+	vIDPAuthenAttr = prepareForAssignment(this.vIDPAuthenAttr, newVIDPAuthenAttr);
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java
new file mode 100644
index 000000000..d31c052fe
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesMarshaller.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed under the EUPL, Version 1.1 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 at:
+ *
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ *
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+
+/**
+ * The Class AuthenticationAttributesMarshaller.
+ *
+ * @author fjquevedo
+ */
+public class AuthenticationAttributesMarshaller extends AbstractSAMLObjectMarshaller {
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java
new file mode 100644
index 000000000..113214712
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/AuthenticationAttributesUnmarshaller.java
@@ -0,0 +1,54 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.UnmarshallingException;
+
+import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
+
+import eu.stork.peps.auth.engine.core.AuthenticationAttributes;
+
+/**
+ * The Class AuthenticationAttributesUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class AuthenticationAttributesUnmarshaller extends
+AbstractSAMLObjectUnmarshaller {
+
+	/**
+	 * Process child element.
+	 * 
+	 * @param parentObject the parent object
+	 * @param childObject the child object
+	 * 
+	 * @throws UnmarshallingException the unmarshalling exception
+	 *
+	 */
+	protected final void processChildElement(final XMLObject parentObject,
+			final XMLObject childObject) throws UnmarshallingException {
+		final AuthenticationAttributes attrStatement = (AuthenticationAttributes) parentObject;
+
+		if (childObject instanceof VIDPAuthenticationAttributes) {
+			attrStatement.setVIDPAuthenticationAttributes((VIDPAuthenticationAttributes) childObject);
+		} else {
+			super.processChildElement(parentObject, childObject);
+		}
+	}
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java
new file mode 100644
index 000000000..64651691f
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeBuilder.java
@@ -0,0 +1,50 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.CitizenCountryCode;
+
+/**
+ * The Class CitizenCountryCodeBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class CitizenCountryCodeBuilder extends AbstractSAMLObjectBuilder<CitizenCountryCode> {
+
+    /**
+     * Builds the object.
+     *
+     * @return the citizen country code
+     */
+    public final CitizenCountryCode buildObject() {
+	return buildObject(CitizenCountryCode.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the citizen country code
+     */
+    public final CitizenCountryCode buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new CitizenCountryCodeImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java
new file mode 100644
index 000000000..374398cf1
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeImpl.java
@@ -0,0 +1,82 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.CitizenCountryCode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class CitizenCountryCodeImpl.
+ * 
+ * @author fjquevedo
+ */
+public class CitizenCountryCodeImpl extends AbstractSAMLObject implements CitizenCountryCode {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CitizenCountryCodeImpl.class.getName());
+    /** The citizen country code. */
+    private String citizenCountryCode;
+    
+    /**
+     * Instantiates a new sP country impl.
+     * 
+     * @param namespaceURI the namespace uri
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */   
+    protected CitizenCountryCodeImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);	
+    }
+
+    /**
+     * Gets the citizen country code.
+     *
+     * @return the citizen country code
+     */
+    public final String getCitizenCountryCode() {
+	return citizenCountryCode;
+    }
+
+    /**
+     * Sets the citizen country code.
+     *
+     * @param newCitizenCountryCode the new citizen country code
+     */
+    public final void setCitizenCountryCode(final String newCitizenCountryCode) {
+	this.citizenCountryCode = prepareForAssignment(this.citizenCountryCode, newCitizenCountryCode);
+    }
+
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java
new file mode 100644
index 000000000..decae04c5
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeMarshaller.java
@@ -0,0 +1,45 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.CitizenCountryCode;
+
+/**
+ * The Class SPCountryMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class CitizenCountryCodeMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall element content.
+     *
+     * @param samlObject the SAML object
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallElementContent(final XMLObject samlObject,
+	    final Element domElement) throws MarshallingException {
+	final CitizenCountryCode citizenCountryCode = (CitizenCountryCode) samlObject;
+	XMLHelper.appendTextContent(domElement, citizenCountryCode.getCitizenCountryCode());
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java
new file mode 100644
index 000000000..93132b508
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CitizenCountryCodeUnmarshaller.java
@@ -0,0 +1,41 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.CitizenCountryCode;
+
+/**
+ * The Class CitizenCountryCodeUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class CitizenCountryCodeUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process element content.
+     *
+     * @param samlObject the SAML object
+     * @param elementContent the element content
+     */
+    protected final void processElementContent(final XMLObject samlObject,
+	    final String elementContent) {
+	final CitizenCountryCode citizenCountryCode = (CitizenCountryCode) samlObject;
+	citizenCountryCode.setCitizenCountryCode(elementContent);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java
new file mode 100644
index 000000000..48da2a24b
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryBuilder.java
@@ -0,0 +1,26 @@
+package eu.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+import org.opensaml.common.xml.SAMLConstants;
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+
+public class CustomAttributeQueryBuilder extends AbstractSAMLObjectBuilder<CustomAttributeQuery> {
+	/**
+     * Constructor.
+     */
+    public CustomAttributeQueryBuilder() {
+
+    }
+
+    /** {@inheritDoc} */
+    public CustomAttributeQuery buildObject() {
+        return buildObject(SAMLConstants.SAML20P_NS, CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME,
+                SAMLConstants.SAML20P_PREFIX);
+    }
+
+    /** {@inheritDoc} */
+    public CustomAttributeQuery buildObject(String namespaceURI, String localName, String namespacePrefix) {
+        return new CustomAttributeQueryImpl(namespaceURI, localName, namespacePrefix);
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java
new file mode 100644
index 000000000..cbf9221eb
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryImpl.java
@@ -0,0 +1,65 @@
+package eu.stork.peps.auth.engine.core.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.opensaml.saml2.core.Attribute;
+import org.opensaml.saml2.core.impl.SubjectQueryImpl;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.util.XMLObjectChildrenList;
+
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+
+
+public class CustomAttributeQueryImpl extends SubjectQueryImpl implements CustomAttributeQuery {
+	/** Attribute child elements. */
+    private final XMLObjectChildrenList<Attribute> attributes;
+    private String serviceURL;
+
+    /**
+     * Constructor.
+     * 
+     * @param namespaceURI the namespace the element is in
+     * @param elementLocalName the local name of the XML element this Object represents
+     * @param namespacePrefix the prefix for the given namespace
+     */
+    protected CustomAttributeQueryImpl(String namespaceURI, String elementLocalName, String namespacePrefix) {
+        super(namespaceURI, elementLocalName, namespacePrefix);
+        attributes = new XMLObjectChildrenList<Attribute>(this);
+    }
+
+    /** {@inheritDoc} */
+    public List<Attribute> getAttributes() {
+        return attributes;
+    }
+
+    /** {@inheritDoc} */
+    public List<XMLObject> getOrderedChildren() {
+        ArrayList<XMLObject> children = new ArrayList<XMLObject>();
+
+        if (super.getOrderedChildren() != null) {
+            children.addAll(super.getOrderedChildren());
+        }
+        children.addAll(attributes);
+
+        if (children.size() == 0) {
+            return null;
+        }
+
+        return Collections.unmodifiableList(children);
+    }
+
+	@Override
+	public String getAssertionConsumerServiceURL() {
+		// TODO Auto-generated method stub
+		return this.serviceURL;
+	}
+
+	@Override
+	public void setAssertionConsumerServiceURL(String newServiceUrl) {
+		// TODO Auto-generated method stub
+		this.serviceURL = newServiceUrl;
+	}
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java
new file mode 100644
index 000000000..7f2013ca8
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryMarshaller.java
@@ -0,0 +1,50 @@
+package eu.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.Configuration;
+import org.opensaml.saml2.core.RequestAbstractType;
+import org.opensaml.saml2.core.impl.SubjectQueryMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.CustomRequestAbstractType;
+
+public class CustomAttributeQueryMarshaller extends SubjectQueryMarshaller {
+	
+	/** {@inheritDoc} */
+    protected void marshallAttributes(XMLObject samlObject, Element domElement) throws MarshallingException {
+        CustomRequestAbstractType req = (CustomRequestAbstractType) samlObject;
+
+        if (req.getVersion() != null) {
+            domElement.setAttributeNS(null, RequestAbstractType.VERSION_ATTRIB_NAME, req.getVersion().toString());
+        }
+
+        if (req.getID() != null) {
+            domElement.setAttributeNS(null, RequestAbstractType.ID_ATTRIB_NAME, req.getID());
+            domElement.setIdAttributeNS(null, RequestAbstractType.ID_ATTRIB_NAME, true);
+        }
+
+        if (req.getVersion() != null) {
+            domElement.setAttributeNS(null, RequestAbstractType.VERSION_ATTRIB_NAME, req.getVersion().toString());
+        }
+
+        if (req.getIssueInstant() != null) {
+            String iiStr = Configuration.getSAMLDateFormatter().print(req.getIssueInstant());
+            domElement.setAttributeNS(null, RequestAbstractType.ISSUE_INSTANT_ATTRIB_NAME, iiStr);
+        }
+
+        if (req.getDestination() != null) {
+            domElement.setAttributeNS(null, RequestAbstractType.DESTINATION_ATTRIB_NAME, req.getDestination());
+        }
+        
+        if (req.getAssertionConsumerServiceURL() != null) {
+            domElement.setAttributeNS(null, CustomRequestAbstractType.ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME, req.getAssertionConsumerServiceURL());
+        }
+
+        if (req.getConsent() != null) {
+            domElement.setAttributeNS(null, RequestAbstractType.CONSENT_ATTRIB_NAME, req.getConsent());
+        }
+    }
+
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java
new file mode 100644
index 000000000..e351b65b0
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/CustomAttributeQueryUnmarshaller.java
@@ -0,0 +1,114 @@
+package eu.stork.peps.auth.engine.core.impl;
+
+import org.joda.time.DateTime;
+import org.joda.time.chrono.ISOChronology;
+import org.opensaml.common.SAMLVersion;
+import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml2.core.Attribute;
+import org.opensaml.saml2.core.RequestAbstractType;
+import org.opensaml.saml2.core.impl.SubjectQueryUnmarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.AbstractXMLObjectUnmarshaller;
+import org.opensaml.xml.io.UnmarshallingException;
+import org.opensaml.xml.util.DatatypeHelper;
+import org.opensaml.xml.util.XMLHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+import eu.stork.peps.auth.engine.core.CustomRequestAbstractType;
+
+public class CustomAttributeQueryUnmarshaller extends SubjectQueryUnmarshaller {
+	
+	private final Logger log = LoggerFactory.getLogger(AbstractXMLObjectUnmarshaller.class);
+	/** {@inheritDoc} */
+    protected void processChildElement(XMLObject parentSAMLObject, XMLObject childSAMLObject)
+            throws UnmarshallingException {
+        CustomAttributeQuery query = (CustomAttributeQuery) parentSAMLObject;
+
+        if (childSAMLObject instanceof Attribute) {
+            query.getAttributes().add((Attribute) childSAMLObject);
+        } else {
+            super.processChildElement(parentSAMLObject, childSAMLObject);
+        }
+    }
+    
+    /** {@inheritDoc} */
+    public XMLObject unmarshall(Element domElement) throws UnmarshallingException {
+        if (log.isTraceEnabled()) {
+            log.trace("Starting to unmarshall DOM element {}", XMLHelper.getNodeQName(domElement));
+        }
+        
+        checkElementIsTarget(domElement);
+
+        //String namespaceURI, String elementLocalName, String namespacePrefix
+        XMLObject xmlObject = new CustomAttributeQueryImpl(SAMLConstants.SAML20P_NS, CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME,
+                SAMLConstants.SAML20P_PREFIX);
+
+        if (log.isTraceEnabled()) {
+            log.trace("Unmarshalling attributes of DOM Element {}", XMLHelper.getNodeQName(domElement));
+        }
+        
+        NamedNodeMap attributes = domElement.getAttributes();
+        Node attribute;
+        for (int i = 0; i < attributes.getLength(); i++) {
+            attribute = attributes.item(i);
+
+            // These should allows be attribute nodes, but just in case...
+            if (attribute.getNodeType() == Node.ATTRIBUTE_NODE) {
+                unmarshallAttribute(xmlObject, (Attr) attribute);
+            }
+        }
+
+        if (log.isTraceEnabled()) {
+            log.trace("Unmarshalling other child nodes of DOM Element {}", XMLHelper.getNodeQName(domElement));
+        }
+        
+        Node childNode = domElement.getFirstChild();
+        while (childNode != null) {
+
+            if (childNode.getNodeType() == Node.ATTRIBUTE_NODE) {
+                unmarshallAttribute(xmlObject, (Attr) childNode);
+            } else if (childNode.getNodeType() == Node.ELEMENT_NODE) {
+                unmarshallChildElement(xmlObject, (Element) childNode);
+            } else if (childNode.getNodeType() == Node.TEXT_NODE
+                    || childNode.getNodeType() == Node.CDATA_SECTION_NODE) {
+                unmarshallTextContent(xmlObject, (Text) childNode);
+            }
+            
+            childNode = childNode.getNextSibling();
+        }
+
+        xmlObject.setDOM(domElement);
+        return xmlObject;
+    }
+    
+    /** {@inheritDoc} */
+    protected void processAttribute(XMLObject samlObject, Attr attribute) throws UnmarshallingException {
+        CustomRequestAbstractType req = (CustomRequestAbstractType) samlObject;
+
+        if (attribute.getLocalName().equals(RequestAbstractType.VERSION_ATTRIB_NAME)) {
+            req.setVersion(SAMLVersion.valueOf(attribute.getValue()));
+        } else if (attribute.getLocalName().equals(RequestAbstractType.ID_ATTRIB_NAME)) {
+            req.setID(attribute.getValue());
+            attribute.getOwnerElement().setIdAttributeNode(attribute, true);
+        } else if (attribute.getLocalName().equals(RequestAbstractType.ISSUE_INSTANT_ATTRIB_NAME)
+                && !DatatypeHelper.isEmpty(attribute.getValue())) {
+            req.setIssueInstant(new DateTime(attribute.getValue(), ISOChronology.getInstanceUTC()));
+        } else if (attribute.getLocalName().equals(RequestAbstractType.DESTINATION_ATTRIB_NAME)) {
+            req.setDestination(attribute.getValue());
+        } else if (attribute.getLocalName().equals(RequestAbstractType.CONSENT_ATTRIB_NAME)) {
+            req.setConsent(attribute.getValue());
+        } else if (attribute.getLocalName().equals(CustomRequestAbstractType.ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME)) {
+        	req.setAssertionConsumerServiceURL(attribute.getValue());
+        }else {
+            super.processAttribute(samlObject, attribute);
+        }
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java
new file mode 100644
index 000000000..3f4fc633d
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareBuilder.java
@@ -0,0 +1,52 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
+
+/**
+ * The Class EIDCrossBorderShareBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossBorderShareBuilder extends	AbstractSAMLObjectBuilder<EIDCrossBorderShare> {
+
+
+	/**
+	 * Builds the object.
+	 *
+	 * @return the identifier cross border share
+	 */
+	public final EIDCrossBorderShare buildObject() {
+		return buildObject(EIDCrossBorderShare.DEF_ELEMENT_NAME);
+	}
+
+
+	/**
+	 * Builds the object.
+	 *
+	 * @param namespaceURI the namespace uri
+	 * @param localName the local name
+	 * @param namespacePrefix the namespace prefix
+	 * @return the eID cross border share
+	 */
+	public final EIDCrossBorderShare buildObject(final String namespaceURI,
+			final String localName, final String namespacePrefix) {
+		return new EIDCrossBorderShareImpl(namespaceURI, localName, namespacePrefix);
+	}
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java
new file mode 100644
index 000000000..3827f5085
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareImpl.java
@@ -0,0 +1,87 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class EIDCrossBorderShareImpl.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossBorderShareImpl extends AbstractSAMLObject implements
+	EIDCrossBorderShare {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(EIDCrossBorderShareImpl.class.getName());
+	/** The citizen country code. */
+    private String eIDCrossBorderShare;
+
+    /**
+     * Instantiates a new eID cross border share implementation.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected EIDCrossBorderShareImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+    
+    
+    
+    /**
+     * Gets the eID cross border share.
+     *
+     * @return the eID cross border share
+     */
+    public final String getEIDCrossBorderShare() {
+    	return eIDCrossBorderShare;
+    }
+
+
+    /**
+     * Sets the eID cross border share.
+     *
+     * @param newEIDCrossBorderShare the new eID cross border share
+     */
+    public final void setEIDCrossBorderShare(String newEIDCrossBorderShare) {
+    	this.eIDCrossBorderShare = prepareForAssignment(this.eIDCrossBorderShare, newEIDCrossBorderShare);
+    }
+    
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     * {@inheritDoc}
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java
new file mode 100644
index 000000000..c5e113013
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareMarshaller.java
@@ -0,0 +1,47 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
+
+
+/**
+ * The Class EIDCrossBorderShareMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossBorderShareMarshaller extends AbstractSAMLObjectMarshaller {
+
+
+	/**
+	 * Marshall element content.
+	 *
+	 * @param samlObject the SAML object
+	 * @param domElement the DOM element
+	 * @throws MarshallingException the marshalling exception
+	 */
+	protected final void marshallElementContent(final XMLObject samlObject,
+			final Element domElement) throws MarshallingException {
+		final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) samlObject;
+		XMLHelper.appendTextContent(domElement, crossBorderShare.getEIDCrossBorderShare());
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java
new file mode 100644
index 000000000..e74bee6ca
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossBorderShareUnmarshaller.java
@@ -0,0 +1,43 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.EIDCrossBorderShare;
+
+/**
+ * The Class EIDCrossBorderShareUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossBorderShareUnmarshaller extends
+		AbstractSAMLObjectUnmarshaller {
+
+
+	/**
+	 * Process element content.
+	 *
+	 * @param samlObject the SAML object
+	 * @param elementContent the element content
+	 */
+	protected final void processElementContent(final XMLObject samlObject,
+			final String elementContent) {
+		final EIDCrossBorderShare crossBorderShare = (EIDCrossBorderShare) samlObject;
+		crossBorderShare.setEIDCrossBorderShare(elementContent);
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java
new file mode 100644
index 000000000..5e91e18fd
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareBuilder.java
@@ -0,0 +1,52 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
+
+/**
+ * The Class EIDCrossSectorShareBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossSectorShareBuilder extends
+	AbstractSAMLObjectBuilder<EIDCrossSectorShare> {
+
+    /**
+     * Builds the object.
+     *
+     * @return the eID cross sector share
+     */
+    public final EIDCrossSectorShare buildObject() {
+	return buildObject(EIDCrossSectorShare.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the eID cross sector share implementation
+     */
+    public final EIDCrossSectorShareImpl buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new EIDCrossSectorShareImpl(namespaceURI, localName,
+		namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java
new file mode 100644
index 000000000..7b2ad3dbd
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareImpl.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The Class EIDCrossSectorShareImpl.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossSectorShareImpl extends AbstractSAMLObject implements
+	EIDCrossSectorShare {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(EIDCrossSectorShareImpl.class.getName());
+	/** The citizen country code. */
+    private String eIDCrossSectorShare;
+
+
+    /**
+     * Instantiates a new eID cross sector share implementation.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected EIDCrossSectorShareImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+    
+    
+  
+    /**
+     * Gets the eID cross sector share.
+     *
+     * @return the eID cross sector share
+     */
+    public final String getEIDCrossSectorShare() {
+    	return eIDCrossSectorShare;
+    }
+
+
+    /**
+     * Sets the eID cross sector share.
+     *
+     * @param newEIDCrossSectorShare the new eID cross sector share
+     */
+    public final void setEIDCrossSectorShare(String newEIDCrossSectorShare) {
+    	this.eIDCrossSectorShare = prepareForAssignment(this.eIDCrossSectorShare, newEIDCrossSectorShare);
+    }
+    
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java
new file mode 100644
index 000000000..3ee9df698
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareMarshaller.java
@@ -0,0 +1,46 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
+
+
+/**
+ * The Class EIDCrossSectorShareMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossSectorShareMarshaller extends AbstractSAMLObjectMarshaller {
+
+	/**
+	 * Marshall element content.
+	 *
+	 * @param samlObject the SAML object
+	 * @param domElement the DOM element
+	 * @throws MarshallingException the marshalling exception
+	 */
+	protected final void marshallElementContent(final XMLObject samlObject,
+			final Element domElement) throws MarshallingException {
+		final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) samlObject;
+		XMLHelper.appendTextContent(domElement, crossSectorShare.getEIDCrossSectorShare());
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java
new file mode 100644
index 000000000..94c7689be
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDCrossSectorShareUnmarshaller.java
@@ -0,0 +1,47 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.EIDCrossSectorShare;
+
+/**
+ * The Class EIDCrossSectorShareUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class EIDCrossSectorShareUnmarshaller extends
+	AbstractSAMLObjectUnmarshaller {
+
+	/**
+	 * Process element content.
+	 *
+	 * @param samlObject the SAML object
+	 * @param domElement the DOM element
+	 * @throws MarshallingException the marshalling exception
+	 */
+	protected final void processElementContent(final XMLObject samlObject,
+			final String domElement)  {
+
+		final EIDCrossSectorShare crossSectorShare = (EIDCrossSectorShare) samlObject;
+		crossSectorShare.setEIDCrossSectorShare(domElement);
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java
new file mode 100644
index 000000000..230ff3ca4
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareBuilder.java
@@ -0,0 +1,51 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.EIDSectorShare;
+
+/**
+ * The Class EIDSectorShareBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class EIDSectorShareBuilder extends
+	AbstractSAMLObjectBuilder<EIDSectorShare> {
+
+    /**
+     * Builds the object.
+     *
+     * @return the eID sector share
+     */
+    public final EIDSectorShare buildObject() {
+	return buildObject(EIDSectorShare.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the eID sector share
+     */
+    public final EIDSectorShare buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new EIDSectorShareImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java
new file mode 100644
index 000000000..9ed726a32
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareImpl.java
@@ -0,0 +1,85 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.EIDSectorShare;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class EIDSectorShareImpl.
+ * 
+ * @author fjquevedo
+ */
+public class EIDSectorShareImpl extends AbstractSAMLObject implements
+	EIDSectorShare {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(EIDSectorShareImpl.class.getName());
+	
+    /** The e id sector share. */
+    private String eIDSectorShare;
+    /**
+     * Instantiates a new eID sector share implementation.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected EIDSectorShareImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+    
+    
+    /**
+     * Gets the eID sector share.
+     *
+     * @return the eID sector share
+     */
+    public final String getEIDSectorShare() {
+    	return eIDSectorShare;	
+    }
+
+    /**
+     * Sets the eID sector share.
+     *
+     * @param newEIDSectorShare the new eID sector share
+     */
+    public final void setEIDSectorShare(String newEIDSectorShare) {
+    	this.eIDSectorShare = prepareForAssignment(this.eIDSectorShare, newEIDSectorShare);
+    }
+    
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java
new file mode 100644
index 000000000..0ce449cd1
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareMarshaller.java
@@ -0,0 +1,46 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.saml2.core.impl.AbstractNameIDTypeMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.EIDSectorShare;
+
+/**
+ * The Class EIDSectorShareMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class EIDSectorShareMarshaller extends AbstractSAMLObjectMarshaller {
+
+	/**
+	 * Marshall element content.
+	 *
+	 * @param samlObject the SAML object
+	 * @param domElement the DOM element
+	 * @throws MarshallingException the marshalling exception
+	 */
+	protected final void marshallElementContent(final XMLObject samlObject,
+			final Element domElement) throws MarshallingException {
+		final EIDSectorShare sectorShare = (EIDSectorShare) samlObject;
+		XMLHelper.appendTextContent(domElement, sectorShare.getEIDSectorShare());
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java
new file mode 100644
index 000000000..f7f00adb9
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/EIDSectorShareUnmarshaller.java
@@ -0,0 +1,47 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.EIDSectorShare;
+
+
+/**
+ * The Class EIDSectorShareUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class EIDSectorShareUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+
+	/**
+	 * Process element content.
+	 *
+	 * @param samlObject the SAML object
+	 * @param domElement the DOM element
+	 * @throws MarshallingException the marshalling exception
+	 */
+	protected final void processElementContent(final XMLObject samlObject,
+			final String domElement)  {
+		final EIDSectorShare sectorShare = (EIDSectorShare) samlObject;
+		sectorShare.setEIDSectorShare(domElement);
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java
new file mode 100644
index 000000000..41676931b
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeBuilder.java
@@ -0,0 +1,52 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+
+/**
+ * The Class QAAAttributeBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class QAAAttributeBuilder extends
+	AbstractSAMLObjectBuilder<QAAAttribute> {
+
+    /**
+     * Builds the object.
+     *
+     * @return the quality authentication assurance object
+     */
+    public final QAAAttribute buildObject() {
+	return buildObject(QAAAttribute.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the quality authentication assurance object
+
+     */
+    public final QAAAttribute buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new QAAAttributeImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java
new file mode 100644
index 000000000..46f3bb402
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeImpl.java
@@ -0,0 +1,84 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class QAAAttributeImpl.
+ * 
+ * @author fjquevedo
+ */
+public class QAAAttributeImpl extends AbstractSAMLObject implements
+	QAAAttribute {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(QAAAttributeImpl.class.getName());
+    /** The quality authentication assurance level. */
+    private String qaaLevel;
+
+    /**
+     * Constructor.
+     * 
+     * @param namespaceURI the namespace the element is in
+     * @param elementLocalName the local name of the XML element this Object
+     * represents
+     * @param namespacePrefix the prefix for the given namespace
+     */
+    protected QAAAttributeImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+
+    /**
+     * Gets the quality authentication assurance level.
+     *
+     * @return the quality authentication assurance level
+     */
+    public final String getQaaLevel() {
+	return qaaLevel;
+    }
+
+    /**
+     * Sets the quality authentication assurance level.
+     *
+     * @param newQaaLevel the new quality authentication assurance level
+     */
+    public final void setQaaLevel(final String newQaaLevel) {
+	this.qaaLevel = prepareForAssignment(this.qaaLevel, newQaaLevel);
+    }
+
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java
new file mode 100644
index 000000000..000879368
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeMarshaller.java
@@ -0,0 +1,45 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+
+/**
+ * The Class QAAAttributeMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class QAAAttributeMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall element content.
+     *
+     * @param samlObject the SAML object
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallElementContent(final XMLObject samlObject,
+	    final Element domElement) throws MarshallingException {
+	final QAAAttribute qaaAttribute = (QAAAttribute) samlObject;
+	XMLHelper.appendTextContent(domElement, qaaAttribute.getQaaLevel());
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java
new file mode 100644
index 000000000..8445e4eeb
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/QAAAttributeUnmarshaller.java
@@ -0,0 +1,41 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+
+/**
+ * The Class QAAAttributeUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class QAAAttributeUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process element content.
+     *
+     * @param samlObject the SAML object
+     * @param elementContent the element content
+     */
+    protected final void processElementContent(final XMLObject samlObject,
+	    final String elementContent) {
+	final QAAAttribute qaaLevel = (QAAAttribute) samlObject;
+	qaaLevel.setQaaLevel(elementContent);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java
new file mode 100644
index 000000000..c9881c439
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeBuilder.java
@@ -0,0 +1,54 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+
+/**
+ * The Class RequestedAttributeBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributeBuilder extends
+	AbstractSAMLObjectBuilder<RequestedAttribute> {
+
+
+    /**
+     * Builds the object.
+     *
+     * @return the requested attribute
+     */
+    public final RequestedAttribute buildObject() {
+	return buildObject(RequestedAttribute.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the requested attribute
+     */
+    public final RequestedAttribute buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new RequestedAttributeImpl(namespaceURI, localName,
+		namespacePrefix);
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java
new file mode 100644
index 000000000..ac2e8a3ee
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeImpl.java
@@ -0,0 +1,220 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.schema.XSBooleanValue;
+import org.opensaml.xml.util.AttributeMap;
+import org.opensaml.xml.util.XMLObjectChildrenList;
+
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class RequestedAttributeImpl.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributeImpl extends AbstractSAMLObject implements
+	RequestedAttribute {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(RequestedAttributeImpl.class.getName());
+    /**
+     * The attribute values.
+     */
+    private final XMLObjectChildrenList<XMLObject> attributeValues;
+
+    /**
+     * The friendly name.
+     * 
+     */
+    private String friendlyName;
+
+    /**
+     * The is required.
+    */
+    private String isRequired;
+
+    /**
+     * The name.
+     * 
+     */
+    private String name;
+
+    /**
+     * The name format.
+     * 
+     */
+    private String nameFormat;
+
+    /**
+     * The unknown attributes.
+     * 
+     */
+    private AttributeMap unknownAttributes;
+
+    /**
+     * Instantiates a new requested attribute impl.
+     * 
+     * @param namespaceURI the namespace uri
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected RequestedAttributeImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+	unknownAttributes = new AttributeMap(this);
+	attributeValues = new XMLObjectChildrenList<XMLObject>(this);
+    }
+
+
+    /**
+     * Gets the attribute values.
+     *
+     * @return the attribute values
+     */
+    public final List<XMLObject> getAttributeValues() {
+	return attributeValues;
+    }
+
+    /**
+     * Gets the friendly name.
+     *
+     * @return the friendly name.
+     */
+    public final String getFriendlyName() {
+	return friendlyName;
+    }
+
+  
+    /**
+     * Gets the checks if is required.
+     *
+     * @return the boolean if it's required.
+     */
+    public final String isRequired() {
+	return isRequired;
+    }
+
+
+    /**
+     * Gets the is required xs boolean.
+     * 
+     * @return the XSBoolean if it's required.
+     */
+    public final String getIsRequiredXSBoolean() {
+	return isRequired;
+    }
+
+
+    /**
+     * Gets the name.
+     *
+     * @return the name
+     */
+    public final String getName() {
+	return name;
+    }
+
+
+    /**
+     * Gets the name format.
+     *
+     * @return the name format.
+     */
+    public final String getNameFormat() {
+	return nameFormat;
+    }
+
+    /**
+     * Gets the ordered children.
+     * 
+     * @return the list of XMLObject.
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
+	children.addAll(attributeValues);
+	return Collections.unmodifiableList(children);
+    }
+
+    /**
+     * Gets the unknown attributes.
+     *
+     * @return the attribute map
+     */
+    public final AttributeMap getUnknownAttributes() {
+	return unknownAttributes;
+    }
+
+    /**
+     * Sets the friendly name.
+     * 
+     * @param newFriendlyName the new friendly name format
+     */
+    public final void setFriendlyName(final String newFriendlyName) {
+	this.friendlyName = prepareForAssignment(this.friendlyName,
+		newFriendlyName);
+    }
+
+    /**
+     * Set new boolean value isRequired.
+     * @param newIsRequired then new value
+     */
+    public final void setIsRequired(final String newIsRequired) {
+	isRequired = prepareForAssignment(this.isRequired, newIsRequired);
+
+    }
+
+    /**
+     * Sets the name.
+     * 
+     * @param newName the new name
+     */
+    public final void setName(final String newName) {
+	this.name = prepareForAssignment(this.name, newName);
+    }
+
+    /**
+     * Sets the name format.
+     * 
+     * @param newNameFormat the new name format
+     */
+    public final void setNameFormat(final String newNameFormat) {
+	this.nameFormat = prepareForAssignment(this.nameFormat, newNameFormat);
+    }
+
+    /**
+     * Sets the unknown attributes.
+     * 
+     * @param newUnknownAttr the new unknown attributes
+     */
+    public final void setUnknownAttributes(final AttributeMap newUnknownAttr) {
+	this.unknownAttributes = newUnknownAttr;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java
new file mode 100644
index 000000000..1a14a118a
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeMarshaller.java
@@ -0,0 +1,89 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.Map.Entry;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.Configuration;
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+
+/**
+ * The Class RequestedAttributeMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributeMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall attributes.
+     *
+     * @param samlElement the SAML element
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallAttributes(final XMLObject samlElement,
+	    final Element domElement) throws MarshallingException {
+	final RequestedAttribute requestedAttr = (RequestedAttribute) samlElement;
+
+	if (requestedAttr.getName() != null) {
+	    domElement.setAttributeNS(null,
+		    RequestedAttribute.NAME_ATTRIB_NAME, requestedAttr
+			    .getName());
+	}
+
+	if (requestedAttr.getNameFormat() != null) {
+	    domElement.setAttributeNS(null,
+		    RequestedAttribute.NAME_FORMAT_ATTR, requestedAttr
+			    .getNameFormat());
+	}
+
+	if (requestedAttr.getFriendlyName() != null) {
+	    domElement.setAttributeNS(null,
+		    RequestedAttribute.FRIENDLY_NAME_ATT, requestedAttr
+			    .getFriendlyName());
+	}
+
+	if (requestedAttr.getIsRequiredXSBoolean() != null) {
+	    domElement.setAttributeNS(null,
+		    RequestedAttribute.IS_REQUIRED_ATTR, requestedAttr
+			    .getIsRequiredXSBoolean().toString());
+	}
+
+	Attr attr;
+	for (Entry<QName, String> entry : requestedAttr.getUnknownAttributes()
+		.entrySet()) {
+	    attr = XMLHelper.constructAttribute(domElement.getOwnerDocument(),
+		    entry.getKey());
+	    attr.setValue(entry.getValue());
+	    domElement.setAttributeNodeNS(attr);
+	    if (Configuration.isIDAttribute(entry.getKey())
+		    || requestedAttr.getUnknownAttributes().isIDAttribute(
+			    entry.getKey())) {
+		attr.getOwnerElement().setIdAttributeNode(attr, true);
+	    }
+	}
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java
new file mode 100644
index 000000000..c07f852d9
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributeUnmarshaller.java
@@ -0,0 +1,96 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import javax.xml.namespace.QName;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.UnmarshallingException;
+import org.opensaml.xml.schema.XSBooleanValue;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Attr;
+
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+import eu.stork.peps.auth.engine.core.SAMLCore;
+
+/**
+ * The Class RequestedAttributeUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributeUnmarshaller extends
+	AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process child element.
+     * 
+     * @param parentSAMLObject parent SAMLObject
+     * @param childSAMLObject child SAMLObject
+     * 
+     * @throws UnmarshallingException error at unmarshall XML object
+     */
+    protected final void processChildElement(final XMLObject parentSAMLObject,
+	    final XMLObject childSAMLObject) throws UnmarshallingException {
+
+	final RequestedAttribute requestedAttr = (RequestedAttribute) parentSAMLObject;
+
+	final QName childQName = childSAMLObject.getElementQName();
+	if (childQName.getLocalPart().equals("AttributeValue")
+		&& childQName.getNamespaceURI().equals(SAMLCore.STORK10_NS.getValue())) {
+	    requestedAttr.getAttributeValues().add(childSAMLObject);
+	} else {
+	    super.processChildElement(parentSAMLObject, childSAMLObject);
+	}
+    }
+
+    /**
+     * Process attribute.
+     *
+     * @param samlObject the SAML object
+     * @param attribute the attribute
+     * @throws UnmarshallingException the unmarshalling exception
+     */
+    protected final void processAttribute(final XMLObject samlObject,
+	    final Attr attribute) throws UnmarshallingException {
+
+	final RequestedAttribute requestedAttr = (RequestedAttribute) samlObject;
+
+	if (attribute.getLocalName()
+		.equals(RequestedAttribute.NAME_ATTRIB_NAME)) {
+	    requestedAttr.setName(attribute.getValue());
+	} else if (attribute.getLocalName().equals(
+		RequestedAttribute.NAME_FORMAT_ATTR)) {
+	    requestedAttr.setNameFormat(attribute.getValue());
+	} else if (attribute.getLocalName().equals(
+		RequestedAttribute.FRIENDLY_NAME_ATT)) {
+	    requestedAttr.setFriendlyName(attribute.getValue());
+	} else if (attribute.getLocalName().equals(
+		RequestedAttribute.IS_REQUIRED_ATTR)) {
+	    requestedAttr.setIsRequired(attribute
+		    .getValue());
+
+	} else {
+	    final QName attribQName = XMLHelper.getNodeQName(attribute);
+	    if (attribute.isId()) {
+		requestedAttr.getUnknownAttributes().registerID(attribQName);
+	    }
+	    requestedAttr.getUnknownAttributes().put(attribQName,
+		    attribute.getValue());
+	}
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java
new file mode 100644
index 000000000..d421c53d2
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesBuilder.java
@@ -0,0 +1,54 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.RequestedAttributes;
+
+/**
+ * The Class RequestedAttributesBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributesBuilder extends
+	AbstractSAMLObjectBuilder<RequestedAttributes> {
+
+
+    /**
+     * Builds the object.
+     *
+     * @return the requested attributes
+     */
+    public final RequestedAttributes buildObject() {
+	return buildObject(RequestedAttributes.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the requested attributes
+     */
+    public final RequestedAttributes buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new RequestedAttributesImpl(namespaceURI, localName,
+		namespacePrefix);
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java
new file mode 100644
index 000000000..0a5b37add
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesImpl.java
@@ -0,0 +1,95 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.util.IndexedXMLObjectChildrenList;
+
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+import eu.stork.peps.auth.engine.core.RequestedAttributes;
+
+/**
+ * The Class RequestedAttributesImpl.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributesImpl extends AbstractSAMLObject implements
+	RequestedAttributes {
+
+    /**
+     * Instantiates a new requested attributes implement.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected RequestedAttributesImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+	indexedChildren = new IndexedXMLObjectChildrenList<XMLObject>(this);
+    }
+
+    /** The indexed children. */
+    private final IndexedXMLObjectChildrenList<XMLObject> indexedChildren;
+
+    /**
+     * Gets the indexed children.
+     * 
+     * @return the indexed children
+     */
+    public final IndexedXMLObjectChildrenList<XMLObject> getIndexedChildren() {
+	return indexedChildren;
+    }
+
+
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+
+	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
+
+	children.addAll(indexedChildren);
+
+	return Collections.unmodifiableList(children);
+
+    }
+
+    /**
+     * Gets the attributes.
+     * 
+     * @return the attributes
+     * 
+     * @see eu.stork.peps.auth.engine.core.RequestedAttributes#getAttributes()
+     */
+    @SuppressWarnings("unchecked")
+    public final List<RequestedAttribute> getAttributes() {
+	return (List<RequestedAttribute>) indexedChildren
+		.subList(RequestedAttribute.DEF_ELEMENT_NAME);
+    }
+
+    @Override
+    public int hashCode() {
+        throw new UnsupportedOperationException("hashCode method not implemented");
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java
new file mode 100644
index 000000000..dfc42adf3
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesMarshaller.java
@@ -0,0 +1,33 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+
+/**
+ * The Class RequestedAttributesMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributesMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Instantiates a new requested attributes marshaller.
+     */
+    public RequestedAttributesMarshaller() {
+	super();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java
new file mode 100644
index 000000000..41b3afa40
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/RequestedAttributesUnmarshaller.java
@@ -0,0 +1,52 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.UnmarshallingException;
+
+import eu.stork.peps.auth.engine.core.RequestedAttribute;
+import eu.stork.peps.auth.engine.core.RequestedAttributes;
+
+/**
+ * The Class RequestedAttributesUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class RequestedAttributesUnmarshaller extends
+	AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process child element.
+     * 
+     * @param parentObject the parent object
+     * @param childObject the child object
+     * 
+     * @throws UnmarshallingException error in unmarshall
+     */
+    protected final void processChildElement(final XMLObject parentObject,
+	    final XMLObject childObject) throws UnmarshallingException {
+	final RequestedAttributes attrStatement = (RequestedAttributes) parentObject;
+
+	if (childObject instanceof RequestedAttribute) {
+	    attrStatement.getAttributes().add((RequestedAttribute) childObject);
+	} else {
+	    super.processChildElement(parentObject, childObject);
+	}
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java
new file mode 100644
index 000000000..a35c77936
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationBuilder.java
@@ -0,0 +1,51 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.SPApplication;
+
+/**
+ * The Class SPApplicationBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class SPApplicationBuilder extends
+	AbstractSAMLObjectBuilder<SPApplication> {
+
+    /**
+     * Builds the object.
+     *
+     * @return the service provider application
+     */
+    public final SPApplication buildObject() {
+	return buildObject(SPApplication.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the service provider application
+     */
+    public final SPApplication buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new SPApplicationImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java
new file mode 100644
index 000000000..0a428a521
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationImpl.java
@@ -0,0 +1,84 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPApplication;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class SPApplicationImpl.
+ * 
+ * @author fjquevedo
+ */
+public class SPApplicationImpl extends AbstractSAMLObject implements
+	SPApplication {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SPApplicationImpl.class.getName());
+    /** The service provider application. */
+    private String spApplication;
+
+    /**
+     * Instantiates a new service provider application.
+     * 
+     * @param namespaceURI the namespace uri
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected SPApplicationImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+
+    /**
+     * Gets the service provider application.
+     *
+     * @return the service provider application
+     */
+    public final String getSPApplication() {
+	return spApplication;
+    }
+
+    /**
+     * Sets the service provider application.
+     *
+     * @param newSpApplication the new service provider application
+     */
+    public final void setSPApplication(final String newSpApplication) {
+	this.spApplication = prepareForAssignment(this.spApplication,
+		newSpApplication);
+    }
+
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java
new file mode 100644
index 000000000..4866c3535
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationMarshaller.java
@@ -0,0 +1,46 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.SPApplication;
+
+/**
+ * The Class SPApplicationMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPApplicationMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall element content.
+     *
+     * @param samlObject the SAML object
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallElementContent(final XMLObject samlObject,
+	    final Element domElement) throws MarshallingException {
+	final SPApplication spApplication = (SPApplication) samlObject;
+	XMLHelper.appendTextContent(domElement, spApplication
+		.getSPApplication());
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java
new file mode 100644
index 000000000..a28432a13
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPApplicationUnmarshaller.java
@@ -0,0 +1,42 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPApplication;
+
+
+/**
+ * The Class SPApplicationUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPApplicationUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process element content.
+     *
+     * @param samlObject the SAML object
+     * @param elementContent the element content
+     */
+    protected final void processElementContent(final XMLObject samlObject,
+	    final String elementContent) {
+	final SPApplication spApplication = (SPApplication) samlObject;
+	spApplication.setSPApplication(elementContent);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java
new file mode 100644
index 000000000..48ec92f49
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryBuilder.java
@@ -0,0 +1,52 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.SPCountry;
+
+/**
+ * The Class SPCountryBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class SPCountryBuilder extends AbstractSAMLObjectBuilder<SPCountry> {
+
+    
+    /**
+     * Builds the object SPCountry.
+     *
+     * @return the service provider country
+     */
+    public final SPCountry buildObject() {
+	return buildObject(SPCountry.DEF_ELEMENT_NAME);
+    }
+
+    
+    /**
+     * Builds the object SPCountry.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the service provider country
+     */
+    public final SPCountry buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new SPCountryImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java
new file mode 100644
index 000000000..40a1ac86a
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryImpl.java
@@ -0,0 +1,82 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPCountry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class SPCountryImpl.
+ * 
+ * @author fjquevedo
+ */
+public class SPCountryImpl extends AbstractSAMLObject implements SPCountry {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SPCountryImpl.class.getName());
+    /** The service provider country. */
+    private String spCountry;
+
+    /**
+     * Instantiates a new service provider country.
+     * 
+     * @param namespaceURI the namespace uri
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected SPCountryImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+
+    /**
+     * Gets the service provider country.
+     *
+     * @return the service provider country
+     */
+    public final String getSPCountry() {
+	return spCountry;
+    }
+
+    /**
+     * Sets the service provider country.
+     *
+     * @param newSpCountry the new service provider country
+     */
+    public final void setSPCountry(final String newSpCountry) {
+	this.spCountry = prepareForAssignment(this.spCountry, newSpCountry);
+    }
+
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java
new file mode 100644
index 000000000..e82634749
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryMarshaller.java
@@ -0,0 +1,45 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.SPCountry;
+
+/**
+ * The Class SPCountryMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPCountryMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall element content.
+     *
+     * @param samlObject the SAML object
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallElementContent(final XMLObject samlObject,
+	    final Element domElement) throws MarshallingException {
+	final SPCountry spCountry = (SPCountry) samlObject;
+	XMLHelper.appendTextContent(domElement, spCountry.getSPCountry());
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java
new file mode 100644
index 000000000..deb695ac6
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPCountryUnmarshaller.java
@@ -0,0 +1,42 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPCountry;
+
+
+/**
+ * The Class SPCountryUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPCountryUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process element content.
+     *
+     * @param samlObject the SAML object
+     * @param elementContent the element content
+     */
+    protected final void processElementContent(final XMLObject samlObject,
+	    final String elementContent) {
+	final SPCountry spCountry = (SPCountry) samlObject;
+	spCountry.setSPCountry(elementContent);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java
new file mode 100644
index 000000000..b3640947b
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDBuilder.java
@@ -0,0 +1,50 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.SPID;
+
+/**
+ * The Class SPIDBuilder.
+ * 
+ * @author iinigo
+ */
+public class SPIDBuilder extends AbstractSAMLObjectBuilder<SPID> {
+
+    /**
+     * Builds the object.
+     *
+     * @return the SP ID
+     */
+    public final SPID buildObject() {
+	return buildObject(SPID.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the citizen country code
+     */
+    public final SPID buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new SPIDImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java
new file mode 100644
index 000000000..68611997b
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDImpl.java
@@ -0,0 +1,82 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPID;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class SPIDImpl.
+ * 
+ * @author iinigo
+ */
+public class SPIDImpl extends AbstractSAMLObject implements SPID {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SPIDImpl.class.getName());
+    /** The citizen country code. */
+    private String spId;
+    
+    /**
+     * Instantiates a new sP country impl.
+     * 
+     * @param namespaceURI the namespace uri
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */   
+    protected SPIDImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);	
+    }
+
+    /**
+     * Gets the SP ID.
+     *
+     * @return the SP ID
+     */
+    public final String getSPID() {
+    	return spId;
+    }
+
+    /**
+     * Sets the SP ID.
+     *
+     * @param newSPID the new SP ID
+     */
+    public final void setSPID(final String newSPID) {
+    	this.spId = prepareForAssignment(this.spId, newSPID);
+    }
+
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+    	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java
new file mode 100644
index 000000000..24389522e
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDMarshaller.java
@@ -0,0 +1,45 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.SPID;
+
+/**
+ * The Class SPIDMarshaller.
+ * 
+ * @author iinigo
+ */
+public class SPIDMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall element content.
+     *
+     * @param samlObject the SAML object
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallElementContent(final XMLObject samlObject,
+	    final Element domElement) throws MarshallingException {
+	final SPID spid = (SPID) samlObject;
+	XMLHelper.appendTextContent(domElement, spid.getSPID());
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java
new file mode 100644
index 000000000..e4d230b94
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPIDUnmarshaller.java
@@ -0,0 +1,41 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPID;
+
+/**
+ * The Class SPIDUnmarshaller.
+ * 
+ * @author iinigo
+ */
+public class SPIDUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process element content.
+     *
+     * @param samlObject the SAML object
+     * @param elementContent the element content
+     */
+    protected final void processElementContent(final XMLObject samlObject,
+	    final String elementContent) {
+	final SPID spid = (SPID) samlObject;
+	spid.setSPID(elementContent);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java
new file mode 100644
index 000000000..a6e1fe686
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationBuilder.java
@@ -0,0 +1,41 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.SAMLCore;
+import eu.stork.peps.auth.engine.core.SPInformation;
+
+/**
+ * The Class SPInformation.
+ * 
+ * @author iinigo
+ */
+public final class SPInformationBuilder extends AbstractSAMLObjectBuilder<SPInformation> {
+    
+
+    /** {@inheritDoc} */
+    public SPInformation buildObject() {
+        return buildObject(SAMLCore.STORK10P_NS.getValue(), SPInformation.DEF_LOCAL_NAME, SAMLCore.STORK10P_PREFIX.getValue());
+    }
+
+    /** {@inheritDoc} */
+    public SPInformation buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+        return new SPInformationImpl(namespaceURI, localName, namespacePrefix);
+    }
+    
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java
new file mode 100644
index 000000000..ff6e90999
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationImpl.java
@@ -0,0 +1,110 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSignableSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPID;
+import eu.stork.peps.auth.engine.core.SPInformation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The Class SPInformationImpl.
+ * 
+ * @author iinigo
+ */
+public final class SPInformationImpl extends AbstractSignableSAMLObject implements
+SPInformation {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SPInformationImpl.class.getName());
+    /** The citizen country code. */
+    private SPID spId;
+    
+    
+	/**
+     * Instantiates a new requested attributes implement.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected SPInformationImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {	
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+    
+   
+    /**
+     * getSPId.
+     * 
+     * @return the SP ID
+     */    
+    public SPID getSPID() {
+    	return spId;
+    }        
+
+    /**
+     * Gets the ordered children.
+     * 
+     * @return the ordered children
+     *
+     */
+    public List<XMLObject> getOrderedChildren() {
+	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
+
+	children.add(spId);
+		
+	if (getSignature() != null) {
+	    children.add(getSignature());
+	}
+	
+	return Collections.unmodifiableList(children);
+
+    }
+
+    /**
+     * Gets the signature reference id.
+     * 
+     * @return the signature reference id
+     *
+     */
+    public String getSignatureReferenceID() {
+	return null;
+    }
+    
+    /**
+     * Sets the SP Id.
+     * 
+     * @param newSPId the new SP Id
+     *
+     */
+    public void setSPID(SPID newSPId) {
+    	this.spId = prepareForAssignment(this.spId, newSPId);	
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java
new file mode 100644
index 000000000..44845948c
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationMarshaller.java
@@ -0,0 +1,33 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+
+/**
+ * The Class SPInformationMarshaller.
+ * 
+ * @author iinigo
+ */
+public class SPInformationMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Instantiates a new SP Information marshaller.
+     */
+    public SPInformationMarshaller() {
+	super();
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java
new file mode 100644
index 000000000..414b93386
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInformationUnmarshaller.java
@@ -0,0 +1,52 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.UnmarshallingException;
+
+import eu.stork.peps.auth.engine.core.SPID;
+import eu.stork.peps.auth.engine.core.SPInformation;
+
+/**
+ * The Class SPInformationUnmarshaller.
+ * 
+ * @author iinigo
+ */
+public class SPInformationUnmarshaller extends
+	AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process child element.
+     * 
+     * @param parentObject the parent object
+     * @param childObject the child object
+     * 
+     * @throws UnmarshallingException the unmarshalling exception
+     *
+     */
+    protected final void processChildElement(final XMLObject parentObject,
+	    final XMLObject childObject) throws UnmarshallingException {
+	final SPInformation spInformation = (SPInformation) parentObject;
+
+	if (childObject instanceof SPID) {
+        spInformation.setSPID((SPID) childObject);
+	} else {
+	    super.processChildElement(parentObject, childObject);
+	}	
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java
new file mode 100644
index 000000000..fe47cf99c
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionBuilder.java
@@ -0,0 +1,51 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.SPInstitution;
+
+/**
+ * The Class SPInstitutionBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class SPInstitutionBuilder extends
+	AbstractSAMLObjectBuilder<SPInstitution> {
+
+    /**
+     * Builds the object.
+     *
+     * @return the service provider institution
+     */
+    public final SPInstitution buildObject() {
+	return buildObject(SPInstitution.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object SPInstitution.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the service provider institution
+     */
+    public final SPInstitution buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new SPInstitutionImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java
new file mode 100644
index 000000000..38438613a
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionImpl.java
@@ -0,0 +1,84 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPInstitution;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class SPInstitutionImpl.
+ * 
+ * @author fjquevedo
+ */
+public class SPInstitutionImpl extends AbstractSAMLObject implements
+	SPInstitution {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SPInstitutionImpl.class.getName());
+    /** The service provider institution. */
+    private String spInstitution;
+
+    /**
+     * Instantiates a new service provider institution.
+     * 
+     * @param namespaceURI the namespace uri
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected SPInstitutionImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+
+    /**
+     * Gets the service provider institution.
+     *
+     * @return the service provider institution
+     */
+    public final String getSPInstitution() {
+	return spInstitution;
+    }
+
+    /**
+     * Sets the service provider institution.
+     *
+     * @param newSpInstitution the new service provider institution
+     */
+    public final void setSPInstitution(final String newSpInstitution) {
+	this.spInstitution = prepareForAssignment(this.spInstitution,
+		newSpInstitution);
+    }
+
+    /**
+     * Gets the ordered children.
+     *
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+ }
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java
new file mode 100644
index 000000000..504a1f035
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionMarshaller.java
@@ -0,0 +1,46 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.SPInstitution;
+
+/**
+ * The Class SPInstitutionMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPInstitutionMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall element content.
+     *
+     * @param samlObject the SAML object
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallElementContent(final XMLObject samlObject,
+	    final Element domElement) throws MarshallingException {
+	final SPInstitution spInstitution = (SPInstitution) samlObject;
+	XMLHelper.appendTextContent(domElement, spInstitution
+		.getSPInstitution());
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java
new file mode 100644
index 000000000..103d5f2b2
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPInstitutionUnmarshaller.java
@@ -0,0 +1,41 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPInstitution;
+
+/**
+ * The Class SPInstitutionUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPInstitutionUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process element content.
+     *
+     * @param samlObject the SAML object
+     * @param elementContent the element content
+     */
+    protected final void processElementContent(final XMLObject samlObject,
+	    final String elementContent) {
+	final SPInstitution spInstitution = (SPInstitution) samlObject;
+	spInstitution.setSPInstitution(elementContent);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java
new file mode 100644
index 000000000..a691b9008
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorBuilder.java
@@ -0,0 +1,50 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.SPSector;
+
+/**
+ * The Class SPSectorBuilder.
+ * 
+ * @author fjquevedo
+ */
+public class SPSectorBuilder extends AbstractSAMLObjectBuilder<SPSector> {
+
+    /**
+     * Builds the object SPSector.
+     *
+     * @return the service provider sector.
+     */
+    public final SPSector buildObject() {
+	return buildObject(SPSector.DEF_ELEMENT_NAME);
+    }
+
+    /**
+     * Builds the object SPSector.
+     *
+     * @param namespaceURI the namespace uri
+     * @param localName the local name
+     * @param namespacePrefix the namespace prefix
+     * @return the service provider sector
+     */
+    public final SPSector buildObject(final String namespaceURI,
+	    final String localName, final String namespacePrefix) {
+	return new SPSectorImpl(namespaceURI, localName, namespacePrefix);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java
new file mode 100644
index 000000000..4ac822876
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorImpl.java
@@ -0,0 +1,84 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPSector;
+
+
+/**
+ * The Class SPSectorImpl.
+ * 
+ * @author fjquevedo
+ */
+public class SPSectorImpl extends AbstractSAMLObject implements SPSector {
+
+    /** The service provider sector. */
+    private String spSector;
+
+    /**
+     * Instantiates a new Service provider sector implementation.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected SPSectorImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+
+    
+    /**
+     * Gets the service provider sector.
+     * 
+     * @return the SP sector
+     * 
+     * @see eu.stork.peps.auth.engine.core.SPSector#getSPSector()
+     */
+    public final String getSPSector() {
+	return spSector;
+    }
+
+    
+    /**
+     * Sets the service provider sector.
+     * 
+     * @param newSpSector the new service provider sector
+     */
+    public final void setSPSector(final String newSpSector) {
+	this.spSector = prepareForAssignment(this.spSector, newSpSector);
+    }
+
+   
+    /**
+     * Gets the ordered children.
+     * 
+     * @return the ordered children
+     */
+    public final List<XMLObject> getOrderedChildren() {
+	return null;
+    }
+
+    @Override
+    public int hashCode() {
+        throw new UnsupportedOperationException("hashCode method not implemented");
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java
new file mode 100644
index 000000000..c5331e8f4
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorMarshaller.java
@@ -0,0 +1,45 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.util.XMLHelper;
+import org.w3c.dom.Element;
+
+import eu.stork.peps.auth.engine.core.SPSector;
+
+/**
+ * The Class SPSectorMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPSectorMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Marshall element content.
+     *
+     * @param samlObject the SAML object
+     * @param domElement the DOM element
+     * @throws MarshallingException the marshalling exception
+     */
+    protected final void marshallElementContent(final XMLObject samlObject,
+	    final Element domElement) throws MarshallingException {
+	final SPSector spSector = (SPSector) samlObject;
+	XMLHelper.appendTextContent(domElement, spSector.getSPSector());
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java
new file mode 100644
index 000000000..cbb05c6e5
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SPSectorUnmarshaller.java
@@ -0,0 +1,42 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.SPSector;
+
+/**
+ * The Class SPSectorUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class SPSectorUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+
+    
+    /**
+     * Process element content.
+     *
+     * @param samlObject the SAML object
+     * @param elementContent the element content
+     */
+    protected final void processElementContent(final XMLObject samlObject,
+	    final String elementContent) {
+	final SPSector spSector = (SPSector) samlObject;
+	spSector.setSPSector(elementContent);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java
new file mode 100644
index 000000000..80796ea86
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignHW.java
@@ -0,0 +1,468 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.Security;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.InvalidPropertiesFormatException;
+import java.util.List;
+import java.util.Properties;
+
+import eu.stork.peps.auth.engine.X509PrincipalUtil;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.NotImplementedException;
+import org.bouncycastle.jce.X509Principal;
+import org.opensaml.Configuration;
+import org.opensaml.common.SAMLObject;
+import org.opensaml.common.SignableSAMLObject;
+import org.opensaml.saml2.core.Assertion;
+import org.opensaml.saml2.core.LogoutResponse;
+import org.opensaml.saml2.core.Response;
+import org.opensaml.security.SAMLSignatureProfileValidator;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.security.SecurityConfiguration;
+import org.opensaml.xml.security.SecurityException;
+import org.opensaml.xml.security.credential.Credential;
+import org.opensaml.xml.security.keyinfo.KeyInfoGenerator;
+import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorFactory;
+import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorManager;
+import org.opensaml.xml.security.keyinfo.KeyInfoHelper;
+import org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager;
+import org.opensaml.xml.security.x509.BasicX509Credential;
+import org.opensaml.xml.security.trust.ExplicitKeyTrustEvaluator;
+import org.opensaml.xml.signature.KeyInfo;
+import org.opensaml.xml.signature.Signature;
+import org.opensaml.xml.signature.SignatureConstants;
+import org.opensaml.xml.signature.SignatureException;
+import org.opensaml.xml.signature.SignatureValidator;
+import org.opensaml.xml.signature.Signer;
+import org.opensaml.xml.validation.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
+import eu.stork.peps.exceptions.SAMLEngineException;
+
+/**
+ * The Class HWSign. Module of sign.
+ * 
+ * @author fjquevedo
+ */
+public final class SignHW implements SAMLEngineSignI {
+
+    /** The Constant CONFIGURATION_FILE. */
+    private static final String CONF_FILE = "configurationFile";
+
+    /** The Constant KEYSTORE_TYPE.
+    private static final String KEYSTORE_TYPE = "keystoreType" */
+
+    /** The logger. */
+    private static final Logger LOG = LoggerFactory.getLogger(SignHW.class
+	    .getName());
+
+    /** The stork own key store. */
+    private KeyStore storkOwnKeyStore = null;
+
+    /**
+     * Gets the stork own key store.
+     * 
+     * @return the stork own key store
+     */
+    public KeyStore getStorkOwnKeyStore() {
+	return storkOwnKeyStore;
+    }
+    
+    /**
+     * Gets the stork trustStore.
+     * 
+     * @return the stork own key store
+     */
+    public KeyStore getTrustStore() {
+	return storkOwnKeyStore;
+    }
+
+    /**
+     * Sets the stork own key store.
+     * 
+     * @param newkOwnKeyStore the new stork own key store
+     */
+    public void setStorkOwnKeyStore(final KeyStore newkOwnKeyStore) {
+	this.storkOwnKeyStore = newkOwnKeyStore;
+    }
+
+    /**
+     * Gets the properties.
+     * 
+     * @return the properties
+     */
+    public Properties getProperties() {
+	return properties;
+    }
+
+    /**
+     * Sets the properties.
+     * 
+     * @param newProperties the new properties
+     */
+    public void setProperties(final Properties newProperties) {
+	this.properties = newProperties;
+    }
+
+    /** The HW sign prop. */
+    private Properties properties = null;
+
+    /**
+     * @see
+     * eu.stork.peps.auth.engine.core.SAMLEngineSignI#init(java.lang.String)
+     * @param fileConf file of configuration
+     * @throws SAMLEngineException error in read file
+     */
+    public void init(final String fileConf)
+	    throws SAMLEngineException {
+	InputStream inputStr = null;
+	try {
+	inputStr = SignHW.class.getResourceAsStream("/"
+		+ fileConf);
+	properties = new Properties();
+	
+	    properties.loadFromXML(inputStr);
+	} catch (final InvalidPropertiesFormatException e) {
+	    LOG.info("Exception: invalid properties format.");
+	    throw new SAMLEngineException(e);
+	} catch (IOException e) {
+	    LOG.info("Exception: invalid file: " + fileConf);
+	    throw new SAMLEngineException(e);
+	} finally {
+	    IOUtils.closeQuietly(inputStr);
+	}
+    }
+
+
+    /**
+     * @see eu.stork.peps.auth.engine.core.SAMLEngineSignI#getCertificate()
+     * @return the X509Certificate.
+     */
+    public X509Certificate getCertificate() {
+	throw new NotImplementedException();
+    }
+
+    /**
+     * @see
+     * eu.stork.peps.auth.engine.core.SAMLEngineSignI#sign(SignableSAMLObject tokenSaml)
+     * @param tokenSaml signable SAML Object
+     * @return the SAMLObject signed.
+     * @throws SAMLEngineException error in sign token saml
+     */
+    public SAMLObject sign(final SignableSAMLObject tokenSaml) throws SAMLEngineException {
+
+	try {
+	    LOG.info("Star procces of sign");
+	    final char[] pin = properties.getProperty("keyPassword")
+		    .toCharArray();
+
+	    storkOwnKeyStore.load(null, pin);
+
+	    final String serialNumber = properties.getProperty("serialNumber");
+	    final String issuer = properties.getProperty("issuer");
+
+	    String alias = null;
+	    String aliasCert;
+	    X509Certificate certificate;
+
+	    boolean find = false;
+	    for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
+		    .hasMoreElements() && !find;) {
+		aliasCert = e.nextElement();
+		certificate = (X509Certificate) storkOwnKeyStore
+			.getCertificate(aliasCert);
+		// Verified serial number, issuer
+
+		final String serialNum = certificate.getSerialNumber()
+			.toString(16);
+		X509Principal issuerDN = new X509Principal(certificate.getIssuerDN().getName());
+		X509Principal issuerDNConf = new X509Principal(issuer);
+
+            if(serialNum.equalsIgnoreCase(serialNumber)
+                    && X509PrincipalUtil.equals(issuerDN, issuerDNConf)){
+		              alias = aliasCert;
+		              find = true;
+		}
+		
+	    }
+
+        if (!find) {
+            throw new SAMLEngineException("Certificate cannot be found in keystore ");
+        }
+	    certificate = (X509Certificate) storkOwnKeyStore.getCertificate(alias);
+	    final PrivateKey privateKey = (PrivateKey) storkOwnKeyStore.getKey(
+		    alias, pin);
+
+	    LOG.info("Recover BasicX509Credential.");
+	    final BasicX509Credential credential = new BasicX509Credential();
+
+	    LOG.debug("Load certificate");
+	    credential.setEntityCertificate(certificate);
+
+	    LOG.debug("Load privateKey");
+	    credential.setPrivateKey(privateKey);
+
+	    LOG.info("Star procces of sign");
+	    final Signature signature = (Signature) org.opensaml.xml.Configuration
+		    .getBuilderFactory().getBuilder(
+			    Signature.DEFAULT_ELEMENT_NAME).buildObject(
+			    Signature.DEFAULT_ELEMENT_NAME);
+
+	    LOG.debug("Begin signature with openSaml");
+	    signature.setSigningCredential(credential);
+
+	    /*signature.setSignatureAlgorithm(
+	    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);*/
+	    signature.setSignatureAlgorithm(
+		    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
+
+	 
+
+	    final SecurityConfiguration securityConf =
+		org.opensaml.xml.Configuration.getGlobalSecurityConfiguration();
+	    final NamedKeyInfoGeneratorManager keyInfoManager = securityConf
+		    .getKeyInfoGeneratorManager();
+	    final KeyInfoGeneratorManager keyInfoGenManager = keyInfoManager
+		    .getDefaultManager();
+	    final KeyInfoGeneratorFactory keyInfoGenFac = keyInfoGenManager
+		    .getFactory(credential);
+	    final KeyInfoGenerator keyInfoGenerator = keyInfoGenFac
+		    .newInstance();
+	    
+	    final KeyInfo keyInfo = keyInfoGenerator.generate(credential);
+
+	    signature.setKeyInfo(keyInfo);
+
+	    LOG.debug("Set Canonicalization Algorithm");
+	    signature.setCanonicalizationAlgorithm(
+		    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
+
+	  //Create a second signature which will be used when signing assertion and response
+	    final Signature signature2 = (Signature) Configuration
+	    .getBuilderFactory().getBuilder(
+		    Signature.DEFAULT_ELEMENT_NAME).buildObject(
+		    Signature.DEFAULT_ELEMENT_NAME);
+	    final SecurityConfiguration secConfiguration2 = Configuration
+	    .getGlobalSecurityConfiguration();
+	    final NamedKeyInfoGeneratorManager keyInfoManager2 = secConfiguration2
+		    .getKeyInfoGeneratorManager();
+	    final KeyInfoGeneratorManager keyInfoGenManager2 = keyInfoManager2
+		    .getDefaultManager();
+	    final KeyInfoGeneratorFactory keyInfoGenFac2 = keyInfoGenManager2
+		    .getFactory(credential);
+	    final KeyInfoGenerator keyInfoGenerator2 = keyInfoGenFac2
+		    .newInstance();
+	    
+	    KeyInfo keyInfo2 = keyInfoGenerator2.generate(credential);
+	    signature2.setSigningCredential(credential);
+	    signature2.setSignatureAlgorithm(
+			    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
+	    signature2.setKeyInfo(keyInfo2);
+	    signature2.setCanonicalizationAlgorithm(
+		    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
+	    	 	    
+
+	    LOG.info("Marshall samlToken.");
+	    String qn = tokenSaml.getElementQName().toString();
+	    
+	    if (qn.endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
+	    {	    
+	  		tokenSaml.setSignature(signature);
+	    	CustomAttributeQueryMarshaller mars = new CustomAttributeQueryMarshaller();
+	    	mars.marshall(tokenSaml);
+	    	Signer.signObject(signature);
+	    }
+	    else if (qn.endsWith(Response.DEFAULT_ELEMENT_LOCAL_NAME) && !qn.contains(LogoutResponse.DEFAULT_ELEMENT_LOCAL_NAME))
+	    {
+	    	Response res = (Response)tokenSaml;
+	    	List<Assertion> asserts = res.getAssertions();
+	    	//If multiple assertions we just sign the response and not the assertion
+	    	if (asserts.size() > 1)
+	    	{	    		
+	    		tokenSaml.setSignature(signature);
+	    		Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+			    .marshall(tokenSaml);
+	    		LOG.info("Sign samlToken.");
+	    	    Signer.signObject(signature);
+	    	}
+	    	//If single assertion we sign the assertion and response
+	    	else
+	    	{
+			    Assertion assertion = (Assertion)asserts.get(0);
+			    assertion.setSignature(signature);			    
+			    tokenSaml.setSignature(signature2);
+			    Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+			    .marshall(tokenSaml);
+			    LOG.info("Sign samlToken.");
+			    Signer.signObject(signature);
+			    Signer.signObject(signature2);
+	    	}
+	    }
+	    //Normally we just sign the total saml response
+	    else
+	    {
+	    	tokenSaml.setSignature(signature);
+	    	Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+		    .marshall(tokenSaml);
+	    	LOG.info("Sign samlToken.");
+		    Signer.signObject(signature);
+	    }
+
+	} catch (final MarshallingException e) {
+	    LOG.error("MarshallingException");
+	    throw new SAMLEngineException(e);
+	} catch (final NoSuchAlgorithmException e) {
+	    LOG.error("A 'xmldsig#rsa-sha1' cryptographic algorithm is requested but is not available in the environment.");
+	    throw new SAMLEngineException(e);
+	} catch (final KeyStoreException e) {
+	    LOG.error("Generic KeyStore exception.");
+	    throw new SAMLEngineException(e);
+	} catch (final SignatureException e) {
+	    LOG.error("Signature exception.");
+	    throw new SAMLEngineException(e);
+	} catch (final SecurityException e) {
+	    LOG.error("Security exception.");
+	    throw new SAMLEngineException(e);
+	} catch (final CertificateException e) {
+	    LOG.error("Certificate exception.");
+	    throw new SAMLEngineException(e);
+	} catch (final IOException e) {
+	    LOG.error("IO exception.");
+	    throw new SAMLEngineException(e);
+	} catch (final UnrecoverableKeyException e) {
+	    LOG.error("UnrecoverableKeyException exception.");
+	    throw new SAMLEngineException(e);
+	}
+
+	return tokenSaml;
+    }
+
+    /**
+     * @see
+     * eu.stork.peps.auth.engine.core.SAMLEngineSignI#validateSignature(SignableSAMLObject)
+     * @param tokenSaml the token saml
+     * @return the SAMLObject validated.
+     * @throws SAMLEngineException exception in validate signature
+     */
+    public SAMLObject validateSignature(final SignableSAMLObject tokenSaml)
+	    throws SAMLEngineException {
+	LOG.info("Start signature validation.");
+	try {
+
+	    // Validate structure signature
+	    final SAMLSignatureProfileValidator signProfValidator = 
+		new SAMLSignatureProfileValidator();
+
+	    // Indicates signature id conform to SAML Signature profile
+	    signProfValidator.validate(tokenSaml.getSignature());
+
+	    String aliasCert;
+	    X509Certificate certificate;
+
+	    final List<Credential> trustedCred = new ArrayList<Credential>();
+
+	    for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
+		    .hasMoreElements();) {
+		aliasCert = e.nextElement();
+		final BasicX509Credential credential = new BasicX509Credential();
+		certificate = (X509Certificate) storkOwnKeyStore
+			.getCertificate(aliasCert);
+		credential.setEntityCertificate(certificate);
+		trustedCred.add(credential);
+	    }
+
+	    final KeyInfo keyInfo = tokenSaml.getSignature().getKeyInfo();
+	    final List<X509Certificate> listCertificates = KeyInfoHelper
+		    .getCertificates(keyInfo);
+
+	    if (listCertificates.size() != 1) {
+		throw new SAMLEngineException("Only must be one certificate");
+	    }
+
+	    // Exist only one certificate
+	    final BasicX509Credential entityX509Cred = new BasicX509Credential();
+	    entityX509Cred.setEntityCertificate(listCertificates.get(0));
+
+	    final ExplicitKeyTrustEvaluator keyTrustEvaluator = 
+		new ExplicitKeyTrustEvaluator();
+	    if (!keyTrustEvaluator.validate(entityX509Cred, trustedCred)) {
+		throw new SAMLEngineException("Certificate it is not trusted.");
+	    }
+
+	    final SignatureValidator sigValidator = new SignatureValidator(
+		    entityX509Cred);
+
+	    sigValidator.validate(tokenSaml.getSignature());
+
+	} catch (final ValidationException e) {
+	    LOG.error("ValidationException.", e);
+	    throw new SAMLEngineException(e);
+	} catch (final KeyStoreException e) {
+	    LOG.error("ValidationException.", e);
+	    throw new SAMLEngineException(e);
+	} catch (final CertificateException e) {
+	    LOG.error("CertificateException.", e);
+	    throw new SAMLEngineException(e);
+	}
+	return tokenSaml;
+    }
+
+    /**
+     * load cryptographic service provider.
+     * 
+     * @throws SAMLEngineException the SAML engine exception
+     * Note this class was using pkcs11Provider
+     * final Provider pkcs11Provider = new sun.security.pkcs11.SunPKCS11(inputStream)
+     * if (Security.getProperty(pkcs11Provider.getName()) == null) {
+     * Security.insertProviderAt(pkcs11Provider, Security .getProviders().length)
+     * }
+     * storkOwnKeyStore = KeyStore.getInstance(properties.getProperty(KEYSTORE_TYPE))
+     */
+    public void loadCryptServiceProvider() throws SAMLEngineException {
+	LOG.info("Load Cryptographic Service Provider");
+	InputStream inputStream = null; 
+	 
+	try {
+	    inputStream = SignHW.class.getResourceAsStream("/"
+		    + properties.getProperty(CONF_FILE));
+
+	} catch (final Exception e) {	       
+	    throw new SAMLEngineException(
+		    "Error loading CryptographicServiceProvider", e);
+	} finally {
+	    IOUtils.closeQuietly(inputStream);
+	}
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java
new file mode 100644
index 000000000..c37074eab
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignModuleFactory.java
@@ -0,0 +1,64 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+/**
+ * The Class ModuleSignFactory.
+ * 
+ * @author fjquevedo
+ * 
+ */
+
+public final class SignModuleFactory {
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(SignModuleFactory.class.getName());
+
+    /**
+     * Instantiates a new module sign factory.
+     */
+    private SignModuleFactory() {
+
+    }
+
+    /**
+     * Gets the single instance of SignModuleFactory.
+     * 
+     * @param className the class name
+     * 
+     * @return single instance of SignModuleFactory
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    public static SAMLEngineSignI getInstance(final String className)
+	    throws STORKSAMLEngineException {
+	LOG.info("[START]SignModuleFactory static");
+	try {
+	    final Class cls = Class.forName(className);
+	    return (SAMLEngineSignI) cls.newInstance();
+	} catch (Exception e) {
+	    throw new STORKSAMLEngineException(e);
+	}
+
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java
new file mode 100644
index 000000000..6d9ac9ce3
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignP12.java
@@ -0,0 +1,565 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.GeneralSecurityException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.Security;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.InvalidPropertiesFormatException;
+import java.util.List;
+import java.util.Properties;
+
+import eu.stork.peps.auth.engine.X509PrincipalUtil;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.NotImplementedException;
+import org.bouncycastle.jce.X509Principal;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.opensaml.Configuration;
+import org.opensaml.common.SAMLObject;
+import org.opensaml.common.SignableSAMLObject;
+import org.opensaml.saml2.core.Assertion;
+import org.opensaml.saml2.core.LogoutResponse;
+import org.opensaml.saml2.core.Response;
+import org.opensaml.security.SAMLSignatureProfileValidator;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.security.SecurityConfiguration;
+import org.opensaml.xml.security.SecurityException;
+import org.opensaml.xml.security.credential.Credential;
+import org.opensaml.xml.security.keyinfo.KeyInfoGenerator;
+import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorFactory;
+import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorManager;
+import org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager;
+import org.opensaml.xml.security.x509.BasicX509Credential;
+import org.opensaml.xml.security.trust.ExplicitKeyTrustEvaluator;
+import org.opensaml.xml.signature.KeyInfo;
+import org.opensaml.xml.signature.Signature;
+import org.opensaml.xml.signature.SignatureConstants;
+import org.opensaml.xml.signature.SignatureException;
+import org.opensaml.xml.signature.SignatureValidator;
+import org.opensaml.xml.signature.Signer;
+import org.opensaml.xml.util.Base64;
+import org.opensaml.xml.validation.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
+import eu.stork.peps.exceptions.SAMLEngineException;
+
+/**
+ * The Class SWSign. Class responsible for signing and validating of messages
+ * SAML with a certificate store software.
+ * 
+ * @author fjquevedo
+ */
+public final class SignP12 implements SAMLEngineSignI {
+
+	/** The logger. */
+	private static final Logger LOG = LoggerFactory.getLogger(SignP12.class
+			.getName());
+
+
+	/** The p12 store. */
+	private KeyStore p12Store = null;
+
+
+	/** The trust store. */
+	private KeyStore trustStore = null;
+
+
+	/**
+	 * Gets the trust store.
+	 * 
+	 * @return the trust store
+	 */
+	@Override
+	public KeyStore getTrustStore() {
+		return trustStore;
+	}
+
+	/**
+	 * Sets the trust store.
+	 * 
+	 * @param newTrustStore the new trust store
+	 */
+	public void setTrustStore(final KeyStore newTrustStore) {
+		this.trustStore = newTrustStore;
+	}
+
+	/**
+	 * The instance.
+	 * 
+	 * @return the properties
+	 */
+
+	public Properties getProperties() {
+		return properties;
+	}
+
+
+
+	/**
+	 * Gets the p12 store.
+	 * 
+	 * @return the p12 store
+	 */
+	public KeyStore getP12Store() {
+		return p12Store;
+	}
+
+
+
+	/**
+	 * Sets the p12 store.
+	 * 
+	 * @param newP12Store the new p12 store
+	 */
+	public void setP12Store(final KeyStore newP12Store) {
+		this.p12Store = newP12Store;
+	}
+
+
+
+	/**
+	 * Sets the properties.
+	 * 
+	 * @param newProperties the new properties
+	 */
+	public void setProperties(final Properties newProperties) {
+		this.properties = newProperties;
+	}
+
+	/** The SW sign prop. */
+	private Properties properties = null;
+
+
+	/**
+	 * Initialize the file configuration.
+	 * 
+	 * @param fileConf name of the file configuration
+	 * 
+	 * @throws SAMLEngineException error at the load from  file configuration
+	 */
+	@Override
+	public void init(final String fileConf) throws SAMLEngineException {
+		InputStream fileProperties = null;
+		properties = new Properties();
+		try {
+			try {
+				LOG.debug("Fichero a cargar " + fileConf);
+				fileProperties = new FileInputStream(fileConf);
+				properties.loadFromXML(fileProperties);
+			} catch (Exception e) {
+				LOG.error("Fallo al cargar el recurso externo. Se reintenta como fichero interno.");
+				fileProperties = SignP12.class.getResourceAsStream("/" + fileConf);
+				if (fileProperties == null) {
+					fileProperties = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileConf);
+					if (fileProperties == null) {
+						Enumeration<URL> files = ClassLoader.getSystemClassLoader().getResources(fileConf);
+						if (files != null && files.hasMoreElements()) {
+							LOG.info("Se han encontrado recurso/s. Se toma el primero.");
+							fileProperties = ClassLoader.getSystemClassLoader().getResourceAsStream(files.nextElement().getFile());
+						} else {
+							throw new IOException("No se pudo recuperar el fichero: " + fileConf, e);
+						}
+					}
+				}
+				LOG.debug("Recuperados " + fileProperties.available() + " bytes");
+				properties.loadFromXML(fileProperties);
+			}
+		} catch (InvalidPropertiesFormatException e) {
+			LOG.info("Exception: invalid properties format.");
+			throw new SAMLEngineException(e);
+		} catch (IOException e) {
+			LOG.info("Exception: invalid file: " + fileConf);
+			throw new SAMLEngineException(e);
+		} finally {
+			IOUtils.closeQuietly(fileProperties);
+		}
+	}
+
+	/**
+	 * Gets the certificate.
+	 * 
+	 * @return the X509Certificate
+	 *     
+	 */
+	@Override
+	public X509Certificate getCertificate() {
+		throw new NotImplementedException();
+	}
+
+	/**
+	 * Sign the token SAML.
+	 * 
+	 * @param tokenSaml token SAML
+	 * 
+	 * @return the X509Certificate signed.
+	 * 
+	 * @throws SAMLEngineException error at sign SAML token
+	 *
+	 */
+	@Override
+	public SAMLObject sign(final SignableSAMLObject tokenSaml)
+			throws SAMLEngineException {
+		LOG.info("Start Sign process");
+		try {
+
+			final String serialNumber = properties.getProperty("serialNumber");
+			final String issuer = properties.getProperty("issuer");
+
+			String alias = null;
+			String aliasCert;
+			X509Certificate certificate;
+
+			boolean find = false;
+			for (final Enumeration<String> e = p12Store.aliases(); e
+					.hasMoreElements() && !find;) {
+				aliasCert = e.nextElement();
+				certificate = (X509Certificate) p12Store
+						.getCertificate(aliasCert);
+
+				final String serialNum = certificate.getSerialNumber()
+						.toString(16);
+
+				X509Principal issuerDN = new X509Principal(certificate.getIssuerDN().getName());
+				X509Principal issuerDNConf = new X509Principal(issuer);
+
+				if(serialNum.equalsIgnoreCase(serialNumber)
+						&& X509PrincipalUtil.equals(issuerDN, issuerDNConf)){
+					alias = aliasCert;
+					find = true;
+				}
+
+			}
+
+			certificate = (X509Certificate) p12Store
+					.getCertificate(alias);
+			final PrivateKey privateKey = (PrivateKey) p12Store.getKey(
+					alias, properties.getProperty("keyPassword").toCharArray());
+
+			LOG.info("Recover BasicX509Credential.");
+			final BasicX509Credential credential = new BasicX509Credential();
+
+			LOG.debug("Load certificate");
+			credential.setEntityCertificate(certificate);
+
+			LOG.debug("Load privateKey");
+			credential.setPrivateKey(privateKey);
+
+			LOG.debug("Begin signature with openSaml");
+			final Signature signature = (Signature) org.opensaml.xml.Configuration
+					.getBuilderFactory().getBuilder(
+							Signature.DEFAULT_ELEMENT_NAME).buildObject(
+									Signature.DEFAULT_ELEMENT_NAME);
+
+			signature.setSigningCredential(credential);
+
+			/*signature.setSignatureAlgorithm(
+	    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);*/
+			signature.setSignatureAlgorithm(
+					SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
+
+			final SecurityConfiguration secConfiguration = org.opensaml.xml.Configuration
+					.getGlobalSecurityConfiguration();
+			final NamedKeyInfoGeneratorManager keyInfoManager = secConfiguration
+					.getKeyInfoGeneratorManager();
+			final KeyInfoGeneratorManager keyInfoGenManager = keyInfoManager
+					.getDefaultManager();
+			final KeyInfoGeneratorFactory keyInfoGenFac = keyInfoGenManager
+					.getFactory(credential);
+			final KeyInfoGenerator keyInfoGenerator = keyInfoGenFac
+					.newInstance();
+
+			final KeyInfo keyInfo = keyInfoGenerator.generate(credential);
+
+			signature.setKeyInfo(keyInfo);
+			signature.setCanonicalizationAlgorithm(
+					SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
+
+			//Create a second signature which will be used when signing assertion and response
+			final Signature signature2 = (Signature) org.opensaml.xml.Configuration
+					.getBuilderFactory().getBuilder(
+							Signature.DEFAULT_ELEMENT_NAME).buildObject(
+									Signature.DEFAULT_ELEMENT_NAME);
+			final SecurityConfiguration secConfiguration2 = org.opensaml.xml.Configuration
+					.getGlobalSecurityConfiguration();
+			final NamedKeyInfoGeneratorManager keyInfoManager2 = secConfiguration2
+					.getKeyInfoGeneratorManager();
+			final KeyInfoGeneratorManager keyInfoGenManager2 = keyInfoManager2
+					.getDefaultManager();
+			final KeyInfoGeneratorFactory keyInfoGenFac2 = keyInfoGenManager2
+					.getFactory(credential);
+			final KeyInfoGenerator keyInfoGenerator2 = keyInfoGenFac2
+					.newInstance();
+
+			KeyInfo keyInfo2 = keyInfoGenerator2.generate(credential);
+			signature2.setSigningCredential(credential);
+			signature2.setSignatureAlgorithm(
+					SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
+			signature2.setKeyInfo(keyInfo2);
+			signature2.setCanonicalizationAlgorithm(
+					SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
+
+
+			LOG.info("Marshall samlToken.");
+			String qn = tokenSaml.getElementQName().toString();
+
+			if (qn.endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME))
+			{	    
+				tokenSaml.setSignature(signature);
+				CustomAttributeQueryMarshaller mars = new CustomAttributeQueryMarshaller();
+				mars.marshall(tokenSaml);
+				Signer.signObject(signature);
+			}
+			else if (qn.endsWith(Response.DEFAULT_ELEMENT_LOCAL_NAME) && !qn.contains(LogoutResponse.DEFAULT_ELEMENT_LOCAL_NAME))
+			{
+				Response res = (Response)tokenSaml;
+				List<Assertion> asserts = res.getAssertions();
+				//If multiple assertions we just sign the response and not the assertion
+				if (asserts.size() > 1)
+				{	    		
+					tokenSaml.setSignature(signature);
+					org.opensaml.xml.Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+					.marshall(tokenSaml);
+					LOG.info("Sign samlToken.");
+					Signer.signObject(signature);
+				}
+				//If single assertion we sign the assertion and response
+				else
+				{
+					Assertion assertion = asserts.get(0);
+					assertion.setSignature(signature);			    
+					tokenSaml.setSignature(signature2);
+					org.opensaml.xml.Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+					.marshall(tokenSaml);
+					LOG.info("Sign samlToken.");
+					Signer.signObject(signature);
+					Signer.signObject(signature2);
+				}
+			}
+			//Normally we just sign the total saml response
+			else
+			{
+				tokenSaml.setSignature(signature);
+				org.opensaml.xml.Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+				.marshall(tokenSaml);
+				LOG.info("Sign samlToken.");
+				Signer.signObject(signature);
+			}
+
+		} catch (MarshallingException e) {
+			LOG.error("MarshallingException");
+			throw new SAMLEngineException(e);
+		} catch (NoSuchAlgorithmException e) {
+			LOG.error("A 'xmldsig#rsa-sha1' cryptographic algorithm is requested but is not available in the environment.");
+			throw new SAMLEngineException(e);
+		} catch (KeyStoreException e) {
+			LOG.error("Generic KeyStore exception.");
+			throw new SAMLEngineException(e);
+		} catch (SignatureException e) {
+			LOG.error("Signature exception.");
+			throw new SAMLEngineException(e);
+		} catch (SecurityException e) {
+			LOG.error("Security exception.");
+			throw new SAMLEngineException(e);
+		} catch (UnrecoverableKeyException e) {
+			LOG.error("UnrecoverableKey exception.");
+			throw new SAMLEngineException(e);
+		}
+
+		return tokenSaml;
+	}
+
+	/**
+	 * Validate signature.
+	 * 
+	 * @param tokenSaml token SAML
+	 * 
+	 * @return the SAMLObject validated.
+	 * 
+	 * @throws SAMLEngineException error validate signature
+	 * 
+	 */
+	@Override
+	public SAMLObject validateSignature(final SignableSAMLObject tokenSaml)
+			throws SAMLEngineException {
+		LOG.info("Start signature validation.");
+		try {
+
+			// Validate structure signature
+			final SAMLSignatureProfileValidator sigProfValidator = 
+					new SAMLSignatureProfileValidator();
+			try {
+				// Indicates signature id conform to SAML Signature profile
+				sigProfValidator.validate(tokenSaml.getSignature());
+			} catch (ValidationException e) {
+				LOG.error("ValidationException: signature isn't conform to SAML Signature profile.");
+				throw new SAMLEngineException(e);
+			}
+
+			String aliasCert = null;
+			X509Certificate certificate;
+
+			final List<Credential> trustCred = new ArrayList<Credential>();
+
+			for (final Enumeration<String> e = trustStore.aliases(); e
+					.hasMoreElements();) 
+			{
+				aliasCert = e.nextElement();
+				final BasicX509Credential credential = new BasicX509Credential();
+				certificate = (X509Certificate) trustStore
+						.getCertificate(aliasCert);
+				credential.setEntityCertificate(certificate);
+				trustCred.add(credential);
+			}
+
+			final KeyInfo keyInfo = tokenSaml.getSignature().getKeyInfo();
+
+			final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
+					.getX509Datas().get(0).getX509Certificates().get(0);
+
+			final CertificateFactory certFact = CertificateFactory
+					.getInstance("X.509");
+			final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
+					.decode(xmlCert.getValue()));
+			final X509Certificate cert = (X509Certificate) certFact
+					.generateCertificate(bis);
+
+			// Exist only one certificate
+			final BasicX509Credential entityX509Cred = new BasicX509Credential();
+			entityX509Cred.setEntityCertificate(cert);
+
+			/* A better use of PKI based validation but not wanted for STORK...
+			boolean trusted = false;
+
+			for (final Enumeration<String> e = trustStore.aliases(); e.hasMoreElements();) 
+			{
+				aliasCert = e.nextElement();		
+				certificate = (X509Certificate) trustStore.getCertificate(aliasCert);					
+				try {
+					cert.verify(certificate.getPublicKey());
+					trusted = true;
+					break;
+				}
+				catch (Exception ex) {
+					//Do nothing - cert not trusted yet
+				}
+			}
+
+			if (!trusted)
+				throw new SAMLEngineException("Certificate is not trusted.");*/
+
+			// Validate trust certificates
+			final ExplicitKeyTrustEvaluator keyTrustEvaluator = 
+					new ExplicitKeyTrustEvaluator();
+			if (!keyTrustEvaluator.validate(entityX509Cred, trustCred)) 
+			{
+				throw new SAMLEngineException("Certificate it is not trusted.");
+			}
+
+			// Validate signature
+			final SignatureValidator sigValidator = new SignatureValidator(
+					entityX509Cred);
+			sigValidator.validate(tokenSaml.getSignature());
+
+		} catch (ValidationException e) {
+			LOG.error("ValidationException.");
+			throw new SAMLEngineException(e);
+		} catch (KeyStoreException e) {
+			LOG.error("KeyStoreException.", e);
+			throw new SAMLEngineException(e);
+		} catch (GeneralSecurityException e) {
+			LOG.error("GeneralSecurityException.", e);
+			throw new SAMLEngineException(e);
+		}
+		return tokenSaml;
+	}
+
+
+	/**
+	 * Load cryptographic service provider.
+	 * 
+	 * @throws SAMLEngineException the SAML engine exception
+	 */
+	@Override
+	public void loadCryptServiceProvider() throws SAMLEngineException {
+		LOG.info("Load Cryptographic Service Provider");
+
+		FileInputStream fis = null;
+		FileInputStream fisTrustStore = null;
+
+		try {
+			// Dynamically register Bouncy Castle provider.
+			boolean found = false;
+			// Check if BouncyCastle is already registered as a provider
+			final Provider[] providers = Security.getProviders();
+			for (int i = 0; i < providers.length; i++) {
+				if (providers[i].getName().equals(
+						BouncyCastleProvider.PROVIDER_NAME)) {
+					found = true;
+				}
+			}
+
+			// Register only if the provider has not been previously registered
+			if (!found) {
+				LOG.debug("SAMLCore: Register Bouncy Castle provider.");
+				Security.insertProviderAt(new BouncyCastleProvider(), Security
+						.getProviders().length);
+			}
+
+			p12Store = KeyStore.getInstance(properties
+					.getProperty("keystoreType"));
+
+			fis = new FileInputStream(properties
+					.getProperty("keystorePath"));
+
+			p12Store.load(fis, properties.getProperty(
+					"keyStorePassword").toCharArray());
+
+
+			trustStore = KeyStore.getInstance(properties
+					.getProperty("trustStoreType"));
+
+			fisTrustStore = new FileInputStream(properties
+					.getProperty("trustStorePath"));
+			trustStore.load(fisTrustStore, properties.getProperty(
+					"trustStorePassword").toCharArray());
+
+		} catch (Exception e) {
+			throw new SAMLEngineException(
+					"Error loading CryptographicServiceProvider", e);
+		}  finally {
+			IOUtils.closeQuietly(fis);
+			IOUtils.closeQuietly(fisTrustStore);
+		}	
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java
new file mode 100644
index 000000000..e31688069
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/SignSW.java
@@ -0,0 +1,527 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import eu.stork.peps.auth.engine.X509PrincipalUtil;
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+import eu.stork.peps.auth.engine.core.SAMLEngineSignI;
+import eu.stork.peps.exceptions.SAMLEngineException;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.NotImplementedException;
+import org.bouncycastle.jce.X509Principal;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.opensaml.Configuration;
+import org.opensaml.common.SAMLObject;
+import org.opensaml.common.SignableSAMLObject;
+import org.opensaml.saml2.core.Assertion;
+import org.opensaml.saml2.core.LogoutResponse;
+import org.opensaml.saml2.core.Response;
+import org.opensaml.security.SAMLSignatureProfileValidator;
+import org.opensaml.xml.io.MarshallingException;
+import org.opensaml.xml.security.SecurityConfiguration;
+import org.opensaml.xml.security.SecurityException;
+import org.opensaml.xml.security.credential.Credential;
+import org.opensaml.xml.security.keyinfo.KeyInfoGenerator;
+import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorFactory;
+import org.opensaml.xml.security.keyinfo.KeyInfoGeneratorManager;
+import org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager;
+import org.opensaml.xml.security.trust.ExplicitKeyTrustEvaluator;
+import org.opensaml.xml.security.trust.ExplicitX509CertificateTrustEvaluator;
+import org.opensaml.xml.security.x509.BasicX509Credential;
+import org.opensaml.xml.signature.*;
+import org.opensaml.xml.signature.Signature;
+import org.opensaml.xml.signature.SignatureException;
+import org.opensaml.xml.signature.Signer;
+import org.opensaml.xml.util.Base64;
+import org.opensaml.xml.validation.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.*;
+import java.security.cert.CertificateExpiredException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.CertificateNotYetValidException;
+import java.security.cert.X509Certificate;
+import java.util.*;
+
+
+/**
+ * The Class SWSign. Class responsible for signing and validating of messages
+ * SAML with a certificate store software.
+ *
+ * @author fjquevedo
+ */
+public class SignSW implements SAMLEngineSignI {
+
+    /**
+     * The Constant KEYSTORE_TYPE.
+     */
+    private static final String KEYSTORE_TYPE = "keystoreType";
+
+    /**
+     * The Constant KEY_STORE_PASSWORD.
+     */
+    private static final String KEY_STORE_PASS = "keyStorePassword";
+
+    /**
+     * The logger.
+     */
+    private static final Logger LOG = LoggerFactory.getLogger(SignSW.class
+            .getName());
+
+    /**
+     * The stork own key store.
+     */
+    private KeyStore storkOwnKeyStore = null;
+
+    /**
+     * The instance.
+     *
+     * @return the properties
+     */
+
+    public final Properties getProperties() {
+        return properties;
+    }
+
+    /**
+     * Gets the stork own key store.
+     *
+     * @return the stork own key store
+     */
+    public final KeyStore getStorkOwnKeyStore() {
+        return storkOwnKeyStore;
+    }
+
+    /**
+     * Gets the stork trustStore.
+     *
+     * @return the stork own key store
+     */
+    public KeyStore getTrustStore() {
+        return storkOwnKeyStore;
+    }
+
+    /**
+     * Sets the stork own key store.
+     *
+     * @param newkOwnKeyStore the new stork own key store
+     */
+    public final void setStorkOwnKeyStore(final KeyStore newkOwnKeyStore) {
+        this.storkOwnKeyStore = newkOwnKeyStore;
+    }
+
+    /**
+     * Sets the properties.
+     *
+     * @param newProperties the new properties
+     */
+    public final void setProperties(final Properties newProperties) {
+        this.properties = newProperties;
+    }
+
+    /**
+     * The SW sign prop.
+     */
+    private Properties properties = null;
+
+
+    /**
+     * Inits the file configuration.
+     *
+     * @param fileConf name of the file configuration
+     * @throws SAMLEngineException error at the load from  file configuration
+     */
+    public final void init(final String fileConf)
+            throws SAMLEngineException {
+        InputStream fileProperties = null;
+        // fetch base from system properties, give a default if there is nothing configured
+        String base = System.getProperty("eu.stork.samlengine.config.location");
+        if (null != base) {
+            if (!base.endsWith("/")) {
+                base += "/";
+            }
+        } else {
+            base = "/";
+        }
+
+        try {
+            if (null != base)
+                fileProperties = new FileInputStream(base + fileConf);
+            else
+                fileProperties = SignSW.class.getResourceAsStream("/"
+                        + fileConf);
+            properties = new Properties();
+
+            properties.loadFromXML(fileProperties);
+            fileProperties.close();
+        } catch (InvalidPropertiesFormatException e) {
+            LOG.info("Exception: invalid properties format.");
+            throw new SAMLEngineException(e);
+        } catch (IOException e) {
+            LOG.info("Exception: invalid file: " + fileConf);
+            throw new SAMLEngineException(e);
+        } finally {
+            IOUtils.closeQuietly(fileProperties);
+        }
+    }
+
+    /**
+     * @return the X509Certificate
+     * @see eu.stork.peps.auth.engine.core.SAMLEngineSignI#getCertificate()
+     */
+    public final X509Certificate getCertificate() {
+        throw new NotImplementedException();
+    }
+
+
+    /**
+     * Sign the token SAML.
+     *
+     * @param tokenSaml the token SAML.
+     * @return the SAML object
+     * @throws SAMLEngineException the SAML engine exception
+     */
+    public final SAMLObject sign(final SignableSAMLObject tokenSaml)
+            throws SAMLEngineException {
+        LOG.info("Start Sign process.");
+        try {
+            final String serialNumber = properties.getProperty("serialNumber");
+            final String issuer = properties.getProperty("issuer");
+
+            String alias = null;
+            String aliasCert;
+            X509Certificate certificate;
+            boolean find = false;
+
+            for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
+                    .hasMoreElements() && !find; ) {
+                aliasCert = e.nextElement();
+                certificate = (X509Certificate) storkOwnKeyStore
+                        .getCertificate(aliasCert);
+
+                final String serialNum = certificate.getSerialNumber()
+                        .toString(16);
+
+                X509Principal issuerDN = new X509Principal(certificate.getIssuerDN().getName());
+                X509Principal issuerDNConf = new X509Principal(issuer);
+
+                if (serialNum.equalsIgnoreCase(serialNumber)
+                        && X509PrincipalUtil.equals(issuerDN, issuerDNConf)) {
+                    alias = aliasCert;
+                    find = true;
+                }
+            }
+            if (!find) {
+                throw new SAMLEngineException("Certificate cannot be found in keystore ");
+            }
+            certificate = (X509Certificate) storkOwnKeyStore.getCertificate(alias);
+            final PrivateKey privateKey = (PrivateKey) storkOwnKeyStore.getKey(
+                    alias, properties.getProperty("keyPassword").toCharArray());
+
+            LOG.info("Recover BasicX509Credential.");
+            final BasicX509Credential credential = new BasicX509Credential();
+
+            LOG.debug("Load certificate");
+            credential.setEntityCertificate(certificate);
+
+            LOG.debug("Load privateKey");
+            credential.setPrivateKey(privateKey);
+
+            LOG.debug("Begin signature with openSaml");
+            final Signature signature = (Signature) Configuration
+                    .getBuilderFactory().getBuilder(
+                            Signature.DEFAULT_ELEMENT_NAME).buildObject(
+                            Signature.DEFAULT_ELEMENT_NAME);
+
+            signature.setSigningCredential(credential);
+            signature.setSignatureAlgorithm(
+                    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
+            //signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
+
+
+            final SecurityConfiguration secConfiguration = Configuration
+                    .getGlobalSecurityConfiguration();
+            final NamedKeyInfoGeneratorManager keyInfoManager = secConfiguration
+                    .getKeyInfoGeneratorManager();
+            final KeyInfoGeneratorManager keyInfoGenManager = keyInfoManager
+                    .getDefaultManager();
+            final KeyInfoGeneratorFactory keyInfoGenFac = keyInfoGenManager
+                    .getFactory(credential);
+            final KeyInfoGenerator keyInfoGenerator = keyInfoGenFac
+                    .newInstance();
+
+            KeyInfo keyInfo = keyInfoGenerator.generate(credential);
+
+            signature.setKeyInfo(keyInfo);
+            signature.setCanonicalizationAlgorithm(
+                    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
+
+            //Create a second signature which will be used when signing assertion and response
+            final Signature signature2 = (Signature) Configuration
+                    .getBuilderFactory().getBuilder(
+                            Signature.DEFAULT_ELEMENT_NAME).buildObject(
+                            Signature.DEFAULT_ELEMENT_NAME);
+            final SecurityConfiguration secConfiguration2 = Configuration
+                    .getGlobalSecurityConfiguration();
+            final NamedKeyInfoGeneratorManager keyInfoManager2 = secConfiguration2
+                    .getKeyInfoGeneratorManager();
+            final KeyInfoGeneratorManager keyInfoGenManager2 = keyInfoManager2
+                    .getDefaultManager();
+            final KeyInfoGeneratorFactory keyInfoGenFac2 = keyInfoGenManager2
+                    .getFactory(credential);
+            final KeyInfoGenerator keyInfoGenerator2 = keyInfoGenFac2
+                    .newInstance();
+
+            KeyInfo keyInfo2 = keyInfoGenerator2.generate(credential);
+            signature2.setSigningCredential(credential);
+            signature2.setSignatureAlgorithm(
+                    SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
+            //signature2.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
+            signature2.setKeyInfo(keyInfo2);
+            signature2.setCanonicalizationAlgorithm(
+                    SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
+
+
+            LOG.info("Marshall samlToken.");
+            String qn = tokenSaml.getElementQName().toString();
+
+            if (qn.endsWith(CustomAttributeQuery.DEFAULT_ELEMENT_LOCAL_NAME)) {
+                tokenSaml.setSignature(signature);
+                CustomAttributeQueryMarshaller mars = new CustomAttributeQueryMarshaller();
+                mars.marshall(tokenSaml);
+                Signer.signObject(signature);
+            } else if (qn.endsWith(Response.DEFAULT_ELEMENT_LOCAL_NAME) && !qn.contains(LogoutResponse.DEFAULT_ELEMENT_LOCAL_NAME)) {
+                Response res = (Response) tokenSaml;
+                List<Assertion> asserts = res.getAssertions();
+                //If multiple assertions we just sign the response and not the assertion
+                if (asserts.size() > 1) {
+                    tokenSaml.setSignature(signature);
+                    Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+                            .marshall(tokenSaml);
+                    LOG.info("Sign samlToken.");
+                    Signer.signObject(signature);
+                }
+                //If single assertion we sign the assertion and response
+                else {
+                    Assertion assertion = (Assertion) asserts.get(0);
+                    assertion.setSignature(signature);
+                    tokenSaml.setSignature(signature2);
+                    Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+                            .marshall(tokenSaml);
+                    LOG.info("Sign samlToken.");
+                    Signer.signObject(signature);
+                    Signer.signObject(signature2);
+                }
+            }
+            //Normally we just sign the total saml response
+            else {
+                tokenSaml.setSignature(signature);
+                Configuration.getMarshallerFactory().getMarshaller(tokenSaml)
+                        .marshall(tokenSaml);
+                LOG.info("Sign samlToken.");
+                Signer.signObject(signature);
+            }
+
+
+        } catch (MarshallingException e) {
+            LOG.error("MarshallingException");
+            throw new SAMLEngineException(e);
+        } catch (NoSuchAlgorithmException e) {
+            LOG.error("A 'xmldsig#rsa-sha1' cryptographic algorithm is requested but is not available in the environment.");
+            throw new SAMLEngineException(e);
+        } catch (KeyStoreException e) {
+            LOG.error("Generic KeyStore exception.");
+            throw new SAMLEngineException(e);
+        } catch (SignatureException e) {
+            LOG.error("Signature exception.");
+            throw new SAMLEngineException(e);
+        } catch (SecurityException e) {
+            LOG.error("Security exception.");
+            throw new SAMLEngineException(e);
+        } catch (UnrecoverableKeyException e) {
+            LOG.error("UnrecoverableKey exception.");
+            throw new SAMLEngineException(e);
+        }
+
+        return tokenSaml;
+    }
+
+    /**
+     * @param tokenSaml token SAML
+     * @return the SAMLObject validated.
+     * @throws SAMLEngineException error validate signature
+     * @see eu.stork.peps.auth.engine.core.SAMLEngineSignI#validateSignature(org.opensaml.common.SignableSAMLObject)
+     */
+    public final SAMLObject validateSignature(final SignableSAMLObject tokenSaml)
+            throws SAMLEngineException {
+        LOG.info("Start signature validation.");
+        try {
+
+            // Validate structure signature
+            final SAMLSignatureProfileValidator sigProfValidator =
+                    new SAMLSignatureProfileValidator();
+            try {
+                // Indicates signature id conform to SAML Signature profile
+                sigProfValidator.validate(tokenSaml.getSignature());
+            } catch (ValidationException e) {
+                LOG.error("ValidationException: signature isn't conform to SAML Signature profile.");
+                throw new SAMLEngineException(e);
+            }
+
+            String aliasCert = null;
+            X509Certificate certificate;
+
+            final List<Credential> trustCred = new ArrayList<Credential>();
+
+            for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e
+                    .hasMoreElements(); ) {
+                aliasCert = e.nextElement();
+                final BasicX509Credential credential = new BasicX509Credential();
+                certificate = (X509Certificate) storkOwnKeyStore
+                        .getCertificate(aliasCert);
+                credential.setEntityCertificate(certificate);
+                trustCred.add(credential);
+            }
+
+            final KeyInfo keyInfo = tokenSaml.getSignature().getKeyInfo();
+
+            final org.opensaml.xml.signature.X509Certificate xmlCert = keyInfo
+                    .getX509Datas().get(0).getX509Certificates().get(0);
+
+            final CertificateFactory certFact = CertificateFactory
+                    .getInstance("X.509");
+            final ByteArrayInputStream bis = new ByteArrayInputStream(Base64
+                    .decode(xmlCert.getValue()));
+            final X509Certificate cert = (X509Certificate) certFact
+                    .generateCertificate(bis);
+
+            // Exist only one certificate
+            final BasicX509Credential entityX509Cred = new BasicX509Credential();
+            entityX509Cred.setEntityCertificate(cert);
+
+            try {
+                cert.checkValidity();
+            } catch (CertificateExpiredException exp) {
+                throw new SAMLEngineException("Certificate expired.");
+            } catch (CertificateNotYetValidException exp) {
+                throw new SAMLEngineException("Certificate not yet valid.");
+            }
+
+		/* A better use of PKI based validation but not wanted for STORK... 
+        boolean trusted = false;
+		
+		for (final Enumeration<String> e = storkOwnKeyStore.aliases(); e.hasMoreElements();) 
+	    {
+	    	aliasCert = e.nextElement();		
+	    	certificate = (X509Certificate) storkOwnKeyStore.getCertificate(aliasCert);					
+	    	try {
+	    		cert.verify(certificate.getPublicKey());
+	    		trusted = true;
+	    		break;
+	    	}
+	    	catch (Exception ex) {
+	    		//Do nothing - cert not trusted yet
+	    	}
+	    }
+		
+		if (!trusted)
+		    throw new SAMLEngineException("Certificate is not trusted.");*/
+
+            // Validate trust certificates
+            final ExplicitX509CertificateTrustEvaluator chainTrustEvaluator = new ExplicitX509CertificateTrustEvaluator();
+
+            if (!chainTrustEvaluator.validate(entityX509Cred, trustCred)) {
+                throw new SAMLEngineException("Certificate is not trusted.");
+            }
+            final ExplicitKeyTrustEvaluator keyTrustEvaluator =
+                    new ExplicitKeyTrustEvaluator();
+
+            if (!keyTrustEvaluator.validate(entityX509Cred, trustCred)) {
+                throw new SAMLEngineException("Certificate is not trusted.");
+            }
+
+            // Validate signature
+            final SignatureValidator sigValidator = new SignatureValidator(
+                    entityX509Cred);
+            sigValidator.validate(tokenSaml.getSignature());
+
+        } catch (ValidationException e) {
+            LOG.error("ValidationException.");
+            throw new SAMLEngineException(e);
+        } catch (KeyStoreException e) {
+            LOG.error("KeyStoreException.", e);
+            throw new SAMLEngineException(e);
+        } catch (GeneralSecurityException e) {
+            LOG.error("GeneralSecurityException.", e);
+            throw new SAMLEngineException(e);
+        }
+        LOG.info(tokenSaml.getSignatureReferenceID());
+        LOG.info("Start signature validation - END.");
+        return tokenSaml;
+    }
+
+
+    /**
+     * Load cryptographic service provider.
+     *
+     * @throws SAMLEngineException the SAML engine exception
+     */
+    public final void loadCryptServiceProvider() throws SAMLEngineException {
+        LOG.info("Load Cryptographic Service Provider");
+        FileInputStream fis = null;
+        try {
+            // Dynamically register Bouncy Castle provider.
+            boolean found = false;
+            // Check if BouncyCastle is already registered as a provider
+            final Provider[] providers = Security.getProviders();
+            for (int i = 0; i < providers.length; i++) {
+                if (providers[i].getName().equals(
+                        BouncyCastleProvider.PROVIDER_NAME)) {
+                    found = true;
+                }
+            }
+
+            // Register only if the provider has not been previously registered
+            if (!found) {
+                LOG.info("SAMLCore: Register Bouncy Castle provider.");
+                Security.insertProviderAt(new BouncyCastleProvider(), Security
+                        .getProviders().length);
+            }
+
+            storkOwnKeyStore = KeyStore.getInstance(properties
+                    .getProperty(KEYSTORE_TYPE));
+
+            LOG.info("Loading KeyInfo from keystore file " + properties.getProperty("keystorePath"));
+            fis = new FileInputStream(properties
+                    .getProperty("keystorePath"));
+
+            storkOwnKeyStore.load(fis, properties.getProperty(
+                    KEY_STORE_PASS).toCharArray());
+
+        } catch (Exception e) {
+            LOG.error("Error loading CryptographicServiceProvider", e);
+            throw new SAMLEngineException(
+                    "Error loading CryptographicServiceProvider", e);
+        } finally {
+            IOUtils.closeQuietly(fis);
+        }
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java
new file mode 100644
index 000000000..a60515593
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesBuilder.java
@@ -0,0 +1,41 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
+
+import eu.stork.peps.auth.engine.core.SAMLCore;
+import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
+
+/**
+ * The Class VIDPAuthenticationAttributesBuilder.
+ * 
+ * @author fjquevedo
+ */
+public final class VIDPAuthenticationAttributesBuilder extends AbstractSAMLObjectBuilder<VIDPAuthenticationAttributes> {
+    
+
+    /** {@inheritDoc} */
+    public VIDPAuthenticationAttributes buildObject() {
+        return buildObject(SAMLCore.STORK10P_NS.getValue(), VIDPAuthenticationAttributes.DEF_LOCAL_NAME, SAMLCore.STORK10P_PREFIX.getValue());
+    }
+
+    /** {@inheritDoc} */
+    public VIDPAuthenticationAttributes buildObject(final String namespaceURI, final String localName, final String namespacePrefix) {
+        return new VIDPAuthenticationAttributesImpl(namespaceURI, localName, namespacePrefix);
+    }
+    
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java
new file mode 100644
index 000000000..25737e307
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesImpl.java
@@ -0,0 +1,132 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.opensaml.common.impl.AbstractSignableSAMLObject;
+import org.opensaml.xml.XMLObject;
+
+import eu.stork.peps.auth.engine.core.CitizenCountryCode;
+import eu.stork.peps.auth.engine.core.SPInformation;
+import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class VIDPAuthenticationAttributesImpl.
+ * 
+ * @author fjquevedo
+ */
+public final class VIDPAuthenticationAttributesImpl extends AbstractSignableSAMLObject implements
+VIDPAuthenticationAttributes {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(VIDPAuthenticationAttributesImpl.class.getName());
+    /** The citizen country code. */
+    private CitizenCountryCode citizenCountryCode;
+    
+    /** The SP information. */
+    private SPInformation spInformation;
+
+	/**
+     * Instantiates a new requested attributes implement.
+     * 
+     * @param namespaceURI the namespace URI
+     * @param elementLocalName the element local name
+     * @param namespacePrefix the namespace prefix
+     */
+    protected VIDPAuthenticationAttributesImpl(final String namespaceURI,
+	    final String elementLocalName, final String namespacePrefix) {	
+	super(namespaceURI, elementLocalName, namespacePrefix);
+    }
+    
+   
+    /**
+     * getCitizenCountryCode.
+     * 
+     * @return the citizen country code
+     */    
+    public CitizenCountryCode getCitizenCountryCode() {
+    	return citizenCountryCode;
+    }
+    
+    /**
+     * getSPInformation
+     * 
+     * @return the SP information
+     */
+    public SPInformation getSPInformation() {
+		return spInformation;
+	}
+
+    /**
+     * Gets the ordered children.
+     * 
+     * @return the ordered children
+     *
+     */
+    public List<XMLObject> getOrderedChildren() {
+	final ArrayList<XMLObject> children = new ArrayList<XMLObject>();
+
+	children.add(citizenCountryCode);
+	children.add(spInformation);
+		
+	if (getSignature() != null) {
+	    children.add(getSignature());
+	}
+	
+	return Collections.unmodifiableList(children);
+
+    }
+
+    /**
+     * Gets the signature reference id.
+     * 
+     * @return the signature reference id
+     *
+     */
+    public String getSignatureReferenceID() {
+	return null;
+    }
+    
+    /**
+     * Sets the citizen country code.
+     * 
+     * @param newCitizenCountryCode the new citizen country code
+     *
+     */
+    public void setCitizenCountryCode(CitizenCountryCode newCitizenCountryCode) {
+	this.citizenCountryCode = prepareForAssignment(this.citizenCountryCode, newCitizenCountryCode);	
+    }    
+    
+    /**
+     * Sets the SP information.
+     * 
+     * @param newSPInformation the new SP information
+     *
+     */
+    public void setSPInformation(SPInformation newSPInformation) {
+		this.spInformation = prepareForAssignment(this.spInformation, newSPInformation);
+	}
+
+    @Override
+    public int hashCode() {
+        LOGGER.warn("Hashcode has been called, passed to super. Nothing foreseen here");
+        return super.hashCode();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java
new file mode 100644
index 000000000..5635ddd6b
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesMarshaller.java
@@ -0,0 +1,33 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectMarshaller;
+
+/**
+ * The Class VIDPAuthenticationAttributesMarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class VIDPAuthenticationAttributesMarshaller extends AbstractSAMLObjectMarshaller {
+
+    /**
+     * Instantiates a new vIDP authentication attributes marshaller.
+     */
+    public VIDPAuthenticationAttributesMarshaller() {
+	super();
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java
new file mode 100644
index 000000000..ba4a4fe3a
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/VIDPAuthenticationAttributesUnmarshaller.java
@@ -0,0 +1,55 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.impl;
+
+import org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.UnmarshallingException;
+
+import eu.stork.peps.auth.engine.core.CitizenCountryCode;
+import eu.stork.peps.auth.engine.core.SPInformation;
+import eu.stork.peps.auth.engine.core.VIDPAuthenticationAttributes;
+
+/**
+ * The Class VIDPAuthenticationAttributesUnmarshaller.
+ * 
+ * @author fjquevedo
+ */
+public class VIDPAuthenticationAttributesUnmarshaller extends
+	AbstractSAMLObjectUnmarshaller {
+
+    /**
+     * Process child element.
+     * 
+     * @param parentObject the parent object
+     * @param childObject the child object
+     * 
+     * @throws UnmarshallingException the unmarshalling exception
+     *
+     */
+    protected final void processChildElement(final XMLObject parentObject,
+	    final XMLObject childObject) throws UnmarshallingException {
+	final VIDPAuthenticationAttributes vIDPAuthenticationAttr = (VIDPAuthenticationAttributes) parentObject;
+
+	if (childObject instanceof CitizenCountryCode) {
+	    vIDPAuthenticationAttr.setCitizenCountryCode((CitizenCountryCode) childObject);
+	} else if (childObject instanceof SPInformation) {
+		vIDPAuthenticationAttr.setSPInformation((SPInformation) childObject);
+	} else {
+	    super.processChildElement(parentObject, childObject);
+	}	
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java
new file mode 100644
index 000000000..07db9c9db
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/impl/package-info.java
@@ -0,0 +1,19 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.
+ */
+
+/**
+ * Implementations of STORK 1.0 core specification types and elements.
+ */
+package eu.stork.peps.auth.engine.core.impl;
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/package-info.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/package-info.java
new file mode 100644
index 000000000..51745d796
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/package-info.java
@@ -0,0 +1,19 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.
+ */
+
+/**
+ * Interfaces for STORK 1.0 core specification types and elements.
+ */
+package eu.stork.peps.auth.engine.core;
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java
new file mode 100644
index 000000000..c602ad38a
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/CustomAttributeQueryValidator.java
@@ -0,0 +1,69 @@
+package eu.stork.peps.auth.engine.core.validator;
+
+import org.opensaml.xml.util.DatatypeHelper;
+import org.opensaml.xml.validation.ValidationException;
+import org.opensaml.xml.validation.Validator;
+
+import eu.stork.peps.auth.engine.core.CustomAttributeQuery;
+
+public class CustomAttributeQueryValidator implements Validator<CustomAttributeQuery> {
+	
+	/**
+	 * Validate action.
+	 * 
+	 * @param attrQuery the attribute query to validate
+	 * 
+	 * @throws ValidationException the validation exception
+	 */
+	public final void validate(final CustomAttributeQuery attrQuery) throws ValidationException {
+		validateAssertion(attrQuery);
+		validateSubject(attrQuery);
+		validateDestination(attrQuery);
+	}
+
+
+	/**
+	 * Validate assertion.
+	 * 
+	 * @param attrQuery the attribute query
+	 * 
+	 * @throws ValidationException the validation exception
+	 */
+	protected final void validateAssertion(final CustomAttributeQuery attrQuery)
+	throws ValidationException {
+		if (DatatypeHelper.isEmpty(attrQuery.getAssertionConsumerServiceURL())) {
+			throw new ValidationException("Consumer Service URL must be specified.");
+		}
+	}
+	
+	/**
+	 * Validate subject
+	 * @param query the attribute query to validate
+	 * @throws ValidationException the validation exception
+	 */ 
+	protected void validateSubject(CustomAttributeQuery query) throws ValidationException {
+        if (query.getSubject() == null)
+            throw new ValidationException("Subject is required");
+    }
+	
+	/**
+	 * Validate the destination
+	 * @param query the query to validate
+	 * @throws ValidationException the validation exception
+	 */
+	protected void validateDestination(CustomAttributeQuery query) throws ValidationException {
+        if (query.getDestination() == null)
+            throw new ValidationException("Destination is required");
+    }
+	
+	/**
+	 * Validate the destination
+	 * @param query the query to validate
+	 * @throws ValidationException the validation exception
+	 */
+	protected void validateTime(CustomAttributeQuery query) throws ValidationException {
+        if (query.getIssueInstant().isAfterNow())
+            throw new ValidationException("Issue time is in the futue");
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java
new file mode 100644
index 000000000..491549aac
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/ExtensionsSchemaValidator.java
@@ -0,0 +1,61 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.validator;
+
+import java.util.List;
+
+import org.opensaml.saml2.common.Extensions;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.validation.ValidationException;
+import org.opensaml.xml.validation.Validator;
+
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+
+/**
+ * The Class ExtensionsSchemaValidator.
+ * 
+ * @author fjquevedo
+ */
+public class ExtensionsSchemaValidator implements Validator<Extensions> {
+
+
+    /**
+     * validate the extensions.
+     * 
+     * @param extensions the extensions
+     * 
+     * @throws ValidationException the validation exception
+     */
+    public final void validate(final Extensions extensions)
+    throws ValidationException {
+	if (extensions.getUnknownXMLObjects() == null
+		|| extensions.getUnknownXMLObjects().size() <= 0) {
+	    throw new ValidationException("Extension element is empty or not exist.");
+	}
+	
+	List<XMLObject> qaa = extensions.getUnknownXMLObjects(QAAAttribute.DEF_ELEMENT_NAME);
+	
+	if (qaa.size() == 1) {
+		final Validator<QAAAttribute> validatorQaa = new QAAAttributeSchemaValidator();
+		validatorQaa.validate((QAAAttribute) qaa.get(0));
+	} else {
+		throw new ValidationException(
+	    "Extensions must contain only one element QAALevel.");
+	}
+
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java
new file mode 100644
index 000000000..72639c8ee
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/MultipleAssertionResponseValidator.java
@@ -0,0 +1,80 @@
+package eu.stork.peps.auth.engine.core.validator;
+
+import org.opensaml.saml2.core.Response;
+import org.opensaml.xml.validation.ValidationException;
+import org.opensaml.xml.validation.Validator;
+
+
+public class MultipleAssertionResponseValidator implements Validator<Response> {
+	
+	/**
+	 * Validate action.
+	 * 
+	 * @param response the response to validate
+	 * 
+	 * @throws ValidationException the validation exception
+	 */
+	public final void validate(final Response response) throws ValidationException {
+		validateAssertion(response);
+		validateConsent(response);
+		validateDestination(response);		
+		validateTime(response);
+		validateId(response);
+	}
+
+
+	/**
+	 * Validate assertion.
+	 * 
+	 * @param response the attribute query
+	 * 
+	 * @throws ValidationException the validation exception
+	 */
+	protected final void validateAssertion(final Response response)
+	throws ValidationException {
+		if (response.getAssertions() == null || response.getAssertions().size() < 2) {
+			throw new ValidationException("Multiple assertions must be specified.");
+		}
+	}
+	
+	/**
+	 * Validate the Consent
+	 * @param response the response to validate
+	 * @throws ValidationException the validation exception
+	 */
+	protected void validateConsent(Response response) throws ValidationException {
+        if (response.getConsent() == null)
+            throw new ValidationException("Consent is required");
+    }
+	
+	/**
+	 * Validate the destination
+	 * @param response the response to validate
+	 * @throws ValidationException the validation exception
+	 */
+	protected void validateDestination(Response response) throws ValidationException {
+        if (response.getDestination() == null)
+            throw new ValidationException("Destination is required");
+    }
+	
+	/**
+	 * Validate issue times
+	 * @param response the response to validate
+	 * @throws ValidationException the validation exception
+	 */
+	protected void validateTime(Response response) throws ValidationException {		
+        if (response.getIssueInstant().isAfterNow())
+            throw new ValidationException("Issue time is in the futue");
+    }
+	
+	/**
+	 * Validate ids
+	 * @param response the response to validate
+	 * @throws ValidationException the validation exception
+	 */
+	protected void validateId(Response response) throws ValidationException {		
+        if (response.getID() == null || response.getInResponseTo() == null)
+            throw new ValidationException("Id and response id is required");
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java
new file mode 100644
index 000000000..44c9db380
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/QAAAttributeSchemaValidator.java
@@ -0,0 +1,65 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.auth.engine.core.validator;
+
+import org.opensaml.xml.util.DatatypeHelper;
+import org.opensaml.xml.validation.ValidationException;
+import org.opensaml.xml.validation.Validator;
+
+import eu.stork.peps.auth.engine.core.QAAAttribute;
+
+/**
+ * The Class QAAAttributeSchemaValidator.
+ * 
+ * @author fjquevedo
+ */
+public class QAAAttributeSchemaValidator implements Validator<QAAAttribute> {
+
+
+	/**
+	 * Validate action.
+	 * 
+	 * @param qaa the quality authentication assurance level attribute
+	 * 
+	 * @throws ValidationException the validation exception
+	 */
+	public final void validate(final QAAAttribute qaa) throws ValidationException {
+		validateAction(qaa);
+	}
+
+
+	/**
+	 * Validate action.
+	 * 
+	 * @param qaaAttribute the quality authentication assurance level attribute.
+	 * 
+	 * @throws ValidationException the validation exception
+	 */
+	protected final void validateAction(final QAAAttribute qaaAttribute)
+	throws ValidationException {
+		if (DatatypeHelper.isEmpty(qaaAttribute.getQaaLevel())) {
+			throw new ValidationException("QAALevel label must be specified.");
+		}
+
+		final int qaa = Integer.valueOf(qaaAttribute.getQaaLevel());
+
+		if (qaa < QAAAttribute.MIN_VALUE || qaa > QAAAttribute.MAX_VALUE) {
+			throw new ValidationException(
+					"QAALevel label must be greater than 0.");
+		}
+	}
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java
new file mode 100644
index 000000000..07b632773
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/core/validator/package-info.java
@@ -0,0 +1,19 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.
+ */
+
+/**
+ * Validation rules for STORK 1.0 core types and elements.
+ */
+package eu.stork.peps.auth.engine.core.validator;
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/package-info.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/package-info.java
new file mode 100644
index 000000000..30130b7f6
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/auth/engine/package-info.java
@@ -0,0 +1,19 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.
+ */
+
+/**
+ * Provides the classes necessary to create a SAML message.
+ */
+package eu.stork.peps.auth.engine;
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java
new file mode 100644
index 000000000..c53e18662
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationCreator.java
@@ -0,0 +1,142 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.configuration;
+
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.InvalidPropertiesFormatException;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * The Class InstanceCreator.
+ *
+ * @author fjquevedo
+ */
+public final class ConfigurationCreator {
+
+    /**
+     * The Constant LOGGER.
+     */
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(ConfigurationCreator.class.getName());
+
+    /**
+     * Creates the configuration.
+     *
+     * @param instanceConfs the instance configuration
+     * @return the map< string, map< string, object>>
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    public static Map<String, Map<String, Object>> createConfiguration(
+            final Map<String, InstanceEngine> instanceConfs) throws STORKSAMLEngineException {
+
+        final HashMap<String, Map<String, Object>> instances =
+                new HashMap<String, Map<String, Object>>();
+
+        LOGGER.info("Create configuration.");
+        try {
+            // Only create instances for SAMLEngine configuration.
+            // INSTANCE
+            for (Map.Entry<String, InstanceEngine> entry : instanceConfs
+                    .entrySet()) {
+                final InstanceEngine iEngine = entry.getValue();
+
+                final Map<String, Object> intance = new HashMap<String, Object>();
+
+                // CONFIGURATION
+                for (ConfigurationEngine configuration : iEngine
+                        .getConfiguration()) {
+                    // Properties only for configuration SamlEngine.
+                    if (configuration.getName().equalsIgnoreCase(
+                            "SamlEngineConf")) {
+                        intance.put(configuration.getName(),
+                                getNewInstance(configuration.getParameters()
+                                        .get("fileConfiguration")));
+                    } else {
+                        intance.put(configuration.getName(), configuration
+                                .getParameters());
+                    }
+                }
+                instances.put(entry.getKey(), intance);
+            }
+        } catch (STORKSAMLEngineException ex) {
+            LOGGER.error("Can not create instance from file configuration.");
+            throw new STORKSAMLEngineException(ex);
+        }
+        return instances;
+    }
+
+
+    /**
+     * Gets the new instance.
+     *
+     * @param fileName the file name
+     * @return the properties from the new instance
+     * @throws STORKSAMLEngineException the STORKSAML engine
+     *                                  runtime exception
+     */
+    private static Properties getNewInstance(final String fileName)
+            throws STORKSAMLEngineException {
+        InputStream fileEngineProp = null;
+
+        // fetch base from system properties, give a default if there is nothing configured
+        String base = System.getProperty("eu.stork.samlengine.config.location");
+        if (null != base) {
+            if (!base.endsWith("/")) {
+                base += "/";
+            }
+        } else {
+            base = "/";
+        }
+
+        LOGGER.info("Create file configuration properties to Stork Saml Engine: " + base + fileName);
+
+        try {
+
+            if (null != base)
+                fileEngineProp = new FileInputStream(base + fileName);
+            else
+                fileEngineProp = ConfigurationCreator.class
+                        .getResourceAsStream(base + fileName);
+
+            final Properties configuration = new Properties();
+            configuration.loadFromXML(fileEngineProp);
+            return configuration;
+        } catch (InvalidPropertiesFormatException e) {
+            LOGGER.error("Invalid properties format.");
+            throw new STORKSAMLEngineException(e);
+        } catch (IOException e) {
+            LOGGER.error("Error read file: " + base + fileName);
+            throw new STORKSAMLEngineException(e);
+        } finally {
+            IOUtils.closeQuietly(fileEngineProp);
+        }
+    }
+
+    /**
+     * Instantiates a new instance creator.
+     */
+    private ConfigurationCreator() {
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java
new file mode 100644
index 000000000..d9e7e467a
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationEngine.java
@@ -0,0 +1,69 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.configuration;
+
+import java.util.Map;
+
+/**
+ * The Class ConfigurationEngine.
+ * 
+ * @author fjquevedo
+ */
+public class ConfigurationEngine {
+
+    /** The name of the configuration file. */
+    private String name;
+
+    /** The parameters. */
+    private Map<String, String> parameters;
+
+    /**
+     * Gets the name.
+     * 
+     * @return the name
+     */
+    public final String getName() {
+	return name;
+    }
+
+    /**
+     * Gets the parameters.
+     * 
+     * @return the parameters
+     */
+    public final Map<String, String> getParameters() {
+	return parameters;
+    }
+
+    /**
+     * Sets the name.
+     * 
+     * @param newName the new name
+     */
+    public final void setName(final String newName) {
+	this.name = newName;
+    }
+
+    /**
+     * Sets the parameters.
+     * 
+     * @param newParameters the parameters
+     */
+    public final void setParameters(final Map<String, String> newParameters) {
+	this.parameters = newParameters;
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java
new file mode 100644
index 000000000..7968c77ff
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationReader.java
@@ -0,0 +1,234 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.configuration;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import eu.stork.peps.exceptions.SAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
+
+/**
+ * The Class ConfigurationReader.
+ * 
+ * @author fjquevedo
+ */
+public final class ConfigurationReader {
+
+    /** The Constant SAML_ENGINE_CONFIGURATION_FILE. */
+    private static final String ENGINE_CONF_FILE = "SamlEngine.xml";
+
+    /** The Constant LOGGER. */
+    private static final Logger LOGGER = LoggerFactory
+    .getLogger(ConfigurationReader.class.getName());
+
+    /** The Constant NODE_CONFIGURATION. */
+    private static final String NODE_CONF = "configuration";
+
+    /** The Constant NODE_CONFIGURATION_NAME. */
+    private static final String NODE_CONF_NAME = "name";
+
+    /** The Constant NODE_INSTANCE_NAME. */
+    private static final String NODE_INST_NAME = "name";
+
+    /** The Constant NODE_INSTANCE. */
+    private static final String NODE_INSTANCE = "instance";
+
+    /** The Constant NODE_CONFIGURATION_NAME. */
+    private static final String NODE_PARAM_NAME = "name";
+
+    /** The Constant NODE_CONFIGURATION_NAME. */
+    private static final String NODE_PARAM_VALUE = "value";
+
+    /** The Constant NODE_CONFIGURATION_NAME. */
+    private static final String NODE_PARAMETER = "parameter";
+
+    /**
+     * Generate parameters.
+     * 
+     * @param configurationNode the configuration node
+     * 
+     * @return the map< string, string>
+     */
+    private static Map<String, String> generateParam(
+	    final Element configurationNode) {
+
+	final HashMap<String, String> parameters = new HashMap<String, String>();
+
+	final NodeList parameterNodes = configurationNode
+	.getElementsByTagName(NODE_PARAMETER);
+
+	String parameterName;
+	String parameterValue;
+
+	for (int k = 0; k < parameterNodes.getLength(); ++k) {
+	    // for every parameter find, process.
+	    final Element parameterNode = (Element) parameterNodes.item(k);
+	    parameterName = parameterNode.getAttribute(NODE_PARAM_NAME);
+	    parameterValue = parameterNode.getAttribute(NODE_PARAM_VALUE);
+
+	    // verified the content.
+	    if (StringUtils.isBlank(parameterName)
+		    || StringUtils.isBlank(parameterValue)) {
+		throw new STORKSAMLEngineRuntimeException(
+		"Error reader parameters (name - value).");
+	    } else {
+		parameters.put(parameterName.trim(), parameterValue.trim());
+	    }
+	}
+	return parameters;
+    }
+
+    /**
+     * Read configuration.
+     * 
+     * @return the map< string, instance engine>
+     * 
+     * @throws SAMLEngineException the STORKSAML engine runtime
+     *             exception
+     */
+    public static Map<String, InstanceEngine> readConfiguration()
+    throws SAMLEngineException {
+
+        // fetch base from system properties, give a default if there is nothing configured
+        String base = System.getProperty("eu.stork.samlengine.config.location");
+        if(null != base)
+            if(!base.endsWith("/"))
+                base += "/";
+
+
+	LOGGER.info("Init reader: " + base + ENGINE_CONF_FILE);
+	final Map<String, InstanceEngine> instanceConfs = 
+	    new HashMap<String, InstanceEngine>();
+
+	Document document = null;
+	// Load configuration file
+	final DocumentBuilderFactory factory = DocumentBuilderFactory
+	.newInstance();
+	DocumentBuilder builder;
+
+	InputStream engineConf = null;
+	try {
+
+	    factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+
+	    builder = factory.newDocumentBuilder();
+	    
+	    if (null != base)
+            engineConf = new FileInputStream(base + ENGINE_CONF_FILE);
+        else
+            engineConf = ConfigurationReader.class.getResourceAsStream("/" + ENGINE_CONF_FILE);
+	    
+	    document = builder.parse(engineConf);
+
+	    // Read instance
+	    final NodeList list = document.getElementsByTagName(NODE_INSTANCE);
+
+	    for (int indexElem = 0; indexElem < list.getLength(); ++indexElem) {
+		final Element element = (Element) list.item(indexElem);
+
+		final InstanceEngine instanceConf = new InstanceEngine();
+
+		// read every configuration.
+		final String instanceName = element
+		.getAttribute(NODE_INST_NAME);
+
+		if (StringUtils.isBlank(instanceName)) {
+		    throw new STORKSAMLEngineRuntimeException(
+		    "Error reader instance name.");
+		}
+		instanceConf.setName(instanceName.trim());
+
+		final NodeList confNodes = element
+		.getElementsByTagName(NODE_CONF);
+
+		for (int indexNode = 0; indexNode < confNodes.getLength(); ++indexNode) {
+
+		    final Element configurationNode = (Element) confNodes
+		    .item(indexNode);
+
+		    final String configurationName = configurationNode
+		    .getAttribute(NODE_CONF_NAME);
+
+		    if (StringUtils.isBlank(configurationName)) {
+			throw new STORKSAMLEngineRuntimeException(
+				"Error reader configuration name.");
+		    }
+
+		    final ConfigurationEngine confSamlEngine = 
+			new ConfigurationEngine();
+
+		    // Set configuration name.
+		    confSamlEngine.setName(configurationName.trim());
+
+		    // Read every parameter for this configuration.
+		    final Map<String, String> parameters = 
+			generateParam(configurationNode);
+
+		    // Set parameters
+		    confSamlEngine.setParameters(parameters);
+
+		    // Add parameters to the configuration.
+		    instanceConf.getConfiguration().add(confSamlEngine);
+		}
+
+		// Add to the list of configurations.
+		instanceConfs.put(element.getAttribute(NODE_INST_NAME),
+			instanceConf);
+	    }
+
+	} catch (SAXException e) {
+	    LOGGER.error("Error: init library parser.");
+	    throw new SAMLEngineException(e);
+	} catch (ParserConfigurationException e) {
+	    LOGGER.error("Error: parser configuration file xml.");
+	    throw new SAMLEngineException(e);
+	} catch (IOException e) {
+	    LOGGER.error("Error: read configuration file.");
+	    throw new SAMLEngineException(e);
+	} finally {
+	    IOUtils.closeQuietly(engineConf);
+	}
+
+	return instanceConfs;
+    }
+
+    /**
+     * Instantiates a new configuration reader.
+     */
+    private ConfigurationReader() {
+
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java
new file mode 100644
index 000000000..d00607853
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/ConfigurationSingleton.java
@@ -0,0 +1,74 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.configuration;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.exceptions.SAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+import eu.stork.peps.exceptions.STORKSAMLEngineRuntimeException;
+
+/**
+ * The Class InstanceCreator.
+ * 
+ * @author fjquevedo
+ */
+public final class ConfigurationSingleton {
+
+    /** The instance of every engine SAML. */
+    private static Map<String, InstanceEngine> instanceConfigs;
+
+    /** The instances of SAML engine. */
+    private static Map<String, Map<String, Object>> instances;
+
+    /** The Constant LOGGER. */
+    private static final Logger LOGGER = LoggerFactory
+	    .getLogger(ConfigurationSingleton.class.getName());
+
+    static {
+	LOGGER.debug("Read all file configurations. (instances of SAMLEngine)");
+	try {
+	    instanceConfigs = ConfigurationReader.readConfiguration();
+	} catch (SAMLEngineException e) {
+	    LOGGER.error("Error read configuration file.");
+	    throw new STORKSAMLEngineRuntimeException(e);
+	}
+    }
+
+    /**
+     * Gets the new instance.
+     * 
+     * @param fileName the file name
+     * 
+     * @return the properties from the new instance
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine runtime exception
+     */
+    private static Map<String, Map<String, Object>> getInstance(
+	    final String fileName) throws STORKSAMLEngineException {
+	return ConfigurationCreator.createConfiguration(instanceConfigs);
+    }
+
+    /**
+     * Instantiates a new instance creator.
+     */
+    private ConfigurationSingleton() {
+    }
+
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/InstanceEngine.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/InstanceEngine.java
new file mode 100644
index 000000000..4d9bba8e7
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/InstanceEngine.java
@@ -0,0 +1,70 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The Class InstanceConfiguration.
+ * 
+ * @author fjquevedo
+ */
+public class InstanceEngine {
+
+    /** The configuration. */
+    private List<ConfigurationEngine> configuration = new ArrayList<ConfigurationEngine>();
+
+    /** The name. */
+    private String name;
+
+    /**
+     * Gets the parameters.
+     * 
+     * @return the parameters
+     */
+    public final List<ConfigurationEngine> getConfiguration() {
+	return this.configuration;
+    }
+
+    /**
+     * Gets the name.
+     * 
+     * @return the name
+     */
+    public final String getName() {
+	return name;
+    }
+
+    /**
+     * Sets the parameters.
+     * 
+     * @param newConfiguration the new parameters
+     */
+    public final void setConfiguration(final List<ConfigurationEngine> newConfiguration) {
+	this.configuration = newConfiguration;
+    }
+
+    /**
+     * Sets the name.
+     * 
+     * @param newName the new name
+     */
+    public final void setName(final String newName) {
+	this.name = newName;
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/package-info.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/package-info.java
new file mode 100644
index 000000000..344368e03
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/configuration/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed under the EUPL, Version 1.1 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 at:
+ *
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ *
+ * 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.
+ */
+
+/**
+ * Provides the classes necessary to create a SAML message instance.
+ */
+package eu.stork.peps.configuration;
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java
new file mode 100644
index 000000000..ac46f73e4
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/SAMLEngineException.java
@@ -0,0 +1,57 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.exceptions;
+
+/**
+ * The Class SAMLEngineException.
+ * 
+ * @author fjquevedo
+ */
+public class SAMLEngineException extends Exception {
+
+    /** The Constant serialVersionUID. */
+    private static final long serialVersionUID = 2611361164977849837L;
+
+    /**
+     * Instantiates a new SAMLEngine exception.
+     * 
+     * @param wrappedException the wrapped exception
+     */
+    public SAMLEngineException(final Exception wrappedException) {
+	super(wrappedException);
+    }
+
+    /**
+     * Instantiates a new SAMLEngine exception.
+     * 
+     * @param message the message
+     */
+    public SAMLEngineException(final String message) {
+	super(message);
+    }
+
+    /**
+     * Instantiates a new SAMLEngine exception.
+     * 
+     * @param message the message
+     * @param wrappedException the wrapped exception
+     */
+    public SAMLEngineException(final String message,
+	    final Exception wrappedException) {
+	super(message, wrappedException);
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java
new file mode 100644
index 000000000..bddcbd1b3
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineException.java
@@ -0,0 +1,135 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.exceptions;
+
+/**
+ * The Class STORKSAMLEngineException.
+ * 
+ * @author fjquevedo
+ */
+public class STORKSAMLEngineException extends Exception {
+
+    /** The Constant serialVersionUID. */
+    private static final long serialVersionUID = -8319723167019122930L;
+
+    /** The error code. */
+    private String errorCode;
+
+    /** The error detail. */
+    private String errorDetail;
+
+    /**
+     * Instantiates a new sTORKSAML engine exception.
+     * 
+     * @param wrappedException the wrapped exception
+     */
+    public STORKSAMLEngineException(final Exception wrappedException) {
+	super(wrappedException);
+    }
+
+    /**
+     * Instantiates a new sTORKSAML engine exception.
+     * 
+     * @param errorMessage the error message
+     */
+    public STORKSAMLEngineException(final String errorMessage) {
+	super(errorMessage);
+    }
+
+    /**
+     * Instantiates a new sTORKSAML engine exception.
+     * 
+     * @param message the message
+     * @param wrappedException the wrapped exception
+     */
+    public STORKSAMLEngineException(final String message,
+	    final Exception wrappedException) {
+	super(message, wrappedException);
+    }
+
+    /**
+     * Instantiates a new sTORKSAML engine exception.
+     * 
+     * @param newErrorCode the error code
+     * @param errorMessage the error message
+     * @param newErrorDetail the error detail
+     */
+    public STORKSAMLEngineException(final String newErrorCode,
+	    final String errorMessage, final String newErrorDetail) {
+	super(errorMessage);
+	this.errorCode = newErrorCode;
+	this.errorDetail = newErrorDetail;
+    }
+
+    /**
+     * Gets the error code.
+     * 
+     * @return the error code
+     */
+    public final String getErrorCode() {
+	return this.errorCode;
+    }
+
+    /**
+     * Gets the error detail.
+     * 
+     * @return the error detail
+     */
+    public final String getErrorDetail() {
+	return errorDetail;
+    }
+
+    /**
+     * Gets the error message.
+     * 
+     * @return the error message
+     */
+    public final String getErrorMessage() {
+	return super.getMessage();
+    }
+
+
+    /**
+     * Gets the message.
+     * 
+     * @return the message of the exception.
+     * 
+     * @see java.lang.Throwable#getMessage()
+     */
+    public final String getMessage() {
+	return "Error (no. " + errorCode + ") processing request : "
+		+ super.getMessage();
+    }
+
+    /**
+     * Sets the error code.
+     * 
+     * @param newErrorCode the new error code
+     */
+    public final void setErrorCode(final String newErrorCode) {
+        this.errorCode = newErrorCode;
+    }
+
+    /**
+     * Sets the error detail.
+     * 
+     * @param newErrorDetail the new error detail
+     */
+    public final void setErrorDetail(final String newErrorDetail) {
+        this.errorDetail = newErrorDetail;
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java
new file mode 100644
index 000000000..fb01fd5aa
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/STORKSAMLEngineRuntimeException.java
@@ -0,0 +1,56 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.exceptions;
+
+/**
+ * The Class STORKSAMLEngineRuntimeException.
+ * 
+ * @author fjquevedo
+ */
+public class STORKSAMLEngineRuntimeException extends RuntimeException {
+
+    /** The Constant serialVersionUID. */
+    private static final long serialVersionUID = 5829810358581493517L;
+
+    /**
+     * Instantiates a new sTORKSAML engine runtime exception.
+     * 
+     * @param wrappedException the wrapped exception
+     */
+    public STORKSAMLEngineRuntimeException(final Exception wrappedException) {
+	super(wrappedException);
+    }
+
+    /**
+     * Creates a new instance of application exception.
+     * 
+     * @param cause the exception cause.
+     */
+    public STORKSAMLEngineRuntimeException(final String cause) {
+	super(cause);
+    }
+
+    /**
+     * Instantiates a new sTORKSAML engine runtime exception.
+     * 
+     * @param message the message
+     * @param wrappedException the wrapped exception
+     */
+    public STORKSAMLEngineRuntimeException(final String message,
+	    final Exception wrappedException) {
+	super(message, wrappedException);
+    }
+}
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/package-info.java b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/package-info.java
new file mode 100644
index 000000000..0c7341995
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/main/java/eu/stork/peps/exceptions/package-info.java
@@ -0,0 +1,19 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.
+ */
+
+/**
+ * Provides the classes for STORK exceptions management.
+ */
+package eu.stork.peps.exceptions;
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java
new file mode 100644
index 000000000..eb885eea9
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SSETestUtils.java
@@ -0,0 +1,173 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.test.simple;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.commons.io.IOUtils;
+import org.bouncycastle.util.encoders.Base64;
+import org.opensaml.Configuration;
+import org.opensaml.xml.XMLObject;
+import org.opensaml.xml.io.Marshaller;
+import org.opensaml.xml.io.MarshallerFactory;
+import org.opensaml.xml.io.MarshallingException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * The Class SSETestUtils.
+ */
+public final class SSETestUtils {
+    
+    
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(SSETestUtils.class.getName());
+    
+    /**
+     * Instantiates a new sSE test utils.
+     */
+    private SSETestUtils() {	
+    }
+
+    /**
+     * Prints the tree DOM.
+     * 
+     * @param samlToken the SAML token
+     * @param isIndent the is indent
+     * 
+     * @return the string
+     * @throws TransformerException the exception     
+     */
+    public static String printTreeDOM(final Element samlToken, final boolean isIndent) throws TransformerException {
+	// set up a transformer
+	final TransformerFactory transfac = TransformerFactory.newInstance();
+	final Transformer trans = transfac.newTransformer();
+	trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+	trans.setOutputProperty(OutputKeys.INDENT, String.valueOf(isIndent));
+
+	// create string from XML tree
+	final StringWriter stringWriter = new StringWriter();
+	final StreamResult result = new StreamResult(stringWriter);
+	final DOMSource source = new DOMSource(samlToken);
+	trans.transform(source, result);
+	final String xmlString = stringWriter.toString();
+
+	return xmlString;
+    }
+
+    /**
+     * Marshall.
+     * 
+     * @param samlToken the SAML token
+     * 
+     * @return the byte[]
+     * 
+     * @throws MarshallingException the marshalling exception
+     * @throws ParserConfigurationException the parser configuration exception
+     * @throws TransformerException the transformer exception
+     */
+    public static byte[] marshall(final XMLObject samlToken)
+	    throws MarshallingException, ParserConfigurationException,
+	    TransformerException {
+
+	final javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory
+		.newInstance();
+	dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+	dbf.setNamespaceAware(true);
+	dbf.setIgnoringComments(true);
+	final javax.xml.parsers.DocumentBuilder docBuild = dbf
+		.newDocumentBuilder();
+
+	// Get the marshaller factory
+	final MarshallerFactory marshallerFactory = Configuration
+		.getMarshallerFactory();
+
+	// Get the Subject marshaller
+	final Marshaller marshaller = marshallerFactory
+		.getMarshaller(samlToken);
+
+	final Document doc = docBuild.newDocument();
+
+	// Marshall the SAML token
+	marshaller.marshall(samlToken, doc);
+
+	// Obtain a byte array representation of the marshalled SAML object
+	final DOMSource domSource = new DOMSource(doc);
+	final StringWriter writer = new StringWriter();
+	final StreamResult result = new StreamResult(writer);
+	final TransformerFactory transFact = TransformerFactory.newInstance();
+	final Transformer transformer = transFact.newTransformer();
+	transformer.transform(domSource, result);
+
+	return writer.toString().getBytes();
+    }
+
+    /**
+     * Encode SAML token.
+     * 
+     * @param samlToken the SAML token
+     * 
+     * @return the string
+     */
+    public static String encodeSAMLToken(final byte[] samlToken) {
+    	return new String(Base64.encode(samlToken));
+    }
+
+    /**
+     * Read stork SAML from file.
+     * 
+     * @param resource the resource
+     * 
+     * @return the byte[]
+     * @throws IOException the exception
+     * 
+     */
+    public static byte[] readStorkSamlFromFile(final String resource)
+	    throws IOException {
+	InputStream inputStream = null;
+	byte[] bytes;
+	
+	try {
+	    inputStream = StorkAuthRequestTest.class
+		.getResourceAsStream(resource);
+	
+	    // Create the byte array to hold the data
+	    bytes = new byte[(int) inputStream.available()];
+	    inputStream.read(bytes);
+	} catch (IOException e) {	    
+	    LOG.error("Error read from file: " + resource);
+	    throw e;
+	} finally {
+	    IOUtils.closeQuietly(inputStream);
+	}
+	return bytes;
+
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java
new file mode 100644
index 000000000..c52b8a779
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/SimpleBaseTest.java
@@ -0,0 +1,64 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.test.simple;
+
+import org.junit.Test;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+
+/**
+ * The Class SimpleBaseTest. Defines a set of test the initialization of the
+ * SAML engine.
+ */
+@SuppressWarnings("deprecation")
+public class SimpleBaseTest extends TestCase {
+
+    /**
+     * Test SAML engine correct configuration name.
+     */
+    
+	@Test
+    public final void testSamlEngineCorrectInit() {
+	Assert.assertNotNull(STORKSAMLEngine.getInstance("CONF1"));
+    }
+
+    /**
+     * Test SAML engine error configuration name.
+     */
+    @Test
+    public final void testSamlEngineErrorNameConf() {
+	Assert.assertNull(STORKSAMLEngine.getInstance("CONF_ERROR"));
+    }
+
+    /**
+     * Test SAML engine error name null.
+     */
+    @Test
+    public final void testSamlEngineErrorNameNull() {	
+	Assert.assertNull(STORKSAMLEngine.getInstance(null));
+    }
+
+    /**
+     * Test SAML engine correct name configuration with spaces.
+     */
+    @Test
+    public final void testSamlEngineErrorNameSpaces() {
+	Assert.assertNotNull(STORKSAMLEngine.getInstance("   CONF1    "));
+    }
+    
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java
new file mode 100644
index 000000000..0eda1bfbf
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryRequestTest.java
@@ -0,0 +1,864 @@
+package eu.stork.peps.test.simple;
+
+import static org.junit.Assert.*;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opensaml.xml.parse.BasicParserPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+public class StorkAttrQueryRequestTest {
+	
+	/** The engines. */	
+    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
+    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
+    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
+    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
+            
+
+    /**
+     * Instantiates a new stork authentication request test.
+     */
+    public StorkAttrQueryRequestTest() {
+	pal = new PersonalAttributeList();
+
+	final PersonalAttribute isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(true);
+	final ArrayList<String> ages = new ArrayList<String>();
+	ages.add("16");
+	ages.add("18");
+	isAgeOver.setValue(ages);
+	pal.add(isAgeOver);
+	
+	final PersonalAttribute dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	pal.add(dateOfBirth);
+	
+		final PersonalAttribute eIDNumber = new PersonalAttribute();	
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+	eIDNumber.setValue(Arrays.asList("ES/IS/1234567890"));
+	pal.add(eIDNumber);
+	
+	final PersonalAttribute givenName = new PersonalAttribute();
+	givenName.setName("givenName");
+	givenName.setIsRequired(true);
+	givenName.setValue(Arrays.asList("Sveinbjorn"));
+	pal.add(givenName);
+
+	destination = "http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest";
+	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
+	//spName = "University of Oxford";
+	spSector = "EDU001";
+	spInstitution = "OXF001";
+	spApplication = "APP001";
+	spCountry = "IS";
+	
+	spId = "EDU001-OXF001-APP001";
+	
+    }
+
+    /** The destination. */
+    private String destination;
+
+    /** The service provider sector. */
+    private String spSector;
+
+    /** The service provider institution. */
+    private String spInstitution;
+
+    /** The service provider application. */
+    private String spApplication;
+
+    /** The service provider country. */
+    private String spCountry;
+    
+    /** The service provider id. */
+    private String spId;
+    
+    /** The assertion consumer URL. */
+    private String assertConsumerUrl;
+
+    /** The quality authentication assurance level. */
+    private static final int QAAL = 3;
+
+    /** The List of Personal Attributes. */
+    private IPersonalAttributeList pal;
+
+    /** The attribute query request. */
+    private static byte[] attrRequest;
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(StorkAttrQueryRequestTest.class.getName());
+
+    /** Parser manager used to parse XML. */
+    private static BasicParserPool parser;
+
+    static {
+	parser = new BasicParserPool();
+	parser.setNamespaceAware(true);
+    }
+    
+    /**
+     * Test generate authentication request.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAttrQueryRequest() throws STORKSAMLEngineException {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+
+	// new parameters
+	request.setEIDSectorShare(false);	
+	request.setEIDCrossSectorShare(false);
+	request.setEIDCrossBorderShare(false);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+	request.setSpCountry(spCountry);
+
+	STORKAttrQueryRequest req1 = engine0.generateSTORKAttrQueryRequest(request);
+	byte[] reqByte = req1.getTokenSaml();
+	FileOutputStream output = null;
+	
+	try {
+		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml"));
+	} catch (FileNotFoundException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	try {
+		output.write(reqByte);
+	} catch (IOException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	
+	LOG.info("STORKAttrQueryRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
+	
+	request.setCitizenCountryCode("IS");
+	LOG.info("STORKAttrQueryRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
+    }
+    
+    /**
+     * Test generate authentication request error personal attribute name error.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestPALsErr1() {
+	
+	final IPersonalAttributeList palWrong = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("attrNotValid");
+	worngAttr.setIsRequired(true);
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(palWrong);
+
+	// news parameters
+	request.setEIDSectorShare(false);	
+	request.setEIDCrossSectorShare(false);
+	request.setEIDCrossBorderShare(false);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    
+    /**
+     * Test generate authentication request error personal attribute value error.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestPALsErr2() {
+	
+	final IPersonalAttributeList palWrong = new PersonalAttributeList();
+
+	final PersonalAttribute attrNotValid = new PersonalAttribute();
+	attrNotValid.setName("attrNotValid");
+	attrNotValid.setIsRequired(true);
+	palWrong.add(attrNotValid);
+
+
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(palWrong);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request authentication assurance level
+     * negative value.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestQaalErr1() {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(-1);
+	request.setPersonalAttributeList(pal);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider sector null.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestSectorErr() {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(null);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider institution null.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestDestinationErr() {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(null);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(null);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    fail("generateSTORKAttrQueryRequest(...) should've thrown an STORKSAMLEngineException!");
+	    
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");	    
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider application null.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestApplicationErr() {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(null);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider country null.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestCountryErr() {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(null);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	    
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");	    
+	}
+    }
+
+    /**
+     * Test generate authentication request error with quality authentication
+     * assurance level wrong.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestQaalErr2() {
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(0);
+	request.setPersonalAttributeList(pal);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request personal attribute list null value.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestPALErr1() {
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(null);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    engine.generateSTORKAttrQueryRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+   
+    /**
+     * Test validate authentication request null parameter.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryRequestNullParam()
+	    throws STORKSAMLEngineException {
+	try {
+	    engine.validateSTORKAttrQueryRequest(null);
+	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate authentication request error bytes encode.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryRequestErrorEncode()
+	    throws STORKSAMLEngineException {
+	try {
+	    engine.validateSTORKAttrQueryRequest("messageError".getBytes());
+	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate authentication request.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryRequest() throws STORKSAMLEngineException {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+	
+	attrRequest = engine.generateSTORKAttrQueryRequest(request).getTokenSaml();
+	
+	final STORKAttrQueryRequest validatedRequest = engine.validateSTORKAttrQueryRequest(attrRequest);	 
+		
+	assertEquals("CrossBorderShare incorrect: ", validatedRequest.isEIDCrossBorderShare(), false);
+	assertEquals("CrossSectorShare incorrect: ", validatedRequest.isEIDCrossSectorShare(),	false);
+	assertEquals("SectorShare incorrect: ", validatedRequest.isEIDSectorShare(), false);
+	
+    }
+
+    /**
+     * Test validate data authenticate request. Verified parameters after
+     * validation.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateDataAttrQueryRequest() throws STORKSAMLEngineException {
+    	
+    final STORKAttrQueryRequest request = engine.validateSTORKAttrQueryRequest(attrRequest);
+
+	assertEquals("Sestination incorrect: ", request.getDestination(), destination);
+	
+	assertEquals("CrossBorderShare incorrect: ", request.isEIDCrossBorderShare(), false);
+	assertEquals("CrossSectorShare incorrect: ", request.isEIDCrossSectorShare(), false);
+	assertEquals("SectorShare incorrect: ", request.isEIDSectorShare(), false);	
+
+	assertEquals("QAAL incorrect: ", request.getQaa(), QAAL);
+	assertEquals("SPSector incorrect: ", request.getSpSector(), spSector);		
+	assertEquals("SPInstitution incorrect: ", request.getSpInstitution(), null);
+	assertEquals("SPApplication incorrect: ", request.getSpApplication(), spApplication);
+	assertEquals("CitizenCountryCode incorrect: ", request.getCitizenCountryCode(), null);
+		
+    }
+
+    /**
+     * Test validate file attribute query request. Validate from XML file.
+     *     
+     * @throws Exception the exception
+     */
+    @Test
+    public final void testValidateFileAttrQueryRequest() throws Exception {
+
+	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AttrQueryRequest1.xml");
+
+	try {
+	    engine.validateSTORKAttrQueryRequest(bytes);
+        fail("testValidateFileAttrQueryRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error(e.getMessage());
+	}
+    }
+
+    /**
+     * Test validate file authentication request tag delete.
+     * 
+     * @throws Exception the exception
+     */
+    @Test
+    public final void testValidateFileAttrRequestTagDelete() throws Exception {
+
+	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml");
+
+	try {
+	    engine.validateSTORKAttrQueryRequest(bytes);
+        fail("validateSTORKAttrQueryRequest(...) should have thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error(e.getMessage());
+
+	}
+    }
+
+    /**
+     * Test validate authentication request not trusted token.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryRequestNotTrustedErr1()
+	    throws STORKSAMLEngineException {
+	
+	try {
+	    final STORKSAMLEngine engineNotTrusted = STORKSAMLEngine
+		    .getInstance("CONF2");
+
+	    final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	    request.setDestination(destination);
+	    request.setQaa(QAAL);
+	    request.setPersonalAttributeList(pal);
+	    request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	    // news parameters
+	    request.setSpSector(spSector);
+	    request.setSpInstitution(spInstitution);
+	    request.setSpApplication(spApplication);
+	    request.setSpCountry(spCountry);
+
+	    final byte[] authReqNotTrust = engineNotTrusted
+		    .generateSTORKAttrQueryRequest(request).getTokenSaml();
+
+	    engine.validateSTORKAttrQueryRequest(authReqNotTrust);
+	    fail("validateSTORKAttrQueryRequestNotTrusted(...) should have thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");        
+    }
+    }
+
+    /**
+     * Test validate authentication request trusted.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryRequestTrusted()
+	    throws STORKSAMLEngineException {
+
+	final STORKSAMLEngine engineTrusted = STORKSAMLEngine
+		.getInstance("CONF3");
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	final byte[] authReqNotTrust = engineTrusted.generateSTORKAttrQueryRequest(
+		request).getTokenSaml();
+
+	// engine ("CONF1") no have trust certificate from "CONF2"
+	engine.validateSTORKAttrQueryRequest(authReqNotTrust);
+	
+    }
+    
+    
+    
+    
+    /**
+     * Test generate authentication request service provider application null.
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestNADA() {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+
+	// news parameters
+	request.setSpSector(null);
+	request.setSpInstitution(null);
+	request.setSpApplication(null);
+	request.setSpCountry(null);
+
+	try {
+	       	
+		engine.validateSTORKAttrQueryRequest(attrRequest);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	}
+    }
+    
+    /**
+     * Test validate authentication request with unknown elements.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryRequestWithUnknownElements() throws STORKSAMLEngineException {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	
+	IPersonalAttributeList pAttList = new PersonalAttributeList();
+		
+	final PersonalAttribute unknown = new PersonalAttribute();
+	unknown.setName("unknown");
+	unknown.setIsRequired(true);
+	pAttList.add(unknown);	
+	
+	final PersonalAttribute eIdentifier = new PersonalAttribute();
+	eIdentifier.setName("eIdentifier");
+	eIdentifier.setIsRequired(true);
+	pAttList.add(eIdentifier);	
+	
+	request.setPersonalAttributeList(pAttList);
+
+	// new parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+	
+	STORKAttrQueryRequest req = new STORKAttrQueryRequest();
+		
+	req  = engine3.generateSTORKAttrQueryRequest(request);
+	
+	req = engine.validateSTORKAttrQueryRequest(req.getTokenSaml());
+	
+	assertNull("The value shouldn't exist", req.getPersonalAttributeList().get("unknown"));
+	assertNotNull("The value should exist", req.getPersonalAttributeList().get("eIdentifier"));
+	
+    }
+    
+    /**
+     * Test generate Request with required elements by default
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAttrQueryRequestWithIsRequiredElementsByDefault() throws STORKSAMLEngineException {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	
+	IPersonalAttributeList pAttList = new PersonalAttributeList();
+		
+	final PersonalAttribute eIdentifier = new PersonalAttribute();
+	eIdentifier.setName("eIdentifier");
+	eIdentifier.setIsRequired(true);
+	pAttList.add(eIdentifier);	
+	
+	request.setPersonalAttributeList(pAttList);
+
+	// new parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+	
+	STORKAttrQueryRequest req = new STORKAttrQueryRequest();
+	STORKAttrQueryRequest reqTrue = new STORKAttrQueryRequest();
+	STORKAttrQueryRequest reqFalse = new STORKAttrQueryRequest();
+		
+	reqTrue  = engine.generateSTORKAttrQueryRequest(request);
+	reqFalse = engine2.generateSTORKAttrQueryRequest(request);
+	req  	 = engine3.generateSTORKAttrQueryRequest(request);
+	
+	
+	String token = new String(req.getTokenSaml());
+	String reqTrueToken = new String(reqTrue.getTokenSaml());
+	String reqFalseToken = new String(reqFalse.getTokenSaml());
+	
+	assertTrue("The token must contain the chain 'isRequired'", token.contains("isRequired"));
+	assertTrue("The token must contain the chain 'isRequired'", reqTrueToken.contains("isRequired"));
+	assertFalse("The token must contain the chain 'isRequired'", reqFalseToken.contains("isRequired"));
+		
+    }
+    
+    /**
+     * Test validating attribute query and getting alias used to save 
+     * the saml trusted certificate into trustore
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    /*@Test
+    public final void testValidateAtrrQueryRequestGettingItsAlias() throws STORKSAMLEngineException {
+
+    	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+    	request.setDestination(destination);
+    	request.setQaa(QAAL);
+    	request.setPersonalAttributeList(pal);
+    	
+    	IPersonalAttributeList pAttList = new PersonalAttributeList();
+    		
+    	final PersonalAttribute eIdentifier = new PersonalAttribute();
+    	eIdentifier.setName("eIdentifier");
+    	eIdentifier.setIsRequired(true);
+    	pAttList.add(eIdentifier);	
+    	
+    	request.setPersonalAttributeList(pAttList);
+
+    	// new parameters
+    	request.setSpSector(spSector);
+    	request.setSpInstitution(spInstitution);
+    	request.setSpApplication(spApplication);
+    	request.setSpCountry(spCountry);
+    	request.setSPID(spId);
+    	request.setCitizenCountryCode("IS");
+    	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+    	
+    	STORKAttrQueryRequest req = new STORKAttrQueryRequest();
+    		
+    	req  = engine3.generateSTORKAttrQueryRequest(request);
+    	req = engine.validateSTORKAttrQueryRequest(req.getTokenSaml());
+    	String prufa = req.getAlias();
+    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo"));
+    	
+    	req  = engine2.generateSTORKAttrQueryRequest(request);
+    	req = engine2.validateSTORKAttrQueryRequest(req.getTokenSaml());
+    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo2"));	
+    }*/
+    
+    @Test
+    public final void testGenerateAttrQueryRequestSignDoc() throws STORKSAMLEngineException {
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+
+	request.setDestination(destination);
+	request.setQaa(QAAL);
+	PersonalAttributeList pal0 = new PersonalAttributeList();
+	
+	final PersonalAttribute signDoc = new PersonalAttribute();	
+	signDoc.setName("docRequest");
+	signDoc.setIsRequired(true);
+	signDoc.setValue(Arrays.asList("IS/IS/fbea6e68-0393-401b-b616-f767fff9418c"));
+	pal0.add(signDoc);
+	
+	request.setPersonalAttributeList(pal0);
+
+	// new parameters
+	/*request.setEIDSectorShare(false);	
+	request.setEIDCrossSectorShare(false);
+	request.setEIDCrossBorderShare(false);*/
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+	request.setSpCountry(spCountry);
+
+	STORKAttrQueryRequest req1 = engine0.generateSTORKAttrQueryRequest(request);
+	byte[] reqByte = req1.getTokenSaml();
+	FileOutputStream output = null;
+	
+	STORKAttrQueryRequest req2 = engine0.validateSTORKAttrQueryRequest(reqByte);
+	//reqByte = req2.getTokenSaml();
+	
+	try {
+		//output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml"));
+		FileOutputStream fos;
+        File outputDir = new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine");
+        File saveFile = new File(outputDir, "AttrQueryRequestSdoc.xml");
+        fos = new FileOutputStream(saveFile);
+        fos.write(reqByte);
+        fos.flush();
+        fos.close();
+	} catch (Exception e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	try {
+		output.write(reqByte);
+	} catch (IOException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	
+	LOG.info("STORKAttrQueryRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
+	
+	request.setCitizenCountryCode("IS");
+	LOG.info("STORKAttrQueryRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAttrQueryRequest(request).getTokenSaml()));
+    }
+    
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java
new file mode 100644
index 000000000..a98d5b7c3
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAttrQueryResponseTest.java
@@ -0,0 +1,1085 @@
+package eu.stork.peps.test.simple;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opensaml.xml.parse.BasicParserPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
+import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+import eu.stork.peps.auth.commons.STORKAuthnResponse;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+import eu.stork.peps.auth.commons.STORKSubStatusCode;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+public class StorkAttrQueryResponseTest {
+	
+	/** The engine. */
+    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
+
+    /**
+     * Gets the engine.
+     * 
+     * @return the engine
+     */
+    public static STORKSAMLEngine getEngine() {
+        return engine;
+    }
+
+    /**
+     * Sets the engine.
+     * 
+     * @param newEngine the new engine
+     */
+    public static void setEngine(final STORKSAMLEngine newEngine) {
+    	StorkAttrQueryResponseTest.engine = newEngine;
+    }
+
+    /** The destination. */
+    private static String destination;
+
+        /** The service provider sector. */
+    private static String spSector;
+
+    /** The service provider institution. */
+    private static String spInstitution;
+
+    /** The service provider application. */
+    private static String spApplication;
+
+    /** The service provider country. */
+    private static String spCountry;
+    
+    /** The service provider id. */
+    private static String spId;
+
+    /** The quality authentication assurance level. */
+    private static final int QAAL = 3;
+
+    /** The state. */
+    private static String state = "IS";
+    
+    /** The town. */
+    private static String town = "Reykjavik";
+    
+    /** The postal code. */
+    private static String postalCode = "105";
+    
+    /** The street name. */
+    private static String streetName = "Gudrunartun";
+    
+    /** The street number. */
+    private static String streetNumber = "10";    
+
+    /** The List of Personal Attributes. */
+    private static IPersonalAttributeList pal;
+
+    /** The assertion consumer URL. */
+    private static String assertConsumerUrl;
+
+    /** The attribute query request. */
+    private static byte[] attrQueryRequest;
+
+    /** The attribute query response. */
+    private static byte[] attrQueryResponse;
+
+    /** The attribute query request. */
+    private static STORKAttrQueryRequest attrQueryenRequest;
+
+    /** The attribute query response. */
+    private static STORKAttrQueryResponse attrQeuryenResponse;
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(StorkAttrQueryResponseTest.class.getName());
+
+    /**
+     * Instantiates a new stork response test.
+     */
+    public StorkAttrQueryResponseTest() {
+	super();
+    }
+
+    /** The IP address. */
+    private static String ipAddress;
+    
+    /** The destination URL. */
+    private static String destinationUrl;
+
+    /** The is hashing. */
+    private final boolean isHashing = Boolean.TRUE;
+
+    /** The is not hashing. */
+    private final boolean isNotHashing = Boolean.FALSE;
+
+    /** The ERROR text. */
+    private static final String ERROR_TXT = "generateAttrQueryResponse(...) should've thrown an STORKSAMLEngineException!";
+
+
+    /** Parser manager used to parse XML. */
+    private static BasicParserPool parser;
+    
+    
+
+    static {
+	parser = new BasicParserPool();
+	parser.setNamespaceAware(true);
+
+	pal = new PersonalAttributeList();
+
+	PersonalAttribute isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(false);
+	ArrayList<String> ages = new ArrayList<String>();
+	ages.add("16");
+	ages.add("18");
+	isAgeOver.setValue(ages);
+	pal.add(isAgeOver);
+
+	PersonalAttribute dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	pal.add(dateOfBirth);
+
+	PersonalAttribute eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	List<String> eid = Arrays.asList("IS/IS/1234567890");	
+	eIDNumber.setValue(eid);
+	eIDNumber.setIsRequired(true);
+	pal.add(eIDNumber);
+
+	final PersonalAttribute givenName = new PersonalAttribute();
+	givenName.setName("givenName");
+	givenName.setIsRequired(true);
+	pal.add(givenName);
+
+	PersonalAttribute canRessAddress = new PersonalAttribute();
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	pal.add(canRessAddress);
+	
+	PersonalAttribute newAttribute = new PersonalAttribute();
+	newAttribute.setName("newAttribute2");
+	newAttribute.setIsRequired(true);
+	pal.add(newAttribute);
+
+	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
+	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";	
+	spSector = "EDU001";
+	spInstitution = "OXF001";
+	spApplication = "APP001";
+	spCountry = "EN";
+	
+	spId = "EDU001-APP001-APP001";
+
+	final STORKAttrQueryRequest request = new STORKAttrQueryRequest();
+	request.setDestination(destination);
+	//request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// new parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("IS");
+
+	try {
+	    attrQueryRequest = getEngine().generateSTORKAttrQueryRequest(request)
+		    .getTokenSaml();
+	    	    
+	    attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    fail("Error create STORKAuthnRequest");
+	}
+
+	ipAddress = "111.222.333.444";
+	
+	destinationUrl = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
+
+	pal = new PersonalAttributeList();
+
+	isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(true);
+	ages = new ArrayList<String>();
+
+	ages.add("16");
+	ages.add("18");
+
+	isAgeOver.setValue(ages);
+	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(isAgeOver);
+
+	dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	final ArrayList<String> date = new ArrayList<String>();
+	date.add("16/12/2008");
+	dateOfBirth.setValue(date);
+	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(dateOfBirth);
+
+	eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+	final ArrayList<String> idNumber = new ArrayList<String>();
+	idNumber.add("123456789IS");
+	eIDNumber.setValue(idNumber);
+	eIDNumber.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(eIDNumber);
+
+	canRessAddress = new PersonalAttribute();
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> address = new HashMap<String, String>();
+
+	address.put("state", state);
+	address.put("town", town);
+	address.put("postalCode", postalCode);
+	address.put("streetName", streetName);
+	address.put("streetNumber", streetNumber);
+
+	canRessAddress.setComplexValue(address);
+	pal.add(canRessAddress);
+    
+	newAttribute = new PersonalAttribute();
+	newAttribute.setName("newAttribute2");
+	newAttribute.setIsRequired(true);
+	newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> values = new HashMap<String, String>();
+	
+	values.put("value1", "value1");
+	values.put("value2", "value2");
+	values.put("value3", "value3");
+	values.put("value4", "value4");
+	
+	newAttribute.setComplexValue(values);
+	pal.add(newAttribute);
+	
+    }
+
+    /**
+     * Test generate attribute query request without errors.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAttrQueryResponse() throws STORKSAMLEngineException {
+
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setPersonalAttributeList(pal);
+
+	final STORKAttrQueryResponse storkResponse = getEngine()
+		.generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress,
+				destinationUrl, isNotHashing);
+
+	attrQueryResponse = storkResponse.getTokenSaml();
+	
+	FileOutputStream output = null;
+	
+	try {
+		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml"));
+	} catch (FileNotFoundException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	try {
+		output.write(attrQueryResponse);
+	} catch (IOException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	
+	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(attrQueryResponse));
+	
+	
+    }
+
+    /**
+     * Test validation id parameter mandatory.
+     */
+    @Test
+    public final void testResponseMandatoryId() {
+	final String identifier = attrQueryenRequest.getSamlId();
+	attrQueryenRequest.setSamlId(null);
+
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setPersonalAttributeList(pal);
+
+	try {
+	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
+		    ipAddress, destinationUrl, isHashing);
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    attrQueryenRequest.setSamlId(identifier);
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate attribute query response in response to err1.
+     */
+    @Test
+    public final void testResponseMandatoryIssuer() {
+
+	final String issuer = attrQueryenRequest.getIssuer();
+	attrQueryenRequest.setIssuer(null);
+
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setPersonalAttributeList(pal);
+
+	try {
+	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
+		    ipAddress, destinationUrl, isHashing);
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    attrQueryenRequest.setIssuer(issuer);
+	    LOG.error("Error");
+	}
+    }
+
+    
+    /**
+     * Test generate attribute query response assertion consumer null.
+     */
+    /*@Test
+    public final void testResponseMandatoryAssertionConsumerServiceURL() {
+	final String asserConsumerUrl = attrQueryenRequest
+		.getAssertionConsumerServiceURL();
+	attrQueryenRequest.setAssertionConsumerServiceURL(null);
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(pal);
+	try {
+	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
+		    ipAddress, isHashing);
+	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    attrQueryenRequest.setAssertionConsumerServiceURL(asserConsumerUrl);
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate attribute query response IP address null.
+     */
+    @Test
+    public final void testResponseValidationIP() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setPersonalAttributeList(pal);
+
+	try {
+	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response, null, 
+	    		destinationUrl, isHashing);
+	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate attribute query response with personal attribute list null.
+     */
+    @Test
+    public final void testResponseMandatoryPersonalAttributeList() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setPersonalAttributeList(null);
+	
+	
+	try {
+	    getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest, response,
+		    ipAddress, destinationUrl, isHashing);
+	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    /**
+     * Test validate attribute query response token null.
+     */
+    @Test
+    public final void testResponseInvalidParametersToken() {
+	try {
+	    getEngine().validateSTORKAttrQueryResponse(null, ipAddress);
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate attribute query response IP null.
+     */
+    @Test
+    public final void STORKAttrQueryResponse() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setPersonalAttributeList(pal);
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false	    
+	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate attribute query response parameter name wrong.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttr() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("AttrWrong");
+	wrongList.add(worngAttr);
+	
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate attribute query response set null value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrSimpleValue() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("isAgeOver");
+	worngAttr.setValue(null);
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate attribute query response set null value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrNoValue() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("isAgeOver");
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate attribute query response set null value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrNoName() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();	
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate attribute query response set null complex value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrComplexValue() {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("isAgeOver");
+	worngAttr.setComplexValue(null);
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponse(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+	
+    
+    
+
+    /**
+     * Test validate attribute query response IP distinct and disabled validation
+     * IP.
+     */
+    @Test
+    public final void testResponseInvalidParametersIPDistinct() {
+	try {
+	    // ipAddress origin "111.222.333.444"
+	    // ipAddrValidation = false
+	    // Subject Confirmation Bearer.
+
+	    getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, "127.0.0.1");	    
+	} catch (STORKSAMLEngineException e) {
+		fail("validateAttributeQueryResponse(...) should've thrown an STORKSAMLEngineException!");
+	    LOG.error("Error");	    
+	}
+    }
+
+    /**
+     * Test response invalid parameters invalid token.
+     */
+    @Test
+    public final void testResponseInvalidParametersTokenMsg() {
+	try {
+	    // ipAddress origin "111.222.333.444"
+	    // Subject Confirmation Bearer.
+	    getEngine().validateSTORKAttrQueryResponse("errorMessage".getBytes(),
+		    ipAddress);
+	    fail("validateAuthenticationResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate attribute query response is fail.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    /*@Test
+    public final void testValidateAuthenticationResponseIsFail()
+	    throws STORKSAMLEngineException {
+    	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
+		ipAddress);
+
+	assertFalse("Generate incorrect response: ", attrQeuryenResponse.isFail());
+    }
+
+    /**
+     * Test validate attribute query response destination.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthenticationResponseDestination()
+	    throws STORKSAMLEngineException {
+    	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
+		ipAddress);
+
+	assertEquals("Destination incorrect: ",
+			attrQeuryenResponse.getInResponseTo(), attrQueryenRequest.getSamlId());
+    }
+
+    /**
+     * Test validate attribute query response values.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthenticationResponseValuesComplex()
+	    throws STORKSAMLEngineException {
+    	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
+		ipAddress);
+	
+	assertEquals("Country incorrect:", attrQeuryenResponse.getCountry(), "ES");
+	
+	final Iterator<PersonalAttribute> iterator = attrQeuryenResponse
+		.getPersonalAttributeList().iterator();
+
+	while (iterator.hasNext()) {
+	    final PersonalAttribute attribute = iterator.next();
+	    if (attribute.getName().equalsIgnoreCase(
+		    "canonicalResidenceAddress")) {
+		assertEquals("State incorrect: ", state, attribute
+			.getComplexValue().get("state"));		
+		assertEquals("Town incorrect: ", town, attribute
+			.getComplexValue().get("town"));
+		assertEquals("Postal code incorrect: ", postalCode, attribute
+			.getComplexValue().get("postalCode"));
+		assertEquals("Street name incorrect: ", streetName, attribute
+			.getComplexValue().get("streetName"));
+		assertEquals("Street number incorrect: ", streetNumber,
+			attribute.getComplexValue().get("streetNumber"));		
+	    }
+	}
+    }
+
+    /**
+     * Test generate attribute query response fail in response to it's null.
+     * @throws STORKSAMLEngineException 
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test //( expected=STORKSAMLEngineException.class)
+    public final void testGenerateAttrQueryResponseFailInResponseToNull() throws STORKSAMLEngineException {
+	final String identifier = attrQueryenRequest.getSamlId();
+	attrQueryenRequest.setSamlId(null);
+
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("");
+
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    attrQueryenRequest.setSamlId(identifier);
+	    LOG.error("Error");
+	    //throw new STORKSAMLEngineException(e);
+	}
+    }
+
+    /**
+     * Test generate attribute query response fail assertion consumer URL err1.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    /*@Test
+    public final void testGenerateAuthnResponseFailAssertionConsumerUrlNull()
+	    throws STORKSAMLEngineException {
+
+	final String assertConsumerUrl = attrQueryenRequest
+		.getAssertionConsumerServiceURL();
+	attrQueryenRequest.setAssertionConsumerServiceURL(null);
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("");
+
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAuthnResponseFail(attrQueryenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    fail("generateAuthnResponseFail(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    attrQueryenRequest.setAssertionConsumerServiceURL(assertConsumerUrl);
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate attribute query response fail code error err1.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAttrQueryResponseFailCodeErrorNull()
+	    throws STORKSAMLEngineException {
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setStatusCode(null);
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("");
+
+	try {
+	    attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest,
+		    response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	    fail("generateAttrQueryResponseFail(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    
+    
+    /**
+     * Test generate attribute query request without errors.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryResponse() throws STORKSAMLEngineException {
+	
+	IPersonalAttributeList palist = new PersonalAttributeList();
+
+	PersonalAttribute isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(true);
+	ArrayList<String> ages = new ArrayList<String>();
+	ages.add("16");
+	ages.add("18");
+	isAgeOver.setValue(ages);
+	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	palist.add(isAgeOver);
+
+	PersonalAttribute dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	final ArrayList<String> date = new ArrayList<String>();
+	date.add("16/12/2008");
+	dateOfBirth.setValue(date);
+	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	palist.add(dateOfBirth);
+
+	
+	PersonalAttribute eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+
+	final ArrayList<String> idNumber = new ArrayList<String>();
+	idNumber.add("123456789PÑ");
+	
+	final HashMap<String, String> complex = new HashMap<String, String>();
+	complex.put("one", "two");
+
+	//eIDNumber.setValue(null);
+	//eIDNumber.setValue(idNumber);
+	//eIDNumber.setComplexValue(complex);
+	
+	eIDNumber.setStatus(STORKStatusCode.STATUS_NOT_AVAILABLE.toString());
+	palist.add(eIDNumber);
+
+	PersonalAttribute canRessAddress = new PersonalAttribute();	
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> address = new HashMap<String, String>();
+
+	address.put("state", state);
+	address.put("town", town);
+	address.put("postalCode", postalCode);
+	address.put("streetName", streetName);
+	address.put("streetNumber", streetNumber);
+
+	canRessAddress.setComplexValue(address);
+	palist.add(canRessAddress);
+
+	
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+
+	response.setPersonalAttributeList(palist);
+
+	final STORKAttrQueryResponse storkResponse = getEngine()
+		.generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress,
+			destinationUrl, isNotHashing);
+
+	attrQueryResponse = storkResponse.getTokenSaml();
+	LOG.info("Request id: " + attrQueryenRequest.getSamlId());
+	
+	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(attrQueryResponse));
+	
+	
+	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
+		ipAddress);
+	
+	LOG.info("RESPONSE ID: " + attrQeuryenResponse.getSamlId());
+	LOG.info("RESPONSE IN_RESPONSE_TO: " + attrQeuryenResponse.getInResponseTo());
+	LOG.info("RESPONSE COUNTRY: " + attrQeuryenResponse.getCountry());
+	
+    }
+    
+    
+   
+
+	
+    /**
+     * Test validate attribute query response fail is fail.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAttrQueryResponseFailIsFail()
+	    throws STORKSAMLEngineException {
+
+	final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("message");
+
+	attrQueryResponse = getEngine().generateSTORKAttrQueryResponseFail(attrQueryenRequest,
+		response, ipAddress, destinationUrl, isNotHashing).getTokenSaml();
+	
+	LOG.error("ERROR_FAIL: " + PEPSUtil.encodeSAMLToken(attrQueryResponse));
+
+	attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
+		ipAddress);
+
+	LOG.info("COUNTRY: " + attrQeuryenResponse.getCountry());
+	assertTrue("Generate incorrect response: ", attrQeuryenResponse.isFail());
+    }  
+    
+	/**
+	 * Test generate/validate response with signedDoc
+	 * 
+	 * @throws STORKSAMLEngineException
+	 *             the STORKSAML engine exception
+	 */
+	@Test
+	public final void testGenerateAttrQueryResponseWithSignedDoc()
+			throws STORKSAMLEngineException {
+
+		String signedDocResponse = "<dss:SignResponse xmlns:dss=\"urn:oasis:names:tc:dss:1.0:core:schema\" RequestID=\"123456\"> <dss:Result> <dss:ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</dss:ResultMajor> </dss:Result> <dss:SignatureObject> <dss:Base64Signature Type=\"urn:ietf:rfc:3275\">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExIi8+PGRzOlJlZmVyZW5jZSBJZD0iUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyIgVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI09iamVjdCIgVVJJPSIjT2JqZWN0LTk4NzMzY2RlLThiY2MtNDhhMC05Yjc3LTBlOTk5N2JkZDA1OCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNiYXNlNjQiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPkNrMVZxTmQ0NVFJdnEzQVpkOFhZUUx2RWh0QT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVHlwZT0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMyNTaWduZWRQcm9wZXJ0aWVzIiBVUkk9IiNTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5BNVk5MW40cXBMZ3l0VFc3ZnhqWENVZVJ2NTQ9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI1NpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItS2V5SW5mbyI+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPlZQWDRuS0Z5UzZyRitGNmNSUjBQck5aZHc2Zz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9IlNpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItU2lnbmF0dXJlVmFsdWUiPkxiS04vL0M3WGt5eFR0WVRpQ1VScjhuWnp4QW1zdGNNZDBDZ0VBQ3JLMWR5Z1JIcUdjSzR4dHMrV0NVOFB5RXFXclJJVFl6SXV3LzcNClY0Wno5VFQ2MHA0S1RNZXd1UUw2NHNrRVN4MllnMkVkaWtTTyt0S3hXa2hyYVVzbVZiR2JQbW1jbUR2OTd0SER3ODg3NDdlRnE1RjUNCnYrYVZTeUF6MDNpVUttdVNlSDg9PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1LZXlJbmZvIj48ZHM6S2V5VmFsdWU+PGRzOlJTQUtleVZhbHVlPjxkczpNb2R1bHVzPnd1Y21qOXRJV3J2d2JTVFVEZndLbCtKdERNTUVSMGNMZDZEa0JTcjc5MHQrckdOakVTcVlqUndFSWVCbktvUUhQeDVIb1JlRjg4L3QNCnFZOStDaEVYcExITHM5cDVhWDdTREp1YnBRTWZwMXRERlgzNHl3Z3hTUXZjZWVKUVdCWGppZXVJbWZDMjFzNGJPY2dKYlYxaGJpZ1MNCnpPS1RRS3IxVHpkR1IrdVJ5MDA9PC9kczpNb2R1bHVzPjxkczpFeHBvbmVudD5BUUFCPC9kczpFeHBvbmVudD48L2RzOlJTQUtleVZhbHVlPjwvZHM6S2V5VmFsdWU+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJSW1UQ0NCNEdnQXdJQkFnSURBWFVVTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUlCT3pFTE1Ba0dBMVVFQmhNQ1JWTXhPekE1QmdOVg0KQkFvVE1rRm5aVzVqYVdFZ1EyRjBZV3hoYm1FZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUNoT1NVWWdVUzB3T0RBeE1UYzJMVWtwTVRRdw0KTWdZRFZRUUhFeXRRWVhOellYUm5aU0JrWlNCc1lTQkRiMjVqWlhCamFXOGdNVEVnTURnd01EZ2dRbUZ5WTJWc2IyNWhNUzR3TEFZRA0KVlFRTEV5VlRaWEoyWldseklGQjFZbXhwWTNNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVWRFZpMHlNVFV3TXdZRFZRUUxFeXhXWldkbA0KZFNCb2RIUndjem92TDNkM2R5NWpZWFJqWlhKMExtNWxkQzkyWlhKRFNVTXRNaUFvWXlrd016RTFNRE1HQTFVRUN4TXNSVzUwYVhSaA0KZENCd2RXSnNhV05oSUdSbElHTmxjblJwWm1sallXTnBieUJrWlNCamFYVjBZV1JoYm5NeEd6QVpCZ05WQkFNVEVsQlNSVkJTVDBSVg0KUTBOSlR5QkpSRU5oZERBZUZ3MHhNREF5TVRFeE9ESXlNRFJhRncweE5EQXlNVEF4T0RJeU1EUmFNSUd3TVFzd0NRWURWUVFHRXdKRg0KVXpFMU1ETUdBMVVFQ3hNc1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5U1VSRFlYUWdLR01wTURNeA0KRmpBVUJnTlZCQVFURFVKRlVreEJUa2RCSUZOUFZFOHhGekFWQmdOVkJDb1REazFCVWtsQklFVk9SMUpCUTBsQk1SSXdFQVlEVlFRRg0KRXdreE1EQXdNRGswTkZNeEpUQWpCZ05WQkFNVEhFMUJVa2xCSUVWT1IxSkJRMGxCSUVKRlVreEJUa2RCSUZOUFZFOHdnWjh3RFFZSg0KS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTG5Kby9iU0ZxNzhHMGsxQTM4Q3BmaWJRekRCRWRIQzNlZzVBVXErL2RMZnF4ag0KWXhFcW1JMGNCQ0hnWnlxRUJ6OGVSNkVYaGZQUDdhbVBmZ29SRjZTeHk3UGFlV2wrMGd5Ym02VURINmRiUXhWOStNc0lNVWtMM0huaQ0KVUZnVjQ0bnJpSm53dHRiT0d6bklDVzFkWVc0b0VzemlrMENxOVU4M1JrZnJrY3ROQWdNQkFBR2pnZ1N3TUlJRXJEQU1CZ05WSFJNQg0KQWY4RUFqQUFNQTRHQTFVZER3RUIvd1FFQXdJRm9EQ0J6QVlEVlIwUkJJSEVNSUhCZ1E5aWMyOTBiMEJuYldGcGJDNWpiMjJrZ1lVdw0KZ1lJeEN6QUpCZ05WQkFZVEFrVlRNU3N3S1FZRFZRUUtGQ0pCWjhPb2JtTnBZU0JEWVhSaGJHRnVZU0JrWlNCRFpYSjBhV1pwWTJGag0KYWNPek1RNHdEQVlEVlFRTEV3VkpSRU5CVkRFUE1BMEdBMVVFQlJNR01ERTNOVEUwTVNVd0l3WURWUVFERXh4TlFWSkpRU0JGVGtkUw0KUVVOSlFTQkNSVkpNUVU1SFFTQlRUMVJQb0JBR0Npc0dBUVFCOVhnQkFRR2dBZ3dBb0JRR0RsWUVBQUVEQmdFRUFmVjRBUUVDb0FJTQ0KQURBZkJnTlZIUklFR0RBV2dSUmxZMTlwWkdOaGRFQmpZWFJqWlhKMExtNWxkREFkQmdOVkhRNEVGZ1FVQUZYanVOc2tCMk1seXZVQg0KaDdwOFRKMHVKMHd3Z2dGSUJnTlZIU01FZ2dFL01JSUJPNEFVUkt2Y2tVaE4xNGg0Q24vZ2RPRG42NzIzS1Z5aGdnRVBwSUlCQ3pDQw0KQVFjeEN6QUpCZ05WQkFZVEFrVlRNVHN3T1FZRFZRUUtFekpCWjJWdVkybGhJRU5oZEdGc1lXNWhJR1JsSUVObGNuUnBabWxqWVdOcA0KYnlBb1RrbEdJRkV0TURnd01URTNOaTFKS1RFb01DWUdBMVVFQ3hNZlUyVnlkbVZwY3lCUWRXSnNhV056SUdSbElFTmxjblJwWm1sag0KWVdOcGJ6RThNRG9HQTFVRUN4TXpWbVZuWlhVZ2FIUjBjSE02THk5M2QzY3VZMkYwWTJWeWRDNXVaWFF2ZG1WeWNISmxjSEp2WkhWag0KWTJsdklDaGpLVEF6TVRVd013WURWUVFMRXl4S1pYSmhjbkYxYVdFZ1JXNTBhWFJoZEhNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVOaA0KZEdGc1lXNWxjekVjTUJvR0ExVUVBeE1UVUZKRlVGSlBSRlZEUTBsUElFVkRMVUZEUTRJUWR3S1R0TTFFRVU5RkVQWFVZSGdnaERBZA0KQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdRd0VRWUpZSVpJQVliNFFnRUJCQVFEQWdXZ01EUUdDQ3NHQVFVRg0KQndFQkJDZ3dKakFrQmdnckJnRUZCUWN3QVlZWWFIUjBjSE02THk5dlkzTndMbU5oZEdObGNuUXVibVYwTUJnR0NDc0dBUVVGQndFRA0KQkF3d0NqQUlCZ1lFQUk1R0FRRXdnWVlHQTFVZEh3Ui9NSDB3UEtBNm9EaUdObWgwZEhBNkx5OWxjSE5qWkM1allYUmpaWEowTG01bA0KZEM5amNtd3ZjSEpsY0hKdlpIVmpZMmx2WDJWakxXbGtZMkYwTG1OeWJEQTlvRHVnT1lZM2FIUjBjRG92TDJWd2MyTmtNaTVqWVhSag0KWlhKMExtNWxkQzlqY213dmNISmxjSEp2WkhWalkybHZYMlZqTFdsa1kyRjBMbU55YkRDQjlnWURWUjBnQklIdU1JSHJNSUhvQmd3cg0KQmdFRUFmVjRBUU1CVmdFd2dkY3dMQVlJS3dZQkJRVUhBZ0VXSUdoMGRIQnpPaTh2ZDNkM0xtTmhkR05sY25RdWJtVjBMM1psY2tsRQ0KUTJGME1JR21CZ2dyQmdFRkJRY0NBakNCbVJxQmxrRnhkV1Z6ZENEdnY3MXpJSFZ1SUdObGNuUnBabWxqWVhRZ2NHVnljMjl1WVd3Zw0KU1VSRFFWUXNJSEpsWTI5dVpXZDFkQ0JrSjJsa1pXNTBhV1pwWTJGajc3KzlMQ0J6YVdkdVlYUjFjbUVnYVNCNGFXWnlZWFFnWkdVZw0KWTJ4aGMzTmxJRElnYVc1a2FYWnBaSFZoYkM0Z1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5UkVOaA0KZERBdEJnTlZIUWtFSmpBa01CQUdDQ3NHQVFVRkJ3a0VNUVFUQWtWVE1CQUdDQ3NHQVFVRkJ3a0ZNUVFUQWtWVE1BMEdDU3FHU0liMw0KRFFFQkJRVUFBNElCQVFDcTc3ODBSR1FNTEIxZ2tkTk1mTFhuZ3FNb1JIR0taYnZ6a3JxSUFtVDhXQWQxRThyQXBoUjkveExKVXRwNQ0KbGJnMmZScjVibDJqOE9WREJLMlltRzQxaDhBRG40U1RJL0FwZU5JTlNmalpzNk5Sc25XekZ5ZlhYbVBDSFlGQi9YV3p5aW1DRXhndg0KdnR1SCszUUF3Y3dobjUwUExFdWh3NUM1dmxYN0x5NUs2ckxMTUZOVVVNYldWeTFoWmVsSy9DQlRjQWpJTzM4TlkrdllSQU1LU2Y0TQ0KL2daUXo0cUJlRlZKYTUyUjdOY0FxQ2ZyZkxmYVhwYkRTZzk4eG9CZU5zMmluR3p4OFVTZ0VyTFpqS0pzZG4vS2pURDlnUy9zVGRRNg0KUTdpZHFsZDJMRlZsTzIvYjk0Wk5aQmNTLzc4RU9EWGdkV2ZreVBDN1J3OHJlOW5JMy9qVDwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjxkczpPYmplY3QgRW5jb2Rpbmc9ImJhc2U2NCIgSWQ9Ik9iamVjdC05ODczM2NkZS04YmNjLTQ4YTAtOWI3Ny0wZTk5OTdiZGQwNTgiIE1pbWVUeXBlPSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iPlNHVnNiRzhnVjI5eWJHUT08L2RzOk9iamVjdD48ZHM6T2JqZWN0Pjx4YWRlczpRdWFsaWZ5aW5nUHJvcGVydGllcyB4bWxuczp4YWRlcz0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMy92MS4zLjIjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1RdWFsaWZ5aW5nUHJvcGVydGllcyIgVGFyZ2V0PSIjU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjx4YWRlczpTaWduZWRQcm9wZXJ0aWVzIElkPSJTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjx4YWRlczpTaWduZWRTaWduYXR1cmVQcm9wZXJ0aWVzPjx4YWRlczpTaWduaW5nVGltZT4yMDExLTAzLTIxVDExOjQ0OjQyKzAxOjAwPC94YWRlczpTaWduaW5nVGltZT48eGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjx4YWRlczpDZXJ0Pjx4YWRlczpDZXJ0RGlnZXN0PjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT4zbTZ3OTlUb3lTZDlKcEJsMWdCazhEei9iYlU9PC9kczpEaWdlc3RWYWx1ZT48L3hhZGVzOkNlcnREaWdlc3Q+PHhhZGVzOklzc3VlclNlcmlhbD48ZHM6WDUwOUlzc3Vlck5hbWU+Q049UFJFUFJPRFVDQ0lPIElEQ2F0LCBPVT1FbnRpdGF0IHB1YmxpY2EgZGUgY2VydGlmaWNhY2lvIGRlIGNpdXRhZGFucywgT1U9VmVnZXUgaHR0cHM6Ly93d3cuY2F0Y2VydC5uZXQvdmVyQ0lDLTIgKGMpMDMsIE9VPVNlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8gRUNWLTIsIEw9UGFzc2F0Z2UgZGUgbGEgQ29uY2VwY2lvIDExIDA4MDA4IEJhcmNlbG9uYSwgTz1BZ2VuY2lhIENhdGFsYW5hIGRlIENlcnRpZmljYWNpbyAoTklGIFEtMDgwMTE3Ni1JKSwgQz1FUzwvZHM6WDUwOUlzc3Vlck5hbWU+PGRzOlg1MDlTZXJpYWxOdW1iZXI+OTU1MDg8L2RzOlg1MDlTZXJpYWxOdW1iZXI+PC94YWRlczpJc3N1ZXJTZXJpYWw+PC94YWRlczpDZXJ0PjwveGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjwveGFkZXM6U2lnbmVkU2lnbmF0dXJlUHJvcGVydGllcz48eGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PHhhZGVzOkRhdGFPYmplY3RGb3JtYXQgT2JqZWN0UmVmZXJlbmNlPSIjUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyI+PHhhZGVzOk1pbWVUeXBlPmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTwveGFkZXM6TWltZVR5cGU+PHhhZGVzOkVuY29kaW5nPmJhc2U2NDwveGFkZXM6RW5jb2Rpbmc+PC94YWRlczpEYXRhT2JqZWN0Rm9ybWF0PjwveGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PC94YWRlczpTaWduZWRQcm9wZXJ0aWVzPjwveGFkZXM6UXVhbGlmeWluZ1Byb3BlcnRpZXM+PC9kczpPYmplY3Q+PC9kczpTaWduYXR1cmU+</dss:Base64Signature> </dss:SignatureObject> </dss:SignResponse>";
+
+		IPersonalAttributeList palist = new PersonalAttributeList();
+
+		PersonalAttribute signedDoc = new PersonalAttribute();
+		signedDoc.setName("signedDoc");
+		signedDoc.setIsRequired(false);
+		ArrayList<String> signed = new ArrayList<String>();
+		signed.add(signedDocResponse);
+		signedDoc.setValue(signed);
+		palist.add(signedDoc);
+
+		PersonalAttribute isAgeOver = new PersonalAttribute();
+		isAgeOver.setName("isAgeOver");
+		isAgeOver.setIsRequired(false);
+		ArrayList<String> ages = new ArrayList<String>();
+		ages.add("16");
+		ages.add("18");
+		isAgeOver.setValue(ages);
+		palist.add(isAgeOver);
+
+		attrQueryenRequest.setPersonalAttributeList(palist);
+
+		final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+
+		response.setPersonalAttributeList(palist);
+
+		final STORKAttrQueryResponse storkResponse = getEngine()
+				.generateSTORKAttrQueryResponse(attrQueryenRequest, response, ipAddress, 
+						destinationUrl, isNotHashing);
+
+		attrQueryResponse = storkResponse.getTokenSaml();
+		attrQeuryenResponse = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse,
+				ipAddress);
+
+		assertTrue("SignedDoc response should be the same: ", attrQeuryenResponse
+				.getPersonalAttributeList().get("signedDoc").getValue().get(0)
+				.equals(signedDocResponse));
+
+	}
+	
+	@Test
+	public final void testEncodeDecode() {
+	      STORKAttrQueryRequest attrRequest = new STORKAttrQueryRequest();
+	      STORKAttrQueryRequest request;
+	      IPersonalAttributeList list = null;
+	      boolean outcome = false;
+	      
+	      try {
+	    	 //STEP 1: Create the STORKAttrQueryRequest and get the SAML bytes
+	    	 attrRequest.setSpSector("NOT AVAILABLE");
+	    	 attrRequest.setSpInstitution("NOT AVAILABLE");
+	    	 attrRequest.setSpApplication("NOT AVAILABLE");
+	         attrRequest.setSpCountry("NOT AVAILABLE");
+
+	         attrRequest.setIssuer("123");
+	         attrRequest.setDestination("456");
+	         attrRequest.setAssertionConsumerServiceURL("789");
+	         attrRequest.setQaa(2);
+	         attrRequest.setPersonalAttributeList(pal);
+
+	         System.out.println("Original PAL:");
+	         System.out.println(pal.toString());
+
+	         attrRequest = engine.generateSTORKAttrQueryRequest(attrRequest);
+
+	         byte[] saml = attrRequest.getTokenSaml();
+
+	    	 //STEP 2: RE-Create the STORKAttrQueryRequest from the SAML bytes
+	         request = engine.validateSTORKAttrQueryRequest(saml);
+
+	         System.out.println("STORKAttrQueryRequest Issuer: " + request.getIssuer());
+	         System.out.println("STORKAttrQueryRequest Destination: " + request.getDestination());
+	         System.out.println("STORKAttrQueryRequest ServiceURL: " + request.getAssertionConsumerServiceURL());
+	         System.out.println("STORKAttrQueryRequest Attributes: " + request.getPersonalAttributeList().toString());
+	         System.out.println("STORKAttrQueryRequest QAA: " + request.getQaa());
+			 //------------------------------
+			 list = request.getPersonalAttributeList();
+
+			 List<String> values = new ArrayList<String>();
+			 values.add("test1");
+			 values.add("test2");
+			 values.add("test3");
+			 list.get("newAttribute2").setValue(values);
+
+			 System.out.println("Values added in newAttribute2 PAL:");
+			 System.out.println(list.toString());
+
+	         //////////////////////////////////////////////////////////////////////////
+			 final STORKAttrQueryResponse response = new STORKAttrQueryResponse();
+			 response.setPersonalAttributeList(list);
+
+			 final STORKAttrQueryResponse storkResponse =
+						engine.generateSTORKAttrQueryResponse(request, response, "127.0.0.1",
+								request.getAssertionConsumerServiceURL(), false);
+
+			 byte[] samlBytes = storkResponse.getTokenSaml();
+
+	    	 //STEP 3: RE-Create the STORKAttrQueryResponse from the SAML bytes
+		     STORKAttrQueryResponse attrResponse = null;
+		     attrResponse =
+		         engine.validateSTORKAttrQueryResponse(samlBytes, "127.0.0.1");
+
+		     System.out.println("Response decoded PAL:");
+		     System.out.println(attrResponse.getPersonalAttributeList().toString());
+
+		     values = attrResponse.getPersonalAttributeList().get("newAttribute2").getValue();
+		     if ( values.contains("test1") && values.contains("test2") && values.contains("test3") )
+		    	 outcome = true;
+	      } catch (final STORKSAMLEngineException e) {
+	         LOG.error("Errror genereating SAML Token for Authentication Request", e);
+	      }
+
+	      assertTrue(outcome);
+	}
+	
+	@Test
+	public final void testGenerateAttrRequestWithMultipleAssertions()
+	throws STORKSAMLEngineException {
+		STORKAttrQueryRequest req = null;
+		STORKAttrQueryResponse res0 = null;
+		STORKAttrQueryResponse res1 = null;
+		STORKAttrQueryResponse res2 = null;
+		STORKAttrQueryResponse res = null;
+		STORKAttrQueryResponse restotal = null;
+		
+		try {
+			req = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
+		    	    
+		    attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
+		    
+		} catch (STORKSAMLEngineException e) {
+		    fail("Error validating STORKAuthnRequest");
+		}
+		
+		IPersonalAttributeList pList = req.getPersonalAttributeList();
+		for (int i =0; i < pList.size(); i++)
+		{
+			PersonalAttribute attr = pList.get("dateOfBirth");
+			attr.setValue(Arrays.asList("19820919"));
+			pList.remove("dateOfBirth");
+			pList.add(attr);
+			PersonalAttribute attr1 = pList.get("givenName");
+			attr1.setValue(Arrays.asList("Sveinborn Oskarsson"));
+			pList.remove("givenName");
+			pList.add(attr1);
+			PersonalAttribute attr2 = pList.get("isAgeOver");
+			attr2.setValue(Arrays.asList("true"));
+			pList.remove("isAgeOver");
+			pList.add(attr2);			
+		}
+		
+		res = new STORKAttrQueryResponse();
+		res.setPersonalAttributeList(pList);
+		
+		STORKAttrQueryResponse storkResponse = getEngine()
+		.generateSTORKAttrQueryResponse(req, res, ipAddress,
+				destinationUrl, isNotHashing);
+		
+		res0 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress);
+		
+		storkResponse = getEngine()
+		.generateSTORKAttrQueryResponse(req, res, ipAddress,
+				destinationUrl, isNotHashing);
+		res1 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress);
+		
+		storkResponse = getEngine()
+		.generateSTORKAttrQueryResponse(req, res, ipAddress,
+				destinationUrl, isNotHashing);
+		res2 = getEngine().validateSTORKAttrQueryResponse(storkResponse.getTokenSaml(), ipAddress);
+		
+		List<STORKAttrQueryResponse> responses = new ArrayList();
+		responses.add(res0);
+		responses.add(res1);
+		responses.add(res2);
+		
+		STORKAttrQueryResponse resfinal = new STORKAttrQueryResponse();
+		storkResponse = getEngine().generateSTORKAttrQueryResponseWithAssertions(req, resfinal, responses, 
+				ipAddress, destinationUrl, isNotHashing);
+		
+		attrQueryResponse = storkResponse.getTokenSaml();
+		FileOutputStream output = null;
+		try {
+			output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryMultiAssertResponse.xml"));
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		try {
+			output.write(attrQueryResponse);
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		res = null;
+		res = getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress);
+		System.out.println(res.getTotalPersonalAttributeList().toString());
+		assertNotNull(res);
+	}
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java
new file mode 100644
index 000000000..02a8a6fab
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkAuthRequestTest.java
@@ -0,0 +1,968 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.test.simple;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import org.opensaml.xml.parse.BasicParserPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+/**
+ * The Class StorkAuthRequestTest defines a class to .
+ */
+public class StorkAuthRequestTest {
+
+    /** The engines. */
+    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");    
+    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
+    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
+            
+
+    /**
+     * Instantiates a new stork authentication request test.
+     */
+    public StorkAuthRequestTest() {
+	pal = new PersonalAttributeList();
+
+	final PersonalAttribute isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(true);
+	final ArrayList<String> ages = new ArrayList<String>();
+	ages.add("16");
+	ages.add("18");
+	isAgeOver.setValue(ages);
+	pal.add(isAgeOver);
+	
+	final PersonalAttribute dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	pal.add(dateOfBirth);
+	
+		final PersonalAttribute eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+	pal.add(eIDNumber);
+
+	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
+	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
+
+	spName = "University of Oxford";
+	spSector = "EDU001";
+	spInstitution = "OXF001";
+	spApplication = "APP001";
+	spCountry = "EN";
+	
+	spId = "EDU001-OXF001-APP001";
+	
+    }
+
+    /** The destination. */
+    private String destination;
+
+    /** The service provider name. */
+    private String spName;
+
+    /** The service provider sector. */
+    private String spSector;
+
+    /** The service provider institution. */
+    private String spInstitution;
+
+    /** The service provider application. */
+    private String spApplication;
+
+    /** The service provider country. */
+    private String spCountry;
+    
+    /** The service provider id. */
+    private String spId;
+
+    /** The quality authentication assurance level. */
+    private static final int QAAL = 3;
+
+    /** The List of Personal Attributes. */
+    private IPersonalAttributeList pal;
+
+    /** The assertion consumer URL. */
+    private String assertConsumerUrl;
+
+    /** The authentication request. */
+    private static byte[] authRequest;
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(StorkAuthRequestTest.class.getName());
+
+    /** Parser manager used to parse XML. */
+    private static BasicParserPool parser;
+
+    static {
+	parser = new BasicParserPool();
+	parser.setNamespaceAware(true);
+    }
+
+    /**
+     * Test generate authentication request.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAuthnRequest() throws STORKSAMLEngineException {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// new parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	//engine.generateSTORKAuthnRequest(request);
+	
+	LOG.info("STORKAuthnRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAuthnRequest(request).getTokenSaml()));
+	request.setCitizenCountryCode("ES");
+	LOG.info("STORKAuthnRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKAuthnRequest(request).getTokenSaml()));
+    }
+    
+    
+    /**
+     * Test generate authentication request error personal attribute name error.
+     */
+    @Test
+    public final void testGenerateAuthnRequestPALsErr1() {
+	
+	final IPersonalAttributeList palWrong = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("attrNotValid");
+	worngAttr.setIsRequired(true);
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(palWrong);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    
+    /**
+     * Test generate authentication request error personal attribute value error.
+     */
+    @Test
+    public final void testGenerateAuthnRequestPALsErr2() {
+	
+	final IPersonalAttributeList palWrong = new PersonalAttributeList();
+
+	final PersonalAttribute attrNotValid = new PersonalAttribute();
+	attrNotValid.setName("attrNotValid");
+	attrNotValid.setIsRequired(true);
+	palWrong.add(attrNotValid);
+
+
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(palWrong);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request error provider name null.
+     */
+    @Test
+    public final void testGenerateAuthnRequestSPNAmeErr1() {
+	
+ 
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(null);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try 
+	{
+		engine.generateSTORKAuthnRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	}
+	catch (STORKSAMLEngineException e)
+	{
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request authentication assurance level
+     * negative value.
+     */
+    @Test
+    public final void testGenerateAuthnRequestQaalErr1() {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(-1);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider sector null.
+     */
+    @Test
+    public final void testGenerateAuthnRequestSectorErr() {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(null);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider institution null.
+     */
+    @Test
+    public final void testGenerateAuthnRequestInstitutionrErr() {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(null);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider application null.
+     */
+    @Test
+    public final void testGenerateAuthnRequestApplicationErr() {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(null);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	}
+    }
+
+    /**
+     * Test generate authentication request service provider country null.
+     */
+    @Test
+    public final void testGenerateAuthnRequestCountryErr() {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(null);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	    
+	} catch (STORKSAMLEngineException e) {	 
+		LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request error with quality authentication
+     * assurance level wrong.
+     */
+    @Test
+    public final void testGenerateAuthnRequestQaalErr2() {
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(0);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request personal attribute list null value.
+     */
+    @Test
+    public final void testGenerateAuthnRequestPALErr1() {
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(null);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication request error with assertion consumer URL
+     * null.
+     */
+    @Test
+    public final void testGenerateAuthnRequestAssertionConsumerErr1() {
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(null);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    engine.generateSTORKAuthnRequest(request);
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate authentication request null parameter.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnRequestNullParam()
+	    throws STORKSAMLEngineException {
+	try {
+	    engine.validateSTORKAuthnRequest(null);
+	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate authentication request error bytes encode.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnRequestErrorEncode()
+	    throws STORKSAMLEngineException {
+	try {
+	    engine.validateSTORKAuthnRequest("messageError".getBytes());
+	    fail("validateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate authentication request.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnRequest() throws STORKSAMLEngineException {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+	
+	authRequest = engine.generateSTORKAuthnRequest(request).getTokenSaml();
+	
+	final STORKAuthnRequest validatedRequest = engine.validateSTORKAuthnRequest(authRequest);	 
+		
+	assertEquals("CrossBorderShare incorrect: ", validatedRequest.isEIDCrossBorderShare(), false);
+	assertEquals("CrossSectorShare incorrect: ", validatedRequest.isEIDCrossSectorShare(),	false);
+	assertEquals("SectorShare incorrect: ", validatedRequest.isEIDSectorShare(), false);
+	
+    }
+
+    /**
+     * Test validate data authenticate request. Verified parameters after
+     * validation.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateDataAuthnRequest() throws STORKSAMLEngineException {
+    	
+    final STORKAuthnRequest request = engine.validateSTORKAuthnRequest(authRequest);
+
+	assertEquals("Sestination incorrect: ", request.getDestination(), destination);
+	
+	assertEquals("CrossBorderShare incorrect: ", request.isEIDCrossBorderShare(), false);
+	assertEquals("CrossSectorShare incorrect: ", request.isEIDCrossSectorShare(), false);
+	assertEquals("SectorShare incorrect: ", request.isEIDSectorShare(), false);	
+
+	assertEquals("Service provider incorrect: ", request.getProviderName(), spName);
+	assertEquals("QAAL incorrect: ", request.getQaa(), QAAL);
+	assertEquals("SPSector incorrect: ", request.getSpSector(), spSector);		
+	assertEquals("SPInstitution incorrect: ", request.getSpInstitution(), null);
+	assertEquals("SPApplication incorrect: ", request.getSpApplication(), spApplication);
+	assertEquals("Asserition consumer URL incorrect: ", request.getAssertionConsumerServiceURL(), assertConsumerUrl);
+				
+	assertEquals("SP Country incorrect: ", request.getSpCountry(), spCountry);
+	assertEquals("SP Id incorrect: ", request.getSPID(), spId);
+	assertEquals("CitizenCountryCode incorrect: ", request.getCitizenCountryCode(), "ES");
+		
+    }
+
+    /**
+     * Test validate file authentication request. Validate from XML file.
+     *     
+     * @throws Exception the exception
+     */
+    @Test
+    public final void testValidateFileAuthnRequest() throws Exception {
+
+	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml");
+
+	try {
+	    engine.validateSTORKAuthnRequest(bytes);
+        fail("testValidateFileAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error(e.getMessage());
+	}
+    }
+
+    /**
+     * Test validate file authentication request tag delete.
+     * 
+     * @throws Exception the exception
+     */
+    @Test
+    public final void testValidateFileAuthnRequestTagDelete() throws Exception {
+
+	final byte[] bytes = SSETestUtils.readStorkSamlFromFile("/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml");
+
+	try {
+	    engine.validateSTORKAuthnRequest(bytes);
+        fail("validateSTORKAuthnRequest(...) should have thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error(e.getMessage());
+
+	}
+    }
+
+    /**
+     * Test validate authentication request not trusted token.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnRequestNotTrustedErr1()
+	    throws STORKSAMLEngineException {
+	
+	try {
+	    final STORKSAMLEngine engineNotTrusted = STORKSAMLEngine
+		    .getInstance("CONF2");
+
+	    final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	    request.setDestination(destination);
+	    request.setProviderName(spName);
+	    request.setQaa(QAAL);
+	    request.setPersonalAttributeList(pal);
+	    request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	    // news parameters
+	    request.setSpSector(spSector);
+	    request.setSpInstitution(spInstitution);
+	    request.setSpApplication(spApplication);
+	    request.setSpCountry(spCountry);
+
+	    final byte[] authReqNotTrust = engineNotTrusted
+		    .generateSTORKAuthnRequest(request).getTokenSaml();
+
+	    engine.validateSTORKAuthnRequest(authReqNotTrust);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+        fail("validateSTORKAuthnRequestNotTrusted(...) should not have thrown an STORKSAMLEngineException!");
+    }
+    }
+
+    /**
+     * Test validate authentication request trusted.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnRequestTrusted()
+	    throws STORKSAMLEngineException {
+
+	final STORKSAMLEngine engineTrusted = STORKSAMLEngine
+		.getInstance("CONF3");
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+
+	final byte[] authReqNotTrust = engineTrusted.generateSTORKAuthnRequest(
+		request).getTokenSaml();
+
+	// engine ("CONF1") no have trust certificate from "CONF2"
+	engine.validateSTORKAuthnRequest(authReqNotTrust);
+	
+    }
+    
+    
+    
+    
+    /**
+     * Test generate authentication request service provider application null.
+     */
+    @Test
+    public final void testGenerateAuthnRequestNADA() {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(null);
+	request.setSpInstitution(null);
+	request.setSpApplication(null);
+	request.setSpCountry(null);
+
+	try {
+	       	
+		engine.validateSTORKAuthnRequest(authRequest);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	    fail("generateSTORKAuthnRequest(...) should've thrown an STORKSAMLEngineException!");
+	}
+    }
+    
+    /**
+     * Test validate authentication request with unknown elements.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnRequestWithUnknownElements() throws STORKSAMLEngineException {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+	
+	IPersonalAttributeList pAttList = new PersonalAttributeList();
+		
+	final PersonalAttribute unknown = new PersonalAttribute();
+	unknown.setName("unknown");
+	unknown.setIsRequired(true);
+	pAttList.add(unknown);	
+	
+	final PersonalAttribute eIdentifier = new PersonalAttribute();
+	eIdentifier.setName("eIdentifier");
+	eIdentifier.setIsRequired(true);
+	pAttList.add(eIdentifier);	
+	
+	request.setPersonalAttributeList(pAttList);
+
+	// new parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+	
+	STORKAuthnRequest req = new STORKAuthnRequest();
+		
+	req  = engine3.generateSTORKAuthnRequest(request);
+	
+	req = engine.validateSTORKAuthnRequest(req.getTokenSaml());
+	
+	assertNull("The value shouldn't exist", req.getPersonalAttributeList().get("unknown"));
+	assertNotNull("The value should exist", req.getPersonalAttributeList().get("eIdentifier"));
+	
+    }
+    
+    /**
+     * Test generate Request with required elements by default
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAuthnRequestWithIsRequiredElementsByDefault() throws STORKSAMLEngineException {
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+	
+	IPersonalAttributeList pAttList = new PersonalAttributeList();
+		
+	final PersonalAttribute eIdentifier = new PersonalAttribute();
+	eIdentifier.setName("eIdentifier");
+	eIdentifier.setIsRequired(true);
+	pAttList.add(eIdentifier);	
+	
+	request.setPersonalAttributeList(pAttList);
+
+	// new parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+	
+	STORKAuthnRequest req = new STORKAuthnRequest();
+	STORKAuthnRequest reqTrue = new STORKAuthnRequest();
+	STORKAuthnRequest reqFalse = new STORKAuthnRequest();
+		
+	reqTrue  = engine.generateSTORKAuthnRequest(request);
+	reqFalse = engine2.generateSTORKAuthnRequest(request);
+	req  	 = engine3.generateSTORKAuthnRequest(request);
+	
+	
+	String token = new String(req.getTokenSaml());
+	String reqTrueToken = new String(reqTrue.getTokenSaml());
+	String reqFalseToken = new String(reqFalse.getTokenSaml());
+	
+	assertTrue("The token must contain the chain 'isRequired'", token.contains("isRequired"));
+	assertTrue("The token must contain the chain 'isRequired'", reqTrueToken.contains("isRequired"));
+	assertFalse("The token must contain the chain 'isRequired'", reqFalseToken.contains("isRequired"));
+		
+    }
+    
+    /**
+     * Test validating request and getting alias used to save 
+     * the saml trusted certificate into trustore
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnRequestGettingItsAlias() throws STORKSAMLEngineException {
+
+    	final STORKAuthnRequest request = new STORKAuthnRequest();
+
+    	request.setDestination(destination);
+    	request.setProviderName(spName);
+    	request.setQaa(QAAL);
+    	request.setPersonalAttributeList(pal);
+    	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+    	
+    	IPersonalAttributeList pAttList = new PersonalAttributeList();
+    		
+    	final PersonalAttribute eIdentifier = new PersonalAttribute();
+    	eIdentifier.setName("eIdentifier");
+    	eIdentifier.setIsRequired(true);
+    	pAttList.add(eIdentifier);	
+    	
+    	request.setPersonalAttributeList(pAttList);
+
+    	// new parameters
+    	request.setSpSector(spSector);
+    	request.setSpInstitution(spInstitution);
+    	request.setSpApplication(spApplication);
+    	request.setSpCountry(spCountry);
+    	request.setSPID(spId);
+    	request.setCitizenCountryCode("ES");
+    	
+    	STORKAuthnRequest req = new STORKAuthnRequest();
+    		
+    	req  = engine3.generateSTORKAuthnRequest(request);
+    	req = engine.validateSTORKAuthnRequest(req.getTokenSaml());
+    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo-cert"));
+    	
+    	req  = engine2.generateSTORKAuthnRequest(request);
+    	req = engine2.validateSTORKAuthnRequest(req.getTokenSaml());
+    	assertTrue("The alias should match this value", req.getAlias().equals("local-demo-cert"));
+    	
+
+		
+    }
+    
+	/**
+	 * Test generating/validating request with signedDoc
+	 * 
+	 * @throws STORKSAMLEngineException
+	 *             the STORKSAML engine exception
+	 */
+	@Test
+	public final void testGenerateAuthnRequestWithSignedDoc()
+			throws STORKSAMLEngineException {
+
+		String signedDocRequest = "<dss:SignRequest xmlns:dss=\"urn:oasis:names:tc:dss:1.0:core:schema\" RequestID=\"_d96b62a87d18f1095170c1f44c90b5fd\"><dss:InputDocuments><dss:Document><dss:Base64Data MimeType=\"text/plain\">VGVzdCB0ZXh0</dss:Base64Data></dss:Document></dss:InputDocuments></dss:SignRequest>";
+
+		final STORKAuthnRequest request = new STORKAuthnRequest();
+
+		PersonalAttributeList paler = new PersonalAttributeList();
+
+		final PersonalAttribute eIDNumber = new PersonalAttribute();
+		eIDNumber.setName("eIdentifier");
+		eIDNumber.setIsRequired(true);
+		paler.add(eIDNumber);
+
+		final PersonalAttribute isAgeOver = new PersonalAttribute();
+		isAgeOver.setName("isAgeOver");
+		isAgeOver.setIsRequired(true);
+		final ArrayList<String> ages = new ArrayList<String>();
+		ages.add("16");
+		ages.add("18");
+		isAgeOver.setValue(ages);
+		paler.add(isAgeOver);
+
+		final PersonalAttribute signedDoc = new PersonalAttribute();
+		signedDoc.setName("signedDoc");
+		final ArrayList<String> signedDocs = new ArrayList<String>();
+		signedDocs.add(signedDocRequest);
+		signedDoc.setValue(signedDocs);
+		signedDoc.setIsRequired(false);
+		paler.add(signedDoc);
+
+		request.setDestination(destination);
+		request.setProviderName(spName);
+		request.setQaa(QAAL);
+		request.setPersonalAttributeList(paler);
+		request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+		// new parameters
+		request.setSpSector(spSector);
+		request.setSpInstitution(spInstitution);
+		request.setSpApplication(spApplication);
+		request.setSpCountry(spCountry);
+		request.setSPID(spId);
+		request.setCitizenCountryCode("ES");
+
+		STORKAuthnRequest req = new STORKAuthnRequest();
+
+		req = engine.generateSTORKAuthnRequest(request);
+		req = engine.validateSTORKAuthnRequest(req.getTokenSaml());
+
+		assertTrue("SignedDoc request should be the same: ", req
+				.getPersonalAttributeList().get("signedDoc").getValue().get(0)
+				.equals(signedDocRequest));
+		
+
+	}
+
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java
new file mode 100644
index 000000000..46904788f
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutRequestTest.java
@@ -0,0 +1,89 @@
+package eu.stork.peps.test.simple;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.junit.Test;
+import org.opensaml.xml.parse.BasicParserPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKLogoutRequest;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+
+public class StorkLogoutRequestTest {
+	
+	/** The engines. */	
+    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
+    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
+    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
+    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
+    
+    public StorkLogoutRequestTest() {           
+    	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
+    	spUserId = "IS/IS/1234567890";
+    }
+
+    /** The destination. */
+    private String destination;
+   
+    /** The user id. */
+    private String spUserId;
+    
+    /** The logout request. */
+    private static byte[] logoutRequest;
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(StorkLogoutRequestTest.class.getName());
+
+    /** Parser manager used to parse XML. */
+    private static BasicParserPool parser;
+
+    static {
+		parser = new BasicParserPool();
+		parser.setNamespaceAware(true);
+    }
+    
+    /**
+     * Test generate authentication request.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateLogoutRequest() throws STORKSAMLEngineException {
+
+	final STORKLogoutRequest request = new STORKLogoutRequest();
+
+	request.setDestination(destination);	
+
+	request.setSpProvidedId(spUserId);
+
+	STORKLogoutRequest req1 = engine0.generateSTORKLogoutRequest(request);
+	byte[] reqByte = req1.getTokenSaml();
+	FileOutputStream output = null;
+	
+	try {
+		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/LogoutRequest.xml"));
+	} catch (FileNotFoundException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	try {
+		output.write(reqByte);
+	} catch (IOException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	
+	LOG.info("STORKAttrQueryRequest 1: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKLogoutRequest(request).getTokenSaml()));
+	
+	LOG.info("STORKAttrQueryRequest 2: "  + SSETestUtils.encodeSAMLToken(engine.generateSTORKLogoutRequest(request).getTokenSaml()));
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java
new file mode 100644
index 000000000..2d05e04aa
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkLogoutResponseTest.java
@@ -0,0 +1,142 @@
+package eu.stork.peps.test.simple;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+import org.opensaml.xml.parse.BasicParserPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.commons.STORKLogoutRequest;
+import eu.stork.peps.auth.commons.STORKLogoutResponse;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+
+public class StorkLogoutResponseTest {
+	
+	/** The engines. */	
+    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
+    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
+    private static STORKSAMLEngine engine2 = STORKSAMLEngine.getInstance("CONF2");    
+    private static STORKSAMLEngine engine3 = STORKSAMLEngine.getInstance("CONF3");
+    
+    public StorkLogoutResponseTest() {           
+    	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
+    	spUserId = "IS/IS/1234567890";
+    }
+
+    /** The destination. */
+    private String destination;
+   
+    /** The user id. */
+    private String spUserId;
+    
+    /** The logout request. */
+    private static byte[] logoutRequest;
+    
+    /** The logout response. */
+    private static byte[] logoutResponse;
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(StorkLogoutResponseTest.class.getName());
+
+    /** Parser manager used to parse XML. */
+    private static BasicParserPool parser;
+
+    static {
+		parser = new BasicParserPool();
+		parser.setNamespaceAware(true);
+    }
+    
+    /**
+     * Test generate authentication request.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateLogoutRequest() throws STORKSAMLEngineException {
+
+	final STORKLogoutRequest request = new STORKLogoutRequest();
+	
+	final STORKLogoutResponse response = new STORKLogoutResponse();
+
+	request.setDestination(destination);
+	response.setDestination(destination);
+
+	request.setSpProvidedId(spUserId);
+
+	STORKLogoutRequest req1 = engine0.generateSTORKLogoutRequest(request);
+	
+	STORKLogoutResponse res = engine0.generateSTORKLogoutResponse(req1, response);
+	
+	byte[] reqByte = res.getTokenSaml();
+	FileOutputStream output = null;
+	
+	try {
+		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/LogoutResponse.xml"));
+	} catch (FileNotFoundException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	try {
+		output.write(reqByte);
+	} catch (IOException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+		
+	
+		assertNotNull(reqByte);
+    }
+    
+    /**
+     * Test generate authentication request.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateLogoutRequestFail() throws STORKSAMLEngineException {
+
+	final STORKLogoutRequest request = new STORKLogoutRequest();
+	
+	final STORKLogoutResponse response = new STORKLogoutResponse();
+
+	request.setDestination(destination);
+	response.setDestination(destination);
+	response.setStatusMessage("User not found.");
+	response.setStatusCode("1234");
+	request.setSpProvidedId(spUserId);
+
+	STORKLogoutRequest req1 = engine0.generateSTORKLogoutRequest(request);
+	
+	STORKLogoutResponse res = engine0.generateSTORKLogoutResponseFail(req1, response);
+	
+	byte[] reqByte = res.getTokenSaml();
+	FileOutputStream output = null;
+	
+	try {
+		output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/LogoutResponseFail.xml"));
+	} catch (FileNotFoundException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	try {
+		output.write(reqByte);
+	} catch (IOException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	
+		assertNotNull(reqByte);
+    }
+
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java
new file mode 100644
index 000000000..62e9cfb18
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkNewResponseTest.java
@@ -0,0 +1,533 @@
+package eu.stork.peps.test.simple;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.junit.Test;
+import org.opensaml.xml.parse.BasicParserPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
+import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+import eu.stork.peps.auth.commons.STORKAuthnResponse;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+
+public class StorkNewResponseTest {
+	/** The engine. */
+    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
+    private static STORKSAMLEngine engine0 = STORKSAMLEngine.getInstance("CONF0");
+
+    /**
+     * Gets the engine.
+     * 
+     * @return the engine
+     */
+    public static STORKSAMLEngine getEngine() {
+        return engine;
+    }
+    
+    public static STORKSAMLEngine getEngine2() {
+        return engine0;
+    }
+
+    /**
+     * Sets the engine.
+     * 
+     * @param newEngine the new engine
+     */
+    public static void setEngine(final STORKSAMLEngine newEngine) {
+    	StorkNewResponseTest.engine = newEngine;
+    }
+
+    /** The destination. */
+    private static String destination;
+
+    /** The service provider name. */
+    private static String spName;
+
+    /** The service provider sector. */
+    private static String spSector;
+
+    /** The service provider institution. */
+    private static String spInstitution;
+
+    /** The service provider application. */
+    private static String spApplication;
+
+    /** The service provider country. */
+    private static String spCountry;
+    
+    /** The service provider id. */
+    private static String spId;
+
+    /** The quality authentication assurance level. */
+    private static final int QAAL = 3;
+
+    /** The state. */
+    private static String state = "ES";
+    
+    /** The town. */
+    private static String town = "Madrid";
+    
+    /** The municipality code. */
+    private static String municipalityCode = "MA001";
+    
+    /** The postal code. */
+    private static String postalCode = "28038";
+    
+    /** The street name. */
+    private static String streetName = "Marchamalo";
+    
+    /** The street number. */
+    private static String streetNumber = "3";
+    
+    /** The apartament number. */
+    private static String apartamentNumber = "5º E";
+
+    /** The List of Personal Attributes. */
+    private static IPersonalAttributeList pal;    
+    
+    /** The List of Personal Attributes. */
+    private static IPersonalAttributeList pal2;
+
+    /** The assertion consumer URL. */
+    private static String assertConsumerUrl;
+
+    /** The authentication request. */
+    private static byte[] authRequest;
+
+    /** The authentication response. */
+    private static byte[] authResponse;
+
+    /** The authentication request. */
+    private static STORKAuthnRequest authenRequest;
+
+    /** The authentication response. */
+    private static STORKAuthnResponse authnResponse;
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(StorkResponseTest.class.getName());
+
+    /**
+     * Instantiates a new stork response test.
+     */
+    public StorkNewResponseTest() {
+	super();
+    }
+
+    /** The IP address. */
+    private static String ipAddress;
+
+    /** The is hashing. */
+    private final boolean isHashing = Boolean.TRUE;
+
+    /** The is not hashing. */
+    private final boolean isNotHashing = Boolean.FALSE;
+
+    /** The ERROR text. */
+    private static final String ERROR_TXT = "generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!";
+
+
+    /** Parser manager used to parse XML. */
+    private static BasicParserPool parser;
+    
+    /** The attribute query request. */
+    private static STORKAttrQueryRequest attrQueryenRequest;
+
+    /** The attribute query response. */
+    private static STORKAttrQueryResponse attrQeuryenResponse;
+    
+    /** The attribute query request. */
+    private static byte[] attrQueryRequest;
+    
+    /** The attribute query response. */
+    private static byte[] attrQueryResponse;
+    
+    
+
+    static {
+	parser = new BasicParserPool();
+	parser.setNamespaceAware(true);
+
+	pal = new PersonalAttributeList();
+	pal2 = new PersonalAttributeList();
+
+	PersonalAttribute isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(false);
+	ArrayList<String> ages = new ArrayList<String>();
+	ages.add("16");
+	ages.add("18");
+	isAgeOver.setValue(ages);
+	pal.add(isAgeOver);
+
+	PersonalAttribute dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	pal.add(dateOfBirth);
+
+	PersonalAttribute eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+	pal.add(eIDNumber);
+
+	final PersonalAttribute givenName = new PersonalAttribute();
+	givenName.setName("givenName");
+	givenName.setIsRequired(true);
+	pal.add(givenName);
+
+	PersonalAttribute canRessAddress = new PersonalAttribute();
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	pal.add(canRessAddress);
+	
+	PersonalAttribute newAttribute = new PersonalAttribute();
+	newAttribute.setName("newAttribute2");
+	newAttribute.setIsRequired(true);
+	pal.add(newAttribute);
+	
+	PersonalAttribute hasDegree = new PersonalAttribute();
+	hasDegree.setName("hasDegree");
+	List<String> vals = new ArrayList<String>();
+	vals.add("Engineering");
+	vals.add("Computer Science");
+	hasDegree.setValue(vals);
+	pal2.add(hasDegree);
+	
+	PersonalAttribute mandate = new PersonalAttribute();
+	mandate.setName("mandateContent");
+	List<String> manvalues = new ArrayList<String>();
+	manvalues.add("Powers");
+	mandate.setValue(manvalues);
+	pal2.add(mandate);
+
+	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
+	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
+	spName = "University Oxford";
+	
+	spName = "University of Oxford";
+	spSector = "EDU001";
+	spInstitution = "OXF001";
+	spApplication = "APP001";
+	spCountry = "EN";
+	
+	spId = "EDU001-APP001-APP001";
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    authRequest = getEngine().generateSTORKAuthnRequest(request)
+		    .getTokenSaml();
+	    	    
+	    authenRequest = getEngine().validateSTORKAuthnRequest(authRequest);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    fail("Error create STORKAuthnRequest");
+	}
+
+	ipAddress = "111.222.333.444";
+
+	pal = new PersonalAttributeList();
+
+	isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(true);
+	ages = new ArrayList<String>();
+
+	ages.add("16");
+	ages.add("18");
+
+	isAgeOver.setValue(ages);
+	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(isAgeOver);
+
+	dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	final ArrayList<String> date = new ArrayList<String>();
+	date.add("16/12/2008");
+	dateOfBirth.setValue(date);
+	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(dateOfBirth);
+
+	eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+	final ArrayList<String> idNumber = new ArrayList<String>();
+	idNumber.add("123456789PA");
+	eIDNumber.setValue(idNumber);
+	eIDNumber.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(eIDNumber);
+
+	canRessAddress = new PersonalAttribute();
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> address = new HashMap<String, String>();
+
+	address.put("state", state);
+	address.put("municipalityCode", municipalityCode);
+	address.put("town", town);
+	address.put("postalCode", postalCode);
+	address.put("streetName", streetName);
+	address.put("streetNumber", streetNumber);
+	address.put("apartamentNumber", apartamentNumber);
+
+	canRessAddress.setComplexValue(address);
+	pal.add(canRessAddress);
+    
+	newAttribute = new PersonalAttribute();
+	newAttribute.setName("newAttribute2");
+	newAttribute.setIsRequired(true);
+	newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> values = new HashMap<String, String>();
+	
+	values.put("value1", "value1");
+	values.put("value2", "value2");
+	values.put("value3", "value3");
+	values.put("value4", "value4");
+	
+	newAttribute.setComplexValue(values);
+	pal.add(newAttribute);
+	
+	final STORKAttrQueryRequest arequest = new STORKAttrQueryRequest();
+	arequest.setDestination(destination);
+	//request.setProviderName(spName);
+	arequest.setQaa(QAAL);
+	arequest.setPersonalAttributeList(pal2);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	arequest.setSpSector(spSector);
+	arequest.setSpInstitution(spInstitution);
+	arequest.setSpApplication(spApplication);
+	arequest.setSpCountry(spCountry);
+	arequest.setSPID(spId);
+	arequest.setCitizenCountryCode("IS");
+	arequest.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	try {
+	    attrQueryRequest = getEngine().generateSTORKAttrQueryRequest(arequest)
+		    .getTokenSaml();
+	    	    
+	    attrQueryenRequest = getEngine().validateSTORKAttrQueryRequest(attrQueryRequest);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    fail("Error create STORKAuthnRequest");
+	}
+	
+    }
+
+    /**
+     * Test generate authentication request without errors.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAuthnResponseWithSimpleRes() throws STORKSAMLEngineException {
+
+    	//Create the response holding pal
+		final STORKAuthnResponse response = new STORKAuthnResponse();
+		response.setPersonalAttributeList(pal);
+		
+		//List of query responses
+		List<STORKAttrQueryResponse> resList = new ArrayList<STORKAttrQueryResponse>();
+		
+		final STORKAttrQueryResponse aResponse1 = new STORKAttrQueryResponse();
+		aResponse1.setPersonalAttributeList(pal2);
+	
+		final STORKAttrQueryResponse aStorkResponse1 = getEngine2()
+			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse1, ipAddress,
+					destination, isNotHashing);
+	
+		attrQueryResponse = aStorkResponse1.getTokenSaml();
+			
+		resList.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
+		
+		final STORKAttrQueryResponse aResponse2 = new STORKAttrQueryResponse();
+		aResponse2.setPersonalAttributeList(pal2);
+	
+		final STORKAttrQueryResponse aStorkResponse2 = getEngine()
+			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse2, ipAddress,
+					destination, isNotHashing);
+	
+		attrQueryResponse = aStorkResponse2.getTokenSaml();
+			
+		resList.add(getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
+		
+		//Create the final response containing query responses
+		final STORKAuthnResponse storkResponse = getEngine()
+		.generateSTORKAuthnResponseAfterQuery(authenRequest, response, ipAddress,
+			isNotHashing, resList);
+
+		authResponse = storkResponse.getTokenSaml();
+		
+		//Validate, write out and print out the attribute lists a
+		STORKAuthnResponse finalResponse = getEngine().validateSTORKAuthnResponseWithQuery(authResponse, ipAddress);
+		System.out.println("The original pal: " + finalResponse.getPersonalAttributeList().toString());
+		for (int i = 0; i < finalResponse.getPersonalAttributeLists().size(); i++)
+		{
+			System.out.println("Pal "+ Integer.toString(i) + ": " + finalResponse.getPersonalAttributeLists().get(i).toString());
+		}
+		System.out.println("The total pal: " + finalResponse.getTotalPersonalAttributeList().toString());
+		
+		FileOutputStream output = null;
+		
+		try {
+			output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthAttrQResponse.xml"));
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		try {
+			output.write(authResponse);
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+    }
+    
+    /**
+     * Test generate authentication request without errors.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAuthnResponseWithComplexRes() throws STORKSAMLEngineException {
+    	
+    	//Create the response holding pal
+		final STORKAuthnResponse response = new STORKAuthnResponse();
+		response.setPersonalAttributeList(pal);
+		
+		//Create a list for the attribute query responses we have
+		List<STORKAttrQueryResponse> resList = new ArrayList<STORKAttrQueryResponse>();
+		
+		//Create the first attribute query response
+		final STORKAttrQueryResponse aResponse1 = new STORKAttrQueryResponse();
+		aResponse1.setPersonalAttributeList(pal2);
+	
+		//Generate the first response
+		final STORKAttrQueryResponse aStorkResponse1 = getEngine2()
+			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse1, ipAddress,
+					destination, isNotHashing);
+	
+		attrQueryResponse = aStorkResponse1.getTokenSaml();
+			
+		//Validate it and add to the response list
+		resList.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
+		
+		//Create a second response like the first
+		final STORKAttrQueryResponse aResponse2 = new STORKAttrQueryResponse();
+		aResponse2.setPersonalAttributeList(pal2);
+	
+		final STORKAttrQueryResponse aStorkResponse2 = getEngine()
+			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse2, ipAddress,
+					destination, isNotHashing);
+	
+		attrQueryResponse = aStorkResponse2.getTokenSaml();
+			
+		resList.add(getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
+		
+		//Create a attribute query response which contains multiple assertions from an AP
+		final STORKAttrQueryResponse aResponseMulti = new STORKAttrQueryResponse();
+		aResponseMulti.setPersonalAttributeList(pal2);
+	
+		//Create a list for the responses which the multiple assertion response will hold 
+		List<STORKAttrQueryResponse> multiResponses = new ArrayList();
+			
+		//Create two more simple responses which the multi assertion response will hold
+		final STORKAttrQueryResponse aResponse3 = new STORKAttrQueryResponse();
+		aResponse3.setPersonalAttributeList(pal2);
+	
+		final STORKAttrQueryResponse aStorkResponse3 = getEngine2()
+			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse3, ipAddress,
+					destination, isNotHashing);
+	
+		attrQueryResponse = aStorkResponse3.getTokenSaml();
+		//Validate and add to the multi response 	
+		multiResponses.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
+		
+		final STORKAttrQueryResponse aResponse4 = new STORKAttrQueryResponse();
+		aResponse4.setPersonalAttributeList(pal2);
+	
+		final STORKAttrQueryResponse aStorkResponse4 = getEngine()
+			.generateSTORKAttrQueryResponse(attrQueryenRequest, aResponse4, ipAddress,
+					destination, isNotHashing);
+	
+		attrQueryResponse = aStorkResponse4.getTokenSaml();
+		
+		multiResponses.add(getEngine2().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
+		
+		//Generate the multi assertion query response
+		final STORKAttrQueryResponse aStorkResponseMulti = getEngine()
+		.generateSTORKAttrQueryResponseWithAssertions(attrQueryenRequest, aResponseMulti, multiResponses, 
+				ipAddress, destination, isNotHashing);
+	
+		attrQueryResponse = aStorkResponseMulti.getTokenSaml();
+		
+		//Add to the list of query responses
+		resList.add(getEngine().validateSTORKAttrQueryResponse(attrQueryResponse, ipAddress));
+		
+		//Generate the stork response with all the query responses
+		final STORKAuthnResponse storkResponse = getEngine()
+		.generateSTORKAuthnResponseAfterQuery(authenRequest, response, ipAddress,
+			isNotHashing, resList);
+
+		authResponse = storkResponse.getTokenSaml();
+		
+		//Validate it, write out and print out the personal attribute lists
+		STORKAuthnResponse finalResponse = getEngine().validateSTORKAuthnResponseWithQuery(authResponse, ipAddress);
+		System.out.println("The original pal: " + finalResponse.getPersonalAttributeList().toString());
+		for (int i = 0; i < finalResponse.getPersonalAttributeLists().size(); i++)
+		{
+			System.out.println("Pal "+ Integer.toString(i) + ": " + finalResponse.getPersonalAttributeLists().get(i).toString());
+		}
+		System.out.println("The total pal: " + finalResponse.getTotalPersonalAttributeList().toString());
+		
+		FileOutputStream output = null;
+		
+		try {
+			output = new FileOutputStream(new File(System.getProperty("user.dir") + "/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthAttrQMultiAssertResponse.xml"));
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		try {
+			output.write(authResponse);
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		assertNotNull(finalResponse);
+    }
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java
new file mode 100644
index 000000000..fe6fcd4f6
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/StorkResponseTest.java
@@ -0,0 +1,935 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.stork.peps.test.simple;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opensaml.xml.parse.BasicParserPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.stork.peps.auth.commons.IPersonalAttributeList;
+import eu.stork.peps.auth.commons.PEPSUtil;
+import eu.stork.peps.auth.commons.PersonalAttribute;
+import eu.stork.peps.auth.commons.PersonalAttributeList;
+import eu.stork.peps.auth.commons.STORKAttrQueryRequest;
+import eu.stork.peps.auth.commons.STORKAttrQueryResponse;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+import eu.stork.peps.auth.commons.STORKAuthnResponse;
+import eu.stork.peps.auth.commons.STORKStatusCode;
+import eu.stork.peps.auth.commons.STORKSubStatusCode;
+import eu.stork.peps.auth.engine.STORKSAMLEngine;
+import eu.stork.peps.exceptions.STORKSAMLEngineException;
+
+/**
+ * The Class AuthRequestTest.
+ */
+public class StorkResponseTest {
+    
+    /** The engine. */
+    private static STORKSAMLEngine engine = STORKSAMLEngine.getInstance("CONF1");
+
+    /**
+     * Gets the engine.
+     * 
+     * @return the engine
+     */
+    public static STORKSAMLEngine getEngine() {
+        return engine;
+    }
+
+    /**
+     * Sets the engine.
+     * 
+     * @param newEngine the new engine
+     */
+    public static void setEngine(final STORKSAMLEngine newEngine) {
+        StorkResponseTest.engine = newEngine;
+    }
+
+    /** The destination. */
+    private static String destination;
+
+    /** The service provider name. */
+    private static String spName;
+
+    /** The service provider sector. */
+    private static String spSector;
+
+    /** The service provider institution. */
+    private static String spInstitution;
+
+    /** The service provider application. */
+    private static String spApplication;
+
+    /** The service provider country. */
+    private static String spCountry;
+    
+    /** The service provider id. */
+    private static String spId;
+
+    /** The quality authentication assurance level. */
+    private static final int QAAL = 3;
+
+    /** The state. */
+    private static String state = "ES";
+    
+    /** The town. */
+    private static String town = "Madrid";
+    
+    /** The municipality code. */
+    private static String municipalityCode = "MA001";
+    
+    /** The postal code. */
+    private static String postalCode = "28038";
+    
+    /** The street name. */
+    private static String streetName = "Marchamalo";
+    
+    /** The street number. */
+    private static String streetNumber = "3";
+    
+    /** The apartament number. */
+    private static String apartamentNumber = "5º E";
+
+    /** The List of Personal Attributes. */
+    private static IPersonalAttributeList pal;
+
+    /** The assertion consumer URL. */
+    private static String assertConsumerUrl;
+
+    /** The authentication request. */
+    private static byte[] authRequest;
+
+    /** The authentication response. */
+    private static byte[] authResponse;
+
+    /** The authentication request. */
+    private static STORKAuthnRequest authenRequest;
+
+    /** The authentication response. */
+    private static STORKAuthnResponse authnResponse;
+
+    /** The Constant LOG. */
+    private static final Logger LOG = LoggerFactory
+	    .getLogger(StorkResponseTest.class.getName());
+
+    /**
+     * Instantiates a new stork response test.
+     */
+    public StorkResponseTest() {
+	super();
+    }
+
+    /** The IP address. */
+    private static String ipAddress;
+
+    /** The is hashing. */
+    private final boolean isHashing = Boolean.TRUE;
+
+    /** The is not hashing. */
+    private final boolean isNotHashing = Boolean.FALSE;
+
+    /** The ERROR text. */
+    private static final String ERROR_TXT = "generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!";
+
+
+    /** Parser manager used to parse XML. */
+    private static BasicParserPool parser;
+
+    static {
+	parser = new BasicParserPool();
+	parser.setNamespaceAware(true);
+
+	pal = new PersonalAttributeList();
+
+	PersonalAttribute isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(false);
+	ArrayList<String> ages = new ArrayList<String>();
+	ages.add("16");
+	ages.add("18");
+	isAgeOver.setValue(ages);
+	pal.add(isAgeOver);
+
+	PersonalAttribute dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	pal.add(dateOfBirth);
+
+	PersonalAttribute eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+	pal.add(eIDNumber);
+
+	final PersonalAttribute givenName = new PersonalAttribute();
+	givenName.setName("givenName");
+	givenName.setIsRequired(true);
+	pal.add(givenName);
+
+	PersonalAttribute canRessAddress = new PersonalAttribute();
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	pal.add(canRessAddress);
+	
+	PersonalAttribute newAttribute = new PersonalAttribute();
+	newAttribute.setName("newAttribute2");
+	newAttribute.setIsRequired(true);
+	pal.add(newAttribute);
+
+	destination = "http://C-PEPS.gov.xx/PEPS/ColleagueRequest";
+	assertConsumerUrl = "http://S-PEPS.gov.xx/PEPS/ColleagueResponse";
+	spName = "University Oxford";
+	
+	spName = "University of Oxford";
+	spSector = "EDU001";
+	spInstitution = "OXF001";
+	spApplication = "APP001";
+	spCountry = "EN";
+	
+	spId = "EDU001-APP001-APP001";	
+
+	final STORKAuthnRequest request = new STORKAuthnRequest();
+	request.setDestination(destination);
+	request.setProviderName(spName);
+	request.setQaa(QAAL);
+	request.setPersonalAttributeList(pal);
+	request.setAssertionConsumerServiceURL(assertConsumerUrl);
+
+	// news parameters
+	request.setSpSector(spSector);
+	request.setSpInstitution(spInstitution);
+	request.setSpApplication(spApplication);
+	request.setSpCountry(spCountry);
+	request.setSPID(spId);
+	request.setCitizenCountryCode("ES");
+
+	try {
+	    authRequest = getEngine().generateSTORKAuthnRequest(request)
+		    .getTokenSaml();
+	    	    
+	    authenRequest = getEngine().validateSTORKAuthnRequest(authRequest);
+	    
+	} catch (STORKSAMLEngineException e) {
+	    fail("Error create STORKAuthnRequest");
+	}
+
+	ipAddress = "111.222.333.444";
+
+	pal = new PersonalAttributeList();
+
+	isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(true);
+	ages = new ArrayList<String>();
+
+	ages.add("16");
+	ages.add("18");
+
+	isAgeOver.setValue(ages);
+	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(isAgeOver);
+
+	dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	final ArrayList<String> date = new ArrayList<String>();
+	date.add("16/12/2008");
+	dateOfBirth.setValue(date);
+	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(dateOfBirth);
+
+	eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+	final ArrayList<String> idNumber = new ArrayList<String>();
+	idNumber.add("123456789PÑ");
+	eIDNumber.setValue(idNumber);
+	eIDNumber.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	pal.add(eIDNumber);
+
+	canRessAddress = new PersonalAttribute();
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> address = new HashMap<String, String>();
+
+	address.put("state", state);
+	address.put("municipalityCode", municipalityCode);
+	address.put("town", town);
+	address.put("postalCode", postalCode);
+	address.put("streetName", streetName);
+	address.put("streetNumber", streetNumber);
+	address.put("apartamentNumber", apartamentNumber);
+
+	canRessAddress.setComplexValue(address);
+	pal.add(canRessAddress);
+    
+	newAttribute = new PersonalAttribute();
+	newAttribute.setName("newAttribute2");
+	newAttribute.setIsRequired(true);
+	newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> values = new HashMap<String, String>();
+	
+	values.put("value1", "value1");
+	values.put("value2", "value2");
+	values.put("value3", "value3");
+	values.put("value4", "value4");
+	
+	newAttribute.setComplexValue(values);
+	pal.add(newAttribute);
+	
+    }
+
+    /**
+     * Test generate authentication request without errors.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAuthnResponse() throws STORKSAMLEngineException {
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(pal);
+
+	final STORKAuthnResponse storkResponse = getEngine()
+		.generateSTORKAuthnResponse(authenRequest, response, ipAddress,
+			isNotHashing);
+
+	authResponse = storkResponse.getTokenSaml();
+	
+	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(authResponse));
+	
+	
+    }
+
+    /**
+     * Test validation id parameter mandatory.
+     */
+    @Test
+    public final void testResponseMandatoryId() {
+	final String identifier = authenRequest.getSamlId();
+	authenRequest.setSamlId(null);
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(pal);
+
+	try {
+	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
+		    ipAddress, isHashing);
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    authenRequest.setSamlId(identifier);
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication response in response to err1.
+     */
+    @Test
+    public final void testResponseMandatoryIssuer() {
+
+	final String issuer = authenRequest.getIssuer();
+	authenRequest.setIssuer(null);
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(pal);
+
+	try {
+	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
+		    ipAddress, isHashing);
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    authenRequest.setIssuer(issuer);
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication response assertion consumer null.
+     */
+    @Test
+    public final void testResponseMandatoryAssertionConsumerServiceURL() {
+	final String asserConsumerUrl = authenRequest
+		.getAssertionConsumerServiceURL();
+	authenRequest.setAssertionConsumerServiceURL(null);
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(pal);
+	try {
+	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
+		    ipAddress, isHashing);
+	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    authenRequest.setAssertionConsumerServiceURL(asserConsumerUrl);
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication response IP address null.
+     */
+    @Test
+    public final void testResponseValidationIP() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(pal);
+
+	try {
+	    getEngine().generateSTORKAuthnResponse(authenRequest, response, null,
+		    isHashing);
+	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication response with personal attribute list null.
+     */
+    @Test
+    public final void testResponseMandatoryPersonalAttributeList() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(null);
+	
+	
+	try {
+	    getEngine().generateSTORKAuthnResponse(authenRequest, response,
+		    ipAddress, isHashing);
+	    fail("generateAuthnResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    /**
+     * Test validate authentication response token null.
+     */
+    @Test
+    public final void testResponseInvalidParametersToken() {
+	try {
+	    getEngine().validateSTORKAuthnResponse(null, ipAddress);
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate authentication response IP null.
+     */
+    @Test
+    public final void testResponseInvalidParametersIP() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setPersonalAttributeList(pal);
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAuthnResponse(authResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate authentication response parameter name wrong.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttr() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("AttrWrong");
+	wrongList.add(worngAttr);
+	
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAuthnResponse(authResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate authentication response set null value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrSimpleValue() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("isAgeOver");
+	worngAttr.setValue(null);
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAuthnResponse(authResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate authentication response set null value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrNoValue() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("isAgeOver");
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAuthnResponse(authResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate authentication response set null value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrNoName() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();	
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAuthnResponse(authResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    /**
+     * Test validate authentication response set null complex value into attribute.
+     */
+    @Test
+    public final void testResponseInvalidParametersAttrComplexValue() {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	final IPersonalAttributeList wrongList = new PersonalAttributeList();
+
+	final PersonalAttribute worngAttr = new PersonalAttribute();
+	worngAttr.setName("isAgeOver");
+	worngAttr.setComplexValue(null);
+	wrongList.add(worngAttr);
+	
+	response.setPersonalAttributeList(wrongList);
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponse(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    // In Conf1 ipValidate is false
+	    getEngine().validateSTORKAuthnResponse(authResponse, null);
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+	
+    
+    
+
+    /**
+     * Test validate authentication response IP distinct and disabled validation
+     * IP.
+     */
+    @Test
+    public final void testResponseInvalidParametersIPDistinct() {
+	try {
+	    // ipAddress origin "111.222.333.444"
+	    // ipAddrValidation = false
+	    // Subject Confirmation Bearer.
+
+	    getEngine().validateSTORKAuthnResponse(authResponse, "127.0.0.1");
+	    fail("validateAuthenticationResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");	    
+	}
+    }
+
+    /**
+     * Test response invalid parameters invalid token.
+     */
+    @Test
+    public final void testResponseInvalidParametersTokenMsg() {
+	try {
+	    // ipAddress origin "111.222.333.444"
+	    // Subject Confirmation Bearer.
+	    getEngine().validateSTORKAuthnResponse("errorMessage".getBytes(),
+		    ipAddress);
+	    fail("validateAuthenticationResponse(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test validate authentication response is fail.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthenticationResponseIsFail()
+	    throws STORKSAMLEngineException {
+    	if (authResponse == null)
+    		testGenerateAuthnResponse();
+    	
+	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
+		ipAddress);
+
+	assertFalse("Generate incorrect response: ", authnResponse.isFail());
+    }
+
+    /**
+     * Test validate authentication response destination.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthenticationResponseDestination()
+	    throws STORKSAMLEngineException {
+	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
+		ipAddress);
+
+	assertEquals("Destination incorrect: ",
+		authnResponse.getInResponseTo(), authenRequest.getSamlId());
+    }
+
+    /**
+     * Test validate authentication response values.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    public final void testValidateAuthenticationResponseValuesComplex()
+	    throws STORKSAMLEngineException {
+	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
+		ipAddress);
+	
+	assertEquals("Country incorrect:", authnResponse.getCountry(), "EN");
+	
+	final Iterator<PersonalAttribute> iterator = authnResponse
+		.getPersonalAttributeList().iterator();
+
+	while (iterator.hasNext()) {
+	    final PersonalAttribute attribute = iterator.next();
+	    if (attribute.getName().equalsIgnoreCase(
+		    "canonicalResidenceAddress")) {
+		assertEquals("State incorrect: ", state, attribute
+			.getComplexValue().get("state"));
+		assertEquals("Municipality Code incorrect: ", municipalityCode,
+			attribute.getComplexValue().get("municipalityCode"));
+		assertEquals("Town incorrect: ", town, attribute
+			.getComplexValue().get("town"));
+		assertEquals("Postal code incorrect: ", postalCode, attribute
+			.getComplexValue().get("postalCode"));
+		assertEquals("Street name incorrect: ", streetName, attribute
+			.getComplexValue().get("streetName"));
+		assertEquals("Street number incorrect: ", streetNumber,
+			attribute.getComplexValue().get("streetNumber"));
+		assertEquals("Apartament number incorrect: ", apartamentNumber,
+			attribute.getComplexValue().get("apartamentNumber"));
+	    }
+	}
+    }
+
+    /**
+     * Test generate authenticate response fail in response to it's null.
+     * @throws STORKSAMLEngineException 
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test //( expected=STORKSAMLEngineException.class)
+    public final void testGenerateAuthnResponseFailInResponseToNull() throws STORKSAMLEngineException {
+	final String identifier = authenRequest.getSamlId();
+	authenRequest.setSamlId(null);
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("");
+
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    fail(ERROR_TXT);
+	} catch (STORKSAMLEngineException e) {
+	    authenRequest.setSamlId(identifier);
+	    LOG.error("Error");
+	    //throw new STORKSAMLEngineException(e);
+	}
+    }
+
+    /**
+     * Test generate authenticate response fail assertion consumer URL err1.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAuthnResponseFailAssertionConsumerUrlNull()
+	    throws STORKSAMLEngineException {
+
+	final String assertConsumerUrl = authenRequest
+		.getAssertionConsumerServiceURL();
+	authenRequest.setAssertionConsumerServiceURL(null);
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("");
+
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    fail("generateAuthnResponseFail(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    authenRequest.setAssertionConsumerServiceURL(assertConsumerUrl);
+	    LOG.error("Error");
+	}
+    }
+
+    /**
+     * Test generate authentication response fail code error err1.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testGenerateAuthnResponseFailCodeErrorNull()
+	    throws STORKSAMLEngineException {
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setStatusCode(null);
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("");
+
+	try {
+	    authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
+		    response, ipAddress, isNotHashing).getTokenSaml();
+	    fail("generateAuthnResponseFail(...) should've thrown an STORKSAMLEngineException!");
+	} catch (STORKSAMLEngineException e) {
+	    LOG.error("Error");
+	}
+    }
+    
+    
+    
+    
+    /**
+     * Test generate authentication request without errors.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthnResponse() throws STORKSAMLEngineException {
+	
+	IPersonalAttributeList palist = new PersonalAttributeList();
+
+	PersonalAttribute isAgeOver = new PersonalAttribute();
+	isAgeOver.setName("isAgeOver");
+	isAgeOver.setIsRequired(true);
+	ArrayList<String> ages = new ArrayList<String>();
+	ages.add("16");
+	ages.add("18");
+	isAgeOver.setValue(ages);
+	isAgeOver.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	palist.add(isAgeOver);
+
+	PersonalAttribute dateOfBirth = new PersonalAttribute();
+	dateOfBirth.setName("dateOfBirth");
+	dateOfBirth.setIsRequired(false);
+	final ArrayList<String> date = new ArrayList<String>();
+	date.add("16/12/2008");
+	dateOfBirth.setValue(date);
+	dateOfBirth.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	palist.add(dateOfBirth);
+
+	
+	PersonalAttribute eIDNumber = new PersonalAttribute();
+	eIDNumber.setName("eIdentifier");
+	eIDNumber.setIsRequired(true);
+
+	final ArrayList<String> idNumber = new ArrayList<String>();
+	idNumber.add("123456789PÑ");
+	
+	final HashMap<String, String> complex = new HashMap<String, String>();
+	complex.put("one", "two");
+
+	//eIDNumber.setValue(null);
+	//eIDNumber.setValue(idNumber);
+	//eIDNumber.setComplexValue(complex);
+	
+	eIDNumber.setStatus(STORKStatusCode.STATUS_NOT_AVAILABLE.toString());
+	palist.add(eIDNumber);
+
+	PersonalAttribute canRessAddress = new PersonalAttribute();	
+	canRessAddress.setName("canonicalResidenceAddress");
+	canRessAddress.setIsRequired(true);
+	canRessAddress.setStatus(STORKStatusCode.STATUS_AVAILABLE.toString());
+	final HashMap<String, String> address = new HashMap<String, String>();
+
+	address.put("state", state);
+	address.put("municipalityCode", municipalityCode);
+	address.put("town", town);
+	address.put("postalCode", postalCode);
+	address.put("streetName", streetName);
+	address.put("streetNumber", streetNumber);
+	address.put("apartamentNumber", apartamentNumber);
+
+	canRessAddress.setComplexValue(address);
+	palist.add(canRessAddress);
+
+	
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+
+	response.setPersonalAttributeList(palist);
+
+	final STORKAuthnResponse storkResponse = getEngine()
+		.generateSTORKAuthnResponse(authenRequest, response, ipAddress,
+			isNotHashing);
+
+	authResponse = storkResponse.getTokenSaml();
+	LOG.info("Request id: " + authenRequest.getSamlId());
+	
+	LOG.info("RESPONSE: " + SSETestUtils.encodeSAMLToken(authResponse));
+	
+	
+	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
+		ipAddress);
+	
+	LOG.info("RESPONSE ID: " + authnResponse.getSamlId());
+	LOG.info("RESPONSE IN_RESPONSE_TO: " + authnResponse.getInResponseTo());
+	LOG.info("RESPONSE COUNTRY: " + authnResponse.getCountry());
+	
+    }
+    
+    
+   
+
+	
+    /**
+     * Test validate authentication response fail is fail.
+     * 
+     * @throws STORKSAMLEngineException the STORKSAML engine exception
+     */
+    @Test
+    public final void testValidateAuthenticationResponseFailIsFail()
+	    throws STORKSAMLEngineException {
+
+	final STORKAuthnResponse response = new STORKAuthnResponse();
+	response.setStatusCode(STORKStatusCode.REQUESTER_URI.toString());
+	response.setSubStatusCode(STORKSubStatusCode.AUTHN_FAILED_URI.toString());
+	response.setMessage("message");
+
+	authResponse = getEngine().generateSTORKAuthnResponseFail(authenRequest,
+		response, ipAddress, isNotHashing).getTokenSaml();
+	
+	LOG.error("ERROR_FAIL: " + PEPSUtil.encodeSAMLToken(authResponse));
+
+	authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
+		ipAddress);
+
+	LOG.info("COUNTRY: " + authnResponse.getCountry());
+	assertTrue("Generate incorrect response: ", authnResponse.isFail());
+    }  
+    
+	/**
+	 * Test generate/validate response with signedDoc
+	 * 
+	 * @throws STORKSAMLEngineException
+	 *             the STORKSAML engine exception
+	 */
+	@Test
+	public final void testGenerateAuthenResponseWithSignedDoc()
+			throws STORKSAMLEngineException {
+
+		String signedDocResponse = "<dss:SignResponse xmlns:dss=\"urn:oasis:names:tc:dss:1.0:core:schema\" RequestID=\"123456\"> <dss:Result> <dss:ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</dss:ResultMajor> </dss:Result> <dss:SignatureObject> <dss:Base64Signature Type=\"urn:ietf:rfc:3275\">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiLz48ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExIi8+PGRzOlJlZmVyZW5jZSBJZD0iUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyIgVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI09iamVjdCIgVVJJPSIjT2JqZWN0LTk4NzMzY2RlLThiY2MtNDhhMC05Yjc3LTBlOTk5N2JkZDA1OCI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNiYXNlNjQiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPkNrMVZxTmQ0NVFJdnEzQVpkOFhZUUx2RWh0QT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjxkczpSZWZlcmVuY2UgVHlwZT0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMyNTaWduZWRQcm9wZXJ0aWVzIiBVUkk9IiNTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5BNVk5MW40cXBMZ3l0VFc3ZnhqWENVZVJ2NTQ9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48ZHM6UmVmZXJlbmNlIFVSST0iI1NpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItS2V5SW5mbyI+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPlZQWDRuS0Z5UzZyRitGNmNSUjBQck5aZHc2Zz08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWUgSWQ9IlNpZ25hdHVyZS04ZWFiZDBhNS02NjBkLTRhZmQtOTkwNS0wYWJjNzU1M2QxOTItU2lnbmF0dXJlVmFsdWUiPkxiS04vL0M3WGt5eFR0WVRpQ1VScjhuWnp4QW1zdGNNZDBDZ0VBQ3JLMWR5Z1JIcUdjSzR4dHMrV0NVOFB5RXFXclJJVFl6SXV3LzcNClY0Wno5VFQ2MHA0S1RNZXd1UUw2NHNrRVN4MllnMkVkaWtTTyt0S3hXa2hyYVVzbVZiR2JQbW1jbUR2OTd0SER3ODg3NDdlRnE1RjUNCnYrYVZTeUF6MDNpVUttdVNlSDg9PC9kczpTaWduYXR1cmVWYWx1ZT48ZHM6S2V5SW5mbyBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1LZXlJbmZvIj48ZHM6S2V5VmFsdWU+PGRzOlJTQUtleVZhbHVlPjxkczpNb2R1bHVzPnd1Y21qOXRJV3J2d2JTVFVEZndLbCtKdERNTUVSMGNMZDZEa0JTcjc5MHQrckdOakVTcVlqUndFSWVCbktvUUhQeDVIb1JlRjg4L3QNCnFZOStDaEVYcExITHM5cDVhWDdTREp1YnBRTWZwMXRERlgzNHl3Z3hTUXZjZWVKUVdCWGppZXVJbWZDMjFzNGJPY2dKYlYxaGJpZ1MNCnpPS1RRS3IxVHpkR1IrdVJ5MDA9PC9kczpNb2R1bHVzPjxkczpFeHBvbmVudD5BUUFCPC9kczpFeHBvbmVudD48L2RzOlJTQUtleVZhbHVlPjwvZHM6S2V5VmFsdWU+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJSW1UQ0NCNEdnQXdJQkFnSURBWFVVTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUlCT3pFTE1Ba0dBMVVFQmhNQ1JWTXhPekE1QmdOVg0KQkFvVE1rRm5aVzVqYVdFZ1EyRjBZV3hoYm1FZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUNoT1NVWWdVUzB3T0RBeE1UYzJMVWtwTVRRdw0KTWdZRFZRUUhFeXRRWVhOellYUm5aU0JrWlNCc1lTQkRiMjVqWlhCamFXOGdNVEVnTURnd01EZ2dRbUZ5WTJWc2IyNWhNUzR3TEFZRA0KVlFRTEV5VlRaWEoyWldseklGQjFZbXhwWTNNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVWRFZpMHlNVFV3TXdZRFZRUUxFeXhXWldkbA0KZFNCb2RIUndjem92TDNkM2R5NWpZWFJqWlhKMExtNWxkQzkyWlhKRFNVTXRNaUFvWXlrd016RTFNRE1HQTFVRUN4TXNSVzUwYVhSaA0KZENCd2RXSnNhV05oSUdSbElHTmxjblJwWm1sallXTnBieUJrWlNCamFYVjBZV1JoYm5NeEd6QVpCZ05WQkFNVEVsQlNSVkJTVDBSVg0KUTBOSlR5QkpSRU5oZERBZUZ3MHhNREF5TVRFeE9ESXlNRFJhRncweE5EQXlNVEF4T0RJeU1EUmFNSUd3TVFzd0NRWURWUVFHRXdKRg0KVXpFMU1ETUdBMVVFQ3hNc1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5U1VSRFlYUWdLR01wTURNeA0KRmpBVUJnTlZCQVFURFVKRlVreEJUa2RCSUZOUFZFOHhGekFWQmdOVkJDb1REazFCVWtsQklFVk9SMUpCUTBsQk1SSXdFQVlEVlFRRg0KRXdreE1EQXdNRGswTkZNeEpUQWpCZ05WQkFNVEhFMUJVa2xCSUVWT1IxSkJRMGxCSUVKRlVreEJUa2RCSUZOUFZFOHdnWjh3RFFZSg0KS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTG5Kby9iU0ZxNzhHMGsxQTM4Q3BmaWJRekRCRWRIQzNlZzVBVXErL2RMZnF4ag0KWXhFcW1JMGNCQ0hnWnlxRUJ6OGVSNkVYaGZQUDdhbVBmZ29SRjZTeHk3UGFlV2wrMGd5Ym02VURINmRiUXhWOStNc0lNVWtMM0huaQ0KVUZnVjQ0bnJpSm53dHRiT0d6bklDVzFkWVc0b0VzemlrMENxOVU4M1JrZnJrY3ROQWdNQkFBR2pnZ1N3TUlJRXJEQU1CZ05WSFJNQg0KQWY4RUFqQUFNQTRHQTFVZER3RUIvd1FFQXdJRm9EQ0J6QVlEVlIwUkJJSEVNSUhCZ1E5aWMyOTBiMEJuYldGcGJDNWpiMjJrZ1lVdw0KZ1lJeEN6QUpCZ05WQkFZVEFrVlRNU3N3S1FZRFZRUUtGQ0pCWjhPb2JtTnBZU0JEWVhSaGJHRnVZU0JrWlNCRFpYSjBhV1pwWTJGag0KYWNPek1RNHdEQVlEVlFRTEV3VkpSRU5CVkRFUE1BMEdBMVVFQlJNR01ERTNOVEUwTVNVd0l3WURWUVFERXh4TlFWSkpRU0JGVGtkUw0KUVVOSlFTQkNSVkpNUVU1SFFTQlRUMVJQb0JBR0Npc0dBUVFCOVhnQkFRR2dBZ3dBb0JRR0RsWUVBQUVEQmdFRUFmVjRBUUVDb0FJTQ0KQURBZkJnTlZIUklFR0RBV2dSUmxZMTlwWkdOaGRFQmpZWFJqWlhKMExtNWxkREFkQmdOVkhRNEVGZ1FVQUZYanVOc2tCMk1seXZVQg0KaDdwOFRKMHVKMHd3Z2dGSUJnTlZIU01FZ2dFL01JSUJPNEFVUkt2Y2tVaE4xNGg0Q24vZ2RPRG42NzIzS1Z5aGdnRVBwSUlCQ3pDQw0KQVFjeEN6QUpCZ05WQkFZVEFrVlRNVHN3T1FZRFZRUUtFekpCWjJWdVkybGhJRU5oZEdGc1lXNWhJR1JsSUVObGNuUnBabWxqWVdOcA0KYnlBb1RrbEdJRkV0TURnd01URTNOaTFKS1RFb01DWUdBMVVFQ3hNZlUyVnlkbVZwY3lCUWRXSnNhV056SUdSbElFTmxjblJwWm1sag0KWVdOcGJ6RThNRG9HQTFVRUN4TXpWbVZuWlhVZ2FIUjBjSE02THk5M2QzY3VZMkYwWTJWeWRDNXVaWFF2ZG1WeWNISmxjSEp2WkhWag0KWTJsdklDaGpLVEF6TVRVd013WURWUVFMRXl4S1pYSmhjbkYxYVdFZ1JXNTBhWFJoZEhNZ1pHVWdRMlZ5ZEdsbWFXTmhZMmx2SUVOaA0KZEdGc1lXNWxjekVjTUJvR0ExVUVBeE1UVUZKRlVGSlBSRlZEUTBsUElFVkRMVUZEUTRJUWR3S1R0TTFFRVU5RkVQWFVZSGdnaERBZA0KQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdRd0VRWUpZSVpJQVliNFFnRUJCQVFEQWdXZ01EUUdDQ3NHQVFVRg0KQndFQkJDZ3dKakFrQmdnckJnRUZCUWN3QVlZWWFIUjBjSE02THk5dlkzTndMbU5oZEdObGNuUXVibVYwTUJnR0NDc0dBUVVGQndFRA0KQkF3d0NqQUlCZ1lFQUk1R0FRRXdnWVlHQTFVZEh3Ui9NSDB3UEtBNm9EaUdObWgwZEhBNkx5OWxjSE5qWkM1allYUmpaWEowTG01bA0KZEM5amNtd3ZjSEpsY0hKdlpIVmpZMmx2WDJWakxXbGtZMkYwTG1OeWJEQTlvRHVnT1lZM2FIUjBjRG92TDJWd2MyTmtNaTVqWVhSag0KWlhKMExtNWxkQzlqY213dmNISmxjSEp2WkhWalkybHZYMlZqTFdsa1kyRjBMbU55YkRDQjlnWURWUjBnQklIdU1JSHJNSUhvQmd3cg0KQmdFRUFmVjRBUU1CVmdFd2dkY3dMQVlJS3dZQkJRVUhBZ0VXSUdoMGRIQnpPaTh2ZDNkM0xtTmhkR05sY25RdWJtVjBMM1psY2tsRQ0KUTJGME1JR21CZ2dyQmdFRkJRY0NBakNCbVJxQmxrRnhkV1Z6ZENEdnY3MXpJSFZ1SUdObGNuUnBabWxqWVhRZ2NHVnljMjl1WVd3Zw0KU1VSRFFWUXNJSEpsWTI5dVpXZDFkQ0JrSjJsa1pXNTBhV1pwWTJGajc3KzlMQ0J6YVdkdVlYUjFjbUVnYVNCNGFXWnlZWFFnWkdVZw0KWTJ4aGMzTmxJRElnYVc1a2FYWnBaSFZoYkM0Z1ZtVm5aWFVnYUhSMGNITTZMeTkzZDNjdVkyRjBZMlZ5ZEM1dVpYUXZkbVZ5UkVOaA0KZERBdEJnTlZIUWtFSmpBa01CQUdDQ3NHQVFVRkJ3a0VNUVFUQWtWVE1CQUdDQ3NHQVFVRkJ3a0ZNUVFUQWtWVE1BMEdDU3FHU0liMw0KRFFFQkJRVUFBNElCQVFDcTc3ODBSR1FNTEIxZ2tkTk1mTFhuZ3FNb1JIR0taYnZ6a3JxSUFtVDhXQWQxRThyQXBoUjkveExKVXRwNQ0KbGJnMmZScjVibDJqOE9WREJLMlltRzQxaDhBRG40U1RJL0FwZU5JTlNmalpzNk5Sc25XekZ5ZlhYbVBDSFlGQi9YV3p5aW1DRXhndg0KdnR1SCszUUF3Y3dobjUwUExFdWh3NUM1dmxYN0x5NUs2ckxMTUZOVVVNYldWeTFoWmVsSy9DQlRjQWpJTzM4TlkrdllSQU1LU2Y0TQ0KL2daUXo0cUJlRlZKYTUyUjdOY0FxQ2ZyZkxmYVhwYkRTZzk4eG9CZU5zMmluR3p4OFVTZ0VyTFpqS0pzZG4vS2pURDlnUy9zVGRRNg0KUTdpZHFsZDJMRlZsTzIvYjk0Wk5aQmNTLzc4RU9EWGdkV2ZreVBDN1J3OHJlOW5JMy9qVDwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjxkczpPYmplY3QgRW5jb2Rpbmc9ImJhc2U2NCIgSWQ9Ik9iamVjdC05ODczM2NkZS04YmNjLTQ4YTAtOWI3Ny0wZTk5OTdiZGQwNTgiIE1pbWVUeXBlPSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iPlNHVnNiRzhnVjI5eWJHUT08L2RzOk9iamVjdD48ZHM6T2JqZWN0Pjx4YWRlczpRdWFsaWZ5aW5nUHJvcGVydGllcyB4bWxuczp4YWRlcz0iaHR0cDovL3VyaS5ldHNpLm9yZy8wMTkwMy92MS4zLjIjIiBJZD0iU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1RdWFsaWZ5aW5nUHJvcGVydGllcyIgVGFyZ2V0PSIjU2lnbmF0dXJlLThlYWJkMGE1LTY2MGQtNGFmZC05OTA1LTBhYmM3NTUzZDE5Mi1TaWduYXR1cmUiPjx4YWRlczpTaWduZWRQcm9wZXJ0aWVzIElkPSJTaWduYXR1cmUtOGVhYmQwYTUtNjYwZC00YWZkLTk5MDUtMGFiYzc1NTNkMTkyLVNpZ25lZFByb3BlcnRpZXMiPjx4YWRlczpTaWduZWRTaWduYXR1cmVQcm9wZXJ0aWVzPjx4YWRlczpTaWduaW5nVGltZT4yMDExLTAzLTIxVDExOjQ0OjQyKzAxOjAwPC94YWRlczpTaWduaW5nVGltZT48eGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjx4YWRlczpDZXJ0Pjx4YWRlczpDZXJ0RGlnZXN0PjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT4zbTZ3OTlUb3lTZDlKcEJsMWdCazhEei9iYlU9PC9kczpEaWdlc3RWYWx1ZT48L3hhZGVzOkNlcnREaWdlc3Q+PHhhZGVzOklzc3VlclNlcmlhbD48ZHM6WDUwOUlzc3Vlck5hbWU+Q049UFJFUFJPRFVDQ0lPIElEQ2F0LCBPVT1FbnRpdGF0IHB1YmxpY2EgZGUgY2VydGlmaWNhY2lvIGRlIGNpdXRhZGFucywgT1U9VmVnZXUgaHR0cHM6Ly93d3cuY2F0Y2VydC5uZXQvdmVyQ0lDLTIgKGMpMDMsIE9VPVNlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8gRUNWLTIsIEw9UGFzc2F0Z2UgZGUgbGEgQ29uY2VwY2lvIDExIDA4MDA4IEJhcmNlbG9uYSwgTz1BZ2VuY2lhIENhdGFsYW5hIGRlIENlcnRpZmljYWNpbyAoTklGIFEtMDgwMTE3Ni1JKSwgQz1FUzwvZHM6WDUwOUlzc3Vlck5hbWU+PGRzOlg1MDlTZXJpYWxOdW1iZXI+OTU1MDg8L2RzOlg1MDlTZXJpYWxOdW1iZXI+PC94YWRlczpJc3N1ZXJTZXJpYWw+PC94YWRlczpDZXJ0PjwveGFkZXM6U2lnbmluZ0NlcnRpZmljYXRlPjwveGFkZXM6U2lnbmVkU2lnbmF0dXJlUHJvcGVydGllcz48eGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PHhhZGVzOkRhdGFPYmplY3RGb3JtYXQgT2JqZWN0UmVmZXJlbmNlPSIjUmVmZXJlbmNlLWJhYmE0ZDFhLWExN2UtNDJjNi05N2QyLWJlZWUxMzUwOTUwMyI+PHhhZGVzOk1pbWVUeXBlPmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTwveGFkZXM6TWltZVR5cGU+PHhhZGVzOkVuY29kaW5nPmJhc2U2NDwveGFkZXM6RW5jb2Rpbmc+PC94YWRlczpEYXRhT2JqZWN0Rm9ybWF0PjwveGFkZXM6U2lnbmVkRGF0YU9iamVjdFByb3BlcnRpZXM+PC94YWRlczpTaWduZWRQcm9wZXJ0aWVzPjwveGFkZXM6UXVhbGlmeWluZ1Byb3BlcnRpZXM+PC9kczpPYmplY3Q+PC9kczpTaWduYXR1cmU+</dss:Base64Signature> </dss:SignatureObject> </dss:SignResponse>";
+
+		IPersonalAttributeList palist = new PersonalAttributeList();
+
+		PersonalAttribute signedDoc = new PersonalAttribute();
+		signedDoc.setName("signedDoc");
+		signedDoc.setIsRequired(false);
+		ArrayList<String> signed = new ArrayList<String>();
+		signed.add(signedDocResponse);
+		signedDoc.setValue(signed);
+		palist.add(signedDoc);
+
+		PersonalAttribute isAgeOver = new PersonalAttribute();
+		isAgeOver.setName("isAgeOver");
+		isAgeOver.setIsRequired(false);
+		ArrayList<String> ages = new ArrayList<String>();
+		ages.add("16");
+		ages.add("18");
+		isAgeOver.setValue(ages);
+		palist.add(isAgeOver);
+
+		authenRequest.setPersonalAttributeList(palist);
+
+		final STORKAuthnResponse response = new STORKAuthnResponse();
+
+		response.setPersonalAttributeList(palist);
+
+		final STORKAuthnResponse storkResponse = getEngine()
+				.generateSTORKAuthnResponse(authenRequest, response, ipAddress,
+						isNotHashing);
+
+		authResponse = storkResponse.getTokenSaml();
+		authnResponse = getEngine().validateSTORKAuthnResponse(authResponse,
+				ipAddress);
+
+		assertTrue("SignedDoc response should be the same: ", authnResponse
+				.getPersonalAttributeList().get("signedDoc").getValue().get(0)
+				.equals(signedDocResponse));
+
+	}	
+}
diff --git a/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/package-info.java b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/package-info.java
new file mode 100644
index 000000000..1c34e2ad5
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/java/eu/stork/peps/test/simple/package-info.java
@@ -0,0 +1,20 @@
+/* 
+ * Licensed under the EUPL, Version 1.1 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 at:
+ * 
+ * http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1
+ * 
+ * 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.
+ */
+
+/**
+ * Provides the classes necessary to create a SAML message.
+ * @since 1.0
+ */
+package eu.stork.peps.test.simple;
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/SamlEngine.xml b/id/server/stork2-saml-engine/src/test/resources/SamlEngine.xml
new file mode 100644
index 000000000..171e05f12
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/SamlEngine.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<instances>
+
+	<!-- Configuration name -->
+	<instance name="CONF0">
+		<!-- Configurations parameters StorkSamlEngine -->
+		<configuration name="SamlEngineConf">
+			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf0.xml" />
+		</configuration>
+
+		<!-- Settings module signature -->
+		<configuration name="SignatureConf">
+			<!-- Specific signature module -->
+			<parameter name="class"
+				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
+			<!-- Settings specific module -->
+			<parameter name="fileConfiguration" value="SignModule_Conf0.xml" />
+		</configuration>
+	</instance>
+
+	<!-- ******************** CONF1 ******************** -->
+	<!-- Configuration name -->
+	<instance name="CONF1">
+		<!-- Configurations parameters StorkSamlEngine -->
+		<configuration name="SamlEngineConf">
+			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf1.xml" />
+		</configuration>
+
+		<!-- Settings module signature -->
+		<configuration name="SignatureConf">
+			<!-- Specific signature module -->
+			<parameter name="class"
+				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
+			<!-- Settings specific module -->
+			<parameter name="fileConfiguration" value="SignModule_Conf1.xml" />
+		</configuration>
+	</instance>
+
+	<!-- ******************** CONF2 ******************** -->
+
+	<instance name="CONF2">
+		<configuration name="SamlEngineConf">
+			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf2.xml" />
+		</configuration>
+
+		<configuration name="SignatureConf">
+			<parameter name="class"
+				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
+			<parameter name="fileConfiguration" value="SignModule_Conf2.xml" />
+		</configuration>
+	</instance>
+
+	<!-- ******************** CONF3 ******************** -->
+
+	<instance name="CONF3">
+		<configuration name="SamlEngineConf">
+			<parameter name="fileConfiguration" value="StorkSamlEngine_Conf3.xml" />
+		</configuration>
+
+		<configuration name="SignatureConf">
+			<parameter name="class"
+				value="eu.stork.peps.auth.engine.core.impl.SignSW" />
+			<parameter name="fileConfiguration" value="SignModule_Conf3.xml" />
+		</configuration>
+	</instance>
+
+</instances>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf0.xml b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf0.xml
new file mode 100644
index 000000000..a9f2038b8
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf0.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<!-- properties>
+	<comment>SWModule sign with JKS.</comment>
+	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry0.jks</entry>
+	<entry key="keyStorePassword">local-demo</entry>
+	<entry key="keyPassword">local-demo</entry>
+	<entry key="issuer">CN=saml-demo-cert,OU=STORK2,O=Advania,L=Reykjavik,ST=Reykjavik,C=IS</entry>
+	<entry key="serialNumber">524D4C6C</entry>
+	<entry key="keystoreType">JKS</entry>
+</properties-->
+<properties>
+	<comment>SWModule sign with JKS.</comment>
+	<entry key="keystorePath">C:\opt\keystores\storkDemoKeysTest.jks</entry>
+	<entry key="keyStorePassword">local-demo</entry>
+	<entry key="keyPassword">local-demo</entry>
+	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
+	<entry key="serialNumber">4BA89DB2</entry>
+	<entry key="keystoreType">JKS</entry>
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf1.xml b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf1.xml
new file mode 100644
index 000000000..e556a7331
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf1.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>SWModule sign with JKS.</comment>
+	<entry key="keystorePath">C:\opt\keystores\storkDemoKeysTest.jks</entry>
+	<entry key="keyStorePassword">local-demo</entry>
+	<entry key="keyPassword">local-demo</entry>
+	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
+	<entry key="serialNumber">4BA89DB2</entry>
+	<entry key="keystoreType">JKS</entry>
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf2.xml b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf2.xml
new file mode 100644
index 000000000..3da1e33df
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf2.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>SWModule sign with JKS.</comment>
+	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry2.jks</entry>
+	<entry key="keyStorePassword">local-demo</entry>
+	<entry key="keyPassword">local-demo</entry>
+	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
+	<entry key="serialNumber">4BA89DB2</entry>
+	<entry key="keystoreType">JKS</entry>
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf3.xml b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf3.xml
new file mode 100644
index 000000000..4c14a1711
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/SignModule_Conf3.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>SWModule sign with JKS.</comment>
+	<entry key="keystorePath">C:\opt\keystores\keyStoreCountry3.jks</entry>
+	<entry key="keyStorePassword">local-demo</entry>
+	<entry key="keyPassword">local-demo</entry>
+	<entry key="issuer">CN=local-demo, O=Indra, L=Madrid, ST=Spain, C=ES</entry>
+	<entry key="serialNumber">4BA89DB2</entry>
+	<entry key="keystoreType">JKS</entry>
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/SignModule_P11.xml b/id/server/stork2-saml-engine/src/test/resources/SignModule_P11.xml
new file mode 100644
index 000000000..c683d97c3
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/SignModule_P11.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>HWModule sign with interface PKCS11.</comment>
+	<entry key="configurationFile">p11Config.cfg</entry>
+	<entry key="keyPassword">*******</entry>
+	<entry key="issuer">CN=XXXXXXXXX</entry>
+	<entry key="serialNumber">xxxxxxxxxxxxxx</entry>
+	<entry key="keystoreType">PKCS11</entry>
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf0.xml b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf0.xml
new file mode 100644
index 000000000..8c3a94601
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf0.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>SAML constants for AuthnRequests and Responses.</comment>
+
+	<!-- Types of consent obtained from the user for this authentication and 
+		data transfer. Allow values: 'unspecified'. -->
+	<entry key="consentAuthnRequest">unspecified</entry>
+
+	<!-- Allow values: 'obtained', 'prior', 'current-implicit', 'current-explicit', 
+		'unspecified'. -->
+	<entry key="consentAuthnResponse">obtained</entry>
+
+	<!--URI representing the classification of the identifier Allow values: 
+		'entity'. -->
+	<entry key="formatEntity">entity</entry>
+
+	<!--Only HTTP-POST binding is only supported for inter PEPS -->
+	<!--The SOAP binding is only supported for direct communication between 
+		SP-MW and VIdP -->
+	<entry key="protocolBinding">HTTP-POST</entry>
+
+
+
+
+	<!--URI representing the classification of the identifier Allow values: 
+		'entity'. <entry key="eIDSectorShare">true</entry> <entry key="eIDCrossSectorShare">true</entry> 
+		<entry key="eIDCrossBorderShare">true</entry> -->
+
+
+
+	<!-- A friendly name for the attribute that can be displayed to a user -->
+	<entry key="friendlyName">false</entry>
+
+	<!-- A friendly name for the attribute that can be displayed to a user -->
+	<entry key="isRequired">true</entry>
+
+	<!--PEPS in the Service Provider's country -->
+	<entry key="requester">http://S-PEPS.gov.xx</entry>
+
+	<!--PEPS in the citizen's origin country -->
+	<entry key="responder">http://C-PEPS.gov.xx</entry>
+
+	<!--Subject cannot be confirmed on or after this seconds time (positive 
+		number) -->
+	<entry key="timeNotOnOrAfter">300</entry>
+
+	<!--Validation IP of the response -->
+	<entry key="ipAddrValidation">false</entry>
+
+
+	<!--Subject Attribute Definitions -->
+	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
+	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
+	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
+	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
+	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
+	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
+	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
+	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
+	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
+	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
+	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
+	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
+	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
+	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
+	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
+	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
+
+	<entry key="textResidenceAddress">http://www.stork.gov.eu/1.0/textResidenceAddress</entry>
+	<entry key="canonicalResidenceAddress">http://www.stork.gov.eu/1.0/canonicalResidenceAddress</entry>
+
+	<entry key="title">http://www.stork.gov.eu/1.0/title</entry>
+	<entry key="residencePermit">http://www.stork.gov.eu/1.0/residencePermit</entry>
+
+	<entry key="signedDoc">http://www.stork.gov.eu/1.0/signedDoc</entry>
+	<entry key="citizen509Certificate">http://www.stork.gov.eu/1.0/citizen509Certificate</entry>
+
+	<entry key="newAttribute1">http://www.stork.gov.eu/1.0/newAttribute1</entry>
+	<entry key="newAttribute2">http://www.stork.gov.eu/1.0/newAttribute2</entry>
+	<entry key="hasDegree">http://www.stork.gov.eu/1.0/hasDegree</entry>
+	<entry key="mandateContent">http://www.stork.gov.eu/1.0/mandateContent</entry>
+
+	<entry key="docRequest">http://www.stork.gov.eu/1.0/docRequest</entry>
+	
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf1.xml b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf1.xml
new file mode 100644
index 000000000..ad04cc3df
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf1.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>SAML constants for AuthnRequests and Responses.</comment>
+
+	<!-- Types of consent obtained from the user for this authentication and 
+		data transfer. Allow values: 'unspecified'. -->
+	<entry key="consentAuthnRequest">unspecified</entry>
+
+	<!-- Allow values: 'obtained', 'prior', 'current-implicit', 'current-explicit', 
+		'unspecified'. -->
+	<entry key="consentAuthnResponse">obtained</entry>
+
+	<!--URI representing the classification of the identifier Allow values: 
+		'entity'. -->
+	<entry key="formatEntity">entity</entry>
+
+	<!--Only HTTP-POST binding is only supported for inter PEPS -->
+	<!--The SOAP binding is only supported for direct communication between 
+		SP-MW and VIdP -->
+	<entry key="protocolBinding">HTTP-POST</entry>
+
+
+
+
+	<!--URI representing the classification of the identifier Allow values: 
+		'entity'. <entry key="eIDSectorShare">true</entry> <entry key="eIDCrossSectorShare">true</entry> 
+		<entry key="eIDCrossBorderShare">true</entry> -->
+
+
+
+	<!-- A friendly name for the attribute that can be displayed to a user -->
+	<entry key="friendlyName">false</entry>
+
+	<!-- A friendly name for the attribute that can be displayed to a user -->
+	<entry key="isRequired">true</entry>
+
+	<!--PEPS in the Service Provider's country -->
+	<entry key="requester">http://S-PEPS.gov.xx</entry>
+
+	<!--PEPS in the citizen's origin country -->
+	<entry key="responder">http://C-PEPS.gov.xx</entry>
+
+	<!--Subject cannot be confirmed on or after this seconds time (positive 
+		number) -->
+	<entry key="timeNotOnOrAfter">300</entry>
+
+	<!--Validation IP of the response -->
+	<entry key="ipAddrValidation">false</entry>
+
+
+	<!--Subject Attribute Definitions -->
+	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
+	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
+	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
+	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
+	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
+	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
+	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
+	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
+	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
+	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
+	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
+	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
+	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
+	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
+	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
+	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
+
+	<entry key="textResidenceAddress">http://www.stork.gov.eu/1.0/textResidenceAddress</entry>
+	<entry key="canonicalResidenceAddress">http://www.stork.gov.eu/1.0/canonicalResidenceAddress</entry>
+
+	<entry key="title">http://www.stork.gov.eu/1.0/title</entry>
+	<entry key="residencePermit">http://www.stork.gov.eu/1.0/residencePermit</entry>
+
+	<entry key="signedDoc">http://www.stork.gov.eu/1.0/signedDoc</entry>
+	<entry key="citizen509Certificate">http://www.stork.gov.eu/1.0/citizen509Certificate</entry>
+
+	<entry key="newAttribute1">http://www.stork.gov.eu/1.0/newAttribute1</entry>
+	<entry key="newAttribute2">http://www.stork.gov.eu/1.0/newAttribute2</entry>
+	<entry key="hasDegree">http://www.stork.gov.eu/1.0/hasDegree</entry>
+	<entry key="mandateContent">http://www.stork.gov.eu/1.0/mandateContent</entry>
+
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf2.xml b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf2.xml
new file mode 100644
index 000000000..fd1db92ac
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf2.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>SAML constants for AuthnRequests and Responses.</comment>
+
+	<!-- Types of consent obtained from the user for this authentication and 
+		data transfer. Allow values: 'unspecified'. -->
+	<entry key="consentAuthnRequest">unspecified</entry>
+	<!-- Allow values: 'obtained', 'prior', 'curent-implicit', 'curent-explicit', 
+		'unspecified'. -->
+	<entry key="consentAuthnResponse">obtained</entry>
+
+	<!--URI representing the classification of the identifier Allow values: 
+		'entity'. -->
+	<entry key="formatEntity">entity</entry>
+
+	<!--Only HTTP-POST binding is only supported for inter PEPS -->
+	<!--The SOAP binding is only supported for direct communication between 
+		SP-MW and VIdP -->
+	<entry key="protocolBinding">HTTP-POST</entry>
+
+	<entry key="eIDSectorShare">false</entry>
+	<entry key="eIDCrossSectorShare">false</entry>
+	<entry key="eIDCrossBorderShare">false</entry>
+
+	<!--PEPS in the Service Provider's country -->
+	<entry key="requester">http://S-PEPS.gov.xx</entry>
+
+	<!--PEPS in the citizen's origin country -->
+	<entry key="responder">http://C-PEPS.gov.xx</entry>
+
+	<!--Subject cannot be confirmed on or after this seconds time -->
+	<entry key="timeNotOnOrAfter">300</entry>
+
+	<!--Validation IP of the response -->
+	<entry key="ipAddrValidation">false</entry>
+
+	<!-- A friendly name for the attribute that can be displayed to a user -->
+	<entry key="isRequired">false</entry>
+
+
+	<!--Subject Attribute Definitions -->
+	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
+	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
+	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
+	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
+	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
+	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
+	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
+	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
+	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
+	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
+	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
+	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
+	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
+	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
+	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
+	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf3.xml b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf3.xml
new file mode 100644
index 000000000..bea40d274
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/StorkSamlEngine_Conf3.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+
+<properties>
+	<comment>SAML constants for AuthnRequests and Responses.</comment>
+
+	<!-- Types of consent obtained from the user for this authentication and 
+		data transfer. Allow values: 'unspecified'. -->
+	<entry key="consentAuthnRequest">unspecified</entry>
+	<!-- Allow values: 'obtained', 'prior', 'curent-implicit', 'curent-explicit', 
+		'unspecified'. -->
+	<entry key="consentAuthnResponse">obtained</entry>
+
+	<!--URI representing the classification of the identifier Allow values: 
+		'entity'. -->
+	<entry key="formatEntity">entity</entry>
+
+	<!--Only HTTP-POST binding is only supported for inter PEPS -->
+	<!--The SOAP binding is only supported for direct communication between 
+		SP-MW and VIdP -->
+	<entry key="protocolBinding">HTTP-POST</entry>
+
+	<entry key="eIDSectorShare">false</entry>
+	<entry key="eIDCrossSectorShare">false</entry>
+	<entry key="eIDCrossBorderShare">false</entry>
+
+	<!--PEPS in the Service Provider's country -->
+	<entry key="requester">http://S-PEPS.gov.xx</entry>
+
+	<!--PEPS in the citizen's origin country -->
+	<entry key="responder">http://C-PEPS.gov.xx</entry>
+
+	<!--Subject cannot be confirmed on or after this seconds time -->
+	<entry key="timeNotOnOrAfter">300</entry>
+
+	<!--Validation IP of the response -->
+	<entry key="ipAddrValidation">false</entry>
+
+	<!--Subject Attribute Definitions -->
+	<entry key="eIdentifier">http://www.stork.gov.eu/1.0/eIdentifier</entry>
+	<entry key="givenName">http://www.stork.gov.eu/1.0/givenName</entry>
+	<entry key="surname">http://www.stork.gov.eu/1.0/surname</entry>
+	<entry key="inheritedFamilyName">http://www.stork.gov.eu/1.0/inheritedFamilyName</entry>
+	<entry key="adoptedFamilyName">http://www.stork.gov.eu/1.0/adoptedFamilyName</entry>
+	<entry key="gender">http://www.stork.gov.eu/1.0/gender</entry>
+	<entry key="dateOfBirth">http://www.stork.gov.eu/1.0/dateOfBirth</entry>
+	<entry key="countryCodeOfBirth">http://www.stork.gov.eu/1.0/countryCodeOfBirth</entry>
+	<entry key="nationalityCode">http://www.stork.gov.eu/1.0/nationalityCode</entry>
+	<entry key="maritalStatus">http://www.stork.gov.eu/1.0/maritalStatus</entry>
+	<entry key="residenceAddress">http://www.stork.gov.eu/1.0/residenceAddress</entry>
+	<entry key="eMail">http://www.stork.gov.eu/1.0/eMail</entry>
+	<entry key="academicTitle">http://www.stork.gov.eu/1.0/academicTitle</entry>
+	<entry key="pseudonym">http://www.stork.gov.eu/1.0/pseudonym</entry>
+	<entry key="age">http://www.stork.gov.eu/1.0/age</entry>
+	<entry key="isAgeOver">http://www.stork.gov.eu/1.0/isAgeOver</entry>
+	<entry key="unknown">http://www.stork.gov.eu/1.0/unknown</entry>
+</properties>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
new file mode 100644
index 000000000..3764389e4
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequest.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
+	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
+	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
+	Destination="http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest" ID="_939726f0a02072f40b548de378612a50"
+	IssueInstant="2013-10-04T16:57:55.547Z" Version="2.0">
+	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
+	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+		<ds:SignedInfo>
+			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
+			<ds:Reference URI="#_939726f0a02072f40b548de378612a50">
+				<ds:Transforms>
+					<ds:Transform
+						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
+					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
+						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
+							PrefixList="xs" />
+					</ds:Transform>
+				</ds:Transforms>
+				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+				<ds:DigestValue>BgPDTVCv7BhiWIs6HsC06jaHaag=</ds:DigestValue>
+			</ds:Reference>
+		</ds:SignedInfo>
+		<ds:SignatureValue>dIC61bGi6Jqp1zSVojpjaVq9WaZcDtNImXgo1Dyze5/hJA07Sy4TaHu+/IuLEC99aLjM6rxh2UUNqpPaQCFlF5eVkVv/c4gHEZVyevhjJKTidqmnuhlI78PGMx2thfxFsHsPcqHqOzy1Z6w18K1ds6APQP+aXI9TNKis+pykn4nJititYuiSseD0VY0F4QnXx+U6k3raoi1CAFE5fe7EuI/KfxuhhQLAbLq90Vm8R94ITBjfSS25mXstXNe9zppTSjDB42ld1TjDovDwXAn5OxiZasIEb5m68sRlxgoQ/2/+ZdYNNINFLAwkCbb8MiCbGASd626Bme0Kx+ropeWdxw==</ds:SignatureValue>
+		<ds:KeyInfo>
+			<ds:X509Data>
+				<ds:X509Certificate>MIIDXjCCAkagAwIBAgIEUk1MbDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJJUzESMBAGA1UE
+					CAwJUmV5a2phdmlrMRIwEAYDVQQHDAlSZXlramF2aWsxEDAOBgNVBAoMB0FkdmFuaWExDzANBgNV
+					BAsMBlNUT1JLMjEXMBUGA1UEAwwOc2FtbC1kZW1vLWNlcnQwHhcNMTMxMDAzMTA1MzEyWhcNMjMx
+					MDAzMTA1MzEyWjBxMQswCQYDVQQGEwJJUzESMBAGA1UECAwJUmV5a2phdmlrMRIwEAYDVQQHDAlS
+					ZXlramF2aWsxEDAOBgNVBAoMB0FkdmFuaWExDzANBgNVBAsMBlNUT1JLMjEXMBUGA1UEAwwOc2Ft
+					bC1kZW1vLWNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCkSgTxZkNRXZTKLB0c
+					4oz7/8Dh56FX+0cYg7hjw4e8vn+ITXkxzrmUH57FtsvKln4mq1H0FHXL80u3IiWX8qY+QLgNeKeB
+					m85lXuyOb3wWpKAaQvpLAkejGLCx22AN2L0WZkKZV2puwRQVsRHCq6U6vToJXDZ6Ui6ltKsAl/ZS
+					8qUFpiIvqD5ea4ohz4JsFE/uApRc7pbJ4VbOmAAeH/tQTayptq2kPb2vvUVk+2cH5J7UD+GCI88E
+					e+mS+C33tV9NmWUHL69mYEe8FXjumbKA5e9i1ejn9i0/BLUtHFonHnL9YFMim0foI7NNc5mNg9aw
+					vm0PuByVU3kuibQkqGBLAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAA9X5B4NBmVuhjECi+KOnRRX
+					5oUV+jbYKhGZODDPi+F4Uo7ZtPFQ6sS3tE54+8AoDl5zQ5q5fDDVXhB42IIIjDxHKo8cBXie5FZ6
+					mJtErvWZWYWdO0uV2OQAUALq2LieidqSFDJ+Pjl8w1New8oi3migwyE0jZo4Q97lJGDfJTruV0A2
+					JE/Gt6QAAcWhhN2hZl92pYkIi5OeqHXyzBUp5vg8LLfNmeyziCAiXDC1Sy/aQU/cllZ3zFJMrqZM
+					s2xBpmB4sF1YRbIrr2OqEVE6M6DUx+pAQOd2uogV3AMT9D5MYpckI1jx/o/Tto7ju74nIVOskDiN
+					K0FR8izxcT0HixM=</ds:X509Certificate>
+			</ds:X509Data>
+		</ds:KeyInfo>
+	</ds:Signature>
+	<saml2p:Extensions>
+		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
+		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
+		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
+		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
+		<storkp:RequestedAttributes>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="false" />
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true">
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">16</stork:AttributeValue>
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">18</stork:AttributeValue>
+			</stork:RequestedAttribute>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true">
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">Sveinbjorn</stork:AttributeValue>
+			</stork:RequestedAttribute>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true">
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">ES/IS/1234567890</stork:AttributeValue>
+			</stork:RequestedAttribute>
+		</storkp:RequestedAttributes>
+	</saml2p:Extensions>
+	<saml2:Subject>
+		<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer" />
+	</saml2:Subject>
+</saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
new file mode 100644
index 000000000..d64572829
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestSdoc.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" AssertionConsumerServiceURL="http://S-PEPS.gov.xx/PEPS/ColleagueResponse" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://A-PEPS.gov.xx/PEPS/AttributeColleagueRequest" ID="_334488599e0c2781ff34857c4964debb" IssueInstant="2014-02-06T22:09:18.113Z" Version="2.0"><saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><ds:Reference URI="#_334488599e0c2781ff34857c4964debb"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xs"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>X1nUVB6qXdoKbJzNekiSo9ExLdw=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>ExCPHHC/9OhdhOl1Ou+43Qw1nvskpbMYMu9vqa7m16doxM2PIUmK7LUw7hZiKtjIdBxuhpca3OrjO8O6MuTDN1FksWoj+7B1KTLFtmspucT5O7Cu2OqhK5WIVuCaLuA7CD0N2UfFouRwR5NlLHyzn9Trd7IM5OjA41dGb5jqYl7Ir+62+MgjhZRlLooDzb5fDAczbxv9LHGiKRBpgnk40w3gDAvoSPNdEuKhZi8LPQWWNBvVi3N5ZmJmAIacZWBqePywXTjygmChWAc8p7ptAX6tw0hpBxyxoW3aaZZzWQNcwobTRYbn89fcM11gqIz/YK7VXtiQ7WEQt1enQD/GAA==</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIDIjCCAgqgAwIBAgIES6idsjANBgkqhkiG9w0BAQUFADBTMQswCQYDVQQGEwJFUzEOMAwGA1UE
+CAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExEzARBgNVBAMMCmxvY2Fs
+LWRlbW8wHhcNMTMwODI4MTY0NzM1WhcNMTUwODI4MTY0NzM1WjBTMQswCQYDVQQGEwJFUzEOMAwG
+A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExEzARBgNVBAMMCmxv
+Y2FsLWRlbW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx+7zEQUbt8Ot9dByR5TuY
+NPmTwaKhECtnkxYAx9tl+Ga3kFiv+dOSeDoQOhxkICG1ZMaG0Gtk0EQWjscC1cLwDXpAOdhOm5xh
+ndFHxa3V3Y3zomFZA7A3nwP8wt17wDrc1xi2Ye8VrwO7Vjb/F8Rgutlcrvq+LF4g9nQLoRiKUq8w
+NFvDlvhBbLr8hMVBMY/jY7tSQ85qLqKUkWRcoDttJjgWZoO1vpBS4m+FywtYdOoHnN6fv4Dvf1r2
+rNLgebgBvSfwznxiulwW6FBLasYX0rYKP7RfwG8TJ+FumOgAjADj2LdwK25RZNg44XU2V1z1Fp37
+fNXhfo08LpdD1ueFAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBADMRGTWOmadZyCoJNluV+M7LopjC
+9WpFUj76X0cAoNXmt12zYqYe8hjRmBr6l2V/FXT3/TyWET1nILG46zwwAxslw3b2LvkhU+9QcuB8
+yC8TCJJ0kgsTZ/EUZPSbwUG7Nn2jkMiyjlyKcjSCQOzEKQyR1xYwyZG40+BPeGbYjmRgm6kcmCxY
+USWoPwNyfke9gNT80f0pUj7wJ9YwWbTIz1rhf/h7rxoMYypXo+JXwaXW/Ra8v1uDcwfKpE5ZgwAU
+nubLXF4A+H7/N7ZvB5XDwJ4W+99nuPsKfwacD8m1sflTXcEPzzhOq6iQ9anJT94/pMctnp827zXA
+y66jvDrin5I=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><saml2p:Extensions><stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel><stork:spCountry>IS</stork:spCountry><storkp:eIDSectorShare>false</storkp:eIDSectorShare><storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare><storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare><storkp:RequestedAttributes><stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/docRequest" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"><stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:anyType">IS/IS/fbea6e68-0393-401b-b616-f767fff9418c</stork:AttributeValue></stork:RequestedAttribute></storkp:RequestedAttributes></saml2p:Extensions><saml2:Subject><saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/></saml2:Subject></saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
new file mode 100644
index 000000000..becc689fe
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryRequestTagDelete.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:AttributeQuery xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
+	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
+	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
+	Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest" ID="_f6c8fc355b9f125cb5283f038e1b3cdf"
+	IssueInstant="2013-10-03T10:28:15.449Z" Version="2.0">
+	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
+	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+		<ds:SignatureValue>hhQXDKNrJJ3Yy/pkZNZF4GlWrA/Xsx4CH9chgVa5HK4qZQvFXvZwegdw6U7rm7qv0zmI4xaLTv/bpmqJzEPfY3sIvrDRu9EouEKwtjbMbcvVQsx7I+j0yy7/cBcQJe3lRwQwyvazfYVbnSeGFxBN6WOHPqv6uInaQO/hXkicT3tBtm8o3UgUDY6c8wIMuD5A0hWTkL6z6f893AbdN85OQYAdHItNsQWeLOIeiGC918X7qqTfhFtBAB2oGVjlsSEqWox1jNqrPl1jjA0dP76m5SIVSqF8XcDR306ZB9GLJywOHKba0lxGLsXOAzJ+8u9jeixJ6VZKFqZg2Fhl/saKbg==</ds:SignatureValue>
+		<ds:KeyInfo>
+			<ds:X509Data>
+				<ds:X509Certificate>MIIDJzCCAg8CBEuonbIwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMCRVMxDjAMBgNVBAgMBVNw
+					YWluMQ8wDQYDVQQHDAZNYWRyaWQxDjAMBgNVBAoMBUluZHJhMRgwFgYDVQQDDA9sb2NhbC1kZW1v
+					LWNlcnQwHhcNMTAwMzIzMTA1MzM4WhcNMTAwNjAxMTA1MzM4WjBYMQswCQYDVQQGEwJFUzEOMAwG
+					A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExGDAWBgNVBAMMD2xv
+					Y2FsLWRlbW8tY2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfdQ1/mkM9sqqab
+					ri8qqqX4s0J6UEEXyF+0AjLU8RC4WMeYFSZ5tfwnyLsoXY0/9bZLXnBxSibQYaf4SnpZJhlVA4sU
+					0d8qyEWA2OvXGDCm7uspGHG3CRQa7fpHsmHmfIAqho9XDlwpwJdx5gK4Edc6aArcMQfjqMhy1s1n
+					6Of1i1lMGGsGrERIRY7biIQu/8nITbHH18sUAZMG1u/Q0Avi9O3LWyswHXUouZ818fWwG6xru2N5
+					y6vtVO/SL3doRSdqYkEms93TgxTtaKg8XNe24zhNTte6nvWLaKesi2KzZGC57HU47HBFEs8NWk7z
+					9BDf8uLyPz9VDahwVKzMto8CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAgpuReXQ7Dsfdoe5zzy2F
+					6kn1qqtMkRGsBPKnDFCI/GkIZpBiqlfwdh6sipnFKWfKEDlPKN1kEhbkDR2GA1Cp4F4ZSL/HumZM
+					pWabRhDxhTPvHIFbbShPDJY93+jw/yQeaWgMuhw3WzdH9TrVoRZH0Q7sG1pIJo5/6IogIZwFvJHT
+					/NDutKmurU6Lw8Vnde8PfnQd+FTEhz0SEGyKkWjAuhGbJfseBy/z3L+MJq1rdSQ9PF7wXDvWNzJq
+					yaNBUWWBV1TskvkNZXcaguroVPy2XhA1aixlAajWEXLk6Uuj5UYqalrV/reNYvDvY0BV2CIn51r7
+					Ppm8IFVTk8mYfX8/jw==</ds:X509Certificate>
+			</ds:X509Data>
+		</ds:KeyInfo>
+	</ds:Signature>
+	<saml2p:Extensions>
+		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
+		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
+		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
+		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
+		<storkp:RequestedAttributes>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="false" />
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true">
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">16</stork:AttributeValue>
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">18</stork:AttributeValue>
+			</stork:RequestedAttribute>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true">
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">Sveinbjörn</stork:AttributeValue>
+			</stork:RequestedAttribute>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true">
+				<stork:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">ES/IS/1234567890</stork:AttributeValue>
+			</stork:RequestedAttribute>
+		</storkp:RequestedAttributes>
+	</saml2p:Extensions>
+	<saml2:Subject>
+		<saml2:SubjectConfirmation
+			Method="urn:oasis:names:tc:SAML:1.0:cm:sender-vouches" />
+	</saml2:Subject>
+</saml2p:AttributeQuery>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
new file mode 100644
index 000000000..7ea486812
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AttrQueryResponse.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
+	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
+	xmlns:xs="http://www.w3.org/2001/XMLSchema" Consent="urn:oasis:names:tc:SAML:2.0:consent:obtained"
+	Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest" ID="_483140d440fc4eef8e949ace49669f2e"
+	InResponseTo="_0a22c1120bf2de912714c24e99dd38ed" IssueInstant="2013-10-08T09:11:17.255Z"
+	Version="2.0">
+	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://C-PEPS.gov.xx</saml2:Issuer>
+	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+		<ds:SignedInfo>
+			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
+			<ds:Reference URI="#_483140d440fc4eef8e949ace49669f2e">
+				<ds:Transforms>
+					<ds:Transform
+						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
+					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
+						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
+							PrefixList="xs" />
+					</ds:Transform>
+				</ds:Transforms>
+				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+				<ds:DigestValue>yMOVS1T/yRiVh3L6IBM9rR9Ie3w=</ds:DigestValue>
+			</ds:Reference>
+		</ds:SignedInfo>
+		<ds:SignatureValue>d8e/RyNNPmnHRIzTIuRSnW6B60oWGBGxjRua/HvNxTuod0qSarYJxEedhY9Wl1Z9WYXlry28FuKjp3DA3HhzNaVd7A7QpFqNC4dnizSVWFjxlhmoE/Uv3Y/ha9P/fk6nbtHCSKW4kHSX7QfFLeggcLmUG0IULRF8UmRdQ0WerCl0aSZZeSp8J3LsFBPeWCRSwXgfiLn+RehggzZmQU6g0ssxrpnsYEAtjAiOli+YVQGuumsZGaJ8zHA/DgJ2FTGovNUyfuSUFLhd9nLlSqFs2Avnx0Ck7Q1dxDO5truOm6e285YLHqLaGdetFyPQAj/Z4w4RJ5u5X6d7rhBjTfRAAw==</ds:SignatureValue>
+		<ds:KeyInfo>
+			<ds:X509Data>
+				<ds:X509Certificate>MIIDJzCCAg8CBEuonbIwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMCRVMxDjAMBgNVBAgMBVNw
+					YWluMQ8wDQYDVQQHDAZNYWRyaWQxDjAMBgNVBAoMBUluZHJhMRgwFgYDVQQDDA9sb2NhbC1kZW1v
+					LWNlcnQwHhcNMTAwMzIzMTA1MzM4WhcNMTAwNjAxMTA1MzM4WjBYMQswCQYDVQQGEwJFUzEOMAwG
+					A1UECAwFU3BhaW4xDzANBgNVBAcMBk1hZHJpZDEOMAwGA1UECgwFSW5kcmExGDAWBgNVBAMMD2xv
+					Y2FsLWRlbW8tY2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfdQ1/mkM9sqqab
+					ri8qqqX4s0J6UEEXyF+0AjLU8RC4WMeYFSZ5tfwnyLsoXY0/9bZLXnBxSibQYaf4SnpZJhlVA4sU
+					0d8qyEWA2OvXGDCm7uspGHG3CRQa7fpHsmHmfIAqho9XDlwpwJdx5gK4Edc6aArcMQfjqMhy1s1n
+					6Of1i1lMGGsGrERIRY7biIQu/8nITbHH18sUAZMG1u/Q0Avi9O3LWyswHXUouZ818fWwG6xru2N5
+					y6vtVO/SL3doRSdqYkEms93TgxTtaKg8XNe24zhNTte6nvWLaKesi2KzZGC57HU47HBFEs8NWk7z
+					9BDf8uLyPz9VDahwVKzMto8CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAgpuReXQ7Dsfdoe5zzy2F
+					6kn1qqtMkRGsBPKnDFCI/GkIZpBiqlfwdh6sipnFKWfKEDlPKN1kEhbkDR2GA1Cp4F4ZSL/HumZM
+					pWabRhDxhTPvHIFbbShPDJY93+jw/yQeaWgMuhw3WzdH9TrVoRZH0Q7sG1pIJo5/6IogIZwFvJHT
+					/NDutKmurU6Lw8Vnde8PfnQd+FTEhz0SEGyKkWjAuhGbJfseBy/z3L+MJq1rdSQ9PF7wXDvWNzJq
+					yaNBUWWBV1TskvkNZXcaguroVPy2XhA1aixlAajWEXLk6Uuj5UYqalrV/reNYvDvY0BV2CIn51r7
+					Ppm8IFVTk8mYfX8/jw==</ds:X509Certificate>
+			</ds:X509Data>
+		</ds:KeyInfo>
+	</ds:Signature>
+	<saml2p:Status>
+		<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
+		<saml2p:StatusMessage>urn:oasis:names:tc:SAML:2.0:status:Success</saml2p:StatusMessage>
+	</saml2p:Status>
+	<saml2:Assertion ID="_9ed05849dee5c154e62fa9e3ba53e9f3"
+		IssueInstant="2013-10-08T09:11:17.255Z" Version="2.0">
+		<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://C-PEPS.gov.xx</saml2:Issuer>
+		<saml2:Subject>
+			<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
+				NameQualifier="http://C-PEPS.gov.xx">urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</saml2:NameID>
+			<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+				<saml2:SubjectConfirmationData
+					Address="111.222.333.444" InResponseTo="_0a22c1120bf2de912714c24e99dd38ed"
+					NotOnOrAfter="2013-10-08T09:16:17.255Z" />
+			</saml2:SubjectConfirmation>
+		</saml2:Subject>
+		<saml2:Conditions NotBefore="2013-10-08T09:11:17.255Z"
+			NotOnOrAfter="2013-10-08T09:16:17.255Z">
+			<saml2:AudienceRestriction>
+				<saml2:Audience>http://S-PEPS.gov.xx</saml2:Audience>
+			</saml2:AudienceRestriction>
+			<saml2:OneTimeUse />
+		</saml2:Conditions>
+		<saml2:AuthnStatement AuthnInstant="2013-10-08T09:11:17.255Z">
+			<saml2:SubjectLocality Address="111.222.333.444" />
+			<saml2:AuthnContext>
+				<saml2:AuthnContextDecl />
+			</saml2:AuthnContext>
+		</saml2:AuthnStatement>
+		<saml2:AttributeStatement>
+			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				stork:AttributeStatus="Available">
+				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">16/12/2008</saml2:AttributeValue>
+			</saml2:Attribute>
+			<saml2:Attribute
+				Name="http://www.stork.gov.eu/1.0/canonicalResidenceAddress"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				stork:AttributeStatus="Available">
+				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">
+					<stork:postalCode xsi:type="xs:anyType">105</stork:postalCode>
+					<stork:state xsi:type="xs:anyType">IS</stork:state>
+					<stork:streetNumber xsi:type="xs:anyType">10</stork:streetNumber>
+					<stork:streetName xsi:type="xs:anyType">Gudrunartun</stork:streetName>
+					<stork:town xsi:type="xs:anyType">Reykjavik</stork:town>
+				</saml2:AttributeValue>
+			</saml2:Attribute>
+			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/newAttribute2"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				stork:AttributeStatus="Available">
+				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">
+					<stork:value3 xsi:type="xs:anyType">value3</stork:value3>
+					<stork:value4 xsi:type="xs:anyType">value4</stork:value4>
+					<stork:value1 xsi:type="xs:anyType">value1</stork:value1>
+					<stork:value2 xsi:type="xs:anyType">value2</stork:value2>
+				</saml2:AttributeValue>
+			</saml2:Attribute>
+			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				stork:AttributeStatus="Available">
+				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">16</saml2:AttributeValue>
+				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">18</saml2:AttributeValue>
+			</saml2:Attribute>
+			<saml2:Attribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				stork:AttributeStatus="Available">
+				<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+					xsi:type="xs:anyType">123456789IS</saml2:AttributeValue>
+			</saml2:Attribute>
+		</saml2:AttributeStatement>
+	</saml2:Assertion>
+</saml2p:Response>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
new file mode 100644
index 000000000..c48bfde95
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequest.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
+	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:assertion" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
+	AssertionConsumerServiceURL="http://S-PEPS.gov.xx/PEPS/ColleagueResponse"
+	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://C-PEPS.gov.xx/PEPS/ColleagueRequest"
+	ForceAuthn="true" ID="_e54eee285e7b8e2772875c406ec39674" IsPassive="false"
+	IssueInstant="2010-06-08T07:37:54.533Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
+	ProviderName="University of Oxford" Version="2.0">
+	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
+	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+		<ds:SignedInfo>
+			<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+			<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
+			<ds:Reference URI="#_e54eee285e7b8e2772875c406ec39674">
+				<ds:Transforms>
+					<ds:Transform
+						Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
+					<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
+						<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
+							PrefixList="ds saml2 saml2p stork storkp xs" />
+					</ds:Transform>
+				</ds:Transforms>
+				<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+				<ds:DigestValue>yzsqaxBNicOrixBUno5cL0CBOpE=</ds:DigestValue>
+			</ds:Reference>
+		</ds:SignedInfo>
+		<ds:SignatureValue>
+			Xycll1PF7hh3Xdykpr6nIr8Q6PQ6OxLIBBBugoGpAm/V4Hu7tKakHJp8TgtRWZ30jG5eolOXnJkC
+			wiaTVUFaQz7cNn27syRJkdA+eYlz9doiwUJ5eD1cAyddZYsNPpSeAj5UK45oN0qCH+/pI9mRw8Oi
+			YIN/BUEtXkoYTjPtkmA=
+		</ds:SignatureValue>
+		<ds:KeyInfo>
+			<ds:X509Data>
+				<ds:X509Certificate>MIIBmDCCAQECBEuWisIwDQYJKoZIhvcNAQEFBQAwEzERMA8GA1UEAxMIY291bnRyeTEwHhcNMTAw
+					MzA5MTc1MjAyWhcNMTAwNjA3MTc1MjAyWjATMREwDwYDVQQDEwhjb3VudHJ5MTCBnzANBgkqhkiG
+					9w0BAQEFAAOBjQAwgYkCgYEAnb2gcchwxvJBclcsfCBWJnYefLJYQnDGCQ3RUtYZc26JznnLXclu
+					h1XfLJlWgYk/pFKz7B9KfJztal47c6mBfisnxjhdcLqcbXOuRIm7E8TZPzdbHEd60WHPDv20jr+r
+					/WkOQs12tKQMbgDX2wtBBcJODLYCDiYa1oQsnyhdOGkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBk
+					3luVRc0EqEE1zZeYvRPi5a2yOZfI9H+/rXI1qNLwmICnuJX++ukUbqJHm/FV1iSPM9O9oqzifJ/K
+					eKL5EcUugJ76Tu5XO8za2FoJvYr+jIZDsEkCg+OSzcp/eljiWAIh2enZcQ/ON6QxWXeSNJPH0xOq
+					KAoZgbUK0Zld3Dsheg==</ds:X509Certificate>
+			</ds:X509Data>
+		</ds:KeyInfo>
+	</ds:Signature>
+	<saml2p:Extensions>
+		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
+		<stork:spSector>EDU001</stork:spSector>
+		<stork:spInstitution>OXF001</stork:spInstitution>
+		<stork:spApplication>APP001</stork:spApplication>
+		<stork:spCountry>EN</stork:spCountry>
+		<storkp:eIDSectorShare>true</storkp:eIDSectorShare>
+		<storkp:eIDCrossSectorShare>true</storkp:eIDCrossSectorShare>
+		<storkp:eIDCrossBorderShare>true</storkp:eIDCrossBorderShare>
+		<storkp:RequestedAttributes>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/isAgeOver"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true">
+				<stork:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
+					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">16</stork:AttributeValue>
+				<stork:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
+					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">18</stork:AttributeValue>
+			</stork:RequestedAttribute>
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="false" />
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/eIdentifier"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true" />
+		</storkp:RequestedAttributes>
+	</saml2p:Extensions>
+</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
new file mode 100644
index 000000000..8766f9a8b
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDelete.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
+	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:stork" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
+	AssertionConsumerServiceURL="http://localhost:8080/SP/ReturnPage"
+	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://locahost:8080/PEPS/ServiceProvider"
+	ForceAuthn="true" ID="_0c64ff85-1323-4618-847b-12d1983b86e4" IsPassive="false"
+	IssueInstant="2010-04-07T16:45:03.593Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
+	ProviderName="PT-SP" Version="2.0">
+	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
+	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+		<ds:SignatureValue>
+			S6nY97RSCUJXq3HZ5obSLCI341LvtAA3vHjR1FWxrIMDPACQMqlNWBYNnRP1RiZiJV6x0RieH+SR
+			Vkiy03jYyhr0XkwAE5Wd6Huf+zIbeTXjZkdQj7JpAXoB+ky4G/+L0deamvsP3eO7ZJ4grady4gmC
+			Xt8p8tK3EoMocZse2hw=
+		</ds:SignatureValue>
+		<ds:KeyInfo>
+			<ds:X509Data>
+				<ds:X509Certificate>MIIBkTCB+wIESpT8bTANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVzdG9yazAeFw0wOTA4MjYw
+					OTEyMTNaFw0wOTExMjQwOTEyMTNaMBAxDjAMBgNVBAMTBXN0b3JrMIGfMA0GCSqGSIb3DQEBAQUA
+					A4GNADCBiQKBgQDK/QL8NuMd41I1lObObeRA6DaM8bjeYqIz5mg5WnnZv4jlcK7Gq89Lk6htXRFl
+					lAXpDYhI3zolMIMHEMZ3zQQPc7lgTV6Bbz9uD2YTJ9Kx55e8Y6Y49DO+TiiejGJxTzTFUcuBJHaK
+					ipuvLVd1a8N3RAnaGSUOozhrTqxba82mEwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFJgeS18nhUl
+					r7WnvSn9FlkI94U//Hk3iZLc3/cScTu7D7Y/J0eUq4TF8PsSzWX5khGuqrTkswNgfEtl2IpACQ2w
+					kB8+RxeRNdddQlGHlO4ZqnpvxXBwSouiy2yUeAo0y++vMFm6DO4sxfk8eTtimPDo5SzBtjtGtbqS
+					3cyl/wz8</ds:X509Certificate>
+			</ds:X509Data>
+		</ds:KeyInfo>
+	</ds:Signature>
+	<saml2p:Extensions>
+		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
+		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
+		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
+		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
+		<storkp:RequestedAttributes>
+			<stork:RequestedAttribute
+				Name="http://www.stork.gov.eu/1.0/nationalityCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true" />
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true" />
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true" />
+		</storkp:RequestedAttributes>
+	</saml2p:Extensions>
+</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
new file mode 100644
index 000000000..1b1e1646c
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/data/eu/stork/STORKSAMLEngine/AuthnRequestTagDeleteEncoded.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
+	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
+	xmlns:stork="urn:eu:stork:names:tc:STORK:1.0:stork" xmlns:storkp="urn:eu:stork:names:tc:STORK:1.0:protocol"
+	AssertionConsumerServiceURL="http://localhost:8080/SP/ReturnPage"
+	Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" Destination="http://localhost:8080/PEPS/ServiceProvider"
+	ForceAuthn="true" ID="_0c64ff85-1323-4618-847b-12d1983b86e4" IsPassive="false"
+	IssueInstant="2010-04-07T16:45:03.593Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
+	ProviderName="PT-SP" Version="2.0">
+	<saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://S-PEPS.gov.xx</saml2:Issuer>
+	<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+		<ds:SignatureValue>
+			S6nY97RSCUJXq3HZ5obSLCI341LvtAA3vHjR1FWxrIMDPACQMqlNWBYNnRP1RiZiJV6x0RieH+SR
+			Vkiy03jYyhr0XkwAE5Wd6Huf+zIbeTXjZkdQj7JpAXoB+ky4G/+L0deamvsP3eO7ZJ4grady4gmC
+			Xt8p8tK3EoMocZse2hw=
+		</ds:SignatureValue>
+		<ds:KeyInfo>
+			<ds:X509Data>
+				<ds:X509Certificate>MIIBkTCB+wIESpT8bTANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVzdG9yazAeFw0wOTA4MjYw
+					OTEyMTNaFw0wOTExMjQwOTEyMTNaMBAxDjAMBgNVBAMTBXN0b3JrMIGfMA0GCSqGSIb3DQEBAQUA
+					A4GNADCBiQKBgQDK/QL8NuMd41I1lObObeRA6DaM8bjeYqIz5mg5WnnZv4jlcK7Gq89Lk6htXRFl
+					lAXpDYhI3zolMIMHEMZ3zQQPc7lgTV6Bbz9uD2YTJ9Kx55e8Y6Y49DO+TiiejGJxTzTFUcuBJHaK
+					ipuvLVd1a8N3RAnaGSUOozhrTqxba82mEwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFJgeS18nhUl
+					r7WnvSn9FlkI94U//Hk3iZLc3/cScTu7D7Y/J0eUq4TF8PsSzWX5khGuqrTkswNgfEtl2IpACQ2w
+					kB8+RxeRNdddQlGHlO4ZqnpvxXBwSouiy2yUeAo0y++vMFm6DO4sxfk8eTtimPDo5SzBtjtGtbqS
+					3cyl/wz8</ds:X509Certificate>
+			</ds:X509Data>
+		</ds:KeyInfo>
+	</ds:Signature>
+	<saml2p:Extensions>
+		<stork:QualityAuthenticationAssuranceLevel>3</stork:QualityAuthenticationAssuranceLevel>
+		<storkp:eIDSectorShare>false</storkp:eIDSectorShare>
+		<storkp:eIDCrossSectorShare>false</storkp:eIDCrossSectorShare>
+		<storkp:eIDCrossBorderShare>false</storkp:eIDCrossBorderShare>
+		<storkp:RequestedAttributes>
+			<stork:RequestedAttribute
+				Name="http://www.stork.gov.eu/1.0/nationalityCode" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true" />
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/dateOfBirth"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true" />
+			<stork:RequestedAttribute Name="http://www.stork.gov.eu/1.0/givenName"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+				isRequired="true" />
+		</storkp:RequestedAttributes>
+	</saml2p:Extensions>
+</saml2p:AuthnRequest>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/logback-test.xml b/id/server/stork2-saml-engine/src/test/resources/logback-test.xml
new file mode 100644
index 000000000..99d7d353a
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/logback-test.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Basic configuration used until the IdP can load the real configuration -->
+<configuration>
+
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+			</Pattern>
+		</layout>
+	</appender>
+
+	<logger name="eu.stork">
+		<level value="DEBUG" />
+	</logger>
+
+	<root>
+		<appender-ref ref="STDOUT" />
+		<level value="INFO" />
+	</root>
+
+</configuration>
\ No newline at end of file
diff --git a/id/server/stork2-saml-engine/src/test/resources/p11Conf.cfg b/id/server/stork2-saml-engine/src/test/resources/p11Conf.cfg
new file mode 100644
index 000000000..bd9f357ce
--- /dev/null
+++ b/id/server/stork2-saml-engine/src/test/resources/p11Conf.cfg
@@ -0,0 +1,24 @@
+//ATTRIBUTE			VALUE
+//name				name suffix of this provider instance
+//library			pathname of PKCS#11 implementation
+//slotListIndex		slot index
+
+//PREFIX			DESCRIPTION
+//CKO_ 				Object class
+//CKA_ 				Attribute
+//CKK_ 				Key type
+
+//attributes(operation, keytype, keyalgorithm) = {
+//  name1 = value1
+//  [...]
+//}
+
+name=nameProvider
+library=library.dll
+slotListIndex=0
+attributes(*,CKO_PUBLIC_KEY,CKK_RSA)={
+	CKA_VERIFY=true
+}
+attributes(*,CKO_PRIVATE_KEY,CKK_RSA)={
+	CKA_SIGN=true
+}	
\ No newline at end of file
diff --git a/repository/eu/stork/Commons/1.2.0/Commons-1.2.0.jar b/repository/eu/stork/Commons/1.2.0/Commons-1.2.0.jar
deleted file mode 100644
index 4332a474d..000000000
Binary files a/repository/eu/stork/Commons/1.2.0/Commons-1.2.0.jar and /dev/null differ
diff --git a/repository/eu/stork/Commons/1.2.0/Commons-1.2.0.pom b/repository/eu/stork/Commons/1.2.0/Commons-1.2.0.pom
deleted file mode 100644
index b658a8e12..000000000
--- a/repository/eu/stork/Commons/1.2.0/Commons-1.2.0.pom
+++ /dev/null
@@ -1,222 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>eu.stork</groupId>
-	<artifactId>Commons</artifactId>
-	<packaging>jar</packaging>
-	<name>Stork Commons</name>
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<stork.version>1.2.0</stork.version>
-		<opensaml.version>2.6.0</opensaml.version>
-	</properties>
-	<version>${stork.version}</version>
-  <description>
-        The STORKCommons library provides beans, Java Interfaces and utility classes to integrate PEPS and SAML Engine.
-  </description>
-   
-  
-  <repositories>
-		<repository>
-			<id>shibboleth.internet2.edu</id>
-			<name>Internet2</name>
-			<url>https://build.shibboleth.net/nexus/content/groups/public/</url>
-		</repository>
-	</repositories>
-  
-	<dependencies>
-
-		<!-- Joda -->
-		<dependency>
-			<groupId>joda-time</groupId>
-			<artifactId>joda-time</artifactId>
-			<version>2.3</version>
-		</dependency>
-
-		<!-- Log4J -->
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
-			<version>1.2.17</version>
-			<exclusions>
-				<exclusion>
-					<groupId>javax.jms</groupId>
-					<artifactId>jms</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>com.sun.jdmk</groupId>
-					<artifactId>jmxtools</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>com.sun.jmx</groupId>
-					<artifactId>jmxri</artifactId>
-				</exclusion>
-				<exclusion>
-					<artifactId>mail</artifactId>
-					<groupId>javax.mail</groupId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opensaml</groupId>
-			<artifactId>opensaml</artifactId>
-			<version>${opensaml.version}</version>
-			<exclusions>
-				<exclusion>
-				    <groupId>org.slf4j</groupId>
-				    <artifactId>slf4j-api</artifactId>
-				</exclusion>
-				<exclusion>
-				 	<groupId>org.slf4j</groupId>
-				    <artifactId>slf4j-simple</artifactId>
-				</exclusion>
-				<exclusion>
-				    <groupId>org.slf4j</groupId>
-				    <artifactId>jcl-over-slf4j</artifactId>
-				</exclusion>
-				<exclusion>
-				    <groupId>org.slf4j</groupId>
-				    <artifactId>log4j-over-slf4j</artifactId>
-				</exclusion>
-				<exclusion>
-				    <groupId>org.slf4j</groupId>
-				    <artifactId>jul-to-slf4j</artifactId>
-				</exclusion>
-			</exclusions>			
-		</dependency>
-
-		<!-- Bouncy Castle -->
-		<dependency>
-			<groupId>org.bouncycastle</groupId>
-			<artifactId>bcprov-jdk16</artifactId>
-			<version>1.46</version>
-		</dependency>
-
-		<!-- Servlet API -->
-		<!-- provided by Application Server -->
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-			<version>2.5</version>
-			<scope>provided</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-			<version>2.6</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.11</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<finalName>commons</finalName>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-compiler-plugin</artifactId>
-					<version>3.1</version>
-					<configuration>
-						<source>1.6</source>
-						<target>1.6</target>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-surefire-plugin</artifactId>
-					<configuration>
-            			<runOrder>reversealphabetical</runOrder>
-						<skip>false</skip>
-          				<includes>
-                            <runOrder>reversealphabetical</runOrder>
-				            <include>**/PEPSUtilTest.java</include>
-				            <include>**/PersonalAttributeTestCase.java</include>
-				            <include>**/PersonalAttributeListTestCase.java</include>
-            				<include>**/DateUtilTestCase.java</include>
-				            <include>**/AttributeUtilTest.java</include>
-          				</includes>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-javadoc-plugin</artifactId>
-				<version>2.9.1</version>
-				<configuration>
-					<links>
-						<link>http://commons.apache.org/lang/api/</link>
-						<link>http://java.sun.com/j2se/1.6.0/docs/api/</link>
-						<link>http://www.bouncycastle.org/docs/docs1.6/</link>
-						<link>http://docs.oracle.com/javase/6/docs/api/</link>
-					</links>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-source-plugin</artifactId>
-				<version>2.2.1</version>
-				<executions>
-					<execution>
-						<id>attach-sources</id>
-						<phase>verify</phase>
-						<goals>
-							<goal>jar-no-fork</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-		<testResources>
-			<testResource>
-				<directory>src/test/resources</directory>
-				<includes>
-					<include>log4j.xml</include>
-				</includes>
-			</testResource>
-		</testResources>
-	</build>
-	<profiles>
-		<profile>
-			<id>embedded</id>
-			<build>
-				<resources>
-					<resource>
-						<directory> ${project.basedir}/src/main/resources</directory>
-					</resource>
-					<resource>
-						<directory> ${project.basedir}/src/main/config/embedded</directory>
-					</resource>
-				</resources>
-			</build>
-		</profile>
-		<profile>
-			<id>metrics</id>
-			<build>
-			<plugins>
-				<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>cobertura-maven-plugin</artifactId>
-				<version>2.5.1</version>
-					<configuration>
-						<formats>
-							<format>html</format>
-							<format>xml</format>
-							</formats>
-					</configuration>
-				</plugin>
-			</plugins>
-			</build>
-		</profile>
-		</profiles>
-</project>
-- 
cgit v1.2.3


From f0edd064cb7dab5ac6477926e5c9854c03ddd9c5 Mon Sep 17 00:00:00 2001
From: Florian Reimair <florian.reimair@iaik.tugraz.at>
Date: Thu, 20 Mar 2014 11:47:01 +0100
Subject: fixed velocity engine logging issue

---
 .../main/java/at/gv/egovernment/moa/id/auth/stork/VelocityProvider.java | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/VelocityProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/VelocityProvider.java
index b923727f9..534121443 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/VelocityProvider.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/VelocityProvider.java
@@ -103,6 +103,8 @@ public class VelocityProvider {
 		VelocityEngine velocityEngine = new VelocityEngine();
         velocityEngine.setProperty(RuntimeConstants.ENCODING_DEFAULT, "UTF-8");
         velocityEngine.setProperty(RuntimeConstants.OUTPUT_ENCODING, "UTF-8");
+        velocityEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
+				"org.apache.velocity.runtime.log.SimpleLog4JLogSystem");
         
         return velocityEngine;
 	}
-- 
cgit v1.2.3


From 81e83a4889ea8a3c2a1cd645bc02b5b72604e71f Mon Sep 17 00:00:00 2001
From: Florian Reimair <florian.reimair@iaik.tugraz.at>
Date: Thu, 20 Mar 2014 11:47:52 +0100
Subject: logging statements tweaked

---
 .../moa/id/protocols/stork2/AttributeCollector.java            | 10 +++++++---
 .../egovernment/moa/id/protocols/stork2/ConsentEvaluator.java  |  4 ++--
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java
index e0f14c41d..4bf193e9e 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java
@@ -109,6 +109,7 @@ public class AttributeCollector implements IAction {
             if (!responseAttributeList.containsKey(current.getName()))
                 missingAttributes.add(current);
 
+        Logger.info("collecting attributes...");
 		Logger.debug("found " + missingAttributes.size() + " missing attributes");
 
         // Try to get all missing attributes
@@ -135,8 +136,10 @@ public class AttributeCollector implements IAction {
                         break;
                     } catch (UnsupportedAttributeException e) {
                         // ok, try the next attributeprovider
+                    	Logger.info(currentProvider.getClass().getSimpleName() + " could not handle attribute '" + currentAttribute.getName() + "'");
                     } catch (MOAIDException e) {
                         // the current plugin had an error. Try the next one.
+                    	Logger.info(currentProvider.getClass().getSimpleName() + " could not handle attribute '" + currentAttribute.getName() + "' due to an error");
                     }
                 }
                 
@@ -148,6 +151,7 @@ public class AttributeCollector implements IAction {
 					// else, update any existing attributes
 					addOrUpdateAll(container.getResponse().getPersonalAttributeList(), aquiredAttributes);
             }
+            Logger.info("collecting attributes done");
             
             // ask for consent if necessary
             if(oaParam.isRequireConsentForStorkAttributes())
@@ -194,9 +198,9 @@ public class AttributeCollector implements IAction {
      * @throws MOAIDException 
      */
 	private void addOrUpdateAll(IPersonalAttributeList target, IPersonalAttributeList source) throws MOAIDException {
-		Logger.info("Updating " + source.size() + " attribute(s)...");
+		Logger.debug("Updating " + source.size() + " attributes...");
 		for (PersonalAttribute current : source) {
-			Logger.debug("treating " + current.getName());
+			Logger.trace("treating " + current.getName());
 	        
 			// check if we need to update the current pa
 			if (target.containsKey(current.getName())) {
@@ -213,7 +217,7 @@ public class AttributeCollector implements IAction {
 			} else
 				target.add(current);
 
-			Logger.debug("...successfully treated " + current.getName());
+			Logger.trace("...successfully treated " + current.getName());
 		}
 	}
 
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ConsentEvaluator.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ConsentEvaluator.java
index 19ec754ee..bcf086b56 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ConsentEvaluator.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ConsentEvaluator.java
@@ -137,6 +137,8 @@ public class ConsentEvaluator implements IAction {
     public void generateSTORKResponse(HttpServletResponse httpResp, DataContainer container) throws MOAIDException {
     	MOASTORKRequest request = container.getRequest();
         MOASTORKResponse response = container.getResponse();
+        
+        Logger.info("generating stork response...");
 
         try {
             //Get SAMLEngine instance
@@ -155,8 +157,6 @@ public class ConsentEvaluator implements IAction {
             throw new MOAIDException("stork.05", null);
         }
 
-        Logger.info("STORK SAML Response message succesfully generated ");
-
         // preparing redirection for the client
         try {
             VelocityEngine velocityEngine = VelocityProvider.getClassPathVelocityEngine();
-- 
cgit v1.2.3


From c54fd74a0ac1c03beb6870abf4710daddfd16a33 Mon Sep 17 00:00:00 2001
From: Florian Reimair <florian.reimair@iaik.tugraz.at>
Date: Thu, 20 Mar 2014 12:19:56 +0100
Subject: adapted inbound mandate handling to samlengine

---
 .../moa/id/auth/stork/STORKResponseProcessor.java  | 32 +++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/STORKResponseProcessor.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/STORKResponseProcessor.java
index 57843d0f3..ab9decde0 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/STORKResponseProcessor.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/stork/STORKResponseProcessor.java
@@ -138,7 +138,37 @@ public class STORKResponseProcessor {
 			String citizenSignature = getAttributeValue("signedDoc", attributeList);
 			
 			// if we have a signedDoc we test for a representation case
-			if(hasAttribute("mandateContent", attributeList) || hasAttribute("representative", attributeList) || hasAttribute("represented", attributeList)) {
+			// - according to stork samlengine and commons
+			if(hasAttribute("mandate", attributeList)) {
+				// we have a representation case
+				String mandate = getAttributeValue("mandate", attributeList);
+				
+				if(!hasAttribute("dateOfBirth", attributeList)) {
+					// if we get here, we have a natural person representing a legal person
+					String organizationAddress = getAttributeValue("canonicalRegisteredAddress", attributeList);
+					String organizationType = getAttributeValue("translateableType", attributeList);
+					
+					identityLinkResponse = AuthenticationServer.getInstance().getIdentityLink(citizenSignature, null, null, mandate, organizationAddress, organizationType, targetType, targetValue, oaFriendlyName, filters);
+				} else {
+					// if we get here, we have a natural person representing another natural person
+					String eIdentifier = getAttributeValue("eIdentifier", attributeList);
+					String givenName = getAttributeValue("givenName", attributeList);
+					String lastName = getAttributeValue("surname", attributeList);
+					String dateOfBirth = getAttributeValue("dateOfBirth", attributeList);
+					
+					// gender attribute is mandatory here because of some legal stuff
+					String gender = getAttributeValue("gender", attributeList);
+					
+					if (!StringUtils.isEmpty(dateOfBirth))
+						dateOfBirth = DateTimeUtils.formatPEPSDateToMOADate(dateOfBirth);
+
+					identityLinkResponse = AuthenticationServer.getInstance().getIdentityLink(eIdentifier, 
+							givenName, lastName, dateOfBirth, gender, citizenSignature, null,
+							null, mandate, targetType, targetValue, oaFriendlyName, filters);
+				}
+			}
+			// - according to stork spec
+			else if(hasAttribute("mandateContent", attributeList) || hasAttribute("representative", attributeList) || hasAttribute("represented", attributeList)) {
 				// we have a representation case
 				String representative = getAttributeValue("representative", attributeList);
 				String represented = getAttributeValue("represented", attributeList);
-- 
cgit v1.2.3