diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java
index 291d9ebac21b29ba19aafd7107f01a0f54a2afa3..2f08d73972920e56421ef6ae9b6f3a4678d181fb 100644
--- a/src/main/java/it/inaf/oats/vospace/JobService.java
+++ b/src/main/java/it/inaf/oats/vospace/JobService.java
@@ -47,54 +47,26 @@ public class JobService {
 
     private void startJob(JobSummary job) {
 
-        Transfer transfer = uriService.getTransfer(job);
-        
-        switch (getJobType(transfer)) {
-            case pullToVoSpace:
-                handlePullToVoSpace(job, transfer);
-                break;
-            case pullFromVoSpace:
-            case pushToVoSpace:
-                handleVoSpaceUrlsListResult(job, transfer);
-                break;
-            default:
-                throw new UnsupportedOperationException("Not implemented yet");
-        }
-    }
-
-    private void handlePullToVoSpace(JobSummary job, Transfer transfer) {
         try {
-            for (Protocol protocol : transfer.getProtocols()) {
-                switch (protocol.getUri()) {
-                    case "ia2:async-recall":
-                        asyncTransfService.startJob(job);
-                        // ASK IF IT's OK neglect phase update.
-                        return;
-                    case "ivo://ivoa.net/vospace/core#httpget":
-                        String nodeUri = transfer.getTarget();
-                        String contentUri = protocol.getEndpoint();
-                        uriService.setNodeRemoteLocation(nodeUri, contentUri);
-                        uriService.setTransferJobResult(job, transfer);
-                        job.setPhase(ExecutionPhase.COMPLETED);
-                        jobDAO.updateJob(job);
-                        return;
-                    default:
-                        throw new InternalFaultException("Unsupported pullToVoSpace protocol: " + protocol.getUri());
-                }
-            }
-        } catch (VoSpaceErrorSummarizableException e) {
-            job.setPhase(ExecutionPhase.ERROR);
-            job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(e.getFault()));
+            job.setPhase(ExecutionPhase.EXECUTING);
             jobDAO.updateJob(job);
-        }
-    }
 
-    private void handleVoSpaceUrlsListResult(JobSummary job, Transfer transfer) {
-        try {
-            job.setPhase(ExecutionPhase.EXECUTING);
-            uriService.setTransferJobResult(job, transfer);
+            Transfer transfer = uriService.getTransfer(job);
+
+            switch (getJobType(transfer)) {
+                case pullToVoSpace:
+                    handlePullToVoSpace(job, transfer);
+                    break;
+                case pullFromVoSpace:
+                case pushToVoSpace:
+                    handleVoSpaceUrlsListResult(job, transfer);
+                    break;
+                default:
+                    throw new UnsupportedOperationException("Not implemented yet");
+            }
+
             job.setPhase(ExecutionPhase.COMPLETED);
-            // Need to catch other exceptions too to avoid inconsistent job status
+
         } catch (VoSpaceErrorSummarizableException e) {
             job.setPhase(ExecutionPhase.ERROR);
             job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(e.getFault()));
@@ -103,6 +75,29 @@ public class JobService {
         }
     }
 
+    private void handlePullToVoSpace(JobSummary job, Transfer transfer) {
+
+        for (Protocol protocol : transfer.getProtocols()) {
+            switch (protocol.getUri()) {
+                case "ia2:async-recall":
+                    asyncTransfService.startJob(job);
+                    return;
+                case "ivo://ivoa.net/vospace/core#httpget":
+                    String nodeUri = transfer.getTarget();
+                    String contentUri = protocol.getEndpoint();
+                    uriService.setNodeRemoteLocation(nodeUri, contentUri);
+                    uriService.setTransferJobResult(job, transfer);
+                    return;
+                default:
+                    throw new InternalFaultException("Unsupported pullToVoSpace protocol: " + protocol.getUri());
+            }
+        }
+    }
+
+    private void handleVoSpaceUrlsListResult(JobSummary job, Transfer transfer) {                   
+            uriService.setTransferJobResult(job, transfer);                   
+    }
+
     private JobType getJobType(Transfer transfer) {
         return JobType.valueOf(transfer.getDirection());
     }
diff --git a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
index ea46eda1b7de37f5c4dc8c9d3e0e296ae14f8fe9..4a47a4783912e6606bea7b7dbeb96b25b94196dd 100644
--- a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
+++ b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
@@ -143,7 +143,7 @@ public class TransferControllerTest {
 
         verify(nodeDao, times(1)).setNodeLocation(eq("/portalnode"), eq(2), eq("lbcr.20130512.060722.fits.gz"));
         
-        verify(jobDao, times(1)).updateJob(argThat(j -> {
+        verify(jobDao, times(2)).updateJob(argThat(j -> {
             assertTrue(j.getResults().get(0).getHref().startsWith("http://archive.lbto.org"));
             assertEquals(ExecutionPhase.COMPLETED, j.getPhase());
             return true;
@@ -187,7 +187,7 @@ public class TransferControllerTest {
                 .andExpect(status().is3xxRedirection())
                 .andReturn().getResponse().getHeader("Location");
 
-        verify(jobDao, times(1)).updateJob(any());
+        verify(jobDao, times(2)).updateJob(any());
 
         assertThat(redirect, matchesPattern("^/transfers/.*"));
     }