diff --git a/domiSMP-ui-tests/pom.xml b/domiSMP-ui-tests/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7e72072c7d093fba031917a4344224a7f9c15f06
--- /dev/null
+++ b/domiSMP-ui-tests/pom.xml
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>domiSMP-ui-tests</artifactId>
+    <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>
+        <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>
+        <jersey-multipart_version>1.19.4</jersey-multipart_version>
+        <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>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.10.0</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M7</version>
+                <configuration>
+                    <failIfNoTests>true</failIfNoTests>
+                    <systemPropertyVariables>
+                        <runBrowser>chrome</runBrowser>
+                        <propertiesFile>./src/main/resources/myLocal.properties</propertiesFile>
+                    </systemPropertyVariables>
+                    <properties>
+                        <property>
+                            <name>surefire.testng.verbose</name>
+                            <value>0</value>
+                        </property>
+                    </properties>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+
+        <profile>
+            <id>selenium_local</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <propertiesFile>./src/main/resources/myLocal.properties</propertiesFile>
+                            </systemPropertyVariables>
+                            <suiteXmlFiles>
+                                <suiteXmlFile>testng.xml</suiteXmlFile>
+                            </suiteXmlFiles>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>bamboo-remote</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <propertiesFile>./src/main/resources/bambooE2.properties</propertiesFile>
+                            </systemPropertyVariables>
+                            <suiteXmlFiles>
+                                <suiteXmlFile>testng.xml</suiteXmlFile>
+                            </suiteXmlFiles>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+    </profiles>
+
+    <dependencies>
+        <!-- USED FOR ENHANCED REPORTS-->
+        <dependency>
+            <groupId>com.aventstack</groupId>
+            <artifactId>extentreports</artifactId>
+            <version>5.0.9</version>
+        </dependency>
+
+        <!--**************************************-->
+        <!--FOR DATA DRIVEN TESTS-->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-csv</artifactId>
+            <version>${commons-csv_version}</version>
+        </dependency>
+
+        <!--**************************************-->
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.2.11</version>
+        </dependency>
+
+        <!--**************************************-->
+
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-chrome-driver</artifactId>
+            <version>${selenium-chrome-driver_version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-java</artifactId>
+            <version>${selenium-java_version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>7.4.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>${poi-ooxml_version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <version>0.9.12</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-client</artifactId>
+            <version>${jersey-client_version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.jersey.contribs</groupId>
+            <artifactId>jersey-multipart</artifactId>
+            <version>${jersey-multipart_version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>${json_version}</version>
+        </dependency>
+
+
+        <!-- *********************************************************************************** -->
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>${jackson_version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.jaxrs</groupId>
+            <artifactId>jackson-jaxrs-json-provider</artifactId>
+            <version>${jackson_version}</version>
+        </dependency>
+        <!-- *********************************************************************************** -->
+
+
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>${javax.ws.rs-api_version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <version>4.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.12.0</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-configuration</groupId>
+            <artifactId>commons-configuration</artifactId>
+            <version>1.10</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.11.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.32</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/xmlunit/xmlunit -->
+        <dependency>
+            <groupId>xmlunit</groupId>
+            <artifactId>xmlunit</artifactId>
+            <version>1.6</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>
+        </dependency>
+
+    </dependencies>
+
+</project>
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..e9fbd067029b145fdf4f4042ca6e5ca3e6e1d84b
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java
@@ -0,0 +1,48 @@
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AlertComponent extends DComponent {
+    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();
+    }
+
+    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/BreadcrumpComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..117b03067762f40d709fd6a951fb76387c28ea95
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java
@@ -0,0 +1,26 @@
+package ddsl.dcomponents;
+
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+
+import java.util.List;
+
+public class BreadcrumpComponent extends DomiSMPPage {
+
+    @FindBy(xpath = "//smp-breadcrumb/div/smp-breadcrumb-item/a/div[3]/span")
+    public List<WebElement> BreadcrumpItems;
+
+    public BreadcrumpComponent(WebDriver driver) {
+        super(driver);
+    }
+
+    public String getCurrentPage() {
+        int numOflinks = BreadcrumpItems.size();
+
+        return BreadcrumpItems.get(numOflinks - 1).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..5b1e6203dccf2c080b30705e353a410c7c4fae38
--- /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 {
+
+    private final static Logger LOG = LoggerFactory.getLogger(DComponent.class);
+    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..62c88f5864af2a582fc529ba846b082c3442b790
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java
@@ -0,0 +1,68 @@
+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 {
+
+    /**
+     * 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;
+    @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 SideNavigationComponent getSidebar() {
+        return new SideNavigationComponent(driver);
+    }
+
+    public BreadcrumpComponent getBreadcrump() {
+        return new BreadcrumpComponent(driver);
+    }
+
+    public LoginPage goToLoginPage() {
+        loginBtnTop.click();
+        return new LoginPage(driver);
+    }
+
+    public LoginPage logout() {
+        rightMenuBtn.click();
+        logoutMenuBtn.click();
+        return new LoginPage(driver);
+    }
+
+    public void refreshPage() {
+        driver.navigate().refresh();
+    }
+
+    public AlertComponent getAlertArea() {
+        return new AlertComponent(driver);
+    }
+
+    public DButton getExpiredDialoginbutton() {
+        return weToDButton(dialogOKbutton);
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..d35c7e7b66bc2ff5f861add7806e3f940963a355
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java
@@ -0,0 +1,197 @@
+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 org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import pages.ProfilePage;
+
+import java.util.Objects;
+
+public class SideNavigationComponent extends DomiSMPPage {
+    private final static Logger LOG = LoggerFactory.getLogger(SideNavigationComponent.class);
+
+    @FindBy(id = "window-sidenav-panel")
+    public WebElement sideBar;
+
+    //	--------------------Search-------------------------
+    @FindBy(id = "search-resourcesButton")
+    private WebElement resourcesLnk;
+
+    @FindBy(id = "search-toolsButton")
+    private WebElement resourcesExpandLnk;
+    //	----------------------------------------------------
+
+    //	--------------Administration---------------------------
+    @FindBy(id = "edit-domainButton")
+    private WebElement editDomainsLnk;
+
+    @FindBy(id = "edit-groupButton")
+    private WebElement editGroupsLnk;
+
+    @FindBy(id = "edit-resourceButton")
+    private WebElement editResourcesLnk;
+
+    @FindBy(id = "editButton")
+    private WebElement administrationExpand;
+    //	----------------------------------------------------
+
+    //	--------------System Settings ---------------------------
+    @FindBy(id = "system-admin-userButton")
+    private WebElement usersLnk;
+
+    @FindBy(id = "system-admin-domainButton")
+    private WebElement domainsLnk;
+
+    @FindBy(id = "system-admin-keystoreButton")
+    private WebElement keystoreLnk;
+    @FindBy(id = "system-admin-truststoreButton")
+    private WebElement truststoreLnk;
+
+    @FindBy(id = "system-admin-extensionButton")
+    private WebElement extensionsLnk;
+
+    @FindBy(id = "system-admin-propertiesButton")
+    private WebElement propertiesLnk;
+
+    @FindBy(id = "system-admin-alertButton")
+    private WebElement alersLnk;
+
+    @FindBy(id = "system-settingsButton")
+    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 SideNavigationComponent(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 1), this);
+    }
+
+    private MenuNavigation getNavigationLinks(Pages pages) {
+        if (Objects.requireNonNull(pages) == Pages.USER_SETTINGS_PROFILE) {
+            return new MenuNavigation(userSettingsExpand, profileLnk);
+        }
+        return null;
+    }
+
+    public DomiSMPPage navigateTo(Pages page) {
+
+        wait.forElementToHaveText(sideBar);
+
+        LOG.debug("Get link to " + page.name());
+        //            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);
+        if (page == Pages.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);
+        }
+        return null;
+    }
+
+    public Boolean isMenuAvailable(Pages page) {
+        MenuNavigation navigationLinks = getNavigationLinks(page);
+        try {
+            if (navigationLinks.menuLink.isEnabled()) {
+                navigationLinks.menuLink.click();
+                return navigationLinks.submenuLink.isEnabled();
+            }
+            return false;
+        } catch (NoSuchElementException e) {
+            return false;
+        }
+    }
+
+    private void openSubmenu(WebElement menu, 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: [{}] but ACTUAL PAGE [{}]", submenu.getText().toString(), getBreadcrump().getCurrentPage().toString());
+                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..ab600b12eb040ded023dcc1adb385186a64741cc
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java
@@ -0,0 +1,41 @@
+package ddsl.dobjects;
+
+import org.openqa.selenium.ElementNotInteractableException;
+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 ElementNotInteractableException("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..52423540cbfab0106b3fc331ea368e7d9738c1b6
--- /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 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
new file mode 100644
index 0000000000000000000000000000000000000000..9e235b5bac87c317635c83ffadc2b733fa30b9af
--- /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 final TestRunData data = new TestRunData();
+    private final 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/enums/ApplicationRoles.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7ea548b39887cd9b17d09114ca72be8333abbd4
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ApplicationRoles.java
@@ -0,0 +1,6 @@
+package ddsl.enums;
+
+public class ApplicationRoles {
+    public static final String SYSTEM_ADMIN = "SYSTEM_ADMIN";
+    public static final String USER = "USER";
+}
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/ddsl/enums/SMPThemes.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/SMPThemes.java
new file mode 100644
index 0000000000000000000000000000000000000000..80067b3ea6713fd5de4fe7b77087827278daad46
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/SMPThemes.java
@@ -0,0 +1,26 @@
+package ddsl.enums;
+
+import java.util.Random;
+
+public enum SMPThemes {
+    Default_theme("SMP default theme"),
+    Blue_theme("Blue theme"),
+    Indigo_Pink_theme("Indigo & Pink theme"),
+    Pink_Blue_grey_theme("Pink & Blue grey"),
+    Purple_Green_theme("Purple & Green theme");
+
+
+    private final String name;
+
+    SMPThemes(String name) {
+        this.name = name;
+    }
+
+    public static String getRandomTheme() {
+        SMPThemes[] themes = values();
+        int size = themes.length;
+        Random random = new Random();
+        int index = random.nextInt(size);
+        return themes[index].name;
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..41ad9a1767435f71479c77ff58ac7fe5edfd073e
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java
@@ -0,0 +1,57 @@
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+
+public class LoginPage extends DomiSMPPage {
+
+    /**
+     * Page object for the Login page. This contains the locators of the page and the methods for the behaviour of the page
+     */
+
+    private final static Logger LOG = LoggerFactory.getLogger(LoginPage.class);
+
+    @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..af7aa8f30a89d9be7184fe91508f03f92d409aa4
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java
@@ -0,0 +1,87 @@
+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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ProfilePage extends DomiSMPPage {
+    /**
+     * 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);
+
+    @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 == null)) {
+                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/rest/BaseRestClient.java b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..2f30da5f1a477f0a8e09c30ea309f67e36aad4f0
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
@@ -0,0 +1,163 @@
+package rest;
+
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import org.apache.commons.lang3.StringUtils;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import utils.TestRunData;
+
+import javax.ws.rs.core.Cookie;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.NewCookie;
+import java.util.HashMap;
+import java.util.List;
+
+public class BaseRestClient {
+    protected final Logger log = LoggerFactory.getLogger(this.getClass());
+    protected TestRunData data = new TestRunData();
+
+    protected Client client = Client.create();
+    public WebResource resource = client.resource(data.getUiBaseUrl());
+
+    protected List<NewCookie> cookies;
+    protected String token;
+    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");
+    }
+
+    //	---------------------------------------Default request methods -------------------------------------------------
+    protected ClientResponse requestPUT(WebResource resource, String params, String type) {
+
+        if (!isLoggedIn()) {
+            try {
+                refreshCookies();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        WebResource.Builder builder = decorateBuilder(resource);
+
+        return builder.type(type).put(ClientResponse.class, params);
+    }
+
+    protected ClientResponse requestPUT(WebResource resource, JSONObject body, String type) {
+
+        if (!isLoggedIn()) {
+            log.info("User is not loggedin");
+            try {
+                refreshCookies();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        WebResource.Builder builder = decorateBuilder(resource);
+
+        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);
+    }
+
+    protected ClientResponse requestPOST(WebResource resource, String params, String type) {
+
+
+        WebResource.Builder builder = decorateBuilder(resource);
+
+        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;
+        }
+        cookies = login();
+        if (null != cookies) {
+            token = extractToken();
+        } else {
+            throw new Exception("Could not login, tests will not be able to generate necessary data!");
+        }
+
+        if (null == token) {
+            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();
+        log.debug("Connected endpoint returns: " + response);
+        log.debug("UserID is: " + data.getUserId());
+        return (!(response == 401) && !data.getUserId().isEmpty());
+    }
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..cbbb65d919eeaaca29bbcba65bb63426f3cfeef0
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
@@ -0,0 +1,13 @@
+package rest;
+
+public class DomiSMPRestClient extends BaseRestClient {
+    public DomiSMPRestClient() {
+        super();
+    }
+
+    // -------------------------------------------- get clients -----------------------------------------------------------
+    public UserClient users() {
+        return new UserClient(username, password);
+    }
+}
+
diff --git a/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcbe59ef187b43328adb50894b2800e6fa34e19d
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
@@ -0,0 +1,22 @@
+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";
+
+
+    public static String getUsersPath(String currentUserId) {
+
+        return "/internal/rest/user/" + currentUserId + "/create";
+    }
+
+    public static String getChangePasswordPath(String currentUserId, String forUserId) {
+
+        return "/internal/rest/user/" + currentUserId + "/change-password-for/" + forUserId;
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/rest/SMPRestException.java b/domiSMP-ui-tests/src/main/java/rest/SMPRestException.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e353813cc90d2db102650f8e21ddc34b6907327
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/SMPRestException.java
@@ -0,0 +1,16 @@
+package rest;
+
+import com.sun.jersey.api.client.ClientResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SMPRestException extends Exception {
+    protected final Logger log = LoggerFactory.getLogger(this.getClass());
+
+    public SMPRestException(String message, ClientResponse response) {
+        super(String.format("%s \n %s \n %s \n",
+                message,
+                "STATUS = " + response.getStatus(),
+                "CONTENT = " + response.getEntity(String.class)));
+    }
+}
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..7dcd9a7896865ec5fb713a8b4871cb779d496a29
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/UserClient.java
@@ -0,0 +1,62 @@
+package rest;
+
+import com.sun.jersey.api.client.ClientResponse;
+import org.json.JSONObject;
+import rest.models.UserModel;
+
+public class UserClient extends BaseRestClient {
+
+    public UserClient(String username, String password) {
+        super(username, password);
+    }
+
+    public JSONObject createUser(UserModel 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);
+        return new JSONObject(response.getEntity(String.class));
+    }
+
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java b/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..838f30c4b90450583306011bf4b430571e1a55d3
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java
@@ -0,0 +1,131 @@
+package rest.models;
+
+
+import ddsl.enums.ApplicationRoles;
+import ddsl.enums.SMPThemes;
+import utils.Generator;
+
+public class UserModel {
+
+    private String userId;
+    private String username;
+    private boolean active;
+    private String role;
+    private String emailAddress;
+    private String fullName;
+    private String smpTheme;
+    private String smpLocale;
+
+    public UserModel(String username, boolean active, String role, String emailAddress, String fullName, String smpTheme, String smpLocale) {
+        this.username = username;
+        this.active = active;
+        this.role = role;
+        this.emailAddress = emailAddress;
+        this.fullName = fullName;
+        this.smpTheme = smpTheme;
+        this.smpLocale = smpLocale;
+    }
+
+    public UserModel() {
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public boolean isActive() {
+        return active;
+    }
+
+    public void setActive(boolean active) {
+        this.active = active;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+    public void setRole(String role) {
+        this.role = role;
+    }
+
+    public String getEmailAddress() {
+        return emailAddress;
+    }
+
+    public void setEmailAddress(String email) {
+        this.emailAddress = email;
+    }
+
+    public String getFullName() {
+        return fullName;
+    }
+
+    public void setFullName(String fullName) {
+        this.fullName = fullName;
+    }
+
+    public String getSmpTheme() {
+        return smpTheme;
+    }
+
+    public void setSmpTheme(String smpTheme) {
+        this.smpTheme = smpTheme;
+    }
+
+
+    public String getSmpLocale() {
+        return smpLocale;
+    }
+
+    public void setSmpLocale(String smpLocale) {
+        this.smpLocale = smpLocale;
+    }
+
+    public static UserModel createUserWithUSERrole() {
+        UserModel userModel = new UserModel();
+        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();
+        userModel.smpLocale = "English";
+        return userModel;
+    }
+
+    public static UserModel createUserWithADMINrole() {
+        UserModel userModel = new UserModel();
+        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();
+        userModel.smpLocale = "English";
+        return userModel;
+    }
+
+    public static UserModel generateUserProfileData() {
+        UserModel userModel = new UserModel();
+        userModel.emailAddress = "AUT_email_" + Generator.randomAlphaNumeric(4) + "@automation.com";
+        userModel.fullName = "AUT_fullname_" + Generator.randomAlphaNumeric(4);
+        userModel.smpTheme = SMPThemes.getRandomTheme();
+        userModel.smpLocale = "Dutch";
+        return userModel;
+    }
+
+}
+
diff --git a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ac4c7a7e3a90fad4a3d44f5b989560650aba740
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java
@@ -0,0 +1,64 @@
+package utils;
+
+import org.apache.commons.lang3.StringUtils;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+
+import java.util.HashMap;
+import java.util.concurrent.TimeUnit;
+
+public class DriverManager {
+    static TestRunData data = new TestRunData();
+
+
+    public static WebDriver getDriver() {
+
+        WebDriver driver;
+        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);
+        return driver;
+    }
+
+    private static WebDriver getChromeDriver() {
+        System.setProperty("webdriver.chrome.driver", data.getChromeDriverPath());
+
+
+        //Code added for auto download
+        HashMap<String, Object> prefs = new HashMap<>();
+        prefs.put("profile.default_content_settings.popups", 0);
+        prefs.put("download.default_directory", data.downloadFolderPath());
+        prefs.put("safebrowsing.enabled", "true");
+
+        ChromeOptions options = new ChromeOptions();
+        options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
+        options.addArguments("--disable-popup-blocking");
+
+        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());
+        //code added for auto download
+        options.addPreference("browser.download.folderList", 2);
+        options.addPreference("browser.download.manager.showWhenStarting", false);
+        options.addPreference("browser.download.dir", data.downloadFolderPath());
+        options.addPreference("browser.helperApps.neverAsk.openFile", "application/ms-excel text/xml application/zip");
+        options.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/ms-excel text/xml application/zip");
+        return new FirefoxDriver(options);
+    }
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/utils/Generator.java b/domiSMP-ui-tests/src/main/java/utils/Generator.java
new file mode 100644
index 0000000000000000000000000000000000000000..dcfbc6ec22b7473964d41df6031973a87c6f964f
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/utils/Generator.java
@@ -0,0 +1,15 @@
+package utils;
+
+public class Generator {
+    private static final String ALPHA_NUMERIC_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+    public static String randomAlphaNumeric(int count) {
+        StringBuilder builder = new StringBuilder();
+        while (count-- != 0) {
+            int character = (int) (Math.random() * ALPHA_NUMERIC_STRING.length());
+            builder.append(ALPHA_NUMERIC_STRING.charAt(character));
+        }
+        return builder.toString();
+    }
+
+}
diff --git a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
new file mode 100644
index 0000000000000000000000000000000000000000..2deb4c502532b7dc1c89699e829fb7ffc596619b
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
@@ -0,0 +1,125 @@
+package utils;
+
+import ddsl.enums.ApplicationRoles;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.text.SimpleDateFormat;
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Properties;
+
+
+public class TestRunData {
+    public static SimpleDateFormat UI_DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
+    public static SimpleDateFormat UI_DATE_FORMAT2 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssz");
+    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 TestRunData() {
+        if (prop.isEmpty()) {
+            loadTestData();
+        }
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    private void loadTestData() {
+        try {
+            String filename = System.getProperty("propertiesFile");
+            FileInputStream stream = new FileInputStream(filename);
+            prop.load(stream);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public HashMap<String, String> getUser(String role) {
+
+        HashMap<String, String> toReturn = new HashMap<>();
+
+        toReturn.put("username", prop.getProperty(role + ".username"));
+        toReturn.put("pass", prop.getProperty(role + ".password"));
+
+        return toReturn;
+    }
+
+
+    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);
+        return url;
+    }
+
+    public Integer getTIMEOUT() {
+        return Integer.valueOf(prop.getProperty("SHORT_TIMEOUT_SECONDS"));
+    }
+
+    public Duration getTIMEOUTinDuration() {
+        return Duration.ofMinutes(Long.parseLong((prop.getProperty("SHORT_TIMEOUT_SECONDS"))));
+    }
+
+    public Integer getLongWait() {
+        return Integer.valueOf(prop.getProperty("LONG_TIMEOUT_SECONDS"));
+    }
+
+    public Duration getLongWaitInDuration() {
+        return Duration.ofMinutes(Long.parseLong(prop.getProperty("LONG_TIMEOUT_SECONDS")));
+    }
+
+
+    public String getReportsFolder() {
+        return prop.getProperty("reports.folder");
+    }
+
+    public boolean isHeadless() {
+        try {
+            return Boolean.parseBoolean(prop.getProperty("headless"));
+        } catch (Exception e) {
+            log.debug("e = " + e);
+            return false;
+        }
+    }
+
+    public String getProxyAddress() {
+        return prop.getProperty("proxyAddress");
+    }
+
+    public String getChromeDriverPath() {
+        return prop.getProperty("webdriver.chrome.driver");
+    }
+
+    public String getFirefoxDriverPath() {
+        return prop.getProperty("webdriver.gecko.driver");
+    }
+
+    public String getRunBrowser() {
+        return System.getProperty("runBrowser");
+    }
+
+
+    public String downloadFolderPath() {
+        return System.getProperty("user.dir") + File.separator + "downloadFiles";
+    }
+
+}
diff --git a/domiSMP-ui-tests/src/main/resources/bambooE2.properties b/domiSMP-ui-tests/src/main/resources/bambooE2.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/domiSMP-ui-tests/src/main/resources/myLocal.properties b/domiSMP-ui-tests/src/main/resources/myLocal.properties
new file mode 100644
index 0000000000000000000000000000000000000000..4cb63757445890c4008d31682ebfbbddf9e5a084
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/resources/myLocal.properties
@@ -0,0 +1,20 @@
+# Local runner, Edeltest2 target, Single tenancy
+# Test runner properties
+webdriver.ie.driver=MicrosoftWebDriver.exe
+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
+SYSTEM_ADMIN.username=system
+SYSTEM_ADMIN.password=123456
+ROLE_ADMIN.username=admin
+ROLE_ADMIN.password=123456
+ROLE_USER.username=user
+ROLE_USER.password=123456
+default.password=QW!@QW!@qw12qw12
+new.password=Test1234!Test1234!
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b01911f70cf449531bb216cf6ff994a7f69ea35
--- /dev/null
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java
@@ -0,0 +1,77 @@
+package domiSMPTests;
+
+import org.openqa.selenium.WebDriver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.testng.annotations.*;
+import rest.DomiSMPRestClient;
+import utils.DriverManager;
+import utils.TestRunData;
+
+import java.lang.reflect.Method;
+
+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();
+    public WebDriver driver;
+
+
+    @BeforeSuite(alwaysRun = true)
+    public void beforeSuite() {
+
+        LOG.info("Log file name is " + logFilename);
+        LOG.info("-------- Starting -------");
+    }
+
+
+    @AfterSuite(alwaysRun = true)
+    public void afterSuite() {
+    }
+
+    @BeforeClass(alwaysRun = true)
+    public void beforeClass() {
+        LOG.info("--------Initialize test class-------");
+        driver = DriverManager.getDriver();
+
+    }
+
+    @BeforeMethod(alwaysRun = true)
+    protected void beforeMethod(Method method) {
+
+        MDC.put("logFileName", method.getDeclaringClass().getSimpleName());
+
+        LOG.info("--------------------------- Running test number: " + methodCount);
+        LOG.info("--------------------------- Running test method: " + method.getDeclaringClass().getSimpleName() + "." + method.getName());
+        methodCount++;
+
+        try {
+            driver.get(data.getUiBaseUrl());
+        } catch (Exception e) {
+            driver = DriverManager.getDriver();
+            driver.get(data.getUiBaseUrl());
+        }
+    }
+
+
+    @AfterClass(alwaysRun = true)
+    protected void afterClass() {
+
+        LOG.info("-------- Quitting driver after test class-------");
+        try {
+            driver.quit();
+        } catch (Exception e) {
+            LOG.warn("Closing the driver failed");
+            LOG.error("EXCEPTION: ", e);
+        }
+    }
+
+}
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..05bf203afccef57ac08f5361e75669151e11a829
--- /dev/null
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java
@@ -0,0 +1,104 @@
+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 pages.ProfilePage;
+import rest.models.UserModel;
+
+
+public class ProfilePgTests extends SeleniumTest {
+
+    /**
+     * This class has the tests against Profile Page
+     */
+    @Test(description = "PROF-01")
+    public void AllLoggedUsersAreAbleToSeeProfilePage() throws Exception {
+        UserModel normalUser = UserModel.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
+        UserModel adminUser = UserModel.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));
+    }
+
+    @Test(description = "PROF-02")
+    public void AllLoggedUsersAreAbleToUpdateProfilePage() throws Exception {
+        UserModel normalUser = UserModel.createUserWithUSERrole();
+
+        rest.users().createUser(normalUser);
+
+        DomiSMPPage homePage = new DomiSMPPage(driver);
+        LoginPage loginPage = homePage.goToLoginPage();
+        loginPage.login(normalUser.getUsername(), data.getNewPassword());
+
+        //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.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());
+
+        homePage.logout();
+
+
+        UserModel adminUser = UserModel.createUserWithUSERrole();
+
+        rest.users().createUser(adminUser);
+
+        homePage = new DomiSMPPage(driver);
+        loginPage = homePage.goToLoginPage();
+        loginPage.login(adminUser.getUsername(), data.getNewPassword());
+
+        //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.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());
+
+
+    }
+}
diff --git a/domiSMP-ui-tests/testng.xml b/domiSMP-ui-tests/testng.xml
new file mode 100644
index 0000000000000000000000000000000000000000..90ae71527e06ba13940657dcd27c22eb524ee265
--- /dev/null
+++ b/domiSMP-ui-tests/testng.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+<suite name="SELENIUM" parallel="classes" thread-count="1">
+    <groups>
+        <run>
+        </run>
+    </groups>
+
+</suite>
\ No newline at end of file
diff --git a/smp-ui-tests/src/main/java/utils/rest/SMPRestClient.java b/smp-ui-tests/src/main/java/utils/rest/SMPRestClient.java
index 68b8e3de2af2c7fb02b7eb27ed7939fcbed79cdc..a3bd15e287f1d4ba2e6694160cfb8fff7fa69a23 100644
--- a/smp-ui-tests/src/main/java/utils/rest/SMPRestClient.java
+++ b/smp-ui-tests/src/main/java/utils/rest/SMPRestClient.java
@@ -180,6 +180,7 @@ public class SMPRestClient {
 		HashMap<String, String> map = getCookies(cookies);
 		String xsrf = map.get("XSRF-TOKEN");
 		String jsessionID = map.get("JSESSIONID");
+		log.info("Creating domain template whose xsrf :" + xsrf + " and session id: " + jsessionID);
 		log.info("Creating domain template whose value is :" + template);
 		log.info("Creating the doamainpoststring" + domainPostStr);
 		try {