diff --git a/domiSMP-ui-tests/pom.xml b/domiSMP-ui-tests/pom.xml
index 93ba729169696a0d8068140198e6a090cef4f25b..7e72072c7d093fba031917a4344224a7f9c15f06 100644
--- a/domiSMP-ui-tests/pom.xml
+++ b/domiSMP-ui-tests/pom.xml
@@ -39,7 +39,7 @@
                 <configuration>
                     <failIfNoTests>true</failIfNoTests>
                     <systemPropertyVariables>
-                        <runBrowser>firefox</runBrowser>
+                        <runBrowser>chrome</runBrowser>
                         <propertiesFile>./src/main/resources/myLocal.properties</propertiesFile>
                     </systemPropertyVariables>
                     <properties>
@@ -229,6 +229,12 @@
             <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>
+        </dependency>
 
     </dependencies>
 
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/Components.java b/domiSMP-ui-tests/src/main/java/ddsl/Components.java
deleted file mode 100644
index 58952236423555e9b245e8d0ea6315ece5168858..0000000000000000000000000000000000000000
--- a/domiSMP-ui-tests/src/main/java/ddsl/Components.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package ddsl;
-
-import org.openqa.selenium.JavascriptExecutor;
-import org.openqa.selenium.WebDriver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import pages.objects.Wait;
-import utils.TestRunData;
-
-public class Components {
-
-    protected final Logger log = LoggerFactory.getLogger(this.getClass());
-    public Wait wait;
-    protected WebDriver driver;
-    protected TestRunData data = new TestRunData();
-
-    public Components(WebDriver driver) {
-        this.driver = driver;
-        this.wait = new Wait(driver);
-    }
-
-    public void waitForRowsToLoad() {
-
-        try {
-            wait.forXMillis(100);
-            int bars = 1;
-            int waits = 0;
-            while (bars > 0 && waits < 30) {
-                Object tmp = ((JavascriptExecutor) driver).executeScript("return document.querySelectorAll('datatable-progress').length;");
-                bars = Integer.parseInt(tmp.toString());
-                waits++;
-                wait.forXMillis(100);
-            }
-            log.debug("waited for rows to load for ms = " + waits * 100);
-            wait.forXMillis(100);
-        } catch (Exception e) {
-        }
-
-    }
-}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/SideNavigation.java b/domiSMP-ui-tests/src/main/java/ddsl/SideNavigation.java
deleted file mode 100644
index 918193bf45006e15cce5e0fcc5319e374c0ae340..0000000000000000000000000000000000000000
--- a/domiSMP-ui-tests/src/main/java/ddsl/SideNavigation.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package ddsl;
-
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.support.PageFactory;
-import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
-
-public class SideNavigation extends Components {
-    public SideNavigation(WebDriver driver) {
-        super(driver);
-        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 1), this);
-    }
-}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0d4007ee23f0094710845c12760e1ffbb527708
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java
@@ -0,0 +1,44 @@
+package ddsl.dcomponents;
+
+import ddsl.dobjects.DObject;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+
+public class AlertComponent extends DComponent {
+    @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();
+    }
+
+    public String getAlertMessage() {
+        try {
+            wait.forElementToBeVisible(alertToaster, true);
+
+            log.error(closeButton.getText());
+        } 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/Breadcrump.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Breadcrump.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ba2226057a01e15ff7448a5ef4cf304174ad21c
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Breadcrump.java
@@ -0,0 +1,21 @@
+package ddsl.dcomponents;
+
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+
+public class Breadcrump extends DomiSMPPage {
+    @FindBy(xpath = "//smp-breadcrumb/div/smp-breadcrumb-item[3]/a/div[3]/span")
+    public WebElement CurrentPage;
+
+    public Breadcrump(WebDriver driver) {
+        super(driver);
+    }
+
+    public String getCurrentPage() {
+        return CurrentPage.getText();
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce5fcf84f8da2f873231198bc435b10356854656
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java
@@ -0,0 +1,36 @@
+package ddsl.dcomponents;
+
+import ddsl.dobjects.DButton;
+import ddsl.dobjects.DInput;
+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 {
+
+    protected final Logger log = LoggerFactory.getLogger(this.getClass());
+    public DWait wait;
+    protected WebDriver driver;
+    protected TestRunData data = new TestRunData();
+
+    public DComponent(WebDriver driver) {
+        this.driver = driver;
+        this.wait = new DWait(driver);
+    }
+
+    protected DButton weToDButton(WebElement element) {
+        return new DButton(driver, element);
+    }
+
+    protected DInput weToDInput(WebElement element) {
+        return new DInput(driver, element);
+    }
+
+    protected DSelect weToDSelect(WebElement element) {
+        return new DSelect(driver, element);
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c413f382b494f9fd079e6088757f0a20e9168f5
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java
@@ -0,0 +1,60 @@
+package ddsl.dcomponents;
+
+
+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 pages.LoginPage;
+
+public class DomiSMPPage extends DComponent {
+    @FindBy(css = "page-header > h1")
+    protected WebElement pageTitle;
+    @FindBy(id = "login_id")
+    private WebElement loginBtnTop;
+    @FindBy(id = "settingsmenu_id")
+    private WebElement rightMenuBtn;
+    @FindBy(id = "logout_id")
+    private WebElement logoutMenuBtn;
+    @FindBy(className = "smp-expired-password-dialog")
+    private WebElement expiredPasswordDialog;
+
+    @FindBy(css = "#okbuttondialog_id ")
+    private WebElement dialogOKbutton;
+
+
+    public DomiSMPPage(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
+    }
+
+    public SideNavigation getSidebar() {
+        return new SideNavigation(driver);
+    }
+
+    public Breadcrump getBreadcrump() {
+        return new Breadcrump(driver);
+    }
+
+    public LoginPage goToLoginPage() {
+        loginBtnTop.click();
+        return new LoginPage(driver);
+    }
+
+    public LoginPage logout() {
+        rightMenuBtn.click();
+        logoutMenuBtn.click();
+        return new LoginPage(driver);
+    }
+
+
+    public AlertComponent getAlertArea() {
+        return new AlertComponent(driver);
+    }
+
+    public DButton getExpiredDialoginbutton() {
+        return weToDButton(dialogOKbutton);
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigation.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigation.java
new file mode 100644
index 0000000000000000000000000000000000000000..e053cce49206730f5e9a6148d8868b131d735701
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigation.java
@@ -0,0 +1,201 @@
+package ddsl.dcomponents;
+
+import ddsl.enums.Pages;
+import org.openqa.selenium.ElementNotInteractableException;
+import org.openqa.selenium.NoSuchElementException;
+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 pages.ProfilePage;
+
+public class SideNavigation extends DomiSMPPage {
+    @FindBy(id = "window-sidenav-panel")
+    public WebElement sideBar;
+
+    //	--------------------Search-------------------------
+    @FindBy(id = "")
+    private WebElement resourcesLnk;
+
+    @FindBy(css = "mat-nested-tree-node cdk-nested-tree-node cdk-tree-node ng-star-inserted")
+    private WebElement resourcesExpandLnk;
+    //	----------------------------------------------------
+
+    //	--------------Administration---------------------------
+    @FindBy(id = "")
+    private WebElement editDomainsLnk;
+
+    @FindBy(id = "")
+    private WebElement editGroupsLnk;
+
+    @FindBy(id = "")
+    private WebElement editResourcesLnk;
+
+    @FindBy(id = "mat-expansion-panel-header-1")
+    private WebElement administrationExpand;
+    //	----------------------------------------------------
+
+    //	--------------System Settings ---------------------------
+    @FindBy(id = "")
+    private WebElement usersLnk;
+
+    @FindBy(id = "")
+    private WebElement domainsLnk;
+
+    @FindBy(id = "")
+    private WebElement keystoreLnk;
+    @FindBy(id = "")
+    private WebElement truststoreLnk;
+
+    @FindBy(id = "")
+    private WebElement extensionsLnk;
+
+    @FindBy(id = "")
+    private WebElement propertiesLnk;
+
+    @FindBy(id = "")
+    private WebElement alersLnk;
+
+    @FindBy(id = "mat-expansion-panel-header-1")
+    private WebElement systemSettingsExpand;
+    //	----------------------------------------------------
+
+    //	--------------User Settings---------------------------
+    @FindBy(id = "user-data-profileButton")
+    private WebElement profileLnk;
+
+    @FindBy(id = "user-data-access-tokenButton")
+    private WebElement accessTokensLnk;
+
+    @FindBy(id = "user-data-certificatesButton")
+    private WebElement certificatesLnk;
+
+    @FindBy(id = "user-dataButton")
+    private WebElement userSettingsExpand;
+    //	----------------------------------------------------
+
+    public SideNavigation(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 1), this);
+    }
+
+    private MenuNavigation getNavigationLinks(Pages pages) {
+        switch (pages) {
+
+            case USER_SETTINGS_PROFILE:
+                return new MenuNavigation(userSettingsExpand, profileLnk);
+
+            default:
+                return null;
+        }
+    }
+
+    public DomiSMPPage navigateTo(Pages page) {
+
+        wait.forElementToHaveText(sideBar);
+
+        log.debug("Get link to " + page.name());
+        switch (page) {
+//            case SEARCH_RESOURCES:
+//                expandSection(resourcesExpandLnk);
+//                return new DLink(driver, resourcesLnk);
+//            case ADMINISTRATION_EDIT_DOMAINS:
+//                expandSection(administrationExpand);
+//                return new DLink(driver, editDomainsLnk);
+//            case ADMINISTRATION_EDIT_GROUPS:
+//                expandSection(administrationExpand);
+//                return new DLink(driver, editGroupsLnk);
+//            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);
+//            case SYSTEM_SETTINGS_KEYSTORE:
+//                expandSection(systemSettingsExpand);
+//                return new DLink(driver, keystoreLnk);
+//            case SYSTEM_SETTINGS_TRUSTSTORE:
+//                expandSection(systemSettingsExpand);
+//                return new DLink(driver, truststoreLnk);
+//            case SYSTEM_SETTINGS_EXTENSIONS:
+//                expandSection(systemSettingsExpand);
+//                return new DLink(driver, extensionsLnk);
+//            case SYSTEM_SETTINGS_PROPERTIES:
+//                expandSection(systemSettingsExpand);
+//                return new DLink(driver, propertiesLnk);
+//            case SYSTEM_SETTINGS_ALERS:
+//                expandSection(systemSettingsExpand);
+//                return new DLink(driver, alersLnk);
+            case USER_SETTINGS_PROFILE:
+                openSubmenu(userSettingsExpand, profileLnk);
+                return new ProfilePage(driver);
+//            case USER_SETTINGS_ACCESS_TOKEN:
+//                //expandSection(userSettingsExpand);
+//                //accessTokensLnk.click();
+//                return new ProfilePage(driver);
+//            case USER_SETTINGS_CERTIFICATES:
+//                expandSection(userSettingsExpand);
+//                return new DLink(driver, certificatesLnk);
+            default:
+                return null;
+        }
+    }
+
+    public Boolean isMenuAvailable(Pages page) {
+        MenuNavigation navigationLinks = getNavigationLinks(page);
+        try {
+            if (navigationLinks.menuLink.isEnabled()) {
+                navigationLinks.menuLink.click();
+                if (navigationLinks.submenuLink.isEnabled()) {
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+            return false;
+        } catch (NoSuchElementException e) {
+            return false;
+        }
+    }
+
+    private void openSubmenu(WebElement menu, @org.jetbrains.annotations.NotNull WebElement submenu) {
+        try {
+            submenu.click();
+            if (submenu.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());
+                throw new RuntimeException();
+            }
+
+        } catch (ElementNotInteractableException exception) {
+            menu.click();
+            submenu.click();
+            if (submenu.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());
+                throw new RuntimeException();
+            }
+        }
+    }
+
+    public class MenuNavigation {
+        WebElement menuLink;
+        WebElement submenuLink;
+
+        public MenuNavigation(WebElement menuLink, WebElement submenuLink) {
+            this.menuLink = menuLink;
+            this.submenuLink = submenuLink;
+        }
+    }
+}
+
+
+
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd7926f7323b78cc13c5632e39ff8d769dc2cf9a
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java
@@ -0,0 +1,17 @@
+package ddsl.dobjects;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class DButton extends DObject {
+    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
new file mode 100644
index 0000000000000000000000000000000000000000..d7451d5274ed407c9f43d386ef3b270cfb87a1a3
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java
@@ -0,0 +1,40 @@
+package ddsl.dobjects;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class DInput extends DObject {
+    public DInput(WebDriver driver, WebElement element) {
+        super(driver, element);
+    }
+
+    public void fill(String value) throws Exception {
+        if (null == value) {
+            return;
+        }
+        if (isEnabled()) {
+            element.clear();
+            element.sendKeys(value);
+        } else {
+            throw new Exception("Cannot type disabled field");
+        }
+    }
+
+    public void clear() throws Exception {
+        if (isEnabled()) {
+            element.clear();
+        } else {
+            throw new Exception("Cannot type disabled field");
+        }
+    }
+
+    @Override
+    public String getText() {
+        if (isPresent()) {
+            return element.getAttribute("value").trim();
+        }
+        return null;
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java
new file mode 100644
index 0000000000000000000000000000000000000000..05abd0bfc5ee292a876abe1a0e6a715919f40e62
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java
@@ -0,0 +1,20 @@
+package ddsl.dobjects;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class DLink extends DObject {
+
+
+    public DLink(WebDriver driver, WebElement element) {
+        super(driver, element);
+    }
+
+    public String getLinkText() throws Exception {
+        if (isPresent()) {
+            return super.getText();
+        }
+        throw new Exception();
+    }
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..93f1cd6ff03af626f03b2e57e15e9627fcc3b47f
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java
@@ -0,0 +1,89 @@
+package ddsl.dobjects;
+
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DObject {
+    protected final Logger log = LoggerFactory.getLogger(this.getClass());
+    public WebElement element;
+    protected WebDriver driver;
+    protected DWait wait;
+
+    public DObject(WebDriver driver, WebElement element) {
+        wait = new DWait(driver);
+        this.driver = driver;
+        this.element = element;
+    }
+
+    public boolean isPresent() {
+        try {
+            wait.forElementToBe(element);
+            scrollIntoView();
+        } catch (Exception e) {
+            return false;
+        }
+        return true;
+    }
+
+    public boolean isEnabled() throws Exception {
+        if (isPresent()) {
+            wait.forElementToBeEnabled(element);
+            return element.isEnabled();
+        }
+        throw new Exception();
+    }
+
+    public boolean isDisabled() throws Exception {
+        if (isPresent()) {
+            wait.forElementToBeDisabled(element);
+            return !element.isEnabled();
+        }
+        throw new Exception();
+    }
+
+    public boolean isVisible() throws Exception {
+        if (isPresent()) {
+            wait.forElementToBeEnabled(element);
+            return element.isDisplayed();
+        }
+        throw new Exception();
+    }
+
+    public String getText() throws Exception {
+        if (!isPresent()) {
+            throw new Exception();
+        }
+        scrollIntoView();
+        String text = ((JavascriptExecutor) driver).executeScript("return arguments[0].innerText;", element).toString();
+        return text.trim();
+    }
+
+    public void scrollIntoView() {
+        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element);
+    }
+
+    public void click() throws Exception {
+        if (isEnabled()) {
+            wait.forElementToBeClickable(element).click();
+        } else {
+            throw new Exception("Not enabled");
+        }
+    }
+
+    public String getAttribute(String attributeName) throws Exception {
+        if (isPresent()) {
+            String attr = element.getAttribute(attributeName);
+            if (attr == null) {
+                log.debug("Attribute " + attributeName + " not found");
+                return null;
+            }
+            return attr.trim();
+        }
+        throw new RuntimeException();
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java
new file mode 100644
index 0000000000000000000000000000000000000000..1561252692c9cefb7e1f8ec8bf4fbd11e79d9304
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java
@@ -0,0 +1,25 @@
+package ddsl.dobjects;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.Select;
+
+
+public class DSelect extends DObject {
+
+    Select select = new Select(element);
+
+    public DSelect(WebDriver driver, WebElement element) {
+        super(driver, element);
+    }
+
+    public void selectValue(String value) {
+        select.selectByVisibleText(value);
+    }
+
+    public String getCurrentValue() {
+        return element.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
new file mode 100644
index 0000000000000000000000000000000000000000..ea486d48ee634598d97318af3658db8bf7e8f1e8
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java
@@ -0,0 +1,153 @@
+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.support.ui.ExpectedCondition;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import utils.TestRunData;
+
+import java.time.Duration;
+
+public class DWait {
+    public final WebDriverWait defaultWait;
+    public final WebDriverWait longWait;
+    public final WebDriverWait shortWait;
+    protected final Logger log = LoggerFactory.getLogger(this.getClass());
+    private TestRunData data = new TestRunData();
+    private WebDriver driver;
+
+    public DWait(WebDriver driver) {
+        this.defaultWait = new WebDriverWait(driver, data.getTIMEOUTinDuration());
+        this.longWait = new WebDriverWait(driver, data.getLongWaitInDuration());
+        this.shortWait = new WebDriverWait(driver, Duration.ofMinutes(1));
+        this.driver = driver;
+    }
+
+    public void forXMillis(Integer millis) {
+        try {
+            Thread.sleep(millis);
+        } catch (InterruptedException e) {
+            log.error("EXCEPTION: ", e);
+        }
+    }
+
+    public WebElement forElementToBeClickable(WebElement element) {
+        return defaultWait.until(ExpectedConditions.elementToBeClickable(element));
+    }
+
+    public WebElement forElementToBeVisible(WebElement element) {
+        return defaultWait.until(ExpectedConditions.visibilityOf(element));
+    }
+
+    public WebElement forElementToBeVisible(WebElement element, boolean waitLonger) {
+        if (waitLonger) {
+            return longWait.until(ExpectedConditions.visibilityOf(element));
+        }
+        log.error(String.valueOf(element.isDisplayed()));
+        return defaultWait.until(ExpectedConditions.visibilityOf(element));
+    }
+
+    public void forElementToBeEnabled(WebElement element) {
+        int maxTimeout = data.getTIMEOUT() * 1000;
+        int waitedSoFar = 0;
+
+        while ((null != element.getAttribute("disabled")) && (waitedSoFar < maxTimeout)) {
+            waitedSoFar += 300;
+            forXMillis(300);
+        }
+    }
+
+    public void forElementToBeDisabled(WebElement element) {
+        int maxTimeout = data.getTIMEOUT() * 1000;
+        int waitedSoFar = 0;
+
+        while ((null == element.getAttribute("disabled")) && (waitedSoFar < maxTimeout)) {
+            waitedSoFar += 300;
+            forXMillis(300);
+        }
+    }
+
+    public void forAttributeNotEmpty(WebElement element, String attributeName) {
+        defaultWait.until(ExpectedConditions.attributeToBeNotEmpty(element, attributeName));
+    }
+
+    public void forElementToBeGone(WebElement element) {
+        defaultWait.until((ExpectedConditions.invisibilityOf(element)));
+
+        forXMillis(500);
+    }
+
+    public void forInvisibilityofLocator(By locator) {
+        defaultWait.until((ExpectedConditions.invisibilityOfElementLocated(locator)));
+    }
+
+    public void forElementToBeGone(By selector) {
+
+        log.debug("Waiting for element to be gone: " + selector.toString());
+        int c = 0;
+
+        while (c < 50) {
+            try {
+                driver.findElement(selector);
+            } catch (Exception e) {
+                break;
+            }
+            forXMillis(100);
+            c++;
+        }
+
+    }
+
+    public void forElementToBe(WebElement element) {
+
+        defaultWait.until(new ExpectedCondition<Boolean>() {
+            @Override
+            public Boolean apply(WebDriver driver) {
+                return element.getLocation() != null;
+            }
+        });
+
+    }
+
+    public void forAttributeToContain(WebElement element, String attributeName, String value) {
+        defaultWait.until(ExpectedConditions.attributeContains(element, attributeName, value));
+    }
+
+    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);
+            }
+        });
+    }
+
+    public void forAttributeToContain(WebElement element, String attributeName, String value, boolean waitLonger) {
+
+        WebDriverWait myWait = defaultWait;
+        if (waitLonger) {
+            myWait = longWait;
+        }
+        myWait.until(ExpectedConditions.attributeContains(element, attributeName, value));
+    }
+
+    public void forElementToHaveText(WebElement element) {
+        defaultWait.until(new ExpectedCondition<Boolean>() {
+            @Override
+            public Boolean apply(WebDriver driver) {
+                return !element.getText().trim().isEmpty();
+            }
+        });
+    }
+
+    public void forElementToContainText(WebElement element, String text) {
+        defaultWait.ignoring(StaleElementReferenceException.class)
+                .until(ExpectedConditions.textToBePresentInElement(element, text));
+
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/ApplicationRoles.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java
similarity index 94%
rename from domiSMP-ui-tests/src/main/java/ddsl/ApplicationRoles.java
rename to domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java
index a76caba0db6096b33257ffef54e262497395bb34..9a40519e12f0aa4d9aeca8b34c9ece97d2a7a67d 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/ApplicationRoles.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java
@@ -1,4 +1,4 @@
-package ddsl;
+package ddsl.enums;
 
 import java.util.Arrays;
 import java.util.List;
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/enums/Pages.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/Pages.java
new file mode 100644
index 0000000000000000000000000000000000000000..88ecd432fdd8440b270b10c387dae28336647610
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/Pages.java
@@ -0,0 +1,18 @@
+package ddsl.enums;
+
+public enum Pages {
+    SEARCH_RESOURCES,
+    ADMINISTRATION_EDIT_DOMAINS,
+    ADMINISTRATION_EDIT_GROUPS,
+    ADMINISTRATION_EDIT_RESOURCES,
+    SYSTEM_SETTINGS_USERS,
+    SYSTEM_SETTINGS_DOMAINS,
+    SYSTEM_SETTINGS_KEYSTORE,
+    SYSTEM_SETTINGS_TRUSTSTORE,
+    SYSTEM_SETTINGS_EXTENSIONS,
+    SYSTEM_SETTINGS_PROPERTIES,
+    SYSTEM_SETTINGS_ALERS,
+    USER_SETTINGS_PROFILE,
+    USER_SETTINGS_ACCESS_TOKEN,
+    USER_SETTINGS_CERTIFICATES
+}
diff --git a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
index 0e4a1e3fcc3cb0360a552c650511eb2e753d0089..7dbae68f098aa416bfadb6fcd425b02df876da18 100644
--- a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
+++ b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
@@ -1,4 +1,47 @@
 package pages;
 
-public class LoginPage {
+import ddsl.dcomponents.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 java.util.HashMap;
+
+public class LoginPage extends DomiSMPPage {
+    @FindBy(id = "username_id")
+    private WebElement username;
+    @FindBy(id = "password_id")
+    private WebElement password;
+    @FindBy(id = "loginbutton_id")
+    private WebElement loginBtn;
+
+    public LoginPage(WebDriver driver) {
+        super(driver);
+        log.debug(".... init");
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
+    }
+
+    public DomiSMPPage login(String user, String pass) throws Exception {
+        HashMap<String, String> usr = new HashMap<>();
+        usr.put("username", user);
+        usr.put("pass", pass);
+        log.debug("Login started " + usr.get("username") + " / " + usr.get("pass"));
+
+        goToLoginPage();
+        weToDInput(username).fill(usr.get("username"));
+        weToDInput(password).fill(usr.get("pass"));
+        weToDButton(loginBtn).click();
+
+        if (getExpiredDialoginbutton().isPresent()) {
+            log.info("Expired password dialog is present.");
+            getExpiredDialoginbutton().click();
+        }
+        ;
+
+        return new DomiSMPPage(driver);
+
+    }
+
 }
diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java b/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e57a9977bbdedb23319667a6d327d1ec3cd3749
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java
@@ -0,0 +1,80 @@
+package pages;
+
+import ddsl.dcomponents.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;
+
+public class ProfilePage extends DomiSMPPage {
+
+    @FindBy(id = "smpTheme_id")
+    private WebElement themeSel;
+    @FindBy(id = "moment-locale")
+    private WebElement localeSel;
+    @FindBy(id = "saveButton")
+    private WebElement saveBtn;
+    @FindBy(id = "emailAddress_id")
+    private WebElement emailAddressInput;
+    @FindBy(id = "fullName_id")
+    private WebElement fullNameInput;
+
+    public ProfilePage(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 {
+        try {
+            if (!emailValue.isEmpty()) {
+                weToDInput(emailAddressInput).fill(emailValue);
+            }
+            if (!emailValue.isEmpty()) {
+                weToDInput(fullNameInput).fill(fullNameValue);
+            }
+            if (!selectThemeValue.isEmpty()) {
+                weToDSelect(themeSel).selectValue(selectThemeValue);
+            }
+            if (!localeValue.isEmpty()) {
+                weToDSelect(localeSel).selectValue(localeValue);
+            }
+
+        } catch (Exception e) {
+            log.error("Cannot change User Profile Data ", e);
+        }
+
+        if (saveBtn.isEnabled()) {
+            saveBtn.click();
+        } else {
+            log.debug("Save button enable is " + saveBtn.isEnabled());
+        }
+
+        try {
+            getAlertArea().getAlertMessage();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+
+    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();
+    }
+
+
+}
\ No newline at end of file
diff --git a/domiSMP-ui-tests/src/main/java/pages/baseComponents/PageComponent.java b/domiSMP-ui-tests/src/main/java/pages/baseComponents/PageComponent.java
deleted file mode 100644
index 710c588596685d1955afeae20e431aea4126128b..0000000000000000000000000000000000000000
--- a/domiSMP-ui-tests/src/main/java/pages/baseComponents/PageComponent.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package pages.baseComponents;
-
-import org.openqa.selenium.WebDriver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import pages.objects.Wait;
-import utils.TestRunData;
-
-public class PageComponent {
-    protected final Logger log = LoggerFactory.getLogger(this.getClass());
-    public Wait wait;
-    protected WebDriver driver;
-    protected TestRunData data = new TestRunData();
-
-    public PageComponent(WebDriver driver) {
-        this.driver = driver;
-        this.wait = new Wait(driver);
-    }
-}
diff --git a/domiSMP-ui-tests/src/main/java/pages/components/DomiSMPPage.java b/domiSMP-ui-tests/src/main/java/pages/components/DomiSMPPage.java
deleted file mode 100644
index 92d6445277cc91cbf6e665a9656aee03afa1236f..0000000000000000000000000000000000000000
--- a/domiSMP-ui-tests/src/main/java/pages/components/DomiSMPPage.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package pages.components;
-
-import ddsl.SideNavigation;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.support.PageFactory;
-import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
-import pages.baseComponents.PageComponent;
-
-public class DomiSMPPage extends PageComponent {
-    public DomiSMPPage(WebDriver driver) {
-        super(driver);
-        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
-    }
-
-    public SideNavigation getSidebar() {
-        return new SideNavigation(driver);
-    }
-
-}
diff --git a/domiSMP-ui-tests/src/main/java/pages/objects/Wait.java b/domiSMP-ui-tests/src/main/java/pages/objects/Wait.java
deleted file mode 100644
index e36ed275240a705049b925a559973371bd764fab..0000000000000000000000000000000000000000
--- a/domiSMP-ui-tests/src/main/java/pages/objects/Wait.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package pages.objects;
-
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.support.ui.WebDriverWait;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import utils.TestRunData;
-
-import java.time.Duration;
-
-public class Wait {
-    public final WebDriverWait defaultWait;
-    public final WebDriverWait longWait;
-    public final WebDriverWait shortWait;
-    protected final Logger log = LoggerFactory.getLogger(this.getClass());
-    private TestRunData data = new TestRunData();
-    private WebDriver driver;
-
-    public Wait(WebDriver driver) {
-        this.defaultWait = new WebDriverWait(driver, data.getTIMEOUTinDuration());
-        this.longWait = new WebDriverWait(driver, data.getLongWaitInDuration());
-        this.shortWait = new WebDriverWait(driver, Duration.ofMinutes(1));
-        this.driver = driver;
-    }
-
-    public void forXMillis(Integer millis) {
-        try {
-            Thread.sleep(millis);
-        } catch (InterruptedException e) {
-            log.error("EXCEPTION: ", e);
-        }
-    }
-}
diff --git a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
index 4fdabfc02dc25931bd054ec709a4d1caac06e252..2f30da5f1a477f0a8e09c30ea309f67e36aad4f0 100644
--- a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
@@ -25,78 +25,22 @@ public class BaseRestClient {
 
     protected List<NewCookie> cookies;
     protected String token;
-    //protected ObjectProvider provider;
-
     protected String username;
     protected String password;
+    protected String newPassword;
 
     public BaseRestClient(String username, String password) {
         this.username = username;
         this.password = password;
     }
 
+
     public BaseRestClient() {
         this.username = data.getAdminUser().get("username");
         this.password = data.getAdminUser().get("pass");
     }
 
-    protected WebResource.Builder decorateBuilder(WebResource resource) {
-
-        WebResource.Builder builder = resource.getRequestBuilder();
-
-        if (null != cookies) {
-            log.debug("");
-            for (NewCookie cookie : cookies) {
-                builder = builder.cookie(
-                        new Cookie(cookie.getName(),
-                                cookie.getValue(),
-                                "/",
-                                ""
-                        )
-                );
-                log.debug("cookie " + cookie + " is added to the builder");
-            }
-        }
-        if (null != token) {
-            builder = builder.header("X-XSRF-TOKEN", token);
-        }
-
-        return builder;
-    }
-
-    public List<NewCookie> login() throws SMPRestException {
-        log.debug("Rest client using to login: " + this.username);
-        HashMap<String, String> params = new HashMap<>();
-        params.put("username", this.username);
-        params.put("password", this.password);
-
-        ClientResponse response = resource.path(RestServicePaths.LOGIN)
-                .type(MediaType.APPLICATION_JSON)
-                .post(ClientResponse.class, new JSONObject(params).toString());
-
-        JSONObject responseBody = new JSONObject(response.getEntity(String.class));
-        // extract userId to be used in the Paths of the requests
-
-        data.setUserId((String) responseBody.get("userId"));
-        log.debug("Last Userid is " + data.getUserId());
-
-        if (response.getStatus() == 200) {
-            return response.getCookies();
-        }
-        throw new SMPRestException("Login failed", response);
-
-    }
-
-    private String extractToken() {
-        String mytoken = null;
-        for (NewCookie cookie : cookies) {
-            if (StringUtils.equalsIgnoreCase(cookie.getName(), "XSRF-TOKEN")) {
-                mytoken = cookie.getValue();
-            }
-        }
-        return mytoken;
-    }
-
+    //	---------------------------------------Default request methods -------------------------------------------------
     protected ClientResponse requestPUT(WebResource resource, String params, String type) {
 
         if (!isLoggedIn()) {
@@ -109,9 +53,7 @@ public class BaseRestClient {
 
         WebResource.Builder builder = decorateBuilder(resource);
 
-        return builder
-                .type(type)
-                .put(ClientResponse.class, params);
+        return builder.type(type).put(ClientResponse.class, params);
     }
 
     protected ClientResponse requestPUT(WebResource resource, JSONObject body, String type) {
@@ -127,9 +69,7 @@ public class BaseRestClient {
 
         WebResource.Builder builder = decorateBuilder(resource);
 
-        return builder
-                .type(type)
-                .put(ClientResponse.class, body.toString());
+        return builder.type(type).put(ClientResponse.class, body.toString());
     }
 
 
@@ -144,14 +84,59 @@ public class BaseRestClient {
     protected ClientResponse requestPOST(WebResource resource, String params, String type) {
 
 
-
         WebResource.Builder builder = decorateBuilder(resource);
 
-        return builder
-                .type(type)
-                .post(ClientResponse.class, params);
+        return builder.type(type).post(ClientResponse.class, params);
+    }
+
+    // -------------------------------------------- Login --------------------------------------------------------------
+
+    protected WebResource.Builder decorateBuilder(WebResource resource) {
+
+        WebResource.Builder builder = resource.getRequestBuilder();
+
+        if (null != cookies) {
+            log.debug("");
+            for (NewCookie cookie : cookies) {
+                builder = builder.cookie(new Cookie(cookie.getName(), cookie.getValue(), "/", ""));
+                log.debug("cookie " + cookie + " is added to the builder");
+            }
+        }
+        if (null != token) {
+            builder = builder.header("X-XSRF-TOKEN", token);
+        }
+
+        return builder;
     }
+    public List<NewCookie> login() throws SMPRestException {
+        log.debug("Rest client using to login: " + this.username);
+        HashMap<String, String> params = new HashMap<>();
+        params.put("username", this.username);
+        params.put("password", this.password);
+
+        ClientResponse response = resource.path(RestServicePaths.LOGIN).type(MediaType.APPLICATION_JSON).post(ClientResponse.class, new JSONObject(params).toString());
+
+        JSONObject responseBody = new JSONObject(response.getEntity(String.class));
+        // extract userId to be used in the Paths of the requests
+
+        data.setUserId((String) responseBody.get("userId"));
+        log.debug("Last Userid is " + data.getUserId());
+
+        if (response.getStatus() == 200) {
+            return response.getCookies();
+        }
+        throw new SMPRestException("Login failed", response);
 
+    }
+    private String extractToken() {
+        String mytoken = null;
+        for (NewCookie cookie : cookies) {
+            if (StringUtils.equalsIgnoreCase(cookie.getName(), "XSRF-TOKEN")) {
+                mytoken = cookie.getValue();
+            }
+        }
+        return mytoken;
+    }
     public void refreshCookies() throws Exception {
         if (isLoggedIn()) {
             return;
@@ -167,7 +152,6 @@ 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/DomiSMPRestClient.java b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
index e25887ab5e2578e026efb704566ec3a87a8fb4c4..cbbb65d919eeaaca29bbcba65bb63426f3cfeef0 100644
--- a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
@@ -5,8 +5,9 @@ public class DomiSMPRestClient extends BaseRestClient {
         super();
     }
 
-    public UsersClient users() {
-        return new UsersClient(username, password);
+    // -------------------------------------------- get clients -----------------------------------------------------------
+    public UserClient users() {
+        return new UserClient(username, password);
     }
 }
 
diff --git a/domiSMP-ui-tests/src/main/java/rest/UserClient.java b/domiSMP-ui-tests/src/main/java/rest/UserClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..6594bd1c7e72ecffefeb564717b53bf9492a2289
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/UserClient.java
@@ -0,0 +1,63 @@
+package rest;
+
+import com.sun.jersey.api.client.ClientResponse;
+import org.json.JSONObject;
+import rest.models.CreateUserModel;
+
+public class UserClient extends BaseRestClient {
+    public UserClient(String username, String password) {
+        super(username, password);
+    }
+
+    public JSONObject createUser(CreateUserModel user) {
+
+        JSONObject usrObj = new JSONObject(user);
+
+        if (!isLoggedIn()) {
+            try {
+                refreshCookies();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        String usersPath = RestServicePaths.getUsersPath(data.userId);
+
+        ClientResponse response = jsonPUT(resource.path(usersPath), usrObj);
+        JSONObject responseBody = new JSONObject(response.getEntity(String.class));
+        // extract userId to be used in the Paths of the requests
+
+        String forUserId = (String) responseBody.get("userId");
+
+        //Set password for user
+        changePassword(forUserId, data.getNewPassword());
+
+        if (response.getStatus() != 200) {
+            try {
+                throw new SMPRestException("Could not create user", response);
+            } catch (SMPRestException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        log.debug("User: " + user.getUsername() + "  has been created successfully!");
+        return responseBody;
+
+    }
+
+    public JSONObject changePassword(String forUserId, String newPassword) {
+
+
+        String changePasswordPath = RestServicePaths.getChangePasswordPath(data.userId, forUserId);
+        JSONObject passwordChangeBody = new JSONObject();
+        passwordChangeBody.put("currentPassword", password);
+        passwordChangeBody.put("newPassword", newPassword);
+
+
+        ClientResponse response = jsonPUT(resource.path(changePasswordPath), passwordChangeBody);
+        JSONObject responseBody = new JSONObject(response.getEntity(String.class));
+        return responseBody;
+
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/rest/UsersClient.java b/domiSMP-ui-tests/src/main/java/rest/UsersClient.java
deleted file mode 100644
index 5c62a3b0e5c38c3fd28a8e62ddfdc16f107ed696..0000000000000000000000000000000000000000
--- a/domiSMP-ui-tests/src/main/java/rest/UsersClient.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package rest;
-
-import com.sun.jersey.api.client.ClientResponse;
-import models.rest.CreateUserModel;
-import org.json.JSONArray;
-import org.json.JSONObject;
-import utils.Generator;
-
-public class UsersClient extends BaseRestClient {
-    public UsersClient(String username, String password) {
-        super(username, password);
-    }
-
-    public void createUser(String username, String role, String email) {
-
-        CreateUserModel createUserModel = new CreateUserModel(username, true, role, email, Generator.randomAlphaNumeric(6), "default_theme", "fr");
-        JSONObject usrObj = new JSONObject(createUserModel);
-
-        JSONArray payload = new JSONArray();
-        payload.put(usrObj);
-
-
-
-        if (!isLoggedIn()) {
-            try {
-                refreshCookies();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        String usersPath = RestServicePaths.getUsersPath(data.userId);
-
-        ClientResponse response = jsonPUT(resource.path(usersPath), usrObj);
-
-        if (response.getStatus() != 200) {
-            try {
-                throw new SMPRestException("Could not create user", response);
-            } catch (SMPRestException e) {
-                throw new RuntimeException(e);
-            }
-        }
-        log.debug("User: " + username + "  has been created successfully!");
-    }
-
-
-}
diff --git a/domiSMP-ui-tests/src/main/java/models/rest/CreateUserModel.java b/domiSMP-ui-tests/src/main/java/rest/models/CreateUserModel.java
similarity index 56%
rename from domiSMP-ui-tests/src/main/java/models/rest/CreateUserModel.java
rename to domiSMP-ui-tests/src/main/java/rest/models/CreateUserModel.java
index 1810a70e212f55c61a4780cd4449cba7624bd7eb..80589b6a6c5ab8db238548d553d2dba7e899308c 100644
--- a/domiSMP-ui-tests/src/main/java/models/rest/CreateUserModel.java
+++ b/domiSMP-ui-tests/src/main/java/rest/models/CreateUserModel.java
@@ -1,6 +1,10 @@
-package models.rest;
+package rest.models;
 
 
+import ddsl.enums.ApplicationRoles;
+import ddsl.enums.SMPThemes;
+import utils.Generator;
+
 public class CreateUserModel {
 
     private String userId;
@@ -22,6 +26,9 @@ public class CreateUserModel {
         this.smpLocale = smpLocale;
     }
 
+    public CreateUserModel() {
+    }
+
     public String getUserId() {
         return userId;
     }
@@ -86,5 +93,31 @@ public class CreateUserModel {
     public void setSmpLocale(String smpLocale) {
         this.smpLocale = smpLocale;
     }
+
+    public static CreateUserModel createUserWithUSERrole() {
+        CreateUserModel userModel = new CreateUserModel();
+        userModel.username = ("AUT_username_ " + Generator.randomAlphaNumeric(4)).toLowerCase();
+        userModel.active = true;
+        userModel.role = ApplicationRoles.USER;
+        userModel.emailAddress = "AUT_email_ " + Generator.randomAlphaNumeric(4) + "@automation.com";
+        ;
+        userModel.fullName = "AUT_fullname_ " + Generator.randomAlphaNumeric(4);
+        userModel.smpTheme = SMPThemes.getRandomTheme().toString();
+        userModel.smpLocale = "English";
+        return userModel;
+    }
+
+    public static CreateUserModel createUserWithADMINrole() {
+        CreateUserModel userModel = new CreateUserModel();
+        userModel.username = ("AUT_username_ " + Generator.randomAlphaNumeric(4)).toLowerCase();
+        userModel.active = true;
+        userModel.role = ApplicationRoles.SYSTEM_ADMIN;
+        userModel.emailAddress = "AUT_email_ " + Generator.randomAlphaNumeric(4) + "@automation.com";
+        ;
+        userModel.fullName = "AUT_fullname_ " + Generator.randomAlphaNumeric(4);
+        userModel.smpTheme = SMPThemes.getRandomTheme().toString();
+        userModel.smpLocale = "English";
+        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 7e2d8f2ed5248111e75e6a31076549cc9a9146b1..2ac4c7a7e3a90fad4a3d44f5b989560650aba740 100644
--- a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java
+++ b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java
@@ -2,7 +2,6 @@ package utils;
 
 import org.apache.commons.lang3.StringUtils;
 import org.openqa.selenium.Dimension;
-import org.openqa.selenium.Proxy;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
 import org.openqa.selenium.chrome.ChromeOptions;
@@ -62,11 +61,4 @@ public class DriverManager {
         return new FirefoxDriver(options);
     }
 
-    private static Proxy getProxy() {
-        String proxyAddress = data.getProxyAddress();
-        Proxy proxy = new Proxy();
-        proxy.setHttpProxy(proxyAddress).setSslProxy(proxyAddress);
-        return proxy;
-    }
-
 }
diff --git a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
index c9255c121680f298a788ebe905c471d923f9b51d..2deb4c502532b7dc1c89699e829fb7ffc596619b 100644
--- a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
+++ b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
@@ -1,6 +1,6 @@
 package utils;
 
-import ddsl.ApplicationRoles;
+import ddsl.enums.ApplicationRoles;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -18,7 +18,6 @@ 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 static SimpleDateFormat DATEWIDGET_DATE_FORMAT = new SimpleDateFormat(" dd/MM/yyyy HH:mm");
     public String userId;
     static Properties prop = new Properties();
     protected final Logger log = LoggerFactory.getLogger(this.getClass());
@@ -40,7 +39,7 @@ public class TestRunData {
     private void loadTestData() {
         try {
             String filename = System.getProperty("propertiesFile");
-            FileInputStream stream = new FileInputStream(new File(filename));
+            FileInputStream stream = new FileInputStream(filename);
             prop.load(stream);
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -57,18 +56,15 @@ public class TestRunData {
         return toReturn;
     }
 
-    public String defaultPass() {
-        return prop.getProperty("default.password");
-    }
-
-    public String getNewTestPass() {
-        return prop.getProperty("new.password");
-    }
 
     public HashMap<String, String> getAdminUser() {
         return getUser(ApplicationRoles.SYSTEM_ADMIN);
     }
 
+    public String getNewPassword() {
+        return prop.getProperty("new.password");
+    }
+
     public String getUiBaseUrl() {
         String url = prop.getProperty("UI_BASE_URL");
         log.debug(url);
diff --git a/domiSMP-ui-tests/src/main/resources/myLocal.properties b/domiSMP-ui-tests/src/main/resources/myLocal.properties
index cf0e461025c8b77fcb697830594a9b62b5330fd6..4cb63757445890c4008d31682ebfbbddf9e5a084 100644
--- a/domiSMP-ui-tests/src/main/resources/myLocal.properties
+++ b/domiSMP-ui-tests/src/main/resources/myLocal.properties
@@ -1,15 +1,15 @@
 # Local runner, Edeltest2 target, Single tenancy
 # Test runner properties
 webdriver.ie.driver=MicrosoftWebDriver.exe
-#webdriver.chrome.driver=/opt/programs/web-driver/chromedriver
-webdriver.gecko.driver=/data/opt/programs/web-driver/geckodriver
+webdriver.chrome.driver=./chromedriver.exe
+webdriver.gecko.driver=./geckodriver.exe
 reports.folder=./reports/
 LONG_TIMEOUT_SECONDS=15
 SHORT_TIMEOUT_SECONDS=5
 headless=false
 # Test system properties
-#UI_BASE_URL=http://eulogin.protected.smp.local:8982/smp/ui
-UI_BASE_URL=http://localhost:8080/smp/ui
+UI_BASE_URL=http://eulogin.protected.smp.local:8982/smp/ui
+#UI_BASE_URL=http://localhost:8080/smp/ui
 SYSTEM_ADMIN.username=system
 SYSTEM_ADMIN.password=123456
 ROLE_ADMIN.username=admin
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java
index 4979b1a18d86e87be5d360a86df2191fa11a6448..337c8b9f457ff11845ff2414f1c49db05fd6602e 100644
--- a/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/BaseTest.java
@@ -1,18 +1,13 @@
 package domiSMPTests;
 
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.openqa.selenium.WebDriver;
 import rest.DomiSMPRestClient;
-import utils.MyLogger;
 import utils.TestRunData;
 
 public class BaseTest {
     public static TestRunData data = new TestRunData();
     public static DomiSMPRestClient rest = new DomiSMPRestClient();
-
     public WebDriver driver;
-    public ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
 
 }
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java
index e835287153d7ca7e1c95003d9a5018f54720a032..eb8abd41000756ddc97d07ec1f907d708f1b762d 100644
--- a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/LoginPgTests.java
@@ -1,6 +1,6 @@
 package domiSMPTests.ui;
 
-import ddsl.ApplicationRoles;
+import ddsl.enums.ApplicationRoles;
 import domiSMPTests.SeleniumTest;
 import org.testng.Reporter;
 import org.testng.annotations.Test;
@@ -22,13 +22,12 @@ public class LoginPgTests extends SeleniumTest {
         String username = Generator.randomAlphaNumeric(10);
         String email = Generator.randomAlphaNumeric(5) + "@automatedTesint.com";
 
-        rest.users().createUser(username, role, email);
+        //rest.users().createUser(username, role, email);
         Reporter.log(String.format("Created user %s with role %s", username, role));
         LOG.info("Created user [{}] with role [{}]", username, role);
 
         Reporter.log(String.format("Login %s with role %s", username, role));
         LOG.info(String.format("Login %s with role %s", username, role));
-        //login(username, data.defaultPass());
 
     }
 
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c13f4e662af016d75125e5215eb710309623ea1
--- /dev/null
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java
@@ -0,0 +1,48 @@
+package domiSMPTests.ui;
+
+import ddsl.dcomponents.DomiSMPPage;
+import ddsl.enums.Pages;
+import domiSMPTests.SeleniumTest;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import pages.LoginPage;
+import rest.models.CreateUserModel;
+
+
+public class ProfilePgTests extends SeleniumTest {
+    @Test(description = "PROF-01")
+    public void AllUsersAreAbleToSeeProfilePage() throws Exception {
+        CreateUserModel normalUser = CreateUserModel.createUserWithUSERrole();
+
+        rest.users().createUser(normalUser);
+
+        DomiSMPPage homePage = new DomiSMPPage(driver);
+        LoginPage loginPage = homePage.goToLoginPage();
+        loginPage.login(normalUser.getUsername(), data.getNewPassword());
+
+        //Check if menu is available
+        Assert.assertTrue(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE));
+
+        //Navigate to page
+        homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE);
+
+        homePage.logout();
+
+        //Check if page is avaiable for Admin users
+        CreateUserModel adminUser = CreateUserModel.createUserWithUSERrole();
+        rest.users().createUser(adminUser);
+
+        loginPage = homePage.goToLoginPage();
+        loginPage.login(adminUser.getUsername(), data.getNewPassword());
+
+        //Check if menu is available
+        Assert.assertTrue(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE));
+
+        //Navigate to page
+        homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE);
+
+        //Check if ProfilePage is not available for anonymous users
+        homePage.logout();
+        Assert.assertFalse(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE));
+    }
+}