diff --git a/src/Global_Var.py b/src/Global_Var.py
index 288f9341aa0b3f82c059ddc562e37084527d8c38..a24a3b81a285024cfeefebe1b5444ee9985ea60d 100755
--- a/src/Global_Var.py
+++ b/src/Global_Var.py
@@ -30,7 +30,6 @@ class Global_Var():
     InputPerEpoch = 100
     stepMax = 0
     Max = 0
-    nbrClasses = 0
 
     # General network information ------------------------------------
     LayersNeuronsInfo = []
@@ -44,6 +43,7 @@ class Global_Var():
     Accuracy = 0
     finalLabels = None
     labelsExistance = False
+    ClassNbr = 0
     oldIdSpike = None
 
     def __init__(self):
@@ -62,6 +62,7 @@ class Global_Var():
         self.Accuracy = 0
         self.finalLabels = None
         self.labelsExistance = False
+        self.ClassNbr = 0
         self.oldIdSpike = None
 
     # MongoDB connection ---------------------------------------------
diff --git a/src/Modules/General/callbacks.py b/src/Modules/General/callbacks.py
index 5f486d2231b00553b59832ecba345c67c6288f49..7c1e5abd849c49be8034e1c0304afc8d0f562b89 100755
--- a/src/Modules/General/callbacks.py
+++ b/src/Modules/General/callbacks.py
@@ -583,7 +583,7 @@ class callbacks(callbacksOp):
                         indices = {}
                         labelData = getNetworkInput(int(sliderValue)*float(updateInterval), g.updateInterval)
                         if callback_context.triggered[0]['prop_id'].split('.')[0] in ["v-step","vis-update"]:
-                            super.SpikesActivityPerInput = {i["layer"]:[[0 for _ in range(g.nbrClasses+1)] for _ in range(g.Layer_Neuron[i["layer"]])] for i in g.LayersNeuronsInfo}
+                            super.SpikesActivityPerInput = {i["layer"]:[[0 for _ in range(g.ClassNbr)] for _ in range(g.Layer_Neuron[i["layer"]])] for i in g.LayersNeuronsInfo}
                             for element in elements:
                                     if element["data"]['spiked'] != -1:
                                         element["data"]["spiked"] = 0
@@ -707,13 +707,13 @@ class callbacks(callbacksOp):
                 
             def make_SpikeActivityPerInput(layer,dataLabel,Layer2DViewFilter):
                 fig = make_subplots(rows=5, cols=1, shared_xaxes=True, vertical_spacing=0.08, specs=[[{'rowspan': 4}],[None],[None],[None],[{'rowspan': 1}]])
-                fig.add_trace(go.Heatmap(z=super.SpikesActivityPerInput[layer] if layer in Layer2DViewFilter else [], colorscale= 'Reds', zmin=0, hovertemplate=('Class: %{x} <br>Neuron: %{y} <br>Spikes: %{z} <extra></extra>'),xgap=4,ygap=4),row=1, col=1)
-                fig.update_layout({"xaxis":dict(title="Class",tickmode="array",zeroline = False,tickvals=[i for i in range(g.nbrClasses+1)]),"yaxis":dict(title="Neuron",zeroline = False),"margin":{'l': 0, 'r': 0, 't': 5, 'b': 0},"uirevision":'no reset of zoom'})
+                fig.add_trace(go.Heatmap(z=super.SpikesActivityPerInput[layer] if layer in Layer2DViewFilter else [], colorscale= 'Reds' if sum([item for row in super.SpikesActivityPerInput[layer] for item in row]) > 0 else "gray", zmin=0, hovertemplate=('Class: %{x} <br>Neuron: %{y} <br>Spikes: %{z} <extra></extra>'),xgap=4,ygap=4),row=1, col=1)
+                fig.update_layout({"xaxis":dict(title="Class",tickmode="array",zeroline = False,tickvals=[i for i in range(g.ClassNbr)]),"yaxis":dict(title="Neuron",zeroline = False),"margin":{'l': 0, 'r': 0, 't': 5, 'b': 0},"uirevision":'no reset of zoom'})
                 if (dataLabel == None) or (layer not in Layer2DViewFilter):
                     fig.add_trace(go.Bar(x=[],y=[],hovertemplate=('Label: %{x} <br>Nbr: %{y} <extra></extra>')),row=5, col=1)
                 else:
                     fig.add_trace(go.Bar(x=list(dataLabel[0].keys()),y=list(dataLabel[0].values()),hovertemplate=('Label: %{x} <br>Nbr: %{y} <extra></extra>')),row=5, col=1)
-                fig.update_xaxes(tickvals=[i for i in range(g.nbrClasses+1)])
+                fig.update_xaxes(tickvals=[i for i in range(g.ClassNbr)])
                 return fig
             # ---------------------------------------------------------
             # MongoDB operations
@@ -751,8 +751,10 @@ class callbacks(callbacksOp):
                 if not labels:
                     return None
 
-                L = dict({i["_id"]: i["C"] for i in labels})
+                L = dict({i: 0 for i in range(g.ClassNbr)})
 
+                for l in labels:
+                    L[l["_id"]] = l["C"]
                 return [L, Max]
 
             def getSpike(timestamp, interval, layer, perNeuron):
diff --git a/src/Modules/General/layout.py b/src/Modules/General/layout.py
index e08e117773d38dfea8d122d1b3eac5ef735ec61f..cfbd7c2851856de99373be8309b9f9f85363f0dd 100755
--- a/src/Modules/General/layout.py
+++ b/src/Modules/General/layout.py
@@ -85,7 +85,7 @@ class layout(layoutOp):
         self.MaxSynapse.clear()
         self.Spikes2D = self.generate2DView(self.g,[str(i) for i in (i["layer"] for i in self.g.LayersNeuronsInfo)])
         self.AccumulatedSpikes2D = {i["layer"]:[0 for n in self.Spikes2D if n["data"]["spiked"] != -1 and i["layer"] == n["data"]["parent"]] for i in self.g.LayersNeuronsInfo}
-        self.SpikesActivityPerInput = {i["layer"]:[[0 for j in range(self.g.nbrClasses+1)] for _ in range(self.g.Layer_Neuron[i["layer"]])] for i in self.g.LayersNeuronsInfo}
+        self.SpikesActivityPerInput = {i["layer"]:[[0 for j in range(self.g.ClassNbr)] for _ in range(self.g.Layer_Neuron[i["layer"]])] for i in self.g.LayersNeuronsInfo}
         self.Max = 0
 
     def Vis(self):
diff --git a/src/Modules/General/spark.py b/src/Modules/General/spark.py
index eb175ab21d45eba707a0eedd9a5c2eb12e83e735..f07bc327d51fb5062100d1fc1a11aec6e1f111a4 100755
--- a/src/Modules/General/spark.py
+++ b/src/Modules/General/spark.py
@@ -56,8 +56,6 @@ class spark(sparkOp):
                 if ('spikes' in self.g.db.list_collection_names()):
                     M = max(M, pymongo.collection.Collection(
                         self.g.db, 'spikes').find_one(sort=[("T", -1)])["T"])
-                    self.g.nbrClasses = pymongo.collection.Collection(
-                        self.g.db, 'spikes').find_one(sort=[("Input", -1)])["Input"]
                 if ('potential' in self.g.db.list_collection_names()):
                     M = max(M, pymongo.collection.Collection(
                         self.g.db, 'potential').find_one(sort=[("T", -1)])["T"])
@@ -66,8 +64,8 @@ class spark(sparkOp):
                         self.g.db, 'synapseWeight').find_one(sort=[("T", -1)])["T"])
                 if ('labels' in self.g.db.list_collection_names()):
                     self.g.labelsExistance = True
-                    M = max(M, pymongo.collection.Collection(
-                        self.g.db, 'labels').find_one(sort=[("T", -1)])["T"])
+                    M = max(M, pymongo.collection.Collection(self.g.db, 'labels').find_one(sort=[("T", -1)])["T"])
+                    self.g.ClassNbr = int(max(M, pymongo.collection.Collection(self.g.db, 'labels').find_one(sort=[("L", -1)])["L"]))+1
                 else:
                     print("No labels")