diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
index 8a1722feecdee7f72829e4e893c9c12ac92ccd5c..744dc4329aa20554c4b5767f246d1512a01bc6ac 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
@@ -86,7 +86,7 @@ public class VOSpaceClient {
         return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Node.class));
     }
     
-    public List<NodeCollection> getNodeCollections(Optional<String> token) {
+    public NodeCollectionsWrapper getNodeCollections(Optional<String> token) {
         
         HttpRequest request = getRequest("/collections", token)
                 .header("Accept", useJson ? "application/json" : "text/xml")
@@ -94,7 +94,7 @@ public class VOSpaceClient {
                 .build();
         
         return call(request, BodyHandlers.ofInputStream(), 200, 
-                res -> unmarshal(res, NodeCollectionsWrapper.class)).getNodeCollections();        
+                res -> unmarshal(res, NodeCollectionsWrapper.class));        
     }
 
     public JobSummary startTransferJob(Transfer transfer, Optional<String> token) {
diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8ac1d8cc3ad48d25eee908d4c96726a449b0e14
--- /dev/null
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java
@@ -0,0 +1,43 @@
+/*
+ * This file is part of vospace-ui
+ * Copyright (C) 2021 Istituto Nazionale di Astrofisica
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+package it.inaf.ia2.vospace.ui.controller;
+
+import it.inaf.ia2.aa.data.User;
+import it.inaf.ia2.vospace.ui.TokenProvider;
+import it.inaf.ia2.vospace.ui.client.VOSpaceClient;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollectionsWrapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class NodeCollectionsController extends BaseController {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(NodeCollectionsController.class);
+    
+    @Autowired
+    private VOSpaceClient client;
+    
+    @Autowired
+    private TokenProvider tokenProvider;
+    
+    @GetMapping(value = "/collections", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<NodeCollectionsWrapper> listNodeCollections(User principal) 
+            throws Exception
+    {
+        LOG.debug("listNodeCollections called for user {}", principal.getName());
+        
+        NodeCollectionsWrapper ncw =
+                client.getNodeCollections(tokenProvider.getToken());
+        
+        return ResponseEntity.ok(ncw);
+    }
+    
+}