diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java
index 63cbb08359312d96bcef199e58dfe42b0f3469de..1e730d4174db32402779f74d49ea14fe2af4bb14 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetLinkedDataExecutor.java
@@ -114,18 +114,7 @@ public class UpdateDataSetLinkedDataExecutor implements IUpdateDataSetLinkedData
                 }
             }
 
-            outer: for (IContentCopyId iid : update.getContentCopies().getRemoved())
-            {
-                ContentCopyPermId id = (ContentCopyPermId) iid;
-                for (ContentCopyPE cc : entity.getContentCopies())
-                {
-                    if (id.getPermId().equals(cc.getId().toString()))
-                    {
-                        continue outer;
-                    }
-                    throw new UserFailureException("Trying to remove non-existing content copy " + id.getPermId());
-                }
-            }
+            assertAllRemovalsExists(entity, update);
 
             entity.getContentCopies().removeAll(remove);
             for (ContentCopyPE cc : remove)
@@ -136,4 +125,20 @@ public class UpdateDataSetLinkedDataExecutor implements IUpdateDataSetLinkedData
             addContentCopiesToLinkedDataExecutor.add(context, entity, update.getContentCopies().getAdded());
         }
     }
+
+    private void assertAllRemovalsExists(LinkDataPE entity, LinkedDataUpdate update)
+    {
+        outer: for (IContentCopyId iid : update.getContentCopies().getRemoved())
+        {
+            ContentCopyPermId id = (ContentCopyPermId) iid;
+            for (ContentCopyPE cc : entity.getContentCopies())
+            {
+                if (id.getPermId().equals(cc.getId().toString()))
+                {
+                    continue outer;
+                }
+            }
+            throw new UserFailureException("Trying to remove non-existing content copy " + id.getPermId());
+        }
+    }
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java
index 6cd79744a9aaf99d0ca2c58a57dfd71c259e0504..327ff29a16e46c75639e923285ba91fcf3263d1a 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractLinkDataSetTest.java
@@ -384,6 +384,7 @@ public abstract class AbstractLinkDataSetTest extends AbstractExternalDmsTest
 
                 { ExternalDmsAddressType.FILE_SYSTEM, null, null, null },
                 { ExternalDmsAddressType.FILE_SYSTEM, "code", null, null },
+                { ExternalDmsAddressType.FILE_SYSTEM, "code", "/path", null },
                 { ExternalDmsAddressType.FILE_SYSTEM, "code", "/path", "hash" },
                 { ExternalDmsAddressType.FILE_SYSTEM, "code", null, "hash" },
                 { ExternalDmsAddressType.FILE_SYSTEM, null, null, "hash" }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java
index cd3c94fd967b3c17cdf8d1f17f97956a01742386..1e87cfe0915dac14f5f975232a6e760f58d703c8 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateLinkDataSetTest.java
@@ -127,6 +127,19 @@ public class UpdateLinkDataSetTest extends AbstractLinkDataSetTest
         ContentCopyPermId ccid = new ContentCopyPermId(uuid());
         update(dataset(id).without(ccid));
     }
+    
+    @Test
+    void removeAllCopies()
+    {
+        ExternalDmsPermId dms = create(externalDms());
+        DataSetPermId id = create(linkDataSet().with(copyAt(dms)).with(copyAt(dms)));
+
+        List<ContentCopy> contentCopies = get(id).getLinkedData().getContentCopies();
+        update(dataset(id).without(contentCopies.get(0).getId(), contentCopies.get(1).getId()));
+
+        DataSet dataset = get(id);
+        assertThat(dataset.getLinkedData().getContentCopies().size(), is(0));
+    }
 
     @Test
     void legacyExternalCodeCanBeSetOnSingleCopyOpenBISDms()