diff --git a/IO/IOSS/vtkIOSSReader.cxx b/IO/IOSS/vtkIOSSReader.cxx
index 7d0f0bd706e544d5ea0b8f575aa1d42d658cf449..8d2264cfcd20e3881dcfaa4a15af5e199990e292 100644
--- a/IO/IOSS/vtkIOSSReader.cxx
+++ b/IO/IOSS/vtkIOSSReader.cxx
@@ -76,7 +76,6 @@
 
 #include <array>
 #include <cassert>
-#include <functional>
 #include <iterator>
 #include <map>
 #include <memory>
@@ -1291,8 +1290,10 @@ bool vtkIOSSReader::vtkInternals::GenerateOutput(
         vtkNew<vtkPartitionedDataSet> parts;
         output->SetPartitionedDataSet(pdsIdx, parts);
         output->GetMetaData(pdsIdx)->Set(vtkCompositeDataSet::NAME(), ename.second.c_str());
-        output->GetMetaData(pdsIdx)->Set(
-          vtkIOSSReader::ENTITY_TYPE(), etype); // save for vtkIOSSReader use.
+        // save for vtkIOSSReader use.
+        output->GetMetaData(pdsIdx)->Set(vtkIOSSReader::ENTITY_TYPE(), etype);
+        // save for vtkIOSSWriter use.
+        output->GetMetaData(pdsIdx)->Set(vtkIOSSReader::ENTITY_ID(), ename.first);
         auto node = assembly->AddNode(
           vtkDataAssembly::MakeValidNodeName(ename.second.c_str()).c_str(), entity_node);
         assembly->SetAttribute(node, "label", ename.second.c_str());
@@ -1307,8 +1308,10 @@ bool vtkIOSSReader::vtkInternals::GenerateOutput(
       vtkNew<vtkPartitionedDataSet> parts;
       output->SetPartitionedDataSet(pdsIdx, parts);
       output->GetMetaData(pdsIdx)->Set(vtkCompositeDataSet::NAME(), mergedEntityName);
-      output->GetMetaData(pdsIdx)->Set(
-        vtkIOSSReader::ENTITY_TYPE(), etype); // save for vtkIOSSReader use.
+      // save for vtkIOSSReader use.
+      output->GetMetaData(pdsIdx)->Set(vtkIOSSReader::ENTITY_TYPE(), etype);
+      // save for vtkIOSSWriter use.
+      output->GetMetaData(pdsIdx)->Set(vtkIOSSReader::ENTITY_ID(), etype);
       auto node = assembly->AddNode(
         vtkDataAssembly::MakeValidNodeName(mergedEntityName).c_str(), entity_node);
       assembly->SetAttribute(node, "label", mergedEntityName);
@@ -2682,6 +2685,7 @@ bool vtkIOSSReader::vtkInternals::GetGlobalFields(
 vtkStandardNewMacro(vtkIOSSReader);
 vtkCxxSetObjectMacro(vtkIOSSReader, Controller, vtkMultiProcessController);
 vtkInformationKeyMacro(vtkIOSSReader, ENTITY_TYPE, Integer);
+vtkInformationKeyMacro(vtkIOSSReader, ENTITY_ID, Integer);
 //----------------------------------------------------------------------------
 vtkIOSSReader::vtkIOSSReader()
   : Controller(nullptr)
diff --git a/IO/IOSS/vtkIOSSReader.h b/IO/IOSS/vtkIOSSReader.h
index 687da843d53497dff4e155918f11b9b01e0b0dda..367742869768ec202ec1f699cecca4ff9ebfca56 100644
--- a/IO/IOSS/vtkIOSSReader.h
+++ b/IO/IOSS/vtkIOSSReader.h
@@ -625,6 +625,8 @@ public:
   vtkTypeBool ProcessRequest(
     vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo) override;
 
+  static vtkInformationIntegerKey* ENTITY_ID();
+
 protected:
   vtkIOSSReader();
   ~vtkIOSSReader() override;