diff --git a/jenkins/ci-pipelines/ci_stage_1.groovy b/jenkins/ci-pipelines/ci_stage_1.groovy
index 676e51e..0600972 100644
--- a/jenkins/ci-pipelines/ci_stage_1.groovy
+++ b/jenkins/ci-pipelines/ci_stage_1.groovy
@@ -14,7 +14,11 @@
  *   License for the specific language governing permissions and limitations
  *   under the License.
  */
-
+/* Change log:
+ * 1. Bug 699 : Jayant Madavi, Mrityunjay Yadav : JM00553988@techmahindra.com : 23-july-2019 : Improvement to the code, now using post syntax
+ * 2. Jayant Madavi : 26-july-2019 : optimization to the previous check-in added currentBuild.result = 'SUCCESS'. TODO: code would be better *    if we use pipeline declarative 
+ */
+ 
 stage_3_merge_result = ''
 def Get_MDG(project) {
     // split the project.
@@ -88,23 +92,38 @@
         downstream_job_name = "${mdg}-${stage_name}/${GERRIT_BRANCH}"
 
         println("TEST_INSTALL = ${params.TEST_INSTALL}, downstream job: ${downstream_job_name}")
+		currentBuild.result = 'SUCCESS'
+        try {
+           stage_3_merge_result = build job: "${downstream_job_name}", parameters: downstream_params, propagate: true
+            if (stage_3_merge_result.getResult() != 'SUCCESS') {
+                project = stage_3_merge_result.getProjectName()
+                build = stage_3_merge_result.getNumber()
+                // Jayant if the build fails the below error will cause the pipeline to terminate. 
+			    // error("${project} build ${build} failed")
+				currentBuild.result = stage_3_merge_result.getResult()
+            }
+		}
+		catch(caughtError) {
+		 echo 'Exception in stage_1'
+		 currentBuild.result = 'FAILURE'
+		}
+		finally {
+		    try {
+			 if((currentBuild.result != 'SUCCESS') && (env.JOB_NAME == 'daily-stage_4')){
+               emailext (
+                   subject: "[OSM-Jenkins] Job: ${env.JOB_NAME} Build: ${env.BUILD_NUMBER} Result: ${currentBuild.result}",
+                   body: """ Check console output at "${env.BUILD_URL}"  """,
+                   to: 'OSM_MDL@list.etsi.org',
+                   recipientProviders: [culprits()]
+                )
+            }
+		  }
+		  catch(caughtError) {
+		    echo "Failure in executing email"
+		  }
 
-        stage_3_merge_result = build job: "${downstream_job_name}", parameters: downstream_params, propagate: true
-        if (stage_3_merge_result.getResult() != 'SUCCESS') {
-            project = stage_3_merge_result.getProjectName()
-            build = stage_3_merge_result.getNumber()
-            // Jayant if the build fails the below error will cause the pipeline to terminate. 
-			// error("${project} build ${build} failed")
-        }
-    }
-	stage('Send Email') {
-        if((stage_3_merge_result.getResult() != 'SUCCESS') && (${env.JOB_NAME} == 'daily-stage_4-dot-releasesix')){
-            emailext (
-                subject: "[OSM-Jenkins] Job: ${env.JOB_NAME} Build: ${env.BUILD_NUMBER} Result: ${stage_3_merge_result.getResult()}",
-                body: """ Check console output at "${env.BUILD_URL}"  """,
-                to: 'OSM_MDL@list.etsi.org',
-                recipientProviders: [culprits()]
-            )
-        }
-    }
-}
+		}
+    } 
+
+	
+ }
diff --git a/jenkins/ci-pipelines/ci_stage_3.groovy b/jenkins/ci-pipelines/ci_stage_3.groovy
index 935c670..2b29f30 100644
--- a/jenkins/ci-pipelines/ci_stage_3.groovy
+++ b/jenkins/ci-pipelines/ci_stage_3.groovy
@@ -14,7 +14,12 @@
  *   License for the specific language governing permissions and limitations
  *   under the License.
  */
-
+ 
+/* Change log:
+ * 1. Bug 745 : Jayant Madavi, Mrityunjay Yadav : JM00553988@techmahindra.com : 23-july-2019 : Improvement to the code, typically we have 2 *    or more branches whose build gets triggered, ex master & release branch, the previous code was removing any/all docker. 
+ *	  Now removing previous docker of the same branch, so that the other branch failed docker should not be removed. It also 
+ *    acts as clean-up for previous docker remove failure.
+ */
 properties([
     parameters([
         string(defaultValue: env.GERRIT_BRANCH, description: '', name: 'GERRIT_BRANCH'),
@@ -31,7 +36,7 @@
         string(defaultValue: 'dpkg1', description: '', name: 'GPG_KEY_NAME'),
         string(defaultValue: 'artifactory-osm', description: '', name: 'ARTIFACTORY_SERVER'),
         string(defaultValue: 'osm-stage_4', description: '', name: 'DOWNSTREAM_STAGE_NAME'),
-        string(defaultValue: '6.0.1-rc', description: '', name: 'DOCKER_TAG'),
+        string(defaultValue: '6.0.2rc1', description: '', name: 'DOCKER_TAG'),
         booleanParam(defaultValue: true, description: '', name: 'SAVE_CONTAINER_ON_FAIL'),
         booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_PASS'),
         booleanParam(defaultValue: true, description: '', name: 'SAVE_ARTIFACTS_ON_SMOKE_SUCCESS'),
@@ -230,11 +235,11 @@
                         repo_base_url = "-u ${params.REPOSITORY_BASE}"
                     }
 					if ( params.DO_STAGE_4 ) {
-					try {
-                        sh "docker stack list | grep v60 | awk '{ print \$1 }'| xargs docker stack rm "
+					    try {
+                        sh "docker stack list |grep \"${container_name_prefix}\"|  awk '{ print \$1 }'| xargs docker stack rm"
 						}
 						catch (caughtError) {
-						 println("FAILURE:: Docker remove gave exception, pls check & remove old dockers manually, if required !!!")
+						  println("Caught error: docker stack rm failed!")
 						}
 					}
                     sh """
@@ -263,7 +268,10 @@
 
                     if ( ! currentBuild.result.equals('UNSTABLE') ) {
                         stage_archive = keep_artifacts
-                    }
+                    } else {
+					   error = new Exception("Smoke test failed")
+					   currentBuild.result = 'FAILURE'
+					}
                 }
             }
 
@@ -275,7 +283,10 @@
 
                     if ( ! currentBuild.result.equals('UNSTABLE') ) {
                         stage_archive = keep_artifacts
-                    }
+                    } else {
+					   error = new Exception("Systest test failed")
+					   currentBuild.result = 'FAILURE'
+					}
                 }
             }
 
