diff --git a/src/python/OBis/obis/dm/config.py b/src/python/OBis/obis/dm/config.py
index f7863e963c52342f4699a402ec57f466c99959a8..d5bde2cd9fccb5ebd12da536d559c1c812e8d59d 100644
--- a/src/python/OBis/obis/dm/config.py
+++ b/src/python/OBis/obis/dm/config.py
@@ -87,6 +87,7 @@ class ConfigEnv(object):
         self.add_param(ConfigParam(name='user', private=True))
         self.add_param(ConfigParam(name='verify_certificates', private=True, is_json=True))
         self.add_param(ConfigParam(name='external_dms_id', private=True))
+        self.add_param(ConfigParam(name='repository_id', private=True))
         self.add_param(ConfigParam(name='object_id', private=False))
         self.add_param(ConfigParam(name='data_set_id', private=False))
         self.add_param(ConfigParam(name='data_set_type', private=False))
diff --git a/src/python/OBis/obis/dm/data_mgmt.py b/src/python/OBis/obis/dm/data_mgmt.py
index a93e0fce36698c2e9118128c70f5ff00835e1290..cab65baa2f092e0d738c049762a2b255bff43912 100644
--- a/src/python/OBis/obis/dm/data_mgmt.py
+++ b/src/python/OBis/obis/dm/data_mgmt.py
@@ -18,6 +18,7 @@ from . import config as dm_config
 import traceback
 import getpass
 import socket
+import uuid
 
 import pybis
 
@@ -402,6 +403,9 @@ class OpenbisSync(object):
     def external_dms_id(self):
         return self.config_dict.get('external_dms_id')
 
+    def repository_id(self):
+        return self.config_dict.get('repository_id')
+
     def data_set_type(self):
         return self.config_dict.get('data_set_type')
 
@@ -486,7 +490,7 @@ class OpenbisSync(object):
         except ValueError as e:
             return CommandResult(returncode=-1, output=str(e)), None
 
-    def create_data_set(self, data_set_code, external_dms):
+    def create_data_set(self, data_set_code, external_dms, repository_id):
         data_set_type = self.data_set_type()
         parent_data_set_id = self.data_set_id()
         properties = self.data_set_properties()
@@ -501,7 +505,7 @@ class OpenbisSync(object):
         object_id = self.object_id()
         contents = GitRepoFileInfo(self.git_wrapper).contents()
         try:
-            data_set = self.openbis.new_git_data_set(data_set_type, top_level_path, commit_id, external_dms.code,
+            data_set = self.openbis.new_git_data_set(data_set_type, top_level_path, commit_id, repository_id, external_dms.code,
                                                      object_id, data_set_code=data_set_code, parents=parent_data_set_id,
                                                      properties=properties, contents=contents)
             return CommandResult(returncode=0, output=""), data_set
@@ -523,6 +527,14 @@ class OpenbisSync(object):
             return result
         return CommandResult(returncode=0, output="")
 
+    def prepare_repository_id(self):
+        repository_id = self.repository_id()
+        if self.repository_id() is None:
+            repository_id = str(uuid.uuid4())
+            self.config_resolver.set_value_for_parameter('repository_id', repository_id, 'local')
+        return CommandResult(returncode=0, output=repository_id)
+
+
     def prepare_external_dms(self):
         # If there is no external data management system, create one.
         external_dms = self.get_external_data_management_system()
@@ -541,6 +553,11 @@ class OpenbisSync(object):
         if result.failure():
             return result
 
+        result = self.prepare_repository_id()
+        if result.failure():
+            return result
+        repository_id = result.output
+
         result = self.prepare_external_dms()
         if result.failure():
             return result
@@ -557,7 +574,7 @@ class OpenbisSync(object):
         self.commit_metadata_updates("data set id")
 
         # create a data set, using the existing data set as a parent, if there is one
-        result, data_set = self.create_data_set(data_set_code, external_dms)
+        result, data_set = self.create_data_set(data_set_code, external_dms, repository_id)
         if result.failure():
             self.revert_last_metadata_update()
             return result
diff --git a/src/python/OBis/obis/dm/data_mgmt_test.py b/src/python/OBis/obis/dm/data_mgmt_test.py
index fb4c5ab4b6bf0e3cb8a8f6bedad2b65545f6090f..9fff7a9967be724fd4122260d60c12fe7aeffee2 100644
--- a/src/python/OBis/obis/dm/data_mgmt_test.py
+++ b/src/python/OBis/obis/dm/data_mgmt_test.py
@@ -158,9 +158,11 @@ def test_child_data_set(tmpdir):
         child_ds_code = dm.config_resolver.config_dict()['data_set_id']
         assert parent_ds_code != child_ds_code
         commit_id = dm.git_wrapper.git_commit_id().output
+        repository_id = dm.config_resolver.config_dict()['repository_id']
+        assert repository_id is not None
 
         contents = data_mgmt.GitRepoFileInfo(dm.git_wrapper).contents()
-        check_new_data_set_expectations(dm, tmp_dir_path, commit_id, ANY, child_ds_code, parent_ds_code, properties,
+        check_new_data_set_expectations(dm, tmp_dir_path, commit_id, repository_id, ANY, child_ds_code, parent_ds_code, properties,
                                         contents)
 
 
@@ -195,9 +197,9 @@ def prepare_new_data_set_expectations(dm, properties={}):
     dm.openbis.new_git_data_set = MagicMock(return_value=data_set)
 
 
-def check_new_data_set_expectations(dm, tmp_dir_path, commit_id, external_dms, data_set_id, parent_id, properties,
+def check_new_data_set_expectations(dm, tmp_dir_path, commit_id, repository_id, external_dms, data_set_id, parent_id, properties,
                                     contents):
-    dm.openbis.new_git_data_set.assert_called_with('DS_TYPE', tmp_dir_path, commit_id, external_dms, "/SAMPLE/ID",
+    dm.openbis.new_git_data_set.assert_called_with('DS_TYPE', tmp_dir_path, commit_id, repository_id, external_dms, "/SAMPLE/ID",
                                                    data_set_code=data_set_id, parents=parent_id, properties=properties,
                                                    contents=contents)
 
diff --git a/src/python/PyBis/pybis/data_set.py b/src/python/PyBis/pybis/data_set.py
index 6b9bbcf3f4e5abeaa6a91512dafa5aee121b36cc..3dc4bfe6b5f8fe167e28da47b7ac3ac2671a013c 100644
--- a/src/python/PyBis/pybis/data_set.py
+++ b/src/python/PyBis/pybis/data_set.py
@@ -20,7 +20,7 @@ def transfer_to_file_creation(content, file_creation, key, file_creation_key=Non
 
 
 class GitDataSetCreation(object):
-    def __init__(self, openbis, data_set_type, path, commit_id, dms, sample=None, properties={},
+    def __init__(self, openbis, data_set_type, path, commit_id, repository_id, dms, sample=None, properties={},
                  dss_code=None, parents=None, data_set_code=None, contents=[]):
         """Initialize the command object with the necessary parameters.
         :param openbis: The openBIS API object.
@@ -28,6 +28,7 @@ class GitDataSetCreation(object):
         :param data_set_type: The type of the data set
         :param path: The path to the git repository
         :param commit_id: The git commit id
+        :param repository_id: The git repository id - same for copies
         :param dms: An external data managment system object or external_dms_id
         :param sample: A sample object or sample id.
         :param properties: Properties for the data set.
@@ -45,6 +46,7 @@ class GitDataSetCreation(object):
         self.data_set_type = data_set_type
         self.path = path
         self.commit_id = commit_id
+        self.repository_id = repository_id
         self.dms = dms
         self.sample = sample
         self.properties = properties
@@ -128,6 +130,7 @@ class GitDataSetCreation(object):
                         "@type": "as.dto.dataset.create.ContentCopyCreation",
                         "path": self.path,
                         "gitCommitHash": self.commit_id,
+                        "gitRepositoryId" : self.repository_id,
                         "externalDmsId": dms_id
                     }
                 ]
diff --git a/src/python/PyBis/pybis/pybis.py b/src/python/PyBis/pybis/pybis.py
index 5682ef46479aeccc26a9675a333f1a52a4600f28..a2acc45b804dd6d54351f28b5b933128852b16eb 100644
--- a/src/python/PyBis/pybis/pybis.py
+++ b/src/python/PyBis/pybis/pybis.py
@@ -1795,13 +1795,14 @@ class Openbis:
         except:
             return resp
 
-    def new_git_data_set(self, data_set_type, path, commit_id, dms, sample=None, properties={},
+    def new_git_data_set(self, data_set_type, path, commit_id, repository_id, dms, sample=None, properties={},
                          dss_code=None, parents=None, data_set_code=None, contents=[]):
         """ Create a link data set.
         :param data_set_type: The type of the data set
         :param data_set_type: The type of the data set
         :param path: The path to the git repository
         :param commit_id: The git commit id
+        :param repository_id: The git repository id - same for copies
         :param dms: An external data managment system object or external_dms_id
         :param sample: A sample object or sample id.
         :param dss_code: Code for the DSS -- defaults to the first dss if none is supplied.
@@ -1815,7 +1816,7 @@ class Openbis:
              'path': [the relative path string]}
         :return: A DataSet object
         """
-        return pbds.GitDataSetCreation(self, data_set_type, path, commit_id, dms, sample,
+        return pbds.GitDataSetCreation(self, data_set_type, path, commit_id, repository_id, dms, sample,
                                        properties, dss_code, parents, data_set_code, contents).new_git_data_set()
 
     @staticmethod