diff --git a/domismp-tests/domismp-tests-ui/pom.xml b/domismp-tests/domismp-tests-ui/pom.xml
index 67ff57bd4f1f79754d961d49ad30018cda726d01..efc070b0f1f405780496b789dc86ee08fbf509cf 100644
--- a/domismp-tests/domismp-tests-ui/pom.xml
+++ b/domismp-tests/domismp-tests-ui/pom.xml
@@ -17,25 +17,25 @@
         <!-- Only selected modules are deployed -->
         <maven.deploy.skip>false</maven.deploy.skip>
         <!-- dependencies versions-->
-        <commons-csv_version>1.10.0</commons-csv_version>
-        <selenium-chrome-driver_version>4.16.1</selenium-chrome-driver_version>
-        <selenium-java_version>4.16.1</selenium-java_version>
-        <poi-ooxml_version>5.2.4</poi-ooxml_version>
+        <commons-csv_version>1.12.0</commons-csv_version>
+        <selenium-chrome-driver_version>4.25.0</selenium-chrome-driver_version>
+        <selenium-java_version>4.25.0</selenium-java_version>
+        <poi-ooxml_version>5.3.0</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>20231013</json_version>
-        <jackson_version>2.15.2</jackson_version>
+        <json_version>20240303</json_version>
+        <jackson_version>2.18.0</jackson_version>
         <javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
         <javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
         <xmlunit_version>1.6</xmlunit_version>
-        <testng_version>7.8.0</testng_version>
-        <logback-classic_version>1.4.11</logback-classic_version>
-        <extentreports_version>5.1.1</extentreports_version>
-        <commons-lang3_version>3.13.0</commons-lang3_version>
-        <commons-io_version>2.15.0</commons-io_version>
+        <testng_version>7.10.2</testng_version>
+        <logback-classic_version>1.5.8</logback-classic_version>
+        <extentreports_version>5.1.2</extentreports_version>
+        <commons-lang3_version>3.17.0</commons-lang3_version>
+        <commons-io_version>2.17.0</commons-io_version>
         <!-- plugin versions-->
-        <maven-surefire-plugin_version>3.2.2</maven-surefire-plugin_version>
+        <maven-surefire-plugin_version>3.5.1</maven-surefire-plugin_version>
         <plugin.dependency-check-maven.version>9.0.7</plugin.dependency-check-maven.version>
         <maven-compiler-plugin>3.11.0</maven-compiler-plugin>
 
@@ -174,7 +174,7 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-collections4</artifactId>
-            <version>4.4</version>
+            <version>4.5.0-M2</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/DomiSMPPage.java b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/DomiSMPPage.java
index ef81d2d368bd4917a876d75b477ad75d53532436..9ff6f9e2ea15c34ad166b758b08cd6d70815ff4d 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/DomiSMPPage.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/DomiSMPPage.java
@@ -61,6 +61,8 @@ public class DomiSMPPage extends DComponent {
         actions.moveToElement(logoutMenuBtn);
         actions.perform();
         logoutMenuBtn.click();
+        data.getCookies().clear();
+        data.setXSRFToken("");
     }
 
     public void refreshPage() {
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/DComponent.java b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/DComponent.java
index 1211e6fd633bf6a6a471954cb06359978f779d2a..fae21b8251bd3fc9160d6ce5d3e2876e88e6e08f 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/DComponent.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/DComponent.java
@@ -1,10 +1,7 @@
 package ddsl.dcomponents;
 
 import ddsl.dcomponents.mat.MatSelect;
-import ddsl.dobjects.DButton;
-import ddsl.dobjects.DInput;
-import ddsl.dobjects.DSelect;
-import ddsl.dobjects.DWait;
+import ddsl.dobjects.*;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import utils.TestRunData;
@@ -24,6 +21,10 @@ public class DComponent {
         return new DButton(driver, element);
     }
 
+    protected DCheckbox weToDChecked(WebElement element) {
+        return new DCheckbox(driver, element);
+    }
+
     protected DInput weToDInput(WebElement element) {
         return new DInput(driver, element);
     }
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/Grid/GridWithoutPagination.java b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/Grid/GridWithoutPagination.java
new file mode 100644
index 0000000000000000000000000000000000000000..034ca5bfbb3e32fcec7d9b482503c5f5907bb71e
--- /dev/null
+++ b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/Grid/GridWithoutPagination.java
@@ -0,0 +1,130 @@
+package ddsl.dcomponents.Grid;
+
+import ddsl.dcomponents.DComponent;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.PageFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.NoSuchElementException;
+
+public class GridWithoutPagination extends DComponent {
+
+    protected static final By gridHeadersLocator = By.cssSelector("table thead th");
+    protected static final By gridRowsLocator = By.cssSelector("table tbody tr");
+    private final static Logger LOG = LoggerFactory.getLogger(GridWithoutPagination.class);
+    private final WebElement parentElement;
+
+
+    public GridWithoutPagination(WebDriver driver, WebElement parentElement) {
+        super(driver);
+        PageFactory.initElements(driver, this);
+        this.parentElement = parentElement;
+        wait.forXMillis(200);
+    }
+
+    public List<WebElement> getGridHeaders() {
+        return parentElement.findElements(gridHeadersLocator);
+    }
+
+    public List<WebElement> getRows() {
+        return parentElement.findElements(gridRowsLocator);
+    }
+
+    public List<WebElement> getCells(WebElement row) {
+        return row.findElements(By.cssSelector("td"));
+    }
+
+    public void searchAndDoubleClickElementInColumn(String columnName, String value) {
+
+        wait.forXMillis(100);
+        List<WebElement> rowHeaders = getGridHeaders();
+        int columnIndex = -1;
+        for (int i = 0; i < rowHeaders.size(); i++) {
+            if (rowHeaders.get(i).getText().equals(columnName)) {
+                columnIndex = i;
+                break;
+            }
+        }
+        if (columnIndex == -1) {
+            LOG.error("No element found");
+            throw new NoSuchElementException("Column not found");
+        }
+
+
+        List<WebElement> rows = getRows();
+        for (WebElement row : rows) {
+            List<WebElement> cells = getCells(row);
+            WebElement currentCell = cells.get(columnIndex);
+            if (currentCell.getText().equalsIgnoreCase(value)) {
+                LOG.debug("Value: " + value + " has been found");
+                //Double Click on top right corner of element to prevent clicking on tooltip
+                Actions act = new Actions(driver);
+                act.moveToElement(currentCell, currentCell.getSize().getWidth() - 1, 0)
+                        .doubleClick()
+                        .perform();
+
+
+                return;
+            }
+        }
+        LOG.error("Value " + value + " has not been found in the grid");
+    }
+
+    public WebElement searchAndGetPrecedentSiblingElementInColumn(String columnName, String value) {
+
+        wait.forXMillis(100);
+        List<WebElement> rowHeaders = getGridHeaders();
+        int columnIndex = -1;
+        for (int i = 0; i < rowHeaders.size(); i++) {
+            if (rowHeaders.get(i).getText().equals(columnName)) {
+                columnIndex = i;
+                break;
+            }
+        }
+        if (columnIndex == -1) {
+            return null;
+        }
+        List<WebElement> rows = getRows();
+        for (WebElement row : rows) {
+            List<WebElement> cells = getCells(row);
+            WebElement currentCell = cells.get(columnIndex);
+            if (currentCell.getText().equals(value)) {
+                LOG.debug("[{}] found", value);
+                return currentCell.findElement(By.xpath("preceding-sibling::*"));
+            }
+        }
+        return null;
+    }
+
+    public WebElement searchAndGetFollowingSiblingElementInColumn(String columnName, String value) {
+
+        wait.forXMillis(100);
+        List<WebElement> rowHeaders = getGridHeaders();
+        int columnIndex = -1;
+        for (int i = 0; i < rowHeaders.size(); i++) {
+            if (rowHeaders.get(i).getText().equals(columnName)) {
+                columnIndex = i;
+                break;
+            }
+        }
+        if (columnIndex == -1) {
+            return null;
+        }
+        List<WebElement> rows = getRows();
+        for (WebElement row : rows) {
+            List<WebElement> cells = getCells(row);
+            WebElement currentCell = cells.get(columnIndex);
+            if (currentCell.getText().equals(value)) {
+                LOG.debug("[{}] found", value);
+                return currentCell.findElement(By.xpath("following-sibling::*"));
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/commonComponents/domanPropertyEditDialog/DomainPropertyEditDialog.java b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/commonComponents/domanPropertyEditDialog/DomainPropertyEditDialog.java
new file mode 100644
index 0000000000000000000000000000000000000000..948d9a38d023f410ce83be15f96271fb1257f05b
--- /dev/null
+++ b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/commonComponents/domanPropertyEditDialog/DomainPropertyEditDialog.java
@@ -0,0 +1,73 @@
+package ddsl.dcomponents.commonComponents.domanPropertyEditDialog;
+
+import ddsl.dcomponents.DComponent;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+
+public class DomainPropertyEditDialog extends DComponent {
+
+    @FindBy(css = "#mat-expansion-panel-header-1")
+    private WebElement propertyNameExpand;
+    @FindBy(css = "mat-card-content mat-checkbox:nth-of-type(1)")
+    private WebElement useDefaultValueCheckBox;
+    @FindBy(css = "mat-card-content mat-form-field div div input")
+    private WebElement domainValueInput;
+    @FindBy(css = "mat-card-content mat-checkbox:nth-of-type(2)")
+    private WebElement domainValueCheckbox;
+    @FindBy(id = "updatePropertyButton")
+    private WebElement okBtn;
+    @FindBy(css = ".mat-mdc-dialog-actions > button:nth-child(2)")
+    private WebElement cancelBtn;
+
+    public DomainPropertyEditDialog(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(driver, this);
+        wait.forElementToBeVisible(cancelBtn);
+    }
+
+    public void setDomainValue(String domainValue) throws Exception {
+        if (weToDChecked(useDefaultValueCheckBox).isChecked()) {
+            weToDChecked(useDefaultValueCheckBox).uncheck();
+        }
+        if (weToDInput(domainValueInput).isEnabled()) {
+            weToDInput(domainValueInput).fill(domainValue);
+        }
+    }
+
+    public void setDomainValue(boolean isEnabled) throws Exception {
+        if (weToDChecked(useDefaultValueCheckBox).isChecked()) {
+            weToDChecked(useDefaultValueCheckBox).uncheck();
+        }
+
+        if (isEnabled) {
+            if (!weToDChecked(domainValueCheckbox).isChecked()) {
+                weToDChecked(domainValueCheckbox).check();
+            }
+        } else {
+            if (weToDChecked(domainValueCheckbox).isChecked()) {
+                weToDChecked(domainValueCheckbox).uncheck();
+            }
+        }
+    }
+
+    public void enableSystemValue() throws Exception {
+        if (!weToDChecked(useDefaultValueCheckBox).isChecked()) {
+            weToDChecked(useDefaultValueCheckBox).check();
+        }
+    }
+
+    public void disableSystemValue() throws Exception {
+        if (weToDChecked(useDefaultValueCheckBox).isChecked()) {
+            weToDChecked(useDefaultValueCheckBox).uncheck();
+        }
+    }
+
+    public void pressOk() {
+        if (weToDButton(okBtn).isEnabled()) {
+            weToDButton(okBtn).click();
+        }
+    }
+
+}
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dobjects/DCheckbox.java b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dobjects/DCheckbox.java
new file mode 100644
index 0000000000000000000000000000000000000000..5eb7e86ac3c4e3f6d123101f61d7ad5c6032fb37
--- /dev/null
+++ b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dobjects/DCheckbox.java
@@ -0,0 +1,65 @@
+package ddsl.dobjects;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.ElementNotInteractableException;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public class DCheckbox extends DObject {
+    WebElement labelElement;
+    WebElement input;
+
+    public DCheckbox(WebDriver driver, WebElement element) {
+        this(driver, element, null);
+        input = element.findElement(By.cssSelector("input[type='checkbox']"));
+    }
+
+    public DCheckbox(WebDriver driver, WebElement element, WebElement labelElement) {
+        super(driver, element);
+
+        this.labelElement = labelElement;
+    }
+
+    public boolean isChecked() throws Exception {
+        if (isPresent()) {
+            if (null != input.getAttribute("checked")) {
+                return true;
+            }
+            List<WebElement> input = element.findElements(By.cssSelector("input[type='checkbox']"));
+            return !input.isEmpty() && null != input.get(0).getAttribute("checked");
+        }
+        throw new DObjectNotPresentException();
+    }
+
+    public void check() throws Exception {
+        if (isChecked()) return;
+        if (isEnabled()) {
+            clickCheckbox();
+            wait.forAttributeToContain(element, "class", "checkbox-checked");
+            return;
+        }
+        throw new Exception("Checkbox is not enabled");
+    }
+
+    public void uncheck() throws Exception {
+        if (!isChecked()) return;
+        if (isEnabled()) {
+            clickCheckbox();
+            wait.forAttributeToNOTContain(this.element, "class", "checkbox-checked");
+            return;
+        }
+        throw new Exception("Checkbox is not enabled");
+    }
+
+    private void clickCheckbox() {
+        try {
+            input.click();
+        } catch (ElementNotInteractableException ex) {
+            // in mat-checkbox the input is actually hidden, and the user has to click on the label to interact with it
+            if (this.labelElement != null)
+                this.labelElement.click();
+        }
+    }
+}
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dobjects/DObjectNotPresentException.java b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dobjects/DObjectNotPresentException.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4fa880193b5a3f42406c3475b0eba5927375c20
--- /dev/null
+++ b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dobjects/DObjectNotPresentException.java
@@ -0,0 +1,4 @@
+package ddsl.dobjects;
+
+public class DObjectNotPresentException extends Exception {
+}
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/LoginPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/LoginPage.java
index 881ee4cc94439c8faca222ed0ee771d31ca73ea2..09094bbb3899702207d770aa33ba700a84fe4647 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/pages/LoginPage.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/LoginPage.java
@@ -16,11 +16,17 @@ import java.util.HashMap;
 public class LoginPage extends DomiSMPPage {
     private final static Logger LOG = LoggerFactory.getLogger(LoginPage.class);
     @FindBy(id = "username_id")
-    private WebElement username;
+    private WebElement usernameInput;
     @FindBy(id = "password_id")
-    private WebElement password;
+    private WebElement passwordInput;
     @FindBy(id = "loginbutton_id")
     private WebElement loginBtn;
+    @FindBy(css = ".mat-mdc-tab-labels > div:nth-child(2)")
+    private WebElement goToResetPasswordTab;
+    @FindBy(id = "reset_username_id")
+    private WebElement resetUsernameInput;
+    @FindBy(id = "resetbutton_id")
+    private WebElement requestResetPasswordBtn;
 
     public LoginPage(WebDriver driver) {
         super(driver);
@@ -35,8 +41,8 @@ public class LoginPage extends DomiSMPPage {
         LOG.debug("Login started " + usr.get("username") + " / " + usr.get("pass"));
 
         goToLoginPage();
-        weToDInput(username).fill(usr.get("username"));
-        weToDInput(password).fill(usr.get("pass"));
+        weToDInput(usernameInput).fill(usr.get("username"));
+        weToDInput(passwordInput).fill(usr.get("pass"));
         weToDButton(loginBtn).click();
 
         try {
@@ -46,9 +52,16 @@ public class LoginPage extends DomiSMPPage {
         } catch (Exception e) {
             LOG.debug("Password expiration popup is not present");
         }
+    }
 
+    public String resetPassword(String user) {
+        LOG.debug("Resetting password for : " + user);
+        goToLoginPage();
 
+        weToDButton(goToResetPasswordTab).click();
+        weToDInput(resetUsernameInput).fill(user);
+        weToDButton(requestResetPasswordBtn).click();
+        return getAlertArea().getAlertMessage();
     }
-
 }
 
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/ResetCredentialsPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/ResetCredentialsPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5b5367a323a58a2f738cbdc649f5b612c79d8fc
--- /dev/null
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/ResetCredentialsPage.java
@@ -0,0 +1,62 @@
+package pages;
+
+import ddsl.DomiSMPPage;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import pages.systemSettings.UsersPage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ResetCredentialsPage extends DomiSMPPage {
+    private final static Logger LOG = LoggerFactory.getLogger(UsersPage.class);
+    @FindBy(id = "reset_username_id")
+    private WebElement usernameInput;
+    @FindBy(id = "np_id")
+    private WebElement newPasswordInput;
+    @FindBy(id = "cnp_id")
+    private WebElement confirmNewPasswordInput;
+    @FindBy(id = "closeDialogButton")
+    private WebElement canceBtn;
+    @FindBy(id = "changeCurrentUserPasswordButton")
+    private WebElement setNewPasswordBtn;
+    @FindBy(css = ".smp-field-error")
+    private List<WebElement> fieldsError;
+
+
+    public ResetCredentialsPage(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
+    }
+
+
+    public void fillChangePasswordFields(String username, String newPassword, String confirmNewPassword) {
+        weToDInput(usernameInput).fill(username, true);
+        weToDInput(newPasswordInput).fill(newPassword, true);
+        weToDInput(confirmNewPasswordInput).fill(confirmNewPassword);
+    }
+
+    public void clickSetChangePasswordButton() {
+        if (weToDButton(setNewPasswordBtn).isEnabled()) {
+            weToDButton(setNewPasswordBtn).click();
+        } else {
+            LOG.error("Set/Change password button is disabled");
+        }
+    }
+
+    public List<String> getFieldErrorMessage() {
+        ArrayList<String> fieldErrors = new ArrayList<>();
+        if (!fieldsError.isEmpty()) {
+            fieldsError.forEach(error -> {
+                fieldErrors.add(error.getText());
+            });
+        }
+        return fieldErrors;
+    }
+
+}
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editDomainsPage/EditDomainsPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editDomainsPage/EditDomainsPage.java
index 0e50e00bd975998e4eed058b94f05067b7b665d7..6da79d384077db65236b2448d1a3555426b1e395 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editDomainsPage/EditDomainsPage.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editDomainsPage/EditDomainsPage.java
@@ -4,6 +4,8 @@ import ddsl.CommonPageWithTabsAndGrid;
 import org.openqa.selenium.WebDriver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import pages.systemSettings.domainsPage.ConfigurationTab.ConfigurationTab;
+
 /**
  * Page object for the Edit domains page. This contains the locators of the page and the methods for the behaviour of the page
  */
@@ -20,6 +22,12 @@ public class EditDomainsPage extends CommonPageWithTabsAndGrid {
         return new DomainMembersTab(driver);
     }
 
+    public ConfigurationTab getConfigurationTab() {
+
+        return new ConfigurationTab(driver);
+    }
+
+
     public GroupTab getGroupTab() {
 
         return new GroupTab(driver);
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editGroupsPage/CreateResourceDetailsDialog.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editGroupsPage/CreateResourceDetailsDialog.java
index 01972941a72add59ff6ed56b915e422368fabb9c..6986c20a10106c3c60a22e52b77d6f41ccef9879 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editGroupsPage/CreateResourceDetailsDialog.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editGroupsPage/CreateResourceDetailsDialog.java
@@ -46,12 +46,17 @@ public class CreateResourceDetailsDialog extends DComponent {
     }
 
     public Boolean tryClickOnSave() {
-        wait.forElementToBeClickable(saveBtn);
-        if (weToDButton(saveBtn).isEnabled()) {
-            weToDButton(saveBtn).click();
-            return true;
-        } else {
+        try {
+            wait.forElementToBeClickable(saveBtn);
+            if (weToDButton(saveBtn).isEnabled()) {
+                weToDButton(saveBtn).click();
+                return true;
+            } else {
+                return false;
+            }
+        } catch (Exception e) {
             return false;
         }
     }
+
 }
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/ConfigurationTab/ConfigurationTab.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/ConfigurationTab/ConfigurationTab.java
new file mode 100644
index 0000000000000000000000000000000000000000..499666615934c1cf097f4514c749f290e9c025ef
--- /dev/null
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/ConfigurationTab/ConfigurationTab.java
@@ -0,0 +1,62 @@
+package pages.systemSettings.domainsPage.ConfigurationTab;
+
+import ddsl.dcomponents.DComponent;
+import ddsl.dcomponents.Grid.GridWithoutPagination;
+import ddsl.dcomponents.commonComponents.domanPropertyEditDialog.DomainPropertyEditDialog;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Page object for the Configuration tab of Domains/Edit Domains page. This contains the locators of the page and the methods for the behaviour of the page
+ */
+public class ConfigurationTab extends DComponent {
+    private final static Logger LOG = LoggerFactory.getLogger(ConfigurationTab.class);
+
+    @FindBy(css = "[class~=smp-column-data]")
+    public WebElement rightPanel;
+    @FindBy(id = "saveButton")
+    public WebElement saveBtn;
+
+
+    public ConfigurationTab(WebDriver driver) {
+        super(driver);
+        PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
+    }
+
+    private GridWithoutPagination getConfigurationGrid() {
+        return new GridWithoutPagination(driver, rightPanel);
+    }
+
+    public DomainPropertyEditDialog openProperty(String propertyName) {
+        getConfigurationGrid().searchAndDoubleClickElementInColumn("Domain property", propertyName);
+        return new DomainPropertyEditDialog(driver);
+    }
+
+    public void saveChanges() {
+        try {
+            weToDButton(saveBtn).click();
+        } catch (Exception e) {
+            LOG.error("Could not save changes on Configuration tab!");
+        }
+    }
+
+    public Boolean isSystemValueUsed(String propertyName) {
+        WebElement currentCell = getConfigurationGrid().searchAndGetPrecedentSiblingElementInColumn("Domain property", propertyName);
+        //check if previous sibling is checked
+        return currentCell.findElement(By.cssSelector("mat-checkbox")).getAttribute("class").contains("checkbox-checked");
+    }
+
+    public String getCurrentPropertyValue(String propertyName) {
+        WebElement currentCell = getConfigurationGrid().searchAndGetFollowingSiblingElementInColumn("Domain property", propertyName);
+        //check if previous sibling is checked
+        return currentCell.getText();
+    }
+
+
+}
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java
index 9c95a1c4a9b44a06e332455794dcdb0e79b564f6..0d4837592d59396697c6bd8721100dd127c775b7 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java
@@ -7,14 +7,17 @@ import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import pages.systemSettings.domainsPage.ConfigurationTab.ConfigurationTab;
 
 /**
  * Page object for the Users page. This contains the locators of the page and the methods for the behaviour of the page
  */
 public class DomainsPage extends CommonPageWithTabsAndGrid {
     private final static Logger LOG = LoggerFactory.getLogger(DomainsPage.class);
+
     @FindBy(css = "smp-warning-panel span")
     private WebElement warningLabel;
+
     public DomainsPage(WebDriver driver) {
         super(driver);
         LOG.debug("Loading Domains page.");
@@ -24,11 +27,6 @@ public class DomainsPage extends CommonPageWithTabsAndGrid {
         return new DButton(driver, addBtn);
     }
 
-    public ResourceTab getResourceTab() {
-
-        return new ResourceTab(driver);
-    }
-
     public DomainTab getDomainTab() {
 
         return new DomainTab(driver);
@@ -44,6 +42,11 @@ public class DomainsPage extends CommonPageWithTabsAndGrid {
         return new MembersTab(driver);
     }
 
+    public ConfigurationTab getConfigurationTab() {
+
+        return new ConfigurationTab(driver);
+    }
+
     public String getDomainWarningMessage() {
         return warningLabel.getText();
     }
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/rest/DomainClient.java b/domismp-tests/domismp-tests-ui/src/main/java/rest/DomainClient.java
index 5381669def0680176c8490273202b4ac8559f1af..c4e1161aff8ab5c0f3798ef7c2c9d6c73df4a8bd 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/rest/DomainClient.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/rest/DomainClient.java
@@ -30,11 +30,12 @@ public class DomainClient extends BaseRestClient {
     public DomainModel createDomain(DomainModel domainModel) {
 
         JSONObject domainJson = new JSONObject(domainModel);
+        startSession();
         String createDomainPath = RestServicePaths.getCreateDomainPath(TestRunData.getInstance().getUserId());
         ClientResponse response = jsonPUT(resource.path(createDomainPath), domainJson);
         if (response.getStatus() != 200) {
             try {
-                throw new SMPRestException("Could not create domain", response);
+                throw new SMPRestException("Could not create domain", response.getStatus(), response.getEntity(String.class));
             } catch (SMPRestException e) {
                 throw new RuntimeException(e);
             }
@@ -51,7 +52,7 @@ public class DomainClient extends BaseRestClient {
         ClientResponse response = jsonPUT(resource.path(addMemberPath), membersJson);
         if (response.getStatus() != 200) {
             try {
-                throw new SMPRestException("Could not create domain", response);
+                throw new SMPRestException("Could not create domain", response.getStatus(), response.getEntity(String.class));
             } catch (SMPRestException e) {
                 throw new RuntimeException(e);
             }
@@ -72,7 +73,7 @@ public class DomainClient extends BaseRestClient {
         ClientResponse response = requestPOST(resource.path(addMemberPath), resourceTypes);
         if (response.getStatus() != 200) {
             try {
-                throw new SMPRestException("Could not add resource!", response);
+                throw new SMPRestException("Could not add resource!", response.getStatus(), response.getEntity(String.class));
             } catch (SMPRestException e) {
                 throw new RuntimeException(e);
             }
@@ -87,7 +88,7 @@ public class DomainClient extends BaseRestClient {
         ClientResponse response = jsonPUT(resource.path(createGroupPath), groupJson);
         if (response.getStatus() != 200) {
             try {
-                throw new SMPRestException("Could not create group!", response);
+                throw new SMPRestException("Could not create group!", response.getStatus(), response.getEntity(String.class));
             } catch (SMPRestException e) {
                 throw new RuntimeException(e);
             }
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/rest/InbucketRestClient.java b/domismp-tests/domismp-tests-ui/src/main/java/rest/InbucketRestClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c72b1140fd91c18b01a91f1d0b212b184b0d8c5
--- /dev/null
+++ b/domismp-tests/domismp-tests-ui/src/main/java/rest/InbucketRestClient.java
@@ -0,0 +1,73 @@
+package rest;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.WebResource;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import utils.TestRunData;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.testng.AssertJUnit.fail;
+
+public class InbucketRestClient {
+    private final static Logger LOG = LoggerFactory.getLogger(InbucketRestClient.class);
+
+    protected TestRunData data = TestRunData.getInstance();
+    protected Client client = Client.create();
+    public WebResource resource = client.resource(TestRunData.getInstance().getPropertyValue(TestRunData.TestEnvironmentProperty.MAIL_URL));
+
+    private JSONArray getAllMessagesOfUser(String userName) {
+        try {
+            Thread.sleep(100);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+        WebResource.Builder builder = resource.path("api/v1/mailbox/" + userName).getRequestBuilder();
+        String rawStringResponse = builder.get(String.class);
+        JSONArray jsonArray = new JSONArray(rawStringResponse);
+
+        LOG.debug("All messages of users have been retrieved!");
+        return jsonArray;
+    }
+
+    public JsonObject getlastmessageOfUser(String userName) {
+        JSONArray getAllMessagesOfUser = getAllMessagesOfUser(userName);
+        JSONObject lastmessage = (JSONObject) getAllMessagesOfUser.get(getAllMessagesOfUser.length() - 1);
+        String lastmessageId = lastmessage.get("id").toString();
+        WebResource.Builder builder = resource.path("serve/mailbox/" + userName + "/" + lastmessageId).getRequestBuilder();
+        String rawStringResponse = builder.get(String.class);
+        JsonObject jsonArray = JsonParser.parseString(rawStringResponse).getAsJsonObject();
+        LOG.debug("Last email of user has been retrieved!");
+        return jsonArray;
+    }
+
+
+    public String getResetPasswordTokenFromLastEmailOfUser(String userName) {
+        JsonObject lastMessageArray = getlastmessageOfUser(userName);
+        if (lastMessageArray.isEmpty()) {
+            LOG.error("Last email of user is empty!");
+            fail();
+        }
+
+        String subject = lastMessageArray.get("subject").toString();
+        if (subject.contains("Request for reset of the Credential")) {
+            String text = lastMessageArray.get("text").toString();
+            String regex = "http://[^\\s\"<>]+(?=\\s|<|$)";
+            Pattern pattern = Pattern.compile(regex);
+            Matcher matcher = pattern.matcher(text);
+            while (matcher.find()) {
+                return matcher.group(0);
+            }
+            LOG.error("Reset URL found in the email: " + text);
+            throw new NullPointerException("Reset URL found in the email: " + text);
+        }
+        throw new NullPointerException("Last email is not a reset email. The current subject found is: " + subject);
+    }
+
+}
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/rest/SMPRestException.java b/domismp-tests/domismp-tests-ui/src/main/java/rest/SMPRestException.java
index b4b70374fb0295a44241819d490abf494c6ebf17..84cb1cf4607fac674afe4a325467f62343b8b234 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/rest/SMPRestException.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/rest/SMPRestException.java
@@ -18,4 +18,15 @@ public class SMPRestException extends Exception {
                 "CONTENT = " + response.getEntity(String.class)));
     }
 
+    public SMPRestException(String message, int responseStatus, String responseContent) {
+        super(String.format("%s \n %s \n %s \n",
+                message,
+                "STATUS = " + responseStatus,
+                "CONTENT = " + responseContent));
+        log.error(String.format("%s \n %s \n %s \n",
+                message,
+                "STATUS = " + responseStatus,
+                "CONTENT = " + responseContent));
+    }
+
 }
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/utils/TestRunData.java b/domismp-tests/domismp-tests-ui/src/main/java/utils/TestRunData.java
index 70c7ad78fee218f2ab9eac44e550bfcc5828836d..ec1b8b3e1cbd090f7178ca194ae9584a59dd3b54 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/utils/TestRunData.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/utils/TestRunData.java
@@ -41,6 +41,8 @@ public class TestRunData {
 
         TEST_DATA_PASSWORD_DEFAULT("test.data.password.default", "QW!@QW!@qw12qw12", "Default password when creating new users"),
         TEST_DATA_PASSWORD_NEW("test.data.password.new", "Test1234!Test1234!", "New Password when changing users password "),
+        MAIL_URL("test.mail.url", "http://localhost:9005/", "Webdriver type: chrome, gecko, edge"),
+
         ;
 
         String propertyName;
@@ -78,12 +80,11 @@ public class TestRunData {
 
         @Override
         public String toString() {
-            final StringBuffer sb = new StringBuffer("TestEnvironmentProperty {");
-            sb.append("propertyName='").append(propertyName).append('\'');
-            sb.append(", defaultValue='").append(defaultValue).append('\'');
-            sb.append(", description='").append(description).append('\'');
-            sb.append('}');
-            return sb.toString();
+            String sb = "TestEnvironmentProperty {" + "propertyName='" + propertyName + '\'' +
+                    ", defaultValue='" + defaultValue + '\'' +
+                    ", description='" + description + '\'' +
+                    '}';
+            return sb;
         }
     }
 
diff --git a/domismp-tests/domismp-tests-ui/src/main/resources/myLocal.properties b/domismp-tests/domismp-tests-ui/src/main/resources/myLocal.properties
index 91ecbb1a2a4469166b90b7c561e58ed6e3c89360..39f6ea0c174591df02fb7859c62c08da55d4ad39 100644
--- a/domismp-tests/domismp-tests-ui/src/main/resources/myLocal.properties
+++ b/domismp-tests/domismp-tests-ui/src/main/resources/myLocal.properties
@@ -8,6 +8,7 @@ test.webdriver.type=firefox
 test.webdriver.headless=false
 test.application.ui.url=http://eulogin.protected.smp.local:8982/smp/ui
 test.sml.url=http://localhost:8982/edelivery-sml/listDNS
+test.mail.url=http://localhost:9005/
 test.timeout.long=15
 test.timeout.short=5
 test.reports.folder=./reports/
diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java
index 782e0272cdd97512f33f4d020667abf9150eb2be..e7dde0bd0c4d018e032c69b7031de2f19099e139 100644
--- a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java
+++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java
@@ -1,7 +1,9 @@
 package domiSMPTests.ui;
 
 import ddsl.DomiSMPPage;
+import ddsl.dcomponents.commonComponents.domanPropertyEditDialog.DomainPropertyEditDialog;
 import ddsl.enums.Pages;
+import ddsl.enums.ResourceTypes;
 import ddsl.enums.ResponseCertificates;
 import domiSMPTests.SeleniumTest;
 import org.openqa.selenium.WebElement;
@@ -13,7 +15,12 @@ import pages.SmlPage;
 import pages.administration.editDomainsPage.EditDomainsPage;
 import pages.systemSettings.domainsPage.DomainsPage;
 import rest.models.DomainModel;
+import rest.models.MemberModel;
 import rest.models.UserModel;
+import utils.TestRunData;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * This class has the tests against Domains Page
@@ -173,4 +180,79 @@ public class DomainsPgTests extends SeleniumTest {
         soft.assertAll();
     }
 
+
+    @Test(description = "DOM-19 - Domain admins are able to change default properties for domains")
+    public void systemAdminsAreAbleToChangeDefaultPropertiesForDomains() throws Exception {
+        DomainModel domainModel = DomainModel.generatePublicDomainModelWithSML();
+
+        MemberModel superMember = new MemberModel();
+        superMember.setUsername(TestRunData.getInstance().getAdminUsername());
+        superMember.setRoleType("ADMIN");
+
+        //create domain
+        domainModel = rest.domains().createDomain(domainModel);
+
+        //  rest.domains().addMembersToDomain(domainModel, adminMember);
+        rest.domains().addMembersToDomain(domainModel, superMember);
+
+        //add resources to domain
+        List<ResourceTypes> resourcesToBeAdded = Arrays.asList(ResourceTypes.OASIS1, ResourceTypes.OASIS3, ResourceTypes.OASIS2);
+        domainModel = rest.domains().addResourcesToDomain(domainModel, resourcesToBeAdded);
+
+        domainsPage.refreshPage();
+        domainsPage
+                .getLeftSideGrid().searchAndClickElementInColumn("Domain code", domainModel.getDomainCode());
+        domainsPage.goToTab("Configuration");
+
+        //Check is modifying boolean values
+        String boolPropertyName = "identifiersBehaviour.scheme.mandatory";
+        DomainPropertyEditDialog domainPropertyEditDialog = domainsPage.getConfigurationTab().openProperty(boolPropertyName);
+        domainPropertyEditDialog.setDomainValue(false);
+        domainPropertyEditDialog.pressOk();
+        domainsPage.getConfigurationTab().saveChanges();
+
+        //verify changes
+        soft.assertFalse(domainsPage.getConfigurationTab().isSystemValueUsed(boolPropertyName), "Property is marked as it's using system value");
+        soft.assertEquals("false", domainsPage.getConfigurationTab().getCurrentPropertyValue(boolPropertyName));
+
+
+        //Verify disabling system property
+        String useDomainProperty = "identifiersBehaviour.ParticipantIdentifierScheme.validationRegex";
+        domainPropertyEditDialog = domainsPage.getConfigurationTab().openProperty(useDomainProperty);
+        domainPropertyEditDialog.disableSystemValue();
+        domainPropertyEditDialog.pressOk();
+        domainsPage.getConfigurationTab().saveChanges();
+        //verify changes
+        soft.assertFalse(domainsPage.getConfigurationTab().isSystemValueUsed(useDomainProperty), "Property is marked as it's using system value");
+
+        //Verify change to enabling system property
+        domainPropertyEditDialog = domainsPage.getConfigurationTab().openProperty(useDomainProperty);
+        domainPropertyEditDialog.enableSystemValue();
+        domainPropertyEditDialog.pressOk();
+        domainsPage.getConfigurationTab().saveChanges();
+        //verify changes
+        soft.assertTrue(domainsPage.getConfigurationTab().isSystemValueUsed(useDomainProperty));
+
+        // String property value
+        String stringProperty = "identifiersBehaviour.caseSensitive.DocumentIdentifierSchemes";
+        String defaultPropertyValue = domainsPage.getConfigurationTab().getCurrentPropertyValue(stringProperty);
+
+        domainPropertyEditDialog = domainsPage.getConfigurationTab().openProperty(stringProperty);
+        domainPropertyEditDialog.setDomainValue("${identifier}${identifier}");
+        domainPropertyEditDialog.pressOk();
+        domainsPage.getConfigurationTab().saveChanges();
+
+        soft.assertFalse(domainsPage.getConfigurationTab().isSystemValueUsed(stringProperty), "Property is marked as it's using system value");
+        soft.assertTrue(domainsPage.getConfigurationTab().getCurrentPropertyValue(stringProperty).equalsIgnoreCase("${identifier}${identifier}"), "Configuration table is not showing updated value");
+
+        //Check if the property value is updated with system value after use system value is enabled
+        domainPropertyEditDialog = domainsPage.getConfigurationTab().openProperty(stringProperty);
+        domainPropertyEditDialog.enableSystemValue();
+        domainPropertyEditDialog.pressOk();
+        domainsPage.getConfigurationTab().saveChanges();
+        soft.assertTrue(domainsPage.getConfigurationTab().getCurrentPropertyValue(stringProperty).equalsIgnoreCase(defaultPropertyValue), "Configuration table is not showing system value");
+
+        soft.assertAll();
+    }
+
 }
diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java
index 4a3e9b535bacc133f21e69f8bcbcc5118062151f..65b6252bf99be7085b387795e08323419acb8e32 100644
--- a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java
+++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java
@@ -1,8 +1,10 @@
 package domiSMPTests.ui;
 
 import ddsl.DomiSMPPage;
+import ddsl.dcomponents.commonComponents.domanPropertyEditDialog.DomainPropertyEditDialog;
 import ddsl.dcomponents.commonComponents.members.InviteMembersWithGridPopup;
 import ddsl.enums.Pages;
+import ddsl.enums.ResourceTypes;
 import domiSMPTests.SeleniumTest;
 import org.openqa.selenium.WebElement;
 import org.testng.annotations.BeforeMethod;
@@ -11,11 +13,13 @@ import org.testng.asserts.SoftAssert;
 import pages.LoginPage;
 import pages.administration.editDomainsPage.CreateGroupDetailsDialog;
 import pages.administration.editDomainsPage.EditDomainsPage;
+import pages.administration.editGroupsPage.CreateResourceDetailsDialog;
 import pages.administration.editGroupsPage.EditGroupsPage;
-import rest.models.DomainModel;
-import rest.models.GroupModel;
-import rest.models.MemberModel;
-import rest.models.UserModel;
+import rest.models.*;
+import utils.TestRunData;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * Test class for Edit domains page tests.
@@ -28,6 +32,10 @@ public class EditDomainsPgTests extends SeleniumTest {
     EditDomainsPage editDomainPage;
     DomainModel domainModel;
     UserModel adminUser;
+    UserModel normalUser;
+    MemberModel memberAdmin;
+    MemberModel memberUser;
+
     SoftAssert soft;
 
     @BeforeMethod(alwaysRun = true)
@@ -35,14 +43,24 @@ public class EditDomainsPgTests extends SeleniumTest {
         soft = new SoftAssert();
         domainModel = DomainModel.generatePublicDomainModelWithSML();
         adminUser = UserModel.generateUserWithADMINrole();
+        normalUser = UserModel.generateUserWithUSERrole();
+
+        memberAdmin = new MemberModel();
+        memberAdmin.setUsername(adminUser.getUsername());
+        memberAdmin.setRoleType("ADMIN");
 
-        MemberModel domainMember = new MemberModel();
-        domainMember.setUsername(adminUser.getUsername());
-        domainMember.setRoleType("ADMIN");
+        memberUser = new MemberModel();
+        memberUser.setUsername(normalUser.getUsername());
+        memberUser.setRoleType("ADMIN");
 
         rest.users().createUser(adminUser);
+        rest.users().createUser(normalUser);
+
         domainModel = rest.domains().createDomain(domainModel);
-        rest.domains().addMembersToDomain(domainModel, domainMember);
+
+        rest.domains().addMembersToDomain(domainModel, memberAdmin);
+        rest.domains().addMembersToDomain(domainModel, memberUser);
+
 
         homePage = new DomiSMPPage(driver);
         loginPage = homePage.goToLoginPage();
@@ -134,4 +152,161 @@ public class EditDomainsPgTests extends SeleniumTest {
         soft.assertEquals(deleteMessage, String.format("Domain group [%s] deleted", groupToBeDeleted.getGroupName()));
         soft.assertAll();
     }
+
+    @Test(description = "EDTDOM-09 Domain admins are able to change default properties for domains")
+    public void domainAdminsAreAbleToChangeDefaultPropertiesForDomains() throws Exception {
+        DomainModel currentDomainModel = DomainModel.generatePublicDomainModelWithSML();
+        //create domain
+        currentDomainModel = rest.domains().createDomain(currentDomainModel);
+        //  rest.domains().addMembersToDomain(domainModel, adminMember);
+        rest.domains().addMembersToDomain(currentDomainModel, memberUser);
+        //add resources to domain
+        List<ResourceTypes> resourcesToBeAdded = Arrays.asList(ResourceTypes.OASIS1, ResourceTypes.OASIS3, ResourceTypes.OASIS2);
+        currentDomainModel = rest.domains().addResourcesToDomain(currentDomainModel, resourcesToBeAdded);
+
+        editDomainPage.logout();
+        //Login with user role which is domain admin
+        loginPage.login(normalUser.getUsername(), data.getNewPassword());
+        editDomainPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
+        editDomainPage
+                .getLeftSideGrid().searchAndClickElementInColumn("Domain code", currentDomainModel.getDomainCode());
+        editDomainPage.goToTab("Configuration");
+
+        //Check is modifying boolean values
+        String boolPropertyName = "identifiersBehaviour.scheme.mandatory";
+        DomainPropertyEditDialog domainPropertyEditDialog = editDomainPage.getConfigurationTab().openProperty(boolPropertyName);
+        domainPropertyEditDialog.setDomainValue(false);
+        domainPropertyEditDialog.pressOk();
+        editDomainPage.getConfigurationTab().saveChanges();
+
+        //verify changes
+        soft.assertFalse(editDomainPage.getConfigurationTab().isSystemValueUsed(boolPropertyName), "Property is marked as it's using system value");
+        soft.assertEquals("false", editDomainPage.getConfigurationTab().getCurrentPropertyValue(boolPropertyName));
+
+
+        //Verify disabling system property
+        String useDomainProperty = "identifiersBehaviour.ParticipantIdentifierScheme.validationRegex";
+        domainPropertyEditDialog = editDomainPage.getConfigurationTab().openProperty(useDomainProperty);
+        domainPropertyEditDialog.disableSystemValue();
+        domainPropertyEditDialog.pressOk();
+        editDomainPage.getConfigurationTab().saveChanges();
+        //verify changes
+        soft.assertFalse(editDomainPage.getConfigurationTab().isSystemValueUsed(useDomainProperty), "Property is marked as it's using system value");
+
+        //Verify change to enabling system property
+        domainPropertyEditDialog = editDomainPage.getConfigurationTab().openProperty(useDomainProperty);
+        domainPropertyEditDialog.enableSystemValue();
+        domainPropertyEditDialog.pressOk();
+        editDomainPage.getConfigurationTab().saveChanges();
+        //verify changes
+        soft.assertTrue(editDomainPage.getConfigurationTab().isSystemValueUsed(useDomainProperty));
+
+        // String property value
+        String stringProperty = "identifiersBehaviour.caseSensitive.DocumentIdentifierSchemes";
+        String defaultPropertyValue = editDomainPage.getConfigurationTab().getCurrentPropertyValue(stringProperty);
+
+        domainPropertyEditDialog = editDomainPage.getConfigurationTab().openProperty(stringProperty);
+        domainPropertyEditDialog.setDomainValue("${identifier}${identifier}");
+        domainPropertyEditDialog.pressOk();
+        editDomainPage.getConfigurationTab().saveChanges();
+
+        soft.assertFalse(editDomainPage.getConfigurationTab().isSystemValueUsed(stringProperty), "Property is marked as it's using system value");
+        soft.assertTrue(editDomainPage.getConfigurationTab().getCurrentPropertyValue(stringProperty).equalsIgnoreCase("${identifier}${identifier}"), "Configuration table is not showing updated value");
+
+        //Check if the property value is updated with system value after use system value is enabled
+        domainPropertyEditDialog = editDomainPage.getConfigurationTab().openProperty(stringProperty);
+        domainPropertyEditDialog.enableSystemValue();
+        domainPropertyEditDialog.pressOk();
+        editDomainPage.getConfigurationTab().saveChanges();
+        soft.assertTrue(editDomainPage.getConfigurationTab().getCurrentPropertyValue(stringProperty).equalsIgnoreCase(defaultPropertyValue), "Configuration table is not showing system value");
+
+        soft.assertAll();
+    }
+
+    @Test(description = "EDTDOM-11 Domain properties values are applied")
+    public void domanPropertiesAreApplied() throws Exception {
+        DomainModel currentDomainModel = DomainModel.generatePublicDomainModelWithSML();
+        GroupModel currentGroupModel = GroupModel.generatePublicGroup();
+        MemberModel superMember = new MemberModel();
+        superMember.setUsername(TestRunData.getInstance().getAdminUsername());
+        superMember.setRoleType("ADMIN");
+
+
+        //create domain
+        currentDomainModel = rest.domains().createDomain(currentDomainModel);
+        rest.domains().addMembersToDomain(currentDomainModel, memberUser);
+        rest.domains().addMembersToDomain(currentDomainModel, superMember);
+
+        //add resources to domain
+        List<ResourceTypes> resourcesToBeAdded = Arrays.asList(ResourceTypes.OASIS1, ResourceTypes.OASIS3, ResourceTypes.OASIS2);
+        currentDomainModel = rest.domains().addResourcesToDomain(currentDomainModel, resourcesToBeAdded);
+
+        //create group for domain
+        currentGroupModel = rest.domains().createGroupForDomain(currentDomainModel, currentGroupModel);
+
+        //add users to groups
+        rest.groups().addMembersToGroup(currentDomainModel, currentGroupModel, memberUser);
+
+        editDomainPage.logout();
+        //Login with user role which is domain admin
+        loginPage.login(normalUser.getUsername(), data.getNewPassword());
+        editDomainPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
+        editDomainPage
+                .getLeftSideGrid().searchAndClickElementInColumn("Domain code", currentDomainModel.getDomainCode());
+        editDomainPage.goToTab("Configuration");
+
+        //Remove resource schema mandatory
+        String boolPropertyName = "identifiersBehaviour.scheme.mandatory";
+        DomainPropertyEditDialog domainPropertyEditDialog = editDomainPage.getConfigurationTab().openProperty(boolPropertyName);
+        domainPropertyEditDialog.setDomainValue(false);
+        domainPropertyEditDialog.pressOk();
+        editDomainPage.getConfigurationTab().saveChanges();
+
+
+        EditGroupsPage editGroupsPage = editDomainPage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_GROUPS);
+        editGroupsPage.selectDomain(currentDomainModel, currentGroupModel);
+        editGroupsPage.goToTab("Resources");
+        CreateResourceDetailsDialog createResourceDetailsDialog = editGroupsPage.getResourceTab().clickOnCreateNewResource();
+
+        //create resource without Resource schema field
+        ResourceModel resourceModel = ResourceModel.generatePublicResource();
+        resourceModel.setIdentifierScheme("");
+
+
+        createResourceDetailsDialog.fillResourceDetails(resourceModel);
+        createResourceDetailsDialog.tryClickOnSave();
+        soft.assertTrue(editGroupsPage.getResourceTab().getGrid().isValuePresentInColumn("Identifier", resourceModel.getIdentifierValue()), "Resource was not found in the grid");
+
+        //Enable resource schema mandatory
+        editGroupsPage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
+        editDomainPage
+                .getLeftSideGrid().searchAndClickElementInColumn("Domain code", currentDomainModel.getDomainCode());
+        editDomainPage.goToTab("Configuration");
+
+        domainPropertyEditDialog = editDomainPage.getConfigurationTab().openProperty(boolPropertyName);
+        domainPropertyEditDialog.enableSystemValue();
+        domainPropertyEditDialog.pressOk();
+        editDomainPage.getConfigurationTab().saveChanges();
+
+        //verify is schema is  mandatory - using system property value
+        editGroupsPage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_GROUPS);
+        editGroupsPage.selectDomain(currentDomainModel, currentGroupModel);
+        editGroupsPage.goToTab("Resources");
+        createResourceDetailsDialog = editGroupsPage.getResourceTab().clickOnCreateNewResource();
+
+        //create resource without Resource schema field
+        ResourceModel resourceModel2 = ResourceModel.generatePublicResource();
+        resourceModel2.setIdentifierScheme("");
+
+
+        createResourceDetailsDialog.fillResourceDetails(resourceModel2);
+        Boolean saveisDisabled = createResourceDetailsDialog.tryClickOnSave();
+        soft.assertFalse(saveisDisabled, "Save action didn't worked");
+        soft.assertFalse(editGroupsPage.getResourceTab().getGrid().isValuePresentInColumn("Identifier", resourceModel2.getIdentifierValue()), "Resource is  present in the grid");
+
+
+        soft.assertAll();
+    }
+
+
 }
diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java
index b95cc9a3263938e634cb5fada311b550085a2a3f..1f3a86eca16022c9b25b4923b5537748b2af9b27 100644
--- a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java
+++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java
@@ -1,6 +1,7 @@
 package domiSMPTests.ui;
 
 import ddsl.DomiSMPPage;
+import ddsl.dobjects.DWait;
 import ddsl.enums.Pages;
 import domiSMPTests.SeleniumTest;
 import org.openqa.selenium.WebElement;
@@ -8,13 +9,18 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 import org.testng.asserts.SoftAssert;
 import pages.LoginPage;
+import pages.ResetCredentialsPage;
 import pages.systemSettings.UsersPage;
+import rest.InbucketRestClient;
 import rest.models.UserModel;
 
+import java.util.List;
+
 public class UsersPgTests extends SeleniumTest {
     SoftAssert soft;
     DomiSMPPage homePage;
     LoginPage loginPage;
+    InbucketRestClient restClient = new InbucketRestClient();
 
     @BeforeMethod(alwaysRun = true)
     public void beforeTest(){
@@ -67,4 +73,186 @@ public class UsersPgTests extends SeleniumTest {
         soft.assertEquals(alertMessage, "Invalid request [CreateUser]. Error: User with username [" + adminNewUserData.getUsername() + "] already exists!!");
         soft.assertAll();
     }
+
+    @Test(description = "LGN-32 - User is able to reset password")
+    public void userIsAbleToResetHisPassword() throws Exception {
+
+        UserModel newAdminUser = UserModel.generateUserWithADMINrole();
+        UserModel newNormalUser = UserModel.generateUserWithUSERrole();
+
+        String adminUserId = rest.users().createUser(newAdminUser).getString("userId");
+        String normalUserId = rest.users().createUser(newNormalUser).getString("userId");
+
+        rest.users().changePassword(adminUserId, data.getNewPassword());
+        rest.users().changePassword(normalUserId, data.getNewPassword());
+
+        loginPage.login(newAdminUser.getUsername(), data.getNewPassword());
+        try {
+            homePage.logout();
+
+        } catch (Exception e) {
+            soft.assertTrue(false, "User is not logged in!");
+        }
+        //Reset admin password
+        String message = loginPage.resetPassword(newAdminUser.getUsername());
+        soft.assertEquals(message, "A confirmation email has been sent to your registered email address for user [" + newAdminUser.getUsername() + "]. Please follow the instructions in the email to complete the account reset process. If you did not receive mail try later or contact administrator");
+        String emailUsername = newAdminUser.getEmailAddress().substring(0, 14);
+
+        //Retrieve reset URL
+        String resetURL = restClient.getResetPasswordTokenFromLastEmailOfUser(emailUsername);
+        driver.get(resetURL);
+
+        //Reset password for Admin
+        ResetCredentialsPage resetCredentialsPage = new ResetCredentialsPage(driver);
+        String newPasswordAfterReset = "Qwe!@#123412341234";
+        resetCredentialsPage.fillChangePasswordFields(newAdminUser.getUsername(), newPasswordAfterReset, newPasswordAfterReset);
+        resetCredentialsPage.clickSetChangePasswordButton();
+
+        //Login with new password for Admin
+        soft.assertTrue(loginPage.getAlertArea().getAlertMessage().contains("Password has been reset successfully. Please login with new password"), "Reset password message didn't appear");
+        loginPage.login(newAdminUser.getUsername(), newPasswordAfterReset);
+        try {
+            homePage.logout();
+
+        } catch (Exception e) {
+            soft.assertTrue(false, "User is not logged in!");
+        }
+
+        //Reset password User Role password
+        message = loginPage.resetPassword(newNormalUser.getUsername());
+        soft.assertEquals(message, "A confirmation email has been sent to your registered email address for user [" + newNormalUser.getUsername() + "]. Please follow the instructions in the email to complete the account reset process. If you did not receive mail try later or contact administrator");
+        String emailUserRoleUsername = newNormalUser.getEmailAddress().substring(0, 14);
+
+        //Retrieve reset URL
+        String resetURLUserRole = restClient.getResetPasswordTokenFromLastEmailOfUser(emailUserRoleUsername);
+        driver.get(resetURLUserRole);
+
+        //Reset password for User
+        resetCredentialsPage = new ResetCredentialsPage(driver);
+        newPasswordAfterReset = "Qwe!@#123412341234";
+        resetCredentialsPage.fillChangePasswordFields(newNormalUser.getUsername(), newPasswordAfterReset, newPasswordAfterReset);
+        resetCredentialsPage.clickSetChangePasswordButton();
+
+        //Login with new password for User
+        soft.assertTrue(loginPage.getAlertArea().getAlertMessage().contains("Password has been reset successfully. Please login with new password"), "Reset password message didn't appear");
+        loginPage.login(newNormalUser.getUsername(), newPasswordAfterReset);
+        try {
+            homePage.logout();
+
+        } catch (Exception e) {
+            soft.assertTrue(false, "User is not logged in!");
+        }
+        soft.assertAll();
+    }
+
+    @Test(description = "LGN-34 - Creating a new reset password token invalids previous tokens")
+    public void creatingANewResetPasswordTokenInvalidatesPreviousTokens() throws Exception {
+
+        UserModel newNormalUser = UserModel.generateUserWithUSERrole();
+        String normalUserId = rest.users().createUser(newNormalUser).getString("userId");
+        rest.users().changePassword(normalUserId, data.getNewPassword());
+
+
+        //Reset password User Role password
+        String message = loginPage.resetPassword(newNormalUser.getUsername());
+        soft.assertEquals(message, "A confirmation email has been sent to your registered email address for user [" + newNormalUser.getUsername() + "]. Please follow the instructions in the email to complete the account reset process. If you did not receive mail try later or contact administrator");
+        String emailUserRoleUsername = newNormalUser.getEmailAddress().substring(0, 14);
+
+        //Retrieve reset URL
+        String firstResetURL = restClient.getResetPasswordTokenFromLastEmailOfUser(emailUserRoleUsername);
+
+        //Reset password again
+        loginPage.resetPassword(newNormalUser.getUsername());
+        String secondResetUrl = restClient.getResetPasswordTokenFromLastEmailOfUser(emailUserRoleUsername);
+
+        //Check if 1st token is invalid
+        driver.get(firstResetURL);
+        soft.assertEquals(loginPage.getAlertArea().getAlertMessage(), "The reset token it is invalid or not active any more. Please try to reset your password again.", "Invalid token error message was not found");
+        soft.assertEquals(loginPage.getBreadcrump().getCurrentPage(), "Login");
+
+        //Check if 2nd token is invalid
+
+        driver.get(secondResetUrl);
+
+        ResetCredentialsPage resetCredentialsPage = new ResetCredentialsPage(driver);
+        String newPasswordAfterReset = "Qwe!@#123412341234";
+        resetCredentialsPage.fillChangePasswordFields(newNormalUser.getUsername(), newPasswordAfterReset, newPasswordAfterReset);
+        resetCredentialsPage.clickSetChangePasswordButton();
+
+        //Login with new password for User
+        new DWait(driver).equals(loginPage.getAlertArea());
+        soft.assertTrue(loginPage.getAlertArea().getAlertMessage().contains("Password has been reset successfully. Please login with new password"), "Reset password message didn't appear");
+        loginPage.login(newNormalUser.getUsername(), newPasswordAfterReset);
+        try {
+            homePage.logout();
+
+        } catch (Exception e) {
+            soft.assertTrue(false, "User is not logged in!");
+        }
+        soft.assertAll();
+    }
+
+    @Test(description = "LGN-35 - Reset password screen applies password complexity")
+    public void resetPasswordScreenAppliesPasswordComplexity() throws Exception {
+
+        UserModel user = UserModel.generateUserWithUSERrole();
+        String normalUserId = rest.users().createUser(user).getString("userId");
+        rest.users().changePassword(normalUserId, data.getNewPassword());
+
+
+        //Reset password User Role password
+        String message = loginPage.resetPassword(user.getUsername());
+        soft.assertEquals(message, "A confirmation email has been sent to your registered email address for user [" + user.getUsername() + "]. Please follow the instructions in the email to complete the account reset process. If you did not receive mail try later or contact administrator");
+        String emailUserRoleUsername = user.getEmailAddress().substring(0, 14);
+
+        //Retrieve reset URL
+        String resetUrl = restClient.getResetPasswordTokenFromLastEmailOfUser(emailUserRoleUsername);
+        driver.get(resetUrl);
+
+        ResetCredentialsPage resetCredentialsPage = new ResetCredentialsPage(driver);
+
+        //User is not able to set the same password again
+        resetCredentialsPage.fillChangePasswordFields(user.getUsername(), data.getNewPassword(), data.getNewPassword());
+        resetCredentialsPage.clickSetChangePasswordButton();
+        soft.assertEquals(loginPage.getAlertArea().getAlertMessage(), "Password change failed. Minimum length: 16 characters;Maximum length: 32 characters;At least one letter in lowercase;At least one letter in uppercase;At least one digit;At least one special character;Must not be same as existing password");
+
+        //Check minim length of password
+        driver.navigate().refresh();
+        String minLengthPassword = "!234sdfg*&&^";
+        resetCredentialsPage.fillChangePasswordFields(user.getUsername(), minLengthPassword, minLengthPassword);
+        List<String> errors = resetCredentialsPage.getFieldErrorMessage();
+        soft.assertEquals(errors.size(), 1);
+        soft.assertEquals(errors.get(0), "Minimum length: 16 characters;Maximum length: 32 characters;At least one letter in lowercase;At least one letter in uppercase;At least one digit;At least one special character;Must not be same as existing password");
+
+        //Check special character of password
+        driver.navigate().refresh();
+        String specialCharacterPassword = "QWSQWWqw12qw1212";
+        errors.clear();
+        resetCredentialsPage.fillChangePasswordFields(user.getUsername(), specialCharacterPassword, specialCharacterPassword);
+        errors = resetCredentialsPage.getFieldErrorMessage();
+        soft.assertEquals(errors.size(), 1, "Special character validation does not appear");
+        soft.assertEquals(errors.get(0), "Minimum length: 16 characters;Maximum length: 32 characters;At least one letter in lowercase;At least one letter in uppercase;At least one digit;At least one special character;Must not be same as existing password");
+
+        //Check lower character of password
+        driver.navigate().refresh();
+        String lowerCharacterPassword = "QA!@QA!@QW12QW12";
+        errors.clear();
+        resetCredentialsPage.fillChangePasswordFields(user.getUsername(), lowerCharacterPassword, lowerCharacterPassword);
+        errors = resetCredentialsPage.getFieldErrorMessage();
+        soft.assertEquals(errors.size(), 1, "Lower character validation does not appear");
+        soft.assertEquals(errors.get(0), "Minimum length: 16 characters;Maximum length: 32 characters;At least one letter in lowercase;At least one letter in uppercase;At least one digit;At least one special character;Must not be same as existing password");
+
+
+        //Check upper character of password
+        driver.navigate().refresh();
+        String upperCharacterPassword = "qw!@qw!@qw12qw12";
+        errors.clear();
+        resetCredentialsPage.fillChangePasswordFields(user.getUsername(), upperCharacterPassword, upperCharacterPassword);
+        errors = resetCredentialsPage.getFieldErrorMessage();
+        soft.assertEquals(errors.size(), 1, "Upper character validation does not appear");
+        soft.assertEquals(errors.get(0), "Minimum length: 16 characters;Maximum length: 32 characters;At least one letter in lowercase;At least one letter in uppercase;At least one digit;At least one special character;Must not be same as existing password");
+
+        soft.assertAll();
+    }
+
 }
\ No newline at end of file