diff --git a/release/release_bob.py b/release/release_bob.py
index 3c8fd41ac73f7ddd4bd0b43cdc06d4866f2b7645..0e39898aa718550ff7e307722809a71f95536b3d 100755
--- a/release/release_bob.py
+++ b/release/release_bob.py
@@ -233,77 +233,66 @@ def commit_files(gitpkg, files_dict, message='Updated files', dry_run=False):
         gitpkg.commits.create(data)
 
 
-def get_last_nonskip_pipeline(gitpkg, before_last=False):
+def get_last_pipeline(gitpkg):
     """
-    Returns the last running pipeline or the one before the last.
+    Returns the last pipeline of the project
     Args:
         gitpkg: gitlab package object
-        before_last: If True, the pipeline before the last is returned
 
     Returns: The gtilab object of the pipeline
 
     """
-    # sleep for 10 seconds to ensure that if a pipeline was just submitted,
+    # wait for 10 seconds to ensure that if a pipeline was just submitted,
     # we can retrieve it
     time.sleep(10)
-    if before_last:
-        # take the pipeline before the last
-        return gitpkg.pipelines.list(per_page=2, page=1)[1]
-    else:
-        # otherwise take the last pipeline
-        return gitpkg.pipelines.list(per_page=1, page=1)[0]
+    # get the last pipeline
+    return gitpkg.pipelines.list(per_page=1, page=1)[0]
 
 
 def just_build_package(gitpkg, dry_run=False):
     """
-    Restrt the last runnable pipeline of the package
+    Creates the pipeline with the latest tag and starts it
     Args:
         gitpkg: gitlab package object
-        dry_run: If True, the pipeline will not be actually restarted on GitLab
+        dry_run: If True, the pipeline will not be created on GitLab
 
     Returns:
 
     """
-    # we assume the last pipeline is with commit [skip ci]
-    # so, we take the pipeline that can be re-built, which the previous to the last one
-    last_pipeline = get_last_nonskip_pipeline(gitpkg, before_last=True)
 
-    # check that the chosen pipeline is the one we are looking for
+    # get the latest tag
     latest_tag_name = 'v' + get_latest_tag_name(gitpkg)
-    # the pipeline should be the one built for the latest tag, so check if it is the correct choice
-    if last_pipeline.ref != latest_tag_name:
-        raise ValueError('While deploying {0}, found pipeline {1} but it does not match '
-                         'the latest tag {2}'.format(gitpkg.name, last_pipeline.id, latest_tag_name))
-    # the pipeline should have succeeded, otherwise we cannot release
-    if last_pipeline.status != 'success':
-        raise ValueError('While deploying {0}, found pipeline {1} but its status is "{2}" instead '
-                         'of the expected "sucess"'.format(gitpkg.name, last_pipeline.id, last_pipeline.status))
-
-    print("Retrying pipeline {0}".format(last_pipeline.id))
+    # create the pipeline with this tag and start it
+    print("Creating and starting pipeline for tag {0}".format(latest_tag_name))
     if not dry_run:
-        last_pipeline.retry()
+        new_pipeline = gitpkg.pipelines.create({'ref': latest_tag_name})
+        return new_pipeline.id
 
+    return None
 
-def wait_for_pipeline_to_finish(gitpkg, dry_run=False):
+
+def wait_for_pipeline_to_finish(gitpkg, pipeline_id, dry_run=False):
     """
     Using sleep function, wait for the latest pipeline to finish building.
     This function pauses the script until pipeline completes either successfully or with error.
     Args:
         gitpkg: gitlab package object
+        pipeline_id: id of the pipeline for which we are waiting to finish
         dry_run: If True, print log message and exit. There wil be no waiting.
 
     """
     sleep_step = 30
     max_sleep = 60 * 60  # one hour
-    pipeline = get_last_nonskip_pipeline(gitpkg, before_last=True)
-
-    pipeline_id = pipeline.id
+    # pipeline = get_last_pipeline(gitpkg, before_last=before_last)
 
     print('Waiting for the pipeline {0} of package {1} to finish. Do not interrupt.'.format(pipeline_id, gitpkg.name))
 
     if dry_run:
         return
 
+    # retrieve the pipeline we are waiting for
+    pipeline = gitpkg.pipelines.get(pipeline_id)
+
     # probe and wait for the pipeline to finish
     slept_so_far = 0
     while pipeline.status == 'running' or pipeline.status == 'pending':
@@ -330,7 +319,7 @@ def cancel_last_pipeline(gitpkg):
         gitpkg: gitlab package object
 
     """
-    pipeline = get_last_nonskip_pipeline(gitpkg)
+    pipeline = get_last_pipeline(gitpkg)
     print('Cancelling the last pipeline {0} of project {1}'.format(pipeline.id, gitpkg.name))
     pipeline.cancel()
 
@@ -349,7 +338,7 @@ def release_package(gitpkg, tag_name, tag_comments_list, dry_run=False):
     # if there is nothing to release, just rebuild the package
     if tag_name == 'none':
         print("Since the tag is 'none', we just re-build the last pipeline")
-        return just_build_package(gitpkg)
+        return just_build_package(gitpkg, dry_run)
 
     # 1. Replace branch tag in Readme to new tag, change version file to new version tag. Add and commit to gitlab
     version_number = tag_name[1:]  # remove 'v' in front
@@ -372,6 +361,9 @@ def release_package(gitpkg, tag_name, tag_comments_list, dry_run=False):
         # update tag with comments
         tag.set_release_description('\n'.join(tag_comments_list))
 
+    # get the pipeline that is actually running with no skips
+    running_pipeline = get_last_pipeline(gitpkg)
+
     # 3. Replace branch tag in Readme to master, change version file to beta version tag. Git add, commit, and push.
     readme_content = _update_readme(readme_content)
     major, minor, patch = version_number.split('.')
@@ -379,6 +371,7 @@ def release_package(gitpkg, tag_name, tag_comments_list, dry_run=False):
     # commit and push changes
     commit_files(gitpkg, {'README.rst': readme_content, 'version.txt': version_number},
                  'Increased latest version to %s [skip ci]' % version_number, dry_run)
+    return running_pipeline.id
 
 
 def parse_and_process_package_changelog(gl, bob_group, pkg_name, package_changelog, dry_run=False):
@@ -461,9 +454,9 @@ def main(private_token, group_name='bob', changelog_file='changelog.rst', dry_ru
                                                                         changelog[pkgs[i] + 1: pkgs[i + 1]], dry_run)
         # release the package with the found tag and its comments
         if gitpkg:
-            release_package(gitpkg, tag, tag_comments, dry_run)
+            pipeline_id = release_package(gitpkg, tag, tag_comments, dry_run)
             # now, wait for the pipeline to finish, before we can release the next package
-            wait_for_pipeline_to_finish(gitpkg, dry_run)
+            wait_for_pipeline_to_finish(gitpkg, pipeline_id, dry_run)
 
         # if package name is provided and resume is not set, process only this package
         if package == cur_package_name and not resume: