diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/GridPreparationRegistrator.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/GridPreparationRegistrator.java
index 7942d64b87347cb5d0e1df068f5fe9d47ac0993f..8f777a9a583a8c313a4adae3c5d3e5a0dd42fe31 100644
--- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/GridPreparationRegistrator.java
+++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/GridPreparationRegistrator.java
@@ -69,20 +69,23 @@ public class GridPreparationRegistrator extends BundleDataSetHelper
     public void register()
     {
         retrieveOrCreateGridPrepSample();
+
+        // Register the bundle metadata data set
+        DataSetInformation metadataDataSetInfo = createDataSetInformation();
+        File metadataFile = new File(dataSet, BundleStructureConstants.BUNDLE_METADATA_FILE_NAME);
+        List<DataSetInformation> registeredBundleMetadataDataSets =
+                registerDataSet(metadataFile, metadataDataSetInfo);
+        DataSetInformation registeredBundleMetadataDataSet =
+                registeredBundleMetadataDataSets.get(0);
+
         for (ReplicaMetadataExtractor replicaMetadataExtractor : bundleMetadataExtractor
                 .getReplicaMetadataExtractors())
         {
             List<DataSetInformation> childRegisteredDataSets =
                     new ReplicaRegistrator(globalState, replicaMetadataExtractor, gridPrepSample,
-                            gridPrepSampleId, dataSet).register();
+                            gridPrepSampleId, registeredBundleMetadataDataSet, dataSet).register();
             getDataSetInformation().addAll(childRegisteredDataSets);
         }
-
-        // Create a DataSetInformation
-        DataSetInformation metadataDataSetInfo = createDataSetInformation();
-
-        File metadataFile = new File(dataSet, BundleStructureConstants.BUNDLE_METADATA_FILE_NAME);
-        registerDataSet(metadataFile, metadataDataSetInfo);
     }
 
     private void retrieveOrCreateGridPrepSample()
diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaAnnotatedImagesRegistrator.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaAnnotatedImagesRegistrator.java
index adc6e7829d52cb5c5eeb96b140bf8b896be80549..ff196585bec5de3f27d36534e66d4b1b10387291 100644
--- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaAnnotatedImagesRegistrator.java
+++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaAnnotatedImagesRegistrator.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.cina.dss.bundle.registrators;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import ch.systemsx.cisd.cina.shared.metadata.ImageMetadataExtractor;
@@ -37,6 +38,8 @@ public class ReplicaAnnotatedImagesRegistrator extends BundleDataSetHelper
 
     private final SampleIdentifier replicaSampleId;
 
+    private final DataSetInformation bundleMetadataDataSetInformation;
+
     /**
      * Constructor.
      * 
@@ -45,14 +48,16 @@ public class ReplicaAnnotatedImagesRegistrator extends BundleDataSetHelper
      *            in the store
      * @param replicaSample The owning sample of the data set
      * @param replicaSampleId The owning sample id
+     * @param bundleMetadataDataSetInformation
      */
     ReplicaAnnotatedImagesRegistrator(BundleRegistrationState globalState,
             ImageMetadataExtractor imageMetadataExtractor, Sample replicaSample,
-            SampleIdentifier replicaSampleId)
+            SampleIdentifier replicaSampleId, DataSetInformation bundleMetadataDataSetInformation)
     {
         super(globalState, imageMetadataExtractor.getFolder());
         this.imageMetadataExtractor = imageMetadataExtractor;
         this.replicaSampleId = replicaSampleId;
+        this.bundleMetadataDataSetInformation = bundleMetadataDataSetInformation;
     }
 
     public List<DataSetInformation> register()
@@ -76,6 +81,9 @@ public class ReplicaAnnotatedImagesRegistrator extends BundleDataSetHelper
         metadataDataSetInfo.setInstanceCode(replicaSampleId.getSpaceLevel()
                 .getDatabaseInstanceCode());
         metadataDataSetInfo.setDataSetType(globalState.getImageDataSetType().getDataSetType());
+        List<String> parentDataSetCodes =
+                Collections.singletonList(bundleMetadataDataSetInformation.getDataSetCode());
+        metadataDataSetInfo.setParentDataSetCodes(parentDataSetCodes);
         return metadataDataSetInfo;
     }
 }
diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaMetadataRegistrator.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaMetadataRegistrator.java
index f3120000b60cb62c015f821debf68d40d18e9a29..dbf31d885d114fdbd75f4550c445df93c53c05bd 100644
--- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaMetadataRegistrator.java
+++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaMetadataRegistrator.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.cina.dss.bundle.registrators;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import ch.systemsx.cisd.cina.shared.metadata.ReplicaMetadataExtractor;
@@ -38,15 +39,18 @@ public class ReplicaMetadataRegistrator extends BundleDataSetHelper
 
     private final SampleIdentifier replicaSampleId;
 
+    private final DataSetInformation bundleMetadataDataSetInformation;
+
     private File metadataDataSetFile = null;
 
     ReplicaMetadataRegistrator(BundleRegistrationState globalState,
             ReplicaMetadataExtractor replicaMetadataExtractor, Sample replicaSample,
-            SampleIdentifier replicaSampleId)
+            SampleIdentifier replicaSampleId, DataSetInformation bundleMetadataDataSetInformation)
     {
         super(globalState, replicaMetadataExtractor.getFolder());
         this.replicaMetadataExtractor = replicaMetadataExtractor;
         this.replicaSampleId = replicaSampleId;
+        this.bundleMetadataDataSetInformation = bundleMetadataDataSetInformation;
     }
 
     /**
@@ -85,6 +89,9 @@ public class ReplicaMetadataRegistrator extends BundleDataSetHelper
         metadataDataSetInfo.setInstanceCode(replicaSampleId.getSpaceLevel()
                 .getDatabaseInstanceCode());
         metadataDataSetInfo.setDataSetType(globalState.getMetadataDataSetType().getDataSetType());
+        List<String> parentDataSetCodes =
+                Collections.singletonList(bundleMetadataDataSetInformation.getDataSetCode());
+        metadataDataSetInfo.setParentDataSetCodes(parentDataSetCodes);
         return metadataDataSetInfo;
     }
 
diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaRegistrator.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaRegistrator.java
index c4a97e890d47abdc0a7465839bbf54908dee417c..c3aa29a4cb0cd50ae606bfa3b5a9b8278d9ff861 100644
--- a/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaRegistrator.java
+++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/dss/bundle/registrators/ReplicaRegistrator.java
@@ -43,6 +43,8 @@ public class ReplicaRegistrator extends BundleDataSetHelper
 
     private final SampleIdentifier gridPrepSampleId;
 
+    private final DataSetInformation bundleMetadataDataSetInformation;
+
     // Processing State (gets set during the execution of registration)
     private SampleIdentifier replicaSampleId;
 
@@ -52,13 +54,15 @@ public class ReplicaRegistrator extends BundleDataSetHelper
 
     ReplicaRegistrator(BundleRegistrationState globalState,
             ReplicaMetadataExtractor replicaMetadataExtractor, Sample gridPrepSample,
-            SampleIdentifier gridPrepSampleId, File dataSet)
+            SampleIdentifier gridPrepSampleId, DataSetInformation bundleMetadataDataSetInformation,
+            File dataSet)
     {
         super(globalState, dataSet);
 
         this.replicaMetadataExtractor = replicaMetadataExtractor;
         this.gridPrepSample = gridPrepSample;
         this.gridPrepSampleId = gridPrepSampleId;
+        this.bundleMetadataDataSetInformation = bundleMetadataDataSetInformation;
     }
 
     /**
@@ -126,7 +130,7 @@ public class ReplicaRegistrator extends BundleDataSetHelper
     {
         ReplicaMetadataRegistrator registrator =
                 new ReplicaMetadataRegistrator(globalState, replicaMetadataExtractor,
-                        replicaSample, replicaSampleId);
+                        replicaSample, replicaSampleId, bundleMetadataDataSetInformation);
         List<DataSetInformation> registeredDataSetInfos = registrator.register();
         getDataSetInformation().addAll(registeredDataSetInfos);
         return registrator.getMetadataDataSetFile();
@@ -145,7 +149,7 @@ public class ReplicaRegistrator extends BundleDataSetHelper
         {
             ReplicaAnnotatedImagesRegistrator registrator =
                     new ReplicaAnnotatedImagesRegistrator(globalState, imageMetadataExtractor,
-                            replicaSample, replicaSampleId);
+                            replicaSample, replicaSampleId, bundleMetadataDataSetInformation);
             List<DataSetInformation> registeredDataSetInfos = registrator.register();
             getDataSetInformation().addAll(registeredDataSetInfos);
         }
diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java
index 7b2f0d325e449aaa6a87c4b1fe42fb0e7f6d4a7c..4ca8165ea204763552ca4c0e797aca6eb73c10ab 100644
--- a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java
+++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java
@@ -74,7 +74,7 @@ public abstract class CinaBundleRegistrationTest extends AbstractFileSystemTestC
     protected static final String REPLICA_SAMPLE_IDENTIFIER = DB_CODE + ":/" + SPACE_CODE + "/"
             + REPLICA_SAMPLE_CODE;
 
-    private static final String BUNDLE_METADATA_DATA_SET_CODE = null;
+    private static final String BUNDLE_METADATA_DATA_SET_CODE = "BUNDLE_METADATA";
 
     public static abstract class MatcherNoDesc<T> extends BaseMatcher<T>
     {
@@ -292,6 +292,8 @@ public abstract class CinaBundleRegistrationTest extends AbstractFileSystemTestC
                                                     dataSetInfo.getDataSetType());
                                             assertEquals(REPLICA_SAMPLE_CODE,
                                                     dataSetInfo.getSampleCode());
+                                            assertEquals(BUNDLE_METADATA_DATA_SET_CODE, dataSetInfo
+                                                    .getParentDataSetCodes().get(0));
                                             return true;
                                         }
                                         return false;
@@ -321,6 +323,8 @@ public abstract class CinaBundleRegistrationTest extends AbstractFileSystemTestC
                                                     dataSetInfo.getDataSetType());
                                             assertEquals(REPLICA_SAMPLE_CODE,
                                                     dataSetInfo.getSampleCode());
+                                            assertEquals(BUNDLE_METADATA_DATA_SET_CODE, dataSetInfo
+                                                    .getParentDataSetCodes().get(0));
                                             return true;
                                         }
                                         return false;
@@ -418,7 +422,7 @@ public abstract class CinaBundleRegistrationTest extends AbstractFileSystemTestC
                             with(new SampleIdentifierFactory(GRID_SAMPLE_IDENTIFIER)
                                     .createIdentifier()));
                     will(returnValue(null));
-    
+
                     // Create the Grid Prep
                     one(openbisService).registerSample(with(new BaseMatcher<NewSample>()
                         {
@@ -435,19 +439,19 @@ public abstract class CinaBundleRegistrationTest extends AbstractFileSystemTestC
                                 }
                                 return false;
                             }
-    
+
                             public void describeTo(Description description)
                             {
                             }
                         }), with(TEST_USER_NAME));
                     will(returnValue(new Long(1)));
-    
+
                     // The Replica does not yet exist
                     one(openbisService).tryGetSampleWithExperiment(
                             with(new SampleIdentifierFactory(REPLICA_SAMPLE_IDENTIFIER)
                                     .createIdentifier()));
                     will(returnValue(null));
-    
+
                     // Create the Replica
                     one(openbisService).registerSample(with(new MatcherNoDesc<NewSample>()
                         {