diff --git a/include/model_car_ultrasounds.h b/include/model_car_ultrasounds.h
index 62eecebd6509b91dac8ba749bd6d8f13e38c072c..ef658f01f252c9cff1013b1c0e6c849589b4997c 100644
--- a/include/model_car_ultrasounds.h
+++ b/include/model_car_ultrasounds.h
@@ -1,20 +1,11 @@
 #ifndef _MODEL_CAR_ULTRASOUNDS_H
 #define _MODEL_CAR_ULTRASOUNDS_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> ultrasounds_map_t;
+
 /**
   * @class CModelCarUltrasounds
   * @brief CModelCarUltrasounds class brief description text
@@ -24,14 +15,16 @@
 class CModelCarUltrasounds: public CModelCarDriverBase
 {
   private:
-    void process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union);
-    std::map<SENSOR_ID, TUltrasoundData>     m_uss_values;
-    
-  protected:
+    void process_data_frame(uint8_t id, TDataUnion data_union);
+    ultrasounds_map_t ultrasound_values;
     
   public:
     CModelCarUltrasounds(std::string name);
-    bool get_uss(SENSOR_ID id, float & value);
+    double get_side_right_distance(void);
+    double get_side_left_distance(void);
+    double get_rear_right_distance(void);
+    double get_rear_center_distance(void);
+    double get_rear_left_distance(void);
     ~CModelCarUltrasounds(void);
 };
 
diff --git a/src/model_car_ultrasounds.cpp b/src/model_car_ultrasounds.cpp
index f1968d0dca04fe2a1c8046acf66b6faec4c0054f..32fcfea0e17b90c7d58518565243605f1f0e84ff 100644
--- a/src/model_car_ultrasounds.cpp
+++ b/src/model_car_ultrasounds.cpp
@@ -2,53 +2,82 @@
 
 CModelCarUltrasounds::CModelCarUltrasounds(std::string name) : CModelCarDriverBase(name, ARDUINO_REAR_US)
 {
-  TUltrasoundData us_data;
-  us_data.distance=0;
-  m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_RIGHT, us_data));
-  m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_RIGHT, us_data));
-  m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER, us_data));
-  m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_LEFT, us_data));
-  m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_LEFT, us_data));
+  ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_RIGHT, 0.0));
+  ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_RIGHT, 0.0));
+  ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER, 0.0));
+  ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_LEFT, 0.0));
+  ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_LEFT, 0.0));
 }
   
-void CModelCarUltrasounds::process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union)
+void CModelCarUltrasounds::process_data_frame(uint8_t id, TDataUnion data_union)
 {
-  //std::cout << "CModelCarUltrasounds::process_data_frame: id=" << unsigned(id) << std::endl;
+  ultrasounds_map_t::iterator it = this->ultrasound_values.find((SENSOR_ID)id);
+  static int num_messages=5;
 
-  const SENSOR_ID currentSensor = static_cast<SENSOR_ID>(id);
- 
-  auto it = m_uss_values.find(currentSensor);
-  if(it==m_uss_values.end())
+  if(it!=this->ultrasound_values.end())
+    it->second = data_union.us.distance/100.0; //cm
+  num_messages--;
+  if(num_messages==0)
   {
-    std::cout << "CModelCarUltrasounds::process_data_frame: error, incorrect id: " << (unsigned int)id << std::endl;
+    num_messages=5;
+    if(!this->event_server->event_is_set(this->new_data_event_id))
+      this->event_server->set_event(this->new_data_event_id);
   }
-  else
-  {
-    it->second = data_union.us; //cm
-    //it->second.distance = it->second.distance/100.0; //m
-    //m_uss_values[currentSensor] = data_union.us;
-  }
-  
 }
 
-bool CModelCarUltrasounds::get_uss(SENSOR_ID id, float & value)
+double CModelCarUltrasounds::get_side_right_distance(void)
 {
-  bool ok=false;
+  double distance;
+
   this->data_mutex.enter();
-  auto it = m_uss_values.find(id);  
-  
-  if ( it == m_uss_values.end() )
-  {  
-    // not found  
-  }
-  else
-  {
-    value = it->second.distance/100.0; //m
-    ok=true; 
-  }
+  distance=this->ultrasound_values[ID_ARD_SENS_US_SIDE_RIGHT];
   this->data_mutex.exit();
-  
-  return ok;
+
+  return distance;
+}
+
+double CModelCarUltrasounds::get_side_left_distance(void)
+{
+  double distance;
+
+  this->data_mutex.enter();
+  distance=this->ultrasound_values[ID_ARD_SENS_US_SIDE_LEFT];
+  this->data_mutex.exit();
+
+  return distance;
+}
+
+double CModelCarUltrasounds::get_rear_right_distance(void)
+{
+  double distance;
+
+  this->data_mutex.enter();
+  distance=this->ultrasound_values[ID_ARD_SENS_US_REAR_CENTER_RIGHT];
+  this->data_mutex.exit();
+
+  return distance;
+}
+
+double CModelCarUltrasounds::get_rear_center_distance(void)
+{
+  double distance;
+
+  this->data_mutex.enter();
+  distance=this->ultrasound_values[ID_ARD_SENS_US_REAR_CENTER];
+  this->data_mutex.exit();
+
+  return distance;
+}
+
+double CModelCarUltrasounds::get_rear_left_distance(void)
+{
+  double distance;
+
+  this->data_mutex.enter();
+  distance=this->ultrasound_values[ID_ARD_SENS_US_REAR_CENTER_LEFT];
+  this->data_mutex.exit();
+
+  return distance;
 }
 
 CModelCarUltrasounds::~CModelCarUltrasounds()