diff --git a/src/main/java/it/inaf/oats/vospace/CopyService.java b/src/main/java/it/inaf/oats/vospace/CopyService.java
index 5383fa3c3d5d0bd45efdb80079842eca202b21fe..78d79e068ebf10c02d907f6488f546df78c9847d 100644
--- a/src/main/java/it/inaf/oats/vospace/CopyService.java
+++ b/src/main/java/it/inaf/oats/vospace/CopyService.java
@@ -7,6 +7,7 @@ package it.inaf.oats.vospace;
 
 import it.inaf.ia2.aa.data.User;
 import it.inaf.oats.vospace.datamodel.NodeUtils;
+import it.inaf.oats.vospace.exception.DuplicateNodeException;
 import it.inaf.oats.vospace.exception.NodeBusyException;
 import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
@@ -15,6 +16,7 @@ import java.util.List;
 import java.util.Optional;
 import net.ivoa.xml.vospace.v2.Transfer;
 import org.springframework.dao.CannotSerializeTransactionException;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.transaction.annotation.Isolation;
@@ -90,6 +92,8 @@ public class CopyService extends AbstractNodeService {
         } catch (CannotSerializeTransactionException ex) {
             // Concurrent transactions attempted to modify this set of nodes            
             throw new NodeBusyException(sourcePath);
+        } catch (DuplicateKeyException ex) {
+            throw new DuplicateNodeException(destinationCopyRoot);
         }
         
         return List.of(sourcePath, destinationCopyRoot);