diff --git a/common/dataStructures/QueueAndMountSummary.hpp b/common/dataStructures/QueueAndMountSummary.hpp
index 39729bf7bd117a8032eae890b7b5d16def67b5fa..c35449adca1366f075ef9b4e1bee275985aad913 100644
--- a/common/dataStructures/QueueAndMountSummary.hpp
+++ b/common/dataStructures/QueueAndMountSummary.hpp
@@ -35,6 +35,7 @@ struct QueueAndMountSummary {
   std::string vid;
   uint64_t filesQueued=0;
   uint64_t bytesQueued=0;
+  time_t oldestJobAge=0;
   MountPolicy mountPolicy;
   uint64_t currentMounts=0;
   uint64_t currentFiles=0;
diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp
index fd9bccccc815fa659a8ae8c3325ba1d44b006685..c7aa563cc4f7f24c6b5907b18e3d0595ec720c4f 100644
--- a/scheduler/Scheduler.cpp
+++ b/scheduler/Scheduler.cpp
@@ -672,6 +672,7 @@ std::list<common::dataStructures::QueueAndMountSummary> Scheduler::getQueuesAndM
       summary.mountPolicy.maxDrivesAllowed = pm.maxDrivesAllowed;
       summary.bytesQueued = pm.bytesQueued;
       summary.filesQueued = pm.filesQueued;
+      summary.oldestJobAge = pm.oldestJobStartTime - time(nullptr);
       break;
     case common::dataStructures::MountType::Retrieve:
       // TODO: we should remove the retrieveMinRequestAge if it's redundant, or rename pm.minArchiveRequestAge.
@@ -680,6 +681,7 @@ std::list<common::dataStructures::QueueAndMountSummary> Scheduler::getQueuesAndM
       summary.mountPolicy.maxDrivesAllowed = pm.maxDrivesAllowed;
       summary.bytesQueued = pm.bytesQueued;
       summary.filesQueued = pm.filesQueued;
+      summary.oldestJobAge = pm.oldestJobStartTime - time(nullptr);
       break;
     default:
       break;
@@ -704,19 +706,37 @@ std::list<common::dataStructures::QueueAndMountSummary> Scheduler::getQueuesAndM
   }
   mountDecisionInfo.reset();
   // Add the tape information where useful (archive queues).
-  for (auto & tp: ret) {
-    if (common::dataStructures::MountType::Archive==tp.mountType) {
+  for (auto & mountOrQueue: ret) {
+    if (common::dataStructures::MountType::Archive==mountOrQueue.mountType) {
       // Get all the tape for this pool
       cta::catalogue::TapeSearchCriteria tsc;
-      tsc.tapePool = tp.tapePool;
+      tsc.tapePool = mountOrQueue.tapePool;
       auto tapes=m_catalogue.getTapes(tsc);
       for (auto & t:tapes) {
-        tp.tapesCapacity += t.capacityInBytes;
-        tp.dataOnTapes += t.dataOnTapeInBytes;
-        if (t.disabled) tp.disabledTapes++;
-        if (t.full) tp.fullTapes++;
-        if (!t.full && t.disabled) tp.writableTapes++;
+        mountOrQueue.tapesCapacity += t.capacityInBytes;
+        mountOrQueue.dataOnTapes += t.dataOnTapeInBytes;
+        if (!t.dataOnTapeInBytes)
+          mountOrQueue.emptyTapes++;
+        if (t.disabled) mountOrQueue.disabledTapes++;
+        if (t.full) mountOrQueue.fullTapes++;
+        if (!t.full && t.disabled) mountOrQueue.writableTapes++;
       }
+    } else if (common::dataStructures::MountType::Retrieve==mountOrQueue.mountType) {
+      // Get info for this tape.
+      cta::catalogue::TapeSearchCriteria tsc;
+      tsc.vid = mountOrQueue.vid;
+      auto tapes=m_catalogue.getTapes(tsc);
+      if (tapes.size() != 1) {
+        throw cta::exception::Exception("In Scheduler::getQueuesAndMountSummaries(): got unexpected number of tapes from catalogue for a retrieve.");
+      }
+      auto &t=tapes.front();
+      mountOrQueue.tapesCapacity += t.capacityInBytes;
+      mountOrQueue.dataOnTapes += t.dataOnTapeInBytes;
+      if (!t.dataOnTapeInBytes)
+        mountOrQueue.emptyTapes++;
+      if (t.disabled) mountOrQueue.disabledTapes++;
+      if (t.full) mountOrQueue.fullTapes++;
+      if (!t.full && t.disabled) mountOrQueue.writableTapes++;
     }
   }
   return ret;