diff --git a/trunk/src/examples/CMakeLists.txt b/trunk/src/examples/CMakeLists.txt
index 48bc0bbdd9ea7ad2baea2e7142aa0fb13b2764b7..f41d1fd0e368c594f9ee845049009860140ea395 100644
--- a/trunk/src/examples/CMakeLists.txt
+++ b/trunk/src/examples/CMakeLists.txt
@@ -5,7 +5,7 @@ ADD_EXECUTABLE(test_usb_i2c test_usb_i2c.cpp)
 TARGET_LINK_LIBRARIES(test_usb_i2c usb_i2c_adapter ${iriutils_LIBRARY} ${comm_LIBRARY})
 
 # edit the following line to add the source code for the example and the name of the executable
-ADD_EXECUTABLE(test_battery battery_test.cpp)
+ADD_EXECUTABLE(test_camera test_camera.cpp)
 
 # edit the following line to add the necessary libraries
-TARGET_LINK_LIBRARIES(test_battery usb_i2c_adapter ${iriutils_LIBRARY} ${comm_LIBRARY})
+TARGET_LINK_LIBRARIES(test_camera usb_i2c_adapter ${iriutils_LIBRARY} ${comm_LIBRARY})
diff --git a/trunk/src/examples/test_usb_i2c.cpp b/trunk/src/examples/test_usb_i2c.cpp
index 534af53f559a3adec1adb8a33c0c2aa22f14f44c..f8cb7f1a17de0e7fdcc6d2868e98c61570f149c4 100644
--- a/trunk/src/examples/test_usb_i2c.cpp
+++ b/trunk/src/examples/test_usb_i2c.cpp
@@ -2,8 +2,8 @@
 #include "usb_i2c.h"
 #include <iostream>
 
-const std::string usb_port="/dev/ttyUSB0";
-const unsigned char dev_id=0x22;
+const std::string serial="A700ettt";
+const unsigned char dev_id=0x21;
 
 int main(int argc, char *argv[])
 {
@@ -11,7 +11,7 @@ int main(int argc, char *argv[])
   int i=0;
   
   try{
-    adapter.open(usb_port);
+    adapter.open(serial);
     std::cout << "Firmware revision: " << (int)adapter.get_revision() << std::endl;
     std::cout << "Turning the led off ..." << std::endl;
     adapter.turn_led_off();
diff --git a/trunk/src/usb_i2c.cpp b/trunk/src/usb_i2c.cpp
index 8deee1d6a82cb8abb35a12c80f9789f209dbbedc..0340deaf2584c8797d6ac4f1336a8fa00fad21bd 100644
--- a/trunk/src/usb_i2c.cpp
+++ b/trunk/src/usb_i2c.cpp
@@ -16,7 +16,7 @@ CUSBI2C::CUSBI2C(const std::string &adapter_id)
   else
   {
     this->adapter_id=adapter_id;
-    this->comm_dev=new CRS232(comm_dev_id);
+    this->comm_dev=NULL;
     this->gpio_config[gpio1]=digital_input;
     this->gpio_config[gpio2]=i2c;
     this->gpio_config[gpio3]=i2c;
@@ -25,18 +25,42 @@ CUSBI2C::CUSBI2C(const std::string &adapter_id)
   }
 }
  
-void CUSBI2C::open(const std::string &port_id)
+void CUSBI2C::open(const std::string &serial)
 {
-  TRS232_config config;
+  CFTDIServer *ftdi_server=CFTDIServer::instance();
+  TFTDIconfig ftdi_config;
+  int i=0;
 
   if(this->comm_dev!=NULL)
-    this->comm_dev->open((void *)&port_id);
-  config.baud=19200;
-  config.num_bits=8;
-  config.parity=none;
-  config.stop_bits=2;
-  this->comm_dev->config(&config);
-  this->rx_event_id=this->comm_dev->get_rx_event_id();
+  {
+    this->comm_dev->close();
+    delete this->comm_dev;
+    this->comm_dev=NULL;
+  }
+  if(ftdi_server->get_num_devices()>0)
+  {
+    for(i=0;i<ftdi_server->get_num_devices();i++)
+    {
+      if(serial==ftdi_server->get_serial_number(i))
+      {
+        this->comm_dev=ftdi_server->get_device(ftdi_server->get_serial_number(i));
+        ftdi_config.baud_rate = 19200;
+        ftdi_config.word_length = 8;
+        ftdi_config.stop_bits = 2;
+        ftdi_config.parity = 0;
+        ftdi_config.read_timeout = 2;
+        ftdi_config.write_timeout = 2;
+        ftdi_config.latency_timer = 2;
+        this->comm_dev->config(&ftdi_config);
+        this->rx_event_id=this->comm_dev->get_rx_event_id();
+      }
+    }
+    if(this->comm_dev==NULL)/* the device has not been initialized */
+    {
+      /* handle exceptions */
+      throw CUSBI2CException(_HERE_,"No FTDI device available with the desired serial number.");
+    }
+  }
 }
 
 unsigned char CUSBI2C::get_revision(void)
@@ -385,7 +409,7 @@ int CUSBI2C::write_reg(unsigned char dev_id, short int address, unsigned char *d
       cmd[1]=dev_id<<1;
       cmd[2]=address;
       cmd[3]=num;
-      memcpy(&data[total_written],&cmd[4],num);
+      memcpy(&cmd[4],&data[total_written],num);
       num+=4;
     }
     else
diff --git a/trunk/src/usb_i2c.h b/trunk/src/usb_i2c.h
index 74045a629c0bd0b0b1631225bfbc262353f8a4f5..c59d4f12cffc139223d80d713b83e62ff9d4800d 100644
--- a/trunk/src/usb_i2c.h
+++ b/trunk/src/usb_i2c.h
@@ -1,7 +1,8 @@
 #ifndef _USB_I2C_H
 #define _USB_I2C_H
 
-#include "rs232.h"
+#include "ftdimodule.h"
+#include "ftdiserver.h"
 #include "eventserver.h"
 
 typedef enum {gpio1=0,gpio2=1,gpio3=2} gpio_pins;
@@ -11,14 +12,14 @@ typedef enum {digital_input=0x01,digital_output=0x02,analog_input=0x04,i2c=0x08}
 class CUSBI2C
 {
   private:
-    CRS232 *comm_dev;
+    CFTDI *comm_dev;
     std::string adapter_id;
     std::string rx_event_id;
     unsigned char gpio_config[3];
     CEventServer *event_server;
   public:
     CUSBI2C(const std::string &adapter_id);
-    void open(const std::string &port_id);
+    void open(const std::string &serial);
     unsigned char get_revision(void);
     void config_gpio(gpio_pins pin, gpio_types type);
     void set_gpio(gpio_pins pin, bool value);