diff --git a/spaceweather_processing/app.py b/spaceweather_processing/app.py
index b133e4c76723668b984848bd8af5570d6c77ddfc..93fde0bd315645cb935b82af420db41e1c0f4746 100644
--- a/spaceweather_processing/app.py
+++ b/spaceweather_processing/app.py
@@ -5,6 +5,7 @@ from datetime import datetime
 from typing import Union
 
 from fastapi import FastAPI, exceptions, Request
+
 from pymongo import MongoClient, DESCENDING
 from pymongo.collection import Collection
 from bson.objectid import ObjectId
@@ -116,10 +117,14 @@ class DataProductDB:
             item = augment_item(item)
         return item
 
-    def get_items(self, collection_name, query, skip=0, limit=100, url=None, select=None):
+    def get_distinct_field(self, collection_name, query, distinct=None):
+        results = self.db[collection_name].find(query,distinct).distinct(distinct)
+        return {'results': results}
+
+
+    def get_items(self, collection_name, query, skip=0, limit=100, url=None, select=None, sort=None):
 
         n_results = self.db[collection_name].count_documents(query)
-        
         selected_fields = {}
         
         if "additional_files_path" in select or "additional_files_url" in select:
@@ -128,8 +133,15 @@ class DataProductDB:
             
         for item in select:
             selected_fields[item] = 1
-        results = [augment_item(item) for item in
-                   self.db[collection_name].find(query, selected_fields).skip(skip).limit(limit)]
+
+        # if a &sort=<field> url parameter is given then use sort, otherwise omit it (backward compatibility)
+        if sort:
+            results = [augment_item(item) for item in
+                       self.db[collection_name].find(query, selected_fields).skip(skip).limit(limit).sort(sort)]
+        else:
+            results = [augment_item(item) for item in
+                       self.db[collection_name].find(query, selected_fields).skip(skip).limit(limit)]
+
         quoted_query = urlparse.quote(json.dumps(query))
         quoted_select = urlparse.quote(json.dumps(select))
         if url:
@@ -142,7 +154,6 @@ class DataProductDB:
 DB = DataProductDB()
 app = FastAPI(default_response_class=ORJSONResponse)
 
-
 def validate_date(date_str):
     date_items = date_str.split('-')
     if len(date_items) != 3:
@@ -193,8 +204,25 @@ def get_tasks(collection_name: str, task_id: str, request: Request):
     else:
         raise exceptions.HTTPException(status_code=404, detail=f'Collection {collection_name} does not exist')
 
+@app.get('/{collection_name}/distinct/')
+def get_tasks_distinct_field(collection_name: str, request: Request, filter: Union[str, None] = None, distinct: str = None):
+
+    DB.base_url = from_urlobj_to_url(request.url)
+    try:
+        if filter:
+            query = json.loads(filter)
+        else:
+            query = {}
+
+    except:
+        raise exceptions.HTTPException(status_code=422, detail='filter syntax invalid')
+    if DB.does_collection_exist(collection_name):
+        return DB.get_distinct_field(collection_name, query=query, distinct=distinct)
+    else:
+        raise exceptions.HTTPException(status_code=404, detail=f'collection {collection_name} does not exist')
+
 @app.get('/{collection_name}/tasks/')
-def get_tasks(collection_name: str, request: Request, skip: int = 0, limit: int = 100, filter: Union[str, None] = None, select: Union[str, None] = None):
+def get_tasks(collection_name: str, request: Request, skip: int = 0, limit: int = 100, filter: Union[str, None] = None, select: Union[str, None] = None, sort: str = None):
     DB.base_url = from_urlobj_to_url(request.url)
     try:
         if filter:
@@ -208,7 +236,7 @@ def get_tasks(collection_name: str, request: Request, skip: int = 0, limit: int
     except:
         raise exceptions.HTTPException(status_code=422, detail='filter syntax invalid')
     if DB.does_collection_exist(collection_name):
-        return DB.get_items(collection_name, query=query, limit=limit, skip=skip, url=from_urlobj_to_url(request.url), select=select)
+        return DB.get_items(collection_name, query=query, limit=limit, skip=skip, url=from_urlobj_to_url(request.url), select=select, sort=sort)
     else:
         raise exceptions.HTTPException(status_code=404, detail=f'collection {collection_name} does not exist')