diff --git a/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd b/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd
index 6c6989f1f7094fcc5701801c400b3fdb7c2f5e72..32a3aca72754c8862b01753e55ee7938935498a4 100644
--- a/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd
+++ b/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd
@@ -127,7 +127,7 @@ architecture Behavioral of ShiftLif_Parallel is
   end component;
 
   -- type definition
-  type transmission_state_t is (idle, voltage_update, check_arbitration, request, accept, wait_arbitration);
+  type transmission_state_t is (idle, voltage_update, check_arbitration, request, accept, wait_arbitration, arbitration_finish);
   type reception_state_t    is (idle, request, get_data);
 
   -- ram signals
@@ -249,9 +249,8 @@ begin
 
           when check_arbitration =>
             if spikes = no_spike then
-              transmission_state <= idle;
+              transmission_state <= arbitration_finish;
               o_emu_busy <= '0';
-              tr_fsm_en := '0';
             else
               transmission_state <= request;
               arb_spikes <= spikes;
@@ -278,12 +277,15 @@ begin
           when wait_arbitration =>
             start_arb <= '0';
             if arb_busy = '0' then
-              transmission_state <= idle;
-              o_emu_busy <= '0';
-              tr_fsm_en := '0';
+              transmission_state <= arbitration_finish;
             else
               transmission_state <= wait_arbitration;
             end if;  
+              
+          when arbitration_finish =>
+            transmission_state <= idle;
+            o_emu_busy <= '0';
+            tr_fsm_en := '0';
         end case;
       end if;
     end if;
@@ -337,3 +339,4 @@ begin
   end generate neuron_generation;
 
 end Behavioral;
+
diff --git a/modneflib/modnef/modnef_driver/drivers/xstep_driver.py b/modneflib/modnef/modnef_driver/drivers/xstep_driver.py
index 778b95b1a72a37f0cd6a6a61a0e57aa3c37baad9..6b5b21603d31eef495e290dbe03402801cf5df6c 100644
--- a/modneflib/modnef/modnef_driver/drivers/xstep_driver.py
+++ b/modneflib/modnef/modnef_driver/drivers/xstep_driver.py
@@ -160,8 +160,9 @@ class XStep_Driver(ModNEF_Driver):
         step_send += 1
 
       if step == len(sample_aer)-1:
+        print(len(data))
         emulation_result = self.rust_driver.data_transmission(data, reset_membrane)
-        
+        print("hi")
         res_step = self._unpack_data(emulation_result)
         for rs in res_step:
           for aer in rs:
diff --git a/modneflib/modnef/templates/dataset.py b/modneflib/modnef/templates/dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..e0b86fc5a43069f74cf733e33b7dd16c7d8360af
--- /dev/null
+++ b/modneflib/modnef/templates/dataset.py
@@ -0,0 +1,20 @@
+import os
+import tonic
+from torch.utils.data import DataLoader
+
+"""DataSet Definition"""
+dataset_path = f"{os.environ['HOME']}/datasets"
+
+# data set definition, change to your dataset
+sensor_size = tonic.datasets.NMNIST.sensor_size
+frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=5)
+
+train_set = tonic.datasets.NMNIST(save_to=dataset_path, train=True, transform=frame_transform)
+test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform)
+
+# batch loader
+batch_size = 64
+
+trainLoader = DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True))
+testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True))
+validationLoader = None
\ No newline at end of file
diff --git a/modneflib/modnef/templates/evaluation.py b/modneflib/modnef/templates/evaluation.py
index ebcc8f8f457513ab00649a1ccae38446d243a2cf..91cba66dd98812a08f9cdbe433d2c6db85887f6e 100644
--- a/modneflib/modnef/templates/evaluation.py
+++ b/modneflib/modnef/templates/evaluation.py
@@ -7,6 +7,7 @@ import torch
 from run_lib import *
 import sys
 from model import MyModel
+from dataset import *
 
 if __name__ == "__main__":
 
@@ -53,20 +54,7 @@ if __name__ == "__main__":
   conf_matrix_file = "confusion_matrix.png"
   conf_matrix_classes = [str(i) for i in range(10)]
   
-  """DataSet Definition"""
-  dataset_path = f"{os.environ['HOME']}/datasets"
-
-  # data set definition, change to your dataset
-  sensor_size = tonic.datasets.NMNIST.sensor_size
-  frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=10)
-
-  test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform)
-
-  # batch loader
-  batch_size = 64
   
-  testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True))
-
   if kind == "eval":
     acc, y_pred, y_true = evaluation(
       model=model, 
@@ -99,7 +87,7 @@ if __name__ == "__main__":
     exit(-1)
 
   if save_conf_matrix:
-    confusion_matrix(
+    conf_matrix(
       y_true=y_true,
       y_pred=y_pred,
       file_name=conf_matrix_file,
diff --git a/modneflib/modnef/templates/train.py b/modneflib/modnef/templates/train.py
index b67de4512337ec34d5c96066df3ed7e8f815a98a..0f481251196a869236f019f777c3ce83f9e01f5e 100644
--- a/modneflib/modnef/templates/train.py
+++ b/modneflib/modnef/templates/train.py
@@ -6,6 +6,7 @@ from snntorch.surrogate import fast_sigmoid
 from run_lib import *
 import torch
 from model import MyModel
+from dataset import *
 
 if __name__ == "__main__":
 
@@ -31,23 +32,6 @@ if __name__ == "__main__":
   save_plot = False
   save_history = False
   output_path = "."
-  
-  """DataSet Definition"""
-  dataset_path = f"{os.environ['HOME']}/datasets"
-
-  # data set definition, change to your dataset
-  sensor_size = tonic.datasets.NMNIST.sensor_size
-  frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=5)
-
-  train_set = tonic.datasets.NMNIST(save_to=dataset_path, train=True, transform=frame_transform)
-  test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform)
-
-  # batch loader
-  batch_size = 64
-  
-  trainLoader = DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True))
-  testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True))
-  validationLoader = None
 
   train(
     model=model, 
diff --git a/modneflib/modnef/templates/vhdl_generation.py b/modneflib/modnef/templates/vhdl_generation.py
index fcca214d8959aa06374ae7c4c93aa428ab9fd7a2..563d1a1fb7de009c76d06f4efdd45217cd0c65f7 100644
--- a/modneflib/modnef/templates/vhdl_generation.py
+++ b/modneflib/modnef/templates/vhdl_generation.py
@@ -6,6 +6,7 @@ from snntorch.surrogate import fast_sigmoid
 from run_lib import *
 import torch
 from model import MyModel
+from dataset import *
 
 if __name__ == "__main__":
 
@@ -33,21 +34,7 @@ if __name__ == "__main__":
   """VHDL file definition"""
   output_path = "."
   file_name = "template_vhdl_model.vhd"
-  driver_config_path = "driver_config"
-  
-  """DataSet Definition"""
-  dataset_path = f"{os.environ['HOME']}/datasets"
-
-  # data set definition, change to your dataset
-  sensor_size = tonic.datasets.NMNIST.sensor_size
-  frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=10)
-
-  test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform)
-
-  # batch loader
-  batch_size = 64
-  
-  testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True))
+  driver_config_path = "driver_config.yml"
 
   acc, y_pred, y_true = hardware_estimation(
     model=model,