diff --git a/action/kafkaFeedWeb.js b/action/kafkaFeedWeb.js
index 1886107..ef18bed 100644
--- a/action/kafkaFeedWeb.js
+++ b/action/kafkaFeedWeb.js
@@ -119,10 +119,15 @@
                 })
                 .then(triggerDoc => {
                     if (!triggerDoc.status.active) {
-                        resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
+                        return resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
                     }
+
                     return common.performUpdateParameterValidation(params, triggerDoc)
-                    .then(updatedParams => db.updateTrigger(triggerDoc, updatedParams))
+                    .then(updatedParams => {
+                        return db.disableTrigger(triggerDoc)
+                        .then(() => db.getTrigger(params.triggerName))
+                        .then(doc => db.updateTrigger(doc, updatedParams));
+                    });
                 })
                 .then(() => {
                     console.log('successfully updated the trigger');
diff --git a/action/lib/Database.js b/action/lib/Database.js
index 831ae1a..4cc5d3c 100644
--- a/action/lib/Database.js
+++ b/action/lib/Database.js
@@ -58,7 +58,16 @@
         return new Promise((resolve, reject) => {
             this.db.insert(params, (err, result) => {
                 if(err) {
-                    reject(err);
+                    if(err.statusCode && err.statusCode === 409) {
+                        this.getTrigger(params.triggerName)
+                        .then(doc => this.disableTrigger(doc))
+                        .then(() => this.getTrigger(params.triggerName))
+                        .then(doc => this.updateTrigger(params, {_rev: doc._rev}))
+                        .then(result => resolve(result))
+                        .catch(err => reject(err));
+                    } else {
+                        reject(err);
+                    }
                 } else {
                     resolve(result);
                 }
@@ -122,7 +131,7 @@
         });
     };
 
-    this.updateTrigger = function(existing, params) {
+    this.disableTrigger = function(existing) {
         return new Promise((resolve, reject) => {
             var message = 'Automatically disabled trigger while updating';
             var status = {
@@ -139,27 +148,27 @@
                 }
             });
         })
-        .then(() => this.getTrigger(existing.triggerName))
-        .then(doc => {
-            for (var key in params) {
-                if (params[key] !== undefined) {
-                    doc[key] = params[key];
-                }
-            }
-            var status = {
-                'active': true,
-                'dateChanged': Date.now()
-            };
-            doc.status = status;
+    };
 
-            return new Promise((resolve, reject) => {
-                this.db.insert(doc, (err, result) => {
-                    if(err) {
-                        reject(err);
-                    } else {
-                        resolve(result);
-                    }
-                });
+    this.updateTrigger = function(existing, params) {
+        for (var key in params) {
+            if (params[key] !== undefined) {
+                existing[key] = params[key];
+            }
+        }
+        var status = {
+            'active': true,
+            'dateChanged': Date.now()
+        };
+        existing.status = status;
+
+        return new Promise((resolve, reject) => {
+            this.db.insert(existing, (err, result) => {
+                if(err) {
+                    reject(err);
+                } else {
+                    resolve(result);
+                }
             });
         });
     };
diff --git a/action/messageHubFeedWeb.js b/action/messageHubFeedWeb.js
index e1fb9d8..50e3819 100644
--- a/action/messageHubFeedWeb.js
+++ b/action/messageHubFeedWeb.js
@@ -126,10 +126,15 @@
                 })
                 .then(triggerDoc => {
                     if (!triggerDoc.status.active) {
-                        resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
+                        return resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
                     }
+
                     return common.performUpdateParameterValidation(params, triggerDoc)
-                    .then(updatedParams => db.updateTrigger(triggerDoc, updatedParams))
+                    .then(updatedParams => {
+                        return db.disableTrigger(triggerDoc)
+                        .then(() => db.getTrigger(params.triggerName))
+                        .then(doc => db.updateTrigger(doc, updatedParams));
+                    });
                 })
                 .then(() => {
                     console.log('successfully updated the trigger');
