diff --git a/src/app/appmarket/users/list/userslist.component.html b/src/app/appmarket/users/list/userslist.component.html
index 584f7d70b5af31f0bd7683200a745de19349d0b0..98178461d93d9e7ecbb06ae696066ef6f74b71d0 100644
--- a/src/app/appmarket/users/list/userslist.component.html
+++ b/src/app/appmarket/users/list/userslist.component.html
@@ -1,8 +1,18 @@
-<div class="col-sm-12" *roles="['ROLE_DOMAIN_ADMIN', 'ROLE_SYSTEM_ADMIN']">
-	<nmaas-userslist *ngIf="!isInAddToDomainMode" [users]="allUsers" [allowedModes]="[ComponentMode.VIEW, ComponentMode.DELETE]"
+<div class="col-sm-12" *roles="['ROLE_SYSTEM_ADMIN']">
+	<nmaas-userslist *ngIf="!isInAddToDomainMode" [users]="allUsers" [allowedModes]="[ComponentMode.VIEW, ComponentMode.DELETE]"  (onUserRoleChange)="onUserRoleChange($event)"
 					 (onView)="onUserView($event)" (onModeChange)="onModeChange($event)" (onDelete)="onUserDelete($event)" (onRemoveFromDomain)="onRemoveRole($event)">
 	</nmaas-userslist>
-	<nmaas-userslist *ngIf="isInAddToDomainMode"  [users]="usersToAdd" [allowedModes]="[ComponentMode.VIEW, ComponentMode.EDIT]"
+	<nmaas-userslist *ngIf="isInAddToDomainMode"  [users]="usersToAdd" [allowedModes]="[ComponentMode.VIEW, ComponentMode.EDIT]" (onUserRoleChange)="onUserRoleChange($event)"
 					 (onView)="onUserView($event)" (onModeChange)="onModeChange($event)" (onAddToDomain)="onUserAddToDomain($event)">
 	</nmaas-userslist>
 </div>
+
+
+<div class="col-sm-12" *roles="['ROLE_DOMAIN_ADMIN']">
+	<nmaas-userslist *ngIf="!isInAddToDomainMode" [users]="allUsers" [allowedModes]="[ComponentMode.VIEW, ComponentMode.DELETE]" [domainMode]="true" (onUserRoleChange)="onUserRoleChange($event)"
+					 (onView)="onUserView($event)" (onModeChange)="onModeChange($event)" (onDelete)="onUserDelete($event)" (onRemoveFromDomain)="onRemoveRole($event)">
+	</nmaas-userslist>
+	<nmaas-userslist *ngIf="isInAddToDomainMode"  [users]="usersToAdd" [allowedModes]="[ComponentMode.VIEW, ComponentMode.EDIT]" [domainMode]="true"
+					 (onView)="onUserView($event)" (onModeChange)="onModeChange($event)" (onAddToDomain)="onUserAddToDomain($event)" (onUserRoleChange)="onUserRoleChange($event)">
+	</nmaas-userslist>
+</div>
diff --git a/src/app/appmarket/users/list/userslist.component.spec.ts b/src/app/appmarket/users/list/userslist.component.spec.ts
index 36a0b1de0f40cc309072f1bed9630ad0bfede7a9..e4b085517efaf0ca47742ea3727e96daed679d80 100644
--- a/src/app/appmarket/users/list/userslist.component.spec.ts
+++ b/src/app/appmarket/users/list/userslist.component.spec.ts
@@ -17,8 +17,9 @@ describe('UsersListComponent', () => {
         const authServiceSpy = createSpyObj('AuthService', ['hasRole']);
         authServiceSpy.hasRole.and.returnValue(true)
 
-        const userServiceSpy = createSpyObj('UserService', ['getAll'])
+        const userServiceSpy = createSpyObj('UserService', ['getAll', 'getDomainUsersAsAdmin'])
         userServiceSpy.getAll.and.returnValue(of([]))
+        userServiceSpy.getDomainUsersAsAdmin.and.returnValue(of([]))
 
         const domainServiceSpy = createSpyObj('DomainService', ['getGlobalDomainId'])
         domainServiceSpy.getGlobalDomainId.and.returnValue(1)
diff --git a/src/app/appmarket/users/list/userslist.component.ts b/src/app/appmarket/users/list/userslist.component.ts
index 5aded415ee25b357a1f2ce95b0c785ea1b8ae96a..9f578ac07781afb1df96f2012013233fa58bce04 100644
--- a/src/app/appmarket/users/list/userslist.component.ts
+++ b/src/app/appmarket/users/list/userslist.component.ts
@@ -12,124 +12,116 @@ import {Observable, of} from 'rxjs';
 import {map} from 'rxjs/operators';
 
 @Component({
-  selector: 'app-userslist',
-  templateUrl: './userslist.component.html',
-  styleUrls: ['./userslist.component.css']
+    selector: 'app-userslist',
+    templateUrl: './userslist.component.html',
+    styleUrls: ['./userslist.component.css']
 })
 export class UsersListComponent implements OnInit {
 
-  public ComponentMode = ComponentMode;
+    public ComponentMode = ComponentMode;
 
-  private domainId: number;
+    private domainId: number;
 
-  public allUsers: User[] = [];
-  public usersToAdd: User[] = [];
-  //  private domainUsers: Map<number, User[]> = new Map<number, User[]>();
+    public allUsers: User[] = [];
+    public usersToAdd: User[] = [];
 
-  public isInAddToDomainMode = false;
+    public isInAddToDomainMode = false;
 
-  constructor(protected authService: AuthService,
-    protected userService: UserService,
-    protected domainService: DomainService,
-    protected userDataService: UserDataService,
-    private router: Router,
-    private route: ActivatedRoute,
-    private location: Location) {}
-
-
-  ngOnInit() {
-    this.userDataService.selectedDomainId.subscribe((domainId) => this.update(domainId));
-  }
-
-  public update(domainId: number): void {
-    console.log('Update users for domainId=' + domainId);
-    if (domainId == null || domainId === 0) {
-      this.domainId = undefined;
-    } else {
-      this.domainId = domainId;
+    constructor(protected authService: AuthService,
+                protected userService: UserService,
+                protected domainService: DomainService,
+                protected userDataService: UserDataService,
+                private router: Router,
+                private route: ActivatedRoute,
+                private location: Location) {
     }
 
-    let users: Observable<User[]> = null;
 
-    if (this.authService.hasRole(Role[Role.ROLE_SYSTEM_ADMIN])) {
-      users = this.userService.getAll(this.domainId);
-    } else if (this.domainId != null && this.authService.hasDomainRole(this.domainId, Role[Role.ROLE_DOMAIN_ADMIN])) {
-      users = this.userService.getAll(this.domainId);
-    } else {
-      users = of<User[]>([]);
+    ngOnInit() {
+        this.userDataService.selectedDomainId.subscribe((domainId) => this.update(domainId));
     }
-    // sort default user list by username
-    users = users.pipe(
-        map(userList => {
-          userList.sort((a, b) => a.username.localeCompare(b.username));
-          return userList;
-        })
-    )
-
-    users.subscribe((all) => {
-      this.allUsers = all;
-      /* parse date strings to date objects */
-      for (const u of this.allUsers) {
-        if (u.firstLoginDate) {
-          u.firstLoginDate = new Date(u.firstLoginDate)
+
+    public update(domainId: number): void {
+        console.log('Update users for domainId= ' + domainId);
+        if (domainId == null || domainId === 0) {
+            this.domainId = undefined;
+        } else {
+            this.domainId = domainId;
         }
-        if (u.lastSuccessfulLoginDate) {
-          u.lastSuccessfulLoginDate = new Date(u.lastSuccessfulLoginDate)
+
+        let users: Observable<User[]> = null;
+
+        if (this.authService.hasRole(Role[Role.ROLE_SYSTEM_ADMIN]) && this.domainId != null) {
+            users = this.userService.getDomainUsersAsAdmin(this.domainId);
+        } else if (this.authService.hasRole(Role[Role.ROLE_SYSTEM_ADMIN])) {
+            users = this.userService.getAll(this.domainId);
+        } else if (this.domainId != null && this.authService.hasDomainRole(this.domainId, Role[Role.ROLE_DOMAIN_ADMIN])) {
+            users = this.userService.getAll(this.domainId);
+        } else {
+            users = of<User[]>([]);
         }
-      }
-    });
-
-    if (this.domainId !== this.domainService.getGlobalDomainId()) {
-      this.userService.getAll().subscribe(
-          all => {
-            this.usersToAdd = all.filter(
-                u => u.roles.filter(r => r.domainId === this.domainId).length === 0 && // user has no roles in current domain
-                u.roles.filter(r => this.userRoleAsEnum(r.role) === Role.ROLE_GUEST && // user has role guest in global domain
-                    r.domainId === this.domainService.getGlobalDomainId()).length === 1);
-            for (const u of this.usersToAdd) {
-              if (u.firstLoginDate) {
-                u.firstLoginDate = new Date(u.firstLoginDate)
-              }
-              if (u.lastSuccessfulLoginDate) {
-                u.lastSuccessfulLoginDate = new Date(u.lastSuccessfulLoginDate)
-              }
+        // sort default user list by username
+        users = users.pipe(
+            map(userList => {
+                userList.sort((a, b) => a.username.localeCompare(b.username));
+                return userList;
+            })
+        )
+
+        users.subscribe((all) => {
+            this.allUsers = all;
+            /* parse date strings to date objects */
+            for (const u of this.allUsers) {
+                if (u.firstLoginDate) {
+                    u.firstLoginDate = new Date(u.firstLoginDate)
+                }
+                if (u.lastSuccessfulLoginDate) {
+                    u.lastSuccessfulLoginDate = new Date(u.lastSuccessfulLoginDate)
+                }
             }
-          }
-      );
+        });
     }
 
-  }
-
-  public onUserView($event): void {
-    this.router.navigate(['/admin/users/view/', $event]);
-  }
+    public onUserView($event): void {
+        this.router.navigate(['/admin/users/view/', $event]);
+    }
 
-  public onRemoveRole($event): void {
-    this.userService.removeRole(
-        $event.id, $event.roles.find(value => value.domainId === this.domainId).role, this.domainId).subscribe(
+    public onRemoveRole($event): void {
+        this.userService.removeRole(
+            $event.id, $event.roles.find(value => value.domainId === this.domainId).role, this.domainId).subscribe(
             () => this.update(this.domainId)
         )
-  }
+    }
 
-  public onUserDelete($event): void {
-    this.userService.deleteOne($event.id).subscribe(
-        () => this.update(this.domainId)
-    )
-  }
+    public onUserDelete($event): void {
+        this.userService.deleteOne($event.id).subscribe(
+            () => this.update(this.domainId)
+        )
+    }
 
-  public onUserAddToDomain($event): void {
-    this.userService.addRole($event.id, Role.ROLE_USER, this.domainId).subscribe(() => this.update(this.domainId))
-  }
+    public onUserAddToDomain($event): void {
+        this.userService.addRole($event.id, Role.ROLE_USER, this.domainId).subscribe(() => this.update(this.domainId))
+    }
 
-  public onModeChange($event): void {
-    this.isInAddToDomainMode = !this.isInAddToDomainMode;
-  }
+    public onModeChange($event): void {
+        this.isInAddToDomainMode = !this.isInAddToDomainMode;
+    }
 
-  public userRoleAsEnum(role: string | Role): Role {
-    if (typeof role === 'string') {
-      return Role[role];
+    public userRoleAsEnum(role: string | Role): Role {
+        if (typeof role === 'string') {
+            return Role[role];
+        }
+        return role;
     }
-    return role;
-  }
 
+    public onUserRoleChange(event: any) {
+        console.warn(event)
+        if (event.role !== null) {
+            this.userService.addRole(event.userId, event.role, event.domainId).subscribe(() => this.update(this.domainId))
+        } else {
+            const foundUser = this.allUsers.find(user => user.id === event.userId);
+            this.onRemoveRole({id: event.userId, roles: foundUser.roles})
+        }
+
+    }
 }
diff --git a/src/app/appmarket/users/users.routes.ts b/src/app/appmarket/users/users.routes.ts
index 5dd90b9fe98be4fa398f260341fe6cc633b1743e..c947b8a23ae70e0d7f44042515f4fee73b36484d 100644
--- a/src/app/appmarket/users/users.routes.ts
+++ b/src/app/appmarket/users/users.routes.ts
@@ -6,7 +6,9 @@ import { ComponentMode } from '../../shared/common/componentmode';
 
 export const UsersRoutes: Route[] = [
     { path: 'admin/users', component: UsersListComponent, canActivate: [AuthGuard, RoleGuard],
-                      data: {roles: ['ROLE_SYSTEM_ADMIN', 'ROLE_DOMAIN_ADMIN']}},
+                      data: {roles: ['ROLE_SYSTEM_ADMIN']}},
     { path: 'admin/users/view/:id', component: UserDetailsComponent, canActivate: [AuthGuard, RoleGuard],
-                      data: {mode: ComponentMode.VIEW, roles: ['ROLE_SYSTEM_ADMIN', 'ROLE_DOMAIN_ADMIN']} }
+                      data: {mode: ComponentMode.VIEW, roles: ['ROLE_SYSTEM_ADMIN']} },
+    { path: 'domain/users', component: UsersListComponent, canActivate: [AuthGuard, RoleGuard],
+        data: {roles: ['ROLE_DOMAIN_ADMIN']}},
 ];
diff --git a/src/app/model/userrole.ts b/src/app/model/userrole.ts
index 22962d0fddf5320586fa4eb487f78e208b236e21..a558619c8b096882afe35b6cb23d8db460b0adf3 100644
--- a/src/app/model/userrole.ts
+++ b/src/app/model/userrole.ts
@@ -1,7 +1,7 @@
 export enum Role {
   ROLE_SYSTEM_ADMIN,
-  ROLE_OPERATOR,
   ROLE_DOMAIN_ADMIN,
+  ROLE_OPERATOR,
   ROLE_TOOL_MANAGER,
   ROLE_USER,
   ROLE_GUEST,
diff --git a/src/app/service/user.service.ts b/src/app/service/user.service.ts
index e56969e91da3ec55197bbc5f52ae85ae3f4df303..b298a5785ccfa972942a5b3d9d8dd6e4557bbab2 100644
--- a/src/app/service/user.service.ts
+++ b/src/app/service/user.service.ts
@@ -2,7 +2,7 @@ import {Injectable} from '@angular/core';
 import {Observable} from 'rxjs';
 import {GenericDataService} from './genericdata.service';
 
-import {HttpClient} from '@angular/common/http';
+import {HttpClient, HttpParams} from '@angular/common/http';
 import {AppConfigService} from './appconfig.service';
 
 import {Password} from '../model';
@@ -92,6 +92,10 @@ export class UserService extends GenericDataService {
     return this.appConfig.getApiUrl() + '/domains/' + domainId + '/users/';
   }
 
+  public getDomainUsersAsAdmin(domainId: number): Observable<User[]> {
+    return this.get<User[]>(this.appConfig.getApiUrl() + '/domains/' + domainId + '/users/admin');
+  }
+
   protected getUserAcceptanceUrl(): string {
     return this.appConfig.getApiUrl() + '/users/terms/';
   }
@@ -99,4 +103,11 @@ export class UserService extends GenericDataService {
   protected getEnableOrDisableUsersUrl(userId: number, enabled: boolean): string {
       return this.appConfig.getApiUrl() + '/users/status/' + userId + '?enabled=' + enabled;
   }
+
+  public getUserBySearch(search: string, domainId: number): Observable<User[]> {
+    let params = new HttpParams();
+    params = params.append('searchPart', search);
+    params = params.append('domainId', domainId.toString())
+    return this.http.get<User[]>(`${this.appConfig.getApiUrl()}/users/search`, {params})
+  }
 }
diff --git a/src/app/shared/navbar/navbar.component.html b/src/app/shared/navbar/navbar.component.html
index 5db9cc9dee633f435d1530ebea7b88c9ad084f3e..4871a003bf0fba4cb8af966803b0bf65649083cf 100644
--- a/src/app/shared/navbar/navbar.component.html
+++ b/src/app/shared/navbar/navbar.component.html
@@ -52,9 +52,12 @@
                         <li *roles="['ROLE_DOMAIN_ADMIN', 'ROLE_SYSTEM_ADMIN', 'ROLE_OPERATOR']"><a
                                 [routerLink]="['/admin/domains']">{{ 'NAVBAR.DOMAINS' | translate }}</a>
                         </li>
-                        <li *roles="['ROLE_DOMAIN_ADMIN', 'ROLE_SYSTEM_ADMIN']"><a
+                        <li *roles="['ROLE_SYSTEM_ADMIN']"><a
                                 [routerLink]="['/admin/users']">{{ 'NAVBAR.USERS' | translate }}</a>
                         </li>
+                        <li *roles="['ROLE_DOMAIN_ADMIN']"><a
+                                [routerLink]="['/domain/users']">{{ 'NAVBAR.USERS' | translate }}</a>
+                        </li>
                         <li *roles="['ROLE_SYSTEM_ADMIN', 'ROLE_TOOL_MANAGER']"><a
                                 [routerLink]="['/admin/apps']">{{ 'NAVBAR.MARKET' | translate }}</a>
                         </li>
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index 88523d2664521117e44dc7004988317b37a3cd2c..207a294932eaa16c95fc2e485b3c27b06969a0c1 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -55,6 +55,7 @@ import { ContactComponent } from './contact/contact.component';
 import {FormioModule} from 'angular-formio';
 import { PreferencesComponent } from './users/preferences/preferences.component';
 import {TooltipModule} from 'primeng/tooltip';
+import {DropdownModule} from 'primeng/dropdown';
 
 @NgModule({
     imports: [
@@ -69,7 +70,8 @@ import {TooltipModule} from 'primeng/tooltip';
         TranslateModule.forChild(),
         NgxPaginationModule,
         FormioModule,
-        TooltipModule
+        TooltipModule,
+        DropdownModule
     ],
     declarations: [
         RateComponent,
diff --git a/src/app/shared/users/list/userslist.component.css b/src/app/shared/users/list/userslist.component.css
index 16a3ba2780518c72710b5a5cc54e196d56aaf53d..867c8dc6d8bf3e3e92b8a99896dd1041e61055ab 100644
--- a/src/app/shared/users/list/userslist.component.css
+++ b/src/app/shared/users/list/userslist.component.css
@@ -22,3 +22,7 @@ tr.clickable {
     flex-direction: row;
     align-items: center;
 }
+
+:host ::ng-deep .p-dropdown {
+    width: 170px;
+}
diff --git a/src/app/shared/users/list/userslist.component.html b/src/app/shared/users/list/userslist.component.html
index 3019915e248db17ab9f614013d9d5b8003b415f6..ed1de739632d322727169dd9acf14abbc8f255aa 100644
--- a/src/app/shared/users/list/userslist.component.html
+++ b/src/app/shared/users/list/userslist.component.html
@@ -25,7 +25,7 @@
     <div class="form-group row col-sm-4 align-vertically">
         <label for="searchText" class="col-form-label col-sm-3">Search:</label>
         <div class="col-sm-9">
-            <input id="searchText" type="text" [formControl]="searchText" class="form-control">
+            <input id="searchText" type="text" [formControl]="searchText" class="form-control" (keyup)="searchUsers($event.target.value)">
         </div>
     </div>
 
@@ -36,27 +36,28 @@
         <tr>
             <th scope="col" class="column-sortable" sortable-column="username">{{ 'USERS.USER_NAME' | translate }}</th>
             <th scope="col" class="column-sortable" sortable-column="lastname">{{'USERS.NAME' | translate}}</th>
-            <th scope="col" class="column-sortable" sortable-column="email">{{'USERS.EMAIL' | translate}}</th>
+            <th *ngIf="!domainMode" scope="col" class="column-sortable" sortable-column="email">{{'USERS.EMAIL' | translate}}</th>
             <th scope="col" class="column-sortable" sortable-column="domains"
                 *ngIf="domainId === domainService.getGlobalDomainId()">{{ 'USERS.DOMAINS' | translate }}</th>
             <th scope="col" class="column-sortable" sortable-column="globalRole"
                 *ngIf="domainId === domainService.getGlobalDomainId()">{{ 'USERS.GLOBAL_ROLE' | translate }}</th>
             <th scope="col" class="column-sortable" sortable-column="roles"
-                *ngIf="domainId !== domainService.getGlobalDomainId()">{{ 'USERS.ROLES' | translate }}</th>
-            <th scope="col" class="column-sortable" *ngIf="!isModeAllowed(ComponentMode.EDIT)"
+                *ngIf="domainId !== domainService.getGlobalDomainId() && !isModeAllowed(ComponentMode.EDIT)">{{ 'USERS.ROLES' | translate }}</th>
+            <th scope="col" class="column-sortable" *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode"
                 sortable-column="firstLoginDate">{{ 'USERS.FIRST_LOGIN' | translate }}</th>
-            <th scope="col" class="column-sortable" *ngIf="!isModeAllowed(ComponentMode.EDIT)"
+            <th scope="col" class="column-sortable" *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode"
                 sortable-column="lastSuccessfulLoginDate">{{ 'USERS.LAST_SUCCESSFUL_LOGIN' | translate }}</th>
             <th scope="col" class="column-sortable" sortable-column="enabled">{{ 'USERS.ENABLED' | translate }}</th>
-            <th scope="col">&nbsp;</th>
+            <th *ngIf="!isModeAllowed(ComponentMode.EDIT)" scope="col">&nbsp;</th>
+            <th *ngIf="isModeAllowed(ComponentMode.EDIT)" scope="col">&nbsp;</th>
         </tr>
         </thead>
 
         <tbody>
-        <tr *ngFor="let user of displayUsers | paginate: {itemsPerPage: maxItemsOnPage, currentPage: pageNumber, id: paginatorName}" class="clickable" (click)="view(user.id)">
+        <tr *ngFor="let user of displayUsers | paginate: {itemsPerPage: maxItemsOnPage, currentPage: pageNumber, id: paginatorName}" [ngClass]="{'clickable!' : domainMode}" (click)="view(user.id)">
             <td>{{user.username}}</td>
             <td>{{(user.firstname || '') + ' ' + (user.lastname || '')}}</td>
-            <td>{{user.email}}</td>
+            <td *ngIf="!domainMode">{{user.email}}</td>
             <td *ngIf="domainId === domainService.getGlobalDomainId()">
                 <div *ngFor="let role of filterDomainNames(user); last as isLast">
 					<span *ngIf="!isLast" style="float:left;padding-right: 3px">
@@ -71,18 +72,41 @@
             <td *ngIf="domainId === domainService.getGlobalDomainId()">
                 <span>{{"ENUM.USER_ROLES." + getGlobalRole(user).toUpperCase() | translate}}</span>
             </td>
-            <td *ngIf="domainId !== domainService.getGlobalDomainId()">
-				<span *ngFor="let role of getOnlyDomainRoles(user)">
-					{{"ENUM.USER_ROLES." + role.role.toUpperCase() | translate}}
-				</span>
+            <td *ngIf="domainId !== domainService.getGlobalDomainId() && !isModeAllowed(ComponentMode.EDIT)">
+                <div *roles="['ROLE_DOMAIN_ADMIN']">
+                    <div *ngIf="!checkUserIfIsCurrentUser(user.username)">
+                        <p-dropdown [options]="getAllowedRoles()" (onChange)="changeUserRole(user,domainId, $event)">
+                            <ng-template pTemplate="selectedItem">
+                            <span *ngFor="let roles of getOnlyDomainRoles(user)">
+                                {{"ENUM.USER_ROLES." + roles.role.toUpperCase() | translate}}
+                            </span>
+                            </ng-template>
+                            <ng-template let-role pTemplate="item">
+                                {{"ENUM.USER_ROLES." + Role[role].toUpperCase() | translate}}
+                            </ng-template>
+                        </p-dropdown>
+                    </div>
+                </div>
+                <div *roles="['ROLE_SYSTEM_ADMIN']">
+                 <span *ngFor="let roles of getOnlyDomainRoles(user)">
+                                {{"ENUM.USER_ROLES." + roles.role.toUpperCase() | translate}}
+                     </span>
+                </div>
+               <div *roles="['ROLE_DOMAIN_ADMIN']">
+                   <div *ngIf="checkUserIfIsCurrentUser(user.username)">
+                     <span *ngFor="let roles of getOnlyDomainRoles(user)">
+                                {{"ENUM.USER_ROLES." + roles.role.toUpperCase() | translate}}
+                     </span>
+                   </div>
+               </div>
             </td>
-            <td *ngIf="!isModeAllowed(ComponentMode.EDIT)">{{user.firstLoginDate | date:'dd-MM-yyyy HH:mm'}}</td>
-            <td *ngIf="!isModeAllowed(ComponentMode.EDIT)">{{user.lastSuccessfulLoginDate | date:'dd-MM-yyyy HH:mm'}}</td>
+            <td *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode">{{user.firstLoginDate | date:'dd-MM-yyyy HH:mm'}}</td>
+            <td *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode">{{user.lastSuccessfulLoginDate | date:'dd-MM-yyyy HH:mm'}}</td>
             <td>
                 <span class="glyphicon glyphicon-ok" *ngIf="user?.enabled"></span>
                 <span class="glyphicon glyphicon-remove" *ngIf="!(user?.enabled)"></span>
             </td>
-            <td>
+            <td *ngIf="!domainMode && !isModeAllowed(ComponentMode.EDIT)">
                 <span class="dropdown">
 						<a style="display: inline-block" class="dropdown-toggle " aria-expanded="false"
                            aria-haspopup="true"
@@ -122,6 +146,17 @@
 						</ul>
 					</span>
             </td>
+            <td *ngIf="domainMode && !isModeAllowed(ComponentMode.EDIT)">
+                <span *ngIf="!checkUserIfIsCurrentUser(user.username)">
+                    <a style="display: inline-block" class="" aria-expanded="false"
+                       aria-haspopup="true" role="button" (click)="onRemoveFromDomain.emit(user);$event.stopPropagation()">
+							<em class="fas fa-trash icon-black "></em>
+						</a>
+                </span>
+            </td>
+            <td *ngIf="isModeAllowed(ComponentMode.EDIT)" style="width: 170px">
+                <button class="btn btn-success" role="button"  (click)="addToCurrentDomain(user)" > {{'USERS.ADD_TO_DOMAIN_BUTTON' | translate}}</button>
+            </td>
         </tr>
         </tbody>
     </table>
diff --git a/src/app/shared/users/list/userslist.component.ts b/src/app/shared/users/list/userslist.component.ts
index ee4c51d8d3d4beff299658fccfbfe126df418735..e09722385ed21841dfc567899de5b2c39c054a30 100644
--- a/src/app/shared/users/list/userslist.component.ts
+++ b/src/app/shared/users/list/userslist.component.ts
@@ -10,6 +10,8 @@ import {UserDataService} from '../../../service/userdata.service';
 import {AuthService} from '../../../auth/auth.service';
 import {map, shareReplay, take} from 'rxjs/operators';
 import {FormControl} from '@angular/forms';
+import {ComponentMode} from '../../common/componentmode';
+import {Router} from '@angular/router';
 
 function userMatches(u: User, term: string): boolean {
   const t = term || ''
@@ -31,6 +33,9 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
   @Input()
   public users: User[] = []; // provided list of users
 
+  @Input()
+  public domainMode = false;
+
   public displayUsers: User[] = []; // list of users after transformations
 
   public domainId: number;
@@ -50,21 +55,28 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
   @Output()
   public onModeChange: EventEmitter<number> = new EventEmitter<number>();
 
+  @Output()
+  public onUserRoleChange: EventEmitter<any> = new EventEmitter<any>();
+
   public domainCache: CacheService<number, Domain> = new CacheService<number, Domain>();
 
   private lastSearchCriteria: CustomerSearchCriteria = undefined;
 
   public pageNumber = 1;
   public paginatorName = 'paginator-identifier';
-  public itemsPerPage: number[]  = [15, 20, 25, 30, 50 ];
+  public itemsPerPage: number[] = [15, 20, 25, 30, 50];
   public maxItemsOnPage = 15;
 
+  public filteredUsers: User[] = [];
+
   public searchText = new FormControl('');
+  public Role = Role;
 
   constructor(private userService: UserService,
               public domainService: DomainService,
               private userDataService: UserDataService,
-              public authService: AuthService) {
+              public authService: AuthService,
+              private router: Router) {
     super();
     userDataService.selectedDomainId.subscribe(domain => this.domainId = domain);
   }
@@ -72,7 +84,9 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
   ngOnInit() {
     // set stored value of maxElementsPerPage
     const i = sessionStorage.getItem(this.users_item_number_key);
-    if (i) { this.maxItemsOnPage = +i; }
+    if (i) {
+      this.maxItemsOnPage = +i;
+    }
 
     this.searchText.valueChanges.subscribe(
         term => this.onSearch(term)
@@ -90,7 +104,10 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
       return of(this.domainCache.getData(domainId).name);
     } else {
       return this.domainService.getOne(domainId).pipe(
-          map((domain) => {this.domainCache.setData(domainId, domain); return domain.name}),
+          map((domain) => {
+            this.domainCache.setData(domainId, domain);
+            return domain.name
+          }),
           shareReplay(1),
           take(1));
     }
@@ -122,14 +139,18 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
   }
 
   public view(userId: number): void {
-    this.onView.emit(userId);
+    if (!this.domainMode) {
+      this.onView.emit(userId);
+    }
   }
 
   public changeUserStatus(user: User, enabled: boolean): void {
     this.userService.changeUserStatus(user.id, enabled).subscribe();
     user.enabled = enabled;
     // sort after changing params
-    if (this.lastSearchCriteria) { this.handleSortEvent(this.lastSearchCriteria); }
+    if (this.lastSearchCriteria) {
+      this.handleSortEvent(this.lastSearchCriteria);
+    }
   }
 
   onSorted($event) {
@@ -147,6 +168,9 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
   }
 
   handleSearchEvent(term: string) {
+    console.warn(this.displayUsers.filter(
+        u => userMatches(u, term)
+    ))
     this.displayUsers = this.displayUsers.filter(
         u => userMatches(u, term)
     )
@@ -155,8 +179,12 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
   handleSortEvent(criteria: CustomerSearchCriteria) {
     this.lastSearchCriteria = criteria;
     const baseSortFunc = (a: any, b: any): number => {
-      if (a < b) { return -1; }
-      if (a > b) { return  1; }
+      if (a < b) {
+        return -1;
+      }
+      if (a > b) {
+        return 1;
+      }
       return 0;
     };
 
@@ -174,11 +202,16 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
           if (criteria.sortColumn === 'domains') {
             const ad = this.filterDomainNames(a);
             const bd = this.filterDomainNames(b);
-            if (!ad) { console.log(ad); }
-            if (!bd) { console.log(bd); }
+            if (!ad) {
+              console.log(ad);
+            }
+            if (!bd) {
+              console.log(bd);
+            }
             const ar = ad.length > 0 ? ad[0].domainId : 0;
             const br = bd.length > 0 ? bd[0].domainId : 0;
-            p1 = ar; p2 = br;
+            p1 = ar;
+            p2 = br;
           } else if (criteria.sortColumn === 'globalRole') {
             p1 = this.getGlobalRole(a);
             p2 = this.getGlobalRole(b);
@@ -187,7 +220,8 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
             const bd = this.getOnlyDomainRoles(b);
             const ar = ad.length > 0 ? ad[0].role.toString() : '';
             const br = bd.length > 0 ? bd[0].role.toString() : '';
-            p1 = ar; p2 = br;
+            p1 = ar;
+            p2 = br;
           } else {
             p1 = a[criteria.sortColumn];
             p2 = b[criteria.sortColumn];
@@ -222,6 +256,7 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
 
   public addToCurrentDomain(user: User) {
     this.onAddToDomain.emit(user);
+    this.changeMode();
   }
 
   public changeMode() {
@@ -241,6 +276,48 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
     return !result;
   }
 
+  public searchUsers(search: string) {
+    if (search === '') {
+      this.filteredUsers = [];
+    } else {
+      if (this.allowedModes.find(v => v === ComponentMode.EDIT) !== undefined) {
+        this.userService.getUserBySearch(search, this.domainId).subscribe(data => {
+          this.filteredUsers = data;
+          this.displayUsers = this.filteredUsers;
+        })
+      } else {
+        // this.displayUsers = this.users;
+      }
+    }
+  }
+
+
+  public getAllowedRoles(): Role[] {
+    let roles: Role[];
+    if (this.authService.hasRole(Role[Role.ROLE_SYSTEM_ADMIN]) &&
+        Number(this.domainId === this.domainService.getGlobalDomainId())) {
+      // admin (global) role set
+      roles = [Role.ROLE_OPERATOR, Role.ROLE_TOOL_MANAGER, Role.ROLE_SYSTEM_ADMIN];
+      // roles = this.filterRoles(roles, this.domainId);
+    } else if (this.domainId != null) {
+      // default (domain) role set
+      roles = [Role.ROLE_GUEST, Role.ROLE_USER, Role.ROLE_DOMAIN_ADMIN];
+    } else {
+      // no roles
+      roles = [];
+    }
+    return roles;
+  }
+
+
+  public changeUserRole(user: User, domainId: number, event: any) {
+    console.warn(event);
+    this.onUserRoleChange.emit({userId: user.id, domainId: domainId, role: event.value})
+  }
+
+  public checkUserIfIsCurrentUser(userName: string) {
+    return this.authService.getUsername() === userName
+  }
 }
 
 function roleConvert(role: string | Role ): Role {
diff --git a/src/styles.css b/src/styles.css
index 2680ba65af5ac5710ef15882d63941a879269f01..c110a6bc21c49b1d708da99f6cae895ba3d1534c 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -44,3 +44,13 @@
     flex: 1 1 auto;
     padding: 1.25rem;
 }
+
+.p-inputtext {
+    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+    font-size: 14px;
+}
+
+.p-component {
+    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+    font-size: 14px;
+}