diff --git a/src/main/java/it/inaf/oats/vospace/CopyService.java b/src/main/java/it/inaf/oats/vospace/CopyService.java
index a2cd3ed03cb37db77ba72663203d27caf3adbe87..5383fa3c3d5d0bd45efdb80079842eca202b21fe 100644
--- a/src/main/java/it/inaf/oats/vospace/CopyService.java
+++ b/src/main/java/it/inaf/oats/vospace/CopyService.java
@@ -11,6 +11,7 @@ import it.inaf.oats.vospace.exception.NodeBusyException;
 import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
 import it.inaf.oats.vospace.persistence.NodeDAO.ShortNodeDescriptor;
+import java.util.List;
 import java.util.Optional;
 import net.ivoa.xml.vospace.v2.Transfer;
 import org.springframework.dao.CannotSerializeTransactionException;
@@ -18,17 +19,14 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.beans.factory.annotation.Autowired;
 
 @Service
 @EnableTransactionManagement
 public class CopyService extends AbstractNodeService {
 
-    @Autowired
-    private FileServiceClient fileServiceClient;
 
     @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
-    public String processCopyNodes(Transfer transfer, String jobId, User user) {
+    public List<String> processCopyNodes(Transfer transfer, String jobId, User user) {
 
         // Get Source Vos Path
         String sourcePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget(), authority);
@@ -87,18 +85,15 @@ public class CopyService extends AbstractNodeService {
 
             nodeDao.copyBranch(
                     sourcePath,
-                    destinationCopyRoot);
-            
-            // Call file service and command copy
-            fileServiceClient.startFileCopyJob(sourcePath, destinationCopyRoot, jobId, user);
+                    destinationCopyRoot);                        
 
         } catch (CannotSerializeTransactionException ex) {
             // Concurrent transactions attempted to modify this set of nodes            
             throw new NodeBusyException(sourcePath);
         }
-
-        return destinationCopyRoot;
-
+        
+        return List.of(sourcePath, destinationCopyRoot);
+        
     }
 
     private void checkBranchForReadAndLock(String sourcePath, String jobId, User user) {
diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java
index 164294106469ab1e83f3bece715574552c88a3bc..f10136767c1069499fdb69354fbefb4384d88f9f 100644
--- a/src/main/java/it/inaf/oats/vospace/JobService.java
+++ b/src/main/java/it/inaf/oats/vospace/JobService.java
@@ -18,6 +18,7 @@ import it.inaf.oats.vospace.exception.InvalidArgumentException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import it.inaf.oats.vospace.exception.VoSpaceErrorSummarizableException;
+import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
@@ -48,6 +49,9 @@ public class JobService {
 
     @Autowired
     private HttpServletRequest servletRequest;
+    
+    @Autowired
+    private FileServiceClient fileServiceClient;
 
     public enum JobDirection {
         pullToVoSpace,
@@ -189,7 +193,10 @@ public class JobService {
         User user = (User) servletRequest.getUserPrincipal();
         CompletableFuture.runAsync(() -> {
             handleJobErrors(jobSummary, job -> {
-                copyService.processCopyNodes(transfer, jobSummary.getJobId(), user);
+                String jobId = jobSummary.getJobId();
+                List<String> sourceAndDestination = copyService.processCopyNodes(transfer, jobId, user);
+                // Call file service and command copy
+                fileServiceClient.startFileCopyJob(sourceAndDestination.get(0), sourceAndDestination.get(1), jobId, user);
                 
                 return null;
             });
diff --git a/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java b/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java
index 8b9cb7a4d71e8dbd24a21630bb98232dd19c7dbe..961fb9c36472cd4c3143682b8be37caff63c2a21 100644
--- a/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java
@@ -141,7 +141,7 @@ public class CopyServiceTest {
 
         // copy
         String copyDestination
-                = copyService.processCopyNodes(getTransfer("/test3/m1", "/test4"), "job_pippo", user);
+                = copyService.processCopyNodes(getTransfer("/test3/m1", "/test4"), "job_pippo", user).get(1);
 
         assertEquals("/test4/m1", copyDestination);
 
@@ -176,7 +176,7 @@ public class CopyServiceTest {
 
         // copy
         String copyDestination
-                = copyService.processCopyNodes(getTransfer("/test3/m1/m2", "/test3/m1/m2_copy"), "job_pippo", user);
+                = copyService.processCopyNodes(getTransfer("/test3/m1/m2", "/test3/m1/m2_copy"), "job_pippo", user).get(1);
 
         assertEquals("/test3/m1/m2_copy", copyDestination);