diff --git a/docker/nmaas-platform.properties.template b/docker/nmaas-platform.properties.template
index 93cec7bb271b472a93c632e9a3f8388b75a1eef2..3c3612040d65754cfe9dc412d26e803c5848e77c 100644
--- a/docker/nmaas-platform.properties.template
+++ b/docker/nmaas-platform.properties.template
@@ -141,8 +141,7 @@ janitor.port=${JANITOR_PORT}
 # -------------------- #
 # GitLab configuration #
 # -------------------- #
-gitlab.address=${GITLAB_ADDRESS}
-gitlab.port=${GITLAB_PORT}
+gitlab.apiUrl=${GITLAB_API_URL}
 gitlab.token=${GITLAB_TOKEN}
 
 # ------------------------ #
diff --git a/src/integrationTest/resources/application.properties b/src/integrationTest/resources/application.properties
index f97e69412aab321e14b36f930f78ccb9105ef1c5..cba386b644c32db8498fd14e6eff98ffbb8db03f 100644
--- a/src/integrationTest/resources/application.properties
+++ b/src/integrationTest/resources/application.properties
@@ -118,8 +118,7 @@ janitor.port=5000
 # -------------------- #
 # GitLab configuration #
 # -------------------- #
-gitlab.address=nmaas-gitlab-unicorn
-gitlab.port=8080
+gitlab.apiUrl=http://nmaas-gitlab-unicorn:8080
 gitlab.token=test_gitlab_token
 
 # ------------------------ #
diff --git a/src/main/java/net/geant/nmaas/externalservices/gitlab/GitLabManager.java b/src/main/java/net/geant/nmaas/externalservices/gitlab/GitLabManager.java
index f763eff5655241556b5973edf1795d09d1cb082d..a833ba2ef14981fdaeb4967eceda955fecccd8a5 100644
--- a/src/main/java/net/geant/nmaas/externalservices/gitlab/GitLabManager.java
+++ b/src/main/java/net/geant/nmaas/externalservices/gitlab/GitLabManager.java
@@ -22,21 +22,16 @@ import static com.google.common.base.Preconditions.checkArgument;
 @Log4j2
 public class GitLabManager {
 
-    @Value("${gitlab.address}")
-    private String gitLabAddress;
+    private static final String GITLAB_API_NAMESPACE = "/api/v4";
 
-    @Value("${gitlab.port}")
-    private Integer gitLabPort;
+    @Value("${gitlab.apiUrl}")
+    private String gitLabApiUrl;
 
     @Value("${gitlab.token}")
     private String gitLabToken;
 
-    public String getGitlabServer() {
-        return this.gitLabAddress;
-    }
-
-    public int getGitlabPort() {
-        return this.gitLabPort;
+    public String getGitLabApiUrl() {
+        return this.gitLabApiUrl;
     }
 
     public GroupApi groups() {
@@ -59,19 +54,20 @@ public class GitLabManager {
         return new GitLabApi(GitLabApi.ApiVersion.V4, getApiUrl(), this.gitLabToken);
     }
 
-    private String getApiUrl(){
-        return String.format("http://%s:%d", this.gitLabAddress, this.gitLabPort);
+    String getApiUrl() {
+        return gitLabApiUrl.endsWith(GITLAB_API_NAMESPACE)
+                ? gitLabApiUrl.substring(0, gitLabApiUrl.length() - GITLAB_API_NAMESPACE.length())
+                : gitLabApiUrl;
     }
 
     public void validateGitLabInstance() {
-        checkArgument(this.gitLabAddress != null && !this.gitLabAddress.isEmpty(), "GitLab address is null or empty");
-        checkArgument(this.gitLabPort != null, "GitLab port is null");
+        checkArgument(this.gitLabApiUrl != null && !this.gitLabApiUrl.isEmpty(), "GitLab api URL is null or empty");
         checkArgument(this.gitLabToken != null && !this.gitLabToken.isEmpty(), "GitLab token is null or empty");
         try {
             api().getVersion();
             log.trace("GitLab instance is running");
-        } catch (GitLabApiException e){
-            throw new GitLabInvalidConfigurationException("GitLab instance is not running -> " + e.getMessage());
+        } catch (GitLabApiException e) {
+            throw new GitLabInvalidConfigurationException("GitLab instance doesn't respond -> " + e.getMessage());
         }
     }
 
diff --git a/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandler.java b/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandler.java
index 1ae22d4c96ef0bd1975b28de4655bbcd1fa319ff..646309ed57fd872851bf36787ae1380beea50bc7 100644
--- a/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandler.java
+++ b/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandler.java
@@ -201,8 +201,8 @@ public class GitLabConfigHandler implements GitConfigHandler {
     String getHttpUrlToRepo(Integer gitLabProjectId) throws GitLabApiException {
         String[] urlFromGitlabApiParts = gitLabManager.projects().getProject(gitLabProjectId).getHttpUrlToRepo().split("//");
         String[] urlParts = urlFromGitlabApiParts[1].split("/");
-        urlParts[0] = gitLabManager.getGitlabServer() + ":" + gitLabManager.getGitlabPort();
-        return urlFromGitlabApiParts[0] + "//" + String.join("/", urlParts);
+        urlParts[0] = gitLabManager.getGitLabApiUrl();
+        return String.join("/", urlParts);
     }
 
     @Override
@@ -261,8 +261,8 @@ public class GitLabConfigHandler implements GitConfigHandler {
      *
      * @param deploymentId unique identifier of service deployment
      * @param configIds list of identifiers of configuration files that should be loaded from database and uploaded to the git repository
-     * @throws InvalidDeploymentIdException if a service for given deployment identifier could not be found in database
-     * @throws ConfigFileNotFoundException if any of the configuration files for which an identifier is given could not be found in database
+     * @throws InvalidDeploymentIdException if a service for given deployment identifier could not be found in the database
+     * @throws ConfigFileNotFoundException if any of the configuration files for which an identifier is given could not be found in the database
      * @throws FileTransferException if any error occurs during communication with the git repository API
      */
     @Override
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java
index dc805ba395ab1d9dcef873917da84a768beb3a20..b5c106c37295a6a8a86314799fa46509977a444a 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java
@@ -10,12 +10,23 @@ import net.geant.nmaas.notifications.MailAttributes;
 import net.geant.nmaas.notifications.NotificationEvent;
 import net.geant.nmaas.notifications.templates.MailType;
 import net.geant.nmaas.orchestration.AppLifecycleManager;
-import net.geant.nmaas.portal.api.domain.*;
+import net.geant.nmaas.portal.api.domain.AppInstanceState;
+import net.geant.nmaas.portal.api.domain.AppRateView;
+import net.geant.nmaas.portal.api.domain.ApplicationBaseView;
+import net.geant.nmaas.portal.api.domain.ApplicationStateChangeRequest;
+import net.geant.nmaas.portal.api.domain.ApplicationView;
+import net.geant.nmaas.portal.api.domain.Id;
+import net.geant.nmaas.portal.api.domain.UserView;
 import net.geant.nmaas.portal.api.exception.MarketException;
 import net.geant.nmaas.portal.api.exception.MissingElementException;
 import net.geant.nmaas.portal.api.exception.ProcessingException;
 import net.geant.nmaas.portal.exceptions.ObjectAlreadyExistsException;
-import net.geant.nmaas.portal.persistent.entity.*;
+import net.geant.nmaas.portal.persistent.entity.Application;
+import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
+import net.geant.nmaas.portal.persistent.entity.ApplicationState;
+import net.geant.nmaas.portal.persistent.entity.ApplicationVersion;
+import net.geant.nmaas.portal.persistent.entity.Role;
+import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.persistent.repositories.RatingRepository;
 import net.geant.nmaas.portal.service.ApplicationInstanceService;
 import net.geant.nmaas.portal.service.impl.ApplicationServiceImpl;
@@ -141,8 +152,7 @@ public class ApplicationController extends AppBaseController {
 	@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN') || hasRole('ROLE_TOOL_MANAGER')")
 	@Transactional
 	public void updateApplicationBaseOwner(@PathVariable Long id, @PathVariable String owner, Principal principal) {
-		// only system admin and owner can update application base
-		log.info("Upate owner for application {} to {}", id, owner);
+		log.info("Updating owner of application {} to {}", id, owner);
 		this.applicationBaseOwnerCheck(id, principal);
 		appBaseService.updateOwner(id, owner);
 	}
@@ -154,10 +164,11 @@ public class ApplicationController extends AppBaseController {
 		ApplicationBase base = appBaseService.getBaseApp(id);
 		// only system admin and owner can update application base
 		this.applicationBaseOwnerCheck(base.getName(), principal);
-		ApplicationState state = ApplicationState.DELETED;
         for (ApplicationVersion appVersion : base.getVersions()) {
             Application app = getApp(appVersion.getAppVersionId());
-            if(app.getState() != ApplicationState.DELETED) throw new ProcessingException("Can not delete base, version " +  app.getVersion() +" is not deleted");
+            if (app.getState() != ApplicationState.DELETED) {
+				throw new ProcessingException("Can't delete " + base.getName() + " application base since version " +  app.getVersion() + " is not deleted");
+			}
         }
 		appBaseService.deleteAppBase(base);
 	}
@@ -203,25 +214,26 @@ public class ApplicationController extends AppBaseController {
 		);
 	}
 
-	@GetMapping(value="/base/allversions/{id}")
+	@GetMapping(value = "/base/allversions/{id}")
 	@Transactional
 	public ApplicationDTOVersionList getApplicationDTOWithAllVersions(@PathVariable Long id) {
 		ApplicationBase base = appBaseService.getBaseApp(id);
-		List<Application> versionList = this.applicationService.findAll().stream().filter(app -> app.getName().equalsIgnoreCase(base.getName())).collect(Collectors.toList());
+		List<Application> versionList = this.applicationService.findAll().stream()
+				.filter(app -> app.getName().equalsIgnoreCase(base.getName()))
+				.collect(Collectors.toList());
 		return new ApplicationDTOVersionList(
 				modelMapper.map(base, ApplicationBaseView.class),
 				versionList.stream().map(app->modelMapper.map(app, ApplicationView.class)).collect(Collectors.toList())
 		);
 	}
 
-
-	@GetMapping(value="/versions/{id}")
+	@GetMapping(value = "/versions/{id}")
 	@Transactional
 	public Set<ApplicationVersion> getApplicationVersion(@PathVariable Long id) {
 		return this.getVersions(id);
 	}
 
-	@GetMapping(value="/version/{id}")
+	@GetMapping(value = "/version/{id}")
 	@Transactional
 	public ApplicationView getApplication(@PathVariable Long id) {
 		Application app = getApp(id);
@@ -285,7 +297,7 @@ public class ApplicationController extends AppBaseController {
 		this.applicationBaseOwnerCheck(view.getName(), principal);
 
 		// check if id exists
-		if(view.getId() == null) {
+		if (view.getId() == null) {
 			log.error("ID is not present in Application update");
 			throw new ProcessingException("Cannot update application without id");
 		}
@@ -294,12 +306,12 @@ public class ApplicationController extends AppBaseController {
 		Optional<Application> optId = applicationService.findApplication(view.getId());
 		Optional<Application> optNameVersion = applicationService.findApplication(view.getName(), view.getVersion());
 
-		if(optId.isEmpty() || optNameVersion.isEmpty()) {
+		if (optId.isEmpty() || optNameVersion.isEmpty()) {
 			log.error("Requested application does not exist");
 			throw new MissingElementException("Application does not exist");
 		}
 
-		if(!optId.get().equals(optNameVersion.get())) {
+		if (!optId.get().equals(optNameVersion.get())) {
 			log.error("Retrieved different applications using id and name&version, update aborted");
 			throw new ProcessingException("You cannot change application name, version and id");
 		}
@@ -337,20 +349,14 @@ public class ApplicationController extends AppBaseController {
 	@Transactional
 	public void changeApplicationState(@PathVariable long id, @RequestBody ApplicationStateChangeRequest stateChangeRequest, Principal principal) {
 		Application app = getApp(id);
-		if(stateChangeRequest.getState().equals(ApplicationState.DELETED)) {
-			applicationInstanceService.findAllByApplication(app).forEach(ai -> {
-					AppInstanceStatus instanceState = appInstanceController.getState(ai.getId(), principal);
-					int numberOfRunningInstances = 0;
-					if(!(instanceState.getState().equals(AppInstanceState.DONE)
-							|| instanceState.getState().equals(AppInstanceState.FAILURE)
-							|| instanceState.getState().equals(AppInstanceState.REMOVED) )) {
-						numberOfRunningInstances = +1;
-					}
-					if(numberOfRunningInstances > 0) {
-						throw new ProcessingException("Can not set state to Disabled. There is still " + numberOfRunningInstances + " running instances of this version.");
-					}
+		if (stateChangeRequest.getState().equals(ApplicationState.DELETED)) {
+			long numberOfRunningInstances = applicationInstanceService.findAllByApplication(app).stream()
+					.map(ai -> appInstanceController.getState(ai.getId(), principal))
+					.filter(s -> !List.of(AppInstanceState.DONE, AppInstanceState.FAILURE, AppInstanceState.REMOVED).contains(s.getState()))
+					.count();
+			if (numberOfRunningInstances > 0) {
+				throw new ProcessingException("Can not set state to Disabled. There is still " + numberOfRunningInstances + " running instances of this version.");
 			}
-			);
 		}
 		applicationService.changeApplicationState(app, stateChangeRequest.getState());
 		appBaseService.updateApplicationVersionState(app.getName(), app.getVersion(), stateChangeRequest.getState());
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 0b9ab5204f2c92aabb1e019738959b35b1074cf9..218b67437f063485bd2735c3ecaae9037ba1f040 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -138,7 +138,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 the Helm version are v2 and v3 (if none is provided v3 is used by default)
 helm.version=v2
 
 # --------------------- #
@@ -150,8 +150,7 @@ janitor.port=5000
 # -------------------- #
 # GitLab configuration #
 # -------------------- #
-gitlab.address=nmaas-gitlab-unicorn
-gitlab.port=8080
+gitlab.apiUrl=http://nmaas-gitlab-unicorn:8080
 gitlab.token=test_gitlab_token
 
 # ------------------------ #
diff --git a/src/test/java/net/geant/nmaas/externalservices/gitlab/GitLabManagerTest.java b/src/test/java/net/geant/nmaas/externalservices/gitlab/GitLabManagerTest.java
index 87508027859755e52512538a480d677a114e970b..f280101b031cee1aac45bdebd2b3f9b64f654b36 100644
--- a/src/test/java/net/geant/nmaas/externalservices/gitlab/GitLabManagerTest.java
+++ b/src/test/java/net/geant/nmaas/externalservices/gitlab/GitLabManagerTest.java
@@ -3,31 +3,37 @@ package net.geant.nmaas.externalservices.gitlab;
 import net.geant.nmaas.externalservices.gitlab.exceptions.GitLabInvalidConfigurationException;
 import org.junit.jupiter.api.Test;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class GitLabManagerTest {
 
-    private GitLabManager manager;
+    private final GitLabManager manager = new GitLabManager();
 
     @Test
     void shouldValidateGitLabInstance() {
-        manager = new GitLabManager();
         Exception thrown;
 
-        thrown = assertThrows(IllegalArgumentException.class, () -> manager.validateGitLabInstance());
-        assertTrue(thrown.getMessage().contains("GitLab address is null or empty"));
+        thrown = assertThrows(IllegalArgumentException.class, manager::validateGitLabInstance);
+        assertTrue(thrown.getMessage().contains("GitLab api URL is null or empty"));
 
-        manager.setGitLabAddress("localhost");
-        thrown = assertThrows(IllegalArgumentException.class, () -> manager.validateGitLabInstance());
-        assertTrue(thrown.getMessage().contains("GitLab port is null"));
-
-        manager.setGitLabPort(8080);
-        thrown = assertThrows(IllegalArgumentException.class, () -> manager.validateGitLabInstance());
-        assertTrue(thrown.getMessage().contains("GitLab token is null or empty"));
+        manager.setGitLabApiUrl("http://localhost:8080");
+        thrown = assertThrows(IllegalArgumentException.class, manager::validateGitLabInstance);
+        assertThat(thrown.getMessage()).contains("GitLab token is null or empty");
 
         manager.setGitLabToken("token");
-        assertThrows(GitLabInvalidConfigurationException.class, () -> manager.validateGitLabInstance());
+        assertThrows(GitLabInvalidConfigurationException.class, manager::validateGitLabInstance);
+    }
+
+    @Test
+    void shouldPrepareApiBaseUrl() {
+        manager.setGitLabApiUrl("http://localhost:8080");
+        assertEquals("http://localhost:8080", manager.getApiUrl());
+
+        manager.setGitLabApiUrl("http://localhost:8080/api/v4");
+        assertEquals("http://localhost:8080", manager.getApiUrl());
     }
 
 }
diff --git a/src/test/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandlerTest.java b/src/test/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandlerTest.java
index 13e2796521e34dbba0988c556cb9724b7a25de45..aaa8d4661a966fad4e81c43cf9ca4874a87e4ebb 100644
--- a/src/test/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandlerTest.java
+++ b/src/test/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabConfigHandlerTest.java
@@ -47,8 +47,7 @@ public class GitLabConfigHandlerTest {
         Project project = mock(Project.class);
         when(projectApi.getProject(anyInt())).thenReturn(project);
         when(project.getHttpUrlToRepo()).thenReturn("http://example.gitlab.com/group/project.git");
-        when(gitLabManager.getGitlabServer()).thenReturn("test-server");
-        when(gitLabManager.getGitlabPort()).thenReturn(80);
+        when(gitLabManager.getGitLabApiUrl()).thenReturn("http://test-server:80");
         when(gitLabManager.projects()).thenReturn(projectApi);
 
         String result = handler.getHttpUrlToRepo(1);
diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
index 0ba2e0bc557f21f092dac9c74f826626c5265095..e5c378cb9c4a0d2a3293faa2b8a10c7ade3944ba 100644
--- a/src/test/resources/application.properties
+++ b/src/test/resources/application.properties
@@ -131,8 +131,7 @@ janitor.port=5000
 # -------------------- #
 # GitLab configuration #
 # -------------------- #
-gitlab.address=nmaas-gitlab-unicorn
-gitlab.port=8080
+gitlab.apiUrl=http://nmaas-gitlab-unicorn:8080
 gitlab.token=test_gitlab_token
 
 # ------------------------ #