diff --git a/jupyter-openbis-extension/sample.py b/jupyter-openbis-extension/sample.py
index e892c8f909f1eae715cfa7178f8c00bb86769e6d..e9dac396c87538b0631c336f084767e0264b9eca 100644
--- a/jupyter-openbis-extension/sample.py
+++ b/jupyter-openbis-extension/sample.py
@@ -1,42 +1,44 @@
 from notebook.base.handlers import IPythonHandler
 import numpy as np
+import os
 from .connection import openbis_connections
 
-class SampleHandler(IPythonHandler):
-    """Handle the requests for /openbis/sample/connection/permId"""
 
-    def get_datasets(self, conn, permId):
-        if not conn.is_session_active():
-            try:
-                conn.login()
-            except Exception as exc:
-                self.write({
-                    "reason" : 'connection to {} could not be established: {}'.format(conn.name, exc)
-                })
+def get_entity_for_identifier(conn, identifier):
+    entity = None
+    try:
+        entity = conn.openbis.get_sample(identifier)
+    except Exception as exc:
+        pass
 
-        sample = None
+    if entity is None:
         try:
-            sample = conn.openbis.get_sample(permId)
+            entity = conn.openbis.get_experiment(identifier)
         except Exception as exc:
-            self.set_status(404)
-            self.write({
-                "reason" : 'No such sample: {}'.format(permId)
-            })
-        if sample is None:
-            return
+            pass
+
+
+    return entity
+
+def get_datasets(entity):
 
-        datasets = sample.get_datasets().df
-        datasets.replace({np.nan:None}, inplace=True)  # replace NaN with None, otherwise we cannot convert it correctly
-        return datasets.to_dict(orient='records')   # is too stupid to handle NaN
+    datasets = entity.get_datasets().df
+    datasets.replace({np.nan:None}, inplace=True)  # replace NaN with None, otherwise we cannot convert it correctly
+    datasets_dict = datasets.to_dict(orient='records')   # is too stupid to handle NaN
+    return datasets_dict
 
 
+class SampleHandler(IPythonHandler):
+    """Handle the requests for /openbis/sample/connection/permId"""
+
     def get(self, **params):
         """Handle a request to /openbis/sample/connection_name/permId
-        download the data and return a message
+        download the dataset list and return a message
         """
         try:
             conn = openbis_connections[params['connection_name']]
         except KeyError:
+            self.set_status(500)
             self.write({
                 "reason" : 'connection {} was not found'.format(
                     params['connection_name']
@@ -44,11 +46,31 @@ class SampleHandler(IPythonHandler):
             })
             return
 
-        datasets = self.get_datasets(conn, params['permId'])
+        if not conn.is_session_active():
+            try:
+                conn.login()
+            except Exception as exc:
+                self.set_status(500)
+                self.write({
+                    "reason" : 'connection to {} could not be established: {}'.format(conn.name, exc)
+                })
+                return
+
+        entity = get_entity_for_identifier(conn, params['identifier'])
+        if entity is None:
+            self.set_status(404)
+            self.write({
+                "reason" : 'No such Sample or Experiment: {}'.format(identifier)
+            })
+            return None
+
+        datasets = get_datasets(entity)
         if datasets is not None:
             self.set_status(200)
             self.write({
-                "dataSets": datasets
+                "dataSets": datasets,
+                "entity_attrs": entity.attrs.all(),
+                "entity_props": entity.props.all(),
+                "cwd": os.getcwd()
             })
 
-