diff --git a/src/app/datasources/stores/model.store.spec.ts b/src/app/datasources/stores/model.store.spec.ts
index 797685b..a484003 100644
--- a/src/app/datasources/stores/model.store.spec.ts
+++ b/src/app/datasources/stores/model.store.spec.ts
@@ -57,7 +57,7 @@
     WebSocket = _WebSocket_;
 
     // ModelRest will call the backend
-    httpBackend.expectGET(`${AppConfig.apiEndpoint}/core/samples`)
+    httpBackend.whenGET(`${AppConfig.apiEndpoint}/core/samples`)
       .respond(queryData);
   }));
 
@@ -114,4 +114,39 @@
       httpBackend.flush();
     });
   });
+
+  describe('when multiple stores are requested', () => {
+
+    beforeEach(() => {
+      httpBackend.expectGET(`${AppConfig.apiEndpoint}/core/firsts`)
+        .respond([
+          {first: 'foo'}
+        ]);
+      httpBackend.expectGET(`${AppConfig.apiEndpoint}/core/seconds`)
+        .respond([
+          {second: 'foo'}
+        ]);
+    });
+    it('should create different Subject', (done) => {
+      let fevent = 0;
+      let sevent = 0;
+      service.query('first')
+        .subscribe(first => {
+          fevent++;
+          if (fevent >= 2) {
+            service.query('second')
+              .subscribe(second => {
+                sevent++;
+                if (sevent === 2) {
+                  console.log(first, second);
+                  expect(first).not.toEqual(second);
+                  done();
+                }
+              });
+          }
+        });
+      $scope.$apply();
+      httpBackend.flush();
+    });
+  });
 });
diff --git a/src/app/datasources/stores/model.store.ts b/src/app/datasources/stores/model.store.ts
index 0839cc7..903bd46 100644
--- a/src/app/datasources/stores/model.store.ts
+++ b/src/app/datasources/stores/model.store.ts
@@ -11,27 +11,33 @@
 
 export class ModelStore {
   static $inject = ['WebSocket', 'StoreHelpers', 'ModelRest'];
-  private _collection: BehaviorSubject<any[]> = new BehaviorSubject([]);
+  private _collections: any; // NOTE contains a map of {model: BehaviourSubject}
   constructor(
     private webSocket: IWSEventService,
     private storeHelpers: IStoreHelpersService,
     private ModelRest: IXosResourceService
   ) {
+    this._collections = {};
   }
-  // FIXME if called multiple time (for different collection),
-  // it return the same observable while it should return different ones
 
   query(model: string) {
-    this.loadInitialData(model);
+
+    // if there isn't already an observable for that item
+    if (!this._collections[model]) {
+      this._collections[model] = new BehaviorSubject([]); // NOTE maybe this can be created when we get response from the resource
+      this.loadInitialData(model);
+    }
+
     this.webSocket.list()
       .filter((e: IWSEvent) => e.model === model)
       .subscribe(
         (event: IWSEvent) => {
-          this.storeHelpers.updateCollection(event, this._collection);
+          this.storeHelpers.updateCollection(event, this._collections[model]);
         },
         err => console.error
       );
-    return this._collection.asObservable();
+
+    return this._collections[model].asObservable();
   }
 
   private loadInitialData(model: string) {
@@ -40,7 +46,7 @@
     this.ModelRest.getResource(endpoint).query().$promise
       .then(
         res => {
-          this._collection.next(res);
+          this._collections[model].next(res);
         },
         err => console.log(`Error retrieving ${model}`, err)
       );
diff --git a/src/app/views/dashboard/dashboard.ts b/src/app/views/dashboard/dashboard.ts
index 776acf6..dc4fc1d 100644
--- a/src/app/views/dashboard/dashboard.ts
+++ b/src/app/views/dashboard/dashboard.ts
@@ -17,24 +17,15 @@
       this.$state.go('login');
     }
     else {
-      // this.store.query('node')
-      //   .subscribe((event) => {
-      //     console.log(`node`, event);
-      //     this.nodes = event.length;
-      // });
+      this.store.query('node')
+        .subscribe((event) => this.nodes = event.length);
       this.store.query('slice')
-        .subscribe((event) => {
-          // console.log('slice', event);
-          this.slices = event.length;
-      });
-      // this.store.query('instance')
-      //   .subscribe((event) => {
-      //     console.log('isntance', event);
-      //     this.instances = event.length;
-      // });
+        .subscribe((event) => this.slices = event.length);
+      this.store.query('instance')
+        .subscribe((event) => this.instances = event.length);
       this.instances = 0;
-      this.nodes = 2;
-      this.slices = 3;
+      this.nodes = 0;
+      this.slices = 0;
     }
   }
 }
