diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsController.java b/src/main/java/it/inaf/oats/vospace/CollectionsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e08fd0fed764825d99789bfc873d88b3be87e87
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/CollectionsController.java
@@ -0,0 +1,54 @@
+/*
+ * This file is part of vospace-rest
+ * Copyright (C) 2021 Istituto Nazionale di Astrofisica
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+package it.inaf.oats.vospace;
+
+import it.inaf.ia2.aa.data.User;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollectionsList;
+import it.inaf.oats.vospace.persistence.CollectionsDAO;
+import javax.servlet.http.HttpServletRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * @author Nicola Fulvio Calabria <nicola.calabria at inaf.it>
+ */
+
+@RestController
+public class CollectionsController {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(CollectionsController.class);
+    
+    @Autowired
+    private CollectionsService collectionsService;
+        
+    // list collections owned by user
+    @GetMapping(value = "/collections")
+    public ResponseEntity<NodeCollectionsList> listCollections(
+            HttpServletRequest request, User principal) {
+        LOG.debug("listCollections called for user {}", principal.getName());
+        
+        NodeCollectionsList ncl = new NodeCollectionsList();
+                
+        ncl.setNodeCollections(
+                collectionsService.listCollections(principal.getName()));       
+
+        return ResponseEntity.ok(ncl);
+    }
+        
+    
+    // create a new collection with specified title
+    
+    
+    // delete collection by id
+    
+    
+    
+}
diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsService.java b/src/main/java/it/inaf/oats/vospace/CollectionsService.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7d8218d8dbd093d3189f2428e4925508c4b9bfb
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/CollectionsService.java
@@ -0,0 +1,46 @@
+/*
+ * This file is part of vospace-rest
+ * Copyright (C) 2021 Istituto Nazionale di Astrofisica
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+package it.inaf.oats.vospace;
+
+import it.inaf.oats.vospace.persistence.CollectionsDAO;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollection;
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ *
+ * @author Nicola Fulvio Calabria <nicola.calabria at inaf.it>
+ */
+@Service
+@EnableTransactionManagement
+public class CollectionsService {
+
+    @Autowired
+    private CollectionsDAO collectionsDAO;
+
+    public List<NodeCollection> listCollections(String userId) {
+
+        List<NodeCollection> result = new ArrayList<>();
+
+        // If user is not authenticated simply return an empty list
+        if (isUserAuthenticated(userId)) {
+            result.addAll(
+                    collectionsDAO.getUserNodeCollections(userId));
+        }
+
+        return result;
+
+    }
+
+    private boolean isUserAuthenticated(String userId) {
+        return userId != null
+                && !userId.equals("anonymous");
+    }
+
+}
diff --git a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
index fecca5c329e0339517f652b81f37cb9cd40d97fe..c97d438ae9c4643778411abdb8f5102557c7edbb 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
@@ -5,7 +5,7 @@
  */
 package it.inaf.oats.vospace.persistence;
 
-import it.inaf.oats.vospace.persistence.model.NodeCollection;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
diff --git a/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java b/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java
deleted file mode 100644
index e904820ff1344d20f6d582bc1fb66d19d5ebf34c..0000000000000000000000000000000000000000
--- a/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * This file is part of vospace-rest
- * Copyright (C) 2021 Istituto Nazionale di Astrofisica
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
-package it.inaf.oats.vospace.persistence.model;
-
-/**
- *
- * @author Nicola Fulvio Calabria <nicola.calabria at inaf.it>
- */
-public class NodeCollection {
-    
-    private Long id;
-    private String title;
-    private String ownerId;
-        
-    public NodeCollection(Long id, String title, String ownerId) {
-        this.id = id;
-        this.title = title;
-        this.ownerId = ownerId;
-    }    
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getOwnerId() {
-        return ownerId;
-    }
-
-    public void setOwnerId(String ownerId) {
-        this.ownerId = ownerId;
-    }    
-    
-    
-}
diff --git a/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java
index a7871d6b888e776bcbfb6f1bc4757d4d438d44cb..5b2d527fb3e64f3d2b6d4c4efb1de1fffeee4384 100644
--- a/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java
+++ b/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java
@@ -5,7 +5,7 @@
  */
 package it.inaf.oats.vospace.persistence;
 
-import it.inaf.oats.vospace.persistence.model.NodeCollection;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollection;
 import java.util.List;
 import javax.sql.DataSource;
 import static org.junit.jupiter.api.Assertions.assertEquals;