diff --git a/pom.xml b/pom.xml
index c6052d9c9a81a81ebdb08110ce4298a623ad8264..e27acb17c4c95fccc5c88b970e019ffa47f7dce8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,6 @@
 
     <modules>
         <module>smp-angular</module>
-        <module>smp-api</module>
         <module>smp-spi</module>
         <module>smp-server-library</module>
         <module>smp-resource-extensions</module>
@@ -140,11 +139,11 @@
     <pluginRepositories>
         <pluginRepository>
             <id>SmartBearPluginRepository</id>
-            <url>http://www.soapui.org/repository/maven2/</url>
+            <url>https://www.soapui.org/repository/maven2/</url>
         </pluginRepository>
         <pluginRepository>
             <id>eviwarePluginRepository</id>
-            <url>http://www.eviware.com/repository/maven2/</url>
+            <url>https://www.eviware.com/repository/maven2/</url>
         </pluginRepository>
     </pluginRepositories>
 
diff --git a/smp-angular/src/app/app.module.ts b/smp-angular/src/app/app.module.ts
index 5e24bfaa1cfe54d58b85ded644d2816582826089..77c1b3578aeae5902a8be569c9249f0fcdd149f3 100644
--- a/smp-angular/src/app/app.module.ts
+++ b/smp-angular/src/app/app.module.ts
@@ -46,7 +46,7 @@ import {ExtensionComponent} from "./system-settings/admin-extension/extension.co
 import {ExtensionPanelComponent} from "./system-settings/admin-extension/extension-panel/extension-panel.component";
 import {ExtensionService} from "./system-settings/admin-extension/extension.service";
 import {FlexLayoutModule} from '@angular/flex-layout';
-import {FooterComponent} from './footer/footer.component';
+import {FooterComponent} from './window/footer/footer.component';
 import {FormsModule, ReactiveFormsModule} from '@angular/forms';
 import {GlobalLookups} from './common/global-lookups';
 import {HttpClient, HttpClientModule, HttpClientXsrfModule} from '@angular/common/http';
@@ -101,8 +101,8 @@ import {ServiceMetadataWizardDialogComponent} from './service-group-edit/service
 import {SidenavComponent} from './window/sidenav/sidenav.component';
 import {SmlIntegrationService} from "./system-settings/domain/sml-integration.service";
 import {SmpInfoService} from './app-info/smp-info.service';
-import {SpacerComponent} from "./common/spacer/spacer.component";
-import {SpinnerComponent} from './common/spinner/spinner.component';
+import {SpacerComponent} from "./common/components/spacer/spacer.component";
+import {SpinnerComponent} from './common/components/spinner/spinner.component';
 import {ThemeService} from "./common/theme-service/theme.service";
 import {ToolbarComponent} from "./window/toolbar/toolbar.component";
 import {UserAccessTokensComponent} from "./user-settings/user-access-tokens/user-access-tokens.component";
@@ -127,12 +127,12 @@ import {
 } from "@angular-material-components/moment-adapter";
 import {
   DomainMemberPanelComponent
-} from "./system-settings/admin-domain/domain-member-panel/domain-member-panel.component";
+} from "./common/panels/domain-member-panel/domain-member-panel.component";
 import {
   MemberDialogComponent
-} from "./system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component";
+} from "./common/panels/domain-member-panel/member-dialog/member-dialog.component";
 import {MatAutocompleteModule} from "@angular/material/autocomplete";
-import {MembershipService} from "./system-settings/admin-domain/domain-member-panel/membership.service";
+import {MembershipService} from "./common/panels/domain-member-panel/membership.service";
 import {AdminUserComponent} from "./system-settings/admin-users/admin-user.component";
 import {AdminUserService} from "./system-settings/admin-users/admin-user.service";
 import {
@@ -141,6 +141,7 @@ import {
 import {EditDomainComponent} from "./edit/edit-domain/edit-domain.component";
 import {EditDomainService} from "./edit/edit-domain/edit-domain.service";
 import {SmpFieldErrorComponent} from "./common/components/smp-field-error/smp-field-error.component";
+import {DomainGroupComponent} from "./edit/edit-domain/domain-group-panel/domain-group.component";
 
 
 @NgModule({
@@ -173,6 +174,7 @@ import {SmpFieldErrorComponent} from "./common/components/smp-field-error/smp-fi
     DomainPanelComponent,
     DomainSmlIntegrationPanelComponent,
     DomainDetailsDialogComponent,
+    DomainGroupComponent,
     DomainMemberPanelComponent,
     DomainResourceTypePanelComponent,
     DomainSelectorComponent,
diff --git a/smp-angular/src/app/common/spacer/spacer.component.ts b/smp-angular/src/app/common/components/spacer/spacer.component.ts
similarity index 100%
rename from smp-angular/src/app/common/spacer/spacer.component.ts
rename to smp-angular/src/app/common/components/spacer/spacer.component.ts
diff --git a/smp-angular/src/app/common/spinner/spinner.component.ts b/smp-angular/src/app/common/components/spinner/spinner.component.ts
similarity index 100%
rename from smp-angular/src/app/common/spinner/spinner.component.ts
rename to smp-angular/src/app/common/components/spinner/spinner.component.ts
diff --git a/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts b/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts
index afb3f4f785928f14e2dba1467275143525e6b801..a1d14ea1918d66e92ab9ae2e38076053f354cf4e 100644
--- a/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts
+++ b/smp-angular/src/app/common/dialogs/access-token-generation-dialog/access-token-generation-dialog.component.ts
@@ -7,7 +7,7 @@ import {UserDetailsService} from "../../../system-settings/user/user-details-dia
 import {AccessTokenRo} from "./access-token-ro.model";
 import {SecurityService} from "../../../security/security.service";
 import {SmpConstants} from "../../../smp.constants";
-import {EntityStatus} from "../../model/entity-status.model";
+import {EntityStatus} from "../../enums/entity-status.enum";
 
 @Component({
   selector: 'smp-access-token-generation-dialog',
diff --git a/smp-angular/src/app/common/model/entity-status.model.ts b/smp-angular/src/app/common/enums/entity-status.enum.ts
similarity index 100%
rename from smp-angular/src/app/common/model/entity-status.model.ts
rename to smp-angular/src/app/common/enums/entity-status.enum.ts
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-ro.model.ts b/smp-angular/src/app/common/model/domain-ro.model.ts
similarity index 74%
rename from smp-angular/src/app/system-settings/admin-domain/domain-ro.model.ts
rename to smp-angular/src/app/common/model/domain-ro.model.ts
index f80a78cf64614ad3766c8950cb34821a7ca6af67..8b2193d866c8a4fae6b1b6b254b2e98ad5acf834 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-ro.model.ts
+++ b/smp-angular/src/app/common/model/domain-ro.model.ts
@@ -1,5 +1,5 @@
-import {SearchTableEntity} from '../../common/search-table/search-table-entity.model';
-import {VisibilityEnum} from "../../common/enums/visibility.enum";
+import {SearchTableEntity} from '../search-table/search-table-entity.model';
+import {VisibilityEnum} from "../enums/visibility.enum";
 
 export interface DomainRo extends SearchTableEntity {
   domainId?: string;
diff --git a/smp-angular/src/app/common/model/group-ro.model.ts b/smp-angular/src/app/common/model/group-ro.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d17f8729281d25965cf5f882029cc0fd82a33767
--- /dev/null
+++ b/smp-angular/src/app/common/model/group-ro.model.ts
@@ -0,0 +1,13 @@
+
+import {MembershipRoleEnum} from "../enums/membership-role.enum";
+import {SearchTableEntity} from "../search-table/search-table-entity.model";
+import {MemberTypeEnum} from "../enums/member-type.enum";
+import {VisibilityEnum} from "../enums/visibility.enum";
+
+export interface GroupRo extends SearchTableEntity {
+
+  groupId?: string;
+  groupName: string;
+  groupDescription?: string;
+  visibility: VisibilityEnum;
+}
diff --git a/smp-angular/src/app/common/model/member-ro.model.ts b/smp-angular/src/app/common/model/member-ro.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..618e326fcbab2302486f00f6d78e261b6cac3c89
--- /dev/null
+++ b/smp-angular/src/app/common/model/member-ro.model.ts
@@ -0,0 +1,13 @@
+
+import {MembershipRoleEnum} from "../enums/membership-role.enum";
+import {SearchTableEntity} from "../search-table/search-table-entity.model";
+import {MemberTypeEnum} from "../enums/member-type.enum";
+
+export interface MemberRo extends SearchTableEntity {
+
+  memberId:string;
+  username:string;
+  memberOf:MemberTypeEnum;
+  fullName:string;
+  roleType:MembershipRoleEnum;
+}
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/table-result.model.ts b/smp-angular/src/app/common/model/table-result.model.ts
similarity index 100%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/table-result.model.ts
rename to smp-angular/src/app/common/model/table-result.model.ts
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.html b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.html
similarity index 100%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.html
rename to smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.html
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.scss b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.scss
similarity index 100%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.scss
rename to smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.scss
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.ts b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.ts
similarity index 88%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.ts
rename to smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.ts
index b085e301db45babf3ea7dcce2a4f7c8b748a3e0e..9b22863f6d95d6f22046eefd884d5e3e799876f4 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/domain-member-panel.component.ts
+++ b/smp-angular/src/app/common/panels/domain-member-panel/domain-member-panel.component.ts
@@ -1,18 +1,18 @@
 import {Component, EventEmitter, Input, Output, ViewChild,} from '@angular/core';
-import {DomainRo} from "../domain-ro.model";
+import {DomainRo} from "../../model/domain-ro.model";
 import {FormBuilder, FormControl, FormGroup} from "@angular/forms";
-import {AdminDomainService} from "../admin-domain.service";
-import {AlertMessageService} from "../../../common/alert-message/alert-message.service";
+import {AdminDomainService} from "../../../system-settings/admin-domain/admin-domain.service";
+import {AlertMessageService} from "../../alert-message/alert-message.service";
 import {MatDialog} from "@angular/material/dialog";
 import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard";
 import {MatPaginator, PageEvent} from "@angular/material/paginator";
-import {MemberRo} from "./member-ro.model";
+import {MemberRo} from "../../model/member-ro.model";
 import {finalize} from "rxjs/operators";
-import {TableResult} from "./table-result.model";
+import {TableResult} from "../../model/table-result.model";
 import {MemberDialogComponent} from "./member-dialog/member-dialog.component";
 import {MembershipService} from "./membership.service";
-import {MembershipRoleEnum} from "../../../common/enums/membership-role.enum";
-import {MemberTypeEnum} from "../../../common/enums/member-type.enum";
+import {MembershipRoleEnum} from "../../enums/membership-role.enum";
+import {MemberTypeEnum} from "../../enums/member-type.enum";
 
 
 @Component({
@@ -21,10 +21,8 @@ import {MemberTypeEnum} from "../../../common/enums/member-type.enum";
   styleUrls: ['./domain-member-panel.component.scss']
 })
 export class DomainMemberPanelComponent implements BeforeLeaveGuard {
-  @Output() onSaveSmlIntegrationDataEvent: EventEmitter<DomainRo> = new EventEmitter();
-  private _domain: DomainRo;
-
 
+  private _domain: DomainRo;
   domainForm: FormGroup;
 
   displayedColumns: string[] = ['username', 'fullName', 'roleType', 'memberOf'];
@@ -163,6 +161,7 @@ export class DomainMemberPanelComponent implements BeforeLeaveGuard {
   get domainNotSelected() {
     return !this._domain
   }
+
 }
 
 
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.css b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.css
similarity index 100%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.css
rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.css
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.html b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.html
similarity index 100%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.html
rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.html
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.ts b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.ts
similarity index 92%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.ts
rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.ts
index eafbf60c88b688fc782769f32710c4dd11a2ec69..e7fa0916ff7196716aca1096a69ae411e797d358 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/member-dialog.component.ts
+++ b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/member-dialog.component.ts
@@ -1,14 +1,14 @@
 import {Component, Inject, Input, OnInit} from '@angular/core';
 import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';
 import {FormBuilder, FormControl, FormGroup} from "@angular/forms";
-import {MembershipRoleEnum} from "../../../../common/enums/membership-role.enum";
+import {MembershipRoleEnum} from "../../../enums/membership-role.enum";
 import {Observable} from "rxjs";
 import {SearchUserRo} from "./search-user-ro.model";
 import {MembershipService} from "../membership.service";
-import {MemberRo} from "../member-ro.model";
-import {DomainRo} from "../../domain-ro.model";
-import {MemberTypeEnum} from "../../../../common/enums/member-type.enum";
-import {AlertMessageService} from "../../../../common/alert-message/alert-message.service";
+import {MemberRo} from "../../../model/member-ro.model";
+import {DomainRo} from "../../../model/domain-ro.model";
+import {MemberTypeEnum} from "../../../enums/member-type.enum";
+import {AlertMessageService} from "../../../alert-message/alert-message.service";
 
 
 @Component({
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/search-user-ro.model.ts b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/search-user-ro.model.ts
similarity index 56%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/search-user-ro.model.ts
rename to smp-angular/src/app/common/panels/domain-member-panel/member-dialog/search-user-ro.model.ts
index 84ff26cd3fd362fee3e348aa14841c4dfbbf1804..4b96bc26228ac850015a897dfb4f64c81328b1dc 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-dialog/search-user-ro.model.ts
+++ b/smp-angular/src/app/common/panels/domain-member-panel/member-dialog/search-user-ro.model.ts
@@ -1,4 +1,4 @@
-import {SearchTableEntity} from "../../../../common/search-table/search-table-entity.model";
+import {SearchTableEntity} from "../../../search-table/search-table-entity.model";
 
 export interface SearchUserRo extends SearchTableEntity {
   userId: string,
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/membership.service.ts b/smp-angular/src/app/common/panels/domain-member-panel/membership.service.ts
similarity index 88%
rename from smp-angular/src/app/system-settings/admin-domain/domain-member-panel/membership.service.ts
rename to smp-angular/src/app/common/panels/domain-member-panel/membership.service.ts
index 17a8531d0e776147e81f8117e3590d7738470276..ba50f8dd3672aa69cf0494b60850dc16ff6aeb41 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/membership.service.ts
+++ b/smp-angular/src/app/common/panels/domain-member-panel/membership.service.ts
@@ -1,15 +1,15 @@
 import {Injectable} from '@angular/core';
 import {Observable} from 'rxjs';
-import {SearchTableResult} from "../../../common/search-table/search-table-result.model";
+import {SearchTableResult} from "../../search-table/search-table-result.model";
 import {User} from "../../../security/user.model";
 import {HttpClient, HttpParams} from "@angular/common/http";
 import {SmpConstants} from "../../../smp.constants";
 import {SecurityService} from "../../../security/security.service";
-import {AlertMessageService} from "../../../common/alert-message/alert-message.service";
-import {MemberRo} from "./member-ro.model";
-import {TableResult} from "./table-result.model";
+import {AlertMessageService} from "../../alert-message/alert-message.service";
+import {MemberRo} from "../../model/member-ro.model";
+import {TableResult} from "../../model/table-result.model";
 import {SearchUserRo} from "./member-dialog/search-user-ro.model";
-import {MembershipRoleEnum} from "../../../common/enums/membership-role.enum";
+import {MembershipRoleEnum} from "../../enums/membership-role.enum";
 
 
 @Injectable()
diff --git a/smp-angular/src/app/common/search-table/search-table-entity.model.ts b/smp-angular/src/app/common/search-table/search-table-entity.model.ts
index 7f1d89cbdcec3fcb69144b5b7bd1e99bd4d62781..92b09f28fa73142c74541133385c46fc7718c0c2 100644
--- a/smp-angular/src/app/common/search-table/search-table-entity.model.ts
+++ b/smp-angular/src/app/common/search-table/search-table-entity.model.ts
@@ -1,4 +1,4 @@
-import {EntityStatus} from '../model/entity-status.model';
+import {EntityStatus} from '../enums/entity-status.enum';
 
 export interface SearchTableEntity {
   id?: number;
diff --git a/smp-angular/src/app/common/search-table/search-table.component.ts b/smp-angular/src/app/common/search-table/search-table.component.ts
index 53451841dabfcb0fffb678433a6823056dbf5b63..b1d76afab9c262579ddc33983f652b1a6337b606 100644
--- a/smp-angular/src/app/common/search-table/search-table.component.ts
+++ b/smp-angular/src/app/common/search-table/search-table.component.ts
@@ -8,7 +8,7 @@ import {RowLimiter} from '../row-limiter/row-limiter.model';
 import {SearchTableController} from './search-table-controller';
 import {finalize} from 'rxjs/operators';
 import {SearchTableEntity} from './search-table-entity.model';
-import {EntityStatus} from '../model/entity-status.model';
+import {EntityStatus} from '../enums/entity-status.enum';
 import {CancelDialogComponent} from '../dialogs/cancel-dialog/cancel-dialog.component';
 import {SaveDialogComponent} from '../dialogs/save-dialog/save-dialog.component';
 import {DownloadService} from '../../download/download.service';
diff --git a/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.html b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..bb6abd3c1068032a45e18094a4233d86387a6628
--- /dev/null
+++ b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.html
@@ -0,0 +1,80 @@
+  <div id="domain-group-panel" class="mat-elevation-z2">
+    <mat-toolbar>
+      <mat-toolbar-row>
+        <button id="createButton" mat-raised-button (click)="onAddButtonClicked()" color="primary"
+                [disabled]="domainNotSelected"
+        >
+          <mat-icon>add</mat-icon>
+          <span>Create group</span>
+        </button>
+        <button id="editButton" mat-raised-button (click)="onEditSelectedButtonClicked()" color="primary"
+                [disabled]="!groupSelected">
+          <mat-icon>edit</mat-icon>
+          <span>Edit selected member</span>
+        </button>
+        <button id="deleteButton" mat-raised-button (click)="onDeleteSelectedButtonClicked()" color="primary"
+                [disabled]="!groupSelected">
+          <mat-icon>delete</mat-icon>
+          <span>Delete selected group</span>
+        </button>
+      </mat-toolbar-row>
+    </mat-toolbar>
+    <h3>Domain members</h3>
+    <div class="group-container mat-elevation-z2">
+      <div class="group-loading-shade"
+           *ngIf="isLoadingResults">
+        <mat-spinner *ngIf="isLoadingResults"></mat-spinner>
+      </div>
+
+      <div class="group-table-container">
+
+        <mat-form-field id="group-filter" >
+          <mat-label>Member filter</mat-label>
+          <input matInput (keyup)="applyGroupFilter($event)"
+                 placeholder="Member filter"
+                 [disabled]="domainNotSelected"
+                 #inputDomainMemberFilter>
+        </mat-form-field>
+
+        <table  class="mat-elevation-z2"  mat-table [dataSource]="dataSource">
+
+          <ng-container matColumnDef="groupName">
+            <th mat-header-cell *matHeaderCellDef>Group name</th>
+            <td mat-cell *matCellDef="let row">{{row.groupName}}</td>
+          </ng-container>
+
+          <ng-container matColumnDef="visibility">
+            <th mat-header-cell *matHeaderCellDef>Visibility</th>
+            <td mat-cell *matCellDef="let row">{{row.visibility}}</td>
+          </ng-container>
+
+          <ng-container matColumnDef="groupDescription">
+            <th mat-header-cell *matHeaderCellDef>Description</th>
+            <td mat-cell *matCellDef="let row">{{row.groupDescription}}</td>
+          </ng-container>
+
+          <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
+          <tr mat-row *matRowDef="let odd = odd; let row; columns: displayedColumns;"
+              (click)="onGroupSelected(row)"
+              [ngClass]="{'datatable-row-selected': row==selectedGroup,'datatable-row-odd': odd}"
+          ></tr>
+
+          <tr class="mat-row" *matNoDataRow>
+            <td *ngIf="inputDomainMemberFilter.value;else noDataFound" class="mat-cell" colspan="2">No direct members matching the filter
+              "{{inputDomainMemberFilter.value}}"
+            </td>
+            <ng-template #noDataFound>
+              <td class="mat-cell" colspan="2">No direct members for the domain</td>
+            </ng-template>
+          </tr>
+        </table>
+      </div>
+
+      <mat-paginator [pageSize]="5"
+                     [pageSizeOptions]="[5, 10, 25]"
+                     [disabled]="domainNotSelected"
+                     aria-label="Select pages"></mat-paginator>
+    </div>
+
+  </div>
+
diff --git a/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.scss b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..1942ccc03d0177684278ed8f0cb0f6f31052b145
--- /dev/null
+++ b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.scss
@@ -0,0 +1,20 @@
+#domain-group-panel {
+  padding: 1em;
+}
+group-loading-shade {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 56px;
+  right: 0;
+  background: rgba(0, 0, 0, 0.15);
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+#group-filter {
+  width: 100%;
+  padding-top: 1em;
+}
diff --git a/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.ts b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c9e1589681699170e4982ab30d1ac3ba666c267
--- /dev/null
+++ b/smp-angular/src/app/edit/edit-domain/domain-group-panel/domain-group.component.ts
@@ -0,0 +1,132 @@
+import {Component, Input,} from '@angular/core';
+import {FormBuilder} from "@angular/forms";
+import {AlertMessageService} from "../../../common/alert-message/alert-message.service";
+import {MatDialog} from "@angular/material/dialog";
+import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard";
+import {DomainRo} from "../../../common/model/domain-ro.model";
+import {finalize} from "rxjs/operators";
+import {MatTableDataSource} from "@angular/material/table";
+import {GroupRo} from "../../../common/model/group-ro.model";
+import {EditDomainService} from "../edit-domain.service";
+
+@Component({
+  selector: 'domain-group-panel',
+  templateUrl: './domain-group.component.html',
+  styleUrls: ['./domain-group.component.scss']
+})
+export class DomainGroupComponent implements BeforeLeaveGuard {
+
+
+  private _domain: DomainRo;
+
+  filter: any = {};
+  resultsLength = 0;
+  isLoadingResults = false;
+
+  displayedColumns: string[] = ['groupName', 'visibility', 'groupDescription'];
+  dataSource: MatTableDataSource<GroupRo> = new MatTableDataSource();
+
+  selectedGroup: GroupRo;
+
+  constructor(private editDomainService: EditDomainService,
+              private alertService: AlertMessageService,
+              private dialog: MatDialog,
+              private formBuilder: FormBuilder) {
+  }
+
+  ngOnInit(): void {
+    // filter predicate for search the domain
+    this.dataSource.filterPredicate =
+      (data: GroupRo, filter: string) => {
+        return !filter || -1 != data.groupName.toLowerCase().indexOf(filter.trim().toLowerCase())
+      };
+  }
+
+  get domain(): DomainRo {
+    // no changes for the domain data
+    return this._domain;
+  }
+
+  @Input() set domain(value: DomainRo) {
+    this._domain = value;
+
+    if (!!value) {
+      this.loadTableData();
+    } else {
+      this.isLoadingResults = false;
+    }
+  }
+
+  loadTableData() {
+    if (!this._domain) {
+      this.dataSource.data = null;
+      return;
+    }
+    this.isLoadingResults = true;
+    this.editDomainService.getDomainGroupsObservable(this._domain.domainId)
+      .pipe(
+        finalize(() => {
+          this.isLoadingResults = false;
+        }))
+      .subscribe((result: GroupRo[]) => {
+          this.dataSource.data = result;
+          this.isLoadingResults = false;
+        }, (error) => {
+          this.alertService.error(error.error?.errorDescription)
+        }
+      );
+  }
+
+
+  isDirty(): boolean {
+    return false;
+  }
+
+  onAddButtonClicked() {
+  };
+
+  onEditSelectedButtonClicked() {
+  };
+
+  onDeleteSelectedButtonClicked() {
+    if (!this._domain || !this._domain.domainId) {
+      return;
+    }
+    if (!this.selectedGroup || !this.selectedGroup.groupId) {
+      return;
+    }
+
+    this.editDomainService.deleteDomainGroupObservable(this._domain.domainId, this.selectedGroup.groupId).subscribe((result: GroupRo) => {
+        if (result) {
+          this.alertService.success("Domain group [" + result.groupName + "] deleted");
+        }
+      }, (error) => {
+        this.alertService.error(error.error?.errorDescription)
+    }
+    )
+  };
+
+  onGroupSelected(group: GroupRo) {
+    this.selectedGroup = group;
+  }
+
+
+  get groupSelected(): boolean {
+    return !!this.selectedGroup;
+  }
+
+  get domainNotSelected() {
+    return !this._domain
+  }
+
+  applyGroupFilter(event: Event) {
+    const filterValue = (event.target as HTMLInputElement).value;
+    this.dataSource.filter = filterValue.trim().toLowerCase();
+
+    if (this.dataSource.paginator) {
+      this.dataSource.paginator.firstPage();
+    }
+
+  }
+
+}
diff --git a/smp-angular/src/app/edit/edit-domain/edit-domain.component.html b/smp-angular/src/app/edit/edit-domain/edit-domain.component.html
index 0dfc79ad725d11536a3c2d890b28644c63a1da14..9c6e21dc2a13ed8d166c203d790b4b2f99ee4aeb 100644
--- a/smp-angular/src/app/edit/edit-domain/edit-domain.component.html
+++ b/smp-angular/src/app/edit/edit-domain/edit-domain.component.html
@@ -6,12 +6,16 @@
 
 
     <mat-tab-group #domainTabs style="height: 100%" >
-
       <mat-tab label="Members">
         <domain-member-panel #domainMemberPanelComponent
                              [domain]="selected"
         ></domain-member-panel>
       </mat-tab>
+      <mat-tab label="Group">
+        <domain-group-panel #domainGroupPanelComponent
+                             [domain]="selected"
+        ></domain-group-panel>
+      </mat-tab>
     </mat-tab-group>
   </data-panel>
 </div>
diff --git a/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts b/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts
index 9a13c49003b3d70cfc5a785a717f95e1a7705da3..97b3c37b38396648a425d0da61a101d94e5e5510 100644
--- a/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts
+++ b/smp-angular/src/app/edit/edit-domain/edit-domain.component.ts
@@ -4,7 +4,7 @@ import {EditDomainService} from "./edit-domain.service";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {MatDialog} from "@angular/material/dialog";
 import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard";
-import {DomainRo} from "../../system-settings/admin-domain/domain-ro.model";
+import {DomainRo} from "../../common/model/domain-ro.model";
 import {CancelDialogComponent} from "../../common/dialogs/cancel-dialog/cancel-dialog.component";
 import {MatPaginator} from "@angular/material/paginator";
 import {MatSort} from "@angular/material/sort";
diff --git a/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts b/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts
index 58d2b7907fc3c661bc5dafdfa9fe3cbd4f5b8aa5..2cfb18dc38cc657ed04f14dfac89271b59a27222 100644
--- a/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts
+++ b/smp-angular/src/app/edit/edit-domain/edit-domain.service.ts
@@ -6,7 +6,8 @@ import {SecurityService} from "../../security/security.service";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {User} from "../../security/user.model";
 import {SmpConstants} from "../../smp.constants";
-import {DomainRo} from "../../system-settings/admin-domain/domain-ro.model";
+import {DomainRo} from "../../common/model/domain-ro.model";
+import {GroupRo} from "../../common/model/group-ro.model";
 
 @Injectable()
 export class EditDomainService {
@@ -31,6 +32,24 @@ export class EditDomainService {
   }
 
 
+  public getDomainGroupsObservable(domainId: string): Observable<GroupRo[]>
+  {
+    const currentUser: User = this.securityService.getCurrentUser();
+    return this.http.get<GroupRo[]>(SmpConstants.REST_PUBLIC_GROUP_DOMAIN
+      .replace(SmpConstants.PATH_PARAM_ENC_USER_ID, currentUser.userId)
+      .replace(SmpConstants.PATH_PARAM_ENC_DOMAIN_ID, domainId));
+  }
+
+  public deleteDomainGroupObservable(domainId: string, groupId:string ): Observable<GroupRo>
+  {
+    const currentUser: User = this.securityService.getCurrentUser();
+    return this.http.delete<GroupRo>(SmpConstants.REST_PUBLIC_GROUP_DOMAIN_DELETE
+      .replace(SmpConstants.PATH_PARAM_ENC_USER_ID, currentUser.userId)
+      .replace(SmpConstants.PATH_PARAM_ENC_DOMAIN_ID, domainId)
+      .replace(SmpConstants.PATH_PARAM_ENC_GROUP_ID, groupId));
+  }
+
+
   notifyDomainsUpdated(res: DomainRo[]) {
     this.domainUpdateSubject.next(res);
   }
diff --git a/smp-angular/src/app/security/credential.model.ts b/smp-angular/src/app/security/credential.model.ts
index 1abb73f17c2ab70f3a03b2825125d9cd2959a632..9e0d8cade73bd28e9b7a30e82111d4061e750121 100644
--- a/smp-angular/src/app/security/credential.model.ts
+++ b/smp-angular/src/app/security/credential.model.ts
@@ -1,4 +1,4 @@
-import {EntityStatus} from "../common/model/entity-status.model";
+import {EntityStatus} from "../common/enums/entity-status.enum";
 import {CertificateRo} from "../system-settings/user/certificate-ro.model";
 
 export interface CredentialRo {
diff --git a/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts b/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts
index 9812820ac85fbe8d987b51bee7ec7a200550721e..e2f58f22f263805dd5c9ba7e53e4d181a49181bc 100644
--- a/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts
+++ b/smp-angular/src/app/service-group-edit/service-group-details-dialog/service-group-details-dialog.component.ts
@@ -5,12 +5,12 @@ import {HttpClient} from "@angular/common/http";
 import {SmpConstants} from "../../smp.constants";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {AbstractControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {ServiceGroupEditRo} from "../service-group-edit-ro.model";
 import {GlobalLookups} from "../../common/global-lookups";
 import {ServiceGroupExtensionWizardDialogComponent} from "../service-group-extension-wizard-dialog/service-group-extension-wizard-dialog.component";
 import {ServiceGroupValidationRo} from "./service-group-validation-edit-ro.model";
-import {DomainRo} from "../../system-settings/admin-domain/domain-ro.model";
+import {DomainRo} from "../../common/model/domain-ro.model";
 import {ServiceGroupDomainEditRo} from "../service-group-domain-edit-ro.model";
 import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component";
 import {SecurityService} from "../../security/security.service";
diff --git a/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts b/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts
index 8045fea20c4fda4ca8a622aa2c444b41eda80770..75133bd7f12468da8f34899226d12e869bc8c45d 100644
--- a/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts
+++ b/smp-angular/src/app/service-group-edit/service-group-edit-controller.ts
@@ -2,7 +2,7 @@ import {SearchTableController} from '../common/search-table/search-table-control
 import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
 import {ServiceGroupDetailsDialogComponent} from './service-group-details-dialog/service-group-details-dialog.component';
 import {ServiceGroupEditRo} from './service-group-edit-ro.model';
-import {EntityStatus} from '../common/model/entity-status.model';
+import {EntityStatus} from '../common/enums/entity-status.enum';
 import {ServiceMetadataEditRo} from "./service-metadata-edit-ro.model";
 import {ServiceGroupMetadataDialogComponent} from "./service-group-metadata-dialog/service-group-metadata-dialog.component";
 import {of} from "rxjs/internal/observable/of";
diff --git a/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts b/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts
index 9e5b8765fb9b163565e2d7bbcece8ab3037f43de..6795ba86cecb82f66ec57ec7bc1c7a74b305588f 100644
--- a/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts
+++ b/smp-angular/src/app/service-group-edit/service-group-edit-ro.model.ts
@@ -2,7 +2,7 @@ import {ServiceMetadataEditRo} from './service-metadata-edit-ro.model';
 import {SearchTableEntity} from "../common/search-table/search-table-entity.model";
 import {UserRo} from "../system-settings/user/user-ro.model";
 import {ServiceGroupDomainEditRo} from "./service-group-domain-edit-ro.model";
-import {EntityStatus} from "../common/model/entity-status.model";
+import {EntityStatus} from "../common/enums/entity-status.enum";
 
 export interface ServiceGroupEditRo extends SearchTableEntity {
   id: number;
diff --git a/smp-angular/src/app/service-group-edit/service-group-edit.component.ts b/smp-angular/src/app/service-group-edit/service-group-edit.component.ts
index 9c8e90352fc4e58a6da8b2233e02af775c7819f3..f34997b89f38fa4390e06a70e5d979554e6c97c6 100644
--- a/smp-angular/src/app/service-group-edit/service-group-edit.component.ts
+++ b/smp-angular/src/app/service-group-edit/service-group-edit.component.ts
@@ -13,7 +13,7 @@ import {AlertMessageService} from '../common/alert-message/alert-message.service
 import {ServiceGroupEditController} from './service-group-edit-controller';
 import {HttpClient} from '@angular/common/http';
 import {SmpConstants} from "../smp.constants";
-import {EntityStatus} from "../common/model/entity-status.model";
+import {EntityStatus} from "../common/enums/entity-status.enum";
 import {SearchTableComponent} from "../common/search-table/search-table.component";
 import {GlobalLookups} from "../common/global-lookups";
 import {SecurityService} from "../security/security.service";
diff --git a/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts b/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts
index f11284629eb453a6954aa5245f76ed2dba10b04f..e9af19b5f8ca9fe87c1d28f65bda276791cd7801 100644
--- a/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts
+++ b/smp-angular/src/app/service-group-edit/service-group-metadata-dialog/service-group-metadata-dialog.component.ts
@@ -2,7 +2,7 @@ import {Component, Inject, OnInit, ViewChild} from '@angular/core';
 import {MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
 import {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {ServiceMetadataEditRo} from "../service-metadata-edit-ro.model";
 import {GlobalLookups} from "../../common/global-lookups";
 import {ServiceMetadataWizardDialogComponent} from "../service-metadata-wizard-dialog/service-metadata-wizard-dialog.component";
diff --git a/smp-angular/src/app/smp.constants.ts b/smp-angular/src/app/smp.constants.ts
index 1d0f5db76603877c9626347ce63198bf05abd1aa..ab341c4bd5ce42dde8c79531787e425827b31dc0 100644
--- a/smp-angular/src/app/smp.constants.ts
+++ b/smp-angular/src/app/smp.constants.ts
@@ -19,6 +19,7 @@ export class SmpConstants {
   public static readonly PATH_PARAM_ENC_USER_ID = '{user-id}';
   public static readonly PATH_PARAM_ENC_DOMAIN_ID = '{domain-id}';
   public static readonly PATH_PARAM_ENC_MEMBER_ID = '{member-id}';
+  public static readonly PATH_PARAM_ENC_GROUP_ID = '{group-id}';
   public static readonly PATH_PARAM_CERT_ALIAS = '{cert-alias}';
   public static readonly PATH_PARAM_ENC_CREDENTIAL_ID = '{credential-id}';
   public static readonly PATH_PARAM_ENC_MANAGED_USER_ID = '{managed-user-id}';
@@ -27,15 +28,19 @@ export class SmpConstants {
   public static readonly PATH_PARAM_KEYSTORE_PWD = '{keystore-pwd}';
   public static readonly PATH_PARAM_KEYSTORE_TYPE = '{keystore-type}';
 
+  public static readonly PATH_RESOURCE_TYPE_DOMAIN = 'domain';
+  public static readonly PATH_RESOURCE_TYPE_MEMBER = 'member';
+  public static readonly PATH_RESOURCE_TYPE_GROUP = 'group';
+
   //------------------------------
   // public endpoints
   public static readonly REST_PUBLIC = 'public/rest/';
   public static readonly REST_INTERNAL = 'internal/rest/';
   public static readonly REST_PUBLIC_SEARCH_SERVICE_GROUP = SmpConstants.REST_PUBLIC + SmpConstants.PATH_ACTION_SEARCH;
-  public static readonly REST_PUBLIC_DOMAIN = SmpConstants.REST_PUBLIC + 'domain';
+  public static readonly REST_PUBLIC_DOMAIN = SmpConstants.REST_PUBLIC + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN;
 
   public static readonly REST_PUBLIC_DOMAIN_EDIT = SmpConstants.REST_PUBLIC_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID;
-  public static readonly REST_PUBLIC_DOMAIN_MEMBERS = SmpConstants.REST_PUBLIC_DOMAIN_EDIT+
+  public static readonly REST_PUBLIC_DOMAIN_MEMBERS = SmpConstants.REST_PUBLIC_DOMAIN_EDIT +
     '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + "members";
   public static readonly REST_PUBLIC_DOMAIN_MEMBERS_ADD = SmpConstants.REST_PUBLIC_DOMAIN_EDIT
     + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + "member";
@@ -44,6 +49,20 @@ export class SmpConstants {
     + '/' + SmpConstants.PATH_PARAM_ENC_MEMBER_ID + '/' + SmpConstants.PATH_ACTION_DELETE;
 
 
+  public static readonly REST_PUBLIC_GROUP_EDIT = SmpConstants.REST_PUBLIC + SmpConstants.PATH_RESOURCE_TYPE_GROUP + '/' + SmpConstants.PATH_PARAM_ENC_USER_ID;
+  public static readonly REST_PUBLIC_GROUP_DOMAIN = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' +
+    SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID;
+
+  public static readonly REST_PUBLIC_GROUP_DOMAIN_CREATE = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' +
+    SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_CREATE;
+
+  public static readonly REST_PUBLIC_GROUP_DOMAIN_DELETE = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' + SmpConstants.PATH_PARAM_ENC_GROUP_ID + '/' +
+    SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_DELETE;
+
+  public static readonly REST_PUBLIC_GROUP_DOMAIN_UPDATE = SmpConstants.REST_PUBLIC_GROUP_EDIT + '/' + SmpConstants.PATH_PARAM_ENC_GROUP_ID + '/' +
+    SmpConstants.PATH_RESOURCE_TYPE_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE;
+
+
   public static readonly REST_PUBLIC_APPLICATION_INFO = SmpConstants.REST_PUBLIC + 'application/info';
   public static readonly REST_PUBLIC_APPLICATION_CONFIG = SmpConstants.REST_PUBLIC + 'application/config';
   // user public services
@@ -77,26 +96,26 @@ export class SmpConstants {
   //------------------------------
   // internal endpoints
   public static readonly REST_INTERNAL_ALERT_MANAGE = SmpConstants.REST_INTERNAL + 'alert';
-  public static readonly REST_INTERNAL_DOMAIN_MANAGE_DEPRECATED = SmpConstants.REST_INTERNAL + 'domain';
+  public static readonly REST_INTERNAL_DOMAIN_MANAGE_DEPRECATED = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN;
 
-  public static readonly REST_INTERNAL_DOMAIN_MANAGE = SmpConstants.REST_INTERNAL + 'domain' +
+  public static readonly REST_INTERNAL_DOMAIN_MANAGE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN +
     '/' + SmpConstants.PATH_PARAM_ENC_USER_ID;
 
-  public static readonly REST_INTERNAL_DOMAIN_MANAGE_DELETE = SmpConstants.REST_INTERNAL + 'domain' +
+  public static readonly REST_INTERNAL_DOMAIN_MANAGE_DELETE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN +
     '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_DELETE;
 
-  public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE = SmpConstants.REST_INTERNAL + 'domain' +
+  public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN +
     '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE;
 
-  public static readonly REST_INTERNAL_DOMAIN_MANAGE_CREATE = SmpConstants.REST_INTERNAL + 'domain' +
+  public static readonly REST_INTERNAL_DOMAIN_MANAGE_CREATE = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN +
     '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_ACTION_CREATE;
 
 
-  public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE_SML_INTEGRATION = SmpConstants.REST_INTERNAL + 'domain' +
+  public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE_SML_INTEGRATION = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN +
     '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE_SML_INTEGRATION;
 
 
-  public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE_RESOURCE_TYPES = SmpConstants.REST_INTERNAL + 'domain' +
+  public static readonly REST_INTERNAL_DOMAIN_MANAGE_UPDATE_RESOURCE_TYPES = SmpConstants.REST_INTERNAL + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN +
     '/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID + '/' + SmpConstants.PATH_ACTION_UPDATE_RESOURCE_TYPES;
 
   public static readonly REST_INTERNAL_EXTENSION_MANAGE = SmpConstants.REST_INTERNAL + 'extension';
diff --git a/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts b/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts
index fc99742e94006ab32d082f7d5a1afeeeb5075d45..106d1d3b374fc7044b10e48b53f63a33f9ae0326 100644
--- a/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts
+++ b/smp-angular/src/app/system-settings/admin-domain/admin-domain.component.ts
@@ -6,8 +6,8 @@ import {AdminDomainService} from "./admin-domain.service";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component";
 import {MatDialog} from "@angular/material/dialog";
-import {EntityStatus} from "../../common/model/entity-status.model";
-import {DomainRo} from "./domain-ro.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
+import {DomainRo} from "../../common/model/domain-ro.model";
 import {AdminKeystoreService} from "../admin-keystore/admin-keystore.service";
 import {CertificateRo} from "../user/certificate-ro.model";
 import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard";
diff --git a/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts b/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts
index 3c9969c09e73bb91b6a44f3e89bac8f7d836f82b..a17f61366cb83f6533658ea62c5c52265740289e 100644
--- a/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts
+++ b/smp-angular/src/app/system-settings/admin-domain/admin-domain.service.ts
@@ -4,7 +4,7 @@ import {Observable, Subject} from 'rxjs';
 import {HttpClient} from '@angular/common/http';
 import {SecurityService} from "../../security/security.service";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
-import {DomainRo} from "./domain-ro.model";
+import {DomainRo} from "../../common/model/domain-ro.model";
 import {User} from "../../security/user.model";
 import {SmpConstants} from "../../smp.constants";
 
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-ro.model.ts b/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-ro.model.ts
deleted file mode 100644
index 762f7f04e1368882333430e522d5985b69d4d8bf..0000000000000000000000000000000000000000
--- a/smp-angular/src/app/system-settings/admin-domain/domain-member-panel/member-ro.model.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-
-import {MembershipRoleEnum} from "../../../common/enums/membership-role.enum";
-import {SearchTableEntity} from "../../../common/search-table/search-table-entity.model";
-import {MemberTypeEnum} from "../../../common/enums/member-type.enum";
-
-export interface MemberRo extends SearchTableEntity {
-
-  memberId:string;
-  username:string;
-  memberOf:MemberTypeEnum;
-  fullName:string;
-  roleType:MembershipRoleEnum;
-}
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts b/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts
index eaac8abf2ac8fc346c816ad52d92685c5eb0ecff..9f162913111fc9bda6c0eb03761173284e14a1ec 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts
+++ b/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.ts
@@ -1,5 +1,5 @@
 import {Component, ElementRef, EventEmitter, Input, Output, ViewChild,} from '@angular/core';
-import {DomainRo} from "../domain-ro.model";
+import {DomainRo} from "../../../common/model/domain-ro.model";
 import {AbstractControl, FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms";
 import {AdminDomainService} from "../admin-domain.service";
 import {AlertMessageService} from "../../../common/alert-message/alert-message.service";
@@ -8,8 +8,6 @@ import {CertificateRo} from "../../user/certificate-ro.model";
 import {VisibilityEnum} from "../../../common/enums/visibility.enum";
 import {ResourceDefinitionRo} from "../../admin-extension/resource-definition-ro.model";
 import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard";
-import {UserRo} from "../../user/user-ro.model";
-
 
 @Component({
   selector: 'domain-panel',
@@ -122,12 +120,13 @@ export class DomainPanelComponent implements BeforeLeaveGuard {
     return this.isNewDomain() || this.domainForm?.dirty;
   }
 
-  get domainResourceTypes(){
-    if (!this._domain || !this._domain.resourceDefinitions){
+  get domainResourceTypes() {
+    if (!this._domain || !this._domain.resourceDefinitions) {
       return [];
     }
     return this.domiSMPResourceDefinitions.filter(resType => this._domain.resourceDefinitions.includes(resType.identifier))
   }
+
   get submitButtonEnabled(): boolean {
     return this.domainForm.valid && this.domainForm.dirty;
   }
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts b/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts
index f6879ded4ffc92973369be5a780ed8615f7255bf..7eb7f423055be7bf1f4e82dbde7767cf2d96493a 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts
+++ b/smp-angular/src/app/system-settings/admin-domain/domain-resource-type-panel/domain-resource-type-panel.component.ts
@@ -1,5 +1,5 @@
 import {Component, EventEmitter, Input, Output,} from '@angular/core';
-import {DomainRo} from "../domain-ro.model";
+import {DomainRo} from "../../../common/model/domain-ro.model";
 import {FormBuilder, FormControl, FormGroup} from "@angular/forms";
 import {ResourceDefinitionRo} from "../../admin-extension/resource-definition-ro.model";
 import {BeforeLeaveGuard} from "../../../window/sidenav/navigation-on-leave-guard";
diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts b/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts
index 9d71722ac830892ce9235cdaa0b4856b3b5f06bf..6bfa7a7099ccc3fba03d23e89dc78f5f269ef2c8 100644
--- a/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts
+++ b/smp-angular/src/app/system-settings/admin-domain/domain-sml-panel/domain-sml-integration-panel.component.ts
@@ -1,5 +1,5 @@
 import {Component, EventEmitter, Input, Output,} from '@angular/core';
-import {DomainRo} from "../domain-ro.model";
+import {DomainRo} from "../../../common/model/domain-ro.model";
 import {AbstractControl, FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms";
 import {AdminDomainService} from "../admin-domain.service";
 import {AlertMessageService} from "../../../common/alert-message/alert-message.service";
diff --git a/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts b/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts
index 7a7747c19d455eae73be0cf0310dab5e4e0b7b8a..c0472ba658886d487bba6e90aa101e20ef64597f 100644
--- a/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts
+++ b/smp-angular/src/app/system-settings/admin-extension/extension-ro.model.ts
@@ -1,4 +1,4 @@
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {ResourceDefinitionRo} from "./resource-definition-ro.model";
 
 export interface ExtensionRo {
diff --git a/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts b/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts
index bbb8cbb837966dfc3997e6e9ee23b44c4755650b..2288ae708b8d2d696f5e7a7ca0ae6254eeace4ea 100644
--- a/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts
+++ b/smp-angular/src/app/system-settings/admin-extension/resource-definition-ro.model.ts
@@ -1,4 +1,4 @@
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {SubresourceDefinitionRo} from "./subresource-definition-ro.model";
 
 export interface ResourceDefinitionRo {
diff --git a/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts b/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts
index fa01a786e6105c2cef5f2b55f1adbda6b90b1093..678ae7a9af846d21c90cd75b8f9933825e9bfaff 100644
--- a/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts
+++ b/smp-angular/src/app/system-settings/admin-extension/subresource-definition-ro.model.ts
@@ -1,4 +1,4 @@
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 
 export interface SubresourceDefinitionRo {
 
diff --git a/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts b/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts
index 476d091492bb193e32488c071ace90a40c47b948..0ddc6b7c1be8bb40790a8225163827c198c2bae9 100644
--- a/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts
+++ b/smp-angular/src/app/system-settings/admin-keystore/admin-keystore.component.ts
@@ -7,7 +7,7 @@ import {AdminKeystoreService} from "./admin-keystore.service";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component";
 import {MatDialog, MatDialogRef} from "@angular/material/dialog";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {KeystoreImportDialogComponent} from "./keystore-import-dialog/keystore-import-dialog.component";
 import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard";
 
diff --git a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts
index c6bd0bc0b8cfbe9d06fc966742e8306eb1de6821..76ed48daddaf050a036463befde8146d50a2bc8e 100644
--- a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts
+++ b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts
@@ -7,7 +7,7 @@ import {AdminTruststoreService} from "./admin-truststore.service";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component";
 import {MatDialog} from "@angular/material/dialog";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard";
 
 
diff --git a/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts b/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts
index 585c24a0997e17584ac902d0795bb25d1b250af6..a201f5ea5dd08e087ecfd271cee8bd17feb16c94 100644
--- a/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts
+++ b/smp-angular/src/app/system-settings/admin-users/admin-user.component.ts
@@ -5,9 +5,9 @@ import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dia
 import {MatDialog, MatDialogConfig, MatDialogRef} from "@angular/material/dialog";
 import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard";
 import {CancelDialogComponent} from "../../common/dialogs/cancel-dialog/cancel-dialog.component";
-import {SearchUserRo} from "../admin-domain/domain-member-panel/member-dialog/search-user-ro.model";
+import {SearchUserRo} from "../../common/panels/domain-member-panel/member-dialog/search-user-ro.model";
 import {AdminUserService} from "./admin-user.service";
-import {TableResult} from "../admin-domain/domain-member-panel/table-result.model";
+import {TableResult} from "../../common/model/table-result.model";
 import {finalize} from "rxjs/operators";
 import {UserRo} from "../user/user-ro.model";
 import {SecurityService} from "../../security/security.service";
diff --git a/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts b/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts
index a445a542fff5d71ad746ec7734aff25566047618..557935fcfbebf274cccd1576365497d5dfa35db9 100644
--- a/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts
+++ b/smp-angular/src/app/system-settings/admin-users/admin-user.service.ts
@@ -2,11 +2,10 @@ import {Injectable} from '@angular/core';
 import {Observable} from 'rxjs';
 import {HttpClient, HttpParams} from "@angular/common/http";
 import {SecurityService} from "../../security/security.service";
-import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {SearchTableResult} from "../../common/search-table/search-table-result.model";
 import {User} from "../../security/user.model";
-import {TableResult} from "../admin-domain/domain-member-panel/table-result.model";
-import {MemberRo} from "../admin-domain/domain-member-panel/member-ro.model";
+import {TableResult} from "../../common/model/table-result.model";
+import {MemberRo} from "../../common/model/member-ro.model";
 import {SmpConstants} from "../../smp.constants";
 import {UserRo} from "../user/user-ro.model";
 
diff --git a/smp-angular/src/app/system-settings/domain/domain-controller.ts b/smp-angular/src/app/system-settings/domain/domain-controller.ts
index e89b284f1f5992225413261f50734f1a5255372e..adc45188d723aa7416c8d8468efdbb035d402843 100644
--- a/smp-angular/src/app/system-settings/domain/domain-controller.ts
+++ b/smp-angular/src/app/system-settings/domain/domain-controller.ts
@@ -1,8 +1,8 @@
 import {SearchTableController} from '../../common/search-table/search-table-controller';
 import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
 import {DomainDetailsDialogComponent} from './domain-details-dialog/domain-details-dialog.component';
-import {DomainRo} from '../admin-domain/domain-ro.model';
-import {EntityStatus} from '../../common/model/entity-status.model';
+import {DomainRo} from '../../common/model/domain-ro.model';
+import {EntityStatus} from '../../common/enums/entity-status.enum';
 import {GlobalLookups} from "../../common/global-lookups";
 import {SearchTableValidationResult} from "../../common/search-table/search-table-validation-result.model";
 import {SearchTableEntity} from "../../common/search-table/search-table-entity.model";
diff --git a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.ts b/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.ts
index 74d8f06f1c780d5274ac570f40466acbfa1793c8..917a7e38af62e81dbaccf40277fd5cb36f7e2c9e 100644
--- a/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.ts
+++ b/smp-angular/src/app/system-settings/domain/domain-details-dialog/domain-details-dialog.component.ts
@@ -1,9 +1,9 @@
 import {Component, Inject} from '@angular/core';
 import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material/dialog';
 import {AbstractControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from "@angular/forms";
-import {DomainRo} from "../../admin-domain/domain-ro.model";
+import {DomainRo} from "../../../common/model/domain-ro.model";
 import {AlertMessageService} from "../../../common/alert-message/alert-message.service";
-import {EntityStatus} from "../../../common/model/entity-status.model";
+import {EntityStatus} from "../../../common/enums/entity-status.enum";
 import {GlobalLookups} from "../../../common/global-lookups";
 import {CertificateRo} from "../../user/certificate-ro.model";
 import {BreakpointObserver} from "@angular/cdk/layout";
diff --git a/smp-angular/src/app/system-settings/domain/domain-result.model.ts b/smp-angular/src/app/system-settings/domain/domain-result.model.ts
index 5800872e283f7c8dce20bb63ed9d75123174c05b..50cc6686d4766b101f4ec2ab8f39e140374c5898 100644
--- a/smp-angular/src/app/system-settings/domain/domain-result.model.ts
+++ b/smp-angular/src/app/system-settings/domain/domain-result.model.ts
@@ -1,4 +1,4 @@
-import {DomainRo} from '../admin-domain/domain-ro.model';
+import {DomainRo} from '../../common/model/domain-ro.model';
 
 export interface DomainResult {
   serviceEntities: Array<DomainRo>;
diff --git a/smp-angular/src/app/system-settings/domain/domain.component.ts b/smp-angular/src/app/system-settings/domain/domain.component.ts
index fe627f9965571905732d7fc86826bdb6d5fa75c8..e52fe0804a0bf0c13718f5cdfca262931b78482e 100644
--- a/smp-angular/src/app/system-settings/domain/domain.component.ts
+++ b/smp-angular/src/app/system-settings/domain/domain.component.ts
@@ -17,9 +17,9 @@ import {SmpConstants} from "../../smp.constants";
 import {GlobalLookups} from "../../common/global-lookups";
 import {SearchTableComponent} from "../../common/search-table/search-table.component";
 import {SecurityService} from "../../security/security.service";
-import {DomainRo} from "../admin-domain/domain-ro.model";
+import {DomainRo} from "../../common/model/domain-ro.model";
 import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {KeystoreEditDialogComponent} from "./keystore-edit-dialog/keystore-edit-dialog.component";
 import {SmpInfoService} from "../../app-info/smp-info.service";
 import {SmlIntegrationService} from "./sml-integration.service";
diff --git a/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts b/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts
index 6a5c687184a9c39c117f9f7ae084be592a65be2d..93b8fe2a356dbdb22478875d958a05424b32d366 100644
--- a/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts
+++ b/smp-angular/src/app/system-settings/property/property-details-dialog/property-details-dialog.component.ts
@@ -3,7 +3,7 @@ import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material/dialog
 import {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup} from "@angular/forms";
 import {PropertyRo} from "../property-ro.model";
 import {AlertMessageService} from "../../../common/alert-message/alert-message.service";
-import {EntityStatus} from "../../../common/model/entity-status.model";
+import {EntityStatus} from "../../../common/enums/entity-status.enum";
 import {ServiceGroupValidationRo} from "../../../service-group-edit/service-group-details-dialog/service-group-validation-edit-ro.model";
 import {SmpConstants} from "../../../smp.constants";
 import {ServiceGroupValidationErrorCodeModel} from "../../../service-group-edit/service-group-details-dialog/service-group-validation-error-code.model";
diff --git a/smp-angular/src/app/system-settings/property/property.component.ts b/smp-angular/src/app/system-settings/property/property.component.ts
index a3711b695470d2a77113c1a29d3f58d63d2ad180..d2b18d57d391f755d24d7df4768c69a46b9377ec 100644
--- a/smp-angular/src/app/system-settings/property/property.component.ts
+++ b/smp-angular/src/app/system-settings/property/property.component.ts
@@ -16,7 +16,7 @@ import {SmpConstants} from "../../smp.constants";
 import {GlobalLookups} from "../../common/global-lookups";
 import {SearchTableComponent} from "../../common/search-table/search-table.component";
 import {SecurityService} from "../../security/security.service";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 
 
 @Component({
diff --git a/smp-angular/src/app/system-settings/user/certificate-ro.model.ts b/smp-angular/src/app/system-settings/user/certificate-ro.model.ts
index 384f0afede917d33681f8b63dc78b58f3455ae28..dd61398cd91716a17a9fa6c65fbeb5a197be65d2 100644
--- a/smp-angular/src/app/system-settings/user/certificate-ro.model.ts
+++ b/smp-angular/src/app/system-settings/user/certificate-ro.model.ts
@@ -1,4 +1,4 @@
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 
 export interface CertificateRo {
   certificateId: string;
diff --git a/smp-angular/src/app/system-settings/user/user-controller.ts b/smp-angular/src/app/system-settings/user/user-controller.ts
index ebf6103e18344d0de0e22f527973a75d59000883..c7aff9a22baa43f5078133de354b76a304e1476c 100644
--- a/smp-angular/src/app/system-settings/user/user-controller.ts
+++ b/smp-angular/src/app/system-settings/user/user-controller.ts
@@ -2,7 +2,7 @@ import {SearchTableController} from '../../common/search-table/search-table-cont
 import {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
 import {UserDetailsDialogComponent, UserDetailsDialogMode} from './user-details-dialog/user-details-dialog.component';
 import {UserRo} from './user-ro.model';
-import {EntityStatus} from '../../common/model/entity-status.model';
+import {EntityStatus} from '../../common/enums/entity-status.enum';
 import {GlobalLookups} from "../../common/global-lookups";
 import {SearchTableEntity} from "../../common/search-table/search-table-entity.model";
 import {SearchTableValidationResult} from "../../common/search-table/search-table-validation-result.model";
diff --git a/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts b/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts
index 20fa129411b84f8b4ebdc17eed048f3c107732bf..e1ea10baac69e4ffc4b3319e25a7ec11ce5534cd 100644
--- a/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts
+++ b/smp-angular/src/app/system-settings/user/user-details-dialog/user-details-dialog.component.ts
@@ -12,7 +12,7 @@ import {
 } from '@angular/forms';
 import {Role} from '../../../security/role.model';
 import {UserRo} from '../user-ro.model';
-import {EntityStatus} from '../../../common/model/entity-status.model';
+import {EntityStatus} from '../../../common/enums/entity-status.enum';
 import {AlertMessageService} from '../../../common/alert-message/alert-message.service';
 import {CertificateService} from '../certificate.service';
 import {CertificateRo} from "../certificate-ro.model";
diff --git a/smp-angular/src/app/system-settings/user/user.component.ts b/smp-angular/src/app/system-settings/user/user.component.ts
index 5d989722c27106985668e958aad8b56c0adb95bb..85713469ca12c24f720040a57337306d57d5cbc3 100644
--- a/smp-angular/src/app/system-settings/user/user.component.ts
+++ b/smp-angular/src/app/system-settings/user/user.component.ts
@@ -15,7 +15,7 @@ import {HttpClient} from '@angular/common/http';
 import {SearchTableComponent} from "../../common/search-table/search-table.component";
 import {SecurityService} from "../../security/security.service";
 import {GlobalLookups} from "../../common/global-lookups";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {SmpConstants} from "../../smp.constants";
 
 @Component({
diff --git a/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts b/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts
index 36f4687d3cc24274551dd8fc64cb62ee80956259..4ec6b023c37ba1e2ec2c73f07ac1a591f23912fe 100644
--- a/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts
+++ b/smp-angular/src/app/user-settings/user-access-tokens/user-access-tokens.component.ts
@@ -4,7 +4,7 @@ import {UserService} from "../../system-settings/user/user.service";
 import {CredentialRo} from "../../security/credential.model";
 import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component";
 import {MatDialog} from "@angular/material/dialog";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {CredentialDialogComponent} from "../../common/dialogs/credential-dialog/credential-dialog.component";
 import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard";
 import {AccessTokenPanelComponent} from "./access-token-panel/access-token-panel.component";
diff --git a/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts b/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts
index d3171fb0b1b7bc3e3ea6a1ca7bc91887dbd6392d..8cf924c27f64cb98dd135a5a4c3e75f479d729a8 100644
--- a/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts
+++ b/smp-angular/src/app/user-settings/user-certificates/user-certificates.component.ts
@@ -4,7 +4,7 @@ import {UserService} from "../../system-settings/user/user.service";
 import {CredentialRo} from "../../security/credential.model";
 import {ConfirmationDialogComponent} from "../../common/dialogs/confirmation-dialog/confirmation-dialog.component";
 import {MatDialog} from "@angular/material/dialog";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {CertificateDialogComponent} from "../../common/dialogs/certificate-dialog/certificate-dialog.component";
 import {CredentialDialogComponent} from "../../common/dialogs/credential-dialog/credential-dialog.component";
 import {BeforeLeaveGuard} from "../../window/sidenav/navigation-on-leave-guard";
diff --git a/smp-angular/src/app/footer/footer.component.css b/smp-angular/src/app/window/footer/footer.component.css
similarity index 100%
rename from smp-angular/src/app/footer/footer.component.css
rename to smp-angular/src/app/window/footer/footer.component.css
diff --git a/smp-angular/src/app/footer/footer.component.html b/smp-angular/src/app/window/footer/footer.component.html
similarity index 100%
rename from smp-angular/src/app/footer/footer.component.html
rename to smp-angular/src/app/window/footer/footer.component.html
diff --git a/smp-angular/src/app/footer/footer.component.ts b/smp-angular/src/app/window/footer/footer.component.ts
similarity index 81%
rename from smp-angular/src/app/footer/footer.component.ts
rename to smp-angular/src/app/window/footer/footer.component.ts
index 3bc2dad7c7d0805508e27dfd4514a5ab312f7ae4..084d6e6066f4febd47170b0da8d16b4edef604c4 100644
--- a/smp-angular/src/app/footer/footer.component.ts
+++ b/smp-angular/src/app/window/footer/footer.component.ts
@@ -1,6 +1,6 @@
 import {Component, OnInit} from '@angular/core';
-import {SmpInfoService} from '../app-info/smp-info.service';
-import {SmpInfo} from '../app-info/smp-info.model';
+import {SmpInfoService} from '../../app-info/smp-info.service';
+import {SmpInfo} from '../../app-info/smp-info.model';
 
 @Component({
   moduleId: module.id,
@@ -23,6 +23,4 @@ export class FooterComponent implements OnInit {
       }
     );
   }
-
-
 }
diff --git a/smp-angular/src/app/window/toolbar/toolbar.component.ts b/smp-angular/src/app/window/toolbar/toolbar.component.ts
index 3d7b50d5d443feaca38ddcb50adfd9e8232254ed..0cffdc2d8464f9d0d25ade066394d40285b054b5 100644
--- a/smp-angular/src/app/window/toolbar/toolbar.component.ts
+++ b/smp-angular/src/app/window/toolbar/toolbar.component.ts
@@ -5,7 +5,7 @@ import {Authority} from "../../security/authority.model";
 import {AlertMessageService} from "../../common/alert-message/alert-message.service";
 import {MatDialog, MatDialogRef} from "@angular/material/dialog";
 import {UserDetailsDialogMode} from "../../system-settings/user/user-details-dialog/user-details-dialog.component";
-import {EntityStatus} from "../../common/model/entity-status.model";
+import {EntityStatus} from "../../common/enums/entity-status.enum";
 import {UserService} from "../../system-settings/user/user.service";
 import {UserController} from "../../system-settings/user/user-controller";
 import {HttpClient} from "@angular/common/http";
diff --git a/smp-api/pom.xml b/smp-api/pom.xml
deleted file mode 100644
index 16138c2af4230ea06dc507bc76deb8ed6a45d49b..0000000000000000000000000000000000000000
--- a/smp-api/pom.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017 European Commission | CEF eDelivery
-  ~
-  ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
-  ~ You may not use this work except in compliance with the Licence.
-  ~
-  ~ You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the Licence for the specific language governing permissions and limitations under the Licence.
-  -->
-
-<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>
-    <parent>
-        <groupId>eu.europa.ec.edelivery</groupId>
-        <artifactId>smp-modules</artifactId>
-        <version>5.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>smp-api</artifactId>
-    <name>smp-api</name>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <!-- Generated equals() methods need it in runtime -->
-        <dependency>
-            <groupId>org.jvnet.jaxb2_commons</groupId>
-            <artifactId>jaxb2-basics</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf.xjc-utils</groupId>
-            <artifactId>cxf-xjc-runtime</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.jvnet.jaxb2.maven2</groupId>
-                <artifactId>maven-jaxb2-plugin</artifactId>
-                <version>0.14.0</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>generate</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <args>
-                        <arg>-Xvalue-constructor</arg><!-- generates value constructors -->
-                        <arg>-Xequals</arg><!-- generates equals() metods -->
-                        <arg>-XtoString</arg>
-                    </args>
-                    <plugins>
-                        <!-- generates value constructors -->
-                        <plugin>
-                            <groupId>org.jvnet.jaxb2_commons</groupId>
-                            <artifactId>jaxb2-value-constructor</artifactId>
-                            <version>3.0</version>
-                        </plugin>
-                        <!-- generates equals() methods -->
-                        <plugin>
-                            <groupId>org.jvnet.jaxb2_commons</groupId>
-                            <artifactId>jaxb2-basics</artifactId>
-                            <version>1.11.1</version>
-                        </plugin>
-                    </plugins>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java b/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java
deleted file mode 100644
index c5f159e00ed13e1d713b525f65b6818d246c9c61..0000000000000000000000000000000000000000
--- a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/MalformedIdentifierException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.smp.api.exceptions;
-
-/**
- * Thrown when used identifier does not fulfill requirements specified in OASIS SMP specs:
- * http://docs.oasis-open.org/bdxr/bdx-smp/v1.0/bdx-smp-v1.0.html
- * 
- * Created by gutowpa on 12/01/2017.
- */
-public class MalformedIdentifierException extends IllegalArgumentException {
-
-    private static String buildMessage(String malformedId){
-        return "Malformed identifier, scheme and id should be delimited by double colon: "+malformedId;
-    }
-
-    public MalformedIdentifierException(String malformedId, Exception cause){
-        super(buildMessage(malformedId), cause);
-    }
-
-    public MalformedIdentifierException(String message){
-        super(message);
-    }
-}
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/XmlInvalidAgainstSchemaException.java b/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/XmlInvalidAgainstSchemaException.java
deleted file mode 100644
index 2df96fe77c9f38aca31548c21bebd435027118ca..0000000000000000000000000000000000000000
--- a/smp-api/src/main/java/eu/europa/ec/smp/api/exceptions/XmlInvalidAgainstSchemaException.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.smp.api.exceptions;
-
-/**
- * Created by migueti on 19/01/2017.
- */
-public class XmlInvalidAgainstSchemaException extends Exception {
-
-    public XmlInvalidAgainstSchemaException(String message, Exception e) {
-        super(message, e);
-    }
-}
diff --git a/smp-api/src/main/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidator.java b/smp-api/src/main/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidator.java
deleted file mode 100644
index 0bd3d275f2e71b780d5359b21b6f5ffc4faacacd..0000000000000000000000000000000000000000
--- a/smp-api/src/main/java/eu/europa/ec/smp/api/validators/BdxSmpOasisValidator.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.smp.api.validators;
-
-import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
-import org.xml.sax.SAXException;
-
-import javax.xml.XMLConstants;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.StringReader;
-import java.net.URL;
-
-/**
- * Created by migueti on 19/01/2017.
- */
-public class BdxSmpOasisValidator {
-
-    /**
-     * Class has only static members.
-     */
-    private  BdxSmpOasisValidator() {
-
-    }
-
-    /**
-     * thread safe validator
-     */
-    private static final ThreadLocal<Validator> validator = ThreadLocal.withInitial( () -> {
-        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-        URL xsdFilePath = BdxSmpOasisValidator.class.getResource("/bdx-smp-201605.xsd");
-        try {
-            Schema schema = schemaFactory.newSchema(xsdFilePath);
-            Validator vaInstance = schema.newValidator();
-            vaInstance.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
-            vaInstance.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
-            return vaInstance;
-        } catch (SAXException e) {
-            throw new IllegalStateException("Unable to initialize BDX SMP OASIS XSD schema validator.", e);
-        }
-    } );
-
-    private static Validator getValidator() {
-        return validator.get();
-    }
-
-    public static void validateXSD(byte[] xmlBody) throws XmlInvalidAgainstSchemaException {
-        try {
-            getValidator().validate(new StreamSource(new ByteArrayInputStream(xmlBody)));
-        } catch (SAXException | IOException e) {
-            throw new XmlInvalidAgainstSchemaException(e.getMessage(), e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/smp-api/src/main/resources/bdx-smp-201605.xsd b/smp-api/src/main/resources/bdx-smp-201605.xsd
deleted file mode 100644
index 39f98b365d4dbe2f59c0911fdd9233c2ebb26638..0000000000000000000000000000000000000000
--- a/smp-api/src/main/resources/bdx-smp-201605.xsd
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-     Service Metadata Publishing (SMP) Version 1.0
-     Committee Specification 03
-     30 June 2016
-     Copyright (c) OASIS Open 2016. All Rights Reserved.
-     Source: http://docs.oasis-open.org/bdxr/bdx-smp/v1.0/cs03/schemas/
-     Latest version of the specification: http://docs.oasis-open.org/bdxr/bdx-smp/v1.0/bdx-smp-v1.0.html
-     TC IPR Statement: https://www.oasis-open.org/committees/bdxr/ipr.php
-  -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05" id="ServiceMetadataPublishing">
-	<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
-	<xs:element name="ServiceGroup" type="ServiceGroupType"/>
-	<xs:element name="ServiceMetadata" type="ServiceMetadataType"/>
-	<xs:element name="SignedServiceMetadata" type="SignedServiceMetadataType"/>
-	<xs:complexType name="SignedServiceMetadataType">
-		<xs:sequence>
-			<xs:element ref="ServiceMetadata"/>
-			<xs:element ref="ds:Signature"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ServiceMetadataType">
-		<xs:choice>
-			<xs:element name="ServiceInformation" type="ServiceInformationType"/>
-			<xs:element name="Redirect" type="RedirectType"/>
-		</xs:choice>
-	</xs:complexType>
-	<xs:complexType name="ServiceInformationType">
-		<xs:sequence>
-			<xs:element ref="ParticipantIdentifier"/>
-			<xs:element ref="DocumentIdentifier"/>
-			<xs:element name="ProcessList" type="ProcessListType"/>
-			<xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ProcessListType">
-		<xs:sequence>
-			<xs:element name="Process" type="ProcessType" maxOccurs="unbounded"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ProcessType">
-		<xs:sequence>
-			<xs:element ref="ProcessIdentifier"/>
-			<xs:element name="ServiceEndpointList" type="ServiceEndpointList"/>
-			<xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ServiceEndpointList">
-		<xs:sequence>
-			<xs:element name="Endpoint" type="EndpointType" maxOccurs="unbounded"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="EndpointType">
-		<xs:sequence>
-			<xs:element name="EndpointURI" type="xs:anyURI"/>
-			<xs:element name="RequireBusinessLevelSignature" type="xs:boolean" minOccurs="0" default="false"/>
-			<xs:element name="MinimumAuthenticationLevel" type="xs:string" minOccurs="0"/>
-			<xs:element name="ServiceActivationDate" type="xs:dateTime" minOccurs="0"/>
-			<xs:element name="ServiceExpirationDate" type="xs:dateTime" minOccurs="0"/>
-			<xs:element name="Certificate" type="xs:base64Binary"/>
-			<xs:element name="ServiceDescription" type="xs:string"/>
-			<xs:element name="TechnicalContactUrl" type="xs:anyURI"/>
-			<xs:element name="TechnicalInformationUrl" type="xs:anyURI" minOccurs="0"/>
-			<xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/>
-		</xs:sequence>
-		<xs:attribute name="transportProfile" type="xs:string" use="required"/>
-	</xs:complexType>
-	<xs:complexType name="ServiceGroupType">
-		<xs:sequence>
-			<xs:element ref="ParticipantIdentifier"/>
-			<xs:element name="ServiceMetadataReferenceCollection" type="ServiceMetadataReferenceCollectionType"/>
-			<xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ServiceMetadataReferenceCollectionType">
-		<xs:sequence>
-			<xs:element name="ServiceMetadataReference" type="ServiceMetadataReferenceType" minOccurs="0" maxOccurs="unbounded"/>
-		</xs:sequence>
-	</xs:complexType>
-	<xs:complexType name="ServiceMetadataReferenceType">
-		<xs:attribute name="href" type="xs:anyURI"/>
-	</xs:complexType>
-	<xs:complexType name="RedirectType">
-		<xs:sequence>
-			<xs:element name="CertificateUID" type="xs:string"/>
-			<xs:element name="Extension" type="ExtensionType" minOccurs="0" maxOccurs="unbounded"/>
-		</xs:sequence>
-		<xs:attribute name="href" type="xs:anyURI" use="required"/>
-	</xs:complexType>
-	<xs:element name="ParticipantIdentifier" type="ParticipantIdentifierType"/>
-	<xs:element name="DocumentIdentifier" type="DocumentIdentifierType"/>
-	<xs:element name="ProcessIdentifier" type="ProcessIdentifierType"/>
-	<xs:element name="RecipientIdentifier" type="ParticipantIdentifierType"/>
-	<xs:element name="SenderIdentifier" type="ParticipantIdentifierType"/>
-	<xs:complexType name="ParticipantIdentifierType">
-		<xs:simpleContent>
-			<xs:extension base="xs:string">
-				<xs:attribute name="scheme" type="xs:string"/>
-			</xs:extension>
-		</xs:simpleContent>
-	</xs:complexType>
-	<xs:complexType name="DocumentIdentifierType">
-		<xs:simpleContent>
-			<xs:extension base="xs:string">
-				<xs:attribute name="scheme" type="xs:string"/>
-			</xs:extension>
-		</xs:simpleContent>
-	</xs:complexType>
-	<xs:complexType name="ProcessIdentifierType">
-		<xs:simpleContent>
-			<xs:extension base="xs:string">
-				<xs:attribute name="scheme" type="xs:string"/>
-			</xs:extension>
-		</xs:simpleContent>
-	</xs:complexType>
-	<xs:complexType name="ExtensionType">
-		<xs:annotation>
-			<xs:documentation>
-				A single extension for private use.
-			</xs:documentation>
-		</xs:annotation>
-		<xs:sequence>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionID" type="xs:token">
-				<xs:annotation>
-					<xs:documentation>
-			An identifier for the Extension assigned by the creator of the extension.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionName" type="xs:string">
-				<xs:annotation>
-					<xs:documentation>
-						A name for the Extension assigned by the creator of the extension.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionAgencyID" type="xs:string">
-				<xs:annotation>
-					<xs:documentation>
-						An agency that maintains one or more Extensions.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionAgencyName" type="xs:string">
-				<xs:annotation>
-					<xs:documentation>
-						The name of the agency that maintains the Extension.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionAgencyURI" type="xs:anyURI">
-				<xs:annotation>
-					<xs:documentation>
-						A URI for the Agency that maintains the Extension.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionVersionID" type="xs:normalizedString">
-				<xs:annotation>
-					<xs:documentation>
-						The version of the Extension.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionURI" type="xs:anyURI">
-				<xs:annotation>
-					<xs:documentation>
-						A URI for the Extension.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionReasonCode" type="xs:token">
-				<xs:annotation>
-					<xs:documentation>
-						A code for reason the Extension is being included.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:element maxOccurs="1" minOccurs="0" name="ExtensionReason" type="xs:string">
-				<xs:annotation>
-					<xs:documentation>
-						A description of the reason for the Extension.
-					</xs:documentation>
-				</xs:annotation>
-			</xs:element>
-			<xs:any namespace="##other" processContents="lax"/>
-		</xs:sequence>
-	</xs:complexType>
-</xs:schema>
\ No newline at end of file
diff --git a/smp-api/src/main/resources/commonServiceBinding.xjb b/smp-api/src/main/resources/commonServiceBinding.xjb
deleted file mode 100644
index cfefdeb35f5b28025a2d9d574a67864de9eec428..0000000000000000000000000000000000000000
--- a/smp-api/src/main/resources/commonServiceBinding.xjb
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-  ~ Copyright 2017 European Commission | CEF eDelivery
-  ~
-  ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
-  ~ You may not use this work except in compliance with the Licence.
-  ~
-  ~ You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the Licence for the specific language governing permissions and limitations under the Licence.
-  -->
-
-<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
-               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
-               xmlns:annox="http://annox.dev.java.net"
-               jaxb:extensionBindingPrefixes="xjc"
-               xmlns:xs="http://www.w3.org/2001/XMLSchema">
-    <jaxb:globalBindings xmlns:xs="http://www.w3.org/2001/XMLSchema">
-        <xjc:simple />
-        <jaxb:javaType
-                name="java.util.Date"
-                xmlType="xs:dateTime"
-                parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime"
-                printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime"
-        />
-        <jaxb:javaType
-                name="java.util.Date"
-                xmlType="xs:date"
-                parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate"
-                printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"
-        />
-    </jaxb:globalBindings>
-</jaxb:bindings>
\ No newline at end of file
diff --git a/smp-api/src/main/resources/ec-services-SMP-1.0.xsd b/smp-api/src/main/resources/ec-services-SMP-1.0.xsd
deleted file mode 100644
index 35fa43f06cc371abf778bda6536dc4afceac6bce..0000000000000000000000000000000000000000
--- a/smp-api/src/main/resources/ec-services-SMP-1.0.xsd
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017 European Commission | CEF eDelivery
-  ~
-  ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
-  ~ You may not use this work except in compliance with the Licence.
-  ~
-  ~ You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the Licence for the specific language governing permissions and limitations under the Licence.
-  -->
-
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="ec:services:SMP:1.0" targetNamespace="ec:services:SMP:1.0"
-           elementFormDefault="qualified" id="ServiceMetadataPublishing">
-    <xs:element name="ErrorResponse" type="ErrorResponseType"/>
-    <xs:complexType name="ErrorResponseType">
-        <xs:sequence>
-            <xs:element name="BusinessCode" type="xs:string"/>
-            <xs:element name="ErrorDescription" type="xs:string" minOccurs="0"/>
-            <xs:element name="ErrorUniqueId" type="xs:string"/>
-        </xs:sequence>
-    </xs:complexType>
-</xs:schema>
diff --git a/smp-api/src/main/resources/org-w3-2001-xmlschema.xsd b/smp-api/src/main/resources/org-w3-2001-xmlschema.xsd
deleted file mode 100644
index 3e4877c1e346e1deb77c084879afa675f8c95825..0000000000000000000000000000000000000000
--- a/smp-api/src/main/resources/org-w3-2001-xmlschema.xsd
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017 European Commission | CEF eDelivery
-  ~
-  ~ Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
-  ~ You may not use this work except in compliance with the Licence.
-  ~
-  ~ You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the Licence for the specific language governing permissions and limitations under the Licence.
-  -->
-
-<!--
-This file specifies the custom output package for the default one:
-"org.w3._2001.xmlschema" -> "org.w3._2001.xmlschema.custom"
-There was a collision issue between generated class-names and other dependencies (genarated classes names are Adapter1.java Adapter2.java, ...)
-
-Solution described here:
-https://jaxb.java.net/guide/Customizing_Java_packages.html#Tip__get_rid_of_the_org_w3__2001_xmlschema_package
--->
-<schema xmlns="http://www.w3.org/2001/XMLSchema"
-        targetNamespace="http://www.w3.org/2001/XMLSchema"
-        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
-        jaxb:version="2.0">
-    <annotation><appinfo>
-        <jaxb:schemaBindings>
-            <jaxb:package name="org.w3._2001.xmlschema.custom"/>
-        </jaxb:schemaBindings>
-    </appinfo></annotation>
-</schema>
\ No newline at end of file
diff --git a/smp-api/src/main/resources/xmldsig-core-schema.xsd b/smp-api/src/main/resources/xmldsig-core-schema.xsd
deleted file mode 100644
index db6114e859aa7ee7c178f957e7fbe306d38857b6..0000000000000000000000000000000000000000
--- a/smp-api/src/main/resources/xmldsig-core-schema.xsd
+++ /dev/null
@@ -1,310 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd" [
-   <!ATTLIST schema 
-     xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#">
-   <!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
-   <!ENTITY % p ''>
-   <!ENTITY % s ''>
-  ]>
--->
-<!-- Schema for XML Signatures
-    http://www.w3.org/2000/09/xmldsig#
-    $Revision: 1.1 $ on $Date: 2002/02/08 20:32:26 $ by $Author: reagle $
-
-    Copyright 2001 The Internet Society and W3C (Massachusetts Institute
-    of Technology, Institut National de Recherche en Informatique et en
-    Automatique, Keio University). All Rights Reserved.
-    http://www.w3.org/Consortium/Legal/
-
-    This document is governed by the W3C Software License [1] as described
-    in the FAQ [2].
-
-    [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
-    [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
--->
-<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="0.1" elementFormDefault="qualified">
-
-<!-- Basic Types Defined for Signatures -->
-
-<simpleType name="CryptoBinary">
-  <restriction base="base64Binary">
-  </restriction>
-</simpleType>
-
-<!-- Start Signature -->
-
-<element name="Signature" type="ds:SignatureType"/>
-<complexType name="SignatureType">
-  <sequence> 
-    <element ref="ds:SignedInfo"/> 
-    <element ref="ds:SignatureValue"/> 
-    <element ref="ds:KeyInfo" minOccurs="0"/> 
-    <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/> 
-  </sequence>  
-  <attribute name="Id" type="ID" use="optional"/>
-</complexType>
-
-  <element name="SignatureValue" type="ds:SignatureValueType"/> 
-  <complexType name="SignatureValueType">
-    <simpleContent>
-      <extension base="base64Binary">
-        <attribute name="Id" type="ID" use="optional"/>
-      </extension>
-    </simpleContent>
-  </complexType>
-
-<!-- Start SignedInfo -->
-
-<element name="SignedInfo" type="ds:SignedInfoType"/>
-<complexType name="SignedInfoType">
-  <sequence> 
-    <element ref="ds:CanonicalizationMethod"/> 
-    <element ref="ds:SignatureMethod"/> 
-    <element ref="ds:Reference" maxOccurs="unbounded"/> 
-  </sequence>  
-  <attribute name="Id" type="ID" use="optional"/> 
-</complexType>
-
-  <element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/> 
-  <complexType name="CanonicalizationMethodType" mixed="true">
-    <sequence>
-      <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
-      <!-- (0,unbounded) elements from (1,1) namespace -->
-    </sequence>
-    <attribute name="Algorithm" type="anyURI" use="required"/> 
-  </complexType>
-
-  <element name="SignatureMethod" type="ds:SignatureMethodType"/>
-  <complexType name="SignatureMethodType" mixed="true">
-    <sequence>
-      <element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
-      <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
-      <!-- (0,unbounded) elements from (1,1) external namespace -->
-    </sequence>
-    <attribute name="Algorithm" type="anyURI" use="required"/> 
-  </complexType>
-
-<!-- Start Reference -->
-
-<element name="Reference" type="ds:ReferenceType"/>
-<complexType name="ReferenceType">
-  <sequence> 
-    <element ref="ds:Transforms" minOccurs="0"/> 
-    <element ref="ds:DigestMethod"/> 
-    <element ref="ds:DigestValue"/> 
-  </sequence>
-  <attribute name="Id" type="ID" use="optional"/> 
-  <attribute name="URI" type="anyURI" use="optional"/> 
-  <attribute name="Type" type="anyURI" use="optional"/> 
-</complexType>
-
-  <element name="Transforms" type="ds:TransformsType"/>
-  <complexType name="TransformsType">
-    <sequence>
-      <element ref="ds:Transform" maxOccurs="unbounded"/>  
-    </sequence>
-  </complexType>
-
-  <element name="Transform" type="ds:TransformType"/>
-  <complexType name="TransformType" mixed="true">
-    <choice minOccurs="0" maxOccurs="unbounded"> 
-      <any namespace="##other" processContents="lax"/>
-      <!-- (1,1) elements from (0,unbounded) namespaces -->
-      <element name="XPath" type="string"/> 
-    </choice>
-    <attribute name="Algorithm" type="anyURI" use="required"/> 
-  </complexType>
-
-<!-- End Reference -->
-
-<element name="DigestMethod" type="ds:DigestMethodType"/>
-<complexType name="DigestMethodType" mixed="true"> 
-  <sequence>
-    <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
-  </sequence>    
-  <attribute name="Algorithm" type="anyURI" use="required"/> 
-</complexType>
-
-<element name="DigestValue" type="ds:DigestValueType"/>
-<simpleType name="DigestValueType">
-  <restriction base="base64Binary"/>
-</simpleType>
-
-<!-- End SignedInfo -->
-
-<!-- Start KeyInfo -->
-
-<element name="KeyInfo" type="ds:KeyInfoType"/> 
-<complexType name="KeyInfoType" mixed="true">
-  <choice maxOccurs="unbounded">     
-    <element ref="ds:KeyName"/> 
-    <element ref="ds:KeyValue"/> 
-    <element ref="ds:RetrievalMethod"/> 
-    <element ref="ds:X509Data"/> 
-    <element ref="ds:PGPData"/> 
-    <element ref="ds:SPKIData"/>
-    <element ref="ds:MgmtData"/>
-    <any processContents="lax" namespace="##other"/>
-    <!-- (1,1) elements from (0,unbounded) namespaces -->
-  </choice>
-  <attribute name="Id" type="ID" use="optional"/> 
-</complexType>
-
-  <element name="KeyName" type="string"/>
-  <element name="MgmtData" type="string"/>
-
-  <element name="KeyValue" type="ds:KeyValueType"/> 
-  <complexType name="KeyValueType" mixed="true">
-   <choice>
-     <element ref="ds:DSAKeyValue"/>
-     <element ref="ds:RSAKeyValue"/>
-     <any namespace="##other" processContents="lax"/>
-   </choice>
-  </complexType>
-
-  <element name="RetrievalMethod" type="ds:RetrievalMethodType"/> 
-  <complexType name="RetrievalMethodType">
-    <sequence>
-      <element ref="ds:Transforms" minOccurs="0"/> 
-    </sequence>  
-    <attribute name="URI" type="anyURI"/>
-    <attribute name="Type" type="anyURI" use="optional"/>
-  </complexType>
-
-<!-- Start X509Data -->
-
-<element name="X509Data" type="ds:X509DataType"/> 
-<complexType name="X509DataType">
-  <sequence maxOccurs="unbounded">
-    <choice>
-      <element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
-      <element name="X509SKI" type="base64Binary"/>
-      <element name="X509SubjectName" type="string"/>
-      <element name="X509Certificate" type="base64Binary"/>
-      <element name="X509CRL" type="base64Binary"/>
-      <any namespace="##other" processContents="lax"/>
-    </choice>
-  </sequence>
-</complexType>
-
-<complexType name="X509IssuerSerialType"> 
-  <sequence> 
-    <element name="X509IssuerName" type="string"/> 
-    <element name="X509SerialNumber" type="integer"/> 
-  </sequence>
-</complexType>
-
-<!-- End X509Data -->
-
-<!-- Begin PGPData -->
-
-<element name="PGPData" type="ds:PGPDataType"/> 
-<complexType name="PGPDataType"> 
-  <choice>
-    <sequence>
-      <element name="PGPKeyID" type="base64Binary"/> 
-      <element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/> 
-      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
-    </sequence>
-    <sequence>
-      <element name="PGPKeyPacket" type="base64Binary"/> 
-      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
-    </sequence>
-  </choice>
-</complexType>
-
-<!-- End PGPData -->
-
-<!-- Begin SPKIData -->
-
-<element name="SPKIData" type="ds:SPKIDataType"/> 
-<complexType name="SPKIDataType">
-  <sequence maxOccurs="unbounded">
-    <element name="SPKISexp" type="base64Binary"/>
-    <any namespace="##other" processContents="lax" minOccurs="0"/>
-  </sequence>
-</complexType> 
-
-<!-- End SPKIData -->
-
-<!-- End KeyInfo -->
-
-<!-- Start Object (Manifest, SignatureProperty) -->
-
-<element name="Object" type="ds:ObjectType"/> 
-<complexType name="ObjectType" mixed="true">
-  <sequence minOccurs="0" maxOccurs="unbounded">
-    <any namespace="##any" processContents="lax"/>
-  </sequence>
-  <attribute name="Id" type="ID" use="optional"/> 
-  <attribute name="MimeType" type="string" use="optional"/> <!-- add a grep facet -->
-  <attribute name="Encoding" type="anyURI" use="optional"/> 
-</complexType>
-
-<element name="Manifest" type="ds:ManifestType"/> 
-<complexType name="ManifestType">
-  <sequence>
-    <element ref="ds:Reference" maxOccurs="unbounded"/> 
-  </sequence>
-  <attribute name="Id" type="ID" use="optional"/> 
-</complexType>
-
-<element name="SignatureProperties" type="ds:SignaturePropertiesType"/> 
-<complexType name="SignaturePropertiesType">
-  <sequence>
-    <element ref="ds:SignatureProperty" maxOccurs="unbounded"/> 
-  </sequence>
-  <attribute name="Id" type="ID" use="optional"/> 
-</complexType>
-
-   <element name="SignatureProperty" type="ds:SignaturePropertyType"/> 
-   <complexType name="SignaturePropertyType" mixed="true">
-     <choice maxOccurs="unbounded">
-       <any namespace="##other" processContents="lax"/>
-       <!-- (1,1) elements from (1,unbounded) namespaces -->
-     </choice>
-     <attribute name="Target" type="anyURI" use="required"/> 
-     <attribute name="Id" type="ID" use="optional"/> 
-   </complexType>
-
-<!-- End Object (Manifest, SignatureProperty) -->
-
-<!-- Start Algorithm Parameters -->
-
-<simpleType name="HMACOutputLengthType">
-  <restriction base="integer"/>
-</simpleType>
-
-<!-- Start KeyValue Element-types -->
-
-<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
-<complexType name="DSAKeyValueType">
-  <sequence>
-    <sequence minOccurs="0">
-      <element name="P" type="ds:CryptoBinary"/>
-      <element name="Q" type="ds:CryptoBinary"/>
-    </sequence>
-    <element name="G" type="ds:CryptoBinary" minOccurs="0"/>
-    <element name="Y" type="ds:CryptoBinary"/>
-    <element name="J" type="ds:CryptoBinary" minOccurs="0"/>
-    <sequence minOccurs="0">
-      <element name="Seed" type="ds:CryptoBinary"/>
-      <element name="PgenCounter" type="ds:CryptoBinary"/>
-    </sequence>
-  </sequence>
-</complexType>
-
-<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
-<complexType name="RSAKeyValueType">
-  <sequence>
-    <element name="Modulus" type="ds:CryptoBinary"/> 
-    <element name="Exponent" type="ds:CryptoBinary"/> 
-  </sequence>
-</complexType> 
-
-<!-- End KeyValue Element-types -->
-
-<!-- End Signature -->
-
-</schema>
\ No newline at end of file
diff --git a/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java b/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java
deleted file mode 100644
index c19885313827e14e07afff6774bebd43c4f1f567..0000000000000000000000000000000000000000
--- a/smp-api/src/test/java/eu/europa/ec/smp/api/GeneratedCodeTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.smp.api;
-
-
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import java.io.InputStream;
-
-
-
-/**
- * Created by gutowpa on 17/01/2017.
- * TODO: do we still need this!
- */
-
-public class GeneratedCodeTest {
-
-    private static final String SCHEME = "The sample Identifier Scheme";
-    private static final String VALUE = "The sample Identifier Value";
-/*
-    @Test
-    public void testValueConstructorWasGeneratedForParticipantId() {
-        //when
-        ParticipantIdentifierType id = new ParticipantIdentifierType(VALUE, SCHEME);
-
-        //then
-        assertEquals(SCHEME, id.getScheme());
-        assertEquals(VALUE, id.getValue());
-    }
-
-    @Test
-    public void testValueConstructorWasGeneratedForDocumentId() {
-        //when
-        DocumentIdentifier id = new DocumentIdentifier(VALUE, SCHEME);
-
-        //then
-        assertEquals(SCHEME, id.getScheme());
-        assertEquals(VALUE, id.getValue());
-    }
-
-    @Test
-    public void testValueConstructorWasGeneratedForProcessId() {
-        //when
-        ProcessIdentifier id = new ProcessIdentifier(VALUE, SCHEME);
-
-        //then
-        assertEquals(SCHEME, id.getScheme());
-        assertEquals(VALUE, id.getValue());
-    }
-
-    @Test
-    public void testGeneratedEqualsIsNotAwareOfWhitespaceAndCommentChanges() throws JAXBException {
-        //given
-        ServiceGroup serviceGroupA = loadServiceGroup("/ServiceGroupA.xml");
-        ServiceGroup serviceGroupB = loadServiceGroup("/ServiceGroupB.xml");
-
-        //when-then
-        assertTrue(serviceGroupA.equals(serviceGroupB));
-    }
-
-    @Test
-    public void testGeneratedEqualsIsAwareOfContentChanges() throws JAXBException {
-        //given
-        ServiceGroup serviceGroupA = loadServiceGroup("/ServiceGroupA.xml");
-        ServiceGroup serviceGroupC = loadServiceGroup("/ServiceGroupC.xml");
-
-        //when-then
-        assertFalse(serviceGroupA.equals(serviceGroupC));
-    }
-
-    public static ServiceGroup loadServiceGroup(String path) throws JAXBException {
-        InputStream inputStream = GeneratedCodeTest.class.getResourceAsStream(path);
-        JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class);
-        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
-        Object serviceGroup = unmarshaller.unmarshal(inputStream);
-        return (ServiceGroup) serviceGroup;
-    }
-
-    @Test
-    public void testGeneratedServiceGroupEqualsReturnsTrue(){
-        ParticipantIdentifierType id1 = new ParticipantIdentifierType(VALUE, SCHEME);
-        ParticipantIdentifierType id2 = new ParticipantIdentifierType(VALUE, SCHEME);
-
-        assertTrue(id1.equals(id2));
-    }
-
-    @Test
-    public void testGeneratedServiceGroupEqualsIsCaseSensitive(){
-        ParticipantIdentifierType id1 = new ParticipantIdentifierType("Value", "Scheme");
-        ParticipantIdentifierType id2 = new ParticipantIdentifierType("value", "scheme");
-
-        assertFalse(id1.equals(id2));
-    }
-
-    @Test
-    public void testGeneratedServiceGroupEquaHandlesEmptyScheme(){
-        ParticipantIdentifierType id1 = new ParticipantIdentifierType(VALUE, null);
-        ParticipantIdentifierType id2 = new ParticipantIdentifierType(VALUE, null);
-
-        assertTrue(id1.equals(id2));
-    }
-
-    @Test
-    public void testGeneratedDocumentIdEqualsReturnsTrue(){
-        DocumentIdentifier id1 = new DocumentIdentifier(VALUE, SCHEME);
-        DocumentIdentifier id2 = new DocumentIdentifier(VALUE, SCHEME);
-
-        assertTrue(id1.equals(id2));
-    }
-
-    @Test
-    public void testGeneratedDocumentIdEqualsIsCaseSensitive(){
-        DocumentIdentifier id1 = new DocumentIdentifier("Value", "Scheme");
-        DocumentIdentifier id2 = new DocumentIdentifier("value", "scheme");
-
-        assertFalse(id1.equals(id2));
-    }
-
-    @Test
-    public void testGeneratedDocumentIdEqualsHandlesEmptyScheme(){
-        DocumentIdentifier id1 = new DocumentIdentifier(VALUE, null);
-        DocumentIdentifier id2 = new DocumentIdentifier(VALUE, null);
-
-        assertTrue(id1.equals(id2));
-    }
-*/
-}
diff --git a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java
index f9618677be9e1b7975b82a8c0e7bd881f0387f84..6d84744c9fe052db6e2dfa1da962262dc961d585 100644
--- a/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java
+++ b/smp-resource-extensions/oasis-smp-spi/src/main/java/eu/europa/ec/smp/spi/converter/ServiceGroup10Converter.java
@@ -59,7 +59,7 @@ public class ServiceGroup10Converter {
             JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class);
             return jaxbContext.createUnmarshaller();
         } catch (JAXBException ex) {
-            LOG.error("Error occurred while initializing JAXBContext for ServiceMetadata. Cause message:", ex);
+            LOG.error("Error occurred while initializing JAXBContext for ServiceGroup10Converter. Cause message:", ex);
         }
         return null;
     });
@@ -69,6 +69,22 @@ public class ServiceGroup10Converter {
         return jaxbUnmarshaller.get();
     }
 
+    private static final ThreadLocal<Marshaller> jaxbMarshaller = ThreadLocal.withInitial(() -> {
+        try {
+
+            JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class);
+            return jaxbContext.createMarshaller();
+        } catch (JAXBException ex) {
+            LOG.error("Error occurred while initializing JAXBContext for ServiceGroup10Converter. Cause message:", ex);
+        }
+        return null;
+    });
+
+
+    private static Marshaller getMarshaller() {
+        return jaxbMarshaller.get();
+    }
+
 
     /**
      * Method unmarshal ServiceGroup from xml bytearray
@@ -126,8 +142,7 @@ public class ServiceGroup10Converter {
         if (serviceGroup == null) {
             return;
         }
-        JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class);
-        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+        Marshaller jaxbMarshaller = getMarshaller();
         // Pretty Print XML
         if (prettyPrint) {
             jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, prettyPrint);
diff --git a/smp-server-library/pom.xml b/smp-server-library/pom.xml
index 65d2d74e8f531853da91e37139ec1910d1805801..06200a4b4aa777687edbae033f2f05f13ab39266 100644
--- a/smp-server-library/pom.xml
+++ b/smp-server-library/pom.xml
@@ -26,11 +26,6 @@
         <maven.deploy.skip>false</maven.deploy.skip>
     </properties>
     <dependencies>
-        <dependency>
-            <groupId>eu.europa.ec.edelivery</groupId>
-            <artifactId>smp-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>eu.europa.ec.edelivery</groupId>
             <artifactId>smp-spi</artifactId>
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBGroupToGroupROConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBGroupToGroupROConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e764b3a477e67361bdf8f286876d0332e5ee56c
--- /dev/null
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBGroupToGroupROConverter.java
@@ -0,0 +1,35 @@
+package eu.europa.ec.edelivery.smp.conversion;
+
+import eu.europa.ec.edelivery.smp.data.model.DBGroup;
+import eu.europa.ec.edelivery.smp.data.ui.GroupRO;
+import eu.europa.ec.edelivery.smp.logging.SMPLogger;
+import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
+import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils;
+import org.apache.commons.beanutils.BeanUtils;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.InvocationTargetException;
+
+
+/**
+ * @author Sebastian-Ion TINCU
+ */
+@Component
+public class DBGroupToGroupROConverter implements Converter<DBGroup, GroupRO> {
+    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(DBGroupToGroupROConverter.class);
+
+    @Override
+    public GroupRO convert(DBGroup source) {
+
+        GroupRO target = new GroupRO();
+        try {
+            BeanUtils.copyProperties(target, source);
+            target.setGroupId(SessionSecurityUtils.encryptedEntityId(source.getId()));
+        } catch (IllegalAccessException | InvocationTargetException e) {
+            LOG.error("Error occurred while converting DBResourceDef", e);
+            return null;
+        }
+        return target;
+    }
+}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java
index d655541a10343a2184897d5de975364c816a7080..b81423a6246700286177e98e736f33aabef414b1 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/DBUserToUserROConverter.java
@@ -31,49 +31,6 @@ public class DBUserToUserROConverter implements Converter<DBUser, UserRO> {
         target.setFullName(source.getFullName());
         target.setSmpTheme(source.getSmpTheme());
         target.setSmpLocale(source.getSmpLocale());
-/*
-        Optional<DBCredential> optUserPassCred = source.getCredentials().stream().filter(credential -> credential.getCredentialType() == CredentialType.USERNAME_PASSWORD).findFirst();
-        Optional<DBCredential> optTokenCred = source.getCredentials().stream().filter(credential -> credential.getCredentialType() == CredentialType.ACCESS_TOKEN).findFirst();
-        Optional<DBCredential> optCertCred = source.getCredentials().stream().filter(credential -> credential.getCredentialType() == CredentialType.CERTIFICATE).findFirst();
-
-        if (optUserPassCred.isPresent()){
-            DBCredential credential = optUserPassCred.get();
-            target.setPassword(credential.getValue());
-            target.setPasswordExpireOn(credential.getExpireOn());
-            target.setPasswordExpired(isCredentialExpired(credential));
-            target.setSequentialLoginFailureCount(credential.getSequentialLoginFailureCount());
-            target.setLastFailedLoginAttempt(credential.getLastFailedLoginAttempt());
-            target.setSuspendedUtil(getSuspensionUntilDate(credential.getLastFailedLoginAttempt(),credential.getSequentialLoginFailureCount(),
-                    configurationService.getLoginSuspensionTimeInSeconds(), configurationService.getLoginMaxAttempts()));
-        }
-
-        if (optTokenCred.isPresent()){
-            DBCredential credential = optUserPassCred.get();
-
-            target.setAccessTokenId(credential.getName());
-            target.setAccessTokenExpireOn(credential.getExpireOn());
-
-            target.setSequentialTokenLoginFailureCount(credential.getSequentialLoginFailureCount());
-            target.setLastTokenFailedLoginAttempt(credential.getLastFailedLoginAttempt());
-            target.setTokenSuspendedUtil(getSuspensionUntilDate(credential.getLastFailedLoginAttempt(),
-                    credential.getSequentialLoginFailureCount(),
-                    configurationService.getAccessTokenLoginSuspensionTimeInSeconds(),
-                    configurationService.getAccessTokenLoginMaxAttempts()));
-        }
-
-        if (optCertCred.isPresent()) {
-            DBCredential credential = optCertCred.get();
-            DBCertificate certificate = credential.getCertificate();
-            CertificateRO certificateRO = conversionService.convert(certificate, CertificateRO.class);
-            target.setCertificate(certificateRO);
-            if (StringUtils.equalsIgnoreCase(certificate.getCertificateId(), source.getUsername())) {
-                // clear username if is the same as certificate id.
-                // username as cert id is set to database to force unique users
-                // and to fix issue with mysql - where null value is also unique...
-                target.setUsername(null);
-            }
-        }
-*/
 
         return target;
     }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java
index 9d7bcbd44a396256d165c6144f1ffbf7d3468fdc..327073d77513328208aa55285cf28690d61e39c4 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/GroupDao.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Optional;
 
 import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*;
+import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.ILLEGAL_STATE_DOMAIN_GROUP_MULTIPLE_ENTRY;
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.ILLEGAL_STATE_DOMAIN_MULTIPLE_ENTRY;
 
 /**
@@ -55,8 +56,12 @@ public class GroupDao extends BaseDao<DBGroup> {
      * @return
      */
     public List<DBGroup> getAllGroupsForDomain(DBDomain domain) {
+        return getAllGroupsForDomain(domain.getId());
+    }
+
+    public List<DBGroup> getAllGroupsForDomain(Long domainId) {
         TypedQuery<DBGroup> query = memEManager.createNamedQuery(QUERY_GROUP_BY_DOMAIN, DBGroup.class);
-        query.setParameter(PARAM_DOMAIN_ID, domain.getId());
+        query.setParameter(PARAM_DOMAIN_ID, domainId);
         return query.getResultList();
     }
 
@@ -70,18 +75,32 @@ public class GroupDao extends BaseDao<DBGroup> {
      * @throws IllegalStateException if no group is not configured
      */
     public Optional<DBGroup> getGroupByNameAndDomain(String name, DBDomain domain) {
+        return getGroupByNameAndDomain(name, domain.getId());
+    }
+
+    /**
+     * Returns the group or Optional.empty() if there is no group for name and domain.
+     *
+     * @param name is the group name
+     * @param domainId where the group is registered
+     *
+     * @return the only single record for name  from smp_group table or empty value
+     * @throws IllegalStateException if no group is not configured
+     */
+    public Optional<DBGroup> getGroupByNameAndDomain(String name, Long domainId) {
         try {
             TypedQuery<DBGroup> query = memEManager.createNamedQuery(QUERY_GROUP_BY_NAME_DOMAIN, DBGroup.class);
             query.setParameter(PARAM_NAME, name);
-            query.setParameter(PARAM_DOMAIN_ID, domain.getId());
+            query.setParameter(PARAM_DOMAIN_ID, domainId);
             return Optional.of(query.getSingleResult());
         } catch (NoResultException e) {
             return Optional.empty();
         } catch (NonUniqueResultException e) {
-            throw new IllegalStateException(ILLEGAL_STATE_DOMAIN_MULTIPLE_ENTRY.getMessage(name, domain.getDomainCode()));
+            throw new IllegalStateException(ILLEGAL_STATE_DOMAIN_GROUP_MULTIPLE_ENTRY.getMessage(name,domainId));
         }
     }
 
+
     /**
      * Returns the group or Optional.empty() if there is no group for name and domain code
      *
@@ -110,8 +129,8 @@ public class GroupDao extends BaseDao<DBGroup> {
      * False if entity did not exist, so nothing was changed
      */
     @Transactional
-    public boolean removeByNameAndDomain(String domainCode, DBDomain domain) {
-        Optional<DBGroup> optd = getGroupByNameAndDomain(domainCode, domain);
+    public boolean removeByNameAndDomain(String name, DBDomain domain) {
+        Optional<DBGroup> optd = getGroupByNameAndDomain(name, domain);
         if (optd.isPresent()) {
             memEManager.remove(optd.get());
             return true;
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java
deleted file mode 100644
index 7eeb2959c7854ac60965898255cbab8625d29b09..0000000000000000000000000000000000000000
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.services;
-
-import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
-import eu.europa.ec.edelivery.smp.data.dao.ResourceDao;
-import eu.europa.ec.edelivery.smp.data.dao.UserDao;
-import eu.europa.ec.edelivery.smp.data.model.*;
-import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
-import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
-import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.edelivery.smp.identifiers.Identifier;
-import eu.europa.ec.edelivery.smp.logging.SMPLogger;
-import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
-import eu.europa.ec.edelivery.smp.logging.SMPMessageCode;
-import eu.europa.ec.edelivery.smp.security.ResourceGuard;
-import eu.europa.ec.edelivery.smp.sml.SmlConnector;
-import eu.europa.ec.edelivery.text.DistinguishedNamesCodingUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Optional;
-import java.util.regex.Pattern;
-
-import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*;
-import static java.net.URLDecoder.decode;
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
-/**
- * Purpose of class is to test ServiceGroupService base methods
- *
- * @author gutowpa
- * @since 3.0.0
- */
-@Service
-public class ServiceGroupService {
-
-    private static final String UTF_8 = "UTF-8";
-
-    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(ServiceGroupService.class);
-
-    @Autowired
-    private IdentifierService identifierService;
-
-    @Autowired
-    private ResourceGuard resourceGuard;
-
-    @Autowired
-    private ResourceDao serviceGroupDao;
-
-    @Autowired
-    private UserDao userDao;
-
-    @Autowired
-    private DomainService domainService;
-
-    @Autowired
-    private SmlConnector smlConnector;
-
-    @Autowired
-    private ConfigurationService configurationService;
-
-    /**
-     * Method returns ServiceGroup entity for participant with references. If domain is null/empty it returns ServiceMetadata
-     * for all domains else it returns metadata only for particular domain.
-     * If domain is given and participantId is not defined on that domain than NotFoundException if thrown.
-     *
-     * @param participantId participant identifier object
-     * @return ServiceGroup for participant id
-     */
-    public ServiceGroup getServiceGroup(Identifier participantId) {
-        // normalize participant identifier
-        Identifier normalizedServiceGroupId = identifierService.normalizeParticipant(participantId);
-        Optional<DBResource> sg = serviceGroupDao.findServiceGroup(normalizedServiceGroupId.getValue(),
-                normalizedServiceGroupId.getScheme());
-        if (!sg.isPresent()) {
-            throw new SMPRuntimeException(SG_NOT_EXISTS, normalizedServiceGroupId.getValue(),
-                    normalizedServiceGroupId.getScheme());
-        }
-        return toServiceGroup(sg.get(), configurationService.getParticipantIdentifierUrnValidationRexExp());
-    }
-
-    /**
-     * Method save (or update if exists) serviceGroup for domain and servicegroup owner
-     *
-     * @param serviceGroup      service group entity to be stored
-     * @param domain            domain of service group
-     * @param serviceGroupOwner owner of the service group
-     * @param authenticatedUser authenticated user who is trying to save service group
-     * @return return true if object was stored
-     */
-    @Transactional
-    public boolean saveServiceGroup(ServiceGroup serviceGroup, String domain, String serviceGroupOwner, String authenticatedUser) {
-
-        // normalize participant identifier
-        Identifier normalizedParticipantId = identifierService.normalizeParticipant(serviceGroup.getParticipantIdentifier().getScheme(), serviceGroup.getParticipantIdentifier().getValue());
-        LOG.businessDebug(SMPMessageCode.BUS_SAVE_SERVICE_GROUP, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme());
-
-        // normalize service group owner
-
-
-        String ownerName = defineGroupOwner(serviceGroupOwner, authenticatedUser);
-        Optional<DBUser> newOwner = userDao.findUserByIdentifier(ownerName);
-        if (!newOwner.isPresent()
-                && !StringUtils.isBlank(serviceGroupOwner) && serviceGroupOwner.contains(":")) {
-            // try harder
-            String[] val = splitSerialFromSubject(ownerName);
-            String newOwnerName = DistinguishedNamesCodingUtil.normalizeDN(val[0]) + ':' + val[1];
-            LOG.info("Owner not found: [{}] try with normalized owner: [{}].", ownerName, newOwnerName);
-            newOwner = userDao.findUserByIdentifier(newOwnerName);
-            ownerName = newOwnerName;
-        }
-
-        if (!newOwner.isPresent()) {
-            LOG.error("The owner [{}] does not exist! Save service group is rejected!", ownerName);
-            SMPRuntimeException ex = new SMPRuntimeException(INVALID_OWNER, ownerName);
-            LOG.businessError(SMPMessageCode.BUS_SAVE_SERVICE_GROUP_FAILED, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme(), ex.getMessage());
-            throw ex;
-        }
-        // get domain
-        DBDomain dmn = domainService.getDomain(domain);
-        // get servicegroup
-        Optional<DBResource> dbServiceGroup = serviceGroupDao.findServiceGroup(normalizedParticipantId.getValue(),
-                normalizedParticipantId.getScheme());
-
-/*
-        byte[] extensions = ServiceGroupConverter.extractExtensionsPayload(serviceGroup);
-
-        if (dbServiceGroup.isPresent()) {
-            // service already exists.
-            // check if user has rights to modified
-            // test service owner
-            DBResource sg = dbServiceGroup.get();
-            validateOwnership(ownerName, sg);
-            //check is domain exists
-            Optional<DBDomainResourceDef> sgd = sg.getServiceGroupForDomain(dmn.getDomainCode());
-            if (!sgd.isPresent()) {
-                SMPRuntimeException ex = new SMPRuntimeException(SG_NOT_REGISTRED_FOR_DOMAIN, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme());
-                LOG.businessError(SMPMessageCode.BUS_SAVE_SERVICE_GROUP_FAILED, domain, normalizedParticipantId.getValue(), normalizedParticipantId.getScheme(), ex.getMessage());
-                throw ex;
-            }
-            //update extensions
-            sg.setExtension(extensions);
-            serviceGroupDao.update(sg);
-            return false;
-        } else {
-            //Save ServiceGroup
-            DBResource newSg = new DBResource();
-            newSg.setIdentifierValue(normalizedParticipantId.getValue());
-            newSg.setIdentifierScheme(normalizedParticipantId.getScheme());
-            newSg.setExtension(extensions);
-            newSg.addDomain(dmn); // add initial domain
-            // set initial domain as not registered
-            newSg.getResourceDomains().get(0).setSmlRegistered(false);
-
-            // persist (make sure this is not in transaction)
-            serviceGroupDao.persistFlushDetach(newSg);
-            // register to SML
-            boolean registered = smlConnector.registerInDns(normalizedParticipantId, dmn);
-            if (registered) {
-                // update status in database
-                newSg.getResourceDomains().get(0).setSmlRegistered(registered);
-                serviceGroupDao.update(newSg);
-            }
-            return true;
-        }
-
- */
-        return false;
-    }
-
-    /**
-     * Method returns URL decoded serviceGroupOwner if not null/empty, else return authenticated user. If
-     * User cannot be decoded SMPRuntimeException is thrown.
-     *
-     * @param serviceGroupOwner
-     * @param authenticatedUser
-     * @return database owner string.
-     */
-    protected String defineGroupOwner(final String serviceGroupOwner, final String authenticatedUser) {
-        try {
-            return isNotBlank(serviceGroupOwner) ? decode(serviceGroupOwner, UTF_8) : authenticatedUser;
-        } catch (UnsupportedEncodingException | IllegalArgumentException ex) {
-            LOG.error("Error occurred while decoding serviceGroupOwner '" + serviceGroupOwner + "'", ex);
-            throw new SMPRuntimeException(INVALID_ENCODING, serviceGroupOwner, "Unsupported or invalid encoding: " + ex.getMessage());
-
-        }
-
-    }
-
-    public static String[] splitSerialFromSubject(String certificateId) {
-
-
-        int idx = certificateId.lastIndexOf(":");
-        if (idx <= 0) {
-            throw new SMPRuntimeException(INVALID_OWNER, certificateId);
-        }
-        return new String[]{certificateId.substring(0, idx), certificateId.substring(idx + 1)};
-
-    }
-
-    /**
-     * Method validates if user owner with identifier is owner of servicegroup
-     *
-     * @param ownerIdentifier
-     * @param dbsg
-     */
-    protected void validateOwnership(String ownerIdentifier, DBResource dbsg) {
-        Optional<DBUser> own = userDao.findUserByIdentifier(ownerIdentifier);
-        if (!own.isPresent()) {
-            throw new SMPRuntimeException(USER_NOT_EXISTS);
-        }
-
-        if (!resourceGuard.isResourceAdmin(ownerIdentifier, dbsg.getIdentifierValue(), dbsg.getIdentifierScheme())){
-            throw new SMPRuntimeException(USER_IS_NOT_OWNER, ownerIdentifier,
-                    dbsg.getIdentifierValue(), dbsg.getIdentifierScheme());
-        }
-    }
-
-    /**
-     * Method validates if user owner with identifier is owner of servicegroup
-     *
-     * @param userId
-     * @param serviceMetadataID
-     */
-    @Transactional
-    public boolean isServiceGroupOwnerForMetadataID(long userId, long serviceMetadataID) {
-        return serviceGroupDao.findServiceGroupDomainForUserIdAndMetadataId(userId, serviceMetadataID).isPresent();
-    }
-
-
-
-    @Transactional
-    public void deleteServiceGroup(Identifier serviceGroupId) {
-        /*
-        final ParticipantIdentifierType normalizedServiceGroupId = identifierService.normalizeParticipant(serviceGroupId);
-
-        Optional<DBResource> dbServiceGroup = serviceGroupDao.findServiceGroup(normalizedServiceGroupId.getValue(),
-                normalizedServiceGroupId.getScheme());
-
-        if (!dbServiceGroup.isPresent()) {
-            throw new SMPRuntimeException(SG_NOT_EXISTS, normalizedServiceGroupId.getValue(),
-                    normalizedServiceGroupId.getScheme());
-        }
-        DBResource dsg = dbServiceGroup.get();
-        // register to SML
-        // unergister all the domains
-        for (DBDomainResourceDef sgdom : dsg.getResourceDomains()) {
-            if (sgdom.isSmlRegistered()) {
-                smlConnector.unregisterFromDns(normalizedServiceGroupId, sgdom.getDomain());
-            }
-        }
-
-        serviceGroupDao.removeServiceGroup(dsg);
-
-         */
-    }
-
-    /**
-     * Method returns Oasis ServiceGroup entity with  extension and
-     * empty ServiceMetadataReferenceCollectionType. If extension can not be converted to jaxb object than
-     * ConversionException is thrown.
-     *
-     * @param dsg                - database service group entity
-     * @param concatenatePartyId - regular expression if servicegroup in party identifier must be concatenate and returned in string value.
-     * @return Oasis ServiceGroup entity or null if parameter is null
-     */
-    public ServiceGroup toServiceGroup(DBResource dsg, Pattern concatenatePartyId) {
-/*todo
-        if (dsg == null) {
-            return null;
-        }
-
-        ServiceGroup serviceGroup = new ServiceGroup();
-        String schema = dsg.getIdentifierScheme();
-        String value = dsg.getIdentifierValue();
-
-        if (StringUtils.isNotBlank(schema) && concatenatePartyId != null && concatenatePartyId.matcher(schema).matches()) {
-            value = identifierService.formatParticipant(schema, value);
-            schema = null;
-        }
-        Identifier identifier = new Identifier(value, schema);
-        serviceGroup.setParticipantIdentifier(identifier);
-        if (dsg.getExtension() != null) {
-            try {
-                List<ExtensionType> extensions = ExtensionConverter.unmarshalExtensions(dsg.getExtension());
-                serviceGroup.getExtensions().addAll(extensions);
-            } catch (JAXBException e) {
-                throw new SMPRuntimeException(INVALID_EXTENSION_FOR_SG, e, dsg.getIdentifierValue(),
-                        dsg.getIdentifierScheme(), ExceptionUtils.getRootCauseMessage(e));
-            }
-        }
-        serviceGroup.setServiceMetadataReferenceCollection(new ServiceMetadataReferenceCollectionType());
-
-        return serviceGroup;
-
- */ return  null;
-    }
-}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIGroupPublicService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIGroupPublicService.java
new file mode 100644
index 0000000000000000000000000000000000000000..818bda65dec05d50bf31c83b49613a48efbb00b3
--- /dev/null
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIGroupPublicService.java
@@ -0,0 +1,125 @@
+package eu.europa.ec.edelivery.smp.services.ui;
+
+import eu.europa.ec.edelivery.smp.data.dao.BaseDao;
+import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
+import eu.europa.ec.edelivery.smp.data.dao.GroupDao;
+import eu.europa.ec.edelivery.smp.data.model.DBDomain;
+import eu.europa.ec.edelivery.smp.data.model.DBGroup;
+import eu.europa.ec.edelivery.smp.data.ui.GroupRO;
+import eu.europa.ec.edelivery.smp.data.ui.ServiceResult;
+import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
+import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
+import eu.europa.ec.edelivery.smp.logging.SMPLogger;
+import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
+import org.springframework.core.convert.ConversionService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * Service bean provides only public group management methods.
+ *
+ * @author Joze Rihtarsic
+ * @since 5.0
+ */
+@Service
+public class UIGroupPublicService extends UIServiceBase<DBGroup, GroupRO> {
+
+    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(UIGroupPublicService.class);
+    private final GroupDao groupDao;
+    private final DomainDao domainDao;
+    private final ConversionService conversionService;
+
+    public UIGroupPublicService(GroupDao groupDao, DomainDao domainDao, ConversionService conversionService) {
+        this.groupDao = groupDao;
+        this.domainDao = domainDao;
+        this.conversionService = conversionService;
+    }
+
+    @Override
+    protected BaseDao<DBGroup> getDatabaseDao() {
+        return groupDao;
+    }
+
+    /**
+     * Method returns Domain resource object list for page.
+     *
+     * @param page
+     * @param pageSize
+     * @param sortField
+     * @param sortOrder
+     * @param filter
+     * @return
+     */
+    public ServiceResult<GroupRO> getTableList(int page, int pageSize,
+                                               String sortField,
+                                               String sortOrder, Object filter) {
+        LOG.debug("Query for public domain data: page: [{}], page size [{}], sort: [{}], filter: [{}].", page, pageSize, sortField, filter);
+        return super.getTableList(page, pageSize, sortField, sortOrder, filter);
+    }
+
+    @Transactional
+    public List<GroupRO> getAllGroupsForDomain(Long domainId) {
+        List<DBGroup> domainGroups = groupDao.getAllGroupsForDomain(domainId);
+        return domainGroups.stream().map(domain -> conversionService.convert(domain, GroupRO.class))
+                .collect(Collectors.toList());
+    }
+
+    @Transactional
+    public GroupRO createGroupForDomain(Long domainId, GroupRO groupRO) {
+        LOG.info("create group [{}] to domain [{}]", groupRO, domainId);
+
+        Optional<DBGroup> optGroup = groupDao.getGroupByNameAndDomain(groupRO.getGroupName(), domainId);
+        if (optGroup.isPresent()) {
+            throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "CreateGroup", "Group with name [" + groupRO.getGroupName() + "] already exists!");
+        }
+        DBDomain domain = domainDao.find(domainId);
+
+        DBGroup group = new DBGroup();
+        group.setGroupName(groupRO.getGroupName());
+        group.setGroupDescription(groupRO.getGroupDescription());
+        group.setVisibility(groupRO.getVisibility());
+        group.setDomain(domain);
+        // to get ID for conversion
+        domainDao.persistFlushDetach(domain);
+
+        return conversionService.convert(group, GroupRO.class);
+    }
+
+    @Transactional
+    public GroupRO deleteGroupFromDomain(Long domainId, Long groupId) {
+        LOG.info("delete group [{}] from domain [{}]", groupId, domainId);
+
+        DBGroup group = groupDao.find(groupId);
+        if (group == null) {
+            throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "DeleteGroup", "Can not find group to delete");
+        }
+
+        if (Objects.equals(group.getDomain().getId(), domainId)) {
+            throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "DeleteGroup", "Group does not belong to domain");
+        }
+        groupDao.remove(group);
+        return conversionService.convert(group, GroupRO.class);
+    }
+/*
+    @Transactional
+    public MemberRO deleteMemberFromDomain(Long domainId, Long memberId) {
+        LOG.info("Delete member [{}] from domain [{}]", memberId, domainId);
+        DBDomainMember domainMember = domainMemberDao.find(memberId);
+        if (domainMember == null) {
+            throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Membership", "Membership does not exists!");
+        }
+        if (!Objects.equals(domainMember.getDomain().getId(),domainId  )){
+            throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Membership", "Membership does not belong to domain!");
+        }
+
+        domainMemberDao.remove(domainMember);
+        return conversionService.convert(domainMember, MemberRO.class);
+    }
+
+ */
+}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java
index 84f332dd8e64d6292c75b21691d8dde9c1a15445..52fbe52f1c8d009556f6fda415167887d1e64431 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceGroupService.java
@@ -5,7 +5,7 @@ import eu.europa.ec.edelivery.smp.data.dao.BaseDao;
 import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
 import eu.europa.ec.edelivery.smp.data.dao.ResourceDao;
 import eu.europa.ec.edelivery.smp.data.dao.UserDao;
-import eu.europa.ec.edelivery.smp.data.model.*;
+import eu.europa.ec.edelivery.smp.data.model.DBDomainResourceDef;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource;
 import eu.europa.ec.edelivery.smp.data.ui.*;
@@ -19,17 +19,12 @@ import eu.europa.ec.edelivery.smp.security.ResourceGuard;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
 import eu.europa.ec.edelivery.smp.services.SMLIntegrationService;
 import eu.europa.ec.edelivery.smp.services.ui.filters.ResourceFilter;
-import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
-import eu.europa.ec.smp.api.validators.BdxSmpOasisValidator;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.UnsupportedEncodingException;
 import java.util.*;
 
-import static eu.europa.ec.edelivery.smp.data.ui.ServiceGroupValidationRO.*;
 import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*;
 
 @Service
@@ -37,7 +32,6 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou
     private static final SMPLogger LOG = SMPLoggerFactory.getLogger(UIServiceGroupService.class);
 
 
-
     protected final DomainDao domainDao;
     protected final ResourceDao serviceGroupDao;
     protected final UserDao userDao;
@@ -551,8 +545,8 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou
      * @return
      */
     private byte[] validateServiceMetadata(ServiceMetadataRO serviceMetadataRO) {
-        byte[] buff;
-
+        byte[] buff = null;
+/*
         try {
             buff = serviceMetadataRO.getXmlContent().getBytes("UTF-8");
         } catch (UnsupportedEncodingException e) {
@@ -563,6 +557,7 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou
         } catch (XmlInvalidAgainstSchemaException e) {
             throw new SMPRuntimeException(INVALID_SMD_XML, ExceptionUtils.getRootCauseMessage(e));
         }
+        */
 /*
         ServiceMetadata smd = ServiceMetadataConverter.unmarshal(buff);
         if (smd.getServiceInformation() != null) {
@@ -696,39 +691,39 @@ public class UIServiceGroupService extends UIServiceBase<DBResource, ServiceGrou
      */
     public ServiceGroupValidationRO validateServiceGroup(ServiceGroupValidationRO serviceGroup) {
 /**
-        if (serviceGroup == null) {
-            throw new SMPRuntimeException(INVALID_REQUEST, "Validate extension", "Missing Extension parameter");
-        } // if new check if service group already exist
-
-        if (serviceGroup.getStatusAction() == EntityROStatus.NEW.getStatusNumber()) {
-            Identifier normalizedParticipant = identifierService
-                    .normalizeParticipant(
-                            serviceGroup.getParticipantScheme(),
-                            serviceGroup.getParticipantIdentifier());
-            Optional<DBResource> sg = serviceGroupDao.findServiceGroup(normalizedParticipant.getValue(),
-                    normalizedParticipant.getScheme());
-            if (sg.isPresent()) {
-                serviceGroup.setErrorMessage("Service group: " + serviceGroup.getParticipantScheme() + ":" + serviceGroup.getParticipantIdentifier() +
-                        " already exists!");
-                serviceGroup.setErrorCode(ERROR_CODE_SERVICE_GROUP_EXISTS);
-                return serviceGroup;
-            }
-        }
-
-        if (StringUtils.isBlank(serviceGroup.getExtension())) {
-            // empty extension is also a valid extension
-            serviceGroup.setErrorMessage(null);
-        } else {
-            try {
-                byte[] buff = serviceGroup.getExtension().getBytes("UTF-8");
-                ExtensionConverter.validateExtensionBySchema(buff); // validate by schema
-                serviceGroup.setErrorMessage(null);
-                serviceGroup.setErrorCode(ERROR_CODE_OK);
-            } catch (XmlInvalidAgainstSchemaException | UnsupportedEncodingException e) {
-                serviceGroup.setErrorMessage(ExceptionUtils.getRootCauseMessage(e));
-                serviceGroup.setErrorCode(ERROR_CODE_INVALID_EXTENSION);
-            }
-        }
+ if (serviceGroup == null) {
+ throw new SMPRuntimeException(INVALID_REQUEST, "Validate extension", "Missing Extension parameter");
+ } // if new check if service group already exist
+
+ if (serviceGroup.getStatusAction() == EntityROStatus.NEW.getStatusNumber()) {
+ Identifier normalizedParticipant = identifierService
+ .normalizeParticipant(
+ serviceGroup.getParticipantScheme(),
+ serviceGroup.getParticipantIdentifier());
+ Optional<DBResource> sg = serviceGroupDao.findServiceGroup(normalizedParticipant.getValue(),
+ normalizedParticipant.getScheme());
+ if (sg.isPresent()) {
+ serviceGroup.setErrorMessage("Service group: " + serviceGroup.getParticipantScheme() + ":" + serviceGroup.getParticipantIdentifier() +
+ " already exists!");
+ serviceGroup.setErrorCode(ERROR_CODE_SERVICE_GROUP_EXISTS);
+ return serviceGroup;
+ }
+ }
+
+ if (StringUtils.isBlank(serviceGroup.getExtension())) {
+ // empty extension is also a valid extension
+ serviceGroup.setErrorMessage(null);
+ } else {
+ try {
+ byte[] buff = serviceGroup.getExtension().getBytes("UTF-8");
+ ExtensionConverter.validateExtensionBySchema(buff); // validate by schema
+ serviceGroup.setErrorMessage(null);
+ serviceGroup.setErrorCode(ERROR_CODE_OK);
+ } catch (XmlInvalidAgainstSchemaException | UnsupportedEncodingException e) {
+ serviceGroup.setErrorMessage(ExceptionUtils.getRootCauseMessage(e));
+ serviceGroup.setErrorCode(ERROR_CODE_INVALID_EXTENSION);
+ }
+ }
  */
         return serviceGroup;
     }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java
index b4e85fb928e3892f994f264e1f94fc238cd3b45f..c53f74fa7a68ab9e2ae1f5234ed7ebd4a6c3d04c 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataService.java
@@ -1,6 +1,5 @@
 package eu.europa.ec.edelivery.smp.services.ui;
 
-import eu.europa.ec.edelivery.security.utils.X509CertificateUtils;
 import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.data.dao.BaseDao;
 import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
@@ -9,32 +8,15 @@ import eu.europa.ec.edelivery.smp.data.dao.UserDao;
 import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataRO;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataValidationRO;
-import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.edelivery.smp.identifiers.Identifier;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
-import eu.europa.ec.smp.api.validators.BdxSmpOasisValidator;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.EndpointType;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ProcessType;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadata;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.IllegalCharsetNameException;
-import java.security.PublicKey;
 import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum.DOCUMENT_RESTRICTION_CERT_TYPES;
-import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.INVALID_REQUEST;
 
 /**
  * Services for managing the Service metadata
@@ -99,7 +81,7 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi
      */
 
     public ServiceMetadataValidationRO validateServiceMetadata(ServiceMetadataValidationRO serviceMetadataRO) {
-        byte[] buff;
+      /*  byte[] buff;
         if (serviceMetadataRO == null) {
             throw new SMPRuntimeException(INVALID_REQUEST, "Validate service metadata", "Missing servicemetadata parameter");
         } else if (StringUtils.isBlank(serviceMetadataRO.getXmlContent())) {
@@ -134,6 +116,8 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi
                 serviceMetadataRO.setErrorMessage(ExceptionUtils.getRootCauseMessage(e));
                 return serviceMetadataRO;
             }
+
+       */
 /* TODO
             // validate data
             ServiceMetadata smd = ServiceMetadataConverter.unmarshal(buff);
@@ -173,9 +157,11 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi
                 serviceMetadataRO.setErrorMessage(ExceptionUtils.getRootCauseMessage(e));
                 return serviceMetadataRO;
             }
+            }
 */
-        }
-        return serviceMetadataRO;
+
+        //return serviceMetadataRO;
+        return null;
     }
 
     /**
@@ -183,58 +169,58 @@ public class UIServiceMetadataService extends UIServiceBase<DBSubresource, Servi
      *
      * @param smd ServiceMetadata document
      * @throws CertificateException exception if certificate is not valid or the allowed key type
-     */
+
     public void validateServiceMetadataCertificates(ServiceMetadata smd) throws CertificateException {
-        List<EndpointType> endpointTypeList = searchAllEndpoints(smd);
-        for (EndpointType endpointType : endpointTypeList) {
-            validateCertificate(endpointType.getCertificate());
-        }
+    List<EndpointType> endpointTypeList = searchAllEndpoints(smd);
+    for (EndpointType endpointType : endpointTypeList) {
+    validateCertificate(endpointType.getCertificate());
     }
 
+
+    }
+     */
     /**
      * Method returns all EndpointTypes
      *
      * @param smd
-     * @return
-     */
-    public List<EndpointType> searchAllEndpoints(ServiceMetadata smd) {
-        List<ProcessType> processTypeList = smd.getServiceInformation() != null ?
-                smd.getServiceInformation().getProcessList().getProcesses() : Collections.emptyList();
+     * @return public List<EndpointType> searchAllEndpoints(ServiceMetadata smd) {
+    List<ProcessType> processTypeList = smd.getServiceInformation() != null ?
+    smd.getServiceInformation().getProcessList().getProcesses() : Collections.emptyList();
 
-        List<EndpointType> endpointTypeList = new ArrayList<>();
-        processTypeList.stream().forEach(processType -> endpointTypeList.addAll(processType.getServiceEndpointList() != null ?
-                processType.getServiceEndpointList().getEndpoints() : Collections.emptyList()));
+    List<EndpointType> endpointTypeList = new ArrayList<>();
+    processTypeList.stream().forEach(processType -> endpointTypeList.addAll(processType.getServiceEndpointList() != null ?
+    processType.getServiceEndpointList().getEndpoints() : Collections.emptyList()));
 
-        return endpointTypeList;
+    return endpointTypeList;
     }
-
+     */
     /**
      * Validate the certificate
      *
      * @param crtData x509 encoded byte array
      * @throws CertificateException
-     */
+
     public void validateCertificate(byte[] crtData) throws CertificateException {
-        if (crtData == null || crtData.length == 0) {
-            LOG.debug("Skip certificate validation: Empty certificate.");
-            return;
-        }
-        X509Certificate cert = X509CertificateUtils.getX509Certificate(crtData);
-        // validate is certificate is valid
-        cert.checkValidity();
-        // validate if certificate has the right key algorithm
-        PublicKey key = cert.getPublicKey();
-        List<String> allowedKeyAlgs = configurationService.getAllowedDocumentCertificateTypes();
-        if (allowedKeyAlgs == null || allowedKeyAlgs.isEmpty()) {
-            LOG.debug("Ignore the service metadata certificate key type validation (Empty property: [{}]).", DOCUMENT_RESTRICTION_CERT_TYPES.getProperty());
-            return;
-        }
+    if (crtData == null || crtData.length == 0) {
+    LOG.debug("Skip certificate validation: Empty certificate.");
+    return;
+    }
+    X509Certificate cert = X509CertificateUtils.getX509Certificate(crtData);
+    // validate is certificate is valid
+    cert.checkValidity();
+    // validate if certificate has the right key algorithm
+    PublicKey key = cert.getPublicKey();
+    List<String> allowedKeyAlgs = configurationService.getAllowedDocumentCertificateTypes();
+    if (allowedKeyAlgs == null || allowedKeyAlgs.isEmpty()) {
+    LOG.debug("Ignore the service metadata certificate key type validation (Empty property: [{}]).", DOCUMENT_RESTRICTION_CERT_TYPES.getProperty());
+    return;
+    }
 
-        if (StringUtils.equalsAnyIgnoreCase(key.getAlgorithm(), allowedKeyAlgs.toArray(new String[]{}))) {
-            LOG.debug("Certificate has valid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs);
-            return;
-        }
-        LOG.debug("Certificate has invalid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs);
-        throw new CertificateException("Certificate does not have allowed key type!");
+    if (StringUtils.equalsAnyIgnoreCase(key.getAlgorithm(), allowedKeyAlgs.toArray(new String[]{}))) {
+    LOG.debug("Certificate has valid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs);
+    return;
     }
+    LOG.debug("Certificate has invalid key algorithm [{}]. Allowed algorithms: [{}] .", key.getAlgorithm(), allowedKeyAlgs);
+    throw new CertificateException("Certificate does not have allowed key type!");
+    } */
 }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java
index 2eae82702c689f4e54741703356904623f112a40..0bc9fb999aa8793ec5a8ac98b109f816216d2fe3 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtils.java
@@ -12,6 +12,7 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -26,8 +27,11 @@ import java.util.stream.Collectors;
 public class SessionSecurityUtils {
     private static final SMPLogger LOG = SMPLoggerFactory.getLogger(SessionSecurityUtils.class);
 
+
+    protected SessionSecurityUtils() {
+    }
+
     /**
-     *
      * Current supported SMP authentication tokens.
      */
     protected static final List<Class> sessionAuthenticationClasses = Arrays.asList(
@@ -48,7 +52,11 @@ public class SessionSecurityUtils {
         }
         SecurityUtils.Secret secret = getAuthenticationSecret();
         String idValue = id.toString();
-        return secret != null ? SecurityUtils.encryptURLSafe(secret, idValue) : idValue;
+        if (secret == null) {
+            return idValue;
+        }
+        String valWithSeed = idValue + '#' + Calendar.getInstance().getTimeInMillis();
+        return SecurityUtils.encryptURLSafe(secret, valWithSeed);
     }
 
 
@@ -57,7 +65,13 @@ public class SessionSecurityUtils {
             return null;
         }
         SecurityUtils.Secret secret = getAuthenticationSecret();
-        String value = secret != null ? SecurityUtils.decryptUrlSafe(secret, id) : id;
+        if (secret == null) {
+            // try to convert to long value
+            return new Long(id);
+        }
+        String decVal = SecurityUtils.decryptUrlSafe(secret, id);
+        int indexOfSeparator = decVal.indexOf('#');
+        String value = indexOfSeparator > -1 ? decVal.substring(0, indexOfSeparator) : decVal;
         return new Long(value);
     }
 
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java
index 7c63a380e55aed65f2416c537b736367c22ff659..84feda5328e12810eec0da67098957730c97a772 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/SmlIntegrationConfiguration.java
@@ -5,7 +5,6 @@ import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import org.mockito.ArgumentMatchers;
 import org.mockito.BDDMockito;
 import org.mockito.Mockito;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
@@ -24,7 +23,8 @@ import static org.springframework.beans.factory.config.ConfigurableBeanFactory.S
 @Component
 public class SmlIntegrationConfiguration {
 
-    protected final ParticipantIdentifierType PARTICIPANT_ID = new ParticipantIdentifierType("sample:value", "sample:scheme");
+    //protected final ParticipantIdentifierType PARTICIPANT_ID = new ParticipantIdentifierType("sample:value", "sample:scheme");
+
     protected DBDomain defaultDomain;
 
 
@@ -105,9 +105,7 @@ public class SmlIntegrationConfiguration {
         return clientMock;
     }
 
-    public ParticipantIdentifierType getParticipantId() {
-        return PARTICIPANT_ID;
-    }
+
 
     public DBDomain getDefaultDomain() {
         return defaultDomain;
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java
index def8fc7f1f1ee90629ddb46b792ae2cba3abb286..4cdd7142dab33ec4f027a7ed5d3898489a6c7259 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/identifiers/ParticipantIdentifierFormatterParseTests.java
@@ -6,7 +6,7 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
+
 
 import java.util.Arrays;
 import java.util.Collection;
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java
deleted file mode 100644
index 2818e648f3d45aa4f6f39ebc45b8c7b5e7fa19c6..0000000000000000000000000000000000000000
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2018 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.services;
-
-import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
-import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
-import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
-import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.edelivery.smp.testutil.TestConstants;
-import eu.europa.ec.edelivery.smp.testutil.TestDBUtils;
-import org.hamcrest.MatcherAssert;
-import org.hamcrest.Matchers;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.Optional;
-import java.util.regex.Pattern;
-
-import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
-import static org.junit.Assert.*;
-
-/**
- *  Purpose of class is to test ServiceGroupService base methods
- *
- * @author Joze Rihtarsic
- * @since 4.1
- */
-@Ignore
-public class ServiceGroupServiceIntegrationTest extends AbstractServiceIntegrationTest {
-    public static Pattern DEFAULT_URN_PATTERN = Pattern.compile("^(?i)((urn:)|(mailto:)).*$");
-
-    @Autowired
-    ServiceGroupService testInstance;
-
-    @Before
-    public void initDatabase(){
-        prepareDatabaseForSingleDomainEnv();
-    }
-
-    @Test
-    public void validateOwnershipUserNotExists(){
-        Optional<DBResource>  dbsg = serviceGroupDao.findServiceGroup( TEST_SG_ID_2, TEST_SG_SCHEMA_2);
-        assertTrue(dbsg.isPresent()); // test if exists
-        //test
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,  () -> testInstance.validateOwnership("UserNotExist", dbsg.get()));
-        assertEquals(ErrorCode.USER_NOT_EXISTS.getMessage(), result.getMessage());
-    }
-
-    @Test
-    @Transactional
-    public void validateMethodOwnershipUserNotOnwner(){
-        Optional<DBResource>  dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2);
-        assertTrue(dbsg.isPresent()); // test if exists
-
-        DBUser u3= TestDBUtils.createDBUserByCertificate(TestConstants.USER_CERT_3);
-        userDao.persistFlushDetach(u3);
-        //test
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,  () ->  testInstance.validateOwnership(USER_CERT_3, dbsg.get()) );
-        assertEquals(ErrorCode.USER_IS_NOT_OWNER.getMessage(USER_CERT_3,
-                TEST_SG_ID_2, TEST_SG_SCHEMA_2), result.getMessage());
-
-    }
-
-    @Test
-    public void toServiceGroupTest() {
-        // set
-        DBResource sg = TestDBUtils.createDBResource();
-
-        //when
-        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, DEFAULT_URN_PATTERN);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue());
-        assertEquals(sg.getIdentifierScheme(), serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(1, serviceGroup.getExtensions().size());
-    }
-
-    @Test
-    public void toServiceGroupTestEBCorePartyIDNotContact() {
-        // set
-
-        DBResource sg = TestDBUtils.createDBResource("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523");
-
-        //when
-        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, null);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue());
-        assertEquals(sg.getIdentifierScheme(), serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(1, serviceGroup.getExtensions().size());
-    }
-
-    @Test
-    public void toServiceGroupTestEBCorePartyIDContact() {
-        // set
-        DBResource sg = TestDBUtils.createDBResource("0088:123456789","urn:oasis:names:tc:ebcore:partyid-type:iso6523");
-        //when
-        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, DEFAULT_URN_PATTERN);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getIdentifierScheme() +":" + sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue());
-        assertNull(serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(1, serviceGroup.getExtensions().size());
-    }
-
-    @Test
-    public void toServiceGroupTestMultiExtensions() {
-        // set
-        /*
-        DBResource sg = TestDBUtils.createDBServiceGroup();
-        sg.setExtension(ExtensionConverter.concatByteArrays(TestDBUtils.generateExtension(), TestDBUtils.generateExtension()));
-
-        //when-then
-        ServiceGroup serviceGroup = testInstance.toServiceGroup(sg, null);
-        assertNotNull(serviceGroup);
-        assertEquals(sg.getIdentifierValue(), serviceGroup.getParticipantIdentifier().getValue());
-        assertEquals(sg.getIdentifierScheme(), serviceGroup.getParticipantIdentifier().getScheme());
-        assertEquals(2, serviceGroup.getExtensions().size());
-
-         */
-    }
-
-    @Test
-    public void toServiceGroupTestIsEmpty() {
-        // set
-        //when
-        ServiceGroup serviceGroup = testInstance.toServiceGroup(null, null);
-        assertNull(serviceGroup);
-    }
-
-}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceMultipleDomainsIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceMultipleDomainsIntegrationTest.java
deleted file mode 100644
index ab17300b1ae4745d713183cd015159336e232e41..0000000000000000000000000000000000000000
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceMultipleDomainsIntegrationTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2018 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.services;
-
-import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
-import eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum;
-import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.edelivery.smp.identifiers.Identifier;
-import eu.europa.ec.edelivery.smp.testutil.TestConstants;
-import eu.europa.ec.edelivery.smp.testutil.TestDBUtils;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.USER_IS_NOT_OWNER;
-import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
-import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsString;
-import static org.junit.Assert.*;
-
-/**
- * Created by gutowpa on 18/01/2018.
- */
-@Ignore
-public class ServiceGroupServiceMultipleDomainsIntegrationTest extends AbstractServiceIntegrationTest {
-
-    @Rule
-    public ExpectedException expectedException = ExpectedException.none();
-
-    @Autowired
-    protected ServiceGroupService testInstance;
-
-
-    @Before
-    public void prepareDatabase() {
-
-        super.prepareDatabaseForMultipeDomainEnv();
-        setDatabaseProperty(SMPPropertyEnum.SML_ENABLED,"false");
-    }
-
-    @Test
-    public void getServiceGroupForAllDomainTest() {
-        // given
-        Identifier serviceGroupId = new Identifier();
-        serviceGroupId.setValue(TEST_SG_ID_2);
-        serviceGroupId.setScheme(TEST_SG_SCHEMA_2);
-
-        // when
-        ServiceGroup sg = testInstance.getServiceGroup(serviceGroupId);
-
-        // then
-        assertNotNull(sg);
-        assertEquals(TEST_SG_ID_2, sg.getParticipantIdentifier().getValue());
-        assertEquals(TEST_SG_SCHEMA_2, sg.getParticipantIdentifier().getScheme());
-        assertEquals(1, sg.getExtensions().size());
-    }
-/*
-
-    @Test
-    public void createAndReadPositiveScenarioForMultipleDomain() throws IOException {
-        // given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-        Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2);
-        assertFalse(dbsg.isPresent()); // test if exists - it must not :)
-
-        // when
-        boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, TEST_DOMAIN_CODE_2, TestConstants.USERNAME_TOKEN_1,
-                TestConstants.USERNAME_TOKEN_1);
-        Optional<DBResource> optRes = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2);
-
-        // then
-        assertTrue(bCreated);
-        assertTrue(optRes.isPresent());
-        DBResource dbServiceGroup = optRes.get();
-        assertEquals(1, dbServiceGroup.getResourceDomains().size());
-        assertEquals(TEST_DOMAIN_CODE_2, dbServiceGroup.getResourceDomains().get(0).getDomain().getDomainCode());
-        assertEquals(inServiceGroup.getParticipantIdentifier().getValue(), dbServiceGroup.getIdentifierValue());
-        assertEquals(inServiceGroup.getParticipantIdentifier().getScheme(), dbServiceGroup.getIdentifierScheme());
-
-    }
-
-    @Test
-    public void updateAndReadPositiveScenarioForMultipleDomain() throws IOException, JAXBException, XMLStreamException {
-        // given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH));
-        Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2);
-        assertTrue(dbsg.isPresent()); // test if exists
-        byte[] extension = dbsg.get().getExtension(); // test if exists
-        byte[] newExtension = ExtensionConverter.marshalExtensions(inServiceGroup.getExtensions());
-        assertNotEquals(extension, newExtension); // extension updated
-
-        // when
-        boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, TEST_DOMAIN_CODE_1, ""+ TestConstants.USERNAME_TOKEN_1,
-                TestConstants.USERNAME_TOKEN_1);
-        serviceGroupDao.clearPersistenceContext();
-
-        Optional<DBResource> optRes = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2);
-
-        // then
-        assertFalse(bCreated);
-        assertTrue(optRes.isPresent());
-        DBResource dbServiceGroup = optRes.get();
-        assertEquals(1, dbServiceGroup.getResourceDomains().size());
-        assertEquals(TEST_DOMAIN_CODE_1, dbServiceGroup.getResourceDomains().get(0).getDomain().getDomainCode());
-        assertEquals(inServiceGroup.getParticipantIdentifier().getValue(), dbServiceGroup.getIdentifierValue());
-        assertEquals(inServiceGroup.getParticipantIdentifier().getScheme(), dbServiceGroup.getIdentifierScheme());
-        assertTrue(Arrays.equals(newExtension, dbServiceGroup.getExtension())); // extension updated
-    }
-*/
-    @Test
-    public void userIsNotOwnerOfServiceGroup() throws Throwable {
-        //given
-        /*
-        ServiceGroup newServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH));
-        DBUser u3 = TestDBUtils.createDBUserByCertificate(TestConstants.USER_CERT_3);
-        userDao.persistFlushDetach(u3);
-
-        expectedException.expect(SMPRuntimeException.class);
-        expectedException.expectMessage(USER_IS_NOT_OWNER.getMessage(USER_CERT_3, TEST_SG_ID_2, TEST_SG_SCHEMA_2));
-
-        //when-then
-        testInstance.saveServiceGroup(newServiceGroup, TEST_DOMAIN_CODE_2, TestConstants.USER_CERT_3, TestConstants.USER_CERT_3);
-
-         */
-    }
-
-}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java
deleted file mode 100644
index 058c4dff54c0d67bd94d1a2446f3cdc6ee260720..0000000000000000000000000000000000000000
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceSingleDomainIntegrationTest.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright 2018 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.services;
-
-
-import eu.europa.ec.edelivery.smp.data.model.*;
-import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
-import eu.europa.ec.edelivery.smp.data.model.doc.DBSubresource;
-import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
-import eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum;
-import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.edelivery.smp.identifiers.Identifier;
-import eu.europa.ec.edelivery.smp.testutil.TestConstants;
-import org.hamcrest.CoreMatchers;
-import org.hamcrest.MatcherAssert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.xml.bind.JAXBException;
-import javax.xml.stream.XMLStreamException;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Optional;
-
-import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.*;
-import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
-import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsString;
-import static org.junit.Assert.*;
-
-/**
- * Created by gutowpa on 17/01/2018.
- */
-@Ignore
-@RunWith(SpringRunner.class)
-public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServiceIntegrationTest {
-
-    @Autowired
-    protected ServiceGroupService testInstance;
-
-    @Before
-    @Transactional
-    public void prepareDatabase() {
-        prepareDatabaseForSingleDomainEnv();
-        setDatabaseProperty(SMPPropertyEnum.SML_ENABLED,"false");
-    }
-
-    @Test
-    public void isServiceGroupOwnerForMetadataID(){
-        /*
-        // given
-        DBUser user = userDao.findUserByUsername(USERNAME_1).get();
-        DBSubresource metadata = serviceMetadataDao.findServiceMetadata(TEST_SG_ID_1, TEST_SG_SCHEMA_1,
-                TEST_DOC_ID_1, TEST_DOC_SCHEMA_1).get();
-        // when
-        Optional<DBDomainResourceDef> result = serviceGroupDao.findServiceGroupDomainForUserIdAndMetadataId(user.getId(), metadata.getId());
-        // then
-        assertTrue(result.isPresent());
-
-         */
-    }
-/*
-    @Test
-    public void isServiceGroupOwnerForMetadataIDFailed(){
-        // given
-        DBUser user = userDao.findUserByUsername(USERNAME_2).get();
-        DBSubresource metadata = serviceMetadataDao.findServiceMetadata(TEST_SG_ID_1, TEST_SG_SCHEMA_1,
-                TEST_DOC_ID_1, TEST_DOC_SCHEMA_1).get();
-        // when
-        Optional<DBDomainResourceDef> result = serviceGroupDao.findServiceGroupDomainForUserIdAndMetadataId(user.getId(), metadata.getId());
-        // then
-        assertFalse(result.isPresent());
-    }
-
-
-
-    @Test
-    public void createAndReadPositiveScenarioForNullDomain() throws IOException {
-        // given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-        Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2);
-        assertFalse(dbsg.isPresent()); // test if exists
-        DBDomain domain = domainDao.getTheOnlyDomain().get();
-        assertNotNull(domain);
-        // when
-        boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, null, TestConstants.USERNAME_TOKEN_1,
-                TestConstants.USERNAME_TOKEN_1);
-
-        Optional<DBResource> optRes= serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2);
-
-        // then
-        assertTrue(bCreated);
-        dbAssertion.assertServiceGroupForOnlyDomain(inServiceGroup.getParticipantIdentifier().getValue(),
-                inServiceGroup.getParticipantIdentifier().getScheme(),domain.getDomainCode());
-
-    }
-
-   @Test
-    public void createAndReadPositiveScenarioForWithDomain() throws IOException {
-       // given
-       ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-       Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2);
-       assertFalse(dbsg.isPresent()); // test if exists
-       DBDomain domain = domainDao.getTheOnlyDomain().get();
-       assertNotNull(domain);
-
-       // when
-       boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, domain.getDomainCode(), TestConstants.USERNAME_TOKEN_1,
-               TestConstants.USERNAME_TOKEN_1);
-
-
-       Optional<DBResource> optRes= serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2);
-
-       // then
-       assertTrue(bCreated);
-       dbAssertion.assertServiceGroupForOnlyDomain(inServiceGroup.getParticipantIdentifier().getValue(),
-               inServiceGroup.getParticipantIdentifier().getScheme(),domain.getDomainCode());
-    }
-
-    @Test
-    public void updateAndReadPositiveScenario() throws IOException, JAXBException, XMLStreamException {
-        // given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH));
-        Optional<DBResource> dbsg = serviceGroupDao.findServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2);
-        assertTrue(dbsg.isPresent()); // test if exists
-        DBDomain domain = domainDao.getTheOnlyDomain().get();
-        assertNotNull(domain);
-
-        byte[] extension = dbsg.get().getExtension(); // test if exists
-        byte[] newExtension  = ExtensionConverter.marshalExtensions(inServiceGroup.getExtensions());
-        assertFalse(Arrays.equals(extension, newExtension)); // extension updated
-
-        // when
-        boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, domain.getDomainCode(), TestConstants.USERNAME_TOKEN_1,
-                TestConstants.USERNAME_TOKEN_1);
-
-
-        Optional<DBResource> optRes= serviceGroupDao.findServiceGroup(TEST_SG_ID_PL, TEST_SG_SCHEMA_2);
-
-        // then
-        assertFalse(bCreated);
-        dbAssertion.assertServiceGroupExtensionEqual(inServiceGroup.getParticipantIdentifier().getValue(),
-                inServiceGroup.getParticipantIdentifier().getScheme(),
-                newExtension);
-    }
-
-    @Test
-    public void serviceGroupNotExistsWhenRetrievingSG() {
-        // when-then
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-                ()->testInstance.getServiceGroup(new Identifier("not-existing", "bad-srv-grp") ));
-
-        assertEquals(SG_NOT_EXISTS.getMessage("not-existing", "bad-srv-grp"), result.getMessage());
-    }
-
-    @Test
-    public void saveAndDeletePositiveScenario() throws IOException {
-
-        // given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-        boolean bCreated = testInstance.saveServiceGroup(inServiceGroup, null, TestConstants.USERNAME_TOKEN_1,
-                TestConstants.USERNAME_TOKEN_1);
-        assertTrue(bCreated);
-        serviceGroupDao.clearPersistenceContext();
-
-        //when
-        testInstance.deleteServiceGroup(inServiceGroup.getParticipantIdentifier());
-        serviceGroupDao.clearPersistenceContext();
-
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-                ()->testInstance.getServiceGroup(inServiceGroup.getParticipantIdentifier()));
-        assertEquals(SG_NOT_EXISTS.getMessage( inServiceGroup.getParticipantIdentifier().getValue(), inServiceGroup.getParticipantIdentifier().getScheme())
-                , result.getMessage());
-
-    }
-
-    @Test
-    public void defineGroupOwnerWhenOwnerIsNull(){
-        String testUser = "user";
-        String result = testInstance.defineGroupOwner(null, testUser);
-        assertEquals(testUser, result);
-
-        result = testInstance.defineGroupOwner("", testUser);
-        assertEquals(testUser, result);
-    }
-
-    @Test
-    public void defineGroupOwnerWhenOwnerIsNotNull(){
-        String testUser = "user";
-        String testOwner = "owner";
-        String result = testInstance.defineGroupOwner(testOwner, testUser);
-        assertEquals(testOwner, result);
-    }
-
-
-    @Test
-    public void updateInvalidUserException() throws IOException, JAXBException {
-
-        // given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH));
-        Optional<DBResource>  dbsg = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2);
-        Optional<DBUser> dbUser = userDao.findUserByIdentifier(TestConstants.USER_CERT_2);
-        assertTrue(dbsg.isPresent()); // test if exists
-        assertTrue(dbUser.isPresent()); // test if exists
-        //assertFalse(dbsg.get().getUsers().contains(dbUser.get())); // test not owner
-
-        // when
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-                ()->testInstance.saveServiceGroup(inServiceGroup,null,
-                TestConstants.USER_CERT_2, TestConstants.USER_CERT_2));
-
-        assertEquals(USER_IS_NOT_OWNER.getMessage(TestConstants.USER_CERT_2,
-                dbsg.get().getIdentifierValue(), dbsg.get().getIdentifierScheme()), result.getMessage());
-    }
-
-    @Test
-    public void updateUnknownUserException() throws IOException, JAXBException {
-
-        // given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH));
-        Optional<DBResource>  dbsg = dbAssertion.findAndInitServiceGroup(TEST_SG_ID_2, TEST_SG_SCHEMA_2);
-        Optional<DBUser> dbUser = userDao.findUserByIdentifier(TestConstants.USER_CERT_3);
-        assertTrue(dbsg.isPresent()); // test if note exists
-        assertFalse(dbUser.isPresent()); // test if exists
-        // when
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-                ()->testInstance.saveServiceGroup(inServiceGroup, null,
-                TestConstants.USER_CERT_3, TestConstants.USER_CERT_3));
-
-        assertEquals(INVALID_OWNER.getMessage(TestConstants.USER_CERT_3), result.getMessage());
-    }
-
-    @Test
-    public void updateInvalidUserEncodingException() throws IOException {
-        String  username = "test::20%atest";
-        //given
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_TEST2_XML_PATH));
-
-        //when
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-                ()->testInstance.saveServiceGroup(inServiceGroup, null, username, username));
-
-        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.startsWith("Unsupported or invalid encoding"));
-    }
-
-  @Test
-    public void savingUnderNotExistingDomainIsNotAllowed() throws Throwable {
-        //given
-        String domain="NOTEXISTINGDOMAIN";
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-
-        //execute
-      SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-              ()->testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1));
-
-      assertEquals(DOMAIN_NOT_EXISTS.getMessage(domain), result.getMessage());
-    }
-
-    @Test
-    public void onlyASCIICharactersAllowedInDomainId() throws Throwable {
-        //given
-        String domain="notAllowedChars:-_;#$";
-        ServiceGroup inServiceGroup = unmarshal(loadDocumentAsString(TestConstants.SERVICE_GROUP_POLAND_XML_PATH));
-
-        //execute
-        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-                ()->testInstance.saveServiceGroup(inServiceGroup, domain, USERNAME_TOKEN_1, USERNAME_TOKEN_1));
-
-        assertEquals(INVALID_DOMAIN_CODE.getMessage(domain,
-                DomainService.DOMAIN_ID_PATTERN.pattern()), result.getMessage());
-    }
-*/
-    @Test
-    public void urlsAreHandledByWebLayer() throws Throwable {
-        /* TODO
-        //when
-        ParticipantIdentifierType pt = new ParticipantIdentifierType();
-        pt.setValue(TEST_SG_ID_2);
-        pt.setScheme(TEST_SG_SCHEMA_2);
-        // execute
-        ServiceGroup serviceGroup = testInstance.getServiceGroup(pt);
-        assertNotNull(serviceGroup);
-        //then
-        List<ServiceMetadataReferenceType> serviceMetadataReferences = serviceGroup.getServiceMetadataReferenceCollection().getServiceMetadataReferences();
-        //URLs are handled in by the REST webservices layer
-        assertEquals(0, serviceMetadataReferences.size());
-
-         */
-    }
-
-}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java
deleted file mode 100644
index 594a3148e19968639b9e52032f4800e8d954b842..0000000000000000000000000000000000000000
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright 2017 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.services;
-
-import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
-import eu.europa.ec.edelivery.smp.data.model.DBDomain;
-import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
-import eu.europa.ec.edelivery.smp.identifiers.Identifier;
-import eu.europa.ec.edelivery.smp.services.spi.SmpXmlSignatureService;
-import eu.europa.ec.edelivery.smp.services.ui.UIKeystoreService;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.util.ReflectionTestUtils;
-import org.springframework.transaction.annotation.Transactional;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-
-import javax.xml.bind.JAXBException;
-import javax.xml.transform.TransformerException;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.regex.Pattern;
-
-
-import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
-import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsByteArray;
-import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.marshallToByteArray;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-/**
- * Created by gutowpa on 15/11/2017.
- */
-@Ignore
-@RunWith(SpringJUnit4ClassRunner.class)
-public class ServiceMetadataIntegrationTest extends AbstractServiceIntegrationTest {
-
-    static Identifier PT_ID = null;
-    static Identifier DOC_ID = null;
-
-    static {
-        PT_ID = new Identifier();
-        PT_ID.setValue(TEST_SG_ID_PL2);
-        PT_ID.setScheme(TEST_SG_SCHEMA_PL2);
-        DOC_ID = new Identifier();
-        DOC_ID.setValue(TEST_DOC_ID_PL2);
-        DOC_ID.setScheme(TEST_DOC_SCHEMA_PL2);
-    }
-
-    Path resourceDirectory = Paths.get("src", "test", "resources", "keystores");
-
-    ConfigurationService configurationService = Mockito.mock(ConfigurationService.class);
-
-    @Autowired
-    IdentifierService identifierService;
-    @Autowired
-    ServiceMetadataService testInstance;
-    @Autowired
-    UIKeystoreService uiKeystoreService;
-    @Autowired
-    SmpXmlSignatureService signer;
-
-    @Rule
-    public ExpectedException expectedExeption = ExpectedException.none();
-
-    @Before
-    @Transactional
-    public void prepareDatabase() {
-        configurationService = Mockito.spy(configurationService);
-        ReflectionTestUtils.setField(uiKeystoreService, "configurationService", configurationService);
-        ReflectionTestUtils.setField(signer, "uiKeystoreService", uiKeystoreService);
-        ReflectionTestUtils.setField(testInstance, "signer", signer);
-        ReflectionTestUtils.setField(testInstance, "identifierService", identifierService);
-
-        identifierService.configureParticipantIdentifierFormatter(null, null, Pattern.compile(".*"));
-        // set keystore properties
-        File keystoreFile = new File(resourceDirectory.toFile(), "smp-keystore.jks");
-        Mockito.doReturn(keystoreFile).when(configurationService).getKeystoreFile();
-        Mockito.doReturn(resourceDirectory.toFile()).when(configurationService).getSecurityFolder();
-        Mockito.doReturn("test123").when(configurationService).getKeystoreCredentialToken();
-        uiKeystoreService.refreshData();
-
-        prepareDatabaseForSingleDomainEnv();
-        DBResource sg = new DBResource();
-        sg.setIdentifierValue(TEST_SG_ID_PL2.toLowerCase());
-        sg.setIdentifierScheme(TEST_SG_SCHEMA_PL2.toLowerCase());
-        DBDomain domain = domainDao.getDomainByCode(TEST_DOMAIN_CODE_1).get();
-       // sg.addDomain(domain);
-        serviceGroupDao.persistFlushDetach(sg);
-    }
-
-    @Test
-    public void saveAndReadPositiveScenario() throws IOException, TransformerException, JAXBException {
-        //given
-        byte[] inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
-        //     byte[] expectedSignedServiceMetadataXml = loadDocumentAsByteArray(SIGNED_SERVICE_METADATA_XML_PATH);
-        List<Identifier> docIdsBefore = testInstance.findServiceMetadataIdentifiers(PT_ID);
-        assertEquals(0, docIdsBefore.size());
-
-        //when
-        testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, inServiceMetadataXml);
-        List<Identifier> docIdsAfter = testInstance.findServiceMetadataIdentifiers(PT_ID);
-        Document outServiceMetadataDoc = testInstance.getServiceMetadataDocument(PT_ID, DOC_ID);
-
-        //then
-        assertEquals(1, docIdsAfter.size());
-        assertEquals(DOC_ID.getValue().toLowerCase(), docIdsAfter.get(0).getValue()); // normalized
-        assertEquals(DOC_ID.getScheme().toLowerCase(), docIdsAfter.get(0).getScheme()); // normalized
-        assertEquals("SignedServiceMetadata", outServiceMetadataDoc.getDocumentElement().getTagName());
-        // has signature
-        assertEquals(1, outServiceMetadataDoc.getElementsByTagNameNS("http://www.w3.org/2000/09/xmldsig#", "Signature").getLength());
-        // has service metadata
-        NodeList serviceMetadata = outServiceMetadataDoc.getElementsByTagNameNS("http://docs.oasis-open.org/bdxr/ns/SMP/2016/05", "ServiceMetadata");
-        assertEquals(1, serviceMetadata.getLength());
-        //        assertArrayEquals(expectedSignedServiceMetadataXml, ServiceMetadataConverter.toByteArray(outServiceMetadataDoc));
-    }
-/*
-    @Test
-    public void serviceMetadataNotExistsWhenReading() {
-
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(),
-                SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
-
-        testInstance.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID);
-    }
-
-
-    @Test
-    public void serviceMetadataNotExistsWhenDeleting() {
-        // given
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(),
-                SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
-        // when - then
-        testInstance.deleteServiceMetadata(null, SERVICE_GROUP_ID, DOC_ID);
-    }
-
-    @Test
-    public void saveAndDeletePositiveScenario() throws IOException {
-        //given
-        byte[] inServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
-        testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, inServiceMetadataXml);
-        List<Identifier> docIdsBefore = testInstance.findServiceMetadataIdentifiers(PT_ID);
-        assertEquals(1, docIdsBefore.size());
-        Optional<DBSubresource> DBSubresource = serviceMetadataDao.findServiceMetadata(
-                PT_ID.getValue().toLowerCase(), PT_ID.getScheme().toLowerCase(),
-                DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase());
-        assertTrue(DBSubresource.isPresent());
-
-        //when
-        testInstance.deleteServiceMetadata(null, PT_ID, DOC_ID);
-
-        //then
-        List<Identifier> docIdsAfter = testInstance.findServiceMetadataIdentifiers(SERVICE_GROUP_ID);
-        assertEquals(0, docIdsAfter.size());
-
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(ErrorCode.METADATA_NOT_EXISTS.getMessage(SERVICE_GROUP_ID.getValue().toLowerCase(),
-                SERVICE_GROUP_ID.getScheme().toLowerCase(), DOC_ID.getValue().toLowerCase(), DOC_ID.getScheme().toLowerCase()));
-
-        testInstance.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID);
-    }
-
-    @Test
-    public void updatePositiveScenario() throws IOException, JAXBException, TransformerException {
-        //given
-        byte[] oldServiceMetadataXml = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
-        testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, oldServiceMetadataXml);
-
-        ServiceMetadata newServiceMetadata = unmarshal(loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH));
-        EndpointType endpoint = newServiceMetadata.getServiceInformation().getProcessList().getProcesses().get(0).getServiceEndpointList().getEndpoints().get(0);
-        endpoint.setServiceDescription("New Description");
-        byte[] newServiceMetadataXml = marshallToByteArray(newServiceMetadata);
-        testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, newServiceMetadataXml);
-
-        //when
-        Document resultServiceMetadataDoc = testInstance.getServiceMetadataDocument(PT_ID, DOC_ID);
-        //then
-        String newDescription = resultServiceMetadataDoc.getElementsByTagName("ServiceDescription").item(0).getTextContent();
-        assertEquals("New Description", newDescription);
-    }
-
-    @Test
-    public void findServiceMetadataIdsPositiveScenario() throws IOException, JAXBException, TransformerException {
-        //given
-        byte[] serviceMetadataXml1 = loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH);
-        testInstance.saveServiceMetadata(null, PT_ID, DOC_ID, serviceMetadataXml1);
-
-        String secondDocIdValue = "second-doc-id";
-        Identifier secondDocId = new Identifier(secondDocIdValue, DOC_ID.getScheme());
-        ServiceMetadata serviceMetadata2 = unmarshal(loadDocumentAsByteArray(SERVICE_METADATA_XML_PATH));
-        serviceMetadata2.getServiceInformation().getDocumentIdentifier().setValue(secondDocIdValue);
-        byte[] serviceMetadataXml2 = marshallToByteArray(serviceMetadata2);
-        testInstance.saveServiceMetadata(null, PT_ID, secondDocId, serviceMetadataXml2);
-
-        //when
-        List<Identifier> docIds = testInstance.findServiceMetadataIdentifiers(PT_ID);
-
-        //then
-        assertEquals(2, docIds.size());
-        Identifier docId1 = docIds.get(0);
-        assertEquals(DOC_ID.getScheme().toLowerCase(), docId1.getScheme());
-        assertEquals(DOC_ID.getValue().toLowerCase(), docId1.getValue());
-        Identifier docId2 = docIds.get(1);
-        assertEquals(DOC_ID.getScheme().toLowerCase(), docId2.getScheme());
-        assertEquals(secondDocIdValue, docId2.getValue());
-    }
-*/
-
-}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java
index 6afcd6127a1fca5d58d52c9316110007fed298e9..989ecd7afe5782e25ebd8419eac81b53d56517ad 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerMultipleDomainsIntegrationTest.java
@@ -32,7 +32,6 @@ import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocument;
 import static org.junit.Assert.assertEquals;
 import static org.apache.xml.security.signature.XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256;
 import static javax.xml.crypto.dsig.DigestMethod.SHA256;
@@ -70,18 +69,4 @@ public class ServiceMetadataSignerMultipleDomainsIntegrationTest extends  Abstra
         uiKeystoreService.refreshData();
     }
 
-    @Test
-    public void testSignatureCalculatedForSecondDomain() throws Exception {
-        // given
-        Document document = loadDocument("/input/SignedServiceMetadata_withoutSignature.xml");
-
-        // when
-        signer.sign(document, "second_domain_alias", ALGO_ID_SIGNATURE_RSA_SHA256, SHA256);
-        Element smpSigPointer = SignatureUtil.findSignatureByParentNode(document.getDocumentElement());
-        String signingCertSubject = smpSigPointer.getElementsByTagName("X509SubjectName").item(0).getTextContent();
-
-        // then
-        SignatureUtil.validateSignature(smpSigPointer);
-        assertEquals("CN=Secodn domain,OU=SMP,O=CEF Digital,C=BE", signingCertSubject);
-    }
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java
index e0d67d19782919d09ad258d13315b18f8b4bbb80..8fb40d6ca459a8a84391440292f91b3af4f63f14 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataSignerTest.java
@@ -30,7 +30,7 @@ import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocument;
+
 import static javax.xml.crypto.dsig.DigestMethod.SHA256;
 import static org.apache.xml.security.signature.XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256;
 
@@ -65,7 +65,7 @@ public class ServiceMetadataSignerTest extends AbstractServiceIntegrationTest{
         Mockito.doReturn("test123").when(configurationService).getKeystoreCredentialToken();
         uiKeystoreService.refreshData();
     }
-
+/*
     private Document loadAndSignDocumentForDefault() throws Exception {
         Document documentToSign = loadDocument("/input/SignedServiceMetadata_withoutSignature.xml");
         signer.sign(documentToSign, null, ALGO_ID_SIGNATURE_RSA_SHA256, SHA256);
@@ -115,6 +115,6 @@ public class ServiceMetadataSignerTest extends AbstractServiceIntegrationTest{
 
         SignatureUtil.validateSignature(adminSignature);
     }
-
+*/
 
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java
index 4b2d33f1b858f5ad5ff57ca3d44dbd4756e5f033..1ccce6738db223efba6adc8d58b49364a8c735f0 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIServiceMetadataServiceTest.java
@@ -6,12 +6,12 @@ import eu.europa.ec.edelivery.smp.data.ui.ServiceMetadataValidationRO;
 import eu.europa.ec.edelivery.smp.services.AbstractServiceIntegrationTest;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
 import eu.europa.ec.edelivery.smp.testutil.TestDBUtils;
-import eu.europa.ec.edelivery.smp.testutil.XmlTestUtils;
+
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.*;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.transaction.annotation.Transactional;
@@ -43,6 +43,7 @@ public class UIServiceMetadataServiceTest extends AbstractServiceIntegrationTest
     public void prepareDatabase() {
         prepareDatabaseForSingleDomainEnv();
     }
+
 /*
     @Test
     public void getServiceMetadataXMLById() {
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java
index e6c3a1faf18e0dfbde3de4b6b0ff2d18ffaad6ed..6674c0849e1851ef19be64749c24d51a71bf535e 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/sml/SmlConnectorTestConstants.java
@@ -2,11 +2,12 @@ package eu.europa.ec.edelivery.smp.sml;
 
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
 import eu.europa.ec.edelivery.smp.identifiers.Identifier;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
+
 
 
 public class SmlConnectorTestConstants {
-    protected static final Identifier PARTICIPANT_ID = new Identifier("sample:value", "sample:scheme");
+    //protected static final Identifier PARTICIPANT_ID = new Identifier("sample:value", "sample:scheme");
+    protected static final Identifier PARTICIPANT_ID = null;
     protected static final DBDomain DEFAULT_DOMAIN;
 
     static {
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java
index 770530a7ecdd31130d039bfb5b48aef2aa3b88ac..1d27d6100b0bb0bdab7cfd0e460805df0962f623 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/SignatureUtil.java
@@ -170,17 +170,6 @@ public class SignatureUtil {
         return findSignatureByParentNode(extension);
     }
 
-    public static Document buildDocWithGivenRoot(Element smNode) throws ParserConfigurationException, TransformerException, IOException, SAXException {
-        Document docUnwrapped = XmlTestUtils.getDocumentBuilder().newDocument();
-        Node sm = docUnwrapped.importNode(smNode, true);
-        docUnwrapped.appendChild(sm);
-
-        // Marshalling and parsing the document - signature validation fails without this stinky "magic".
-        // _Probably_ SUN's implementation doesn't import correctly signatures between two different documents.
-        String strUnwrapped = marshall(docUnwrapped);
-        return parseDocument(strUnwrapped);
-    }
-
     public static Element findSignatureByParentNode(Element sigParent) {
         for (Node child = sigParent.getFirstChild(); child != null; child = child.getNextSibling()) {
             if ("Signature".equals(child.getLocalName()) && "http://www.w3.org/2000/09/xmldsig#".equals(child.getNamespaceURI())) {
@@ -190,10 +179,7 @@ public class SignatureUtil {
         throw new RuntimeException("Signature not found in given node.");
     }
 
-    public static Document parseDocument(String docContent) throws IOException, SAXException, ParserConfigurationException {
-        InputStream inputStream = new ByteArrayInputStream(docContent.getBytes());
-        return XmlTestUtils.getDocumentBuilder().parse(inputStream);
-    }
+
 
     public static Element findExtensionInServiceInformation(Document doc) throws ParserConfigurationException, SAXException, IOException {
         Element serviceInformation = findFirstElementByName(doc, "ServiceInformation");
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java
index 9366957b800416d81d75574c82fbf4de80d7a647..40499de70b9cc3a688049e6f1e3fb2d1752d3813 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestConstants.java
@@ -1,6 +1,7 @@
 package eu.europa.ec.edelivery.smp.testutil;
 
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
+
+
 
 public class TestConstants {
 
@@ -60,7 +61,8 @@ public class TestConstants {
     public static final String SERVICE_METADATA_XML_PATH = "/examples/services/ServiceMetadataPoland.xml";
     public static final String SIGNED_SERVICE_METADATA_XML_PATH = "/examples/services/SignedServiceMetadataPoland.xml";
 
-    public static final ParticipantIdentifierType SERVICE_GROUP_ID = new ParticipantIdentifierType("urn:eu:ncpb", "participant-scheme-qns");
+    //public static final ParticipantIdentifierType SERVICE_GROUP_ID = new ParticipantIdentifierType("urn:eu:ncpb", "participant-scheme-qns");
+
 
     public static final String ADMIN_USERNAME = "test_admin";
     public static final String CERT_USER = "CN=common name,O=org,C=BE:0000000000000066";
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java
index 2b703ac589f0ef5efc867099ea34c136d6bd6e33..6846c01ead5e844f3aac250eebfd0b6d617e50a4 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/TestROUtils.java
@@ -85,17 +85,6 @@ public class TestROUtils {
         return String.format(SIMPLE_DOCUMENT_XML, partSch, partId, docSch, docId, UUID.randomUUID().toString());
     }
 
-    public static ServiceGroupValidationRO getInvalid() throws IOException {
-        String inputDoc = XmlTestUtils.loadDocumentAsString(RES_PATH + "extensionInvalid.xml");
-        return getExtensionRO(inputDoc);
-    }
-
-    public static ServiceGroupValidationRO getCustomExtension() throws IOException {
-        String inputDoc = XmlTestUtils.loadDocumentAsString(RES_PATH + "extensionCustom.xml");
-        return getExtensionRO(inputDoc);
-    }
-
-
     public static ServiceGroupValidationRO getExtensionRO(String extension) {
         ServiceGroupValidationRO sg = new ServiceGroupValidationRO();
         sg.setServiceGroupId((long) 1);
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/XmlTestUtils.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/XmlTestUtils.java
deleted file mode 100644
index 2d7b120796118002be5ca94b5d5e493d264cdeee..0000000000000000000000000000000000000000
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/testutil/XmlTestUtils.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2018 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.testutil;
-
-import org.apache.commons.io.IOUtils;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadata;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-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 java.io.*;
-
-/**
- * Created by gutowpa on 05/01/2017.
- */
-public class XmlTestUtils {
-
-    private static final String UTF_8 = "UTF-8";
-
-    public static byte[] loadDocumentAsByteArray(String docResourcePath) throws IOException {
-        InputStream inputStream = XmlTestUtils.class.getResourceAsStream(docResourcePath);
-        return IOUtils.toByteArray(inputStream);
-    }
-
-    public static String loadDocumentAsString(String docResourcePath) throws IOException {
-        InputStream inputStream = XmlTestUtils.class.getResourceAsStream(docResourcePath);
-        return IOUtils.toString(inputStream, UTF_8);
-    }
-
-    public static Document loadDocument(String docResourcePath) throws ParserConfigurationException, SAXException, IOException {
-        InputStream inputStream = SignatureUtil.class.getResourceAsStream(docResourcePath);
-        return getDocumentBuilder().parse(inputStream);
-    }
-
-    public static DocumentBuilder getDocumentBuilder() throws ParserConfigurationException {
-        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-        dbf.setNamespaceAware(true);
-        return dbf.newDocumentBuilder();
-    }
-
-    public static String marshal(Node doc) throws TransformerException, UnsupportedEncodingException {
-        TransformerFactory tf = TransformerFactory.newInstance();
-        Transformer trans = tf.newTransformer();
-        ByteArrayOutputStream stream = new ByteArrayOutputStream();
-        trans.transform(new DOMSource(doc), new StreamResult(stream));
-        return stream.toString(UTF_8);
-    }
-    public static  byte[] marshallToByteArray(Node doc) throws TransformerException, UnsupportedEncodingException {
-        TransformerFactory tf = TransformerFactory.newInstance();
-        Transformer trans = tf.newTransformer();
-        ByteArrayOutputStream stream = new ByteArrayOutputStream();
-        trans.transform(new DOMSource(doc), new StreamResult(stream));
-        return stream.toByteArray();
-    }
-
-    public static byte[] marshallToByteArray(ServiceMetadata serviceMetadata) throws JAXBException {
-        ByteArrayOutputStream stream = new ByteArrayOutputStream();
-        JAXBContext jaxbContext = JAXBContext.newInstance(ServiceMetadata.class);
-        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
-        jaxbMarshaller.marshal(serviceMetadata, stream);
-        return stream.toByteArray();
-    }
-
-    public static String marshall(ServiceMetadata serviceMetadata) throws JAXBException {
-        StringWriter sw = new StringWriter();
-        JAXBContext jaxbContext = JAXBContext.newInstance(ServiceMetadata.class);
-        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
-        jaxbMarshaller.marshal(serviceMetadata, sw);
-        return sw.toString();
-    }
-
-    public static String marshall(ServiceGroup serviceGroup) throws JAXBException {
-        StringWriter sw = new StringWriter();
-        JAXBContext jaxbContext = JAXBContext.newInstance(ServiceGroup.class);
-        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
-        jaxbMarshaller.marshal(serviceGroup, sw);
-        return sw.toString();
-    }
-}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java
index 5d24ed04c57f491709be366733fc23cd2b3a722f..f0964f5674d057a79e5a7af9ef6762b326c4de5c 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/utils/SessionSecurityUtilsTest.java
@@ -39,7 +39,7 @@ public class SessionSecurityUtilsTest {
 
         assertNotNull(result);
         String decResult = SecurityUtils.decryptUrlSafe(token.getSecret(), result);
-        assertEquals(value, Long.valueOf(decResult));
+        assertEquals(value, Long.valueOf(decResult.substring(0, decResult.indexOf('#')) ));
     }
 
     @Test
diff --git a/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql b/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql
index 0490d286abd26874f9bcdcd3ea3d5ca58b980103..feeebf7d71427750a6a6bfabb9f499a04fe4e984 100644
--- a/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql
+++ b/smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql
@@ -37,9 +37,7 @@ insert into SMP_CERTIFICATE (ID, CERTIFICATE_ID, SUBJECT, ISSUER, SERIALNUMBER,V
 
 
 insert into SMP_DOMAIN (ID, DOMAIN_CODE, VISIBILITY, SML_SUBDOMAIN, SML_SMP_ID, SIGNATURE_KEY_ALIAS, SML_CLIENT_CERT_AUTH,SML_REGISTERED, CREATED_ON, LAST_UPDATED_ON) values
-(1, 'testdomain','PUBLIC', 'test-domain', 'CEF-SMP-002','sample_key',1,0, NOW(),  NOW()),
-(2, 'testdomain1','PUBLIC', 'test-domain1', 'CEF-SMP-003','sample_key',1,0, NOW(),  NOW()),
-(3, 'testdomain2','PUBLIC', 'test-domain2', 'CEF-SMP-004','sample_key',1,0, NOW(),  NOW());
+(1, 'testdomain','PUBLIC', 'test-domain', 'CEF-SMP-002','sample_key',1,0, NOW(),  NOW());
 
 insert into SMP_EXTENSION ( ID, IDENTIFIER,  IMPLEMENTATION_NAME, NAME, VERSION, DESCRIPTION, CREATED_ON, LAST_UPDATED_ON) values
 (1, 'edelivery-oasis-smp-extension',  'OasisSMPExtension','Oasis SMP 1.0 and 2.0','1.0', 'Oasis SMP 1.0 and 2.0 extension',  NOW(),  NOW());
diff --git a/smp-soapui-tests/pom.xml b/smp-soapui-tests/pom.xml
index 862c4f8cabe91d4e025a902347867df1785d9c59..43c6f7b8ad8a282a0a6586321dcc91cb5583545b 100644
--- a/smp-soapui-tests/pom.xml
+++ b/smp-soapui-tests/pom.xml
@@ -61,6 +61,7 @@
                             </projectFile>
                             <testSuite>PASSING_AUTO_BAMBOO</testSuite>
                             <!--If you want to execute single test case -->
+                            <!-- testCase>SMP001-Create ServiceGroup-Basic Flow-Admin Service Group specified</testCase -->
                             <!-- testCase>SMP063-EDELIVERY-364 slash encoding-Tomcat</testCase -->
                             <!-- testCase>SMP022-Create ServiceMetadata-Basic Flow</testCase -->
                             <projectProperties>
@@ -116,13 +117,7 @@
                                 </goals>
                                 <configuration>
                                     <artifactItems>
-                                        <artifactItem>
-                                            <groupId>${project.groupId}</groupId>
-                                            <artifactId>smp-api</artifactId>
-                                            <version>${project.version}</version>
-                                            <type>jar</type>
-                                        </artifactItem>
-                                        <artifactItem>
+                                           <artifactItem>
                                             <groupId>${project.groupId}</groupId>
                                             <artifactId>smp-server-library</artifactId>
                                             <version>${project.version}</version>
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java
index 08271cdb406483d4ae9cba6d6b5673e561828330..ca3ef952ac041f0aa68303936c6b806d6cec4571 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationService.java
@@ -11,7 +11,7 @@ import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-import eu.europa.ec.edelivery.smp.services.ServiceGroupService;
+
 import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.core.convert.ConversionService;
@@ -39,17 +39,15 @@ public class SMPAuthorizationService {
     private static final SMPLogger LOG = SMPLoggerFactory.getLogger(SMPAuthorizationService.class);
 
     DomainMemberDao domainMemberDao;
-    private final ServiceGroupService serviceGroupService;
+
     private final ConversionService conversionService;
     private final ConfigurationService configurationService;
     private final UserDao userDao;
 
-    public SMPAuthorizationService(ServiceGroupService serviceGroupService,
-                                   ConversionService conversionService,
+    public SMPAuthorizationService(ConversionService conversionService,
                                    ConfigurationService configurationService,
                                    UserDao userDao,
                                    DomainMemberDao domainMemberDao) {
-        this.serviceGroupService = serviceGroupService;
         this.conversionService = conversionService;
         this.configurationService = configurationService;
         this.userDao = userDao;
@@ -117,7 +115,9 @@ public class SMPAuthorizationService {
 
         }
         Long userId = userDetails.getUser().getId();
-        return serviceGroupService.isServiceGroupOwnerForMetadataID(userId, serviceMetadataId);
+        //return serviceGroupService.isServiceGroupOwnerForMetadataID(userId, serviceMetadataId);
+        return false;
+
     }
 
 
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java
index b0599a87ea324044aa72e91547ed86111310f65b..454cbe57ad2d74204f0e6b0e4242ddf7b147bacd 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/AbstractErrorControllerAdvice.java
@@ -1,6 +1,6 @@
 package eu.europa.ec.edelivery.smp.error;
 
-import ec.services.smp._1.ErrorResponse;
+
 import eu.europa.ec.edelivery.smp.data.ui.exceptions.ErrorResponseRO;
 import eu.europa.ec.edelivery.smp.error.exceptions.SMPResponseStatusException;
 import eu.europa.ec.edelivery.smp.exceptions.BadRequestException;
@@ -41,8 +41,12 @@ abstract class AbstractErrorControllerAdvice {
         else {
             response = buildAndLog(INTERNAL_SERVER_ERROR, TECHNICAL, "Unexpected technical error occurred.", runtimeException);
         }
+
+
         String errorCodeId = response.getBody() instanceof  ErrorResponseRO?
-                ((ErrorResponseRO) response.getBody()).getErrorUniqueId():((ErrorResponse) response.getBody()).getErrorUniqueId();
+                ((ErrorResponseRO) response.getBody()).getErrorUniqueId(): null;
+
+
         LOG.error("Unhandled exception occurred, unique ID: [{}]", errorCodeId, runtimeException);
         return response;
     }
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java
index a850b667818663bd70b2221079945d463f2e02a1..189944ecae46df0baa18e405215222fca0858d63 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdvice.java
@@ -18,8 +18,7 @@ import eu.europa.ec.edelivery.smp.exceptions.BadRequestException;
 import eu.europa.ec.edelivery.smp.error.exceptions.SMPResponseStatusException;
 import eu.europa.ec.edelivery.smp.exceptions.ErrorBusinessCode;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
-import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
+
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.AccessDeniedException;
@@ -49,11 +48,6 @@ public class ServiceErrorControllerAdvice extends AbstractErrorControllerAdvice
         return buildAndLog(BAD_REQUEST, ex.getErrorBusinessCode(), ex.getMessage(), ex);
     }
 
-    @ExceptionHandler(MalformedIdentifierException.class)
-    public ResponseEntity handleMalformedIdentifierException(MalformedIdentifierException ex) {
-        return buildAndLog(BAD_REQUEST, FORMAT_ERROR, ex.getMessage(), ex);
-    }
-
     @ExceptionHandler(IllegalArgumentException.class)
     public ResponseEntity handleMalformedIdentifierException(IllegalArgumentException ex) {
         return buildAndLog(BAD_REQUEST, FORMAT_ERROR, ex.getMessage(), ex);
@@ -64,11 +58,6 @@ public class ServiceErrorControllerAdvice extends AbstractErrorControllerAdvice
         return buildAndLog(UNAUTHORIZED, ErrorBusinessCode.UNAUTHORIZED, ex.getMessage() + " - Only SMP Admin or owner of given ServiceGroup is allowed to perform this action", ex);
     }
 
-    @ExceptionHandler(XmlInvalidAgainstSchemaException.class)
-    public ResponseEntity handleXmlInvalidAgainstSchemaException(XmlInvalidAgainstSchemaException ex) {
-        return buildAndLog(BAD_REQUEST, XSD_INVALID, ex.getMessage(), ex);
-    }
-
     ResponseEntity buildAndLog(HttpStatus status, ErrorBusinessCode businessCode, String msg, Exception exception) {
 
         ResponseEntity response = ErrorResponseBuilder.status(status)
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java
index 80dfb192e6409b6c526d8f01b98f5a70f490ea73..291cfb0115d5399a522e915f1f745d358d839b6a 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/ResourceConstants.java
@@ -13,6 +13,7 @@ public class ResourceConstants {
     // public
     public static final String CONTEXT_PATH_PUBLIC_SEARCH_PARTICIPANT = CONTEXT_PATH_PUBLIC + "search";
     public static final String CONTEXT_PATH_PUBLIC_DOMAIN = CONTEXT_PATH_PUBLIC + "domain";
+    public static final String CONTEXT_PATH_PUBLIC_GROUP = CONTEXT_PATH_PUBLIC + "group";
     public static final String CONTEXT_PATH_PUBLIC_APPLICATION = CONTEXT_PATH_PUBLIC + "application";
     public static final String CONTEXT_PATH_PUBLIC_USER = CONTEXT_PATH_PUBLIC + "user";
     public static final String CONTEXT_PATH_PUBLIC_TRUSTSTORE = CONTEXT_PATH_PUBLIC + "truststore";
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java
index 6f39fbbea56fb9162dde89585a287edf68a63738..22f91ec2665f3110efff241133c6219d6f91944a 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/DomainResource.java
@@ -52,7 +52,7 @@ public class DomainResource {
     }
 
     @GetMapping(path = "/{user-enc-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-    @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and (@smpAuthorizationService.systemAdministrator or @smpAuthorizationService.isDomainAdministrator(#domainEncId))")
+    @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.anyDomainAdministrator")
     public List<DomainRO> getAllDomainList(@PathVariable("user-enc-id") String userEncId) {
         logAdminAccess("getAllDomainListForUser");
         Long userId = SessionSecurityUtils.decryptEntityId(userEncId);
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/GroupResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/GroupResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..c175020fb8d0eacf7b0d38bd0bc04d8585a8c909
--- /dev/null
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/GroupResource.java
@@ -0,0 +1,70 @@
+package eu.europa.ec.edelivery.smp.ui.external;
+
+
+import eu.europa.ec.edelivery.smp.data.ui.GroupRO;
+import eu.europa.ec.edelivery.smp.logging.SMPLogger;
+import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
+import eu.europa.ec.edelivery.smp.services.ui.UIGroupPublicService;
+import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.CONTEXT_PATH_PUBLIC_GROUP;
+
+/**
+ * Purpose of the DomainResource is to provide search method to retrieve configured domains in SMP.
+ *
+ * @author Joze Rihtarsic
+ * @since 4.1
+ */
+@RestController
+@RequestMapping(value = CONTEXT_PATH_PUBLIC_GROUP)
+public class GroupResource {
+
+    private static final SMPLogger LOG = SMPLoggerFactory.getLogger(GroupResource.class);
+
+    private final UIGroupPublicService uiGroupPublicService;
+
+    public GroupResource(UIGroupPublicService uiGroupPublicService) {
+        this.uiGroupPublicService = uiGroupPublicService;
+    }
+
+
+    @GetMapping(path = "/{user-enc-id}/domain/{domain-enc-id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+    @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isDomainAdministrator(#userEncId)")
+    public List<GroupRO> getAllGroupsForDomain(@PathVariable("user-enc-id") String userEncId,
+                                               @PathVariable("domain-enc-id") String domainEncId) {
+        logAdminAccess("getAllGroupsForDomain");
+        Long domainId = SessionSecurityUtils.decryptEntityId(domainEncId);
+        return uiGroupPublicService.getAllGroupsForDomain(domainId);
+    }
+
+    @PutMapping(path = "/{user-enc-id}/domain/{domain-enc-id}/create", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE)
+    @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isDomainAdministrator(#userEncId)")
+    public GroupRO putGroupForDomain(@PathVariable("user-enc-id") String userEncId,
+                                     @PathVariable("domain-enc-id") String domainEncId,
+                                     @RequestBody GroupRO group) {
+        logAdminAccess("putGroupForDomain");
+        Long domainId = SessionSecurityUtils.decryptEntityId(domainEncId);
+        return uiGroupPublicService.createGroupForDomain(domainId, group);
+    }
+
+    @DeleteMapping(path = "/{user-enc-id}/{group-enc-id}/domain/{domain-enc-id}/delete", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+    @PreAuthorize("@smpAuthorizationService.isCurrentlyLoggedIn(#userEncId) and @smpAuthorizationService.isDomainAdministrator(#userEncId)")
+    public GroupRO deleteGroupFromDomain(@PathVariable("user-enc-id") String userEncId,
+                                         @PathVariable("domain-enc-id") String domainEncId,
+                                         @PathVariable("group-enc-id") String groupEncId) {
+        logAdminAccess("deleteGroupFromDomain");
+        Long domainId = SessionSecurityUtils.decryptEntityId(domainEncId);
+        Long groupId = SessionSecurityUtils.decryptEntityId(groupEncId);
+        return uiGroupPublicService.deleteGroupFromDomain(domainId, groupId);
+    }
+
+
+    protected void logAdminAccess(String action) {
+        LOG.info(SMPLogger.SECURITY_MARKER, "Admin Domain action [{}] by user [{}], ", action, SessionSecurityUtils.getSessionUserDetails());
+    }
+}
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java
index 2f2b797b034bcac940ada12f02e4e49b5969e3c2..2951303d027654b290a46f485fcfd7694f95b8af 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/external/UserResource.java
@@ -276,14 +276,14 @@ public class UserResource {
         node.addChild(new NavigationTreeNodeRO("system-admin-keystore", "Keystore", "key", "keystore"));
         node.addChild(new NavigationTreeNodeRO("system-admin-truststore", "Truststore", "article", "truststore"));
         node.addChild(new NavigationTreeNodeRO("system-admin-extension", "Extensions", "extension", "extension"));
-        node.addChild(new NavigationTreeNodeRO("system-admin-properties", "Properties", "properties", "properties"));
+        node.addChild(new NavigationTreeNodeRO("system-admin-properties", "Properties", "settings", "properties"));
        // node.addChild(new NavigationTreeNodeRO("system-admin-authentication", "Authentication", "shield", "authentication"));
         node.addChild(new NavigationTreeNodeRO("system-admin-alert", "Alerts", "notifications", "alert"));
         return node;
     }
 
     protected NavigationTreeNodeRO createEditNavigationTreeNode() {
-        NavigationTreeNodeRO node = new NavigationTreeNodeRO("edit", "Administration", "settings", "edit");
+        NavigationTreeNodeRO node = new NavigationTreeNodeRO("edit", "Administration", "tune", "edit");
         // is domain admin
         if (authorizationService.isAnyDomainAdministrator()) {
             node.addChild(new NavigationTreeNodeRO("edit-domain", "Edit domains", "account_circle", "edit-domain"));
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java
index 8fa34c91d63f3095d8f3e747486057029c34a84e..5fadb083429d550e02022f50fd5f7f58df744ba3 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/auth/SMPAuthorizationServiceTest.java
@@ -6,7 +6,6 @@ import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
 import eu.europa.ec.edelivery.smp.data.ui.UserRO;
 import eu.europa.ec.edelivery.smp.data.ui.auth.SMPAuthority;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-import eu.europa.ec.edelivery.smp.services.ServiceGroupService;
 import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils;
 import org.junit.Assert;
 import org.junit.Before;
@@ -30,13 +29,12 @@ public class SMPAuthorizationServiceTest {
     UserRO user = null;
     SecurityContext mockSecurityContextSystemAdmin = null;
     SecurityContext mockSecurityContextSMPAdmin = null;
-    ServiceGroupService serviceGroupService = Mockito.mock(ServiceGroupService.class);
     ConversionService conversionService = Mockito.mock(ConversionService.class);
     ConfigurationService configurationService = Mockito.mock(ConfigurationService.class);
     UserDao userDao = Mockito.mock(UserDao.class);
     DomainMemberDao domainMemberDao = Mockito.mock(DomainMemberDao.class);
 
-    SMPAuthorizationService testInstance = new SMPAuthorizationService(serviceGroupService, conversionService,
+    SMPAuthorizationService testInstance = new SMPAuthorizationService(conversionService,
             configurationService, userDao, domainMemberDao);
 
 
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java
index f9a894288b3d43c6d7951e417994e9a8c8ef38f9..544f9fb42fc470d04b245ccb2b8b8f99de707530 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/error/ServiceErrorControllerAdviceTest.java
@@ -3,8 +3,6 @@ package eu.europa.ec.edelivery.smp.error;
 import ec.services.smp._1.ErrorResponse;
 import eu.europa.ec.edelivery.smp.exceptions.BadRequestException;
 import eu.europa.ec.edelivery.smp.exceptions.*;
-import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
-import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
 import org.junit.Test;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.AccessDeniedException;
@@ -67,7 +65,7 @@ public class ServiceErrorControllerAdviceTest {
         assertEquals(ErrorBusinessCode.UNAUTHORIZED.toString(), ((ErrorResponse)re.getBody()).getBusinessCode());
     }
 
-
+/*
     @Test
     public void handleXmlInvalidAgainstSchemaException() {
         ResponseEntity re = testIntance.handleXmlInvalidAgainstSchemaException(
@@ -76,4 +74,6 @@ public class ServiceErrorControllerAdviceTest {
         assertEquals(BAD_REQUEST, re.getStatusCode());
         assertEquals(ErrorBusinessCode.XSD_INVALID.toString(), ((ErrorResponse)re.getBody()).getBusinessCode());
     }
+
+ */
 }
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
index cef73d18755e42a28af33aed1ec3d52741a23e8a..b53d8c877b1226a3a1f5aa066567ddc4a681a122 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/validation/ServiceGroupValidatorTest.java
@@ -16,7 +16,7 @@ package eu.europa.ec.edelivery.smp.validation;
 import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
 import eu.europa.ec.edelivery.smp.identifiers.Identifier;
 import eu.europa.ec.edelivery.smp.services.ConfigurationService;
-import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
+
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.MatcherAssert;
 import org.junit.Assert;
@@ -26,8 +26,6 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.mockito.Mockito;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType;
-import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup;
 
 import java.util.Arrays;
 import java.util.Collection;