diff --git a/common/dataStructures/DriveStatus.cpp b/common/dataStructures/DriveStatus.cpp
index 4070a08d549bd4e71f1128e3c0a775989b4f6487..c28f5465b9337cc85711e2500210330c88ee538c 100644
--- a/common/dataStructures/DriveStatus.cpp
+++ b/common/dataStructures/DriveStatus.cpp
@@ -25,7 +25,7 @@ std::string cta::common::dataStructures::toString(cta::common::dataStructures::D
     case cta::common::dataStructures::DriveStatus::Down:
       return "Down";
     case cta::common::dataStructures::DriveStatus::Up:
-      return "Up";
+      return "Free";
     case cta::common::dataStructures::DriveStatus::Starting:
       return "Start";
     case cta::common::dataStructures::DriveStatus::Mounting:
diff --git a/xroot_plugins/XrdCtaFile.cpp b/xroot_plugins/XrdCtaFile.cpp
index 868eb189cca200805c82b6b32f5599695620cc53..2b79689c59527b54820861c71bde0ed33eb4e93d 100644
--- a/xroot_plugins/XrdCtaFile.cpp
+++ b/xroot_plugins/XrdCtaFile.cpp
@@ -1825,8 +1825,8 @@ std::string XrdCtaFile::xCom_drive() {
       auto driveStates = m_scheduler->getDriveStates(m_cliIdentity);
       if (driveStates.size()) {
         std::vector<std::vector<std::string>> responseTable;
-        std::vector<std::string> headers = {"drive", "host", "library", "request",
-          "status", "since", "desired", "vid", "tapepool", "files", "Mbytes",
+        std::vector<std::string> headers = {"drive", "host", "library", "desired", "request",
+          "status", "since", "vid", "tapepool", "files", "Mbytes",
           "speed", "session", "age"};
         responseTable.push_back(headers);
         typedef decltype(*driveStates.begin()) dStateVal;
@@ -1838,6 +1838,7 @@ std::string XrdCtaFile::xCom_drive() {
           currentRow.push_back(ds.driveName);
           currentRow.push_back(ds.host);
           currentRow.push_back(ds.logicalLibrary);
+          currentRow.push_back(ds.desiredDriveState.up?"Up":"Down");
           currentRow.push_back(cta::common::dataStructures::toString(ds.mountType));
           currentRow.push_back(cta::common::dataStructures::toString(ds.driveStatus));
           // print the time spent in the current state
@@ -1871,13 +1872,28 @@ std::string XrdCtaFile::xCom_drive() {
             currentRow.push_back("-");
             break;
           }
-          currentRow.push_back(ds.desiredDriveState.up?"Up":"Down");
           currentRow.push_back(ds.currentVid==""?"-":ds.currentVid);
           currentRow.push_back(ds.currentTapePool==""?"-":ds.currentTapePool);
-          currentRow.push_back(std::to_string((unsigned long long)ds.filesTransferredInSession));
-          currentRow.push_back(std::to_string((long double)ds.bytesTransferredInSession/Mbytes));
-          currentRow.push_back(std::to_string((long double)ds.latestBandwidth/Mbytes));
-          currentRow.push_back(std::to_string((unsigned long long)ds.sessionId));
+          switch (ds.driveStatus) {
+            case cta::common::dataStructures::DriveStatus::Transferring:
+              currentRow.push_back(std::to_string((unsigned long long)ds.filesTransferredInSession));
+              currentRow.push_back(std::to_string((long double)ds.bytesTransferredInSession/Mbytes));
+              currentRow.push_back(std::to_string((long double)ds.latestBandwidth/Mbytes));
+              break;
+            default:
+              currentRow.push_back("-");
+              currentRow.push_back("-");
+              currentRow.push_back("-");
+          }
+          switch(ds.driveStatus) {
+            case cta::common::dataStructures::DriveStatus::Up:
+            case cta::common::dataStructures::DriveStatus::Down:
+            case cta::common::dataStructures::DriveStatus::Unknown:
+              currentRow.push_back("-");
+              break;
+            default:
+              currentRow.push_back(std::to_string((unsigned long long)ds.sessionId));
+          }
           currentRow.push_back(std::to_string((unsigned long long)(time(nullptr)-ds.lastUpdateTime)));
           responseTable.push_back(currentRow);
         }