diff --git a/frontend/XrdSsiPbRequest.h b/frontend/XrdSsiPbRequest.h
index 154b072709e188f334eceed46cdca7d41d1d743c..de6ef09df7cba463598baa9970773f872f313a6e 100644
--- a/frontend/XrdSsiPbRequest.h
+++ b/frontend/XrdSsiPbRequest.h
@@ -140,9 +140,6 @@ bool XrdSsiPbRequest<RequestType, ResponseType, MetadataType, AlertType>::Proces
 
          if(metadata_len > 0)
          {
-            // Temporary workaround for XrdSsi bug #537:
-            ++metadata_buffer; --metadata_len;
-
             // Deserialize the metadata
 
             const std::string metadata_str(metadata_buffer, metadata_len);
diff --git a/frontend/XrdSsiPbRequestProc.h b/frontend/XrdSsiPbRequestProc.h
index 3a1d505059a0d78605ee8fc5714eed4b7b07b7ba..2f6b32131cd15b53ed2a1dee9f1c40e4ac6839bb 100644
--- a/frontend/XrdSsiPbRequestProc.h
+++ b/frontend/XrdSsiPbRequestProc.h
@@ -31,7 +31,6 @@ public:
 
 private:
 
-
    void Alert(const AlertType &alert)
    {
       // Encapsulate the Alert protocol buffer inside a XrdSsiRespInfoMsg object. Alert message objects
@@ -50,6 +49,11 @@ private:
    ResponseType m_response;
    AlertType    m_alert;
    MetadataType m_metadata;
+
+   // Metadata and response buffers must stay in scope until Finished() is called, so they need to be member variables
+
+   std::string  m_response_str;
+   std::string  m_metadata_str;
 };
 
 
@@ -95,35 +99,30 @@ void RequestProc<RequestType, ResponseType, MetadataType, AlertType>::Execute()
 
    // Serialize the Metadata
 
-   std::string response_str;
-
-   if(!m_metadata.SerializeToString(&response_str))
+   if(!m_metadata.SerializeToString(&m_metadata_str))
    {
-      throw XrdSsiException("metadata.SerializeToString() failed");
+      throw XrdSsiException("m_metadata.SerializeToString() failed");
    }
 
    // Send the Metadata
 
-   if(response_str.size() > 0)
+   if(m_metadata_str.size() > 0)
    {
-      // Temporary workaround for XrdSsi bug #537:
-      response_str = " " + response_str;
-
-      SetMetadata(response_str.c_str(), response_str.size());
+      SetMetadata(m_metadata_str.c_str(), m_metadata_str.size());
    }
 
    // Serialize the Response
 
-   if(!m_response.SerializeToString(&response_str))
+   if(!m_response.SerializeToString(&m_response_str))
    {
-      throw XrdSsiException("response.SerializeToString() failed");
+      throw XrdSsiException("m_response.SerializeToString() failed");
    }
 
    // Send the response
 
-   if(response_str.size() > 0)
+   if(m_response_str.size() > 0)
    {
-      SetResponse(response_str.c_str(), response_str.size());
+      SetResponse(m_response_str.c_str(), m_response_str.size());
    }
 }