diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx
index e4a19aa45a87c362f22e2b2885b0965acfd4cb53..6ee02a6d051705c79a097931c87ffe7437ac773c 100644
--- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx
+++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx
@@ -314,7 +314,7 @@ StatusCode AthenaPoolCnvSvc::connectOutput(const std::string& outputConnectionSp
    }
 
    if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient() && m_streamMetaDataOnly) {
-      outputConnection = outputConnection + "?pmerge=localhost:1095";
+      outputConnection = outputConnection + m_streamPortString.value();
    }
    unsigned int contextId = outputContextId(outputConnection);
    try {
@@ -607,7 +607,7 @@ StatusCode AthenaPoolCnvSvc::commitOutput(const std::string& outputConnectionSpe
          doCommit = true;
          ATH_MSG_DEBUG("commitOutput sending data.");
       }
-      outputConnection = outputConnection + "?pmerge=localhost:1095";
+      outputConnection = outputConnection + m_streamPortString.value();
    }
    unsigned int contextId = outputContextId(outputConnection);
    if (!processPoolAttributes(m_domainAttr, outputConnection, contextId).isSuccess()) {
@@ -683,7 +683,7 @@ StatusCode AthenaPoolCnvSvc::disconnectOutput(const std::string& outputConnectio
       ATH_MSG_DEBUG("disconnectOutput not SKIPPED for server: " << m_streamServer);
    }
    if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient() && m_streamMetaDataOnly) {
-      outputConnection = outputConnection + "?pmerge=localhost:1095";
+      outputConnection = outputConnection + m_streamPortString.value();
    }
    unsigned int contextId = outputContextId(outputConnection);
    StatusCode sc = m_poolSvc->disconnect(contextId);
@@ -830,7 +830,7 @@ Token* AthenaPoolCnvSvc::registerForWrite(Placement* placement, const void* obj,
          }
       } else {
          if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient() && m_streamMetaDataOnly) {
-            placement->setFileName(placement->fileName() + "?pmerge=localhost:1095");
+            placement->setFileName(placement->fileName() + m_streamPortString.value());
          }
          if (m_persSvcPerOutput) {
             char text[32];
diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h
index 0f1420668e6e27af0d182b31ae22990cc9c5603f..630766b5b972b8be53234925947df356cb49e18a 100644
--- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h
+++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.h
@@ -251,6 +251,8 @@ private: // properties
    IntegerProperty m_makeStreamingToolClient{this,"MakeStreamingToolClient",0};
    /// Use Athena Object sharing for metadata only, event data is collected and send via ROOT TMemFile
    BooleanProperty m_streamMetaDataOnly{this,"StreamMetaDataOnly",false};
+   /// Extension to use ROOT TMemFile for event data, "?pmerge=<host>:<port>"
+   StringProperty  m_streamPortString{this,"StreamPortString","?pmerge=localhost:1095"};
    /// When using TMemFile call Write on number of Events, respecting CollectionTree auto_flush
    IntegerProperty m_numberEventsPerWrite{this,"NumberEventsPerWrite",10};
 };
diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx
index ae52fa8e12ea57e5486361ee8a2fa855cc7dd9ca..0ecf216f801b4c8064e0a8c4d001215215f3d320 100644
--- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx
+++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx
@@ -162,15 +162,24 @@ StatusCode AthenaRootSharedWriterSvc::initialize() {
       BooleanProperty streamMetaDataOnlyProp(propertyName, streamMetaDataOnly);
       if (propertyServer->getProperty(&streamMetaDataOnlyProp).isFailure()) {
          ATH_MSG_INFO("Conversion service does not have StreamMetaDataOnly property");
-      } else if(streamMetaDataOnlyProp.value()) {
-         m_rootServerSocket = new TServerSocket(1095, true, 100);
+      } else if (streamMetaDataOnlyProp.value()) {
+         int streamPort = 1095;
+         propertyName = "StreamPortString";
+         std::string streamPortString("");
+         StringProperty streamPortStringProp(propertyName, streamPortString);
+         if (propertyServer->getProperty(&streamPortStringProp).isFailure()) {
+            ATH_MSG_INFO("Conversion service does not have StreamPortString property, using default: " << streamPort);
+         } else {
+            streamPort = atoi(streamPortStringProp.value().substr(streamPortStringProp.value().find(":") + 1).c_str());
+         }
+         m_rootServerSocket = new TServerSocket(streamPort, true, 100);
          if (m_rootServerSocket == nullptr || !m_rootServerSocket->IsValid()) {
-            ATH_MSG_FATAL("Could not create ROOT TServerSocket");
+            ATH_MSG_FATAL("Could not create ROOT TServerSocket: " << streamPort);
             return StatusCode::FAILURE;
          }
          m_rootMonitor = new TMonitor;
          m_rootMonitor->Add(m_rootServerSocket);
-         ATH_MSG_DEBUG("Successfully created ROOT TServerSocket and added it to TMonitor: ready to accept connections!");
+         ATH_MSG_DEBUG("Successfully created ROOT TServerSocket and added it to TMonitor: ready to accept connections, " << streamPort);
       }
    }