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 776d10b9ae7289960ad25d540de7c5e8c25a128e..90f1bbfe7b57d3542f233591baa93d1bf2935e6c 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,7 @@ 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.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.domain.*;
 import net.geant.nmaas.portal.api.exception.MarketException;
 import net.geant.nmaas.portal.api.exception.MissingElementException;
 import net.geant.nmaas.portal.api.exception.ProcessingException;
@@ -73,6 +68,8 @@ public class ApplicationController extends AppBaseController {
 
 	private final AppLifecycleManager appLifecycleManager;
 
+	private final AppInstanceController appInstanceController;
+
 	/*
 	 * Application Base Part
 	 */
@@ -151,14 +148,8 @@ public class ApplicationController extends AppBaseController {
 		ApplicationState state = ApplicationState.DELETED;
         for (ApplicationVersion appVersion : base.getVersions()) {
             Application app = getApp(appVersion.getAppVersionId());
-            applicationService.changeApplicationState(app, state);
-			List<AppInstance> instanceList =  applicationInstanceService.findAllByApplication(app);
-			instanceList.forEach(instance -> {
-				appLifecycleManager.removeApplication(instance.getInternalId());
-			});
-            appVersion.setState(state);
+            if(app.getState() != ApplicationState.DELETED) throw new ProcessingException("Can not delete base, version " +  app.getVersion() +" is not deleted");
         }
-
 		appBaseService.deleteAppBase(base);
 	}
 
@@ -323,8 +314,23 @@ public class ApplicationController extends AppBaseController {
 	@PatchMapping(value = "/state/{id}")
 	@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN')")
 	@Transactional
-	public void changeApplicationState(@PathVariable long id, @RequestBody ApplicationStateChangeRequest stateChangeRequest) {
+	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 delete app version. You still have " + numberOfRunningInstances + " running instances of this version.");
+					}
+			}
+			);
+		}
 		applicationService.changeApplicationState(app, stateChangeRequest.getState());
 		appBaseService.updateApplicationVersionState(app.getName(), app.getVersion(), stateChangeRequest.getState());
 		this.sendMails(app, stateChangeRequest);