diff --git a/accept_merge_request.py b/accept_merge_request.py
index b3006c3239e835655b17ef0c60ad42b44b94645d..878c8a075ddd7903a1a196a6ed73b046ca328aa8 100755
--- a/accept_merge_request.py
+++ b/accept_merge_request.py
@@ -18,7 +18,7 @@ critical_error = (
 )
 
 
-def accept_merge_request(gitlab, project, mr, rebase=False):
+def accept_merge_request(project, mr, rebase=False):
     """Attempt to merge a merge request, rebase if necessary"""
     merged = False
     pipeline_pending = False
@@ -72,7 +72,7 @@ def accept_merge_request(gitlab, project, mr, rebase=False):
                 print("Merge not possible, but branch can be automatically rebased")
                 if rebase:
                     print("Trying to rebase...")
-                    mr = common.rebase_merge_request(gitlab, project, mr)
+                    mr = common.rebase_merge_request(project, mr)
                     if mr.merge_error:
                         print("ERROR: rebase not possible\n'%s'" % mr.merge_error)
                         sys.exit(critical_error)
@@ -128,16 +128,15 @@ def main():
     gitlab = Gitlab(args.gitlab_url, private_token=args.token)
     project = common.get_project(gitlab, args.project)
 
-    with gitlab:
-        try:
-            merge_request = project.mergerequests.get(id=args.merge_request)
-        except GitlabGetError as e:
-            sys.exit("Could not get merge request: %s" % e)
+    try:
+        merge_request = project.mergerequests.get(id=args.merge_request)
+    except GitlabGetError as e:
+        sys.exit("Could not get merge request: %s" % e)
 
-        if accept_merge_request(gitlab, project, merge_request, rebase=args.rebase):
-            print("Successfully merged")
-        else:
-            sys.exit(1)
+    if accept_merge_request(project, merge_request, rebase=args.rebase):
+        print("Successfully merged")
+    else:
+        sys.exit(1)
 
 
 if __name__ == "__main__":
diff --git a/common.py b/common.py
index 8eb60dedb7f492d34411ba97db61c35f8997d852..ddc98da5d572565f2ceade949758049ff0f8407f 100755
--- a/common.py
+++ b/common.py
@@ -17,63 +17,55 @@ def integration_branch_name(project_name, branch_name):
 
 def get_project(gitlab, project_name):
     """Get a GitLab project by its name"""
-    with gitlab:
-        project = None
-        try:
-            for p in gitlab.projects.list(
-                search=project_name, retry_transient_errors=True
-            ):
-                if p.name == project_name:
-                    project = p
-            if not project:
-                sys.exit("ERROR: project '%s' not found" % project_name)
-        except requests.ConnectionError:
-            sys.exit("ERROR: could not connect to GitLab server")
-        except GitlabAuthenticationError:
-            sys.exit("ERROR: authentication failed")
+    project = None
+    try:
+        for p in gitlab.projects.list(search=project_name, retry_transient_errors=True):
+            if p.name == project_name:
+                project = p
+        if not project:
+            sys.exit("ERROR: project '%s' not found" % project_name)
+    except requests.ConnectionError:
+        sys.exit("ERROR: could not connect to GitLab server")
+    except GitlabAuthenticationError:
+        sys.exit("ERROR: authentication failed")
     return project
 
 
-def get_latest_commit(gitlab, project, branch_name):
+def get_latest_commit(project, branch_name):
     """Get latest commit on a given project branch"""
-    with gitlab:
-        try:
-            branch = project.branches.get(branch_name)
-        except GitlabGetError as e:
-            sys.exit(
-                "ERROR: could not get branch '%s' for project '%s': %s"
-                % (branch_name, project.name, e)
-            )
-        if not branch:
-            sys.exit(
-                "ERROR: branch '%s' not found in project %s"
-                % (branch_name, project.name)
-            )
+    try:
+        branch = project.branches.get(branch_name)
+    except GitlabGetError as e:
+        sys.exit(
+            "ERROR: could not get branch '%s' for project '%s': %s"
+            % (branch_name, project.name, e)
+        )
+    if not branch:
+        sys.exit(
+            "ERROR: branch '%s' not found in project %s" % (branch_name, project.name)
+        )
     return branch.commit
 
 
-def rebase_merge_request(gitlab, project, merge_request):
+def rebase_merge_request(project, merge_request):
     """Attempt to rebase a merge request and return the updated merge request object"""
     # Rebasing takes more than one API call, see:
     # https://docs.gitlab.com/ce/api/merge_requests.html#rebase-a-merge-request
-    with gitlab:
+    try:
+        merge_request.rebase()
+    except GitlabMRRebaseError as e:
+        merge_request.merge_error = "Could not rebase merge request: %s" % e
+        return merge_request
+    rebase_in_progress = True
+    while rebase_in_progress:
+        time.sleep(1)
         try:
-            merge_request.rebase()
-        except GitlabMRRebaseError as e:
-            merge_request.merge_error = "Could not rebase merge request: %s" % e
+            updated_merge_request = project.mergerequests.get(
+                id=merge_request.iid,
+                query_parameters={"include_rebase_in_progress": "True"},
+            )
+        except GitlabGetError as e:
+            merge_request.merge_error = "Could not get updated merge request: %s" % e
             return merge_request
-        rebase_in_progress = True
-        while rebase_in_progress:
-            time.sleep(1)
-            try:
-                updated_merge_request = project.mergerequests.get(
-                    id=merge_request.iid,
-                    query_parameters={"include_rebase_in_progress": "True"},
-                )
-            except GitlabGetError as e:
-                merge_request.merge_error = (
-                    "Could not get updated merge request: %s" % e
-                )
-                return merge_request
-            rebase_in_progress = updated_merge_request.rebase_in_progress
+        rebase_in_progress = updated_merge_request.rebase_in_progress
     return updated_merge_request
diff --git a/get_merge_requests.py b/get_merge_requests.py
index 3f2fdb3f8c8035df147b1b76c20558580bcee71a..71aa9d6e980add415a5defaf6826e7d9558846fa 100755
--- a/get_merge_requests.py
+++ b/get_merge_requests.py
@@ -7,30 +7,29 @@ from gitlab import Gitlab, GitlabGetError
 
 
 def get_merge_requests(
-    gitlab, project, state, source_branch=None, target_branch=None, commit=None
+    project, state, source_branch=None, target_branch=None, commit=None
 ):
     """Get merge request by source and target branch and optionally commit sha"""
     merge_requests = []
-    with gitlab:
-        try:
-            all_merge_requests = project.mergerequests.list(
-                source_branch=source_branch,
-                target_branch=target_branch,
-                state=state,
-                all=True,
-                retry_transient_errors=True,
-            )
-        except GitlabGetError as e:
-            sys.exit(
-                "ERROR: could not list merge requests for project '%s': %s"
-                % (project.name, e)
-            )
-        if commit:
-            for mr in all_merge_requests:
-                if mr.sha == commit:
-                    merge_requests.append(mr)
-        elif all_merge_requests:
-            merge_requests = all_merge_requests
+    try:
+        all_merge_requests = project.mergerequests.list(
+            source_branch=source_branch,
+            target_branch=target_branch,
+            state=state,
+            all=True,
+            retry_transient_errors=True,
+        )
+    except GitlabGetError as e:
+        sys.exit(
+            "ERROR: could not list merge requests for project '%s': %s"
+            % (project.name, e)
+        )
+    if commit:
+        for mr in all_merge_requests:
+            if mr.sha == commit:
+                merge_requests.append(mr)
+    elif all_merge_requests:
+        merge_requests = all_merge_requests
     return merge_requests
 
 
@@ -85,7 +84,6 @@ def main():
     project = common.get_project(gitlab, args.project)
 
     mrs = get_merge_requests(
-        gitlab,
         project,
         state=args.state,
         source_branch=args.source_branch,
diff --git a/integrate_into_manifest.py b/integrate_into_manifest.py
old mode 100644
new mode 100755
index 6f62a21f50c758c45192114bc5a09936ca5d2e26..43cc3eb969db08bdee967da370e520272e302c18
--- a/integrate_into_manifest.py
+++ b/integrate_into_manifest.py
@@ -12,7 +12,6 @@ from lxml import etree
 
 
 def integrate_into_manifest(
-    gitlab,
     manifest_project,
     integration_base,
     manifest_file,
@@ -20,6 +19,8 @@ def integrate_into_manifest(
     branch,
     commit=None,
 ):
+    gitlab = manifest_project.manager.gitlab
+
     with tempfile.TemporaryDirectory() as manifest_dir:
         manifest_filepath = Path(manifest_dir) / manifest_file
 
@@ -74,7 +75,7 @@ def integrate_into_manifest(
             new_revision = project_commit.id
             commit_message = project_commit.message
         else:
-            project_commit = common.get_latest_commit(gitlab, project, branch)
+            project_commit = common.get_latest_commit(project, branch)
             # project_commit is a simple dictionary here
             new_revision = project_commit["id"]
             commit_message = project_commit["message"]
@@ -184,16 +185,14 @@ def main():
     manifest_project = common.get_project(gitlab, args.manifest_project)
     project = common.get_project(gitlab, args.project)
 
-    with gitlab:
-        manifest_revision = integrate_into_manifest(
-            gitlab=gitlab,
-            manifest_project=manifest_project,
-            integration_base=args.integration_base,
-            manifest_file=args.manifest_file,
-            project=project,
-            branch=args.branch,
-            commit=args.commit,
-        )
+    manifest_revision = integrate_into_manifest(
+        manifest_project=manifest_project,
+        integration_base=args.integration_base,
+        manifest_file=args.manifest_file,
+        project=project,
+        branch=args.branch,
+        commit=args.commit,
+    )
 
     if args.revision_file:
         with open(args.revision_file, "w") as file:
diff --git a/merge_into_manifest.py b/merge_into_manifest.py
index 6073067cbae02fcfb3485b2005490aabe4da88ba..a6482dc59d2fe6804829637634d9a9a34a83c5c2 100755
--- a/merge_into_manifest.py
+++ b/merge_into_manifest.py
@@ -12,7 +12,7 @@ from get_merge_requests import get_merge_requests
 from integrate_into_manifest import integrate_into_manifest
 
 
-def merge_into_manifest(gitlab, manifest_project, master_branch, project, commit):
+def merge_into_manifest(manifest_project, master_branch, project, commit):
     """
     Create a merge request on the manifest for a given merged project commit and merge
     it immediately. Update the integration branch before, if it is not up to date with
@@ -21,7 +21,6 @@ def merge_into_manifest(gitlab, manifest_project, master_branch, project, commit
 
     # Get source merge request
     mrs = get_merge_requests(
-        gitlab,
         project,
         target_branch=master_branch,
         state="merged",
@@ -40,7 +39,6 @@ def merge_into_manifest(gitlab, manifest_project, master_branch, project, commit
 
     # Check if merge request already exists
     mrs = get_merge_requests(
-        gitlab,
         manifest_project,
         source_branch=integration_branch,
         target_branch=target_branch,
@@ -82,7 +80,7 @@ def merge_into_manifest(gitlab, manifest_project, master_branch, project, commit
     manifest_revision = mr.sha
     merged = False
     while not merged:
-        merged = accept_merge_request(gitlab, manifest_project, mr)
+        merged = accept_merge_request(manifest_project, mr)
         if not merged:
             # Note: if reintegration is necessary here, the source merge request was
             # merged without running the pipeline on the latest manifest, i.e. some
@@ -93,7 +91,6 @@ def merge_into_manifest(gitlab, manifest_project, master_branch, project, commit
             # deliberately put up with this, as it is quite unlikely to happen and
             # we want a completely automated process in every case.
             manifest_revision = integrate_into_manifest(
-                gitlab=gitlab,
                 manifest_project=manifest_project,
                 integration_base=target_branch,
                 manifest_file=common.manifest_file,
@@ -183,7 +180,6 @@ def main():
     manifest_project = common.get_project(gitlab, args.manifest_project)
 
     manifest_revision = merge_into_manifest(
-        gitlab=gitlab,
         manifest_project=manifest_project,
         master_branch=args.master_branch,
         project=project,
diff --git a/retrigger_mr_pipeline.py b/retrigger_mr_pipeline.py
index 635cd84fec7886ca7ad125a24c4a7ad2eef59f6f..ebfd67b5c07f38405ab78c3e6af861235d9d948b 100755
--- a/retrigger_mr_pipeline.py
+++ b/retrigger_mr_pipeline.py
@@ -6,25 +6,25 @@ import sys
 from gitlab import Gitlab, GitlabGetError, GitlabHttpError
 
 
-def retrigger_mr_pipeline(gitlab, project, mr):
-    with gitlab:
-        # Creating a merge request pipeline is not implemented in python-gitlab, so we
-        # have to construct the HTTP request manually.
-        # https://github.com/python-gitlab/python-gitlab/issues/1239
-        # https://docs.gitlab.com/ce/api/merge_requests.html#create-mr-pipeline
-        path = "%s/%s/pipelines" % (mr.manager.path, mr.iid)
-        try:
-            pipeline = gitlab.http_post(path)
-        except GitlabHttpError as e:
-            sys.exit(
-                "ERROR: could not create pipeline for merge request %s!%s: %s"
-                % (project.name, mr.iid, e)
-            )
+def retrigger_mr_pipeline(project, mr):
+    # Creating a merge request pipeline is not implemented in python-gitlab, so we
+    # have to construct the HTTP request manually.
+    # https://github.com/python-gitlab/python-gitlab/issues/1239
+    # https://docs.gitlab.com/ce/api/merge_requests.html#create-mr-pipeline
+    gitlab = mr.manager.gitlab
+    path = "%s/%s/pipelines" % (mr.manager.path, mr.iid)
+    try:
+        pipeline = gitlab.http_post(path)
+    except GitlabHttpError as e:
+        sys.exit(
+            "ERROR: could not create pipeline for merge request %s!%s: %s"
+            % (project.name, mr.iid, e)
+        )
 
-        print("Created new pipeline for %s :" % mr.web_url)
-        print(pipeline.get("web_url"))
+    print("Created new pipeline for %s :" % mr.web_url)
+    print(pipeline.get("web_url"))
 
-        return pipeline
+    return pipeline
 
 
 def main():
@@ -68,7 +68,7 @@ def main():
     if not mr:
         sys.exit("ERROR: could not find merge request %s!%s" % (project.name, args.iid))
 
-    retrigger_mr_pipeline(gitlab, project, mr)
+    retrigger_mr_pipeline(project, mr)
 
 
 if __name__ == "__main__":
diff --git a/retrigger_mr_pipelines.py b/retrigger_mr_pipelines.py
index 7944f4d576a8d5d9f9e39bb57a56968ef542370c..4e1ade2ba1623be87f213666952ebec69ab5082b 100755
--- a/retrigger_mr_pipelines.py
+++ b/retrigger_mr_pipelines.py
@@ -59,7 +59,6 @@ def main():
     project = common.get_project(gitlab, args.project)
 
     mrs = get_merge_requests(
-        gitlab,
         project,
         state=args.state,
         source_branch=args.source_branch,
@@ -68,7 +67,7 @@ def main():
     )
 
     for mr in mrs:
-        retrigger_mr_pipeline(gitlab, project, mr)
+        retrigger_mr_pipeline(project, mr)
 
 
 if __name__ == "__main__":