diff --git a/src/usb_i2c.cpp b/src/usb_i2c.cpp
index 409161b59e5e8fda6af2436c5ec0dcc43ebd840e..9b7c66bd0a5ad5ffd1de318d30d05ecc85c33806 100644
--- a/src/usb_i2c.cpp
+++ b/src/usb_i2c.cpp
@@ -84,7 +84,11 @@ unsigned char CUSBI2C::get_revision(void)
   else
   {
     this->event_server->wait_first(events);
-    read=this->comm_dev->read(&revision,1);
+    if((read=this->comm_dev->read(&revision,1))!=1)
+    {
+      /* handle exceptions */
+      throw CUSBI2CException(_HERE_,"Error while receiving the answer from the converter");
+    }
   }
 
   return revision;
@@ -140,7 +144,11 @@ void CUSBI2C::set_gpio(gpio_pins pin, bool value)
     else
     {
       this->event_server->wait_first(events);
-      read=this->comm_dev->read(&gpio_state,1);
+      if((read=this->comm_dev->read(&gpio_state,1))!=1)
+      {
+        /* handle exceptions */
+        throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+      }
       if(value==true)
         gpio_state|=(0x01<<(pin+1));
       else
@@ -155,7 +163,11 @@ void CUSBI2C::set_gpio(gpio_pins pin, bool value)
       else
       {
         this->event_server->wait_first(events);
-        read=this->comm_dev->read(&gpio_state,1);
+        if((read=this->comm_dev->read(&gpio_state,1))!=1)
+        {
+          /* handle exceptions */
+          throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+        } 
       }
     }
   } 
@@ -184,7 +196,11 @@ bool CUSBI2C::get_gpio(gpio_pins pin)
     else
     {
       this->event_server->wait_first(events);
-      read=this->comm_dev->read(&gpio_state,1);
+      if((read=this->comm_dev->read(&gpio_state,1))!=1)
+      {
+        /* handle exceptions */
+        throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+      }
       if(gpio_state&(0x01<<(pin+1)))
         return true;
       else
@@ -211,7 +227,11 @@ short int CUSBI2C::get_analog(gpio_pins pin)
   if(this->gpio_config[pin]==analog_input)
   {  
     events.push_back(this->rx_event_id);
-    written=this->comm_dev->write(cmd,4);
+    if((written=this->comm_dev->write(cmd,4))!=4)
+    {
+      /* handle exceptions */
+      throw CUSBI2CException(_HERE_,"Error while sending the command to the converter");
+    }
     do{
       this->event_server->wait_first(events);
       read=this->comm_dev->read(&answer[total_read],4-total_read);
@@ -248,7 +268,11 @@ void CUSBI2C::turn_led_on(void)
   else
   {
     this->event_server->wait_first(events);
-    read=this->comm_dev->read(&gpio_state,1);
+    if((read=this->comm_dev->read(&gpio_state,1))!=1)
+    {
+      /* handle exceptions */
+      throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+    }
     gpio_state|=0x01;
     cmd[1]=0x10;
     cmd[2]=gpio_state;
@@ -260,7 +284,11 @@ void CUSBI2C::turn_led_on(void)
     else
     {
       this->event_server->wait_first(events);
-      read=this->comm_dev->read(&gpio_state,1);
+      if((read=this->comm_dev->read(&gpio_state,1))!=1)
+      {
+        /* handle exceptions */
+        throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+      }
     }
   }
 }
@@ -281,7 +309,11 @@ void CUSBI2C::turn_led_off(void)
   else
   {
     this->event_server->wait_first(events);
-    read=this->comm_dev->read(&gpio_state,1);
+    if((read=this->comm_dev->read(&gpio_state,1))!=1)
+    {
+      /* handle exceptions */
+      throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+    }
     gpio_state&=0xFE;
     cmd[1]=0x10;
     cmd[2]=gpio_state;
@@ -293,7 +325,11 @@ void CUSBI2C::turn_led_off(void)
     else
     {
       this->event_server->wait_first(events);
-      read=this->comm_dev->read(&gpio_state,1);
+      if((read=this->comm_dev->read(&gpio_state,1))!=1)
+      {
+        /* handle exceptions */
+        throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+      }
     }
   }
 }
@@ -331,7 +367,11 @@ int CUSBI2C::write(unsigned char dev_id, unsigned char *data, int len)
       {
         try{
           this->event_server->wait_first(events,500);
-          read=this->comm_dev->read(&status,1);
+          if((read=this->comm_dev->read(&status,1))!=1)
+          {
+            /* handle exceptions */
+            throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+          }
           if(status==0x00)
           {
             /* handle exceptions */
@@ -437,7 +477,11 @@ int CUSBI2C::write_reg(unsigned char dev_id, short int address, unsigned char *d
     {
       try{
         this->event_server->wait_first(events,500);
-        read=this->comm_dev->read(&status,1);
+        if((read=this->comm_dev->read(&status,1))!=1)
+        {
+          /* handle exceptions */
+          throw CUSBI2CException(_HERE_,"Error while receiving answer from the converter");
+        }
         if(status==0x00)
         {
           /* handle exceptions */