diff --git a/macro/rich/Import_GDML_Export_ROOT.c b/macro/rich/Import_GDML_Export_ROOT.c
index 64ed443c7bd167f64c5bfeb510ed7f1d7491c4aa..7dcfc0937251b862de04e33e886c37c399749db3 100644
--- a/macro/rich/Import_GDML_Export_ROOT.c
+++ b/macro/rich/Import_GDML_Export_ROOT.c
@@ -1,4 +1,7 @@
 
+void addCopyNumbersToNodes(TGeoVolume* volume);
+
+
 void Import_GDML_Export_ROOT()
 {
 
@@ -94,6 +97,7 @@ void Import_GDML_Export_ROOT()
 
   gdmlTop->Print();
   gGeoManager->SetTopVolume(rootTop);
+  gGeoManager->SetAllIndex();
 
   // Starting from the version v18a position is defined inside the GDML file
   // Define your position HERE
@@ -103,6 +107,8 @@ void Import_GDML_Export_ROOT()
 
   rootTop->AddNode(gdmlTop, 1, posrot);
 
+  addCopyNumbersToNodes(gGeoManager->GetTopNode()->GetVolume());
+
   gGeoManager->CloseGeometry();
   gGeoManager->CheckOverlaps();
   gGeoManager->PrintOverlaps();
@@ -136,3 +142,21 @@ void Import_GDML_Export_ROOT()
   gROOT->LoadMacro(createmedialist);
   gROOT->ProcessLine("create_medialist(\"\", false)");
 }
+
+
+void addCopyNumbersToNodes(TGeoVolume* volume)
+{
+  map<string, int> counterMap;
+  TGeoIterator geoIterator(volume);
+  geoIterator.SetType(1);
+  geoIterator.Reset();
+  TGeoNode* curNode;
+  while ((curNode = geoIterator())) {
+    string volumeName = string(curNode->GetVolume()->GetName());
+    counterMap[volumeName]++;
+    int curCounter = counterMap[volumeName];
+    curNode->SetNumber(curCounter);
+    curNode->SetName((volumeName + "_" + to_string(curCounter)).c_str());
+    addCopyNumbersToNodes(curNode->GetVolume());
+  }
+}