diff --git a/jjb/pipeline/all-xos-api-test-helm.groovy b/jjb/pipeline/all-xos-api-test-helm.groovy
index 3ef3249..a137b46 100644
--- a/jjb/pipeline/all-xos-api-test-helm.groovy
+++ b/jjb/pipeline/all-xos-api-test-helm.groovy
@@ -208,8 +208,6 @@
 
            elif [[ "$GERRIT_PROJECT" =~ ^(xos|xos-tosca|cord-tester|helm-charts)\$ ]]; then
              echo "No additional charts to install for testing $GERRIT_PROJECT"
-	     # ADDING TEMP SLEEP UNIL SEBA-102 resolves
-	     sleep 300
 
            else
              echo "Couldn't find a chart to test project: $GERRIT_PROJECT!"
@@ -233,6 +231,30 @@
            """
       }
     }
+    stage('wait for core') {
+      steps {
+        timeout(time:5) {
+          waitUntil {
+            script {
+              try {
+                sh """
+                CORE_POD=\$(kubectl get pods | grep xos-core | awk '{print \$1}')
+                CHAM_POD=\$(kubectl get pods | grep chameleon | awk '{print \$1}')
+                CHAM_CONTAINER=\$(docker ps | grep k8s_xos-chameleon | awk '{print \$1}')
+                XOS_CHAMELEON=\$(docker exec \$CHAM_CONTAINER ip a | grep -oE "([0-9]{1,3}\\.){3}[0-9]{1,3}\\b" | grep 172)
+                kubectl logs \$CORE_POD | grep "XOS core entering wait loop"
+                kubectl logs \$CHAM_POD | grep reconnected | wc -l | grep 2
+                curl -I -u admin@opencord.org:letmein http://\$XOS_CHAMELEON:9101/xosapi/v1/core/users | grep "200 OK"
+                """
+                return true
+              } catch (exception) {
+              return false
+              }
+            }
+          }
+        }
+      }
+    }
 
     stage('setup') {
       steps {
diff --git a/jjb/pipeline/chart-api-test-helm.groovy b/jjb/pipeline/chart-api-test-helm.groovy
index a9463f4..2b1fa42 100644
--- a/jjb/pipeline/chart-api-test-helm.groovy
+++ b/jjb/pipeline/chart-api-test-helm.groovy
@@ -162,6 +162,30 @@
            """
       }
     }
+    stage('wait for core') {
+      steps {
+        timeout(time:5) {
+          waitUntil {
+            script {
+              try {
+                sh """
+                CORE_POD=\$(kubectl get pods | grep xos-core | awk '{print \$1}')
+                CHAM_POD=\$(kubectl get pods | grep chameleon | awk '{print \$1}')
+                CHAM_CONTAINER=\$(docker ps | grep k8s_xos-chameleon | awk '{print \$1}')
+                XOS_CHAMELEON=\$(docker exec \$CHAM_CONTAINER ip a | grep -oE "([0-9]{1,3}\\.){3}[0-9]{1,3}\\b" | grep 172)
+                kubectl logs \$CORE_POD | grep "XOS core entering wait loop"
+                kubectl logs \$CHAM_POD | grep reconnected | wc -l | grep 2
+                curl -I -u admin@opencord.org:letmein http://\$XOS_CHAMELEON:9101/xosapi/v1/core/users | grep "200 OK"
+                """
+                return true
+              } catch (exception) {
+              return false
+              }
+            }
+          }
+        }
+      }
+    }
 
     stage('setup') {
       steps {
diff --git a/jjb/pipeline/xos-synchronizer-update.groovy b/jjb/pipeline/xos-synchronizer-update.groovy
index 5a08c96..9f38652 100644
--- a/jjb/pipeline/xos-synchronizer-update.groovy
+++ b/jjb/pipeline/xos-synchronizer-update.groovy
@@ -263,7 +263,7 @@
 
            # wait for services to load
            ./scripts/wait_for_jobs.sh
- 
+
            echo "# Checking helm deployments"
            kubectl get pods
            helm list
@@ -279,6 +279,31 @@
       }
     }
 
+    stage('wait for core') {
+      steps {
+        timeout(time:5) {
+          waitUntil {
+            script {
+              try {
+                sh """
+                CORE_POD=\$(kubectl get pods | grep xos-core | awk '{print \$1}')
+                CHAM_POD=\$(kubectl get pods | grep chameleon | awk '{print \$1}')
+                CHAM_CONTAINER=\$(docker ps | grep k8s_xos-chameleon | awk '{print \$1}')
+                XOS_CHAMELEON=\$(docker exec \$CHAM_CONTAINER ip a | grep -oE "([0-9]{1,3}\\.){3}[0-9]{1,3}\\b" | grep 172)
+                kubectl logs \$CORE_POD | grep "XOS core entering wait loop"
+                kubectl logs \$CHAM_POD | grep reconnected | wc -l | grep 2
+                curl -I -u admin@opencord.org:letmein http://\$XOS_CHAMELEON:9101/xosapi/v1/core/users | grep "200 OK"
+                """
+                return true
+              } catch (exception) {
+              return false
+              }
+            }
+          }
+        }
+      }
+    }
+
     stage('setup') {
       steps {
         sh """
