diff --git a/include/model_car_batteries.h b/include/model_car_batteries.h
index 936a860e71053752a87fc74976529cb6da7f7b94..4b2ae9957e23a84bad26862d5558542cb2cd6c7e 100644
--- a/include/model_car_batteries.h
+++ b/include/model_car_batteries.h
@@ -1,20 +1,11 @@
 #ifndef _MODEL_CAR_BATTERIES_H
 #define _MODEL_CAR_BATTERIES_H
 
-#include "rs232.h"
-#include "commexceptions.h"
-#include "threadserver.h"
 #include "model_car_driver_base.h"
-#include "model_car_exceptions.h"
-#include "model_car_protocol.h"
-#include <iostream>
-#include <iomanip>
-#include <vector>
-#include <dirent.h>
-#include <chrono>
-#include <thread>
 #include <map>
 
+typedef std::map<const SENSOR_ID, double> voltages_map_t;
+
 /**
   * @class CModelCarBatteries
   * @brief CModelCarBatteries class brief description text
@@ -24,14 +15,21 @@
 class CModelCarBatteries: public CModelCarDriverBase
 {
   private:
-    void process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union);
-    std::map<SENSOR_ID, TVoltageData>     m_bat_values;
-    
-  protected:
+    void process_data_frame(uint8_t id, TDataUnion data_union);
+    voltages_map_t battery_values;
     
   public:
     CModelCarBatteries(std::string name);
-    bool get_bat(SENSOR_ID id, float & value);
+    double get_motors_battery_voltage(void);
+    double get_payload_battery_voltage(void);
+    double get_motors_cell1_voltage(void);
+    double get_motors_cell2_voltage(void);
+    double get_payload_cell1_voltage(void);
+    double get_payload_cell2_voltage(void);
+    double get_payload_cell3_voltage(void);
+    double get_payload_cell4_voltage(void);
+    double get_payload_cell5_voltage(void);
+    double get_payload_cell6_voltage(void);
     ~CModelCarBatteries(void);
 };
 
diff --git a/src/model_car_batteries.cpp b/src/model_car_batteries.cpp
index 8e90f574b8e57fee0d87ef0ab456f2c845a5a23f..8ad7f8e552f40f6ce0b98a216be108c515462bb5 100644
--- a/src/model_car_batteries.cpp
+++ b/src/model_car_batteries.cpp
@@ -2,60 +2,142 @@
 
 CModelCarBatteries::CModelCarBatteries(std::string name) : CModelCarDriverBase(name, ARDUINO_CENTER_MEASUREMENT)
 {
-  TVoltageData v;
-  v.voltage=0;
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL1, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL2, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL1, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL2, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL3, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL4, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL5, v));
-  m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL6, v));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL1, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL2, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL1, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL2, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL3, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL4, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL5, 0.0));
+  battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL6, 0.0));
 }
   
-void CModelCarBatteries::process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union)
+void CModelCarBatteries::process_data_frame(uint8_t id, TDataUnion data_union)
 {
-  //std::cout << "CModelCarBatteries::process_data_frame: id=" << unsigned(id) << std::endl;
- 
-  const SENSOR_ID currentSensor = static_cast<SENSOR_ID>(id);
+  voltages_map_t::iterator it = this->battery_values.find((SENSOR_ID)id);
+  static int num_messages=10;
 
-  //m_bat_values[currentSensor]=data_union.voltage;
-
-   
-  auto it = m_bat_values.find(currentSensor);
-  if(it==m_bat_values.end())
-  {
-    std::cout << "CModelCarBatteries::process_data_frame: error, incorrect id: " << (unsigned int)id << std::endl;
-  }
-  else
+  if(it!=this->battery_values.end())
+    it->second = data_union.voltage.voltage/1000.0;
+  num_messages--;
+  if(num_messages==0)
   {
-    it->second = data_union.voltage;
-    //m_bat_values[currentSensor] = data_union.us;
+    num_messages=10;
+    if(!this->event_server->event_is_set(this->new_data_event_id))
+      this->event_server->set_event(this->new_data_event_id);
   }
+}
+
+double CModelCarBatteries::get_motors_battery_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_ACTUATOR];
+  this->data_mutex.exit();
   
+  return voltage;
 }
 
-bool CModelCarBatteries::get_bat(SENSOR_ID id, float & value)
+double CModelCarBatteries::get_payload_battery_voltage(void)
 {
-  bool ok=false;
+  double voltage;
+
   this->data_mutex.enter();
-  auto it = m_bat_values.find(id);
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS];
+  this->data_mutex.exit();
   
-  if ( it == m_bat_values.end() )
-  {  
-    // not found  
-  }
-  else
-  {
-    value = it->second.voltage/1000.0; //mV to V
-    ok=true; 
-  }
+  return voltage;
+}
+
+double CModelCarBatteries::get_motors_cell1_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_ACTUATOR_CELL1];
+  this->data_mutex.exit();
+  
+  return voltage;
+}
+
+double CModelCarBatteries::get_motors_cell2_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_ACTUATOR_CELL2];
+  this->data_mutex.exit();
+  
+  return voltage;
+}
+
+double CModelCarBatteries::get_payload_cell1_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL1];
+  this->data_mutex.exit();
+  
+  return voltage;
+}
+
+double CModelCarBatteries::get_payload_cell2_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL2];
+  this->data_mutex.exit();
+  
+  return voltage;
+}
+
+double CModelCarBatteries::get_payload_cell3_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL3];
+  this->data_mutex.exit();
+  
+  return voltage;
+}
+
+double CModelCarBatteries::get_payload_cell4_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL4];
+  this->data_mutex.exit();
+  
+  return voltage;
+}
+
+double CModelCarBatteries::get_payload_cell5_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL5];
+  this->data_mutex.exit();
+  
+  return voltage;
+}
+
+double CModelCarBatteries::get_payload_cell6_voltage(void)
+{
+  double voltage;
+
+  this->data_mutex.enter();
+  voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL6];
   this->data_mutex.exit();
   
-  return ok;
+  return voltage;
 }
 
 CModelCarBatteries::~CModelCarBatteries()