diff --git a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
index ed3bf416d82480def75d3663a7bd2ffbbb1e7af3..83a8f1b3a888406d158334adf6b944f18b6b9835 100644
--- a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
+++ b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
@@ -41,12 +41,7 @@ public class FileServiceClient {
 
     public String startArchiveJob(Transfer transfer, String jobId) {
 
-        if (transfer.getTarget().size() != 1) {
-            throw new IllegalArgumentException("Target size is " + transfer.getTarget().size());
-        }
-
-        String target = transfer.getTarget().get(0)
-                .substring("vos://".length() + authority.length());
+        String target = transfer.getTarget().substring("vos://".length() + authority.length());
 
         String viewUri = transfer.getView().getUri();
 
diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java
index 15abb442b8181f9da0e44cc1a7f27915a69a8758..7d0d971ce672b19c460b4c24617ba6e411c9d805 100644
--- a/src/main/java/it/inaf/oats/vospace/JobService.java
+++ b/src/main/java/it/inaf/oats/vospace/JobService.java
@@ -6,6 +6,7 @@
 package it.inaf.oats.vospace;
 
 import it.inaf.ia2.aa.data.User;
+import it.inaf.oats.vospace.datamodel.Views;
 import it.inaf.oats.vospace.exception.InternalFaultException;
 import it.inaf.oats.vospace.persistence.JobDAO;
 import net.ivoa.xml.uws.v1.ExecutionPhase;
@@ -17,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.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
 import javax.servlet.http.HttpServletRequest;
@@ -96,7 +98,7 @@ public class JobService {
             Transfer transfer = uriService.getTransfer(job);
 
             ExecutionPhase phase;
-            if (transfer.getProtocols().stream().anyMatch(p -> "ia2:async-recall".equals(p.getUri()))) {
+            if (isAsyncRecall(transfer)) {
                 // Async recall from tape jobs are queued. They will be started by VOSpace transfer service
                 phase = ExecutionPhase.QUEUED;
             } else {
@@ -138,16 +140,15 @@ public class JobService {
 
     private Transfer handlePullToVoSpace(JobSummary job, Transfer transfer) {
 
+        if (isAsyncRecall(transfer)) {
+            asyncTransfService.startJob(job);
+            return transfer;
+        }
+
         for (Protocol protocol : transfer.getProtocols()) {
             switch (protocol.getUri()) {
-                case "ia2:async-recall":
-                    asyncTransfService.startJob(job);
-                    return transfer;
                 case "ivo://ivoa.net/vospace/core#httpget":
-                    if (transfer.getTarget().size() != 1) {
-                        throw new InvalidArgumentException("Invalid target size for pullToVoSpace: " + transfer.getTarget().size());
-                    }
-                    String nodeUri = transfer.getTarget().get(0);
+                    String nodeUri = transfer.getTarget();
                     String contentUri = protocol.getEndpoint();
                     uriService.setNodeRemoteLocation(nodeUri, contentUri);
                     Transfer negotiatedTransfer = uriService.getNegotiatedTransfer(job, transfer);
@@ -164,6 +165,11 @@ public class JobService {
         throw new InvalidArgumentException("Transfer contains no protocols");
     }
 
+    private boolean isAsyncRecall(Transfer transfer) {
+        return transfer.getView() != null
+                && Views.ASYNC_RECALL_VIEW_URI.equals(transfer.getView().getUri());
+    }
+    
     private void handleMoveNode(JobSummary jobSummary, Transfer transfer) {
         // User data must be extracted before starting the new thread
         // to avoid the "No thread-bound request found" exception
@@ -222,8 +228,9 @@ public class JobService {
      * compliance with specifications
      *
      */
-    public void createSyncJobResult(JobSummary job) {
+    public Optional<VoSpaceErrorSummarizableException> createSyncJobResult(JobSummary job) {
         Transfer negotiatedTransfer = null;
+        VoSpaceErrorSummarizableException exception = null;
         try {
             Transfer transfer = uriService.getTransfer(job);
             negotiatedTransfer = uriService.getNegotiatedTransfer(job, transfer);
@@ -234,14 +241,16 @@ public class JobService {
             job.setPhase(ExecutionPhase.ERROR);
             stripProtocols(job, negotiatedTransfer);
             job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(e));
+            exception = e;
         } catch (Exception e) {
             job.setPhase(ExecutionPhase.ERROR);
             stripProtocols(job, negotiatedTransfer);
-            job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(
-                    new InternalFaultException(e)));
+            exception = new InternalFaultException(e);
+            job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(exception));
         } finally {
             jobDAO.createJob(job, negotiatedTransfer);
         }
+        return Optional.ofNullable(exception);
     }
     
     private void stripProtocols(JobSummary job, Transfer negotiatedTransfer) {
@@ -265,7 +274,7 @@ public class JobService {
             case pushToVoSpace:
                 ResultReference dataNodeRef = new ResultReference();
                 dataNodeRef.setId("dataNode");
-                dataNodeRef.setHref(transfer.getTarget().get(0));
+                dataNodeRef.setHref(transfer.getTarget());
                 jobSummary.getResults().add(dataNodeRef);
                 break;
         }
diff --git a/src/main/java/it/inaf/oats/vospace/MoveService.java b/src/main/java/it/inaf/oats/vospace/MoveService.java
index f83bcdc5fac7359111d7eb368f9937c0bcf7280d..c852a0fb60454cb1c36216dd881675cab3ec006c 100644
--- a/src/main/java/it/inaf/oats/vospace/MoveService.java
+++ b/src/main/java/it/inaf/oats/vospace/MoveService.java
@@ -8,7 +8,6 @@ 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.InternalFaultException;
-import it.inaf.oats.vospace.exception.InvalidArgumentException;
 import it.inaf.oats.vospace.exception.NodeBusyException;
 import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
@@ -33,12 +32,8 @@ public class MoveService extends AbstractNodeService {
     @Transactional(rollbackFor = { Exception.class }, isolation = Isolation.REPEATABLE_READ)
     public void processMoveJob(Transfer transfer, User user) {
 
-        if (transfer.getTarget().size() != 1) {
-            throw new InvalidArgumentException("Invalid target size for moveNode: " + transfer.getTarget().size());
-        }
-
         // Get Source Vos Path
-        String sourcePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget().get(0), authority);
+        String sourcePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget(), authority);
 
         // Get Destination Vos Path (it's in transfer direction)
         String destinationPath = URIUtils.returnVosPathFromNodeURI(transfer.getDirection(), authority);
diff --git a/src/main/java/it/inaf/oats/vospace/TransferController.java b/src/main/java/it/inaf/oats/vospace/TransferController.java
index c7c2d512381c907e0f0e85c1909f271c6ca36b62..96805bad16f771cd86d6381449773795b83becd3 100644
--- a/src/main/java/it/inaf/oats/vospace/TransferController.java
+++ b/src/main/java/it/inaf/oats/vospace/TransferController.java
@@ -81,7 +81,7 @@ public class TransferController {
             @RequestParam("DIRECTION") String direction, @RequestParam("PROTOCOL") String protocolUris, User principal) {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList(target));
+        transfer.setTarget(target);
         transfer.setDirection(direction);
 
         // CADC client sends multiple protocol parameters and Spring join them using a comma separator.
@@ -93,16 +93,12 @@ public class TransferController {
         }
 
         JobSummary jobSummary = newJobSummary(transfer, principal);
-        jobService.createSyncJobResult(jobSummary);
-
-        if (jobSummary.getErrorSummary() != null) {
-            // TODO: decide how to hanlde HTTP error codes
+        jobService.createSyncJobResult(jobSummary).ifPresent(ex -> {
             // If an error occurs with the synchronous convenience mode where the preferred endpoint
             // is immediately returned as a redirect, the error information is returned directly in 
             // the response body with the associated HTTP status code. 
-            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
-                    .body(jobSummary.getErrorSummary().getMessage());
-        }
+            throw ex;
+        });
 
         // Behaves as if REQUEST=redirect was set, for compatibility with CADC client
         String endpoint = transfer.getProtocols().get(0).getEndpoint();
diff --git a/src/main/java/it/inaf/oats/vospace/UriService.java b/src/main/java/it/inaf/oats/vospace/UriService.java
index 06ed2b41cbf29ad73aeaa2c9484958f94356b749..13f755d74518c207527828637561dd8d97f6e4b0 100644
--- a/src/main/java/it/inaf/oats/vospace/UriService.java
+++ b/src/main/java/it/inaf/oats/vospace/UriService.java
@@ -144,13 +144,8 @@ public class UriService {
     }
 
     private String getEndpoint(JobSummary job, Transfer transfer) {
-        boolean isArchiveView = isArchiveView(transfer);
 
-        if (!isArchiveView && transfer.getTarget().size() != 1) {
-            throw new InvalidArgumentException("Invalid target size: " + transfer.getTarget().size());
-        }
-
-        String relativePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget().get(0), authority);
+        String relativePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget(), authority);
 
         User user = (User) servletRequest.getUserPrincipal();
         String creator = user.getName();
@@ -183,7 +178,7 @@ public class UriService {
             throw new NodeBusyException(relativePath);
         }
 
-        if (isArchiveView) {
+        if (isArchiveView(transfer)) {
             return fileServiceClient.startArchiveJob(transfer, job.getJobId());
         }
 
diff --git a/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java b/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java
index da76598edebee54fecad120a0ef4c9c3870b2474..75dd4e4adf7d757e5ddb0b3b784d9e3ea64c1e21 100644
--- a/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/AsyncTransferServiceTest.java
@@ -5,12 +5,13 @@
  */
 package it.inaf.oats.vospace;
 
+import it.inaf.oats.vospace.datamodel.Views;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import net.ivoa.xml.uws.v1.JobSummary;
-import net.ivoa.xml.vospace.v2.Protocol;
+import net.ivoa.xml.vospace.v2.Param;
 import net.ivoa.xml.vospace.v2.Transfer;
+import net.ivoa.xml.vospace.v2.View;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
 import org.junit.jupiter.api.Test;
@@ -26,7 +27,7 @@ import redis.clients.jedis.Jedis;
 @ExtendWith(MockitoExtension.class)
 public class AsyncTransferServiceTest {
 
-    private static final String JSON_JOB = "{\"jobId\":\"job_id\",\"runId\":null,\"ownerId\":null,\"phase\":null,\"quote\":null,\"creationTime\":null,\"startTime\":null,\"endTime\":null,\"executionDuration\":0,\"destruction\":null,\"parameters\":null,\"results\":[],\"errorSummary\":null,\"jobInfo\":{\"transfer\":{\"target\":[\"vos://example.com!vospace/my-node\"],\"direction\":\"pullToVoSpace\",\"view\":null,\"protocols\":[],\"keepBytes\":null,\"version\":null,\"param\":[]}},\"version\":null}\n";
+    private static final String JSON_JOB = "{\"jobId\":\"job_id\",\"runId\":null,\"ownerId\":null,\"phase\":null,\"quote\":null,\"creationTime\":null,\"startTime\":null,\"endTime\":null,\"executionDuration\":0,\"destruction\":null,\"parameters\":null,\"results\":[],\"errorSummary\":null,\"jobInfo\":{\"transfer\":{\"target\":\"vos://example.com!vospace/my-node\",\"direction\":\"pullToVoSpace\",\"view\":{\"param\":[{\"value\":\"file1.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"},{\"value\":\"file2.txt\",\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall/include\"}],\"uri\":\"ivo://ia2.inaf.it/vospace/views#async-recall\",\"original\":true},\"protocols\":[],\"keepBytes\":false,\"version\":null,\"param\":[]}},\"version\":null}";
 
     @Test
     public void testRedisRpc() {
@@ -53,18 +54,31 @@ public class AsyncTransferServiceTest {
             try {
                 asyncTransferService.startJob(getFakeJob());
                 fail();
-            } catch(IllegalStateException ex) {
+            } catch (IllegalStateException ex) {
             }
         }
     }
-    
+
     private JobSummary getFakeJob() {
         Transfer transfer = new Transfer();
         transfer.setDirection("pullToVoSpace");
-        Protocol protocol = new Protocol();
-        protocol.setUri("ia2:async-recall");
-        transfer.getProtocols().add(protocol);
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/my-node"));
+
+        transfer.setTarget("vos://example.com!vospace/my-node");
+
+        View view = new View();
+        view.setUri(Views.ASYNC_RECALL_VIEW_URI);
+
+        Param p1 = new Param();
+        p1.setUri(Views.ASYNC_RECALL_VIEW_URI + "/include");
+        p1.setValue("file1.txt");
+        view.getParam().add(p1);
+
+        Param p2 = new Param();
+        p2.setUri(Views.ASYNC_RECALL_VIEW_URI + "/include");
+        p2.setValue("file2.txt");
+        view.getParam().add(p2);
+
+        transfer.setView(view);
 
         JobSummary job = new JobSummary();
         job.setJobId("job_id");
diff --git a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
index c5c10183d1c2ca8ae6c90a4b0ca6199cf65da559..b57b7d19a533e08049b6e2581a02f3a33d3480af 100644
--- a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
+++ b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
@@ -14,7 +14,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UncheckedIOException;
 import java.net.URI;
-import java.util.Arrays;
 import javax.servlet.http.HttpServletRequest;
 import net.ivoa.xml.vospace.v2.Param;
 import net.ivoa.xml.vospace.v2.Transfer;
@@ -89,7 +88,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydir"));
+        transfer.setTarget("vos://example.com!vospace/mydir");
         View view = new View();
         view.setUri(Views.ZIP_VIEW_URI);
         transfer.setView(view);
@@ -105,7 +104,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         View view = new View();
         view.setUri(Views.TAR_VIEW_URI);
         transfer.setView(view);
@@ -123,7 +122,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         View view = new View();
         view.setUri(Views.TAR_VIEW_URI);
         transfer.setView(view);
@@ -140,7 +139,7 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         View view = new View();
         view.setUri(viewUri);
         transfer.setView(view);
diff --git a/src/test/java/it/inaf/oats/vospace/JobServiceTest.java b/src/test/java/it/inaf/oats/vospace/JobServiceTest.java
index f276397fc5a30473e0a04465863632d7e7c9d6ff..ee017edcda9962af8959c83a3774a482027113a5 100644
--- a/src/test/java/it/inaf/oats/vospace/JobServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/JobServiceTest.java
@@ -5,16 +5,17 @@
  */
 package it.inaf.oats.vospace;
 
+import it.inaf.oats.vospace.datamodel.Views;
 import it.inaf.oats.vospace.exception.NodeBusyException;
 import it.inaf.oats.vospace.persistence.JobDAO;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import net.ivoa.xml.uws.v1.ExecutionPhase;
 import net.ivoa.xml.uws.v1.JobSummary;
 import net.ivoa.xml.vospace.v2.Protocol;
 import net.ivoa.xml.vospace.v2.Transfer;
+import net.ivoa.xml.vospace.v2.View;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -218,7 +219,7 @@ public class JobServiceTest {
 
     private Transfer getPullFromVoSpaceHttpTransfer() {
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/myfile"));
+        transfer.setTarget("vos://example.com!vospace/myfile");
         transfer.setDirection("pullFromVoSpace");
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
@@ -229,9 +230,9 @@ public class JobServiceTest {
     private Transfer getTapeTransfer() {
         Transfer transfer = new Transfer();
         transfer.setDirection("pullToVoSpace");
-        Protocol protocol = new Protocol();
-        protocol.setUri("ia2:async-recall");
-        transfer.getProtocols().add(protocol);
+        View view = new View();
+        view.setUri(Views.ASYNC_RECALL_VIEW_URI);
+        transfer.setView(view);
         return transfer;
     }
 
diff --git a/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java b/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java
index 729657f3827c2b5ffc855dd171299059c6e460ae..e5f8aaf7370fe296dce276d4eb2c395b6438e4e6 100644
--- a/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/MoveServiceTest.java
@@ -11,7 +11,6 @@ import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
 import it.inaf.oats.vospace.persistence.DataSourceConfigSingleton;
 import it.inaf.oats.vospace.persistence.NodeDAO;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import net.ivoa.xml.vospace.v2.Transfer;
@@ -209,7 +208,7 @@ public class MoveServiceTest {
 
     private Transfer getTransfer(String vosTarget, String vosDestination) {
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://" + this.authority + vosTarget));
+        transfer.setTarget("vos://" + this.authority + vosTarget);
         transfer.setDirection("vos://" + this.authority + vosDestination);
         return transfer;
     }
diff --git a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
index 2b6fa1f48d3cdeb6f745d59b20595c8ede9a6a13..2a523876e00ffd6e1c23d0bdbf5325c985d2d6e9 100644
--- a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
+++ b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java
@@ -11,6 +11,7 @@ import it.inaf.oats.vospace.datamodel.NodeProperties;
 import it.inaf.oats.vospace.datamodel.Views;
 import it.inaf.oats.vospace.exception.ErrorSummaryFactory;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
+import it.inaf.oats.vospace.exception.ProtocolNotSupportedException;
 import it.inaf.oats.vospace.persistence.JobDAO;
 import it.inaf.oats.vospace.persistence.LocationDAO;
 import it.inaf.oats.vospace.persistence.NodeDAO;
@@ -22,7 +23,6 @@ import java.nio.charset.StandardCharsets;
 import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Optional;
 import net.ivoa.xml.uws.v1.ExecutionPhase;
 import net.ivoa.xml.uws.v1.JobSummary;
@@ -428,6 +428,20 @@ public class TransferControllerTest {
                 .andExpect(status().is3xxRedirection());
     }
 
+    @Test
+    public void testSyncTransferUrlParamsModeUnsupportedProtocol() throws Exception {
+
+        Exception ex = mockMvc.perform(get("/synctrans")
+                .header("Authorization", "Bearer user1_token")
+                .param("TARGET", "vos://example.com!vospace/mynode")
+                .param("DIRECTION", "pullFromVoSpace")
+                .param("PROTOCOL", "ivo://ivoa.net/vospace/core#httpput"))
+                .andExpect(status().isBadRequest())
+                .andReturn().getResolvedException();
+
+        assertTrue(ex instanceof ProtocolNotSupportedException);
+    }
+    
     private Jobs getFakeJobs() {
         Jobs jobs = new Jobs();
         jobs.setVersion("1.1");
@@ -458,7 +472,7 @@ public class TransferControllerTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mynode"));
+        transfer.setTarget("vos://example.com!vospace/mynode");
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
         transfer.getProtocols().add(protocol);
diff --git a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
index 4a59ad7ad6855ce840b7da304ce92fc13589190d..c0a911c51012b4cf9ec43ccfc40c0e63969118a1 100644
--- a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java
@@ -17,7 +17,6 @@ import it.inaf.oats.vospace.persistence.LocationDAO;
 import it.inaf.oats.vospace.persistence.NodeDAO;
 import it.inaf.oats.vospace.persistence.model.Location;
 import it.inaf.oats.vospace.persistence.model.LocationType;
-import java.util.Arrays;
 import java.util.Optional;
 import javax.servlet.http.HttpServletRequest;
 import net.ivoa.xml.uws.v1.JobSummary;
@@ -298,7 +297,7 @@ public class UriServiceTest {
         mockPublicNode();
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pullFromVoSpace");
 
         Protocol protocol1 = new Protocol();
@@ -338,7 +337,7 @@ public class UriServiceTest {
         when(servletRequest.getUserPrincipal()).thenReturn(user);
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pushToVoSpace");
 
         Protocol protocol1 = new Protocol();
@@ -367,7 +366,7 @@ public class UriServiceTest {
     public void testSetSyncTransferEndpointsUnsupportedProtocol() {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pullFromVoSpace");
 
         Protocol protocol = new Protocol();
@@ -390,7 +389,7 @@ public class UriServiceTest {
     public void testSetSyncTransferEndpointsNoProtocols() {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection("pullFromVoSpace");
 
         JobSummary job = new JobSummary();
@@ -420,7 +419,7 @@ public class UriServiceTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/file1"));
+        transfer.setTarget("vos://example.com!vospace/file1");
 
         JobSummary job = new JobSummary();
         JobSummary.JobInfo jobInfo = new JobSummary.JobInfo();
@@ -440,7 +439,7 @@ public class UriServiceTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/parent_dir"));
+        transfer.setTarget("vos://example.com!vospace/parent_dir");
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
         transfer.getProtocols().add(protocol);
@@ -492,7 +491,7 @@ public class UriServiceTest {
     private JobSummary getJob() {
 
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1"));
+        transfer.setTarget("vos://example.com!vospace/mydata1");
         transfer.setDirection(JobService.JobDirection.pullFromVoSpace.toString());
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
@@ -511,7 +510,7 @@ public class UriServiceTest {
 
     private JobSummary getPushToVoSpaceJob() {
         Transfer transfer = new Transfer();
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mydata1/mydata2"));
+        transfer.setTarget("vos://example.com!vospace/mydata1/mydata2");
         transfer.setDirection(JobService.JobDirection.pushToVoSpace.toString());
         Protocol protocol = new Protocol();
         protocol.setUri("ivo://ivoa.net/vospace/core#httpput");
diff --git a/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
index 69b0f8e0a1a2206c14ba85e67b8d47765b616e8a..7781f05e8d5c92af17d1228d92af42c64b400bc3 100644
--- a/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
+++ b/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
@@ -29,7 +29,6 @@ import net.ivoa.xml.uws.v1.ErrorSummary;
 import net.ivoa.xml.uws.v1.Jobs;
 import it.inaf.oats.vospace.exception.ErrorSummaryFactory;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
-import java.util.Arrays;
 import net.ivoa.xml.uws.v1.ResultReference;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -51,7 +50,7 @@ public class JobDAOTest {
     private JobSummary getJob() {
         Transfer transfer = new Transfer();
         transfer.setDirection("pushToVoSpace");
-        transfer.setTarget(Arrays.asList("vos://example.com!vospace/mynode"));
+        transfer.setTarget("vos://example.com!vospace/mynode");
 
         JobSummary job = new JobSummary();
         job.setJobId("123");
diff --git a/src/test/resources/pullToVoSpace-tape.xml b/src/test/resources/pullToVoSpace-tape.xml
index 51e99e9f8218a90b89f960bf4173e5e598e4b577..15102d9db459145f18090f219e52771ba9ca1d5e 100644
--- a/src/test/resources/pullToVoSpace-tape.xml
+++ b/src/test/resources/pullToVoSpace-tape.xml
@@ -1,5 +1,9 @@
 <vos:transfer xmlns:vos="http://www.ivoa.net/xml/VOSpace/v2.0" version="2.1">
     <vos:target>vos://example.com!vospace/mynode</vos:target>
     <vos:direction>pullToVoSpace</vos:direction>
-    <vos:protocol uri="ia2:async-recall" />
+    <vos:view uri="ivo://ia2.inaf.it/vospace/views#async-recall">
+        <vos:param uri="ivo://ia2.inaf.it/vospace/views#async-recall/include">test1.txt</vos:param>
+        <vos:param uri="ivo://ia2.inaf.it/vospace/views#async-recall/include">test2.txt</vos:param>
+        <vos:param uri="ivo://ia2.inaf.it/vospace/views#async-recall/include">test3.txt</vos:param>
+    </vos:view>
 </vos:transfer>
\ No newline at end of file