diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java
index f10136767c1069499fdb69354fbefb4384d88f9f..938fbee1462b45ddde14206af8663321d47eea69 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 it.inaf.oats.vospace.persistence.NodeDAO;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
@@ -52,6 +53,9 @@ public class JobService {
     
     @Autowired
     private FileServiceClient fileServiceClient;
+    
+    @Autowired
+    private NodeDAO nodeDao;
 
     public enum JobDirection {
         pullToVoSpace,
@@ -193,10 +197,19 @@ public class JobService {
         User user = (User) servletRequest.getUserPrincipal();
         CompletableFuture.runAsync(() -> {
             handleJobErrors(jobSummary, job -> {
+                
                 String jobId = jobSummary.getJobId();
+                // Index 0: source 1: destination
                 List<String> sourceAndDestination = copyService.processCopyNodes(transfer, jobId, user);
                 // Call file service and command copy
+                try{                
                 fileServiceClient.startFileCopyJob(sourceAndDestination.get(0), sourceAndDestination.get(1), jobId, user);
+                } catch (Exception e) {
+                    // We decided not to purge metadata in case of failure
+                    // just release busy nodes setting job_id = null
+                    nodeDao.releaseBusyNodesByJobId(jobId);                    
+                    throw e;
+                }
                 
                 return null;
             });