diff --git a/README.md b/README.md
index fb9a52a9e538c8b354d579ab637750b460dc21a3..cc6263f2f14f4fd0d5aec47e87f3db0d0cc1543a 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
     <img src="docs/nmaas-logo-blue.png" alt="Logo" width="206" height="48">
   </a>
 
-  <h3 align="center">NMaaS Platform (Back-end)</h3>
+  <h3 align="center">nmaas Platform (Back-end)</h3>
 
   <h4 align="center">Open-source multi-tenant platform for effortless, orchestrated deployment of software tools and applications on top of Kubernetes</h4>
 
@@ -17,13 +17,13 @@
   </p>
 </div>
 
-NMaaS is an open-source framework developed within the GÉANT project for orchestration of on-demand deployment of applications in a multi-tenant Kubernetes-based cloud environment.
+nmaas is an open-source framework developed within the GÉANT project for orchestration of on-demand deployment of applications in a multi-tenant Kubernetes-based cloud environment.
 
-With a simple self-service web interface, NMaaS applications are easily deployed within an isolated tenant environment assigned to a given user institution or team.
+With a simple self-service web interface, nmaas applications are easily deployed within an isolated tenant environment assigned to a given user institution or team.
 
 An application’s lifecycle (configuration updates and re-deployments) is fully managed following a GitOps approach: a specific Git repository is tightly associated with every deployed application and a set of CI/CD pipelines ensure proper re-deployments of the applications following every update on the Git master branch.
 
-NMaaS applications are containerized and deployed using [Helm charts](https://helm.sh/).
+nmaas applications are containerized and deployed using [Helm charts](https://helm.sh/).
 
 
 ## Screenshots
@@ -41,18 +41,18 @@ NMaaS applications are containerized and deployed using [Helm charts](https://he
 ![Screenshot of about page](docs/images/nmaas-about.png "About page")
 
 
-## NMaaS Platform Component 
+## nmaas Platform Component 
 
-[NMaaS Platform](https://github.com/nmaas-platform/nmaas-platform) is the central NMaaS component, exposing a REST API consumed by the NMaaS Portal. It stores the application catalog, the users, as well as information about any deployed applications. Upon a new request for an application deployment, it connects to the NMaaS Helm component and executes the necessary Helm command via an SSH connection. It also communicates with a self-hosted instance of GitLab, in order to provision boilerplate configuration files for the deployed application instances by the users, allowing them to make any additional configuration changes exclusively through Git.
+[nmaas Platform](https://github.com/nmaas-platform/nmaas-platform) is the central nmaas component, exposing a REST API consumed by the nmaas Portal. It stores the application catalog, the users, as well as information about any deployed applications. Upon a new request for an application deployment, it connects to the nmaas Helm component and executes the necessary Helm command via an SSH connection. It also communicates with a self-hosted instance of GitLab, in order to provision boilerplate configuration files for the deployed application instances by the users, allowing them to make any additional configuration changes exclusively through Git.
 
-### NMaaS Platform Development
+### nmaas Platform Development
 
-Explore the NMaaS Platform [development and deployment](docs/DEVELOPMENT.md) documentation.
+Explore the nmaas Platform [development and deployment](docs/DEVELOPMENT.md) documentation.
 
 ## Get in Touch
 
-Interested users can use the following mailing lists to subscribe to news about NMaaS, get in touch with the NMaaS development team, or other NMaaS users:
+Interested users can use the following mailing lists to subscribe to news about nmaas, get in touch with the nmaas development team, or other nmaas users:
 
-- [nmaas-announce@lists.geant.org](mailto:nmaas-announce@lists.geant.org) - public mailing list for announcements shared by the NMaaS team with the community ([subscribe here](https://lists.geant.org/sympa/info/nmaas-announce))
-- [nmaas@lists.geant.org](mailto:nmaas@lists.geant.org) - private mailing list for contacting the NMaaS core team members
-- [nmaas-users@lists.geant.org](mailto:nmaas-users@lists.geant.org) - public mailing lists for discussions related to NMaaS usage and development ([subscribe here](https://lists.geant.org/sympa/info/nmaas-users))
+- [nmaas-announce@lists.geant.org](mailto:nmaas-announce@lists.geant.org) - public mailing list for announcements shared by the nmaas team with the community ([subscribe here](https://lists.geant.org/sympa/info/nmaas-announce))
+- [nmaas@lists.geant.org](mailto:nmaas@lists.geant.org) - private mailing list for contacting the nmaas core team members
+- [nmaas-users@lists.geant.org](mailto:nmaas-users@lists.geant.org) - public mailing lists for discussions related to nmaas usage and development ([subscribe here](https://lists.geant.org/sympa/info/nmaas-users))
diff --git a/build.gradle b/build.gradle
index d6efb0603abfca521e0c63c7f62567e031361319..ba4062fd127dfe6302a9397e3d1c0b653a9ff1da 100644
--- a/build.gradle
+++ b/build.gradle
@@ -13,7 +13,7 @@ repositories {
     mavenCentral()
 }
 
-version = '1.6.2'
+version = '1.6.3-SNAPSHOT'
 group = 'net.geant.nmaas'
 
 java {
diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md
index b65894b9e75d204393afac22be7aec325419a43d..70135398e855324f4ba4c539a8666e973f52a5e5 100644
--- a/docs/DEVELOPMENT.md
+++ b/docs/DEVELOPMENT.md
@@ -1,4 +1,4 @@
-# NMaaS Platform
+# nmaas Platform
 
 ### Technologies
 
@@ -10,48 +10,48 @@
 * Flyway
 * Kubernetes API client from fabric8
 
-### Running NMaaS Platform on local machine
+### Running nmaas Platform on local machine
 
 #### Prerequisites
 Install Java 11 jdk
 
 #### Running the software
-In order to build and run the NMaaS Platform software locally execute *./gradlew bootRun* in project root directory.
+In order to build and run the nmaas Platform software locally execute *./gradlew bootRun* in project root directory.
 By default, the REST API will be exposed at *http://localhost:9000/api*.
 
 
-### Running NMaaS Platform on dedicated server machine
+### Running nmaas Platform on dedicated server machine
 
-To run the NMaaS Platform on a dedicated machine, perform the following steps:
-+ Build the NMaaS Platform with *./gradlew clean build* command project root directory.
+To run the nmaas Platform on a dedicated machine, perform the following steps:
++ Build the nmaas Platform with *./gradlew clean build* command project root directory.
 + Retrieve the output executable *nmaas-platform-x.x.x.jar* file from *build/libs* directory.
-+ Run the NMaaS Platform with *java -jar nmaas-platform-x.x.x.jar* and optional arguments:
++ Run the nmaas Platform with *java -jar nmaas-platform-x.x.x.jar* and optional arguments:
     + *--Dlog4j.configurationFile* specifying the name of logger (Log4j2) configuration file (located in the same directory as the jar file) to be loaded instead of the built-in one. Please be advised that you have to add that parameter before the *-jar* parameter.
     + *--spring.config.name* specifying the name of the properties file (located in the same directory as the jar file) to be loaded instead of the built-in one.
 
-### Swagger documentation of the NMaaS Platform REST API
+### Swagger documentation of the nmaas Platform REST API
 
-NMaaS Platform by default exposes two endpoints documenting the REST API:
+nmaas Platform by default exposes two endpoints documenting the REST API:
 + */api-docs/spec* - Open API specification of the API
 + */api-docs/ui.html* - Swagger UI
   The Swagger endpoint can be disabled in properties file.
 
 
-### Populating NMaaS Platform database with initial data
+### Populating nmaas Platform database with initial data
 
-To initialize the NMaaS Platform database with a default set of data run *src/test/shell/init.sh* script.
+To initialize the nmaas Platform database with a default set of data run *src/test/shell/init.sh* script.
 Script will load the following data:
 + set of content translation data (from *src/test/shell/data/i18n*)
 + set of default email templates (from *src/test/shell/data/mails*)
 + set of default contact form templates (from *src/test/shell/data/form_types*)
-+ set of test NMaaS user domains (from *src/test/shell/data/domains*)
-+ set of NMaaS-compatible application definitions with test subscriptions and comments (from *src/test/shell/data/apps*)
++ set of test nmaas user domains (from *src/test/shell/data/domains*)
++ set of nmaas-compatible application definitions with test subscriptions and comments (from *src/test/shell/data/apps*)
 
 
 ### Complete deployment environment setup for Kubernetes
 
-A dedicated Helm chart has been developed to ease the NMaaS installation inside a Kubernetes cluster.
-This way both the supported network management applications and the NMaaS core components can be installed within a single K8s cluster.
+A dedicated Helm chart has been developed to ease the nmaas installation inside a Kubernetes cluster.
+This way both the supported network management applications and the nmaas core components can be installed within a single K8s cluster.
 For more information please contact the [NMaaS Team](mailto:nmaas-team@lists.geant.org).
 
 
diff --git a/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java b/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java
index 91c5ce2e755727cb08afba37996a49a426940710..a1a7fd31592143be4c744c9e6a6b9b8ad47da2e1 100644
--- a/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java
+++ b/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java
@@ -65,7 +65,7 @@ public class ConfigurationControllerTest extends BaseControllerTestSetup {
     @Test
     void shouldAddNewConfiguration() throws Exception {
         repository.deleteAll();
-        ConfigurationView configuration = new ConfigurationView(true, false, "en", false, false, new ArrayList<>());
+        ConfigurationView configuration = new ConfigurationView(true, false, "en", false, false, new ArrayList<>(), true, true);
         mvc.perform(post(URL_PREFIX)
                 .contentType(MediaType.APPLICATION_JSON)
                 .header("Authorization","Bearer " + getValidTokenForUser(user))
@@ -81,7 +81,7 @@ public class ConfigurationControllerTest extends BaseControllerTestSetup {
     @Test
     void shouldUpdateConfiguration() throws Exception {
         Long id = repository.findAll().get(0).getId();
-        ConfigurationView configuration = new ConfigurationView(true, false, "en", false, false, new ArrayList<>());
+        ConfigurationView configuration = new ConfigurationView(true, false, "en", false, false, new ArrayList<>(), true, true);
         configuration.setId(id);
         mvc.perform(put(URL_PREFIX+"/{id}",id)
                 .contentType(MediaType.APPLICATION_JSON)
diff --git a/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java b/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java
index aafa1f5e4aaee4c346e98b5e6b82f9a6c5e579c4..391174b4992d9c03d239b53d169c7594e3bc4c0a 100644
--- a/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java
+++ b/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java
@@ -3,17 +3,21 @@ package net.geant.nmaas.portal.service.impl;
 import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
 import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
+import net.geant.nmaas.portal.api.configuration.ConfigurationView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentState;
-import net.geant.nmaas.portal.persistent.entity.User;
+import net.geant.nmaas.portal.persistent.entity.Configuration;
 import net.geant.nmaas.portal.persistent.repositories.BulkDeploymentRepository;
+import net.geant.nmaas.portal.persistent.repositories.ConfigurationRepository;
+import net.geant.nmaas.portal.persistent.repositories.UserRepository;
 import net.geant.nmaas.portal.persistent.repositories.UserRoleRepository;
 import net.geant.nmaas.portal.service.BulkDomainService;
 import net.geant.nmaas.portal.service.UserService;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.modelmapper.ModelMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -22,11 +26,9 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import javax.transaction.Transactional;
 import java.util.List;
-import java.util.Optional;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
 
 @ExtendWith(SpringExtension.class)
 @SpringBootTest
@@ -40,34 +42,88 @@ public class BulkDomainServiceIntTest {
     @Autowired
     private BulkDomainService bulkDomainService;
 
-    @MockBean
+    @Autowired
     private UserService userService;
 
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private ConfigurationRepository configurationRepository;
+
+    @Autowired
+    private ModelMapper modelMapper;
+
     @MockBean
     private UserRoleRepository userRoleRepository;
 
     @AfterEach
     void cleanup() {
         bulkDeploymentRepository.deleteAll();
+        userRepository.deleteAll();
     }
 
     @Test
-    void shouldHandleBulkCreationOfDomainWithUniqueCodenames() {
-        CsvDomain csvDomain1 = new CsvDomain("Test.Domain.100", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain2 = new CsvDomain("Test.Domain.101", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain3 = new CsvDomain("Test.Domain.102", "user1", "user1@test.com", null, "group1");
+    void shouldHandleBulkCreationOfUsersWithSsoEnabledFlag() {
+        CsvDomain csvDomain1 = new CsvDomain("test1", "user1", "user1@test.com", null, "group1", true);
+        CsvDomain csvDomain2 = new CsvDomain("test2", "user2", "user2@test.com", null, "group1", false);
+        CsvDomain csvDomain3 = new CsvDomain("test3", "user3", "user3@test.com", null, "group1", true);
         List<CsvDomain> input = List.of(csvDomain1, csvDomain2, csvDomain3);
+
         UserViewMinimal creator = new UserViewMinimal();
         creator.setId(1L);
-        creator.setUsername("testuser");
-        User user = new User("admin");
-        user.setId(1L);
-        user.setEmail("test@test.com");
-        when(userService.findByUsername(any())).thenReturn(Optional.of(user));
-        when(userService.registerBulk(any(), any(), any())).thenReturn(user);
+        creator.setUsername("admin");
 
         BulkDeploymentViewS result = bulkDomainService.handleBulkCreation(input, creator);
 
+        assertEquals(BulkDeploymentState.COMPLETED, result.getState());
+        List<BulkDeployment> bulkDeployments = bulkDeploymentRepository.findAll();
+        assertEquals(1, bulkDeployments.size());
+        BulkDeployment bulkDeployment = bulkDeployments.get(0);
+        assertEquals(1, bulkDeployment.getCreatorId());
+        assertEquals(BulkType.DOMAIN, bulkDeployment.getType());
+        assertEquals(6, bulkDeployment.getEntries().size());
+        assertThat(userRepository.findByEmail("user1@test.com").orElseThrow().getSamlToken()).isEqualTo("user1@test.com");
+        assertThat(userRepository.findByEmail("user2@test.com").orElseThrow().getSamlToken()).isNull();
+        assertThat(userRepository.findByEmail("user3@test.com").orElseThrow().getSamlToken()).isEqualTo("user3@test.com");
+    }
+
+    @Test
+    void shouldHandleBulkCreationOfUsersWithSsoEnabledFlagWhenDisabledGlobally() {
+        CsvDomain csvDomain1 = new CsvDomain("test4", "user1", "user1@test.com", null, "group1", true);
+        CsvDomain csvDomain2 = new CsvDomain("test5", "user2", "user2@test.com", null, "group1", false);
+        List<CsvDomain> input = List.of(csvDomain1, csvDomain2);
+        configurationRepository.save(modelMapper.map(
+                ConfigurationView.builder().id(1L).defaultLanguage("en").bulkDomainsAllowForSsoAccounts(false).build(), Configuration.class));
+        UserViewMinimal creator = new UserViewMinimal();
+        creator.setId(1L);
+        creator.setUsername("admin");
+
+        BulkDeploymentViewS result = bulkDomainService.handleBulkCreation(input, creator);
+
+        assertEquals(BulkDeploymentState.COMPLETED, result.getState());
+        List<BulkDeployment> bulkDeployments = bulkDeploymentRepository.findAll();
+        assertEquals(1, bulkDeployments.size());
+        BulkDeployment bulkDeployment = bulkDeployments.get(0);
+        assertEquals(1, bulkDeployment.getCreatorId());
+        assertEquals(BulkType.DOMAIN, bulkDeployment.getType());
+        assertEquals(4, bulkDeployment.getEntries().size());
+        assertThat(userRepository.findByEmail("user1@test.com").orElseThrow().getSamlToken()).isNull();
+        assertThat(userRepository.findByEmail("user2@test.com").orElseThrow().getSamlToken()).isNull();
+    }
+
+    @Test
+    void shouldHandleBulkCreationOfDomainWithUniqueCodenames() {
+        CsvDomain csvDomain1 = new CsvDomain("Test.Domain.100", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain2 = new CsvDomain("Test.Domain.101", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain3 = new CsvDomain("Test.Domain.102", "user1", "user1@test.com", null, "group1", null);
+        List<CsvDomain> input = List.of(csvDomain1, csvDomain2, csvDomain3);
+
+        UserViewMinimal creator = new UserViewMinimal();
+        creator.setId(1L);
+        creator.setUsername("admin");
+        BulkDeploymentViewS result = bulkDomainService.handleBulkCreation(input, creator);
+
         assertEquals(BulkDeploymentState.COMPLETED, result.getState());
         List<BulkDeployment> bulkDeployments = bulkDeploymentRepository.findAll();
         assertEquals(1, bulkDeployments.size());
@@ -82,28 +138,26 @@ public class BulkDomainServiceIntTest {
 
     @Test
     void shouldHandleBulkCreationOfDomainWithManyUniqueCodenames() {
-        CsvDomain csvDomain1 = new CsvDomain("Test2.Domain#User154", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain2 = new CsvDomain("Test2.Domain#User324", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain3 = new CsvDomain("Test2.Domain#User453", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain4 = new CsvDomain("Test2.Domain#User236", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain5 = new CsvDomain("Test2.Domain#User753", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain6 = new CsvDomain("Test2.Domain#User823", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain7 = new CsvDomain("Test2.Domain#User156", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain8 = new CsvDomain("Test2.Domain#User754", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain9 = new CsvDomain("Test2.Domain#User865", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain10 = new CsvDomain("Test2.Domain#User933", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain11 = new CsvDomain("Test2.Domain#User944", "user1", "user1@test.com", null, "group1");
-        CsvDomain csvDomain12 = new CsvDomain("Test2.Domain#User966", "user1", "user1@test.com", null, "group1");
+        CsvDomain csvDomain1 = new CsvDomain("Test2.Domain#User154", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain2 = new CsvDomain("Test2.Domain#User324", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain3 = new CsvDomain("Test2.Domain#User453", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain4 = new CsvDomain("Test2.Domain#User236", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain5 = new CsvDomain("Test2.Domain#User753", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain6 = new CsvDomain("Test2.Domain#User823", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain7 = new CsvDomain("Test2.Domain#User156", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain8 = new CsvDomain("Test2.Domain#User754", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain9 = new CsvDomain("Test2.Domain#User865", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain10 = new CsvDomain("Test2.Domain#User933", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain11 = new CsvDomain("Test2.Domain#User944", "user1", "user1@test.com", null, "group1", null);
+        CsvDomain csvDomain12 = new CsvDomain("Test2.Domain#User966", "user1", "user1@test.com", null, "group1", null);
         List<CsvDomain> input =
                 List.of(csvDomain1, csvDomain2, csvDomain3, csvDomain4, csvDomain5, csvDomain6,
                         csvDomain7, csvDomain8, csvDomain9, csvDomain10, csvDomain11, csvDomain12);
-        User user = new User("admin");
-        user.setId(1L);
-        user.setEmail("test@test.com");
-        when(userService.findByUsername(any())).thenReturn(Optional.of(user));
-        when(userService.registerBulk(any(), any(), any())).thenReturn(user);
 
-        bulkDomainService.handleBulkCreation(input, new UserViewMinimal());
+        UserViewMinimal creator = new UserViewMinimal();
+        creator.setId(1L);
+        creator.setUsername("admin");
+        bulkDomainService.handleBulkCreation(input, creator);
 
         BulkDeployment bulkDeployment = bulkDeploymentRepository.findAll().get(0);
         assertEquals(24, bulkDeployment.getEntries().size());
diff --git a/src/integrationTest/resources/application.properties b/src/integrationTest/resources/application.properties
index cba386b644c32db8498fd14e6eff98ffbb8db03f..619a3ea9ce203bfd342515637b7dc74403df893c 100644
--- a/src/integrationTest/resources/application.properties
+++ b/src/integrationTest/resources/application.properties
@@ -97,7 +97,7 @@ sso.key=sso_shared_secret_key
 # ------------------ #
 # Helm configuration #
 # ------------------ #
-helm.update.async.enabled=true
+helm.update.async.enabled=false
 helm.update.async.cron=0 * * * * ?
 helm.address=10.134.241.6
 helm.username=nmaas
@@ -106,7 +106,7 @@ helm.repositoryName=nmaas-test
 helm.repositoryUrl=https://nmaas-test.helm.repository
 helm.chartsDirectory=/home/nmaas/charts
 helm.enableTls=false
-# possible values for Helm version are v2 and v3 (if none is provided v3 is used by default)
+# possible values for a Helm version are v2 and v3 (if none is provided, v3 is used by default)
 helm.version=v2
 
 # --------------------- #
@@ -155,5 +155,5 @@ portal.config.defaultLanguage=en
 portal.config.testInstance=false
 portal.config.sendAppInstanceFailureEmails=false
 portal.config.showDomainRegistrationSelector=true
-# string - list of emails with ':' as a separator, e.g. admin1@nmaas.eu;admin2@nmaas.eu
+# string - list of emails with ':' as a separator, e.g., admin1@nmaas.eu;admin2@nmaas.eu
 portal.config.appInstanceFailureEmailList=admin@nmaas.eu
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/CsvDomain.java b/src/main/java/net/geant/nmaas/portal/api/bulk/CsvDomain.java
index f6d0944d4ee8fa368cffd758ce97a55f59ab054c..7d7527a1e20950a2aabd149679a089796231cba7 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/CsvDomain.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/CsvDomain.java
@@ -23,14 +23,17 @@ public class CsvDomain implements BulkCsvProcessorImpl.CsvBean {
     private String email;
 
     @CsvBindByName(column = "networks")
-    private Object DCNetworks;
+    private Object dcnetworks;
 
     @CsvBindByName(column = "domainGroups")
     private String domainGroups;
 
+    @CsvBindByName(column = "ssoEnabled")
+    private Boolean ssoEnabled;
+
     @Override
     public String toString() {
-        return String.format("Bulk deployment for domain %s with admin %s %s. Networks: %s, DomainGroups: %s", domainName, email, adminUserName, DCNetworks, domainGroups);
+        return String.format("Bulk deployment for domain %s with admin %s %s. Networks: %s, DomainGroups: %s", domainName, email, adminUserName, dcnetworks, domainGroups);
     }
 
 }
diff --git a/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationView.java b/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationView.java
index 4d4c9414c548f0b760f5e5a61172c195ca16d905..f29d31edcaf510238c219ecf43a5a9ea6f51d434 100644
--- a/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationView.java
+++ b/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationView.java
@@ -39,13 +39,22 @@ public class ConfigurationView {
     @Builder.Default
     private boolean registrationDomainSelectionEnabled = true;
 
-    public ConfigurationView(boolean maintenance, boolean ssoLoginAllowed, String defaultLanguage, boolean testInstance, boolean sendAppInstanceFailureEmails, List<String> appInstanceFailureEmailList) {
+    @Builder.Default
+    private boolean bulkDomainsAllowForSsoAccounts = true;
+
+    @Builder.Default
+    private boolean bulkDomainsSendEmailForNewAccounts = true;
+
+    public ConfigurationView(boolean maintenance, boolean ssoLoginAllowed, String defaultLanguage, boolean testInstance, boolean sendAppInstanceFailureEmails, List<String> appInstanceFailureEmailList,
+                             boolean bulkDomainsAllowForSsoAccounts, boolean bulkDomainsSendEmailForNewAccounts) {
         this.maintenance = maintenance;
         this.ssoLoginAllowed = ssoLoginAllowed;
         this.defaultLanguage = defaultLanguage;
         this.testInstance = testInstance;
         this.sendAppInstanceFailureEmails = sendAppInstanceFailureEmails;
         this.appInstanceFailureEmailList = appInstanceFailureEmailList;
+        this.bulkDomainsAllowForSsoAccounts = bulkDomainsAllowForSsoAccounts;
+        this.bulkDomainsSendEmailForNewAccounts = bulkDomainsSendEmailForNewAccounts;
     }
 
 }
diff --git a/src/main/java/net/geant/nmaas/portal/persistent/entity/Configuration.java b/src/main/java/net/geant/nmaas/portal/persistent/entity/Configuration.java
index ecb0a2f0b0be59d4455dfc9cbd4232e3710254e1..269809fe2a99e063de2e433ab8272c12cab21a67 100644
--- a/src/main/java/net/geant/nmaas/portal/persistent/entity/Configuration.java
+++ b/src/main/java/net/geant/nmaas/portal/persistent/entity/Configuration.java
@@ -1,6 +1,11 @@
 package net.geant.nmaas.portal.persistent.entity;
 
-import lombok.*;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -15,24 +20,30 @@ import java.util.List;
 @Setter
 @NoArgsConstructor
 @AllArgsConstructor
+@Builder
 public class Configuration {
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
+    @Builder.Default
     @Column(name = "maintenance", nullable = false)
     private boolean maintenance = false;
 
+    @Builder.Default
+
     @Column(nullable = false)
     private boolean ssoLoginAllowed = false;
 
     @Column(nullable = false)
     private String defaultLanguage;
 
+    @Builder.Default
     @Column(nullable = false)
     private boolean testInstance = false;
 
+    @Builder.Default
     @Column(nullable = false)
     private boolean sendAppInstanceFailureEmails = false;
 
@@ -41,16 +52,17 @@ public class Configuration {
     @Setter(value = AccessLevel.PRIVATE)
     private String appInstanceFailureEmails = "";
 
+    @Builder.Default
     @Column(nullable = false)
     private boolean registrationDomainSelectionEnabled = true;
 
-    public Configuration(boolean maintenance, boolean ssoLoginAllowed, String defaultLanguage, boolean testInstance){
-        this.maintenance = maintenance;
-        this.ssoLoginAllowed = ssoLoginAllowed;
-        this.defaultLanguage = defaultLanguage;
-        this.testInstance = testInstance;
+    @Builder.Default
+    @Column(nullable = false)
+    private boolean bulkDomainsAllowForSsoAccounts = true;
 
-    }
+    @Builder.Default
+    @Column(nullable = false)
+    private boolean bulkDomainsSendEmailForNewAccounts = true;
 
     public void setAppInstanceFailureEmailList(List<String> emails) {
         this.appInstanceFailureEmails = String.join(";", emails);
@@ -67,7 +79,9 @@ public class Configuration {
             boolean testInstance,
             boolean sendAppInstanceFailureEmails,
             List<String> appInstanceFailureEmailList,
-            boolean registrationDomainSelectionEnabled
+            boolean registrationDomainSelectionEnabled,
+            boolean bulkDomainsAllowForSsoAccounts,
+            boolean bulkDomainsSendEmailForNewAccounts
     ){
         this.maintenance = maintenance;
         this.ssoLoginAllowed = ssoLoginAllowed;
@@ -76,6 +90,8 @@ public class Configuration {
         this.sendAppInstanceFailureEmails = sendAppInstanceFailureEmails;
         this.setAppInstanceFailureEmailList(appInstanceFailureEmailList);
         this.registrationDomainSelectionEnabled = registrationDomainSelectionEnabled;
+        this.bulkDomainsAllowForSsoAccounts = bulkDomainsAllowForSsoAccounts;
+        this.bulkDomainsSendEmailForNewAccounts = bulkDomainsSendEmailForNewAccounts;
     }
 
 }
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java
index b14732966429676d91f30800fff6e5ccf3706c51..1ccf46895e78ff1f19b49a620aa3c471b493c0b1 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java
@@ -30,6 +30,8 @@ import java.util.stream.Collectors;
 @Log4j2
 public class ApplicationBaseServiceImpl implements ApplicationBaseService {
 
+    public static final String DELETED_MARKER = "_DELETED_";
+
     private final ApplicationBaseRepository appBaseRepository;
     private final TagRepository tagRepository;
     private final ApplicationStatePerDomainService applicationStatePerDomainService;
@@ -91,7 +93,7 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService {
 
     @Override
     public void updateApplicationVersionState(String name, String version, ApplicationState state) {
-        ApplicationBase appBase = findByName(name.contains("_DELETED_") ? name.substring(0, name.indexOf("_DELETED_")) : name);
+        ApplicationBase appBase = findByName(name.contains(DELETED_MARKER) ? name.substring(0, name.indexOf(DELETED_MARKER)) : name);
         appBase.getVersions().stream()
                 .filter(appVersion -> appVersion.getVersion().equals(version))
                 .findAny()
@@ -107,7 +109,7 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService {
     public List<ApplicationBase> findAll() {
         return appBaseRepository.findAll()
                 .stream()
-                .filter(app -> !app.getName().contains("_DELETED_"))
+                .filter(app -> !app.getName().contains(DELETED_MARKER))
                 .collect(Collectors.toList());
     }
 
@@ -142,7 +144,7 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService {
 
     @Override
     public void deleteAppBase(ApplicationBase base) {
-        base.setName(base.getName() + "_DELETED_" + OffsetDateTime.now());
+        base.setName(base.getName() + DELETED_MARKER + OffsetDateTime.now());
         appBaseRepository.save(base);
         domainService.removeAppBaseFromAllDomains(base);
     }
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java
index fa775573aec7cd5d929d52faf62e96a279a2deb6..0ee22aea67ba48b9d9c4064679b873c5e5d28392 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java
@@ -30,10 +30,8 @@ public class BulkCsvProcessorImpl implements BulkCsvProcessor {
 
     public static final String TYPE_CSV = "text/csv";
 
-    private static final List<String> requiredDomainHeader = List.of("domain", "username", "email");
-
-    private static final List<String> requireApplicationHeader = List.of("domain", "instance", "version");
-
+    private static final List<String> REQUIRED_DOMAIN_HEADER = List.of("domain", "username", "email");
+    private static final List<String> REQUIRED_APPLICATION_HEADER = List.of("domain", "instance", "version");
 
     @Override
     public List<CsvDomain> processDomainSpecs(MultipartFile file) throws IOException {
@@ -54,7 +52,7 @@ public class BulkCsvProcessorImpl implements BulkCsvProcessor {
     }
 
     /**
-     * Read CSV file and map it to given class type
+     * Read the CSV file and map it to given class type
      *
      * @param file       an MultipartFile CSV from controller
      * @param outputType an CSVClass created for reader of CSV file (used to map fields)
@@ -105,7 +103,7 @@ public class BulkCsvProcessorImpl implements BulkCsvProcessor {
             throw new ProcessingException("CSV headers are empty");
         }
 
-        if (Arrays.asList(headers).containsAll(requiredDomainHeader) || Arrays.asList(headers).containsAll(requireApplicationHeader)) {
+        if (Arrays.asList(headers).containsAll(REQUIRED_DOMAIN_HEADER) || Arrays.asList(headers).containsAll(REQUIRED_APPLICATION_HEADER)) {
             log.debug("Csv headers are correct");
         } else {
             throw new ProcessingException("CSV headers missing required column");
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java
index 026b945604a70f67178957d838c8786466a0d08f..5c931595007185038b5d37254619a2b61a648870 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java
@@ -7,7 +7,6 @@ import net.geant.nmaas.dcn.deployment.entities.DcnDeploymentState;
 import net.geant.nmaas.dcn.deployment.entities.DcnInfo;
 import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterIngressManager;
 import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
-import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
 import net.geant.nmaas.portal.api.domain.DomainDcnDetailsView;
 import net.geant.nmaas.portal.api.domain.DomainGroupView;
@@ -18,13 +17,13 @@ import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.api.exception.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentEntry;
-import net.geant.nmaas.portal.persistent.entity.BulkDeploymentState;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.persistent.entity.UserRole;
 import net.geant.nmaas.portal.persistent.repositories.BulkDeploymentRepository;
 import net.geant.nmaas.portal.persistent.repositories.UserRoleRepository;
 import net.geant.nmaas.portal.service.BulkDomainService;
+import net.geant.nmaas.portal.service.ConfigurationManager;
 import net.geant.nmaas.portal.service.DomainGroupService;
 import net.geant.nmaas.portal.service.DomainService;
 import net.geant.nmaas.portal.service.UserService;
@@ -48,6 +47,11 @@ import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY
 import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_EMAIL;
 import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_ID;
 import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_NAME;
+import static net.geant.nmaas.portal.api.bulk.BulkType.DOMAIN;
+import static net.geant.nmaas.portal.api.bulk.BulkType.USER;
+import static net.geant.nmaas.portal.persistent.entity.BulkDeploymentState.COMPLETED;
+import static net.geant.nmaas.portal.persistent.entity.BulkDeploymentState.FAILED;
+import static net.geant.nmaas.portal.persistent.entity.BulkDeploymentState.PENDING;
 import static net.geant.nmaas.portal.persistent.entity.Role.ROLE_DOMAIN_ADMIN;
 import static net.geant.nmaas.portal.persistent.entity.Role.ROLE_VL_DOMAIN_ADMIN;
 
@@ -64,6 +68,7 @@ public class BulkDomainServiceImpl implements BulkDomainService {
     private final ModelMapper modelMapper;
 
     private final UserRoleRepository userRoleRepository;
+    private final ConfigurationManager configurationManager;
 
     private final int domainCodenameMaxLength;
 
@@ -75,7 +80,8 @@ public class BulkDomainServiceImpl implements BulkDomainService {
             KubernetesClusterIngressManager kubernetesClusterIngressManager,
             ModelMapper modelMapper,
             UserRoleRepository userRoleRepository,
-            @Value("${nmaas.portal.domains.codename.length}") int domainCodenameMaxLength) {
+            @Value("${nmaas.portal.domains.codename.length}") int domainCodenameMaxLength,
+            ConfigurationManager configurationManager) {
         this.domainService = domainService;
         this.domainGroupService = domainGroupService;
         this.userService = userService;
@@ -84,6 +90,7 @@ public class BulkDomainServiceImpl implements BulkDomainService {
         this.modelMapper = modelMapper;
         this.domainCodenameMaxLength = domainCodenameMaxLength;
         this.userRoleRepository = userRoleRepository;
+        this.configurationManager = configurationManager;
     }
 
     public BulkDeploymentViewS handleBulkCreation(List<CsvDomain> domainSpecs, UserViewMinimal creator) {
@@ -97,27 +104,27 @@ public class BulkDomainServiceImpl implements BulkDomainService {
             // domain groups creation and domain assignment
             createMissingGroupsAndAssignDomain(domainSpec, domain, creator);
             // if user exist update role in domain to domain admin
-            createUserAccountIfNotExists(bulkDeploymentEntries, domainSpec, domain);
+            createUserAccountIfNotExistsOrUpdateIfRequired(bulkDeploymentEntries, domainSpec, domain);
         });
 
         bulkDeployment.setEntries(bulkDeploymentEntries);
-        if (bulkDeploymentEntries.stream().allMatch(entry -> entry.getState().equals(BulkDeploymentState.COMPLETED))) {
-            bulkDeployment.setState(BulkDeploymentState.COMPLETED);
-        } else if (bulkDeploymentEntries.stream().anyMatch(entry -> entry.getState().equals(BulkDeploymentState.FAILED))) {
-            bulkDeployment.setState(BulkDeploymentState.FAILED);
+        if (bulkDeploymentEntries.stream().allMatch(entry -> entry.getState().equals(COMPLETED))) {
+            bulkDeployment.setState(COMPLETED);
+        } else if (bulkDeploymentEntries.stream().anyMatch(entry -> entry.getState().equals(FAILED))) {
+            bulkDeployment.setState(FAILED);
         }
         return modelMapper.map(bulkDeploymentRepository.save(bulkDeployment), BulkDeploymentViewS.class);
     }
 
     private Domain createDomainIfNotExists(List<BulkDeploymentEntry> result, CsvDomain csvDomain) {
-        log.info("Processing csvDomain {}", csvDomain.getDomainName());
+        log.info("Creating {} domain if not yet exists", csvDomain.getDomainName());
         Domain domain = null;
         Optional<Domain> domainFromDb = domainService.findDomain(csvDomain.getDomainName());
         if (domainFromDb.isPresent()) {
             domain = domainFromDb.get();
             result.add(BulkDeploymentEntry.builder()
-                    .type(BulkType.DOMAIN)
-                    .state(BulkDeploymentState.COMPLETED)
+                    .type(DOMAIN)
+                    .state(COMPLETED)
                     .created(false)
                     .details(prepareBulkDomainDeploymentDetailsMap(domain)).build()
             );
@@ -146,8 +153,8 @@ public class BulkDomainServiceImpl implements BulkDomainService {
             domain = domainService.createDomain(domainRequest);
             domainService.storeDcnInfo(prepareDcnInfo(domain));
             result.add(BulkDeploymentEntry.builder()
-                    .type(BulkType.DOMAIN)
-                    .state(BulkDeploymentState.COMPLETED)
+                    .type(DOMAIN)
+                    .state(COMPLETED)
                     .created(true)
                     .details(prepareBulkDomainDeploymentDetailsMap(domain)).build()
             );
@@ -205,25 +212,36 @@ public class BulkDomainServiceImpl implements BulkDomainService {
         });
     }
 
-    private void createUserAccountIfNotExists(List<BulkDeploymentEntry> result, CsvDomain csvDomain, Domain domain) {
+    private void createUserAccountIfNotExistsOrUpdateIfRequired(List<BulkDeploymentEntry> result, CsvDomain csvDomain, Domain domain) {
         if (userService.existsByUsername(csvDomain.getAdminUserName()) || userService.existsByEmail(csvDomain.getEmail())) {
             log.info("User {} with email {} already exists in database", csvDomain.getAdminUserName(), csvDomain.getEmail());
             User user = userService.findByUsername(csvDomain.getAdminUserName()).orElseGet(() -> userService.findByEmail(csvDomain.getEmail()));
+            boolean userUpdateRequired = false;
             if (!userService.hasPrivilege(user, domain, ROLE_DOMAIN_ADMIN)) {
                 user.setNewRoles(ImmutableSet.of(new UserRole(user, domain, ROLE_DOMAIN_ADMIN)));
+                userUpdateRequired = true;
+            }
+            if (configurationManager.getConfiguration().isBulkDomainsAllowForSsoAccounts()) {
+                if (csvDomain.getSsoEnabled() != null && csvDomain.getSsoEnabled()) {
+                    if (StringUtils.isEmpty(user.getSamlToken())) {
+                        user.setSamlToken(csvDomain.getEmail());
+                    }
+                }
+            }
+            if (userUpdateRequired) {
                 userService.update(user);
             }
-            result.add(BulkDeploymentEntry.builder().type(BulkType.USER).state(BulkDeploymentState.COMPLETED).created(false).details(prepareBulkUserCreationDetailsMap(user)).build());
+            result.add(BulkDeploymentEntry.builder().type(USER).state(COMPLETED).created(false).details(prepareBulkUserCreationDetailsMap(user)).build());
         } else {
             User user = userService.registerBulk(csvDomain, domainService.getGlobalDomain().orElseThrow(), domain);
-            result.add(BulkDeploymentEntry.builder().type(BulkType.USER).state(BulkDeploymentState.COMPLETED).created(true).details(prepareBulkUserCreationDetailsMap(user)).build());
+            result.add(BulkDeploymentEntry.builder().type(USER).state(COMPLETED).created(true).details(prepareBulkUserCreationDetailsMap(user)).build());
         }
     }
 
     private static BulkDeployment createBulkDeployment(UserViewMinimal creator) {
         BulkDeployment bulkDeployment = new BulkDeployment();
-        bulkDeployment.setType(BulkType.DOMAIN);
-        bulkDeployment.setState(BulkDeploymentState.PENDING);
+        bulkDeployment.setType(DOMAIN);
+        bulkDeployment.setState(PENDING);
         bulkDeployment.setCreatorId(creator.getId());
         bulkDeployment.setCreationDate(OffsetDateTime.now());
         return bulkDeployment;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java
index 394cc96565317828b5b91a5da235519409fd7b6d..3d9d3d27cbc9e2c6ed9b130c880b5b9c1fdfdb53 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java
@@ -153,14 +153,14 @@ public class UserServiceImpl implements UserService {
 	}
 
 	@Override
-	public User registerBulk(CsvDomain userCSV, Domain globalDomain, Domain domain) {
-		if (userRepository.existsByUsername(userCSV.getAdminUserName()) || userRepository.existsByEmail(userCSV.getEmail())) {
+	public User registerBulk(CsvDomain csvUser, Domain globalDomain, Domain domain) {
+		if (userRepository.existsByUsername(csvUser.getAdminUserName()) || userRepository.existsByEmail(csvUser.getEmail())) {
 			throw new SignupException("User already exists");
 		}
 		String temporaryPassword = RandomStringUtils.random(16);
-		log.info("Creating user {} with temporary password", userCSV.getAdminUserName());
-		User newUser = new User(userCSV.getAdminUserName(), false, passwordEncoder.encode(temporaryPassword), globalDomain, Role.ROLE_GUEST);
-		newUser.setEmail(userCSV.getEmail());
+		log.info("Creating user {} with temporary password", csvUser.getAdminUserName());
+		User newUser = new User(csvUser.getAdminUserName(), false, passwordEncoder.encode(temporaryPassword), globalDomain, Role.ROLE_GUEST);
+		newUser.setEmail(csvUser.getEmail());
 		newUser.setEnabled(true);
 		newUser.setSelectedLanguage(configurationManager.getConfiguration().getDefaultLanguage());
 		newUser.setTermsOfUseAccepted(true);
@@ -168,6 +168,12 @@ public class UserServiceImpl implements UserService {
 		if (domain != null) {
 			newUser.setNewRoles(ImmutableSet.of(new UserRole(newUser, domain, ROLE_DOMAIN_ADMIN)));
 		}
+		// set user saml_token to email address if a sso account requested
+		if (configurationManager.getConfiguration().isBulkDomainsAllowForSsoAccounts()) {
+			if (csvUser.getSsoEnabled() != null && csvUser.getSsoEnabled()) {
+				newUser.setSamlToken(csvUser.getEmail());
+			}
+		}
 		userRepository.save(newUser);
 		return newUser;
 	}
@@ -176,10 +182,9 @@ public class UserServiceImpl implements UserService {
 	public void update(User user) {
 		checkParam(user);
 		checkParam(user.getId());
-				
-		if(!userRepository.existsById(user.getId()))
-			throw new ProcessingException("User (id=" + user.getId() + " does not exists.");
-		
+		if (!userRepository.existsById(user.getId())) {
+			throw new ProcessingException("User with id " + user.getId() + " does not exist");
+		}
 		userRepository.saveAndFlush(user);
 	}
 
@@ -187,14 +192,12 @@ public class UserServiceImpl implements UserService {
 	public void delete(User user) {
 		checkParam(user);
 		checkParam(user.getId());
-		
 		userRepository.delete(user);
 	}
 
 	@Override
 	public void deleteById(Long userId) {
 		checkParam(userId);
-
 		userRepository.deleteById(userId);
 	}
 
diff --git a/src/main/resources/changelog.json b/src/main/resources/changelog.json
index b750240382d4efe513a863561df423c8289fb299..7a2eb81d78c2053a23217d1528fd6c2f9f8a0c44 100644
--- a/src/main/resources/changelog.json
+++ b/src/main/resources/changelog.json
@@ -1,5 +1,21 @@
 {
   "versions" : [
+    {
+      "verNo" : "1.6.3",
+      "date" : "(2024/08/26)",
+      "topic" : [
+        {
+          "title" : "New layout for the portal landing pages",
+          "tags" : "[Enhancement]",
+          "description" : "New landing pages can be customized to reflect the purpose of given nmaas deployment"
+        },
+        {
+          "title" : "Support for SSO accounts provisioned ahead of time",
+          "tags" : "[Enhancement]",
+          "description" : "Bulk user deployment process was enhanced with an option to indicate that given user account should allow for SSO login"
+        }
+      ]
+    },
     {
       "verNo" : "1.6.2",
       "date" : "(2024/07/19)",
diff --git a/src/main/resources/db/migration/common/V1.6.3_20240822_1545__addConfigurationParameters.sql b/src/main/resources/db/migration/common/V1.6.3_20240822_1545__addConfigurationParameters.sql
new file mode 100644
index 0000000000000000000000000000000000000000..650ea0689b9d8525a8c3758a93eb454941f6806a
--- /dev/null
+++ b/src/main/resources/db/migration/common/V1.6.3_20240822_1545__addConfigurationParameters.sql
@@ -0,0 +1,2 @@
+ALTER TABLE configuration ADD COLUMN bulk_domains_allow_for_sso_accounts boolean DEFAULT TRUE;
+ALTER TABLE configuration ADD COLUMN bulk_domains_send_email_for_new_accounts boolean DEFAULT TRUE;
\ No newline at end of file
diff --git a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java
index b682a78af9cc355f12bb617ec055df70ff056b96..9434198c58f31469869abf2ce18f53a91120c4d5 100644
--- a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java
+++ b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java
@@ -354,7 +354,7 @@ public class KubernetesManagerTest {
         manager.deployNmService(DEPLOYMENT_ID);
         ArgumentCaptor<Set<ServiceAccessMethod>> accessMethodsArg = ArgumentCaptor.forClass(HashSet.class);
         verify(repositoryManager, times(1)).updateKServiceAccessMethods(accessMethodsArg.capture());
-        assertEquals(9, accessMethodsArg.getValue().size());
+        assertEquals(10, accessMethodsArg.getValue().size());
         assertTrue(accessMethodsArg.getValue().stream().anyMatch(m ->
                         m.isOfType(ServiceAccessMethodType.DEFAULT)
                         && m.getName().equals("Default")
diff --git a/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java b/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java
index e08d4d093a41ac661235168fc70d127a2067c4a6..f86dc8ba9d6085296aec41e9abdc96aef86fb2ff 100644
--- a/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java
+++ b/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java
@@ -279,7 +279,7 @@ public class NotificationManagerTest {
 
         String external = "external@email.com";
 
-        List<User> adminUsers = this.getAdminUserList();
+        List<User> adminUsers = getAdminUserList();
         List<String> emails = Lists.newArrayList(
                 adminUsers.get(0).getEmail(),
                 external
@@ -287,7 +287,7 @@ public class NotificationManagerTest {
 
         when(userService.findByEmail(adminUsers.get(0).getEmail())).thenReturn(adminUsers.get(0));
         when(userService.findByEmail(external)).thenThrow(new IllegalArgumentException("test message"));
-        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(true, true, "en", true, true, emails));
+        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(true, true, "en", true, true, emails, true, true));
 
         notificationManager.prepareAndSendMail(ma);
 
diff --git a/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java b/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java
index d6a3936e246d42ff0017a0a284da59d2ff94813c..8df5075e776a6f36868a1bcc1e90eb7b39222255 100644
--- a/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java
+++ b/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java
@@ -12,28 +12,43 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 public class ConfigurationTest {
 
     @Test
-    public void shouldCreateConfigurationWithEmailList() {
+    void shouldCreateConfigurationWithEmailList() {
         List<String> emails = Lists.newArrayList("admin@email.com", "user@email.com");
-
-        Configuration configuration = new Configuration(true, true, "en", true, true, emails, true);
-
+        Configuration configuration = Configuration.builder()
+                .maintenance(true)
+                .ssoLoginAllowed(true)
+                .defaultLanguage("en")
+                .testInstance(true)
+                .sendAppInstanceFailureEmails(true)
+                .appInstanceFailureEmails(String.join(";", emails))
+                .registrationDomainSelectionEnabled(true)
+                .bulkDomainsAllowForSsoAccounts(false)
+                .bulkDomainsSendEmailForNewAccounts(false)
+                .build();
         assertEquals(2, configuration.getAppInstanceFailureEmailList().size());
     }
 
     @Test
-    public void bareModelMapperShouldMapBetweenConfigurationAndConfigurationView() {
+    void bareModelMapperShouldMapBetweenConfigurationAndConfigurationView() {
         ModelMapper mm = new ModelMapper();
-
         List<String> emails = Lists.newArrayList("admin@email.com", "user@email.com");
-
-        Configuration configuration = new Configuration(true, true, "en", true, true, emails, true);
+        Configuration configuration = Configuration.builder()
+                .maintenance(true)
+                .ssoLoginAllowed(true)
+                .defaultLanguage("en")
+                .testInstance(true)
+                .sendAppInstanceFailureEmails(true)
+                .appInstanceFailureEmails(String.join(";", emails))
+                .registrationDomainSelectionEnabled(true)
+                .bulkDomainsAllowForSsoAccounts(false)
+                .bulkDomainsSendEmailForNewAccounts(false)
+                .build();
 
         ConfigurationView configurationView = mm.map(configuration, ConfigurationView.class);
-
         assertEquals(2, configurationView.getAppInstanceFailureEmailList().size());
 
         Configuration conf2 = mm.map(configurationView, Configuration.class);
-
         assertEquals(2, conf2.getAppInstanceFailureEmailList().size());
     }
+
 }
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java
index 02915b634b07ddf73002cfc307d9c83522b8080d..1b6b7b62f2a5911e6271a3b1ce5de472881f93ed 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java
@@ -3,30 +3,31 @@ package net.geant.nmaas.portal.service.impl;
 import net.geant.nmaas.dcn.deployment.DcnDeploymentType;
 import net.geant.nmaas.dcn.deployment.entities.DomainDcnDetails;
 import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterIngressManager;
-import net.geant.nmaas.portal.api.auth.SSOAuthController;
 import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
+import net.geant.nmaas.portal.api.configuration.ConfigurationView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
+import net.geant.nmaas.portal.persistent.entity.BulkDeploymentEntry;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentState;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.persistent.repositories.BulkDeploymentRepository;
 import net.geant.nmaas.portal.persistent.repositories.UserRoleRepository;
 import net.geant.nmaas.portal.service.BulkDomainService;
+import net.geant.nmaas.portal.service.ConfigurationManager;
 import net.geant.nmaas.portal.service.DomainGroupService;
 import net.geant.nmaas.portal.service.DomainService;
 import net.geant.nmaas.portal.service.UserService;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.modelmapper.ModelMapper;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.test.context.TestPropertySource;
 
 import java.util.List;
 import java.util.Optional;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
@@ -42,15 +43,15 @@ public class BulkDomainServiceImplTest {
     private final UserService userService = mock(UserService.class);
     private final BulkDeploymentRepository bulkDeploymentRepository = mock(BulkDeploymentRepository.class);
     private final KubernetesClusterIngressManager kubernetesClusterIngressManager = mock(KubernetesClusterIngressManager.class);
-
     private final UserRoleRepository userRoleRepository = mock(UserRoleRepository.class);
+    private final ConfigurationManager configurationManager = mock(ConfigurationManager.class);
 
     final BulkDomainService bulkDomainService = new BulkDomainServiceImpl(domainService, domainGroupService, userService,
-            bulkDeploymentRepository, kubernetesClusterIngressManager, new ModelMapper(),userRoleRepository, 12);;
+            bulkDeploymentRepository, kubernetesClusterIngressManager, new ModelMapper(), userRoleRepository, 12, configurationManager);
 
     @Test
     void shouldHandleBulkCreationWhenAllCreated() {
-        CsvDomain csvDomain = new CsvDomain("domain1", "user1", "user1@test.com", null, "group1");
+        CsvDomain csvDomain = new CsvDomain("domain1", "user1", "user1@test.com", null, "group1", null);
         Domain domain = new Domain(1L,"domain1", "domain1");
         Domain global = new Domain(0L,"GLOBAL", "GLOBAL");
         when(domainService.findDomain(anyString())).thenReturn(Optional.of(domain));
@@ -64,6 +65,7 @@ public class BulkDomainServiceImplTest {
         when(userService.findByUsername("user1")).thenReturn(Optional.of(user));
         when(userService.hasPrivilege((User) any(),any(),any())).thenReturn(true);
         when(bulkDeploymentRepository.save(any())).thenReturn(new BulkDeployment());
+        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView());
 
         bulkDomainService.handleBulkCreation(List.of(csvDomain), testUser());
 
@@ -72,12 +74,15 @@ public class BulkDomainServiceImplTest {
         BulkDeployment bulkDeployment = bulkDeploymentArgumentCaptor.getValue();
         assertEquals(BulkDeploymentState.COMPLETED, bulkDeployment.getState());
         assertEquals(BulkType.DOMAIN, bulkDeployment.getType());
+        assertEquals(2, bulkDeployment.getEntries().size());
+        assertThat(bulkDeployment.getEntries().stream().filter(e -> e.getType() == BulkType.USER).findAny().orElseThrow().getCreated()).isFalse();
+        assertThat(bulkDeployment.getEntries().stream().filter(e -> e.getType() == BulkType.DOMAIN).findAny().orElseThrow().getCreated()).isFalse();
         assertEquals(testUser().getId(), bulkDeployment.getCreatorId());
     }
 
     @Test
-    void shouldHandleBulkCreationWhenDomainsCreated() {
-        CsvDomain csvDomain = new CsvDomain("domain1", "user1", "user1@test.com", null, "group1");
+    void shouldHandleBulkCreationWhenDomainCreated() {
+        CsvDomain csvDomain = new CsvDomain("domain1", "user1", "user1@test.com", null, "group1", null);
         Domain domain = new Domain(1L,"domain1", "domain1");
         domain.setDomainDcnDetails(new DomainDcnDetails(10L, "domain1", true, DcnDeploymentType.MANUAL, null));
         Domain global = new Domain(0L,"GLOBAL", "GLOBAL");
@@ -93,6 +98,7 @@ public class BulkDomainServiceImplTest {
         when(userService.findByUsername("user1")).thenReturn(Optional.of(user));
         when(userService.hasPrivilege((User) any(),any(),any())).thenReturn(true);
         when(bulkDeploymentRepository.save(any())).thenReturn(new BulkDeployment());
+        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView());
 
         bulkDomainService.handleBulkCreation(List.of(csvDomain), testUser());
 
@@ -101,34 +107,45 @@ public class BulkDomainServiceImplTest {
         BulkDeployment bulkDeployment = bulkDeploymentArgumentCaptor.getValue();
         assertEquals(BulkDeploymentState.COMPLETED, bulkDeployment.getState());
         assertEquals(BulkType.DOMAIN, bulkDeployment.getType());
+        assertEquals(2, bulkDeployment.getEntries().size());
+        assertThat(bulkDeployment.getEntries().stream().filter(e -> e.getType() == BulkType.USER).findAny().orElseThrow().getCreated()).isFalse();
+        assertThat(bulkDeployment.getEntries().stream().filter(e -> e.getType() == BulkType.DOMAIN).findAny().orElseThrow().getCreated()).isTrue();
         assertEquals(testUser().getId(), bulkDeployment.getCreatorId());
     }
 
     @Test
     void shouldHandleBulkCreationWhenUserCreated() {
-        CsvDomain csvDomain = new CsvDomain("domain1", "user1", "user1@test.com", null, "group1");
-        Domain domain = new Domain(1L,"domain1", "domain1");
-        domain.setDomainDcnDetails(new DomainDcnDetails(10L, "domain1", true, DcnDeploymentType.MANUAL, null));
+        CsvDomain csvDomain1 = new CsvDomain("domain1", "user1", "user1@test.com", null, "group1", false);
+        CsvDomain csvDomain2 = new CsvDomain("domain2", "user2", "user2@test.com", null, "group1", true);
         Domain global = new Domain(0L,"GLOBAL", "GLOBAL");
-        when(domainService.findDomain(anyString())).thenReturn(Optional.empty());
-        when(domainService.createDomain(any())).thenReturn(domain);
         when(domainService.getGlobalDomain()).thenReturn(Optional.of(global));
+        Domain domain1 = new Domain(1L,"domain1", "domain1");
+        domain1.setDomainDcnDetails(new DomainDcnDetails(10L, "domain1", true, DcnDeploymentType.MANUAL, null));
+        when(domainService.findDomain(domain1.getName())).thenReturn(Optional.of(domain1));
+        Domain domain2 = new Domain(2L,"domain2", "domain2");
+        domain2.setDomainDcnDetails(new DomainDcnDetails(11L, "domain2", true, DcnDeploymentType.MANUAL, null));
+        when(domainService.findDomain(domain2.getName())).thenReturn(Optional.of(domain2));
         when(domainGroupService.existDomainGroup("group1", "group1")).thenReturn(Boolean.TRUE);
         when(userService.existsByUsername("user1")).thenReturn(false);
         when(userService.existsByEmail("user1@test.com")).thenReturn(Boolean.FALSE);
+        when(userService.existsByUsername("user2")).thenReturn(false);
+        when(userService.existsByEmail("user2@test.com")).thenReturn(Boolean.FALSE);
         User user = new User("user1", true);
         user.setId(10L);
         user.setEmail("user1@test.com");
         when(userService.registerBulk(any(), any(), any())).thenReturn(user);
         when(bulkDeploymentRepository.save(any())).thenReturn(new BulkDeployment());
 
-        bulkDomainService.handleBulkCreation(List.of(csvDomain), testUser());
+        bulkDomainService.handleBulkCreation(List.of(csvDomain1, csvDomain2), testUser());
 
         ArgumentCaptor<BulkDeployment> bulkDeploymentArgumentCaptor = ArgumentCaptor.forClass(BulkDeployment.class);
         verify(bulkDeploymentRepository).save(bulkDeploymentArgumentCaptor.capture());
         BulkDeployment bulkDeployment = bulkDeploymentArgumentCaptor.getValue();
         assertEquals(BulkDeploymentState.COMPLETED, bulkDeployment.getState());
         assertEquals(BulkType.DOMAIN, bulkDeployment.getType());
+        assertEquals(4, bulkDeployment.getEntries().size());
+        assertThat(bulkDeployment.getEntries().stream().filter(e -> e.getType() == BulkType.USER)).allMatch(BulkDeploymentEntry::getCreated);
+        assertThat(bulkDeployment.getEntries().stream().filter(e -> e.getType() == BulkType.DOMAIN)).noneMatch(BulkDeploymentEntry::getCreated);
         assertEquals(testUser().getId(), bulkDeployment.getCreatorId());
     }
 
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java
index 317dc51789972137adf30226fc65846ea538f493..98df964a513e570b58a4e74203fe096def84b96a 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java
@@ -26,26 +26,33 @@ import static org.mockito.Mockito.when;
 
 public class ConfigurationManagerTest {
 
-    private ConfigurationRepository repository = mock(ConfigurationRepository.class);
-
-    private ModelMapper modelMapper = new ModelMapper();
-
-    private InternationalizationSimpleRepository internationalizationRepository = mock(InternationalizationSimpleRepository.class);
+    private final ConfigurationRepository repository = mock(ConfigurationRepository.class);
+    private final InternationalizationSimpleRepository internationalizationRepository = mock(InternationalizationSimpleRepository.class);
+    private final ModelMapper modelMapper = new ModelMapper();
 
     private ConfigurationManager configurationManager;
-
     private Configuration config;
-
-    ConfigurationView configView;
-
+    private ConfigurationView configView;
     private InternationalizationView internationalization;
 
     @BeforeEach
-    public void setup(){
+    public void setup() {
         this.configurationManager = new ConfigurationManagerImpl(repository, modelMapper, internationalizationRepository);
-        this.config = new Configuration(1L, false, false, "en", false, false, "", true);
+        this.config = Configuration.builder()
+                .id(1L)
+                .maintenance(true)
+                .ssoLoginAllowed(true)
+                .defaultLanguage("en")
+                .testInstance(true)
+                .sendAppInstanceFailureEmails(true)
+                .appInstanceFailureEmails("")
+                .registrationDomainSelectionEnabled(true)
+                .bulkDomainsAllowForSsoAccounts(false)
+                .bulkDomainsSendEmailForNewAccounts(false)
+                .build();
         this.internationalization = new InternationalizationView("pl", true, "{\"test\":\"test\"}");
-        this.configView = new ConfigurationView(1L, false, false, "pl", false, false, new ArrayList<>(), true);
+        this.configView = new ConfigurationView(1L, false, false, "pl",
+                false, false, new ArrayList<>(), true, true, false);
     }
 
     @Test
@@ -60,7 +67,7 @@ public class ConfigurationManagerTest {
     }
 
     @Test
-    public void shouldSetConfiguration(){
+    void shouldSetConfiguration(){
         when(repository.count()).thenReturn(0L);
         Long id = configurationManager.setConfiguration(modelMapper.map(config, ConfigurationView.class));
         assertEquals(config.getId(), id);
@@ -68,7 +75,7 @@ public class ConfigurationManagerTest {
     }
 
     @Test
-    public void shouldNotSetConfigIfAlreadyExists(){
+    void shouldNotSetConfigIfAlreadyExists(){
         assertThrows(OnlyOneConfigurationSupportedException.class, () -> {
             when(repository.count()).thenReturn(1L);
             configurationManager.setConfiguration(modelMapper.map(config, ConfigurationView.class));
@@ -76,7 +83,7 @@ public class ConfigurationManagerTest {
     }
 
     @Test
-    public void shouldUpdateConfiguration(){
+    void shouldUpdateConfiguration(){
         when(repository.findById(config.getId())).thenReturn(Optional.of(config));
         when(internationalizationRepository.findByLanguageOrderByIdDesc(configView.getDefaultLanguage()))
                 .thenReturn(Optional.of(internationalization.getAsInternationalizationSimple()));
@@ -85,7 +92,7 @@ public class ConfigurationManagerTest {
     }
 
     @Test
-    public void shouldNotUpdateNotExistingConfig(){
+    void shouldNotUpdateNotExistingConfig(){
         assertThrows(ConfigurationNotFoundException.class, () -> {
             when(repository.findById(config.getId())).thenReturn(Optional.empty());
             configurationManager.updateConfiguration(1L, configView);
@@ -93,7 +100,7 @@ public class ConfigurationManagerTest {
     }
 
     @Test
-    public void shouldNotSetNotExistingLanguageAsDefault(){
+    void shouldNotSetNotExistingLanguageAsDefault(){
         assertThrows(IllegalArgumentException.class, () -> {
             when(repository.findById(config.getId())).thenReturn(Optional.of(config));
             when(internationalizationRepository.findByLanguageOrderByIdDesc(configView.getDefaultLanguage()))
@@ -103,7 +110,7 @@ public class ConfigurationManagerTest {
     }
 
     @Test
-    public void shouldNotSetDisabledLanguageAsDefault(){
+    void shouldNotSetDisabledLanguageAsDefault(){
         assertThrows(IllegalStateException.class, () -> {
             this.internationalization.setEnabled(false);
             when(repository.findById(config.getId())).thenReturn(Optional.of(config));
@@ -112,4 +119,5 @@ public class ConfigurationManagerTest {
             configurationManager.updateConfiguration(1L, configView);
         });
     }
+
 }
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java
index 1c9d4bf5bd02c63eb08c9cd44962b65aef13e1fb..541e75c99eede7209c70f6ed0de4c7a5f4459aef 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java
@@ -97,7 +97,7 @@ public class InternationalizationServiceTest {
 
     @Test
     public void shouldChangeLanguageState(){
-        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(false, false, "fr", false, false, new ArrayList<>()));
+        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(false, false, "fr", false, false, new ArrayList<>(), false, false));
         InternationalizationView internationalization = new InternationalizationView("pl", false, "{\"test\":\"content\"}");
         when(repository.findByLanguageOrderByIdDesc(language.getLanguage())).thenReturn(Optional.of(internationalization.getAsInternationalizationSimple()));
         internationalizationService.changeLanguageState(language);
@@ -117,7 +117,7 @@ public class InternationalizationServiceTest {
         assertThrows(IllegalStateException.class, () -> {
             InternationalizationView internationalization = new InternationalizationView("pl", false, "{\"test\":\"content\"}");
             when(repository.findByLanguageOrderByIdDesc(language.getLanguage())).thenReturn(Optional.of(internationalization.getAsInternationalizationSimple()));
-            when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(false, false, "pl", false, false, new ArrayList<>()));
+            when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(false, false, "pl", false, false, new ArrayList<>(), true, false));
             internationalizationService.changeLanguageState(language);
         });
     }
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java
index ba3e8d294791c7a0deae9762891500d5ee232465..0b54f15ed3c7271ddfb56035722cf7896f3d16bb 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java
@@ -53,12 +53,12 @@ public class UserServiceImplTest {
     UserServiceImpl userService;
 
     @BeforeEach
-    public void setup(){
+    public void setup() {
         userService = new UserServiceImpl(userRepository, userRoleRepository, new BCryptPasswordEncoder(), configurationManager, new ModelMapper());
     }
 
     @Test
-    public void hasPrivilegeShouldReturnFalseDueToEmptyUser(){
+    public void hasPrivilegeShouldReturnFalseDueToEmptyUser() {
         User user = null;
         Domain domain = new Domain("GLOBAL", "GLOBAL");
         Role role = Role.ROLE_USER;
@@ -66,7 +66,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void hasPrivilegeShouldReturnFalseDueToEmptyDomain(){
+    public void hasPrivilegeShouldReturnFalseDueToEmptyDomain() {
         User user = new User("test", true);
         Domain domain = null;
         Role role = Role.ROLE_USER;
@@ -74,7 +74,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void hasPrivilegeShouldReturnFalseDueToEmptyRole(){
+    public void hasPrivilegeShouldReturnFalseDueToEmptyRole() {
         User user = new User("test", true);
         Domain domain = new Domain("GLOBAL", "GLOBAL");
         Role role = null;
@@ -82,7 +82,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void hasPrivilegeShouldReturnFalseDueToEmptyUserRole(){
+    public void hasPrivilegeShouldReturnFalseDueToEmptyUserRole() {
         User user = new User("test", true);
         Domain domain = new Domain("GLOBAL", "GLOBAL");
         Role role = Role.ROLE_USER;
@@ -91,7 +91,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void hasPrivilegeShouldPassCorrectly(){
+    public void hasPrivilegeShouldPassCorrectly() {
         User user = new User("test", true);
         Domain domain = new Domain("GLOBAL", "GLOBAL");
         Role role = Role.ROLE_USER;
@@ -101,7 +101,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    void adminShouldUpdateData(){
+    void adminShouldUpdateData() {
         User admin = new User("admin", true);
         Domain domain = new Domain("GLOBAL", "GLOBAL");
         admin.setRoles(Collections.singletonList(new UserRole(admin, domain, Role.ROLE_SYSTEM_ADMIN)));
@@ -110,7 +110,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    void domainAdminShouldUpdateDataOfUserInHisDomain(){
+    void domainAdminShouldUpdateDataOfUserInHisDomain() {
         User admin = new User("admin", true);
         User user = new User("test", true);
         Domain domain = new Domain("testdom", "testdom");
@@ -141,7 +141,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void findAllShouldReturnListWithElements(){
+    void findAllShouldReturnListWithElements(){
         User user = new User("test1", true);
         User user1 = new User("test2", true);
         User user2 = new User("test3", true);
@@ -158,12 +158,12 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void findByUsernameShouldReturnEmptyOptionalWhenNull(){
+    void findByUsernameShouldReturnEmptyOptionalWhenNull(){
         assertEquals(Optional.empty(), userService.findByUsername(null));
     }
 
     @Test
-    public void findByUsernameShouldReturnUserObject(){
+    void findByUsernameShouldReturnUserObject(){
         User user = new User("test1", true);
         when(userRepository.findByUsername(anyString())).thenReturn(Optional.of(user));
         Optional<User> resultUser = userService.findByUsername("test");
@@ -172,12 +172,12 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void findByIdShouldReturnEmptyOptionalWhenNull(){
+    void findByIdShouldReturnEmptyOptionalWhenNull(){
         assertEquals(Optional.empty(), userService.findById(null));
     }
 
     @Test
-    public void findByIdShouldReturnUserObject(){
+    void findByIdShouldReturnUserObject(){
         User user = new User("test1", true);
         when(userRepository.findById(anyLong())).thenReturn(Optional.of(user));
         Optional<User> resultUser = userService.findById((long) 0);
@@ -186,12 +186,12 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void findBySamlTokenShouldReturnEmptyOptionalWhenNull(){
+    void findBySamlTokenShouldReturnEmptyOptionalWhenNull(){
         assertEquals(Optional.empty(), userService.findBySamlToken(null));
     }
 
     @Test
-    public void findBySamlTokenShouldReturnUserObject(){
+    void findBySamlTokenShouldReturnUserObject(){
         User user = new User("test1", true);
         when(userRepository.findBySamlToken(anyString())).thenReturn(Optional.of(user));
         Optional<User> resultUser = userService.findBySamlToken("token");
@@ -200,61 +200,61 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void existsByUsernameCheckParamShouldThrowException(){
+    void existsByUsernameCheckParamShouldThrowException(){
         assertThrows(IllegalArgumentException.class, () -> {
             userService.existsByUsername(null);
         });
     }
 
     @Test
-    public void existsByIdCheckParamShouldThrowException(){
+    void existsByIdCheckParamShouldThrowException(){
         assertThrows(IllegalArgumentException.class, () -> {
             userService.existsById(null);
         });
     }
 
     @Test
-    public void existsByUsernameShouldThrowFalseWhenThereIsNoUserWithSpecifiedName(){
+    void existsByUsernameShouldThrowFalseWhenThereIsNoUserWithSpecifiedName(){
         when(userRepository.existsByUsername(anyString())).thenReturn(false);
         assertFalse(userService.existsByUsername("test1"));
     }
 
     @Test
-    public void existsByIdShouldThrowFalseWhenThereIsNoUserWithSpecifiedId(){
+    void existsByIdShouldThrowFalseWhenThereIsNoUserWithSpecifiedId(){
         when(userRepository.existsById(anyLong())).thenReturn(false);
         assertFalse(userService.existsById((long) 0));
     }
 
     @Test
-    public void existsByUsernameShouldThrowTrue(){
+    void existsByUsernameShouldThrowTrue(){
         when(userRepository.existsByUsername(anyString())).thenReturn(true);
         assertTrue(userService.existsByUsername("test1"));
     }
 
     @Test
-    public void existsByIdShouldThrowTrue(){
+    void existsByIdShouldThrowTrue(){
         when(userRepository.existsById(anyLong())).thenReturn(true);
         assertTrue(userService.existsById((long) 0));
     }
 
     @Test
-    public void existsByEmailShouldThrowTrue(){
+    void existsByEmailShouldThrowTrue(){
         when(userRepository.existsByEmail(anyString())).thenReturn(true);
         assertTrue(userService.existsByEmail("test@test.com"));
     }
 
     @Test
-    public void existsByEmailShouldThrowFalseWhenThereIsNoUserWithSpecifiedId(){
+    void existsByEmailShouldThrowFalseWhenThereIsNoUserWithSpecifiedId(){
         when(userRepository.existsByEmail(anyString())).thenReturn(false);
         assertFalse(userService.existsByEmail("test@test.com"));
     }
 
     @Test
-    public void shouldRegisterUserWithGlobalGuestRole(){
+    void shouldRegisterUserWithGlobalGuestRole(){
         when(userRepository.existsByUsername(anyString())).thenReturn(false);
         Registration registration = new Registration("test", "testpass","test@test.com", "name", "surname", 1L, true, true);
         Domain domain = new Domain("GLOBAL", "GLOBAL");
-        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(1L, false, false, "en", false, false, new ArrayList<>(), true));
+        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(1L, false, false, "en", false, false, new ArrayList<>(), true, true, false));
         User user = userService.register(registration, domain, null);
         verify(userRepository, times(1)).save(any());
         assertEquals(1, user.getRoles().size());
@@ -263,9 +263,9 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void shouldRegisterUserWithGlobalGuestRoleAndRoleInDomain(){
+    void shouldRegisterUserWithGlobalGuestRoleAndRoleInDomain(){
         when(userRepository.existsByUsername(anyString())).thenReturn(false);
-        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(1L, false, false, "en", false, false, new ArrayList<>(), true));
+        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(1L, false, false, "en", false, false, new ArrayList<>(), true, false, true));
         Registration registration = new Registration("test", "testpass","test@test.com", "name", "surname", 1L, true, true);
         Domain globalDomain = new Domain("GLOBAL", "GLOBAL");
         Domain domain = new Domain("Non Global", "NONGLO");
@@ -277,7 +277,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void shouldNotRegisterUserWhenUserAlreadyExists(){
+    void shouldNotRegisterUserWhenUserAlreadyExists(){
         assertThrows(SignupException.class, () -> {
             Registration registration = new Registration("test", "testpass", "test@test.com", "name", "surname", 1L, true, true);
             Domain domain = new Domain("GLOBAL", "GLOBAL");
@@ -287,7 +287,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void shouldNotRegisterUserWhenUserAlreadyExistsByMail(){
+    void shouldNotRegisterUserWhenUserAlreadyExistsByMail(){
         assertThrows(SignupException.class, () -> {
             Registration registration = new Registration("test", "testpass", "test@test.com", "name", "surname", 1L, true, true);
             Domain domain = new Domain("GLOBAL", "GLOBAL");
@@ -297,24 +297,24 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void shouldRegisterSSOUser(){
+    void shouldRegisterSSOUser(){
         UserSSOLogin ssoUser = new UserSSOLogin("test|1234|id");
         Domain domain = new Domain("GLOBAL", "GLOBAL");
-        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(1L, false, false, "en", false, false, new ArrayList<>(), true));
+        when(configurationManager.getConfiguration()).thenReturn(new ConfigurationView(1L, false, false, "en", false, false, new ArrayList<>(), true, false, false));
         User user = userService.register(ssoUser, domain);
         verify(userRepository, times(1)).save(any());
         assertEquals(user.getSamlToken(), ssoUser.getUsername());
     }
 
     @Test
-    public void updateShouldFailDueToEmptyUser(){
+    void updateShouldFailDueToEmptyUser(){
         assertThrows(IllegalArgumentException.class, () -> {
             userService.update(null);
         });
     }
 
     @Test
-    public void updateShouldFailDueToEmptyUserId(){
+    void updateShouldFailDueToEmptyUserId(){
         assertThrows(IllegalArgumentException.class, () -> {
             User user = new User("test", true);
             userService.update(user);
@@ -322,7 +322,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void updateShouldFailDueToUserDoNotExist(){
+    void updateShouldFailDueToUserDoNotExist(){
         assertThrows(ProcessingException.class, () -> {
             when(userRepository.existsById(anyLong())).thenReturn(false);
             User user = new User("test", true);
@@ -332,7 +332,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void updateShouldPassCorrectly(){
+    void updateShouldPassCorrectly(){
         when(userRepository.existsById(anyLong())).thenReturn(true);
         User user = new User("test", true);
         user.setId((long) 0);
@@ -341,7 +341,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void deleteShouldFailDueToEmptyUser(){
+    void deleteShouldFailDueToEmptyUser(){
         assertThrows(IllegalArgumentException.class, () -> {
             userService.delete(null);
         });
@@ -356,7 +356,7 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void deleteShouldPassCorrectly(){
+    void deleteShouldPassCorrectly(){
         User user = new User("test", true);
         user.setId((long) 0);
         userService.delete(user);
@@ -364,49 +364,49 @@ public class UserServiceImplTest {
     }
 
     @Test
-    public void shouldDeleteById() {
+    void shouldDeleteById() {
         userService.deleteById(0L);
         verify(userRepository).deleteById(0L);
     }
 
     @Test
-    public void setEnabledFlagShouldChangeFlagToTrue(){
+    void setEnabledFlagShouldChangeFlagToTrue(){
         userService.setEnabledFlag((long) 0, true);
         verify(userRepository).setEnabledFlag((long) 0, true);
     }
 
     @Test
-    public void setEnabledFlagShouldChangeFlagToFalse(){
+    void setEnabledFlagShouldChangeFlagToFalse(){
         userService.setEnabledFlag((long) 0, false);
         verify(userRepository).setEnabledFlag((long) 0, false);
     }
 
     @Test
-    public void setTermsOfUseAcceptedFlagShouldChangeFlagToTrue(){
+    void setTermsOfUseAcceptedFlagShouldChangeFlagToTrue(){
         userService.setTermsOfUseAcceptedFlag((long) 0, true);
         verify(userRepository).setTermsOfUseAcceptedFlag((long) 0, true);
     }
 
     @Test
-    public void setTermsOfUseAcceptedFlagShouldChangeFlagToFalse(){
+    void setTermsOfUseAcceptedFlagShouldChangeFlagToFalse(){
         userService.setTermsOfUseAcceptedFlag((long) 0, false);
         verify(userRepository).setTermsOfUseAcceptedFlag((long) 0, false);
     }
 
     @Test
-    public void setPrivacyPolicyAcceptedFlagShouldChangeFlagToTrue(){
+    void setPrivacyPolicyAcceptedFlagShouldChangeFlagToTrue(){
         userService.setPrivacyPolicyAcceptedFlag((long) 0, true);
         verify(userRepository).setPrivacyPolicyAcceptedFlag((long) 0, true);
     }
 
     @Test
-    public void setPrivacyPolicyAcceptedFlagShouldChangeFlagToFalse(){
+    void setPrivacyPolicyAcceptedFlagShouldChangeFlagToFalse(){
         userService.setPrivacyPolicyAcceptedFlag((long) 0, false);
         verify(userRepository).setPrivacyPolicyAcceptedFlag((long) 0, false);
     }
 
     @Test
-    public void findAllUsersEmailWithAdminRole(){
+    void findAllUsersEmailWithAdminRole(){
         List<User> users = new ArrayList<>();
         List<UserRole> userRoles = new ArrayList<>();
 
diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
index e5c378cb9c4a0d2a3293faa2b8a10c7ade3944ba..3ab2323bd4aeffabe0f5a0c48ea386f7b49be960 100644
--- a/src/test/resources/application.properties
+++ b/src/test/resources/application.properties
@@ -1,7 +1,7 @@
 # --------------- #
 # Active profiles #
 # --------------- #
-#   profiles are used to customise platform operations in following areas
+#   profiles are used to customize platform operations in the following areas
 #   - container orchestrator (options: env_kubernetes)
 #   - database (options: db_memory, db_standalone)
 spring.profiles.active=env_kubernetes, db_memory
@@ -119,7 +119,7 @@ helm.repositoryName=nmaas-test
 helm.repositoryUrl=https://nmaas-test.helm.repository
 helm.chartsDirectory=/home/nmaas/charts
 helm.enableTls=false
-# possible values for Helm version are v2 and v3 (if none is provided v3 is used by default)
+# possible values for a Helm version are v2 and v3 (if none is provided, v3 is used by default)
 helm.version=v2
 
 # --------------------- #
@@ -168,5 +168,5 @@ portal.config.defaultLanguage=en
 portal.config.testInstance=false
 portal.config.sendAppInstanceFailureEmails=false
 portal.config.showDomainRegistrationSelector=true
-# string - list of emails with ':' as a separator, e.g. admin1@nmaas.eu;admin2@nmaas.eu
+# string - list of emails with ':' as a separator, e.g., admin1@nmaas.eu;admin2@nmaas.eu
 portal.config.appInstanceFailureEmailList=admin@nmaas.eu
diff --git a/src/test/shell/data/apps/app06-grafana.json b/src/test/shell/data/apps/app06-grafana.json
index 95c02291b264963de57eb0ac8d0dc35938b1522d..80ff42fea3610baa4fbecc6fe9121f6911ac38cb 100644
--- a/src/test/shell/data/apps/app06-grafana.json
+++ b/src/test/shell/data/apps/app06-grafana.json
@@ -7,7 +7,7 @@
         "wwwUrl": "https://grafana.com/",
         "sourceUrl": "https://github.com/grafana/grafana",
         "issuesUrl": "https://github.com/grafana/grafana/issues",
-        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/NMaaS+Tools#NMaaSTools-Grafana",
+        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/nmaas+Tools#nmaasTools-Grafana",
         "descriptions": [
             {
                 "language": "en",
@@ -103,7 +103,7 @@
                                                 "optionsLabelPosition": "right",
                                                 "values": [
                                                     {
-                                                        "label": "NMaaS Prometheus instance",
+                                                        "label": "nmaas Prometheus instance",
                                                         "value": "inCluster"
                                                     },
                                                     {
diff --git a/src/test/shell/data/apps/app07-bastion.json b/src/test/shell/data/apps/app07-bastion.json
index 1e231d7f5cf8d66aeeda111bc8af7b17e8d695cf..c31ad50314ca09f38ea16611f6765d663e1c94b9 100644
--- a/src/test/shell/data/apps/app07-bastion.json
+++ b/src/test/shell/data/apps/app07-bastion.json
@@ -7,7 +7,7 @@
         "wwwUrl": "https://github.com/nmaas-platform/nmaas-bastion-ng",
         "sourceUrl": "https://github.com/nmaas-platform/nmaas-bastion-ng",
         "issuesUrl": "https://github.com/nmaas-platform/nmaas-bastion-ng/issues",
-        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/NMaaS+Tools#Bastion-NG",
+        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/nmaas+Tools#Bastion-NG",
         "descriptions": [
             {
                 "language": "en",
diff --git a/src/test/shell/data/apps/app27-netbox.json b/src/test/shell/data/apps/app27-netbox.json
index 4e25ae064a718d2ff09183b89b929b82fd8ac50b..34f6a9fdc0e3cd12f754ed62717b2b81132e29de 100644
--- a/src/test/shell/data/apps/app27-netbox.json
+++ b/src/test/shell/data/apps/app27-netbox.json
@@ -7,7 +7,7 @@
         "wwwUrl": "https://netbox.readthedocs.io/",
         "sourceUrl": "https://github.com/netbox-community/netbox/",
         "issuesUrl": "https://github.com/netbox-community/netbox/issues",
-        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/NMaaS+Tools#NMaaSTools-NetBox",
+        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/nmaas+Tools#nmaasTools-NetBox",
         "descriptions": [
             {
                 "language": "en",
diff --git a/src/test/shell/data/apps/app30-healthchecks.json b/src/test/shell/data/apps/app30-healthchecks.json
index dc0c642af640be0c862ca32ea9ffe25a25c115ac..fbe1193c1952c62d8fdab1518cfb17f4872455c0 100644
--- a/src/test/shell/data/apps/app30-healthchecks.json
+++ b/src/test/shell/data/apps/app30-healthchecks.json
@@ -7,7 +7,7 @@
         "wwwUrl": "https://healthchecks.io/",
         "sourceUrl": "https://github.com/healthchecks/healthchecks",
         "issuesUrl": "https://github.com/healthchecks/healthchecks/issues",
-        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/NMaaS+Tools#NMaaSTools-Healthchecks",
+        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/nmaas+Tools#NMaaSTools-Healthchecks",
         "descriptions": [
             {
                 "language": "en",
diff --git a/src/test/shell/data/apps/app31-ctfd.json b/src/test/shell/data/apps/app31-ctfd.json
index 773ed98a788b8f9cb2394254a1c665818381629e..64fbd3391ea8eb51ab42286e028013b1a264f617 100644
--- a/src/test/shell/data/apps/app31-ctfd.json
+++ b/src/test/shell/data/apps/app31-ctfd.json
@@ -7,7 +7,7 @@
         "wwwUrl": "https://ctfd.io/",
         "sourceUrl": "https://github.com/CTFd/CTFd",
         "issuesUrl": "https://github.com/CTFd/CTFd/issues",
-        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/NMaaS+Tools#NMaaSTools-CTFD",
+        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/nmaas+Tools#nmaasTools-CTFD",
         "descriptions": [
             {
                 "language": "en",
diff --git a/src/test/shell/data/apps/app32-juiceshop.json b/src/test/shell/data/apps/app32-juiceshop.json
index e8ed402cff5c24bf620e3b0b4ca21c5ba2d179f9..396f10c31a3a17f2f74e540c384e987bf981579f 100644
--- a/src/test/shell/data/apps/app32-juiceshop.json
+++ b/src/test/shell/data/apps/app32-juiceshop.json
@@ -7,7 +7,7 @@
         "wwwUrl": "https://owasp-juice.shop/",
         "sourceUrl": "https://github.com/juice-shop/juice-shop",
         "issuesUrl": "https://github.com/juice-shop/juice-shop/issues",
-        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/NMaaS+Tools#NMaaSTools-JuiceShop",
+        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/nmaas+Tools#nmaasTools-JuiceShop",
         "descriptions": [
             {
                 "language": "en",
diff --git a/src/test/shell/data/apps/app35-changedetectionio.json b/src/test/shell/data/apps/app35-changedetectionio.json
index 535a8814bc87d48b6b3de616280773b332c97eaf..15f166b7aa94e74dd9f7d56b2732fb997387aa4a 100644
--- a/src/test/shell/data/apps/app35-changedetectionio.json
+++ b/src/test/shell/data/apps/app35-changedetectionio.json
@@ -7,7 +7,7 @@
         "wwwUrl": "https://github.com/dgtlmoon/changedetection.io",
         "sourceUrl": "https://github.com/dgtlmoon/changedetection.io",
         "issuesUrl": "https://github.com/dgtlmoon/changedetection.io/issues",
-        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/NMaaS+Tools#NMaaSTools-changedetection.io",
+        "nmaasDocumentationUrl": "https://wiki.geant.org/display/NMAAS/nmaas+Tools#nmaasTools-changedetection.io",
         "descriptions": [
             {
                 "language": "en",
diff --git a/src/test/shell/data/i18n/de.json b/src/test/shell/data/i18n/de.json
index 359810acabe3cbe60a1858aead2975f2201d6fdf..b53cc62f3ab466ec1dee1f402e8306a1350de876 100644
--- a/src/test/shell/data/i18n/de.json
+++ b/src/test/shell/data/i18n/de.json
@@ -32,28 +32,28 @@
     "REGISTER": "Registrieren",
     "TITLE1": "Network Management as a Service",
     "TITLE2": "stellt ein Portfolio an Netzwerk-Management-Anwendungen bereit welche als dedizierte Instanzen pro Benutzer in der Cloud ausgeführt werden.",
-    "INTRO_TEXT": "Der NMaaS-Dienst von GÉANT umfasst drei Aspekte: Bereitstellung, Verwaltung und Wartung der Infrastruktur des NMaaS Service Portals, der Plattform und ausgewählter Tools. Der Benutzer wird in der Verwendung des Systems und der ausgewählten Tools unterstützt um sein eigenes Netzwerk via NMaaS zu überwachen. Es werden ebenfalls Anwender unterstützt, welche ihre Software über das NMaaS System bereitstellen möchten.",
+    "INTRO_TEXT": "Der nmaas-Dienst von GÉANT umfasst drei Aspekte: Bereitstellung, Verwaltung und Wartung der Infrastruktur des nmaas Service Portals, der Plattform und ausgewählter Tools. Der Benutzer wird in der Verwendung des Systems und der ausgewählten Tools unterstützt um sein eigenes Netzwerk via nmaas zu überwachen. Es werden ebenfalls Anwender unterstützt, welche ihre Software über das nmaas System bereitstellen möchten.",
     "TARGET_USERS_HEADER": "Zielgruppe",
-    "TARGET_USERS_TEXT": "NMaaS-Nutzer sind Organisationen, die keine eigene NMS-Infrastruktur besitzen und/oder das Netzwerkmanagement auslagern wollen, sowie Organisationen und/oder Einzelpersonen, die nach qualitativ hochwertiger Netzwerkmanagement-Software suchen oder ihre Software innerhalb der Community teilen möchten.",
-    "MARKETPLACE_HEADER": "NMaaS Marketplace",
-    "MARKETPLACE_TEXT": "Der NMaaS Marketplace ist ein frei verteilter und von der Community unterstützter Katalog verfügbarer Open-Source-Tools. Die Inhalte werden von den Administratoren ausgewählt. Sie haben aber auch die Möglichkeit neue Anwendung vorzuschlagen, um die Auswahl an Anwendungen zu vergrößern.",
+    "TARGET_USERS_TEXT": "nmaas-Nutzer sind Organisationen, die keine eigene NMS-Infrastruktur besitzen und/oder das Netzwerkmanagement auslagern wollen, sowie Organisationen und/oder Einzelpersonen, die nach qualitativ hochwertiger Netzwerkmanagement-Software suchen oder ihre Software innerhalb der Community teilen möchten.",
+    "MARKETPLACE_HEADER": "nmaas Marketplace",
+    "MARKETPLACE_TEXT": "Der nmaas Marketplace ist ein frei verteilter und von der Community unterstützter Katalog verfügbarer Open-Source-Tools. Die Inhalte werden von den Administratoren ausgewählt. Sie haben aber auch die Möglichkeit neue Anwendung vorzuschlagen, um die Auswahl an Anwendungen zu vergrößern.",
     "COST_REDUCTION_HEADER": "Kostensenkung",
-    "COST_REDUCTION_TEXT": "Mit NMaaS müssen die Benutzer nicht die Betriebskosten und Risiken im Zusammenhang mit der Wartung und Kontrolle der Netzwerk-Management-Infrastruktur tragen.",
+    "COST_REDUCTION_TEXT": "Mit nmaas müssen die Benutzer nicht die Betriebskosten und Risiken im Zusammenhang mit der Wartung und Kontrolle der Netzwerk-Management-Infrastruktur tragen.",
     "SECURITY_HEADER": "Sicherheit",
-    "SECURITY_TEXT": "Mit NMaaS müssen Sie sich keine Sorgen um Sicherheit machen. Wir bieten mittels getrennter Instanzen und VPN eine sichere Verbindung zu Ihrem Netzwerk - damit Institutionen und Projekte das Netzwerk sicher verwalten können.",
+    "SECURITY_TEXT": "Mit nmaas müssen Sie sich keine Sorgen um Sicherheit machen. Wir bieten mittels getrennter Instanzen und VPN eine sichere Verbindung zu Ihrem Netzwerk - damit Institutionen und Projekte das Netzwerk sicher verwalten können.",
     "SCALING_HEADER": "Flexible Skalierung",
-    "SCALING_TEXT": "Eine horizontale Skalierung ist mit NMaaS kein Problem. Sie können ihre Instanzen sehr einfach und in nur wenigen Minuten skalieren.",
-    "NMAAS_FEATURES_HEADER": "NMaaS Features",
+    "SCALING_TEXT": "Eine horizontale Skalierung ist mit nmaas kein Problem. Sie können ihre Instanzen sehr einfach und in nur wenigen Minuten skalieren.",
+    "NMAAS_FEATURES_HEADER": "nmaas Features",
     "APP_MARKET_HEADER": "Application Market",
     "APP_MARKET_TEXT": "Im Marktplatz finden Sie von Administratoren und der Community ausgewählte Top-Anwendungen zur Verwaltung und Wartung Ihrer Netzwerkinfrastruktur.",
     "OWN_APPS_HEADER": "Eigene Anwendungen",
-    "OWN_APPS_TEXT": "Sie möchten Ihre Anwendung in der Community teilen? NMaaS ist offen für neue Anwendungen.",
+    "OWN_APPS_TEXT": "Sie möchten Ihre Anwendung in der Community teilen? nmaas ist offen für neue Anwendungen.",
     "EDUGAIN_SUPPORT_HEADER": "eduGAIN support",
     "EDUGAIN_SUPPORT_TEXT": "Sie müssen kein neues Konto erstellen. Melden Sie sich einfach mit einem bestehenden Konto Ihres eduGAIN-Partner Identitätsanbieters an.",
     "FAST_DEPLOYMENT_HEADER": "Schnelles & einfaches Deployment",
     "FAST_DEPLOYMENT_TEXT": "Auf Ihre Anfrage hin werden Anwendungen mit benutzerdefinierter Konfiguration mittels Assistenten innerhalb weniger Minuten bereitgestellt.",
     "WEB_PORTAL_HEADER": "Modernes Webportal",
-    "WEB_PORTAL_TEXT": "NMaaS bietet ein webbasiertes Benutzerportal, das dem Prinzip des reaktiven Designs folgt.",
+    "WEB_PORTAL_TEXT": "nmaas bietet ein webbasiertes Benutzerportal, das dem Prinzip des reaktiven Designs folgt.",
     "KUBERNETES_HEADER": "Kubernetes deployment",
     "KUBERNETES_TEXT": "Benutzeranwendungsinstanzen werden im Kubernetes-Cluster bereitgestellt, der auf einer dedizierten Hardware-Infrastruktur läuft, die eine hohe Leistung und Zuverlässigkeit gewährleistet.",
     "TECHNOLOGIES_USED_HEADER": "Verwendete Technologien",
@@ -94,8 +94,8 @@
     "USER_DISABLED_MESSAGE": "User is disabled"
   },
   "TEST_INSTANCE_MODAL": {
-    "HEADER": "NMaaS Testinstanz",
-    "BODY": "Bitte beachten Sie, dass dies eine Test-NMaaS-Instanz ist. Die Benutzerisolations- und Datensicherheitsmaßnahmen sind nicht so streng wie in der Produktionsinstanz. Verwenden Sie diese Instanz nicht zur Überwachung realer Geräte.",
+    "HEADER": "nmaas Testinstanz",
+    "BODY": "Bitte beachten Sie, dass dies eine Test-nmaas-Instanz ist. Die Benutzerisolations- und Datensicherheitsmaßnahmen sind nicht so streng wie in der Produktionsinstanz. Verwenden Sie diese Instanz nicht zur Überwachung realer Geräte.",
     "OK_BUTTON": "OK"
   },
   "PROVIDE_SSH_KEY_MODAL": {
@@ -248,10 +248,10 @@
     },
     "ANNOTATIONS" : {
       "HEADER" : "Domain annotations",
-      "SUBHEADER" : "Global domain annotations. This set of annotations will be added to each domain creation.",
+      "SUBHEADER" : "Global domain annotations. This set of annotations will be added to Kubernetes objects created for each new domain.",
       "CREATION" : "Domain namespace annotations",
       "ADD" : "Add annotation",
-      "KEY"  : "Key",
+      "KEY" : "Key",
       "VALUE" : "Value",
       "EDIT" : "Edit global annotations"
     }
@@ -323,10 +323,12 @@
     "LANGUAGE_SUPPORT": "Sprachunterstützung",
     "LANGUAGE_ENABLED": "Aktiviert",
     "LANGUAGE_DISABLED": "Deaktiviert",
-    "TEST_INSTANCE": "Als Test-NMaaS-Instanz markieren",
+    "TEST_INSTANCE": "Als Test-nmaas-Instanz markieren",
     "SEND_APP_INSTANCE_FAILURE_EMAILS": "Send emails when app instance fails to deploy",
-    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Emails list",
-    "DOMAIN_SELECTION_ENABLED" : "Domainauswahl während der Registrierung"
+    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Recipients of app deployment failed emails",
+    "DOMAIN_SELECTION_ENABLED" : "Domainauswahl während der Registrierung",
+    "BULK_DOMAINS_ALLOW_FOR_SSO_ACCOUNTS" : "Allow for creation or update of a SSO-enabled account in bulk process",
+    "BULK_DOMAINS_SEND_EMAIL_FOR_NEW_ACCOUNTS" : "Send notification email for new accounts created in bulk process"
   },
   "DOMAIN_DETAILS": {
     "TITLE": "Domain Details",
@@ -386,7 +388,7 @@
     }
   },
   "GIT_INFO": {
-    "HEADER": "NMaaS Versionsinformation",
+    "HEADER": "nmaas Versionsinformation",
     "VERSION": "Version",
     "BUILD_TIME": "Zeitpunkt des Builds",
     "LAST_COMMIT": "Letzter Commit",
@@ -550,7 +552,7 @@
       "STATE": "Status",
       "DEFAULT_ERROR_STATE": "Etwas ist schief gelaufen",
       "DETAILS": "Details",
-      "DEFAULT_ERROR_MESSAGE": "Die Anwendungsbereitstellung ist aufgrund eines unerwarteten Fehlers fehlgeschlagen. Das NMaaS-Supportteam wurde bereits benachrichtigt.<br>Um ein Problem zu melden, verwenden Sie das <a href=\"about?type=ISSUE_REPORT\">Kontaktformular</a>."
+      "DEFAULT_ERROR_MESSAGE": "Die Anwendungsbereitstellung ist aufgrund eines unerwarteten Fehlers fehlgeschlagen. Das nmaas-Supportteam wurde bereits benachrichtigt.<br>Um ein Problem zu melden, verwenden Sie das <a href=\"about?type=ISSUE_REPORT\">Kontaktformular</a>."
     },
     "DEPLOYMENT_HISTORY": {
       "HEADER": "Installationshistorie",
@@ -563,7 +565,7 @@
       "ADVANCED_TAB": "Erweitert",
       "ADDITIONAL_TAB": "Erweiterte Parameter",
       "STORAGE_SPACE": "Speicherplatz",
-      "NMAAS_TOOLS": "NMaaS Tools Seite",
+      "NMAAS_TOOLS": "nmaas Tools Seite",
       "DOCUMENTATION_INFO": "Detaillierte Feldbeschreibungen finden Sie unter",
       "PREVIEW": "Configuration preview"
     },
@@ -618,17 +620,17 @@
       "APP_UPGRADE_FAILED": "Anwendungsaktualisierung fehlgeschlagen"
     },
     "USER_FRIENDLY": {
-      "REQUESTED": "NMaaS bearbeitet Ihre Anfrage",
-      "VALIDATION": "NMaaS prüft verfügbare Ressourcen",
-      "PREPARATION": "NMaaS bereitet die Installationsumgebung für Ihre Anwendung vor",
-      "CONNECTING": "NMaaS richtet eine sichere Verbindungen zu Ihren Geräten ein",
+      "REQUESTED": "nmaas bearbeitet Ihre Anfrage",
+      "VALIDATION": "nmaas prüft verfügbare Ressourcen",
+      "PREPARATION": "nmaas bereitet die Installationsumgebung für Ihre Anwendung vor",
+      "CONNECTING": "nmaas richtet eine sichere Verbindungen zu Ihren Geräten ein",
       "CONFIGURATION_AWAITING": "Ihre Anwendungsinstanz wurde erfolgreich bereitgestellt. <br>Um fortzufahren, geben Sie die Erstkonfiguration über die Aktionsschaltfläche <i>Konfigurieren</i> ein",
       "DEPLOYING": "Anwendung wird aktiviert. Dieser Vorgang kann bis zu mehreren Minuten dauern. <br>Sie werden per E-Mail benachrichtigt, sobald Ihre Instanz fertig ist",
       "RUNNING": "Ihre Anwendung ist jetzt aktiv. Sie können mit der Option <i>Zugriff</i> im Menü <i>Aktionen</i> darauf zugreifen. <br>Verwenden Sie die Optionen <i>Konfigurieren</i> und <i>Mitglieder</i>, um die Konfiguration bzw. die Liste der Anwendungsbenutzer zu aktualisieren.",
       "UNDEPLOYING": "Die Anwendung wird entfernt. Dieser Vorgang kann bis zu mehreren Minuten dauern",
       "DONE": "Anwendung erfolgreich entfernt",
       "FAILURE": "",
-      "UNKNOWN": "Unbekannter Anwendungszustand - Kontakt mit dem NMaaS-Team über das Kontaktformular auf der Unterseite \" Über \"",
+      "UNKNOWN": "Unbekannter Anwendungszustand - Kontakt mit dem nmaas-Team über das Kontaktformular auf der Unterseite \" Über \"",
       "REMOVED": "Anwendung nach Fehler erfolgreich aufgehoben"
     },
     "SHOW_VERSIONS_LABEL": "Show available versions",
@@ -693,11 +695,11 @@
   },
   "RESET_PASSWORD": {
     "FORGOT_PASSWORD_BUTTON": "Passwort vergessen",
-    "TEXT": "Um Ihr Passwort zurückzusetzen geben Sie Ihre E-Mail Adresse an, welche Sie für die Registrierung bei NMaaS verwendet haben.",
+    "TEXT": "Um Ihr Passwort zurückzusetzen geben Sie Ihre E-Mail Adresse an, welche Sie für die Registrierung bei nmaas verwendet haben.",
     "SUBMIT_BUTTON": "Senden",
     "EMAIL": "Email",
     "INVALID_TOKEN": "Ihr Link ist bereits abgelaufen. Bitte füllen Sie das Formular für das vergessene Passwort erneut aus.",
-    "GO_BACK": "Zurück zur NMaaS Seite",
+    "GO_BACK": "Zurück zur nmaas Seite",
     "MODAL": {
       "HEADER": "Bitte überprüfen Sie Ihre E-Mails",
       "BODY": "Wenn Sie eine gültige E-Mail Adresse angegeben haben, werden wir Ihnen einen Link für das Zurücksetzen des Passworts senden. Bitte beachten Sie, dass Sie das Kennwort nur für das lokale Konto zurücksetzen können.",
@@ -767,7 +769,7 @@
     "UPDATE_CONFIG_WIZARD_PREVIEW_HEADER": "Aktualisiere Konfigurationsassistenten Vorschau"
   },
   "APPS_WIZARD": {
-    "FIRST_PAGE_MESSAGE": "You are about to fill in a request for adding new application to the NMaaS portfolio. You will be guided through a few step process of providing all necessary information about the application, its description, deployment and configuration details. Once the request is submitted it will be reviewed by administrator and either approved or rejected with a proper comment send via email. By checking the box below you confirm that you have the right to publish this application in NMaaS.",
+    "FIRST_PAGE_MESSAGE": "You are about to fill in a request for adding new application to the nmaas portfolio. You will be guided through a few step process of providing all necessary information about the application, its description, deployment and configuration details. Once the request is submitted it will be reviewed by administrator and either approved or rejected with a proper comment send via email. By checking the box below you confirm that you have the right to publish this application in nmaas.",
     "ACCEPT_RULES_CHECKBOX": "I read the general instructions above",
     "NEXT_BUTTON": "Weiter",
     "SUBMIT_BUTTON": "Sende",
@@ -800,7 +802,7 @@
     "UPDATE_CONFIG_WIZARD_TEMPLATE_LABEL": "Anwendungskonfigurationsupdateassistent Vorlage",
     "NEW_APP_MODAL": {
       "HEADER": "Neue Anwendung ordnungsgemäß eingereicht",
-      "BODY": "Vielen Dank für das Einreichen der neuen Anwendung. Ihre Anfrage muss nun vom NMaaS-Team geprüft werden. Dies benötigt etwas Zeit.",
+      "BODY": "Vielen Dank für das Einreichen der neuen Anwendung. Ihre Anfrage muss nun vom nmaas-Team geprüft werden. Dies benötigt etwas Zeit.",
       "BACK_TO_APP_MANAGEMENT_BUTTON": "Zurück"
     },
     "EDIT_APP_MODAL": {
@@ -820,23 +822,23 @@
     "ACCEPT_RULES_TOOLTIP": "Sie müssen den Bedingungen zustimmen!",
     "NAME_TOOLTIP": "Offizieller Anwendungsname.",
     "VERSION_TOOLTIP": "Aktuelle Release-Nummer der Anwendung.",
-    "LICENSE_TOOLTIP": "Geben Sie den Namen der Lizenz ein, unter der die Anwendung verteilt wird. Bitte vergewissern Sie sich, dass die Anwendung in NMaaS verwendet werden kann.",
+    "LICENSE_TOOLTIP": "Geben Sie den Namen der Lizenz ein, unter der die Anwendung verteilt wird. Bitte vergewissern Sie sich, dass die Anwendung in nmaas verwendet werden kann.",
     "LICENSE_URL_TOOLTIP": "Um dem Benutzer mehr Informationen über die Lizenz und die zu verwendenden Berechtigungen zu geben, geben Sie einen Link zur Lizenzbeschreibung an.",
     "PROJECT_WEBSITE_TOOLTIP": "Um dem Benutzer mehr Informationen über das gesamte Projekt zu geben, geben Sie einen Link zur Projekt-Website an.",
     "SOURCE_CODE_TOOLTIP": "URL zum Source Code des Projekts z.B. github.com/project.",
     "PROJECT_ISSUES_TOOLTIP": "Um sicherzustellen, dass Benutzer immer eine Möglichkeit haben, Fehler an das für das Tool verantwortliche Team zu melden, stellen Sie einen Link zur Verfügung, z.B. github.com/project/issues.",
     "TAGS_TOOLTIP": "Bitte wählen Sie Tags aus, welche die Anwendung beschreiben. Das hilft Benutzern die Anwendungen schneller zu finden.",
     "NEW_TAGS_TOOLTIP": "Sie können Ihrer Anwendungen neue Tags hinzufügen, falls bereits exisiterende Tags ihre Anwendung nicht ausreichend beschreiben. Schreiben Sie den Tag-Name und drücken Sie Enter um einen neuen Tag hinzuzufügen.",
-    "BRIEF_DESCRIPTION_TOOLTIP": "Geben Sie eine kurze Beschreibung der Anwendung ein. Dieser Text wird auf der NMaaS Market Seite sichtbar sein.",
+    "BRIEF_DESCRIPTION_TOOLTIP": "Geben Sie eine kurze Beschreibung der Anwendung ein. Dieser Text wird auf der nmaas Market Seite sichtbar sein.",
     "FULL_DESCRIPTION_TOOLTIP": "Geben Sie eine volle Beschreibung der Anwendung ein. Dieser Text wird auf der Seite der Anwendungsdetails sichtbar sein.",
-    "CHART_NAME_TOOLTIP": "Geben Sie den Namen des Charts ein, welcher in NMaaS benutzt werden soll.",
-    "CHART_VERSION_TOOLTIP": "Geben Sie die Version des Charts ein, welche in NMaaS benutzt werden soll.",
+    "CHART_NAME_TOOLTIP": "Geben Sie den Namen des Charts ein, welcher in nmaas benutzt werden soll.",
+    "CHART_VERSION_TOOLTIP": "Geben Sie die Version des Charts ein, welche in nmaas benutzt werden soll.",
     "HELM_CHART_REPOSITORY_NAME_TOOLTIP": "Enter Helm Chart Repository Name",
     "HELM_CHART_REPOSITORY_URL_TOOLTIP": "Enter Helm Chart URL address",
     "MAIN_DEPLOYMENT_NAME_TOOLTIP": "Enter the name of main component deployed by this chart.",
     "DEFAULT_STORAGE_SPACE_TOOLTIP": "Geben Sie den standard Speicherplatz (in GB) ein.",
-    "DEPLOY_PARAMETER_TOOLTIP": "Einige Anwendungen dürfen globale NMaaS Einstellungen verwenden. Wenn Sie einige davon benutzen möchten, spezifizieren Sie bitte wie wir die Variable übergeben sollen.",
-    "REPOSITORY_REQUIRED_TOOLTIP": "NMaaS kann GitLab für die Konfiguration jeder Instanz verwenden.",
+    "DEPLOY_PARAMETER_TOOLTIP": "Einige Anwendungen dürfen globale nmaas Einstellungen verwenden. Wenn Sie einige davon benutzen möchten, spezifizieren Sie bitte wie wir die Variable übergeben sollen.",
+    "REPOSITORY_REQUIRED_TOOLTIP": "nmaas kann GitLab für die Konfiguration jeder Instanz verwenden.",
     "DISABLED_NEXT_BUTTON_TOOLTIP": "Sie müssen alle benötigten Felder ausfüllen!",
     "DEPLOY_PARAMETERS_DROPDOWN": "Wählen Sie globale Installationsparamter aus",
     "CONFIG_FILENAME_LABEL": "Name der Konfigurationsdatei",
@@ -855,8 +857,8 @@
     "BASIC_APP_INFO_STEP_INFO": "Basic set of information about the application. Application can be filtered by tag. Select an existing tag or create a new one if none is suitable.",
     "LOGO_AND_SCREENSHOTS_STEP_INFO": "Application logo is displayed in various views in the application. A set of screenshots should give a nice overview of the application's UI.",
     "APP_DESCRIPTIONS_STEP_INFO": "Brief and full descriptions of the application should provide a basic (limited length) and comprehensive information about the nature and purpose of the application. Descriptions should be provided in as many supported languages as possible.",
-    "APP_DEPLOYMENT_SPEC_STEP_INFO": "Applications offered through NMaaS are deployed in Kubernetes as Helm charts. Basic information about the chart is required with additional set of optional parameters to be passed during the installation process.",
-    "CONFIG_TEMPLATES_STEP_INFO": "NMaaS applications are populated with basic configuration parameters provided by users using a wizard. The list of configuration files (with parameterized content) to be used and loaded by the application at startup should be provided. Those need to be complemented with the definition of the wizard component dedicated for particular application allowing user to provide all necessary parameters used to populate configuration files. ",    "BASIC_AUTH_LABEL": "Benötigt Grundberechtigung",
+    "APP_DEPLOYMENT_SPEC_STEP_INFO": "Applications offered through nmaas are deployed in Kubernetes as Helm charts. Basic information about the chart is required with additional set of optional parameters to be passed during the installation process.",
+    "CONFIG_TEMPLATES_STEP_INFO": "nmaas applications are populated with basic configuration parameters provided by users using a wizard. The list of configuration files (with parameterized content) to be used and loaded by the application at startup should be provided. Those need to be complemented with the definition of the wizard component dedicated for particular application allowing user to provide all necessary parameters used to populate configuration files. ",    "BASIC_AUTH_LABEL": "Benötigt Grundberechtigung",
     "BASIC_AUTH_TOOLTIP": "Sie können eine Grundberechtigung für Ihre Anwendung hinzufügen, indem Sie einfach dieses Kontrollkästchen markieren.",
     "TERMS_ACCEPTANCE_LABEL": "Terms acceptance required",
     "TERMS_ACCEPTANCE_TOOLTIP": "If application has some special license requirements, you can provide them",
@@ -880,8 +882,8 @@
     "CONFIG_UPDATE_ENABLED": "Enable configuration updates",
     "STATIC_GLOBAL_DEPLOY_PARAMETERS": "Static global deploy parameters",
     "DEPLOY_PARAMETERS": "Global deploy parameters",
-    "PROJECT_NMAAS_DOCUMENTATION_LABEL": "NMaaS Documentation URL",
-    "PROJECT_NMAAS_DOCUMENTATION_TOOLTIP": "Provide URL to NMaaS Documentatnion (NMaaS Tools)",
+    "PROJECT_NMAAS_DOCUMENTATION_LABEL": "nmaas Documentation URL",
+    "PROJECT_NMAAS_DOCUMENTATION_TOOLTIP": "Provide URL to nmaas Documentatnion (nmaas Tools)",
     "RAW_JSON": "Raw JSON format",
     "FORM_BUILDER": "Form builder",
     "FORM_DEFINITION": "Form definition",
@@ -937,8 +939,8 @@
   "ABOUT": {
     "CONTACT_TITLE": "Kontaktieren Sie uns",
     "CHANGELOG_TITLE": "Aktuelle Softwareversion und Änderungsprotokoll",
-    "CONTACT_DESC": "Das Kontaktformular bietet eine einfache Möglichkeit, mit dem NMaaS-Team in Kontakt zu treten. Wählen Sie den Formulartyp, der für Ihre Anfrage am besten geeignet ist.",
-    "CHANGELOG_DESC": "Im Folgenden finden Sie detaillierte Informationen zur aktuellen NMaaS-Version und eine Zusammenfassung der Änderungen, die in früheren Softwareversionen vorgenommen wurden."
+    "CONTACT_DESC": "Das Kontaktformular bietet eine einfache Möglichkeit, mit dem nmaas-Team in Kontakt zu treten. Wählen Sie den Formulartyp, der für Ihre Anfrage am besten geeignet ist.",
+    "CHANGELOG_DESC": "Im Folgenden finden Sie detaillierte Informationen zur aktuellen nmaas-Version und eine Zusammenfassung der Änderungen, die in früheren Softwareversionen vorgenommen wurden."
   },
   "CHANGELOG": {
     "CHANGELOG_LAST": "Letzte Veröffentlichung",
@@ -968,17 +970,17 @@
       "DOMAIN_CODENAME_DESCRIPTION": "Kurzfassung des Domainnamens (bis zu 12 Zeichen)",
       "DOMAIN_CODENAME_ERROR": "Ungültiger Domain-Codename",
       "JUSTIFICATION": "Bitte um Begründung",
-      "JUSTIFICATION_DESCRIPTION": "Kurze Begründung für die Erstellung der neuen Domain, einschließlich des Namens der anfragenden Institution und des Hauptzwecks für die Bereitstellung von NMaaS-Anwendungen",
+      "JUSTIFICATION_DESCRIPTION": "Kurze Begründung für die Erstellung der neuen Domain, einschließlich des Namens der anfragenden Institution und des Hauptzwecks für die Bereitstellung von nmaas-Anwendungen",
       "VPN_OPTION": "VPN solution",
       "VPN_OPTION_DESCRIPTION": "Two types of software-based VPN solutions are currently supported. Select the preferred one",
       "VPN_USER_IP": "Public IP for VPN tunnel setup",
       "VPN_USER_IP_DESCRIPTION": "Public IP for VPN tunnel termination on user end",
       "VPN_USER_SUBNETS": "Monitored user subnets",
-      "VPN_USER_SUBNETS_DESCRIPTION": "List of monitored subnets that should be reachable from your application deployed on NMaaS",
+      "VPN_USER_SUBNETS_DESCRIPTION": "List of monitored subnets that should be reachable from your application deployed on nmaas",
       "VPN_USER_SUBNETS_ADD": "Add subnet",
       "VPN_USER_SUBNETS_SUBNET": "Subnet",
       "ADDITIONAL_VPN_SUBNETS": "Additional subnets",
-      "ADDITIONAL_VPN_SUBNETS_DESCRIPTION": "Additional IP ranges that should be reachable from your NMaaS applications, outside those specified above (e.g. some public services)",
+      "ADDITIONAL_VPN_SUBNETS_DESCRIPTION": "Additional IP ranges that should be reachable from your nmaas applications, outside those specified above (e.g. some public services)",
       "TECH_CONTACT": "Technical contact",
       "TECH_CONTACT_DESCRIPTION": "Person to be contacted to further discuss technical matters related with VPN setup",
       "TECH_CONTACT_PLACEHOLDER": "Name and email",
@@ -993,7 +995,7 @@
     },
     "MODAL": {
       "TITLE": "Mail wurde versendet",
-      "MESSAGE": "Das NMaaS Team wird bald antworten.",
+      "MESSAGE": "Das nmaas Team wird bald antworten.",
       "CLOSE_BUTTON": "Schließen"
     },
     "SELECT_CATEGORY": "Select category",
diff --git a/src/test/shell/data/i18n/en.json b/src/test/shell/data/i18n/en.json
index 48f7f8684a80810ce15b31c86709143d9e35438a..1ab6473b1134c39b50b0154be63494964baa6eb6 100644
--- a/src/test/shell/data/i18n/en.json
+++ b/src/test/shell/data/i18n/en.json
@@ -32,28 +32,28 @@
     "REGISTER": "Register",
     "TITLE1": "Network Management as a Service",
     "TITLE2": "provides a portfolio of network management applications run as dedicated per-user instances in the cloud.",
-    "INTRO_TEXT": "GÉANT’s NMaaS service includes three aspects: providing, managing and maintaining the infrastructure of the NMaaS service portal, platform and selected tools, supporting users in using the system, and the selected tools for monitoring their networks via NMaaS, as well as supporting users that contribute their software to NMaaS system.",
+    "INTRO_TEXT": "GÉANT’s nmaas service includes three aspects: providing, managing and maintaining the infrastructure of the nmaas service portal, platform and selected tools, supporting users in using the system, and the selected tools for monitoring their networks via nmaas, as well as supporting users that contribute their software to nmaas system.",
     "TARGET_USERS_HEADER": "Target users",
-    "TARGET_USERS_TEXT": "NMaaS users are organisations that do not want to own NMS infrastructure themselves and/or want to outsource network management, as well as organisations and/or individuals that are searching for quality network management software or who want to share their software within the community.",
-    "MARKETPLACE_HEADER": "NMaaS Marketplace",
-    "MARKETPLACE_TEXT": "NMaaS Marketplace is a catalogue of available open source tools, supported by community, distributed free, chosen by administration. There is also place for your application choice - you can propose new applications. ",
+    "TARGET_USERS_TEXT": "nmaas users are organisations that do not want to own NMS infrastructure themselves and/or want to outsource network management, as well as organisations and/or individuals that are searching for quality network management software or who want to share their software within the community.",
+    "MARKETPLACE_HEADER": "nmaas Marketplace",
+    "MARKETPLACE_TEXT": "nmaas Marketplace is a catalogue of available open source tools, supported by community, distributed free, chosen by administration. There is also place for your application choice - you can propose new applications. ",
     "COST_REDUCTION_HEADER": "Cost reduction",
-    "COST_REDUCTION_TEXT": "With NMaaS, users do not have to bear the ownership costs and risks related to maintenance and control of the network management infrastructure.",
+    "COST_REDUCTION_TEXT": "With nmaas, users do not have to bear the ownership costs and risks related to maintenance and control of the network management infrastructure.",
     "SECURITY_HEADER": "Security",
-    "SECURITY_TEXT": "With NMaaS, you don't have to worry about security. We provide safe connection to separated instances by VPN to your network - to allow institutions and projects to safe management of network.",
+    "SECURITY_TEXT": "With nmaas, you don't have to worry about security. We provide safe connection to separated instances by VPN to your network - to allow institutions and projects to safe management of network.",
     "SCALING_HEADER": "Flexible scaling",
-    "SCALING_TEXT": "If You need some horizontal scaling - there is no problem with that on NMaaS. You can very easily scale Your instances in few minutes.",
-    "NMAAS_FEATURES_HEADER": "NMaaS Features",
+    "SCALING_TEXT": "If You need some horizontal scaling - there is no problem with that on nmaas. You can very easily scale Your instances in few minutes.",
+    "NMAAS_FEATURES_HEADER": "nmaas Features",
     "APP_MARKET_HEADER": "Application Market",
     "APP_MARKET_TEXT": "At store You can find top picked applications to manage and maintain Your network infrastructure, chosen by administrators and community.",
     "OWN_APPS_HEADER": "Own applications",
-    "OWN_APPS_TEXT": "You want to share your own application with the community? NMaaS is open for addition of new applications.",
+    "OWN_APPS_TEXT": "You want to share your own application with the community? nmaas is open for addition of new applications.",
     "EDUGAIN_SUPPORT_HEADER": "eduGAIN support",
     "EDUGAIN_SUPPORT_TEXT": "You don't need to create a new account. Login using an existing account from you identity provider federated under eduGAIN.",
     "FAST_DEPLOYMENT_HEADER": "Fast & easy deployment",
     "FAST_DEPLOYMENT_TEXT": "Upon your request applications are deployed within minutes with custom configuration provided through a simple wizard.",
     "WEB_PORTAL_HEADER": "Modern user interface",
-    "WEB_PORTAL_TEXT": "NMaaS provides a modern web-based user portal that follows reactive design principle.",
+    "WEB_PORTAL_TEXT": "nmaas provides a modern web-based user portal that follows reactive design principle.",
     "KUBERNETES_HEADER": "Kubernetes deployment",
     "KUBERNETES_TEXT": "User application instances are deployed in Kubernetes cluster run on top of dedicated hardware infrastructure assuring high performance and reliability.",
     "TECHNOLOGIES_USED_HEADER": "Technologies used",
@@ -94,8 +94,8 @@
     "USER_DISABLED_MESSAGE": "User is disabled"
   },
   "TEST_INSTANCE_MODAL": {
-    "HEADER": "NMaaS test instance",
-    "BODY": "Please be aware that this is a test NMaaS instance. The user isolation and data security measures are not so strict as on the production instance. Do not use this instance to monitor real equipment.",
+    "HEADER": "nmaas test instance",
+    "BODY": "Please be aware that this is a test nmaas instance. The user isolation and data security measures are not so strict as on the production instance. Do not use this instance to monitor real equipment.",
     "OK_BUTTON": "OK"
   },
   "PROVIDE_SSH_KEY_MODAL": {
@@ -248,10 +248,10 @@
     },
     "ANNOTATIONS" : {
       "HEADER" : "Domain annotations",
-      "SUBHEADER" : "Global domain annotations. This set of annotations will be added to each domain creation.",
+      "SUBHEADER" : "Global domain annotations. This set of annotations will be added to Kubernetes objects created for each new domain.",
       "CREATION" : "Domain namespace annotations",
       "ADD" : "Add annotation",
-      "KEY"  : "Key",
+      "KEY" : "Key",
       "VALUE" : "Value",
       "EDIT" : "Edit global annotations"
     }
@@ -323,11 +323,12 @@
     "LANGUAGE_SUPPORT": "Supported languages",
     "LANGUAGE_ENABLED": "Enabled",
     "LANGUAGE_DISABLED": "Disabled",
-    "TEST_INSTANCE": "Mark as test NMaaS instance",
+    "TEST_INSTANCE": "Mark as test nmaas instance",
     "SEND_APP_INSTANCE_FAILURE_EMAILS": "Send emails when app instance fails to deploy",
-    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Emails list",
-    "DOMAIN_SELECTION_ENABLED" : "Domain selection during registration"
-
+    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Recipients of app deployment failed emails",
+    "DOMAIN_SELECTION_ENABLED" : "Domain selection during registration",
+    "BULK_DOMAINS_ALLOW_FOR_SSO_ACCOUNTS" : "Allow for creation or update of a SSO-enabled account in bulk process",
+    "BULK_DOMAINS_SEND_EMAIL_FOR_NEW_ACCOUNTS" : "Send notification email for new accounts created in bulk process"
   },
   "DOMAIN_DETAILS": {
     "TITLE": "Domain details",
@@ -387,7 +388,7 @@
     }
   },
   "GIT_INFO": {
-    "HEADER": "NMaaS version information",
+    "HEADER": "nmaas version information",
     "VERSION": "Version",
     "BUILD_TIME": "Build time",
     "LAST_COMMIT": "Last commit",
@@ -551,7 +552,7 @@
       "STATE": "State",
       "DEFAULT_ERROR_STATE": "Something went wrong",
       "DETAILS": "Details",
-      "DEFAULT_ERROR_MESSAGE": "Application deployment failed due to an unexpected error. NMaaS support team has been notified already.<br>In order to raise an issue use the <a href=\"about?type=ISSUE_REPORT\">contact form</a>."
+      "DEFAULT_ERROR_MESSAGE": "Application deployment failed due to an unexpected error. nmaas support team has been notified already.<br>In order to raise an issue use the <a href=\"about?type=ISSUE_REPORT\">contact form</a>."
     },
     "DEPLOYMENT_HISTORY": {
       "HEADER": "Deployment history",
@@ -564,7 +565,7 @@
       "ADVANCED_TAB": "Advanced",
       "ADDITIONAL_TAB": "Additional parameters",
       "STORAGE_SPACE": "Storage space",
-      "NMAAS_TOOLS": "NMaaS Tools Page",
+      "NMAAS_TOOLS": "nmaas Tools Page",
       "DOCUMENTATION_INFO": "Detailed field descriptions are available at",
       "PREVIEW": "Configuration preview"
     },
@@ -694,11 +695,11 @@
   },
   "RESET_PASSWORD": {
     "FORGOT_PASSWORD_BUTTON": "Forgot password",
-    "TEXT": "To reset your password, enter the email address you used to sign in to NMaaS.",
+    "TEXT": "To reset your password, enter the email address you used to sign in to nmaas.",
     "SUBMIT_BUTTON": "Submit",
     "EMAIL": "Email",
     "INVALID_TOKEN": "Your link has already expired. Please fill out forget password form again.",
-    "GO_BACK": "Go back to the NMaaS page",
+    "GO_BACK": "Go back to the nmaas page",
     "MODAL": {
       "HEADER": "Please check your email",
       "BODY": "If you have provided valid email we will send to you link for resetting password. Please be advised that you can only reset password for local account.",
@@ -768,7 +769,7 @@
     "UPDATE_CONFIG_WIZARD_PREVIEW_HEADER": "Update configuration wizard preview"
   },
   "APPS_WIZARD": {
-    "FIRST_PAGE_MESSAGE": "You are about to fill in a request for adding new application to the NMaaS portfolio. You will be guided through a few step process of providing all necessary information about the application, its description, deployment and configuration details. Once the request is submitted it will be reviewed by administrator and either approved or rejected with a proper comment send via email. By checking the box below you confirm that you have the right to publish this application in NMaaS.",
+    "FIRST_PAGE_MESSAGE": "You are about to fill in a request for adding new application to the nmaas portfolio. You will be guided through a few step process of providing all necessary information about the application, its description, deployment and configuration details. Once the request is submitted it will be reviewed by administrator and either approved or rejected with a proper comment send via email. By checking the box below you confirm that you have the right to publish this application in nmaas.",
     "ACCEPT_RULES_CHECKBOX": "I read the general instructions above",
     "NEXT_BUTTON": "Next",
     "SUBMIT_BUTTON": "Submit",
diff --git a/src/test/shell/data/i18n/fr.json b/src/test/shell/data/i18n/fr.json
index fbb5f3486dde1c59fd61dc87b2895e4d66d93e3f..e259068d4fdbbc92231f78763f06d8cb9bf3cd0f 100644
--- a/src/test/shell/data/i18n/fr.json
+++ b/src/test/shell/data/i18n/fr.json
@@ -248,10 +248,10 @@
     },
     "ANNOTATIONS" : {
       "HEADER" : "Domain annotations",
-      "SUBHEADER" : "Global domain annotations. This set of annotations will be added to each domain creation.",
+      "SUBHEADER" : "Global domain annotations. This set of annotations will be added to Kubernetes objects created for each new domain.",
       "CREATION" : "Domain namespace annotations",
       "ADD" : "Add annotation",
-      "KEY"  : "Key",
+      "KEY" : "Key",
       "VALUE" : "Value",
       "EDIT" : "Edit global annotations"
     }
@@ -325,8 +325,10 @@
     "LANGUAGE_DISABLED": "Désactivé",
     "TEST_INSTANCE": "Marquer comme instance de test NMaaS",
     "SEND_APP_INSTANCE_FAILURE_EMAILS": "Send emails when app instance fails to deploy",
-    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Emails list",
-    "DOMAIN_SELECTION_ENABLED" : "Sélection de domaine lors de l'enregistrement"
+    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Recipients of app deployment failed emails",
+    "DOMAIN_SELECTION_ENABLED" : "Sélection de domaine lors de l'enregistrement",
+    "BULK_DOMAINS_ALLOW_FOR_SSO_ACCOUNTS" : "Allow for creation or update of a SSO-enabled account in bulk process",
+    "BULK_DOMAINS_SEND_EMAIL_FOR_NEW_ACCOUNTS" : "Send notification email for new accounts created in bulk process"
   },
   "DOMAIN_DETAILS": {
     "TITLE": "Détails de l'organisation",
diff --git a/src/test/shell/data/i18n/pl.json b/src/test/shell/data/i18n/pl.json
index c345660d41a12f0d47a58e4213edfaaa5b3771c3..aa680650c7fa13b0f2120eb18cfb7f55d4b93a53 100644
--- a/src/test/shell/data/i18n/pl.json
+++ b/src/test/shell/data/i18n/pl.json
@@ -32,28 +32,28 @@
     "REGISTER": "Rejestracja",
     "TITLE1": "Network Management as a Service",
     "TITLE2": "oferuje dostęp do portfolio aplikacji do zarządzania siecią uruchamianych na żądanie użytkownika w chmurze.",
-    "INTRO_TEXT": "Usługa NMaaS oferowana przez GÉANT obejmuje trzy aspekty: dostarczenie, zarządzanie i utrzymanie Portalu i oprogramowania NMaaS oraz wybranych aplikacji, wsparcie użytkowników w korzystaniu z systemu oraz wybranych przez siebie aplikacji jak również wparcie użytkowników planujących udostępnić swoje aplikacje w ramach NMaaS.",
+    "INTRO_TEXT": "Usługa nmaas oferowana przez GÉANT obejmuje trzy aspekty: dostarczenie, zarządzanie i utrzymanie Portalu i oprogramowania nmaas oraz wybranych aplikacji, wsparcie użytkowników w korzystaniu z systemu oraz wybranych przez siebie aplikacji jak również wparcie użytkowników planujących udostępnić swoje aplikacje w ramach nmaas.",
     "TARGET_USERS_HEADER": "Użytkownicy",
-    "TARGET_USERS_TEXT": "NMaaS jest dogodnym rozwiązaniem dla organizacji, które nie chcą utrzymywać własnej infrastruktury na potrzeby systemu zarządzania siecią lub/oraz planują zlecenie czynności związanych z zarządzaniem siecią firmie zewnętrznej jak również dla użytkowników, którzy szukają wysokiej jakości narzędzi do zarządzania siecią lub chcą udostępnić swoje oprogramowanie innymi.",
-    "MARKETPLACE_HEADER": "Sklep NMaaS",
-    "MARKETPLACE_TEXT": "Sklep NMaaS oferuje zestaw narzędzi open source, wpieranych przez społeczność, rozpowszechnianych za darmo i wybranych przez administratorów. W Sklepie jest również miejsce na aplikacje użytkowników - zaproponuj jaką aplikację możemy dodać.",
+    "TARGET_USERS_TEXT": "nmaas jest dogodnym rozwiązaniem dla organizacji, które nie chcą utrzymywać własnej infrastruktury na potrzeby systemu zarządzania siecią lub/oraz planują zlecenie czynności związanych z zarządzaniem siecią firmie zewnętrznej jak również dla użytkowników, którzy szukają wysokiej jakości narzędzi do zarządzania siecią lub chcą udostępnić swoje oprogramowanie innymi.",
+    "MARKETPLACE_HEADER": "Sklep nmaas",
+    "MARKETPLACE_TEXT": "Sklep nmaas oferuje zestaw narzędzi open source, wpieranych przez społeczność, rozpowszechnianych za darmo i wybranych przez administratorów. W Sklepie jest również miejsce na aplikacje użytkowników - zaproponuj jaką aplikację możemy dodać.",
     "COST_REDUCTION_HEADER": "Redukcja kosztów",
-    "COST_REDUCTION_TEXT": "Korzystając z NMaaS użytkownicy nie ponoszą kosztów związanych z posiadaniem oraz ryzyka związanego z koniecznością utrzymania i kontrolowania infrastruktury systemu zarządzania siecią.",
+    "COST_REDUCTION_TEXT": "Korzystając z nmaas użytkownicy nie ponoszą kosztów związanych z posiadaniem oraz ryzyka związanego z koniecznością utrzymania i kontrolowania infrastruktury systemu zarządzania siecią.",
     "SECURITY_HEADER": "Bezpieczeństwo",
-    "SECURITY_TEXT": "Użytkownicy korzystający z NMaaS nie muszą się martwić o bezpieczeństwo danych zbieranych z monitorowanych urządzeń. NMaaS zapewnia bezpieczne połączenie między aplikacjami działającymi w chmurze a siecią użytkownika z wykorzystaniem stosownej technologii VPN.",
+    "SECURITY_TEXT": "Użytkownicy korzystający z nmaas nie muszą się martwić o bezpieczeństwo danych zbieranych z monitorowanych urządzeń. nmaas zapewnia bezpieczne połączenie między aplikacjami działającymi w chmurze a siecią użytkownika z wykorzystaniem stosownej technologii VPN.",
     "SCALING_HEADER": "Skalowanie",
     "SCALING_TEXT": "Treść zostanie dodana wkrótce.",
-    "NMAAS_FEATURES_HEADER": "Możliwości NMaaS",
+    "NMAAS_FEATURES_HEADER": "Możliwości nmaas",
     "APP_MARKET_HEADER": "Sklep z aplikacjami",
     "APP_MARKET_TEXT": "W sklepie znajdziesz wybrane aplikacje do zarządzania i utrzymania Twojej infrastruktury sieciowej - wybrane przez administratorów i społeczność.",
     "OWN_APPS_HEADER": "Własne aplikacje",
-    "OWN_APPS_TEXT": "Chcesz się podzielić swoją aplikację ze społecznością? NMaaS jest otwarty na nowe aplikacje.",
+    "OWN_APPS_TEXT": "Chcesz się podzielić swoją aplikację ze społecznością? nmaas jest otwarty na nowe aplikacje.",
     "EDUGAIN_SUPPORT_HEADER": "Wsparcie dla eduGAIN",
     "EDUGAIN_SUPPORT_TEXT": "Nie musisz tworzyć nowego konta. Zaloguj się korzystając z konta u Twojego IdP zrzeszonego w ramach eduGAIN.",
     "FAST_DEPLOYMENT_HEADER": "Szybkie i proste uruchomienie",
     "FAST_DEPLOYMENT_TEXT": "Od momentu wysłania żądania uruchomienia aplikacje są dostępne w ciągu kilku minut z podstawową konfiguracją wprowadzoną w prostym kreatorze.",
     "WEB_PORTAL_HEADER": "Nowoczesny interfejs użytkownika",
-    "WEB_PORTAL_TEXT": "Dostęp do funkcjonalności NMaaS jest realizowany przez nowoczesny, reaktywny i przyjazny portal webowy.",
+    "WEB_PORTAL_TEXT": "Dostęp do funkcjonalności nmaas jest realizowany przez nowoczesny, reaktywny i przyjazny portal webowy.",
     "KUBERNETES_HEADER": "Kubernetes",
     "KUBERNETES_TEXT": "Aplikacje użytkowników są uruchamiane w klastrze Kubernetesa skonfigurowanym na dedykowanej infrastrukturze fizycznej w celu zapewnienia wysokiej wydajności i niezawodności.",
     "TECHNOLOGIES_USED_HEADER": "Użyte technologie",
@@ -94,8 +94,8 @@
     "USER_DISABLED_MESSAGE": "Użytkownik jest nieaktywny"
   },
   "TEST_INSTANCE_MODAL": {
-    "HEADER": "Instancja testowa NMaaS",
-    "BODY": "Pamiętaj, że jest to testowa instancja NMaaS. Izolacja użytkowników oraz środki zabezpieczenia danych nie są tak rygorystyczne, jak w przypadku instancji produkcyjnej. Nie używaj tej instancji do monitorowania rzeczywistych urządzeń.",
+    "HEADER": "Instancja testowa nmaas",
+    "BODY": "Pamiętaj, że jest to testowa instancja nmaas. Izolacja użytkowników oraz środki zabezpieczenia danych nie są tak rygorystyczne, jak w przypadku instancji produkcyjnej. Nie używaj tej instancji do monitorowania rzeczywistych urządzeń.",
     "OK_BUTTON": "OK"
   },
   "PROVIDE_SSH_KEY_MODAL": {
@@ -248,12 +248,12 @@
     },
     "ANNOTATIONS" : {
       "HEADER" : "Adnotacje domeny",
-      "SUBHEADER" : "Globalne ustawienie adnotacji domeny. Poniższe domeny będą dodane podczas tworzenia domeny.",
+      "SUBHEADER" : "Globalne ustawienie adnotacji domeny. Poniższy zestaw adnotacji zostanie dodany do obiektów Kubernetes tworzonych dla każdej nowej domeny.",
       "CREATION" : "Adnotację przestrzeni domeny",
-      "ADD" : "Dodajadnotacje",
-      "KEY"  : "Klucz",
+      "ADD" : "Dodaj adnotację",
+      "KEY" : "Klucz",
       "VALUE" : "Wartość",
-      "EDIT" : "Edytuj adnotacje"
+      "EDIT" : "Edytuj adnotację"
     }
   },
   "APP_INSTANCES": {
@@ -323,10 +323,12 @@
     "LANGUAGE_SUPPORT": "Aktywowane języki",
     "LANGUAGE_ENABLED": "Aktywny",
     "LANGUAGE_DISABLED": "Nieaktywny",
-    "TEST_INSTANCE": "Oznacz jako instancję testową NMaaS",
+    "TEST_INSTANCE": "Oznacz jako instancję testową nmaas",
     "SEND_APP_INSTANCE_FAILURE_EMAILS": "Wyślij email gdy instalacja aplikacji nie powiedzie się",
-    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Lista adresów email",
-    "DOMAIN_SELECTION_ENABLED" : "Wybór domeny podczas rejestracji"
+    "SEND_APP_INSTANCE_FAILURE_EMAILS_LIST": "Odbiorcy wiadomości email o problemie z instalacją aplikacji",
+    "DOMAIN_SELECTION_ENABLED" : "Wybór domeny podczas rejestracji",
+    "BULK_DOMAINS_ALLOW_FOR_SSO_ACCOUNTS" : "Allow for creation or update of a SSO-enabled account in bulk process",
+    "BULK_DOMAINS_SEND_EMAIL_FOR_NEW_ACCOUNTS" : "Send notification email for new accounts created in bulk process"
   },
   "DOMAIN_DETAILS": {
     "TITLE": "Szczegóły domeny",
@@ -386,7 +388,7 @@
     }
   },
   "GIT_INFO": {
-    "HEADER": "Informacje o wersji NMaaS",
+    "HEADER": "Informacje o wersji nmaas",
     "VERSION": "Wersja",
     "BUILD_TIME": "Ostatnie budowanie",
     "LAST_COMMIT": "Ostatni commit",
@@ -550,7 +552,7 @@
       "STATE": "Stan",
       "DEFAULT_ERROR_STATE": "Coś poszło nie tak",
       "DETAILS": "Szczegóły",
-      "DEFAULT_ERROR_MESSAGE": "Aktywacja aplikacji nie powiodła się z powodu nieoczekiwanego błędu. Zespół NMaaS został już powiadomiony.<br>Aby zgłosić problem, skorzystaj z <a href=\"about?type=ISSUE_REPORT\">formularza kontaktowego</a>."
+      "DEFAULT_ERROR_MESSAGE": "Aktywacja aplikacji nie powiodła się z powodu nieoczekiwanego błędu. Zespół nmaas został już powiadomiony.<br>Aby zgłosić problem, skorzystaj z <a href=\"about?type=ISSUE_REPORT\">formularza kontaktowego</a>."
     },
     "DEPLOYMENT_HISTORY": {
       "HEADER": "Historia uruchomienia aplikacji",
@@ -563,7 +565,7 @@
       "ADVANCED_TAB": "Zaawansowana",
       "ADDITIONAL_TAB": "Rozszerzona",
       "STORAGE_SPACE": "Przestrzeń dyskowa",
-      "NMAAS_TOOLS": "NMaaS Tools Page",
+      "NMAAS_TOOLS": "nmaas Tools Page",
       "DOCUMENTATION_INFO": "Detailed field descriptions are available at",
       "PREVIEW": "Podgląd konfiguracji"
     },
@@ -618,17 +620,17 @@
       "APP_UPGRADE_FAILED": "Aktualizacja aplikacji nie powiodła się"
     },
     "USER_FRIENDLY": {
-      "REQUESTED": "NMaaS przetwarza Twoje żądanie",
-      "VALIDATION": "NMaaS weryfikuje dostępne zasoby",
-      "PREPARATION": "NMaaS przygotowuje środowisko wdrażania dla Twojej aplikacji",
-      "CONNECTING": "NMaaS nawiązuje bezpieczne połączenie",
+      "REQUESTED": "nmaas przetwarza Twoje żądanie",
+      "VALIDATION": "nmaas weryfikuje dostępne zasoby",
+      "PREPARATION": "nmaas przygotowuje środowisko wdrażania dla Twojej aplikacji",
+      "CONNECTING": "nmaas nawiązuje bezpieczne połączenie",
       "CONFIGURATION_AWAITING": "Twoja aplikacja została pomyślnie zainstalowana. <br>Teraz możesz wprowadzić pierwszą konfigurację korzystając z akcji <i>Konfiguruj</i>",
       "DEPLOYING": "Aplikacja jest aktywowana. Ten proces może potrwać do kilku minut. <br>Zostaniesz powiadomiony e-mailem gdy aplikacja będzie gotowa",
       "RUNNING": "Twoja aplikacja jest aktywna. <br>Możesz teraz uzyskać dostęp do swojej aplikacji korzystając z opcji <i>Dostęp</i> z menu <i>Akcje</i>.",
       "UNDEPLOYING": "Aplikacja jest deaktywowana. Ten proces może potrwać do kilku minut",
       "DONE":  "Aplikacja została pomyślnie deaktywowana",
       "FAILURE": "",
-      "UNKNOWN": "Nieznany stan aplikacji - skontaktuj się z zespołem NMaaS za pomocą formularza kontaktowego dostępnego na podstronie \"O nas\"",
+      "UNKNOWN": "Nieznany stan aplikacji - skontaktuj się z zespołem nmaas za pomocą formularza kontaktowego dostępnego na podstronie \"O nas\"",
       "REMOVED": "Aplikacja została pomyślnie usunięta"
     },
     "SHOW_VERSIONS_LABEL": "Pokaż dostępne wersje",
@@ -697,7 +699,7 @@
     "SUBMIT_BUTTON": "Prześlij",
     "EMAIL": "Email",
     "INVALID_TOKEN": "Twój link wygasł. Proszę ponownie wypełnij formularz resetowania hasła.",
-    "GO_BACK": "Powrót do strony NMaaS",
+    "GO_BACK": "Powrót do strony nmaas",
     "MODAL": {
       "HEADER": "Proszę sprawdź skrzynkę pocztową",
       "BODY": "Jeśli wprowadziłeś poprawny adres mailowy, link do zresetowania hasła został przesłany. Reset hasła dotyczy jedynie kont lokalnych.",
@@ -767,7 +769,7 @@
     "UPDATE_CONFIG_WIZARD_PREVIEW_HEADER": "Podgląd formularza do aktualizacji konfiguracji aplikacji"
   },
   "APPS_WIZARD": {
-    "FIRST_PAGE_MESSAGE": "You are about to fill in a request for adding new application to the NMaaS portfolio. You will be guided through a few step process of providing all necessary information about the application, its description, deployment and configuration details. Once the request is submitted it will be reviewed by administrator and either approved or rejected with a proper comment send via email. By checking the box below you confirm that you have the right to publish this application in NMaaS.",
+    "FIRST_PAGE_MESSAGE": "You are about to fill in a request for adding new application to the nmaas portfolio. You will be guided through a few step process of providing all necessary information about the application, its description, deployment and configuration details. Once the request is submitted it will be reviewed by administrator and either approved or rejected with a proper comment send via email. By checking the box below you confirm that you have the right to publish this application in nmaas.",
     "ACCEPT_RULES_CHECKBOX": "Zapoznałem się z instrukcją powyżej",
     "NEXT_BUTTON": "Następne",
     "SUBMIT_BUTTON": "Wyślij",
@@ -800,7 +802,7 @@
     "UPDATE_CONFIG_WIZARD_TEMPLATE_LABEL": "Formularz do aktualizacji konfiguracji aplikacji",
     "NEW_APP_MODAL": {
       "HEADER": "Nowa aplikacja została wysłana poprawnie",
-      "BODY": "Dziękujemy za przesłanie nowej aplikacji. Twoje zgłoszenie musi zostać teraz sprawdzona przez zespół NMaaS. To może chwile zająć.",
+      "BODY": "Dziękujemy za przesłanie nowej aplikacji. Twoje zgłoszenie musi zostać teraz sprawdzona przez zespół nmaas. To może chwile zająć.",
       "BACK_TO_APP_MANAGEMENT_BUTTON": "Powrót"
     },
     "EDIT_APP_MODAL": {
@@ -820,23 +822,23 @@
     "ACCEPT_RULES_TOOLTIP": "Musisz zaakceptować zasady korzystania!",
     "NAME_TOOLTIP": "Oficjalna nazwa aplikacji.",
     "VERSION_TOOLTIP": "Numer bieżącego wydania aplikacji.",
-    "LICENSE_TOOLTIP": "Podaj nazwę licencji, na której aplikacja została wydana. Upewnij się że licencja ta pozwala na wykorzystanie aplikacji w systemie NMaaS.",
+    "LICENSE_TOOLTIP": "Podaj nazwę licencji, na której aplikacja została wydana. Upewnij się że licencja ta pozwala na wykorzystanie aplikacji w systemie nmaas.",
     "LICENSE_URL_TOOLTIP": "Podaj link do opisu licencji, aby użytkownicy mogli uzyskać więcej informacji o niej i prawach do wykorzystania aplikacji.",
     "PROJECT_WEBSITE_TOOLTIP": "Podaj link do strony projektu, aby użytkownicy mogli uzyskać więcej informacji o całym projekcie.",
     "SOURCE_CODE_TOOLTIP": "Link do kodu źródłowego na przykład github.com/project.",
     "PROJECT_ISSUES_TOOLTIP": "Podaj link do issues projektu, aby użytkownicy mogli łatwo znaleźć sposób na zgłoszenie problemu z tym narzędziem.",
     "TAGS_TOOLTIP": "Wybierz tagi, które najlepiej opisują aplikacje. Pomoże to użytkownikom w bardziej efektywnym wyszukiwaniu aplikacji, których potrzebują.",
     "NEW_TAGS_TOOLTIP": "Dodaj tagi, jeśli uważasz że obecnie istniejące nie pasują do Twojej aplikacji. Wpisz nazwę tagu i wciśnij enter aby dodać nowy tag.",
-    "BRIEF_DESCRIPTION_TOOLTIP": "Podaj krótki opis aplikacji. Tekst ten będzie widoczny na stronie marketu NMaaS.",
+    "BRIEF_DESCRIPTION_TOOLTIP": "Podaj krótki opis aplikacji. Tekst ten będzie widoczny na stronie marketu nmaas.",
     "FULL_DESCRIPTION_TOOLTIP": "Podaj pełny opis aplikacji. Tekst ten będzie widoczny w widoku szczegółowym aplikacji.",
-    "CHART_NAME_TOOLTIP": "Podaj nazwę chart, który będzie wykorzystywany w systemie NMaaS.",
-    "CHART_VERSION_TOOLTIP": "Podaj wersję Helm chart, która będzie wykorzystywana w systemie NMaaS.",
+    "CHART_NAME_TOOLTIP": "Podaj nazwę chart, który będzie wykorzystywany w systemie nmaas.",
+    "CHART_VERSION_TOOLTIP": "Podaj wersję Helm chart, która będzie wykorzystywana w systemie nmaas.",
     "HELM_CHART_REPOSITORY_NAME_TOOLTIP": "Podaj nazwę repozytorium Helm Chart",
     "HELM_CHART_REPOSITORY_URL_TOOLTIP": "Podaj adres URL repozytorium Helm Chart",
     "MAIN_DEPLOYMENT_NAME_TOOLTIP": "Podaj nazwę głównego komponentu instalowanego w ramach chartu",
     "DEFAULT_STORAGE_SPACE_TOOLTIP": "Podaj domyślną przestrzeń dyskową (w gigabajtach).",
-    "DEPLOY_PARAMETER_TOOLTIP": "Niektóre aplikacje wykorzystują globalne ustawienia systemu NMaaS. Jeśli chcesz wykorzystać jedną z nich podaj klucz, pod którym powinniśmy podać te ustawienia.",
-    "REPOSITORY_REQUIRED_TOOLTIP": "NMaaS może wykorzystać GitLab aby zachować konfiguracje każdej instancji.",
+    "DEPLOY_PARAMETER_TOOLTIP": "Niektóre aplikacje wykorzystują globalne ustawienia systemu nmaas. Jeśli chcesz wykorzystać jedną z nich podaj klucz, pod którym powinniśmy podać te ustawienia.",
+    "REPOSITORY_REQUIRED_TOOLTIP": "nmaas może wykorzystać GitLab aby zachować konfiguracje każdej instancji.",
     "DISABLED_NEXT_BUTTON_TOOLTIP": "Musisz wypełnić wszystkie wymagane pola!",
     "DEPLOY_PARAMETERS_DROPDOWN": "Wybierz parametry globalne",
     "CONFIG_FILENAME_LABEL": "Nazwa pliku konfiguracyjnego",
@@ -855,8 +857,8 @@
     "BASIC_APP_INFO_STEP_INFO": "Basic set of information about the application. Application can be filtered by tag. Select an existing tag or create a new one if none is suitable.",
     "LOGO_AND_SCREENSHOTS_STEP_INFO": "Application logo is displayed in various views in the application. A set of screenshots should give a nice overview of the application's UI.",
     "APP_DESCRIPTIONS_STEP_INFO": "Brief and full descriptions of the application should provide a basic (limited length) and comprehensive information about the nature and purpose of the application. Descriptions should be provided in as many supported languages as possible.",
-    "APP_DEPLOYMENT_SPEC_STEP_INFO": "Applications offered through NMaaS are deployed in Kubernetes as Helm charts. Basic information about the chart is required with additional set of optional parameters to be passed during the installation process.",
-    "CONFIG_TEMPLATES_STEP_INFO": "NMaaS applications are populated with basic configuration parameters provided by users using a wizard. The list of configuration files (with parameterized content) to be used and loaded by the application at startup should be provided. Those need to be complemented with the definition of the wizard component dedicated for particular application allowing user to provide all necessary parameters used to populate configuration files. ",
+    "APP_DEPLOYMENT_SPEC_STEP_INFO": "Applications offered through nmaas are deployed in Kubernetes as Helm charts. Basic information about the chart is required with additional set of optional parameters to be passed during the installation process.",
+    "CONFIG_TEMPLATES_STEP_INFO": "nmaas applications are populated with basic configuration parameters provided by users using a wizard. The list of configuration files (with parameterized content) to be used and loaded by the application at startup should be provided. Those need to be complemented with the definition of the wizard component dedicated for particular application allowing user to provide all necessary parameters used to populate configuration files. ",
     "BASIC_AUTH_LABEL": "Wymaga podstawowego uwierzytelnienia",
     "BASIC_AUTH_TOOLTIP": "Możesz dodać podstawowe uwierzytelnienie do Twojej aplikacji zaznaczając tą opcję.",
     "TERMS_ACCEPTANCE_LABEL": "Terms acceptance required",
@@ -881,8 +883,8 @@
     "CONFIG_UPDATE_ENABLED": "Zezwól na aktualizowanie konfiguracji",
     "STATIC_GLOBAL_DEPLOY_PARAMETERS": "Static global deploy parameters",
     "DEPLOY_PARAMETERS": "Global deploy parameters",
-    "PROJECT_NMAAS_DOCUMENTATION_LABEL": "NMaaS Documentation URL",
-    "PROJECT_NMAAS_DOCUMENTATION_TOOLTIP": "Provide URL to NMaaS Documentatnion (NMaaS Tools)",
+    "PROJECT_NMAAS_DOCUMENTATION_LABEL": "nmaas Documentation URL",
+    "PROJECT_NMAAS_DOCUMENTATION_TOOLTIP": "Provide URL to nmaas Documentatnion (nmaas Tools)",
     "RAW_JSON": "Format JSON",
     "FORM_BUILDER": "Tworzenie formularza",
     "FORM_DEFINITION": "Definicja formularza",
@@ -938,8 +940,8 @@
   "ABOUT": {
     "CONTACT_TITLE": "Skontaktuj się z nami",
     "CHANGELOG_TITLE": "Aktualna wersja oprogramowanie oraz wykaz zmian",
-    "CONTACT_DESC": "Formularz kontaktowy umożliwia łatwy kontakt z zespołem NMaaS. Wybierz typ formularza, który jest najbardziej odpowiedni dla Twojego zgłoszenia.",
-    "CHANGELOG_DESC": "Poniżej znajdziesz szczegółowe informacje o aktualnej wersji NMaaS oraz podsumowanie zmian wprowadzonych w poprzednich wersjach oprogramowania."
+    "CONTACT_DESC": "Formularz kontaktowy umożliwia łatwy kontakt z zespołem nmaas. Wybierz typ formularza, który jest najbardziej odpowiedni dla Twojego zgłoszenia.",
+    "CHANGELOG_DESC": "Poniżej znajdziesz szczegółowe informacje o aktualnej wersji nmaas oraz podsumowanie zmian wprowadzonych w poprzednich wersjach oprogramowania."
   },
   "CHANGELOG": {
     "CHANGELOG_LAST": "Ostatnia wersja",
@@ -969,17 +971,17 @@
       "DOMAIN_CODENAME_DESCRIPTION": "Skrócona nazwa domeny (do 12 znaków)",
       "DOMAIN_CODENAME_ERROR": "Niewłaściwy kod domeny",
       "JUSTIFICATION": "Uzasadnienie prośby",
-      "JUSTIFICATION_DESCRIPTION": "Krótkie uzasadnienie prośby zawierajace informację o zamierzonym sposobie wykorzystania usługi NMaaS",
+      "JUSTIFICATION_DESCRIPTION": "Krótkie uzasadnienie prośby zawierajace informację o zamierzonym sposobie wykorzystania usługi nmaas",
       "VPN_OPTION": "Rozwiązanie VPN",
       "VPN_OPTION_DESCRIPTION": "Dwa rozwiązania VPN są aktualnie wpierane. Wybierz preferowaną opcję",
       "VPN_USER_IP": "Public IP for VPN tunnel setup",
       "VPN_USER_IP_DESCRIPTION": "Public IP for VPN tunnel termination on user end",
       "VPN_USER_SUBNETS": "Monitored user subnets",
-      "VPN_USER_SUBNETS_DESCRIPTION": "List of monitored subnets that should be reachable from your application deployed on NMaaS",
+      "VPN_USER_SUBNETS_DESCRIPTION": "List of monitored subnets that should be reachable from your application deployed on nmaas",
       "VPN_USER_SUBNETS_ADD": "Nowa podsieć",
       "VPN_USER_SUBNETS_SUBNET": "Podsieć",
       "ADDITIONAL_VPN_SUBNETS": "Dodatkowe podsieci",
-      "ADDITIONAL_VPN_SUBNETS_DESCRIPTION": "Additional IP ranges that should be reachable from your NMaaS applications, outside those specified above (e.g. some public services)",
+      "ADDITIONAL_VPN_SUBNETS_DESCRIPTION": "Additional IP ranges that should be reachable from your nmaas applications, outside those specified above (e.g. some public services)",
       "TECH_CONTACT": "Kontakt techniczny",
       "TECH_CONTACT_DESCRIPTION": "Person to be contacted to further discuss technical matters related with VPN setup",
       "TECH_CONTACT_PLACEHOLDER": "Nazwisko oraz adres email",
@@ -994,7 +996,7 @@
     },
     "MODAL": {
       "TITLE": "Mail został wysłany",
-      "MESSAGE": "Zespół NMaaS odpowie jak tylko będzie to możliwe.",
+      "MESSAGE": "Zespół nmaas odpowie jak tylko będzie to możliwe.",
       "CLOSE_BUTTON": "Zamknij"
     },
     "SELECT_CATEGORY": "Wybierz kategorię",