diff --git a/cmdline/CtaAdminCmd.cpp b/cmdline/CtaAdminCmd.cpp
index 229e01d5ff78fd4aa397fa7d9611f52d06c1221f..adeadb88e4a60ca06fe4952fb299e21a50ea7a69 100644
--- a/cmdline/CtaAdminCmd.cpp
+++ b/cmdline/CtaAdminCmd.cpp
@@ -23,7 +23,7 @@
 #include "CtaAdminCmdParse.hpp"
 #include "CtaAdminCmd.hpp"
 
-#include "XrdSsiPbException.hpp"
+#include "XrdSsiPbDebug.hpp"
 
 
 
@@ -33,6 +33,8 @@ namespace admin {
 CtaAdminCmd::CtaAdminCmd(int argc, const char *const *const argv) :
    m_execname(argv[0])
 {
+   auto &admincmd = *(m_request.mutable_admincmd());
+
    // Strip path from execname
 
    size_t p = m_execname.find_last_of('/');
@@ -57,6 +59,22 @@ CtaAdminCmd::CtaAdminCmd(int argc, const char *const *const argv) :
       }
    }
 
+   admincmd.set_cmd(cmd_it->second.cmd);
+
+   // Parse the subcommand
+
+   int nextarg = 2;
+
+   if(cmd_it->second.sub_cmd.size() > 0)
+   {
+      if(argc < 3) throwUsage();
+
+      auto sub_it = cmd_it->second.sub_cmd.find(argv[nextarg++]);
+
+      if(sub_it == cmd_it->second.sub_cmd.end()) throwUsage();
+
+      admincmd.set_subcmd(subCmd.at(*sub_it));
+   }
 
 #if 0  
    // Tokenize the command
@@ -95,6 +113,13 @@ void CtaAdminCmd::throwUsage()
    throw std::runtime_error(help.str());
 }
 
+
+
+void CtaAdminCmd::send()
+{
+   XrdSsiPb::OutputJsonString(std::cout, &m_request.admincmd());
+}
+
 }} // namespace cta::admin
 
 
@@ -112,8 +137,11 @@ int main(int argc, const char **argv)
 
    try {    
       // Tokenize and parse the command line arguments
-
       CtaAdminCmd cmd(argc, argv);
+
+      // Send the protocol buffer
+      cmd.send();
+
       return 0;
    } catch (XrdSsiPb::PbException &ex) {
       std::cerr << "Error in Google Protocol Buffers: " << ex.what() << std::endl;
diff --git a/cmdline/CtaAdminCmd.hpp b/cmdline/CtaAdminCmd.hpp
index 4f645a75e4b5d8ee01cfb5cdca9870c11326d374..04669a77740d4f2b8e1953f9f055336ce005376d 100644
--- a/cmdline/CtaAdminCmd.hpp
+++ b/cmdline/CtaAdminCmd.hpp
@@ -29,9 +29,14 @@ class CtaAdminCmd
 public:
    CtaAdminCmd(int argc, const char *const *const argv);
 
+   /*!
+    * Send the protocol buffer across the XRootD SSI transport
+    */
+   void send();
+
 private:
    /*!
-    * Throw an exception with generic usage help
+    * Throw an exception with usage help
     */
    void throwUsage();
 
@@ -40,6 +45,7 @@ private:
     */
    std::string              m_execname;         //!< Executable name of this program
    std::vector<std::string> m_requestTokens;    //!< The command line parameters represented as a vector of strings
+   cta::xrd::Request        m_request;          //!< Protocol Buffer for the command and parameters
 };
 
 }} // namespace cta::admin
diff --git a/cmdline/CtaAdminCmdParse.hpp b/cmdline/CtaAdminCmdParse.hpp
index 36032c62d813e0767e67e7df787262f9e5d2f9aa..5184a54152359b398e8fb720fb8bd29e97d5a690 100644
--- a/cmdline/CtaAdminCmdParse.hpp
+++ b/cmdline/CtaAdminCmdParse.hpp
@@ -76,5 +76,18 @@ const std::map<std::string, SubCommand> shortCmd = {
    { "ve",  { AdminCmd::CMD_VERIFY,               { "add", "rm", "ls", "err" }} }
 };
 
-}} // namespace cta::admin
+const std::map<std::string, AdminCmd::SubCmd> subCmd = {
+   { "add",     AdminCmd::SUBCMD_ADD },
+   { "ch",      AdminCmd::SUBCMD_CH },
+   { "err",     AdminCmd::SUBCMD_ERR },
+   { "label",   AdminCmd::SUBCMD_LABEL },
+   { "ls",      AdminCmd::SUBCMD_LS },
+   { "reclaim", AdminCmd::SUBCMD_RECLAIM },
+   { "rm",      AdminCmd::SUBCMD_RM },
+   { "up",      AdminCmd::SUBCMD_UP },
+   { "down",    AdminCmd::SUBCMD_DOWN },
+   { "read",    AdminCmd::SUBCMD_READ },
+   { "write",   AdminCmd::SUBCMD_WRITE }
+};
 
+}} // namespace cta::admin
diff --git a/xroot_plugins/messages/cta_admin.proto b/xroot_plugins/messages/cta_admin.proto
index 064f368667cdb3c262f3d20be4e9d92044173735..d7fc846711028446b11b164c602fc2ffeaa70bd5 100644
--- a/xroot_plugins/messages/cta_admin.proto
+++ b/xroot_plugins/messages/cta_admin.proto
@@ -93,39 +93,40 @@ message OptionString {
 
 message AdminCmd {
   enum Cmd {
-    CMD_ADMIN                          =  0;
-    CMD_ADMINHOST                      =  1;
-    CMD_ARCHIVEFILE                    =  2;
-    CMD_ARCHIVEROUTE                   =  3;
-    CMD_DRIVE                          =  4;
-    CMD_GROUPMOUNTRULE                 =  5;
-    CMD_LISTPENDINGARCHIVES            =  6;
-    CMD_LISTPENDINGRETRIEVES           =  7;
-    CMD_LOGICALLIBRARY                 =  8;
-    CMD_MOUNTPOLICY                    =  9;
-    CMD_REPACK                         = 10;
-    CMD_REQUESTERMOUNTRULE             = 11;
-    CMD_SHOWQUEUES                     = 12;
-    CMD_SHRINK                         = 13;
-    CMD_STORAGECLASS                   = 14;
-    CMD_TAPE                           = 15;
-    CMD_TAPEPOOL                       = 16;
-    CMD_TEST                           = 17;
-    CMD_VERIFY                         = 18;
+    CMD_NONE                           =  0;
+    CMD_ADMIN                          =  1;
+    CMD_ADMINHOST                      =  2;
+    CMD_ARCHIVEFILE                    =  3;
+    CMD_ARCHIVEROUTE                   =  4;
+    CMD_DRIVE                          =  5;
+    CMD_GROUPMOUNTRULE                 =  6;
+    CMD_LISTPENDINGARCHIVES            =  7;
+    CMD_LISTPENDINGRETRIEVES           =  8;
+    CMD_LOGICALLIBRARY                 =  9;
+    CMD_MOUNTPOLICY                    = 10;
+    CMD_REPACK                         = 11;
+    CMD_REQUESTERMOUNTRULE             = 12;
+    CMD_SHOWQUEUES                     = 13;
+    CMD_SHRINK                         = 14;
+    CMD_STORAGECLASS                   = 15;
+    CMD_TAPE                           = 16;
+    CMD_TAPEPOOL                       = 17;
+    CMD_TEST                           = 18;
+    CMD_VERIFY                         = 19;
   }
   enum SubCmd {
-    CMD_NONE                           =  0;
-    CMD_ADD                            =  1;
-    CMD_CH                             =  2;
-    CMD_ERR                            =  3;
-    CMD_LABEL                          =  4;
-    CMD_LS                             =  5;
-    CMD_RECLAIM                        =  6;
-    CMD_RM                             =  7;
-    CMD_UP                             =  8;
-    CMD_DOWN                           =  9;
-    CMD_READ                           = 10;
-    CMD_WRITE                          = 11;
+    SUBCMD_NONE                        =  0;
+    SUBCMD_ADD                         =  1;
+    SUBCMD_CH                          =  2;
+    SUBCMD_ERR                         =  3;
+    SUBCMD_LABEL                       =  4;
+    SUBCMD_LS                          =  5;
+    SUBCMD_RECLAIM                     =  6;
+    SUBCMD_RM                          =  7;
+    SUBCMD_UP                          =  8;
+    SUBCMD_DOWN                        =  9;
+    SUBCMD_READ                        = 10;
+    SUBCMD_WRITE                       = 11;
   }
 
   Cmd cmd                              =  1;    //< The primary command