diff --git a/experiments.py b/experiments.py
index ea6e9c47399efdd92a8f2ceddec56ae6b8995c38..7a5d85d23f96747d253de64429ab504e43decd76 100644
--- a/experiments.py
+++ b/experiments.py
@@ -20,8 +20,15 @@ class Experiments(nimsapiutil.NIMSRequestHandler):
     def get(self):
         """Return the list of Experiments."""
         query = {'permissions.' + self.userid: {'$exists': 'true'}} if not self.user_is_superuser else None
-        projection = ['timestamp', 'group', 'name', 'permissions.'+self.userid]
+        projection = ['group', 'name', 'permissions.'+self.userid]
         experiments = list(self.app.db.experiments.find(query, projection))
+        session_aggregates = self.app.db.sessions.aggregate([
+                {'$match': {'experiment': {'$in': [exp['_id'] for exp in experiments]}}},
+                {'$group': {'_id': '$experiment', 'timestamp': {'$max': '$timestamp'}}},
+                ])['result']
+        timestamps = {sa['_id']: sa['timestamp'] for sa in session_aggregates}
+        for exp in experiments:
+            exp['timestamp'] = timestamps[exp['_id']]
         self.response.write(json.dumps(experiments, default=bson.json_util.default))
 
     def put(self):
@@ -36,6 +43,10 @@ class Experiment(nimsapiutil.NIMSRequestHandler):
         experiment = self.app.db.experiments.find_one({'_id': bson.objectid.ObjectId(exp_id)})
         if not experiment:
             self.abort(404)
+        experiment['timestamp'] = self.app.db.sessions.aggregate([
+                {'$match': {'experiment': bson.objectid.ObjectId(exp_id)}},
+                {'$group': {'_id': '$experiment', 'timestamp': {'$max': '$timestamp'}}},
+                ])['result'][0]['timestamp']
         if not self.user_is_superuser:
             if self.userid not in experiment['permissions']:
                 self.abort(403)