diff --git a/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy b/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy
index 07728094d..5bc092513 100644
--- a/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy
+++ b/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy
@@ -35,6 +35,7 @@ class SoftwareUserRepositoryService extends ModelService {
     def transactionService
     def securityACLService
     def amqpQueueService
+    def softwareService
 
     @Override
     def currentDomain() {
@@ -94,14 +95,10 @@ class SoftwareUserRepositoryService extends ModelService {
         return executeCommand(c, domain, null)
     }
 
-//    def deleteDependentSoftware(SoftwareUserRepository domain, Transaction transaction, Task task = null) {
-//
-//
-//        log.info("delteDependantSoftware ${Software.findAllBySoftwareRepository(domain).size()}")
-//        Software.findAllBySoftwareRepository(domain).each {
-//            softwareService.delete(it, transaction, null, false)
-//        }
-//    }
+    def deleteDependentSoftware(SoftwareUserRepository domain, Transaction transaction, Task task = null) {
+        log.info("deleteDependantSoftware ${Software.findAllBySoftwareUserRepository(domain).size()}")
+        Software.executeUpdate("update Software set softwareUserRepository = null where softwareUserRepository.id = ?", [domain.id])
+    }
 
     @Override
     def getStringParamsI18n(def domain) {
@@ -125,6 +122,20 @@ class SoftwareUserRepositoryService extends ModelService {
         amqpQueueService.publishMessage(AmqpQueue.findByName("queueCommunication"), jsonBuilder.toString())
     }
 
+    @Override
+    def afterDelete(Object domain, Object response) {
+        SoftwareUserRepository softwareUserRepository = domain as SoftwareUserRepository
+        def message = [requestType: "removeSoftwareUserRepository",
+                       id: softwareUserRepository.id,
+                       provider: softwareUserRepository.provider,
+                       username: softwareUserRepository.username,
+                       dockerUsername: softwareUserRepository.dockerUsername,
+                       prefix: softwareUserRepository.prefix]
+        JsonBuilder jsonBuilder = new JsonBuilder()
+        jsonBuilder(message)
+        amqpQueueService.publishMessage(AmqpQueue.findByName("queueCommunication"), jsonBuilder.toString())
+    }
+
     def refresh(def repo) {
         def message = [requestType: "refreshRepository",
                        id: repo.id,
diff --git a/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy b/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy
index 5450c1c4f..53fbb6b1d 100644
--- a/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy
+++ b/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy
@@ -2,6 +2,7 @@ package be.cytomine
 
 import be.cytomine.test.BasicInstanceBuilder
 import be.cytomine.test.Infos
+import be.cytomine.test.http.SoftwareAPI
 import be.cytomine.test.http.SoftwareUserRepositoryAPI
 import be.cytomine.utils.UpdateData
 import grails.converters.JSON
@@ -58,4 +59,29 @@ class SoftwareUserRepositoryTests {
         def showResult = SoftwareUserRepositoryAPI.show(id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD)
         assert 404 == showResult.code
     }
+
+    void testDeleteSoftwareUserRepositoryWithSoftware() {
+        def repoToDelete = BasicInstanceBuilder.getSoftwareUserRepositoryNotExist(true)
+        def id = repoToDelete.id
+
+        def software = BasicInstanceBuilder.getSoftwareNotExist(true)
+        software.setSoftwareUserRepository(repoToDelete)
+        software = BasicInstanceBuilder.saveDomain(software)
+
+        def softwareResult = SoftwareAPI.show(software.id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD)
+        assert 200 == softwareResult.code
+        def json = JSON.parse(softwareResult.data)
+        assert json.softwareUserRepository == repoToDelete.id
+
+        def result = SoftwareUserRepositoryAPI.delete(id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD)
+        assert 200 == result.code
+
+        def showResult = SoftwareUserRepositoryAPI.show(id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD)
+        assert 404 == showResult.code
+
+        softwareResult = SoftwareAPI.show(software.id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD)
+        assert 200 == softwareResult.code
+        json = JSON.parse(softwareResult.data)
+        assert json.softwareUserRepository instanceof JSONObject.Null
+    }
 }
\ No newline at end of file