diff --git a/actions/changesWebAction.js b/actions/changesWebAction.js
index 5ee9e2e..1899dd3 100644
--- a/actions/changesWebAction.js
+++ b/actions/changesWebAction.js
@@ -75,6 +75,9 @@
         return new Promise(function (resolve, reject) {
             verifyTriggerAuth(triggerURL, params.authKey, false)
             .then(() => {
+                return verifyUserDB(newTrigger);
+            })
+            .then(() => {
                 return getWorkerID(db, workers);
             })
             .then((worker) => {
diff --git a/tests/src/test/scala/system/packages/CloudantFeedTests.scala b/tests/src/test/scala/system/packages/CloudantFeedTests.scala
index 19e1b92..3ed99cd 100644
--- a/tests/src/test/scala/system/packages/CloudantFeedTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantFeedTests.scala
@@ -235,7 +235,7 @@
                 response1.get("ok").getAsString() should be("true")
 
                 println("Checking for activations")
-                val activations = wsk.activation.pollFor(N = 2, Some(triggerName)).length
+                val activations = wsk.activation.pollFor(N = 1, Some(triggerName), retries = 30).length
                 println(s"Found activation size (should be exactly 1): $activations")
                 activations should be(1)
 
@@ -244,7 +244,7 @@
                 response2.get("ok").getAsString() should be("true")
 
                 println("No activations should be created for test_doc_2 since trigger is disabled")
-                val newactivations = wsk.activation.pollFor(N = 2, Some(triggerName), retries = 5).length
+                val newactivations = wsk.activation.pollFor(N = 2, Some(triggerName)).length
                 println(s"Activation size should still be one: $newactivations")
                 newactivations should be(1)
 
@@ -296,7 +296,7 @@
                 response1.get("ok").getAsString() should be("true")
 
                 println("Checking for activations")
-                val activations = wsk.activation.pollFor(N = 1, Some(triggerName)).length
+                val activations = wsk.activation.pollFor(N = 1, Some(triggerName), retries = 30).length
                 println(s"Found activation size (should be exactly 1): $activations")
                 activations should be(1)
 
@@ -314,7 +314,7 @@
                 response3.get("ok").getAsString() should be("true")
 
                 println("Checking for new activations (should now have 2)")
-                val newActivations = wsk.activation.pollFor(N = 3, Some(triggerName)).length
+                val newActivations = wsk.activation.pollFor(N = 3, Some(triggerName), retries = 30).length
                 println(s"Found activation size (should be 2): $newActivations")
                 newActivations should be(2)
 
diff --git a/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala b/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala
index 725f2fb..7acfddb 100644
--- a/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala
@@ -19,6 +19,7 @@
 import com.jayway.restassured.RestAssured
 import com.jayway.restassured.config.SSLConfig
 import com.jayway.restassured.http.ContentType
+import common.TestUtils.DONTCARE_EXIT
 import common._
 import org.junit.runner.RunWith
 import org.scalatest.junit.JUnitRunner
@@ -51,43 +52,43 @@
 
     behavior of "Cloudant multi workers feed tests"
 
-    it should "create triggers assigned to worker0 and worker1" in withAssetCleaner(WskProps()) {
+    it should "create triggers assigned to worker10 and worker11" in withAssetCleaner(WskProps()) {
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
 
-            val worker0Trigger = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val worker0Params = JsObject(
-                "triggerName" -> JsString(worker0Trigger),
+            val worker10Trigger = s"worker10CloudantTrigger-${System.currentTimeMillis}"
+            val worker10Params = JsObject(
+                "triggerName" -> JsString(worker10Trigger),
                 "authKey" -> JsString(s"$user:$password"),
                 "username" -> myCloudantCreds.user.toJson,
                 "password" -> myCloudantCreds.password.toJson,
                 "host" -> myCloudantCreds.host().toJson,
                 "dbname" -> myCloudantCreds.dbname.toJson,
-                "workers" -> JsArray(JsString("worker0")))
+                "workers" -> JsArray(JsString("worker10")))
 
-            val worker1Trigger = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val worker1Params = JsObject(
-                "triggerName" -> JsString(worker1Trigger),
+            val worker11Trigger = s"worker11CloudantTrigger-${System.currentTimeMillis}"
+            val worker11Params = JsObject(
+                "triggerName" -> JsString(worker11Trigger),
                 "authKey" -> JsString(s"$user:$password"),
                 "username" -> myCloudantCreds.user.toJson,
                 "password" -> myCloudantCreds.password.toJson,
                 "host" -> myCloudantCreds.host().toJson,
                 "dbname" -> myCloudantCreds.dbname.toJson,
-                "workers" -> JsArray(JsString("worker0"), JsString("worker1")))
+                "workers" -> JsArray(JsString("worker10"), JsString("worker11")))
 
             try {
                 CloudantUtil.setUp(myCloudantCreds)
 
-                wsk.trigger.create(worker0Trigger)
+                wsk.trigger.create(worker10Trigger)
 
-                //create trigger feed and assign to worker0
-                makePutCallWithExpectedResult(worker0Params, 200)
+                //create trigger feed and assign to worker10
+                makePutCallWithExpectedResult(worker10Params, 200)
 
-                wsk.trigger.create(worker1Trigger)
+                wsk.trigger.create(worker11Trigger)
 
-                //create trigger feed and assign to worker0 or worker1
+                //create trigger feed and assign to worker10 or worker11
                 //the one with the least assigned triggers will be chosen
-                makePutCallWithExpectedResult(worker1Params, 200)
+                makePutCallWithExpectedResult(worker11Params, 200)
 
                 val dbName = s"${dbPrefix}cloudanttrigger"
                 val documents = getAllDocs(dbName)
@@ -95,16 +96,16 @@
                 val worker1Doc = documents
                         .fields("rows")
                         .convertTo[List[JsObject]]
-                        .filter(_.fields("id").convertTo[String].equals(s":_:$worker1Trigger"))
+                        .filter(_.fields("id").convertTo[String].equals(s":_:$worker11Trigger"))
 
-                JsHelpers.getFieldPath(worker1Doc(0), "doc", "worker") shouldBe Some(JsString("worker1"))
+                JsHelpers.getFieldPath(worker1Doc(0), "doc", "worker") shouldBe Some(JsString("worker11"))
             } finally {
-                //delete triggers
-                wsk.trigger.delete(worker0Trigger)
-                wsk.trigger.delete(worker1Trigger)
+                //delete trigger feeds and triggers
+                makeDeleteCallWithExpectedResult(worker10Params, DONTCARE_EXIT)
+                makeDeleteCallWithExpectedResult(worker11Params, DONTCARE_EXIT)
 
-                makeDeleteCallWithExpectedResult(worker0Params, 200)
-                makeDeleteCallWithExpectedResult(worker1Params, 200)
+                wsk.trigger.delete(worker10Trigger, expectedExitCode = DONTCARE_EXIT)
+                wsk.trigger.delete(worker11Trigger, expectedExitCode = DONTCARE_EXIT)
 
                 CloudantUtil.unsetUp(myCloudantCreds)
             }
@@ -125,7 +126,7 @@
                 .config(RestAssured.config().sslConfig(new SSLConfig().relaxedHTTPSValidation()))
                 .body(params.toString())
                 .delete(webActionURL)
-        assert(response.statusCode() == expectedCode)
+        assert(expectedCode == DONTCARE_EXIT || response.statusCode() == expectedCode)
     }
 
 
