diff --git a/mpcdf_common.py b/mpcdf_common.py
index 631ac1cccd1e2e4b79e09f348dd1177de3bfdec8..aa9d161311f02e4c299a7ee1388ce5f433227c4e 100644
--- a/mpcdf_common.py
+++ b/mpcdf_common.py
@@ -85,6 +85,15 @@ def project_meta(api_url, project):
     return ElementTree.fromstringlist(osc.core.show_project_meta(api_url, project))
 
 
+def package_meta(api_url, project, package):
+    return ElementTree.fromstringlist(osc.core.show_package_meta(api_url, project, package))
+
+
+def maintainers(api_url, project, package):
+    root = package_meta(api_url, project, package)
+    return {e.get("userid") for e in root.findall("./person[@role='maintainer']")}
+
+
 class UnsetAttributeException(Exception):
     pass
 
@@ -175,7 +184,7 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False, filter_r
     if filter_repos is None:
         filter_repos = ()
 
-    root = ElementTree.fromstringlist(osc.core.show_package_meta(api_url, project, package))
+    root = package_meta(api_url, project, package)
     build = root.find("./build")
     if build is None:
         build = ElementTree.SubElement(root, "build")
@@ -555,6 +564,19 @@ def sync_projects(api_url, package=None, from_project="software", to_projects=No
                     continue
                 set_attribute(api_url, to_project, orig_package, attr)
 
+            from_maintainers = maintainers(api_url, from_project, orig_package)
+            if from_maintainers:
+                to_maintainers = maintainers(api_url, to_project, orig_package)
+                if from_maintainers - to_maintainers:
+                    new_maintainers = from_maintainers - to_maintainers
+                    to_meta = package_meta(api_url, to_project, orig_package)
+                    for userid in new_maintainers:
+                        person = ElementTree.Element("person")
+                        person.set("userid", userid)
+                        person.set("role", "maintainer")
+                        to_meta.insert(2, person)
+                    osc.core.edit_meta("pkg", (to_project, orig_package), data=ElementTree.tostring(to_meta))
+
         if package is None and redo_all:
             # Check if distribution is already set in to_project
             to_prj_meta = project_meta(api_url, to_project)
diff --git a/mpcdf_push.py b/mpcdf_push.py
index 89a764ce1dc6ecb3bb6a2e555d88debc12e773fc..69a04a1137d11505c19ffccb4333ec5a02386b9b 100644
--- a/mpcdf_push.py
+++ b/mpcdf_push.py
@@ -74,8 +74,7 @@ def do_mpcdf_push(self, subcmd, opts, *args):
     package_attributes = ["MPCDF:enable_repositories"] + project_attributes
 
     try:
-        root = ElementTree.fromstringlist(osc.core.show_package_meta(api_url, to_project, package))
-        existing_maintainers = {e.get("userid") for e in root.findall("./person[@role='maintainer']")}
+        existing_maintainers = mpcdf_common.maintainers(api_url, to_project, package)
     except osc.core.HTTPError as e:
         if e.code == 404:
             existing_maintainers = set()
@@ -108,12 +107,12 @@ def do_mpcdf_push(self, subcmd, opts, *args):
         user = osc.conf.get_apiurl_usr(api_url)
         if user not in existing_maintainers:
             print("Adding you to the list of maintainers for this package")
-            r = osc.core.Request()
-            r.add_action("add_role", tgt_project=to_project, tgt_package=package, person_name=user, person_role="maintainer")
-            r.description = "Add user {0} as maintainer due to 'osc mpcdf_push'".format(user)
-            r.create(api_url)
-            result = osc.core.change_request_state(api_url, r.reqid, 'accepted', "Accepted on the command line via 'osc mpcdf_push'")
-            print("  Accepting request {0}:".format(r.reqid), result)
+            to_meta = mpcdf_common.package_meta(api_url, to_project, package)
+            person = ElementTree.Element("person")
+            person.set("userid", user)
+            person.set("role", "maintainer")
+            to_meta.insert(2, person)
+            osc.core.edit_meta("pkg", (to_project, package), data=ElementTree.tostring(to_meta))
         print()
 
     # Give the system some time, sadly there is no transactional guarantee