diff --git a/src/app/datasources/helpers/store.helpers.ts b/src/app/datasources/helpers/store.helpers.ts
index 0df37c7..514b870 100644
--- a/src/app/datasources/helpers/store.helpers.ts
+++ b/src/app/datasources/helpers/store.helpers.ts
@@ -24,28 +24,34 @@
 
 export interface IStoreHelpersService {
   updateCollection(event: IWSEvent, subject: BehaviorSubject<any>): BehaviorSubject<any>;
+  removeItemFromCollection(event: IWSEvent, subject: BehaviorSubject<any>): BehaviorSubject<any>;
 }
 
 export class StoreHelpers implements IStoreHelpersService {
   static $inject = [
+    '$log',
     'ModelRest',
     'XosModeldefsCache'
   ];
 
   constructor (
+    private $log: ng.ILogService,
     private modelRest: IXosResourceService,
     private XosModeldefsCache: IXosModeldefsCache
   ) {
   }
 
   public updateCollection(event: IWSEvent, subject: BehaviorSubject<any>): BehaviorSubject<any> {
+    if (event.deleted) {
+      this.$log.error('[XosStoreHelpers] updateCollection method has been called for a delete event, in this cale please use "removeItemFromCollection"', event);
+      return;
+    }
     const collection: any[] = subject.value;
     const index: number = _.findIndex(collection, (i) => {
       // NOTE evaluate to use event.msg.pk
       return i.id === event.msg.object.id;
     });
     const exist: boolean = index > -1;
-    const isDeleted: boolean = _.includes(event.msg.changed_fields, 'deleted');
 
     // generate a resource for the model
     const modelDef = this.XosModeldefsCache.get(event.model); // get the model definition
@@ -53,16 +59,12 @@
     const resource = this.modelRest.getResource(endpoint);
     const model = new resource(event.msg.object);
 
-    // remove
-    if (exist && isDeleted) {
-       _.remove(collection, {id: event.msg.object.id});
-     }
     // Replace item at index using native splice
-    else if (exist && !isDeleted) {
+    if (exist) {
        collection.splice(index, 1, model);
      }
-    // if the element is not deleted add it
-    else if (!exist && !isDeleted) {
+    // if the element does not exist add it
+    else {
       collection.push(model);
      }
 
@@ -70,4 +72,15 @@
 
     return subject;
     }
+
+  public removeItemFromCollection(event: IWSEvent, subject: BehaviorSubject<any>): BehaviorSubject<any> {
+    if (!event.deleted) {
+      this.$log.error('[XosStoreHelpers] removeItemFromCollection method has been called for an update event, in this cale please use "updateCollection"', event);
+      return;
+    }
+    const collection: any[] = subject.value;
+    _.remove(collection, {id: event.msg.object.id});
+    subject.next(collection);
+    return subject;
+  }
 }
