diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt
index fd13e10301c06fe3bc70226214c6e8feacdacaf3..db0bf979a95436d91d8170aa36355625dc683016 100644
--- a/src/examples/CMakeLists.txt
+++ b/src/examples/CMakeLists.txt
@@ -39,21 +39,21 @@ ADD_EXECUTABLE(darwin_joint_motion_test darwin_joint_motion_test.cpp)
 TARGET_LINK_LIBRARIES(darwin_joint_motion_test darwin_robot)
 
 # create an example application
-#ADD_EXECUTABLE(darwin_head_tracking_test darwin_head_tracking_test.cpp)
+ADD_EXECUTABLE(darwin_head_tracking_test darwin_head_tracking_test.cpp)
 # link necessary libraries
-#TARGET_LINK_LIBRARIES(darwin_head_tracking_test darwin_robot)
+TARGET_LINK_LIBRARIES(darwin_head_tracking_test darwin_robot)
 
-#IF(KDL_FOUND)
+IF(KDL_FOUND)
   # create an example application
-#  ADD_EXECUTABLE(darwin_arm_kin darwin_arm_kin.cpp)
+  ADD_EXECUTABLE(darwin_arm_kin darwin_arm_kin.cpp)
   # link necessary libraries
-#  TARGET_LINK_LIBRARIES(darwin_arm_kin darwin_arm_kinematics)
+  TARGET_LINK_LIBRARIES(darwin_arm_kin darwin_arm_kinematics)
 
   # create an example application
-#  ADD_EXECUTABLE(darwin_leg_kin darwin_leg_kin.cpp)
+  ADD_EXECUTABLE(darwin_leg_kin darwin_leg_kin.cpp)
   # link necessary libraries
-#  TARGET_LINK_LIBRARIES(darwin_leg_kin darwin_leg_kinematics)
-#ENDIF(KDL_FOUND)
+  TARGET_LINK_LIBRARIES(darwin_leg_kin darwin_leg_kinematics)
+ENDIF(KDL_FOUND)
 
 # create an example application
 #ADD_EXECUTABLE(darwin_smart_charger_test darwin_smart_charger_test.cpp)
diff --git a/src/examples/darwin_head_tracking_test.cpp b/src/examples/darwin_head_tracking_test.cpp
index 5a96650808b49b0247a187219960512336d253b5..c1719f33bc745ed16ac1da1f08c5f8f1785aad23 100644
--- a/src/examples/darwin_head_tracking_test.cpp
+++ b/src/examples/darwin_head_tracking_test.cpp
@@ -1,46 +1,59 @@
-#include "darwin_robot.h"
+#include "darwin_mmanager.h"
+#include "darwin_head_tracking.h"
 #include "darwin_robot_exceptions.h"
 
 #include <iostream>
 
-std::string robot_device="/dev/pts/20";
-//std::string robot_device="A603LOBS";
+std::string robot_device="/tmp/darwin_driver";
 
 int main(int argc, char *argv[])
 {
-  int num_servos;
+  int i=0,num_servos;
   unsigned int present_servos;
-  std::vector<int> servos;
-  std::vector<double> angles,speeds,accels;
 
   try{
-    CDarwinRobot darwin("Darwin",robot_device,1000000,0x02,true);
-
-    num_servos=darwin.mm_get_num_servos();
-    present_servos=darwin.mm_get_present_servos();
-    std::cout << "Found " << num_servos << "servos" << std::endl;
-    std::cout << "Present servos: " << std::hex << "0x" << present_servos << std::dec << std::endl;
-    darwin.mm_enable_power();
-    sleep(1);
-    darwin.head_set_pan_pid(0.04,0.0,0.0,0.0);
-    darwin.head_set_tilt_pid(0.04,0.0,0.0,0.0);
-    darwin.mm_enable_servo(20);
-    darwin.mm_assign_module(20,DARWIN_MM_HEAD);
-    darwin.mm_enable_servo(19);
-    darwin.mm_assign_module(19,DARWIN_MM_HEAD);
-    darwin.mm_start();
-    darwin.head_start_tracking(45.0,90.0);
+    CDarwinMManager darwin("Darwin",robot_device,1000000,0x01,true);
+    CDarwinHeadTracking head("Darwin",robot_device,1000000,0x01,true);
+    std::cout << "Manager period: " << darwin.get_base_period() << std::endl;
+    std::cout << "Number of modules: " << darwin.get_num_modules() << std::endl;
+    std::cout << "Number of masters: " << darwin.get_num_masters() << std::endl;
+    std::cout << "Motion manager period: " << darwin.get_period() << std::endl;
+    darwin.start_scan();
+    while(darwin.is_scanning())
+    {
+      std::cout << "scanning ..." << std::endl;
+      usleep(100000);
+    }
+    num_servos=darwin.get_num_devices();
+    std::cout << "num. devices: " << num_servos << std::endl;
+    present_servos=darwin.get_present_devices();
+    std::cout << "present devices: " << std::hex << present_servos << std::endl;
+    present_servos=darwin.get_present_servos();
+    std::cout << "present servos: " << std::hex << present_servos << std::endl;
+    i=0;
+    while(i<MAX_NUM_SERVOS)
+    {
+      if(present_servos&(0x00000001<<i))
+      {
+        darwin.enable_servo(i);
+        darwin.assign_module(i,DARWIN_MM_HEAD);
+      }
+      i++;
+    }
+    head.set_pan_pid(0.04,0.0,0.0,0.0);
+    head.set_tilt_pid(0.04,0.0,0.0,0.0);
+    darwin.start();
+    head.start_tracking(45.0,90.0);
     sleep(3);
-    darwin.head_set_new_target(0.0,0.0);
+    head.set_new_target(0.0,0.0);
     sleep(3);
-    darwin.head_stop_tracking();
+    head.stop_tracking();
     sleep(1);
-    darwin.head_start_tracking(45.0,90.0);
+    head.start_tracking(45.0,90.0);
     sleep(3);
-    darwin.head_set_new_target(0.0,0.0);
+    head.set_new_target(0.0,0.0);
     sleep(3);
-    darwin.mm_stop();
-    darwin.mm_disable_power();
+    darwin.stop();
   }catch(CException &e){
     std::cout << e.what() << std::endl;
   }