diff --git a/domiSMP-ui-tests/pom.xml b/domiSMP-ui-tests/pom.xml
index 7e72072c7d093fba031917a4344224a7f9c15f06..250a248d34094f35680d5ebb67245a973f018b17 100644
--- a/domiSMP-ui-tests/pom.xml
+++ b/domiSMP-ui-tests/pom.xml
@@ -9,10 +9,9 @@
     <version>1.0-SNAPSHOT</version>
 
     <properties>
-        <slf4j_version>2.0.0-alpha0</slf4j_version>
         <commons-csv_version>1.5</commons-csv_version>
-        <selenium-chrome-driver_version>4.8.3</selenium-chrome-driver_version>
-        <selenium-java_version>4.8.3</selenium-java_version>
+        <selenium-chrome-driver_version>4.10.0</selenium-chrome-driver_version>
+        <selenium-java_version>4.10.0</selenium-java_version>
         <poi-ooxml_version>5.2.3</poi-ooxml_version>
         <reflections_version>0.10.2</reflections_version>
         <jersey-client_version>1.19.4</jersey-client_version>
@@ -20,6 +19,10 @@
         <json_version>20230227</json_version>
         <jackson_version>2.15.0-rc3</jackson_version>
         <javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
+        <javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
+        <xmlunit_version>1.6</xmlunit_version>
+        <maven-surefire-plugin_version>3.0.0-M7</maven-surefire-plugin_version>
+
     </properties>
 
     <build>
@@ -221,19 +224,13 @@
         <dependency>
             <groupId>xmlunit</groupId>
             <artifactId>xmlunit</artifactId>
-            <version>1.6</version>
+            <version>${xmlunit_version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
-            <version>3.0.0-M7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.jetbrains</groupId>
-            <artifactId>annotations</artifactId>
-            <version>RELEASE</version>
-            <scope>compile</scope>
+            <version>${maven-surefire-plugin_version}</version>
         </dependency>
 
     </dependencies>
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java b/domiSMP-ui-tests/src/main/java/ddsl/DomiSMPPage.java
similarity index 55%
rename from domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java
rename to domiSMP-ui-tests/src/main/java/ddsl/DomiSMPPage.java
index 62c88f5864af2a582fc529ba846b082c3442b790..8189d08ed5a19b15540dcea63ffdadfd30aff3a7 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/DomiSMPPage.java
@@ -1,12 +1,19 @@
-package ddsl.dcomponents;
+package ddsl;
 
 
+import ddsl.dcomponents.AlertComponent;
+import ddsl.dcomponents.BreadcrumpComponent;
+import ddsl.dcomponents.DComponent;
+import ddsl.dcomponents.SideNavigationComponent;
 import ddsl.dobjects.DButton;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.PageFactory;
 import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import pages.LoginPage;
 
 public class DomiSMPPage extends DComponent {
@@ -14,9 +21,9 @@ public class DomiSMPPage extends DComponent {
     /**
      * Page object for the common components from Domismp like navigation, right menu. This contains the locators of the page and the methods for the behaviour of the page
      */
-
-    @FindBy(css = "page-header > h1")
-    protected WebElement pageTitle;
+    private final static Logger LOG = LoggerFactory.getLogger(DomiSMPPage.class);
+    @FindBy(css = "cdk-overlay-backdrop cdk-overlay-dark-backdrop cdk-overlay-backdrop-showing")
+    protected WebElement overlay;
     @FindBy(id = "login_id")
     private WebElement loginBtnTop;
     @FindBy(id = "settingsmenu_id")
@@ -48,14 +55,15 @@ public class DomiSMPPage extends DComponent {
         return new LoginPage(driver);
     }
 
-    public LoginPage logout() {
+    public void logout() {
         rightMenuBtn.click();
         logoutMenuBtn.click();
-        return new LoginPage(driver);
+
     }
 
     public void refreshPage() {
         driver.navigate().refresh();
+        waitForPageToLoaded();
     }
 
     public AlertComponent getAlertArea() {
@@ -65,4 +73,34 @@ public class DomiSMPPage extends DComponent {
     public DButton getExpiredDialoginbutton() {
         return weToDButton(dialogOKbutton);
     }
+
+    public boolean isExpiredDialoginbuttonEnabled() {
+        return dialogOKbutton.isEnabled();
+    }
+
+    public boolean isExpiredPopupEnabled() {
+        try {
+            return dialogOKbutton.isDisplayed();
+        } catch (Exception e) {
+            LOG.info("Expiration poup not found", e);
+            return false;
+        }
+
+    }
+
+    public void closeExpirationPopupIfEnabled() {
+        try {
+            if (isExpiredPopupEnabled()) {
+                LOG.info("Expired password dialog is present.");
+                getSidebar().getExpiredDialoginbutton().click();
+            }
+        } catch (Exception e) {
+            LOG.error("Could not close Expiration popup", e);
+        }
+    }
+
+    public void waitForPageToLoaded() {
+        wait.defaultWait.until(ExpectedConditions.visibilityOf(getBreadcrump().BreadcrumpItems.get(0)));
+    }
+
 }
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/PageWithGrid.java b/domiSMP-ui-tests/src/main/java/ddsl/PageWithGrid.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8de9affe439a510ced37c9c42446ecc93441231
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/PageWithGrid.java
@@ -0,0 +1,49 @@
+package ddsl;
+
+import ddsl.dcomponents.Grid.GridPagination;
+import ddsl.dcomponents.Grid.SmallGrid;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
+
+public class PageWithGrid extends DomiSMPPage {
+
+    /**
+     * Generic page used for pages which have small grid in the right of the page. This element gives access to action buttons and elements of the page.
+     */
+
+    @FindBy(css = "mat-form-field input")
+    public WebElement FilterInput;
+    @FindBy(css = "data-panel >div >div> mat-toolbar button:first-of-type")
+    public WebElement AddBtn;
+
+    @FindBy(css = "data-panel >div >div> mat-toolbar button:last-of-type")
+    public WebElement DeleteBtn;
+    @FindBy(css = "data-panel > div [class=\"smp-column-data\"]")
+    public WebElement SidePanel;
+
+    public PageWithGrid(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
+    }
+
+    public GridPagination getPagination() {
+        return new GridPagination(driver);
+    }
+
+    public SmallGrid getGrid() {
+        return new SmallGrid(driver);
+    }
+
+    public void filter(String filterValue) {
+        try {
+            weToDInput(FilterInput).fill(filterValue);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java
index e9fbd067029b145fdf4f4042ca6e5ca3e6e1d84b..312d30442bd118128e1c10c0871259847e34c30a 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java
@@ -1,48 +1,39 @@
 package ddsl.dcomponents;
 
-import ddsl.dobjects.DObject;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class AlertComponent extends DComponent {
+
+    /**
+     * This component is used to retrive the alerts which appear in application
+     */
     private final static Logger LOG = LoggerFactory.getLogger(AlertComponent.class);
 
     @FindBy(id = "alertmessage_id")
     public WebElement alertToaster;
-    @FindBy(css = "#alertmessage_id > span.closebtn")
-    public WebElement closeButton;
 
     public AlertComponent(WebDriver driver) {
         super(driver);
-    }
-
-    public void closeAlert() throws Exception {
-        weToDButton(closeButton).click();
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
     }
 
     public String getAlertMessage() {
         try {
             wait.forElementToBeVisible(alertToaster, true);
+            String alertMesageText = alertToaster.getText().replace("×", "").replaceAll("\n", "");
+            LOG.debug("Displayed message : {}.", alertToaster.getText());
 
-            LOG.error(closeButton.getText());
+            return alertMesageText;
         } catch (Exception e) {
-        }
-        DObject alertObject = new DObject(driver, alertToaster);
-
-        if (!alertObject.isPresent()) {
             LOG.debug("No messages displayed.");
             return null;
         }
-
-        String messageTxt = alertToaster.getText().replace(closeButton.getText(), "").replaceAll("\n", "").trim();
-
-        LOG.debug("messageTxt = " + messageTxt);
-
-        LOG.debug("Getting alert message ...");
-        return messageTxt.trim();
     }
 
 }
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java
index 117b03067762f40d709fd6a951fb76387c28ea95..815d302e1e036c5215785fd10046628b7b3b30d9 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java
@@ -1,6 +1,7 @@
 package ddsl.dcomponents;
 
 
+import ddsl.DomiSMPPage;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
@@ -8,6 +9,9 @@ import org.openqa.selenium.support.FindBy;
 import java.util.List;
 
 public class BreadcrumpComponent extends DomiSMPPage {
+    /**
+     * Component for the Breadcrump of DomiSMP
+     */
 
     @FindBy(xpath = "//smp-breadcrumb/div/smp-breadcrumb-item/a/div[3]/span")
     public List<WebElement> BreadcrumpItems;
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java
index 7104941694dfc4e8b597b79ec0bf46b921e824dd..96f00df89bb5b8283942b29ebaa2ab56197e9299 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java
@@ -9,6 +9,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class ConfirmationDialog extends DComponent {
+    /**
+     * Page component for conformation popups/dialogs for different actions
+     */
     private final static Logger LOG = LoggerFactory.getLogger(ConfirmationDialog.class);
 
     @FindBy(id = "yesbuttondialog_id")
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java
index 5b1e6203dccf2c080b30705e353a410c7c4fae38..ff8d285f889f371e6009a34be5541618e8c1d8b5 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java
@@ -6,13 +6,14 @@ import ddsl.dobjects.DSelect;
 import ddsl.dobjects.DWait;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import utils.TestRunData;
 
 public class DComponent {
 
-    private final static Logger LOG = LoggerFactory.getLogger(DComponent.class);
+    /**
+     * Generic component which which gives access of driver, wait and wrappers of elements. This should be inhered by each component class.
+     */
+
     public DWait wait;
     protected WebDriver driver;
     protected TestRunData data = new TestRunData();
@@ -33,4 +34,5 @@ public class DComponent {
     protected DSelect weToDSelect(WebElement element) {
         return new DSelect(driver, element);
     }
+
 }
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java
index 9bde25e34d2c0a7b86fa15191393aa61539358f4..82c8240ab0335875afa3d93dcbdc04e2d4fa4b79 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java
@@ -47,9 +47,9 @@ public class BasicGrid extends DComponent {
         wait.forXMillis(500);
     }
 
-    public void doubleClickRow(String propertyName) {
+    public void doubleClickRow(String fieldName) {
         gridRows.forEach(row -> {
-                    if (row.getText().startsWith(propertyName)) {
+                    if (row.getText().startsWith(fieldName)) {
                         Actions action = new Actions(driver);
                         action.doubleClick(row).perform();
                     }
@@ -59,24 +59,16 @@ public class BasicGrid extends DComponent {
         wait.forXMillis(500);
     }
 
-    public void doubleClickRow(int rowNumber) {
+    public String getValue(String fieldName) {
+        String fieldValue = null;
+        for (WebElement row : gridRows) {
+            if (row.getText().startsWith(fieldName)) {
+                fieldValue = row.getText().replace(fieldName, "").trim();
 
-        LOG.info("double clicking row ... " + rowNumber);
-        wait.forXMillis(500);
-        if (rowNumber >= gridRows.size()) {
-            return;
+            }
         }
-        Actions action = new Actions(driver);
-        action.doubleClick(gridRows.get(rowNumber)).perform();
-    }
-
-    public int getColumnsNo() {
-        LOG.info("getting number of columns");
-        return gridHeaders.size();
-    }
+        return fieldValue;
 
-    public int getRowsNo() {
-        return gridRows.size();
     }
 
     public void scrollRow(int index) {
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/GridPagination.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/GridPagination.java
new file mode 100644
index 0000000000000000000000000000000000000000..a45faaf69b4491bffa0ace67d811f2ea1f19c115
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/GridPagination.java
@@ -0,0 +1,73 @@
+package ddsl.dcomponents.Grid;
+
+import ddsl.dcomponents.DComponent;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class GridPagination extends DComponent {
+    private final static Logger LOG = LoggerFactory.getLogger(GridPagination.class);
+
+    @FindBy(css = "#extension-paginator > div > div > div > div")
+    public WebElement currentElementsLbl;
+
+    @FindBy(css = "#extension-paginator > div > div > div  [aria-label = \"First page\"]")
+    public WebElement firstPageBtn;
+    @FindBy(css = "#extension-paginator > div > div > div  [aria-label = \"Next page\"]")
+    public WebElement previousPageBtn;
+
+    @FindBy(css = "#extension-paginator > div > div > div  [aria-label = \"Next page\"]")
+    public WebElement nextPageBtn;
+
+    @FindBy(css = "#extension-paginator > div > div > div  [aria-label = \"Last page\"]")
+    public WebElement lastPageBtn;
+
+
+    public GridPagination(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(driver, this);
+    }
+
+    public Integer getTotalPageNumber() {
+        String val = currentElementsLbl.getText();
+        Pattern pattern = Pattern.compile("of (\\d+)");
+        Matcher matcher = pattern.matcher(val);
+        if (matcher.find()) {
+            Integer totalRecord = Integer.parseInt(matcher.group(1));
+            return (totalRecord % 5 == 0) ? (totalRecord / 5) : ((totalRecord / 5) + 1);
+        }
+        return null;
+    }
+
+
+    public void goToNextPage() {
+        try {
+            if (weToDButton(nextPageBtn).isPresent()) {
+                weToDButton(nextPageBtn).click();
+                LOG.error("Click on Grid Next Page button");
+
+            } else {
+                LOG.error("Next page button is not available.");
+            }
+        } catch (Exception e) {
+            LOG.error("Next page button is not available.");
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    public void goToPreviousPage() throws Exception {
+        if (weToDButton(previousPageBtn).isEnabled()) {
+            weToDButton(previousPageBtn).click();
+
+        } else {
+            LOG.error("Previous page button is not available.");
+        }
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d62cd0c2b86b1a94916e08fe4c896a5eb254707
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java
@@ -0,0 +1,78 @@
+package ddsl.dcomponents.Grid;
+
+import ddsl.dcomponents.DComponent;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class SmallGrid extends DComponent {
+    private final static Logger LOG = LoggerFactory.getLogger(SmallGrid.class);
+
+    @FindBy(css = "data-panel table thead th")
+    protected List<WebElement> gridHeaders;
+    @FindBy(css = "data-panel table tbody tr")
+    protected List<WebElement> gridRows;
+
+    public SmallGrid(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(driver, this);
+
+    }
+
+    public GridPagination getGridPagination() {
+        return new GridPagination(driver);
+    }
+
+    public List<WebElement> gerGridHeaders() {
+        return wait.defaultWait.until(ExpectedConditions.visibilityOfAllElements(gridHeaders));
+    }
+
+    public List<WebElement> getRows() {
+        wait.forXMillis(50);
+        return wait.defaultWait.until(ExpectedConditions.visibilityOfAllElements(gridRows));
+    }
+
+    public List<WebElement> getCells(WebElement row) {
+        return row.findElements(By.cssSelector("td"));
+    }
+
+    public WebElement searchValueInColumn(String columnName, String value) {
+
+        Integer numOfPages = getGridPagination().getTotalPageNumber();
+        List<WebElement> rowHeaders = gerGridHeaders();
+        int columnIndex = -1;
+        for (int i = 0; i < rowHeaders.size(); i++) {
+            if (rowHeaders.get(i).getText().equals(columnName)) {
+                columnIndex = i;
+                break;
+            }
+        }
+        if (columnIndex == -1) {
+            return null;
+        }
+        for (int pageNr = 1; pageNr < numOfPages + 1; pageNr++) {
+
+            List<WebElement> rows = getRows();
+            for (WebElement row : rows) {
+                List<WebElement> cells = getCells(row);
+                if (cells.get(columnIndex).getText().equals(value)) {
+                    LOG.debug("[{}] found on page [{}]", value, pageNr);
+                    return row;
+                }
+            }
+            getGridPagination().goToNextPage();
+
+        }
+        return null;
+    }
+
+
+}
+
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java
index aa53f075aac593edc1f1a7e4b1dcf30c3f935598..a370088082e404d702ae91fde8d4e050a31081c4 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java
@@ -7,24 +7,28 @@ import org.openqa.selenium.support.PageFactory;
 import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import pages.ProfilePage.SuccesfullPasswordChangedPopup;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class SetChangePasswordDialog extends DComponent {
+    /**
+     * Component object for dialog of changing password.
+     */
+
     private final static Logger LOG = LoggerFactory.getLogger(SetChangePasswordDialog.class);
     @FindBy(css = ".smp-field-error")
     List<WebElement> fieldsError;
     @FindBy(id = "cp_id")
     private WebElement currentPasswordInput;
-    @SuppressWarnings("SpellCheckingInspection")
     @FindBy(id = "np_id")
     private WebElement newPasswordInput;
     @FindBy(id = "cnp_id")
     private WebElement confirmationPasswordInput;
-    @FindBy(id = "cnp_id")
+    @FindBy(id = "changeCurrentUserPasswordButton")
     private WebElement setPasswordBtn;
-    @FindBy(id = "cnp_id")
+    @FindBy(id = "closeDialogButton")
     private WebElement closeBtn;
 
 
@@ -33,27 +37,22 @@ public class SetChangePasswordDialog extends DComponent {
         PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
     }
 
-    public boolean trySetPassword(String currentPassword, String newPassword) throws Exception {
+    public List<WebElement> setNewPassword(String currentPassword, String newPassword) throws Exception {
 
         LOG.info("Set new password");
         weToDInput(currentPasswordInput).fill(currentPassword);
         weToDInput(newPasswordInput).fill(newPassword);
         weToDInput(confirmationPasswordInput).fill(newPassword);
-        Integer hasError;
-        if (weToDButton(setPasswordBtn).isEnabled() && fieldsError.size() < 1) {
-            weToDButton(setPasswordBtn).click();
-            return true;
-        }
-        {
-            getFieldErrorMessage().forEach(LOG::error);
-            return false;
-        }
+        weToDButton(setPasswordBtn).click();
+        SuccesfullPasswordChangedPopup popup = new SuccesfullPasswordChangedPopup(driver);
+        popup.closePopup();
 
+        return fieldsError;
     }
 
     public List<String> getFieldErrorMessage() {
         ArrayList<String> fieldErrors = new ArrayList<>();
-        if (fieldsError.size() > 0) {
+        if (!fieldsError.isEmpty()) {
             fieldsError.forEach(error -> {
                 fieldErrors.add(error.getText());
             });
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java
index 4fde72f9f468785813c8023707cb688e4f6f4df3..fa01a60d1ae948ef13eafa75d356bca91faed111 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java
@@ -1,5 +1,6 @@
 package ddsl.dcomponents;
 
+import ddsl.DomiSMPPage;
 import ddsl.enums.Pages;
 import org.openqa.selenium.ElementNotInteractableException;
 import org.openqa.selenium.NoSuchElementException;
@@ -8,14 +9,21 @@ import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.PageFactory;
 import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
+import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import pages.ProfilePage;
+import pages.DomainsPage.DomainsPage;
+import pages.ProfilePage.ProfilePage;
 import pages.PropertiesPage.PropertiesPage;
+import pages.UsersPage;
 
 import java.util.Objects;
 
 public class SideNavigationComponent extends DomiSMPPage {
+
+    /**
+     * Navigation object to navigate through application.
+     */
     private final static Logger LOG = LoggerFactory.getLogger(SideNavigationComponent.class);
 
     @FindBy(id = "window-sidenav-panel")
@@ -85,6 +93,7 @@ public class SideNavigationComponent extends DomiSMPPage {
     public SideNavigationComponent(WebDriver driver) {
         super(driver);
         PageFactory.initElements(new AjaxElementLocatorFactory(driver, 1), this);
+        wait.forElementToBeGone(overlay);
     }
 
     private MenuNavigation getNavigationLinks(Pages pages) {
@@ -94,13 +103,25 @@ public class SideNavigationComponent extends DomiSMPPage {
         return null;
     }
 
+    public <T> T navigateTo2(Pages page) {
+
+        wait.defaultWait.until(ExpectedConditions.visibilityOf(sideBar));
+        if (page == Pages.SYSTEM_SETTINGS_DOMAINS) {
+            openSubmenu(systemSettingsExpand, domainsLnk);
+            return (T) new DomainsPage(driver);
+        }
+        return null;
+
+
+    }
+
     public DomiSMPPage navigateTo(Pages page) {
 
-        wait.forElementToHaveText(sideBar);
+        wait.defaultWait.until(ExpectedConditions.visibilityOf(sideBar));
 
         LOG.debug("Get link to " + page.name());
         //            case SEARCH_RESOURCES:
-        //                expandSection(resourcesExpandLnk);
+        //                expandSection(resourcesExpandLnk);s
         //                return new DLink(driver, resourcesLnk);
         //            case ADMINISTRATION_EDIT_DOMAINS:
         //                expandSection(administrationExpand);
@@ -111,12 +132,16 @@ public class SideNavigationComponent extends DomiSMPPage {
         //            case ADMINISTRATION_EDIT_RESOURCES:
         //                expandSection(administrationExpand);
         //                return new DLink(driver, editResourcesLnk);
-        //            case SYSTEM_SETTINGS_USERS:
-        //                expandSection(systemSettingsExpand);
-        //                return new DLink(driver, usersLnk);
-        //            case SYSTEM_SETTINGS_DOMAINS:
-        //                expandSection(systemSettingsExpand);
-        //                return new DLink(driver, domainsLnk);
+
+        if (page == Pages.SYSTEM_SETTINGS_USERS) {
+            openSubmenu(systemSettingsExpand, usersLnk);
+            return new UsersPage(driver);
+        }
+        if (page == Pages.SYSTEM_SETTINGS_DOMAINS) {
+            openSubmenu(systemSettingsExpand, domainsLnk);
+            return new DomainsPage(driver);
+        }
+
         //            case SYSTEM_SETTINGS_KEYSTORE:
         //                expandSection(systemSettingsExpand);
         //                return new DLink(driver, keystoreLnk);
@@ -151,41 +176,45 @@ public class SideNavigationComponent extends DomiSMPPage {
     public Boolean isMenuAvailable(Pages page) {
         MenuNavigation navigationLinks = getNavigationLinks(page);
         try {
+            assert navigationLinks != null;
             if (navigationLinks.menuLink.isEnabled()) {
                 navigationLinks.menuLink.click();
                 return navigationLinks.submenuLink.isEnabled();
             }
             return false;
         } catch (NoSuchElementException e) {
+            LOG.error("No menu element found");
             return false;
         }
     }
 
-    private void openSubmenu(WebElement menu, WebElement submenu) {
+    private void openSubmenu(WebElement menuBtn, WebElement submenuBtn) {
         try {
-            submenu.click();
-            if (submenu.getText().contains(getBreadcrump().getCurrentPage())) {
+            submenuBtn.click();
+            if (submenuBtn.getText().contains(getBreadcrump().getCurrentPage())) {
                 LOG.info("Current page is " + getBreadcrump().getCurrentPage());
 
             } else {
-                LOG.error("Current page is not as expected. EXPECTED: [{}] but ACTUAL PAGE [{}]", submenu.getText().toString(), getBreadcrump().getCurrentPage().toString());
+                LOG.error("Current page is not as expected. EXPECTED: [{}] but ACTUAL PAGE [{}]", submenuBtn.getText(), getBreadcrump().getCurrentPage());
                 throw new RuntimeException();
             }
 
         } catch (ElementNotInteractableException exception) {
-            menu.click();
-            submenu.click();
-            if (submenu.getText().contains(getBreadcrump().getCurrentPage())) {
+
+            // closeExpirationPopupIfEnabled();
+            menuBtn.click();
+            submenuBtn.click();
+            if (submenuBtn.getText().contains(getBreadcrump().getCurrentPage())) {
                 LOG.info("Current page is " + getBreadcrump().getCurrentPage());
 
             } else {
-                LOG.error("Current page is not as expected. EXPECTED: " + submenu.getText() + "but ACTUAL PAGE: " + getBreadcrump().getCurrentPage());
+                LOG.error("Current page is not as expected. EXPECTED: " + submenuBtn.getText() + "but ACTUAL PAGE: " + getBreadcrump().getCurrentPage());
                 throw new RuntimeException();
             }
         }
     }
 
-    public class MenuNavigation {
+    public static class MenuNavigation {
         WebElement menuLink;
         WebElement submenuLink;
 
diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/UserDataCommonComponent.java
similarity index 50%
rename from domiSMP-ui-tests/src/main/java/pages/ProfilePage.java
rename to domiSMP-ui-tests/src/main/java/ddsl/dcomponents/UserDataCommonComponent.java
index 8727d4a453308c23045c05fade5e70164ceb4238..deb3c3deb17712a0b56a53a6fc9f167cefb67ff1 100644
--- a/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/UserDataCommonComponent.java
@@ -1,25 +1,23 @@
-package pages;
+package ddsl.dcomponents;
 
-import ddsl.dcomponents.DomiSMPPage;
-import ddsl.dcomponents.SetChangePasswordDialog;
+import ddsl.DomiSMPPage;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
-import org.openqa.selenium.support.PageFactory;
-import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ProfilePage extends DomiSMPPage {
+public class UserDataCommonComponent extends DomiSMPPage {
+
     /**
-     * Page object for the Profile page. This contains the locators of the page and the methods for the behaviour of the page
+     * Common component for user data used in Profile and Users page. This contains the locators of the page and the methods for the behaviour of the page
      */
-
-    private final static Logger LOG = LoggerFactory.getLogger(ProfilePage.class);
-
+    private final static Logger LOG = LoggerFactory.getLogger(UserDataCommonComponent.class);
+    @FindBy(id = "changePassword_id")
+    public WebElement setChangePasswordBtn;
     @FindBy(id = "smpTheme_id")
     private WebElement themeSel;
-    @FindBy(id = "moment-locale")
+    @FindBy(id = "smpLocale_id")
     private WebElement localeSel;
     @FindBy(id = "saveButton")
     private WebElement saveBtn;
@@ -27,16 +25,45 @@ public class ProfilePage extends DomiSMPPage {
     private WebElement emailAddressInput;
     @FindBy(id = "fullName_id")
     private WebElement fullNameInput;
-    @FindBy(id = "changePassword_id")
-    private WebElement setChangePasswordBtn;
+    @FindBy(id = "passwordUpdatedOn_id")
+    private WebElement lastSetLbl;
+    @FindBy(id = "passwordExpireOnMessage_id")
+    private WebElement passwordExpiresOnLbl;
 
-    public ProfilePage(WebDriver driver) {
+    public UserDataCommonComponent(WebDriver driver) {
         super(driver);
-        LOG.debug(".... init");
-        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
     }
 
-    public void changeUserProfileData(String emailValue, String fullNameValue, String selectThemeValue, String localeValue) throws Exception {
+    public String getSelectedTheme() {
+        return weToDSelect(themeSel).getCurrentValue();
+    }
+
+    public String getSelectedLocale() {
+        return weToDSelect(localeSel).getCurrentValue();
+    }
+
+    public String getEmailAddress() {
+        return weToDInput(emailAddressInput).getText();
+    }
+
+    public String getFullName() {
+        return weToDInput(fullNameInput).getText();
+    }
+
+    public String getLastSetValue() {
+        return lastSetLbl.getText();
+    }
+
+    public String getPasswordExpiresOnValue() {
+        return passwordExpiresOnLbl.getText();
+    }
+
+    public SetChangePasswordDialog setChangePasswordDialog() {
+        return new SetChangePasswordDialog(driver);
+    }
+
+
+    public String fillUserProfileData(String emailValue, String fullNameValue, String selectThemeValue, String localeValue) {
         try {
             if (!emailValue.isEmpty()) {
                 weToDInput(emailAddressInput).fill(emailValue);
@@ -44,12 +71,9 @@ public class ProfilePage extends DomiSMPPage {
             if (!emailValue.isEmpty()) {
                 weToDInput(fullNameInput).fill(fullNameValue);
             }
-            if (!(selectThemeValue == null)) {
-                weToDSelect(themeSel).selectValue(selectThemeValue);
-            }
-            if (!localeValue.isEmpty()) {
-                weToDSelect(localeSel).selectValue(localeValue);
-            }
+            weToDSelect(themeSel).selectValue(selectThemeValue);
+            weToDSelect(localeSel).selectValue(localeValue);
+
 
         } catch (Exception e) {
             LOG.error("Cannot change User Profile Data ", e);
@@ -58,38 +82,19 @@ public class ProfilePage extends DomiSMPPage {
         if (saveBtn.isEnabled()) {
             saveBtn.click();
         } else {
-            LOG.debug("Save button enable is " + saveBtn.isEnabled());
+            LOG.debug("Save button is " + saveBtn.isEnabled());
         }
 
         try {
-            getAlertArea().getAlertMessage();
+            return getAlertArea().getAlertMessage();
         } catch (Exception e) {
-            throw new RuntimeException(e);
+            return null;
         }
-
     }
 
-    public Boolean tryChangePassword(String currentPasssword, String newPassword) throws Exception {
-        weToDButton(setChangePasswordBtn).click();
+    public void ChangePassword(String currentPasssword, String newPassword) throws Exception {
         SetChangePasswordDialog dialog = new SetChangePasswordDialog(driver);
-        return dialog.trySetPassword(currentPasssword, newPassword);
-    }
-
-    public String getSelectedTheme() {
-        return weToDSelect(themeSel).getCurrentValue();
-    }
-
-    public String getSelectedLocale() {
-        return weToDSelect(localeSel).getCurrentValue();
-    }
-
-    public String getEmailAddress() {
-        return weToDInput(emailAddressInput).getText();
-    }
-
-    public String getFullName() {
-        return weToDInput(fullNameInput).getText();
+        dialog.setNewPassword(currentPasssword, newPassword);
     }
 
-
-}
\ No newline at end of file
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java
index fd7926f7323b78cc13c5632e39ff8d769dc2cf9a..fb17c359393790bd64369f6dec8e35993e5a3d74 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java
@@ -5,11 +5,13 @@ import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 
 public class DButton extends DObject {
+    /**
+     * Generic wrapper for button element.
+     */
     public DButton(WebDriver driver, WebElement element) {
         super(driver, element);
     }
 
-
     @Override
     public String getText() {
         return element.findElement(By.cssSelector("span > span")).getText().trim();
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java
index ab600b12eb040ded023dcc1adb385186a64741cc..12558c60b61c04c86236fd42dddb9394d40860fb 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java
@@ -5,6 +5,9 @@ import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 
 public class DInput extends DObject {
+    /**
+     * Generic wrapper for input element.
+     */
     public DInput(WebDriver driver, WebElement element) {
         super(driver, element);
     }
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java
index 05abd0bfc5ee292a876abe1a0e6a715919f40e62..9563dbc21dca90f0c3762f2c6b2bb4cb2880a84e 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java
@@ -4,8 +4,9 @@ import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 
 public class DLink extends DObject {
-
-
+    /**
+     * Generic wrapper for link element.
+     */
     public DLink(WebDriver driver, WebElement element) {
         super(driver, element);
     }
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java
index 93f1cd6ff03af626f03b2e57e15e9627fcc3b47f..8839146c0e678fc336c1d08ef79902ec332cb1f3 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java
@@ -7,6 +7,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class DObject {
+    /**
+     * Generic element object used to have access to element actions.
+     */
     protected final Logger log = LoggerFactory.getLogger(this.getClass());
     public WebElement element;
     protected WebDriver driver;
@@ -69,11 +72,11 @@ public class DObject {
         if (isEnabled()) {
             wait.forElementToBeClickable(element).click();
         } else {
-            throw new Exception("Not enabled");
+            throw new Exception(element.getAccessibleName() + "Not enabled");
         }
     }
 
-    public String getAttribute(String attributeName) throws Exception {
+    public String getAttribute(String attributeName) {
         if (isPresent()) {
             String attr = element.getAttribute(attributeName);
             if (attr == null) {
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java
index 52423540cbfab0106b3fc331ea368e7d9738c1b6..f9e1393b5a58053fbe8942aedd7244f28f10cce9 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java
@@ -6,7 +6,9 @@ import org.openqa.selenium.support.ui.Select;
 
 
 public class DSelect extends DObject {
-
+    /**
+     * Generic wrapper for select element.
+     */
     Select select = new Select(element);
 
     public DSelect(WebDriver driver, WebElement element) {
@@ -21,5 +23,4 @@ public class DSelect extends DObject {
         return select.getAllSelectedOptions().get(0).getText();
     }
 
-
 }
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java
index 9e235b5bac87c317635c83ffadc2b733fa30b9af..9ed3bf0c48c3aed01252756c464fdc0eced8246d 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java
@@ -1,9 +1,6 @@
 package ddsl.dobjects;
 
-import org.openqa.selenium.By;
-import org.openqa.selenium.StaleElementReferenceException;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
+import org.openqa.selenium.*;
 import org.openqa.selenium.support.ui.ExpectedCondition;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
@@ -14,6 +11,12 @@ import utils.TestRunData;
 import java.time.Duration;
 
 public class DWait {
+    /**
+     * Wait class util used to have access to different types of waits.
+     */
+
+    private final static Logger LOG = LoggerFactory.getLogger(DWait.class);
+
     public final WebDriverWait defaultWait;
     public final WebDriverWait longWait;
     public final WebDriverWait shortWait;
@@ -40,6 +43,7 @@ public class DWait {
         return defaultWait.until(ExpectedConditions.elementToBeClickable(element));
     }
 
+
     public WebElement forElementToBeVisible(WebElement element) {
         return defaultWait.until(ExpectedConditions.visibilityOf(element));
     }
@@ -72,18 +76,16 @@ public class DWait {
         }
     }
 
-    public void forAttributeNotEmpty(WebElement element, String attributeName) {
-        defaultWait.until(ExpectedConditions.attributeToBeNotEmpty(element, attributeName));
-    }
-
     public void forElementToBeGone(WebElement element) {
-        defaultWait.until((ExpectedConditions.invisibilityOf(element)));
+        try {
+            if (element.isDisplayed()) {
+                defaultWait.until((ExpectedConditions.invisibilityOf(element)));
 
-        forXMillis(500);
-    }
+            }
 
-    public void forInvisibilityofLocator(By locator) {
-        defaultWait.until((ExpectedConditions.invisibilityOfElementLocated(locator)));
+        } catch (NoSuchElementException e) {
+            LOG.error("element {} not found", element);
+        }
     }
 
     public void forElementToBeGone(By selector) {
@@ -105,12 +107,7 @@ public class DWait {
 
     public void forElementToBe(WebElement element) {
 
-        defaultWait.until(new ExpectedCondition<Boolean>() {
-            @Override
-            public Boolean apply(WebDriver driver) {
-                return element.getLocation() != null;
-            }
-        });
+        defaultWait.until((ExpectedCondition<Boolean>) driver -> element.getLocation() != null);
 
     }
 
@@ -119,12 +116,7 @@ public class DWait {
     }
 
     public void forAttributeToNOTContain(WebElement element, String attributeName, String value) {
-        defaultWait.until(new ExpectedCondition<Boolean>() {
-            @Override
-            public Boolean apply(WebDriver driver) {
-                return !element.getAttribute(attributeName).contains(value);
-            }
-        });
+        defaultWait.until((ExpectedCondition<Boolean>) driver -> !element.getAttribute(attributeName).contains(value));
     }
 
     public void forAttributeToContain(WebElement element, String attributeName, String value, boolean waitLonger) {
@@ -137,12 +129,7 @@ public class DWait {
     }
 
     public void forElementToHaveText(WebElement element) {
-        defaultWait.until(new ExpectedCondition<Boolean>() {
-            @Override
-            public Boolean apply(WebDriver driver) {
-                return !element.getText().trim().isEmpty();
-            }
-        });
+        defaultWait.until((ExpectedCondition<Boolean>) driver -> !element.getText().trim().isEmpty());
     }
 
     public void forElementToContainText(WebElement element, String text) {
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/enums/ResourceTypes.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResourceTypes.java
new file mode 100644
index 0000000000000000000000000000000000000000..0eda2cf5511692a983a3e3a28dc830464e33845c
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResourceTypes.java
@@ -0,0 +1,27 @@
+package ddsl.enums;
+
+import java.util.Random;
+
+public enum ResourceTypes {
+    OASIS1("edelivery-oasis-smp-1.0-servicegroup (smp-1)"),
+    OASIS2("edelivery-oasis-smp-2.0-servicegroup (oasis-bdxr-smp-2)"),
+    OASIS3("edelivery-oasis-cppa-3.0-cpp (cpp)");
+
+
+    public final String name;
+
+
+    ResourceTypes(String name) {
+        this.name = name;
+
+    }
+
+    public static String getRandomResourceType() {
+        ResourceTypes[] resourceTypes = values();
+        int size = resourceTypes.length;
+        Random random = new Random();
+        int index = random.nextInt(size);
+        return resourceTypes[index].name;
+    }
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java
new file mode 100644
index 0000000000000000000000000000000000000000..af3d3edcf1ac370fbf325ef0473126ea99ea1630
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java
@@ -0,0 +1,29 @@
+package ddsl.enums;
+
+import java.util.Random;
+
+public enum ResponseCertificates {
+    SMP_DOMAIN_02("smp_domain_02 (CN=smp_domain_02,O=digit,C=eu:000000006443d987)"),
+    SMP_EDDSA_448("smp_eddsa_448 (CN=smp_eddsa_448,O=digit,C=eu:000000006443fcba)"),
+    SMP_ECDSA_NIST_B409("smp_ecdsa_nist-b409 (CN=smp_ecdsa_nist-b409,O=digit,C=eu:000000006443fd57)"),
+    SMP_DOMAIN_01("smp_domain_01 (CN=smp_domain_01,O=digit,C=eu:000000006443d8a8"),
+    SAMPLE_KEY("sample_key (CN=demo-smp-signing-key,O=digit,C=eu:000000006443f9bc"),
+    SMP_EDDSA_25519("smp_eddsa_25519 (CN=smp_eddsa_25519,O=digit,C=eu:000000006443d95d");
+
+    public final String name;
+
+
+    ResponseCertificates(String name) {
+        this.name = name;
+
+    }
+
+    public static String getRandomCertificate() {
+        ResponseCertificates[] certificates = values();
+        int size = certificates.length;
+        Random random = new Random();
+        int index = random.nextInt(size);
+        return certificates[index].name;
+    }
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/pages/DomainsPage/DomainsPage.java b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/DomainsPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fd59dd32c8a6c627be059010a622e30bb10c39e
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/DomainsPage.java
@@ -0,0 +1,74 @@
+package pages.DomainsPage;
+
+import ddsl.PageWithGrid;
+import ddsl.dobjects.DButton;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import rest.models.DomainModel;
+
+import java.util.List;
+
+public class DomainsPage extends PageWithGrid {
+    /**
+     * Page object for the Users page. This contains the locators of the page and the methods for the behaviour of the page
+     */
+    private final static Logger LOG = LoggerFactory.getLogger(DomainsPage.class);
+
+    @FindBy(id = "domainCode_id")
+    private WebElement domainIdInput;
+    @FindBy(id = "signatureKeyAlias_id")
+    private WebElement responseSignatureCertificateDdl;
+
+    @FindBy(id = "domainVisibility_id")
+    private WebElement visibilityOfDomainDdl;
+
+    @FindBy(id = "saveButton")
+    private WebElement saveBtn;
+
+    @FindBy(css = "[role = \"tab\"] ")
+    private List<WebElement> tabList;
+
+    private ResourceTab resourceTab;
+
+
+    public DomainsPage(WebDriver driver) {
+        super(driver);
+        LOG.debug("Loading Domains page.");
+    }
+
+    public DButton getCreateDomainBtn() {
+        return new DButton(driver, AddBtn);
+    }
+
+    public ResourceTab getResourceTab() {
+
+        return new ResourceTab(driver);
+    }
+
+
+    public void fillDomainData(DomainModel domainModel) {
+
+        domainIdInput.sendKeys(domainModel.getDomainCode());
+        weToDSelect(responseSignatureCertificateDdl).selectValue(domainModel.getSignatureKeyAlias());
+    }
+
+    public String saveChangesAndGetMessage() {
+        saveBtn.click();
+        return getAlertArea().getAlertMessage();
+    }
+
+    public void goToTab(String tabName) {
+        for (WebElement element : tabList) {
+            if (element.getText().contains(tabName)) {
+                element.click();
+                wait.forAttributeToContain(element, "aria-selected", "true");
+                LOG.debug("Domain tab {} is opened", tabName);
+            }
+        }
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/pages/DomainsPage/ResourceTab.java b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/ResourceTab.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e1bb994b3fa567515d5e8047930aeeb28dea540
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/ResourceTab.java
@@ -0,0 +1,59 @@
+package pages.DomainsPage;
+
+import ddsl.dcomponents.DComponent;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class ResourceTab extends DComponent {
+
+    /**
+     * Resource tab component of Domain page. Gives access to resource tab behaviour.
+     */
+    private final static Logger LOG = LoggerFactory.getLogger(ResourceTab.class);
+
+    @FindBy(css = "mat-list-option")
+    private List<WebElement> resourceOptions;
+
+    @FindBy(id = "saveButton")
+    private WebElement saveBtn;
+
+    public ResourceTab(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
+
+    }
+
+    public void saveChanges() {
+        if (saveBtn.isEnabled()) {
+            saveBtn.click();
+            if (saveBtn.getAttribute("disabled").equals("truw")) {
+                LOG.debug("Resource tab changes were succesfully saved");
+            }
+            LOG.debug("Resource tab changes were not saved");
+        }
+    }
+
+
+    public void checkResource(String resourceName) {
+        wait.forElementToBeClickable(resourceOptions.get(0));
+        for (WebElement element : resourceOptions) {
+            if (element.getText().contains(resourceName)) {
+                if (element.getAttribute("aria-selected").equals("false")) {
+                    element.click();
+                    wait.forAttributeToContain(element, "aria-selected", "true");
+                    LOG.debug("Selecting resource {} is opened", resourceName);
+                } else {
+                    LOG.debug("Resource {} is already selected", resourceName);
+                }
+
+            }
+        }
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
index 41ad9a1767435f71479c77ff58ac7fe5edfd073e..5aaba22ef4a5a921610371ae50ef8dc6bc4686f8 100644
--- a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
+++ b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
@@ -1,6 +1,6 @@
 package pages;
 
-import ddsl.dcomponents.DomiSMPPage;
+import ddsl.DomiSMPPage;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
@@ -32,7 +32,7 @@ public class LoginPage extends DomiSMPPage {
         PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
     }
 
-    public DomiSMPPage login(String user, String pass) throws Exception {
+    public void login(String user, String pass) throws Exception {
         HashMap<String, String> usr = new HashMap<>();
         usr.put("username", user);
         usr.put("pass", pass);
@@ -43,13 +43,17 @@ public class LoginPage extends DomiSMPPage {
         weToDInput(password).fill(usr.get("pass"));
         weToDButton(loginBtn).click();
 
-        if (getExpiredDialoginbutton().isPresent()) {
-            LOG.info("Expired password dialog is present.");
-            getExpiredDialoginbutton().click();
-        }
+        try {
+            if (isExpiredDialoginbuttonEnabled()) {
+                getExpiredDialoginbutton().click();
+            }
+
+        } catch (Exception e) {
+            LOG.debug("Password expiration popup is not present");
 
+            throw new RuntimeException(e);
+        }
 
-        return new DomiSMPPage(driver);
 
     }
 
diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage/ProfilePage.java b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/ProfilePage.java
new file mode 100644
index 0000000000000000000000000000000000000000..80cfce297e2384c188a87e8082c13c968e3e0524
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/ProfilePage.java
@@ -0,0 +1,22 @@
+package pages.ProfilePage;
+
+import ddsl.PageWithGrid;
+import ddsl.dcomponents.UserDataCommonComponent;
+import org.openqa.selenium.WebDriver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ProfilePage extends PageWithGrid {
+    /**
+     * Page object for the Profile page. This contains the locators of the page and the methods for the behaviour of the page
+     */
+    private final static Logger LOG = LoggerFactory.getLogger(ProfilePage.class);
+    public UserDataCommonComponent userData;
+
+
+    public ProfilePage(WebDriver driver) {
+        super(driver);
+        userData = new UserDataCommonComponent(driver);
+
+    }
+}
\ No newline at end of file
diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage/SuccesfullPasswordChangedPopup.java b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/SuccesfullPasswordChangedPopup.java
new file mode 100644
index 0000000000000000000000000000000000000000..febf89b9b69ecbc629932b1e14533960503c3da3
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/SuccesfullPasswordChangedPopup.java
@@ -0,0 +1,34 @@
+package pages.ProfilePage;
+
+import ddsl.dcomponents.DComponent;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+
+public class SuccesfullPasswordChangedPopup extends DComponent {
+
+    /**
+     * This class is used to map the succesfull password changed dialog.
+     */
+    @FindBy(css = "#mat-mdc-dialog-2 > div > div > app-information-dialog > div > div.panel")
+    WebElement message;
+    @FindBy(id = "closebuttondialog_id")
+    WebElement closeBtn;
+
+    public SuccesfullPasswordChangedPopup(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(driver, this);
+        wait.forElementToBeClickable(closeBtn);
+
+    }
+
+    public void closePopup() {
+        try {
+            weToDButton(closeBtn).click();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+
+        }
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java
index cff28c6c78ee7d1116e60c7df72241ff05669dd7..16058b35f043180cc8d2de9f0b6a30fccebd92ad 100644
--- a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java
+++ b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java
@@ -6,6 +6,10 @@ import org.openqa.selenium.WebElement;
 
 public class PropGrid extends BasicGrid {
 
+    /**
+     * This class is used to map Property grid component.
+     */
+
     public PropGrid(WebDriver driver, WebElement container) {
         super(driver, container);
     }
@@ -15,6 +19,7 @@ public class PropGrid extends BasicGrid {
         return new PropertyPopup(driver);
     }
 
-    ;
-
+    public String getPropertyValue(String propertyName) {
+        return getValue(propertyName);
+    }
 }
diff --git a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java
index 323d9cae99582d6352439f47e0fd2376cdd45fd3..08ed90d4633a6f19f20c68c11641362c5e30f8d0 100644
--- a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java
+++ b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java
@@ -1,7 +1,7 @@
 package pages.PropertiesPage;
 
+import ddsl.DomiSMPPage;
 import ddsl.dcomponents.ConfirmationDialog;
-import ddsl.dcomponents.DomiSMPPage;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
@@ -11,6 +11,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class PropertiesPage extends DomiSMPPage {
+
+    /**
+     * Page object for the Properties page. This contains the locators of the page and the methods for the behaviour of the page
+     */
     private final static Logger LOG = LoggerFactory.getLogger(PropertiesPage.class);
 
     @FindBy(id = "searchTable")
@@ -50,6 +54,10 @@ public class PropertiesPage extends DomiSMPPage {
         } catch (Exception e) {
             LOG.error("Cannot set value for property {1}", propertyName);
         }
+    }
+
+    public String getPropertyValue(String propertyName) {
+        return grid().getPropertyValue(propertyName);
 
     }
 
diff --git a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java
index a754aca2c28b1c52dc4352322ecf2194de2a1a10..5aa06310ef575928243e399243f2d334d1ceb975 100644
--- a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java
+++ b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java
@@ -10,6 +10,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class PropertyPopup extends DComponent {
+    /**
+     * Property popup component used when modifying a property.
+     */
     private final static Logger LOG = LoggerFactory.getLogger(PropertiesPage.class);
     @FindBy(id = "updatePropertyButton")
     WebElement popupOkBtn;
@@ -63,9 +66,9 @@ public class PropertyPopup extends DComponent {
     }
 
     public PropertiesPage enableCheckboxOfProperty() {
-        Boolean bool = propertyCheckbox.isSelected();
+        boolean bool = propertyCheckbox.isSelected();
 
-        if (bool == false) {
+        if (!bool) {
             propertyCheckbox.click();
             popupOkBtn.click();
         } else {
@@ -75,14 +78,14 @@ public class PropertyPopup extends DComponent {
     }
 
     public PropertiesPage disableCheckboxOfProperty() {
-        Boolean bool = propertyCheckbox.isSelected();
-        if (bool == true) {
+        boolean bool = propertyCheckbox.isSelected();
+        if (bool) {
             JavascriptExecutor executor = (JavascriptExecutor) driver;
             executor.executeScript("arguments[0].click();", propertyCheckbox);
             try {
                 Thread.sleep(1000);
             } catch (Exception e) {
-                e.printStackTrace();
+                LOG.error(String.valueOf(e));
             }
             popupOkBtn.click();
         } else {
diff --git a/domiSMP-ui-tests/src/main/java/pages/UsersPage.java b/domiSMP-ui-tests/src/main/java/pages/UsersPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c59cae419e7fa41ffb300171089f11abf7bfe64
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/UsersPage.java
@@ -0,0 +1,84 @@
+package pages;
+
+import ddsl.PageWithGrid;
+import ddsl.dcomponents.UserDataCommonComponent;
+import ddsl.dobjects.DButton;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import rest.models.UserModel;
+
+public class UsersPage extends PageWithGrid {
+    /**
+     * Page object for the Users page. This contains the locators of the page and the methods for the behaviour of the page
+     */
+    private final static Logger LOG = LoggerFactory.getLogger(UsersPage.class);
+
+    public UserDataCommonComponent userData;
+    @FindBy(id = "username_id")
+    private WebElement usernameInput;
+    @FindBy(id = "role_id")
+    private WebElement applicationRoleDdl;
+    @FindBy(id = "active_id")
+    private WebElement isActive;
+
+
+    public UsersPage(WebDriver driver) {
+        super(driver);
+        userData = new UserDataCommonComponent(driver);
+        LOG.debug("Loading Users page.");
+    }
+
+    public DButton getCreateUserBtn() {
+        return new DButton(driver, AddBtn);
+    }
+
+    public String fillNewUserDataAndSave(UserModel newUserData) {
+        LOG.debug("Filling user data...");
+        try {
+            weToDInput(usernameInput).fill(newUserData.getUsername());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        weToDSelect(applicationRoleDdl).selectValue(newUserData.getRole());
+
+        String alertMessage = userData.fillUserProfileData(newUserData.getEmailAddress(), newUserData.getFullName(), newUserData.getSmpTheme(), newUserData.getSmpLocale());
+        LOG.debug("User {} was created", newUserData.getUsername());
+        return alertMessage;
+    }
+
+    public String getApplicationRoleValue() {
+        return weToDSelect(applicationRoleDdl).getCurrentValue();
+    }
+
+    public String getFullNameValue() {
+        return userData.getFullName();
+    }
+
+    public Boolean isSelectedUserActive() {
+        try {
+            return weToDInput(isActive).getAttribute("class").contains("checked");
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public String getEmailValue() {
+        return userData.getEmailAddress();
+    }
+
+    public String getSelectedThemeValue() {
+        return userData.getSelectedTheme();
+
+    }
+
+    public String getSelectedLocaleValue() {
+        return userData.getSelectedLocale();
+
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
index 2f30da5f1a477f0a8e09c30ea309f67e36aad4f0..a7545ad6c2c911ae688483ea0d00320e2f71206d 100644
--- a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
@@ -27,7 +27,6 @@ public class BaseRestClient {
     protected String token;
     protected String username;
     protected String password;
-    protected String newPassword;
 
     public BaseRestClient(String username, String password) {
         this.username = username;
@@ -37,7 +36,7 @@ public class BaseRestClient {
 
     public BaseRestClient() {
         this.username = data.getAdminUser().get("username");
-        this.password = data.getAdminUser().get("pass");
+        this.password = data.getAdminUser().get("password");
     }
 
     //	---------------------------------------Default request methods -------------------------------------------------
@@ -72,11 +71,6 @@ public class BaseRestClient {
         return builder.type(type).put(ClientResponse.class, body.toString());
     }
 
-
-    protected ClientResponse jsonPUT(WebResource resource, String params) {
-        return requestPUT(resource, params, MediaType.APPLICATION_JSON);
-    }
-
     protected ClientResponse jsonPUT(WebResource resource, JSONObject body) {
         return requestPUT(resource, body, MediaType.APPLICATION_JSON);
     }
@@ -108,6 +102,7 @@ public class BaseRestClient {
 
         return builder;
     }
+
     public List<NewCookie> login() throws SMPRestException {
         log.debug("Rest client using to login: " + this.username);
         HashMap<String, String> params = new HashMap<>();
@@ -128,6 +123,7 @@ public class BaseRestClient {
         throw new SMPRestException("Login failed", response);
 
     }
+
     private String extractToken() {
         String mytoken = null;
         for (NewCookie cookie : cookies) {
@@ -137,6 +133,7 @@ public class BaseRestClient {
         }
         return mytoken;
     }
+
     public void refreshCookies() throws Exception {
         if (isLoggedIn()) {
             return;
@@ -152,6 +149,7 @@ public class BaseRestClient {
             throw new Exception("Could not obtain XSRF token, tests will not be able to generate necessary data!");
         }
     }
+
     public boolean isLoggedIn() {
         WebResource.Builder builder = decorateBuilder(resource.path(RestServicePaths.CONNECTED));
         int response = builder.get(ClientResponse.class).getStatus();
diff --git a/domiSMP-ui-tests/src/main/java/rest/DomainClient.java b/domiSMP-ui-tests/src/main/java/rest/DomainClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..a0921d740b9afd5f10ed617cc98cd2f11af5dcae
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/DomainClient.java
@@ -0,0 +1,45 @@
+package rest;
+
+import com.sun.jersey.api.client.ClientResponse;
+import org.json.JSONObject;
+import rest.models.DomainModel;
+
+public class DomainClient extends BaseRestClient {
+
+    /**
+     * Rest client for domain actions
+     */
+    public DomainClient() {
+        super();
+    }
+
+    public JSONObject createDomain(DomainModel domainModel) {
+
+        JSONObject domainJson = new JSONObject(domainModel);
+
+        if (!isLoggedIn()) {
+            try {
+                refreshCookies();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        String createDomainPath = RestServicePaths.getDomainPath(data.userId);
+
+        ClientResponse response = jsonPUT(resource.path(createDomainPath), domainJson);
+        JSONObject responseBody = new JSONObject(response.getEntity(String.class));
+        if (response.getStatus() != 200) {
+            try {
+                throw new SMPRestException("Could not create domain", response);
+            } catch (SMPRestException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        log.debug("Domain: " + domainModel.getDomainCode() + "  has been created successfully!");
+        return responseBody;
+
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
index cbbb65d919eeaaca29bbcba65bb63426f3cfeef0..8818ef18297e686a3467fe27c9841e100ddd92da 100644
--- a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
@@ -9,5 +9,10 @@ public class DomiSMPRestClient extends BaseRestClient {
     public UserClient users() {
         return new UserClient(username, password);
     }
+
+    public DomainClient domains() {
+        return new DomainClient();
+    }
+
 }
 
diff --git a/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
index bcbe59ef187b43328adb50894b2800e6fa34e19d..b5890b5da26376750796bcd7ec3bd8777a209a41 100644
--- a/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
+++ b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
@@ -1,12 +1,11 @@
 package rest;
 
 public class RestServicePaths {
-    private RestServicePaths() {
-    }
-
     public static final String LOGIN = "/public/rest/security/authentication";
     public static final String CONNECTED = "/public/rest/security/user";
 
+    private RestServicePaths() {
+    }
 
     public static String getUsersPath(String currentUserId) {
 
@@ -18,5 +17,12 @@ public class RestServicePaths {
         return "/internal/rest/user/" + currentUserId + "/change-password-for/" + forUserId;
     }
 
+    //Domains paths
+
+    public static String getDomainPath(String currentUserId) {
+
+        return "/internal/rest/domain/" + currentUserId + "/create";
+    }
+
 
 }
diff --git a/domiSMP-ui-tests/src/main/java/rest/UserClient.java b/domiSMP-ui-tests/src/main/java/rest/UserClient.java
index 7dcd9a7896865ec5fb713a8b4871cb779d496a29..1470289b560ebb3fcef30fb28e3dcd07fe28729d 100644
--- a/domiSMP-ui-tests/src/main/java/rest/UserClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/UserClient.java
@@ -6,6 +6,11 @@ import rest.models.UserModel;
 
 public class UserClient extends BaseRestClient {
 
+
+    /**
+     * Rest client for user actions
+     */
+
     public UserClient(String username, String password) {
         super(username, password);
     }
diff --git a/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..005f154c803c4f9333faae611ce0e5f5e47e13a1
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java
@@ -0,0 +1,73 @@
+package rest.models;
+
+import ddsl.enums.ResponseCertificates;
+import utils.Generator;
+
+public class DomainModel {
+
+    private String smlSmpId;
+    private String domainCode;
+    private boolean smlRegistered;
+    private String visibility;
+    private String smlClientKeyAlias;
+    private String signatureKeyAlias;
+    private String smlSubdomain;
+    private String smlParticipantIdentifierRegExp;
+    private boolean smlClientCertAuth;
+    private int status;
+
+    public DomainModel() {
+    }
+
+    public static DomainModel generatePublicDomainModelWithoutSML() {
+        DomainModel domainModel = new DomainModel();
+        domainModel.domainCode = "AUTDom" + Generator.randomAlphaNumeric(6);
+        domainModel.signatureKeyAlias = ResponseCertificates.getRandomCertificate();
+        domainModel.visibility = "PUBLIC";
+
+
+        return domainModel;
+    }
+
+    public String getSmlSmpId() {
+        return smlSmpId;
+    }
+
+    public String getDomainCode() {
+        return domainCode;
+    }
+
+    public boolean isSmlRegistered() {
+        return smlRegistered;
+    }
+
+    public String getVisibility() {
+        return visibility;
+    }
+
+    public String getSmlClientKeyAlias() {
+        return smlClientKeyAlias;
+    }
+
+    public String getSignatureKeyAlias() {
+        return signatureKeyAlias;
+    }
+
+    public String getSmlSubdomain() {
+        return smlSubdomain;
+    }
+
+    public String getSmlParticipantIdentifierRegExp() {
+        return smlParticipantIdentifierRegExp;
+    }
+
+    public boolean isSmlClientCertAuth() {
+        return smlClientCertAuth;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+}
+
+
diff --git a/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java b/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java
index 838f30c4b90450583306011bf4b430571e1a55d3..46d49ea6a4d9c21b406e5cf9b6a5959e891c2445 100644
--- a/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java
+++ b/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java
@@ -94,7 +94,7 @@ public class UserModel {
         this.smpLocale = smpLocale;
     }
 
-    public static UserModel createUserWithUSERrole() {
+    public static UserModel generateUserWithUSERrole() {
         UserModel userModel = new UserModel();
         userModel.username = ("AUT_username_" + Generator.randomAlphaNumeric(4)).toLowerCase();
         userModel.active = true;
@@ -106,7 +106,7 @@ public class UserModel {
         return userModel;
     }
 
-    public static UserModel createUserWithADMINrole() {
+    public static UserModel generateUserWithADMINrole() {
         UserModel userModel = new UserModel();
         userModel.username = ("AUT_username_" + Generator.randomAlphaNumeric(4)).toLowerCase();
         userModel.active = true;
@@ -127,5 +127,6 @@ public class UserModel {
         return userModel;
     }
 
+
 }
 
diff --git a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java
index 2ac4c7a7e3a90fad4a3d44f5b989560650aba740..c603446736432b6525d07b71d6469a3848a24022 100644
--- a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java
+++ b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java
@@ -8,8 +8,8 @@ import org.openqa.selenium.chrome.ChromeOptions;
 import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.firefox.FirefoxOptions;
 
+import java.time.Duration;
 import java.util.HashMap;
-import java.util.concurrent.TimeUnit;
 
 public class DriverManager {
     static TestRunData data = new TestRunData();
@@ -18,14 +18,15 @@ public class DriverManager {
     public static WebDriver getDriver() {
 
         WebDriver driver;
-        if ( StringUtils.equalsIgnoreCase(data.getRunBrowser(), "firefox")) {
+        if (StringUtils.equalsIgnoreCase(data.getRunBrowser(), "firefox")) {
             driver = getFirefoxDriver();
         } else {
             driver = getChromeDriver();
         }
         driver.manage().window().setSize(new Dimension(1920, 1080));
         driver.manage().window().maximize();
-        driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
+        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(1));
+
         return driver;
     }
 
@@ -42,16 +43,19 @@ public class DriverManager {
         ChromeOptions options = new ChromeOptions();
         options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
         options.addArguments("--disable-popup-blocking");
+        // options.addArguments("--headless=new");
 
         options.setExperimentalOption("prefs", prefs);
         return new ChromeDriver(options);
     }
 
+
     private static WebDriver getFirefoxDriver() {
         System.setProperty("webdriver.gecko.driver", data.getFirefoxDriverPath());
 
         FirefoxOptions options = new FirefoxOptions();
-        options.setHeadless(data.isHeadless());
+        options.addArguments("--headless=new");
+
         //code added for auto download
         options.addPreference("browser.download.folderList", 2);
         options.addPreference("browser.download.manager.showWhenStarting", false);
diff --git a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
index 2deb4c502532b7dc1c89699e829fb7ffc596619b..4963100af413885b2a180ba3ab73f7aac5746a1f 100644
--- a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
+++ b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
@@ -18,9 +18,9 @@ public class TestRunData {
     public static SimpleDateFormat CSV_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
     public static SimpleDateFormat REST_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
     public static SimpleDateFormat REST_JMS_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
-    public String userId;
     static Properties prop = new Properties();
     protected final Logger log = LoggerFactory.getLogger(this.getClass());
+    public String userId;
 
     public TestRunData() {
         if (prop.isEmpty()) {
@@ -51,7 +51,7 @@ public class TestRunData {
         HashMap<String, String> toReturn = new HashMap<>();
 
         toReturn.put("username", prop.getProperty(role + ".username"));
-        toReturn.put("pass", prop.getProperty(role + ".password"));
+        toReturn.put("password", prop.getProperty(role + ".password"));
 
         return toReturn;
     }
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java
index 6b01911f70cf449531bb216cf6ff994a7f69ea35..c8c01d25e102b4db2d5f077ca07b94518f55430a 100644
--- a/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java
@@ -10,6 +10,7 @@ import utils.DriverManager;
 import utils.TestRunData;
 
 import java.lang.reflect.Method;
+import java.util.logging.Level;
 
 public class SeleniumTest {
 
@@ -17,17 +18,15 @@ public class SeleniumTest {
      * This class is extending all the test classes to have access to the Base tests methods.
      */
     protected static final Logger LOG = LoggerFactory.getLogger(SeleniumTest.class);
-    static int methodCount = 1;
-    public String logFilename;
-
     public static TestRunData data = new TestRunData();
     public static DomiSMPRestClient rest = new DomiSMPRestClient();
+    static int methodCount = 1;
+    public String logFilename;
     public WebDriver driver;
 
 
     @BeforeSuite(alwaysRun = true)
     public void beforeSuite() {
-
         LOG.info("Log file name is " + logFilename);
         LOG.info("-------- Starting -------");
     }
@@ -41,6 +40,9 @@ public class SeleniumTest {
     public void beforeClass() {
         LOG.info("--------Initialize test class-------");
         driver = DriverManager.getDriver();
+        java.util.logging.Logger.getLogger("io.netty.util.NetUtil").setLevel(Level.OFF);
+        java.util.logging.Logger.getLogger("org.asynchttpclient.netty.handler").setLevel(Level.OFF);
+
 
     }
 
@@ -61,6 +63,15 @@ public class SeleniumTest {
         }
     }
 
+    @AfterMethod
+    protected void afterMethod(Method method) {
+        try {
+            driver.quit();
+        } catch (Exception e) {
+            LOG.warn("Closing the driver failed");
+            LOG.error("EXCEPTION: ", e);
+        }
+    }
 
     @AfterClass(alwaysRun = true)
     protected void afterClass() {
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..20c403d88d24e376c850fce17e978b3c18e1d2a6
--- /dev/null
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java
@@ -0,0 +1,39 @@
+package domiSMPTests.ui;
+import ddsl.DomiSMPPage;
+import ddsl.enums.Pages;
+import ddsl.enums.ResourceTypes;
+import domiSMPTests.SeleniumTest;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import pages.DomainsPage.DomainsPage;
+import pages.LoginPage;
+import rest.models.DomainModel;
+
+public class DomainsPgTests extends SeleniumTest {
+
+    /**
+     * This class has the tests against Domains Page
+     */
+    @Test(description = "DOM-01 System admin is able to create Domains")
+    public void SystemAdminIsAbleToCreateDomains() throws Exception {
+        DomainModel domainModel = DomainModel.generatePublicDomainModelWithoutSML();
+
+        DomiSMPPage homePage = new DomiSMPPage(driver);
+        LoginPage loginPage = homePage.goToLoginPage();
+        loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password"));
+
+        DomainsPage domainsPage = homePage.getSidebar().navigateTo2(Pages.SYSTEM_SETTINGS_DOMAINS);
+        domainsPage.getCreateDomainBtn().click();
+        domainsPage.fillDomainData(domainModel);
+        String alert = domainsPage.saveChangesAndGetMessage();
+        Assert.assertEquals(alert, "Domain: [" + domainModel.getDomainCode() + "] was created!");
+
+        domainsPage.getGrid().searchValueInColumn("Domain code", domainModel.getDomainCode()).click();
+
+        domainsPage.goToTab("Resource Types");
+        domainsPage.getResourceTab().checkResource(ResourceTypes.getRandomResourceType());
+        domainsPage.getResourceTab().saveChanges();
+
+
+    }
+}
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java
index 5981e87a9b6155d3bbc1564ae3ae216ab26d19a0..11edf65cbb5c053aebf97a2998b8a894a3e1602f 100644
--- a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java
@@ -1,14 +1,15 @@
 package domiSMPTests.ui;
 
-import ddsl.dcomponents.DomiSMPPage;
+import ddsl.DomiSMPPage;
 import ddsl.enums.Pages;
 import domiSMPTests.SeleniumTest;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 import pages.LoginPage;
-import pages.ProfilePage;
+import pages.ProfilePage.ProfilePage;
 import pages.PropertiesPage.PropertiesPage;
 import rest.models.UserModel;
+import utils.Generator;
 
 
 public class ProfilePgTests extends SeleniumTest {
@@ -16,9 +17,9 @@ public class ProfilePgTests extends SeleniumTest {
     /**
      * This class has the tests against Profile Page
      */
-    @Test(description = "PROF-01")
+    @Test(description = "PROF-01 All logged users are able to view the Profile Page")
     public void AllLoggedUsersShouldAbleToSeeProfilePage() throws Exception {
-        UserModel normalUser = UserModel.createUserWithUSERrole();
+        UserModel normalUser = UserModel.generateUserWithUSERrole();
 
         rest.users().createUser(normalUser);
 
@@ -35,7 +36,7 @@ public class ProfilePgTests extends SeleniumTest {
         homePage.logout();
 
         //Check if page is avaiable for Admin users
-        UserModel adminUser = UserModel.createUserWithUSERrole();
+        UserModel adminUser = UserModel.generateUserWithUSERrole();
         rest.users().createUser(adminUser);
 
         loginPage = homePage.goToLoginPage();
@@ -52,9 +53,9 @@ public class ProfilePgTests extends SeleniumTest {
         Assert.assertFalse(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE));
     }
 
-    @Test(description = "PROF-02")
+    @Test(description = "PROF-02 All loggedin users are able to update profile data")
     public void AllLoggedUsersShouldAbleToUpdateProfilePage() throws Exception {
-        UserModel normalUser = UserModel.createUserWithUSERrole();
+        UserModel normalUser = UserModel.generateUserWithUSERrole();
 
         rest.users().createUser(normalUser);
 
@@ -65,21 +66,21 @@ public class ProfilePgTests extends SeleniumTest {
         //Navigate to page
         ProfilePage profilePage = (ProfilePage) homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE);
         UserModel userNewProfileData = UserModel.generateUserProfileData();
-        profilePage.changeUserProfileData(userNewProfileData.getEmailAddress(), userNewProfileData.getFullName(), userNewProfileData.getSmpTheme(), userNewProfileData.getSmpLocale());
+        profilePage.userData.fillUserProfileData(userNewProfileData.getEmailAddress(), userNewProfileData.getFullName(), userNewProfileData.getSmpTheme(), userNewProfileData.getSmpLocale());
 
         profilePage.refreshPage();
 
         //Verify if data is changed
 
-        Assert.assertEquals(profilePage.getEmailAddress(), userNewProfileData.getEmailAddress());
-        Assert.assertEquals(profilePage.getFullName(), userNewProfileData.getFullName());
-        Assert.assertEquals(profilePage.getSelectedTheme(), userNewProfileData.getSmpTheme());
-        Assert.assertEquals(profilePage.getSelectedLocale(), userNewProfileData.getSmpLocale());
+        Assert.assertEquals(profilePage.userData.getEmailAddress(), userNewProfileData.getEmailAddress());
+        Assert.assertEquals(profilePage.userData.getFullName(), userNewProfileData.getFullName());
+        Assert.assertEquals(profilePage.userData.getSelectedTheme(), userNewProfileData.getSmpTheme());
+        Assert.assertEquals(profilePage.userData.getSelectedLocale(), userNewProfileData.getSmpLocale());
 
         homePage.logout();
 
 
-        UserModel adminUser = UserModel.createUserWithUSERrole();
+        UserModel adminUser = UserModel.generateUserWithUSERrole();
 
         rest.users().createUser(adminUser);
 
@@ -90,22 +91,25 @@ public class ProfilePgTests extends SeleniumTest {
         //Navigate to page
         profilePage = (ProfilePage) homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE);
         UserModel adminNewProfileData = UserModel.generateUserProfileData();
-        profilePage.changeUserProfileData(adminNewProfileData.getEmailAddress(), adminNewProfileData.getFullName(), adminNewProfileData.getSmpTheme(), adminNewProfileData.getSmpLocale());
+        profilePage.userData.fillUserProfileData(adminNewProfileData.getEmailAddress(), adminNewProfileData.getFullName(), adminNewProfileData.getSmpTheme(), adminNewProfileData.getSmpLocale());
 
         profilePage.refreshPage();
 
         //Verify if data is changed
-        Assert.assertEquals(profilePage.getEmailAddress(), adminNewProfileData.getEmailAddress());
-        Assert.assertEquals(profilePage.getFullName(), adminNewProfileData.getFullName());
-        Assert.assertEquals(profilePage.getSelectedTheme(), adminNewProfileData.getSmpTheme());
-        Assert.assertEquals(profilePage.getSelectedLocale(), adminNewProfileData.getSmpLocale());
+        Assert.assertEquals(profilePage.userData.getEmailAddress(), adminNewProfileData.getEmailAddress());
+        Assert.assertEquals(profilePage.userData.getFullName(), adminNewProfileData.getFullName());
+        Assert.assertEquals(profilePage.userData.getSelectedTheme(), adminNewProfileData.getSmpTheme());
+        Assert.assertEquals(profilePage.userData.getSelectedLocale(), adminNewProfileData.getSmpLocale());
 
 
     }
 
-    @Test(description = "PROF-03")
+    @Test(description = "PROF-03 Password validation is accord to the smp propeties values")
     public void PasswordValidationsShouldBeAccordingToPropertiesValue() throws Exception {
-        UserModel adminUser = UserModel.createUserWithADMINrole();
+        String propertyValue = "smp.passwordPolicy.validationRegex";
+        String newPropertyValue = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~`!@#$%^&+=\\-_<>.,?:;*/()|\\[\\]{}'\"\\\\]).{16,35}$";
+
+        UserModel adminUser = UserModel.generateUserWithADMINrole();
 
         rest.users().createUser(adminUser);
 
@@ -114,12 +118,41 @@ public class ProfilePgTests extends SeleniumTest {
         loginPage.login(adminUser.getUsername(), data.getNewPassword());
 
         PropertiesPage propertiesPage = (PropertiesPage) homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_PROPERTIES);
-        propertiesPage.propertySearch("smp.passwordPolicy.validationRegex");
-        propertiesPage.setPropertyValue("smp.passwordPolicy.validationRegex", "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~`!@#$%^&+=\\-_<>.,?:;*/()|\\[\\]{}'\"\\\\]).{16,35}$");
-        propertiesPage.save();
+        propertiesPage.propertySearch(propertyValue);
+        if (!propertiesPage.getPropertyValue(propertyValue).equals(newPropertyValue)) {
+            propertiesPage.setPropertyValue("smp.passwordPolicy.validationRegex", "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~`!@#$%^&+=\\-_<>.,?:;*/()|\\[\\]{}'\"\\\\]).{16,35}$");
+            propertiesPage.save();
+        }
 
         ProfilePage profilePage = (ProfilePage) propertiesPage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE);
-        Boolean isPasswordChanged = profilePage.tryChangePassword(data.getNewPassword(), "Edeltest!23456789Edeltest!234567890");
-        Assert.assertTrue(isPasswordChanged);
+        profilePage.userData.setChangePasswordBtn.click();
+        Assert.assertEquals(0, profilePage.userData.setChangePasswordDialog().setNewPassword(data.getNewPassword(), "Edeltest!23456789Edeltest!234567890").size(), "Could not change the password of the user");
+
+    }
+
+
+    @Test(description = "PROF-04 User should be able to change his password")
+    public void UserShouldBeAbleToChangeHisPassword() throws Exception {
+        UserModel adminUser = UserModel.generateUserWithADMINrole();
+        rest.users().createUser(adminUser);
+        DomiSMPPage homePage = new DomiSMPPage(driver);
+        LoginPage loginPage = homePage.goToLoginPage();
+        loginPage.login(adminUser.getUsername(), data.getNewPassword());
+        ProfilePage profilePage = (ProfilePage) loginPage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE);
+        String oldLastSet = profilePage.userData.getLastSetValue();
+        String oldPasswordExpiresOn = profilePage.userData.getPasswordExpiresOnValue();
+
+        profilePage.userData.setChangePasswordBtn.click();
+        String newPass = "Edeltest!23456789Edelt" + Generator.randomAlphaNumeric(4);
+
+        Assert.assertEquals(profilePage.userData.setChangePasswordDialog().setNewPassword(data.getNewPassword(), newPass).size(), 0, "Could not change the password of the user");
+
+        loginPage.login(adminUser.getUsername(), newPass);
+        profilePage = (ProfilePage) loginPage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE);
+
+        // Assert.assertNotSame(profilePage2.getLastSetValue(), oldLastSet, "Last set value is not reseted");
+        //Assert.assertNotSame(profilePage2.getPasswordExpiresOnValue(), oldPasswordExpiresOn, "Password expires on value is not reseted");
+
+
     }
 }
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/UsersPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/UsersPgTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae4fd1e60f08417789735040586ae12fb9060bce
--- /dev/null
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/UsersPgTests.java
@@ -0,0 +1,66 @@
+package domiSMPTests.ui;
+
+import ddsl.DomiSMPPage;
+import ddsl.enums.Pages;
+import domiSMPTests.SeleniumTest;
+import org.openqa.selenium.WebElement;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import pages.LoginPage;
+import pages.UsersPage;
+import rest.models.UserModel;
+
+public class UsersPgTests extends SeleniumTest {
+    @Test(description = "USR-01 System admin is able to create new users")
+    public void SystemAdminIsAbleToCreateNewUsers() throws Exception {
+
+        DomiSMPPage homePage = new DomiSMPPage(driver);
+        LoginPage loginPage = homePage.goToLoginPage();
+        loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password"));
+
+        UsersPage usersPage = (UsersPage) homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS);
+        usersPage.getCreateUserBtn().click();
+        UserModel adminNewUserData = UserModel.generateUserWithADMINrole();
+        usersPage.fillNewUserDataAndSave(adminNewUserData);
+
+        usersPage.refreshPage();
+        usersPage.filter(adminNewUserData.getUsername());
+        WebElement newUser = usersPage.getGrid().searchValueInColumn("Username", adminNewUserData.getUsername());
+        Assert.assertNotNull(newUser);
+        newUser.click();
+
+        Assert.assertEquals(usersPage.getApplicationRoleValue(), adminNewUserData.getRole());
+        Assert.assertEquals(usersPage.getFullNameValue(), adminNewUserData.getFullName());
+
+        Assert.assertEquals(usersPage.getEmailValue(), adminNewUserData.getEmailAddress());
+        Assert.assertEquals(usersPage.getSelectedThemeValue(), adminNewUserData.getSmpTheme());
+        Assert.assertEquals(usersPage.getSelectedLocaleValue(), adminNewUserData.getSmpLocale());
+
+
+    }
+
+    @Test(description = "USR-02 USR-02 System admin is not able to create duplicated user")
+    public void SystemAdminIsNotAbleToCreateDuplicatedUser() throws Exception {
+        DomiSMPPage homePage = new DomiSMPPage(driver);
+        LoginPage loginPage = homePage.goToLoginPage();
+        loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password"));
+
+        UsersPage usersPage = (UsersPage) homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS);
+        usersPage.getCreateUserBtn().click();
+        UserModel adminNewUserData = UserModel.generateUserWithADMINrole();
+        usersPage.fillNewUserDataAndSave(adminNewUserData);
+
+        usersPage.refreshPage();
+        usersPage.getCreateUserBtn().click();
+        String alertMessage = usersPage.fillNewUserDataAndSave(adminNewUserData);
+        Assert.assertEquals(alertMessage, "Invalid request [CreateUser]. Error: User with username [" + adminNewUserData.getUsername() + "] already exists!!");
+
+
+
+
+
+
+
+
+    }
+}
\ No newline at end of file