diff --git a/include/dynamic_graph_bridge/sot_loader.hh b/include/dynamic_graph_bridge/sot_loader.hh
index 64d5ed33cc8fb9c19cb368a6581f422ab32369ec..2c1faf158b04d5283c046689fec331e9f51dc877 100644
--- a/include/dynamic_graph_bridge/sot_loader.hh
+++ b/include/dynamic_graph_bridge/sot_loader.hh
@@ -97,6 +97,9 @@ protected:
   // Joint state to be published.
   sensor_msgs::JointState joint_state_;
 
+  // \brief Start control loop
+  virtual void startControlLoop();
+
   // Number of DOFs according to KDL.
   int nbOfJoints_;
   parallel_joints_to_state_vector_t::size_type nbOfParallelJoints_;
@@ -112,6 +115,9 @@ public:
   // \brief Load the SoT
   void Initialization();
 
+  // \brief Create a thread for ROS.
+  void initializeRosNode(int argc, char *argv[]);
+
   // \brief Compute one iteration of control.
   // Basically calls fillSensors, the SoT and the readControl.
   void oneIteration();
@@ -144,5 +150,9 @@ public:
   // \brief Get Status of dg.
   bool isDynamicGraphStopped()
   { return dynamic_graph_stopped_; }
+
+  // \brief Specify the name of the dynamic library.
+  void setDynamicLibraryName(std::string &afilename);
+
 };
 
diff --git a/src/converter.hh b/src/converter.hh
index e53cbf52f1a359e88c8b0c1c9ad62ce3696e9714..0668d40dec66baf5d242f2b3daecaa8a1a60d10b 100644
--- a/src/converter.hh
+++ b/src/converter.hh
@@ -76,7 +76,7 @@ namespace dynamicgraph
 
   ROS_TO_SOT_IMPL(ml::Vector)
   {
-    dst.resize (src.data.size ());
+    dst.resize ((int)src.data.size ());
     for (unsigned i = 0; i < src.data.size (); ++i)
       dst.elementAt (i) =  src.data[i];
   }
@@ -115,7 +115,8 @@ namespace dynamicgraph
 
   ROS_TO_SOT_IMPL(ml::Matrix)
   {
-    dst.resize (src.width, src.data.size () / src.width);
+    dst.resize (src.width, (unsigned int) src.data.size () / 
+		(unsigned int)src.width);
     for (unsigned i = 0; i < src.data.size (); ++i)
       dst.elementAt (i) =  src.data[i];
   }
@@ -127,7 +128,7 @@ namespace dynamicgraph
     btQuaternion quaternion;
     for(unsigned i = 0; i < 3; ++i)
       for(unsigned j = 0; j < 3; ++j)
-	rotation[i][j] = src (i, j);
+	rotation[i][j] = (float)src (i, j);
     rotation.getRotation (quaternion);
 
     dst.translation.x = src (0, 3);
@@ -143,7 +144,8 @@ namespace dynamicgraph
   ROS_TO_SOT_IMPL(sot::MatrixHomogeneous)
   {
     btQuaternion quaternion
-      (src.rotation.x, src.rotation.y, src.rotation.z, src.rotation.w);
+      ((float)src.rotation.x,(float)src.rotation.y, 
+       (float)src.rotation.z,(float)src.rotation.w);
     btMatrix3x3 rotation (quaternion);
 
     // Copy the rotation component.
@@ -303,8 +305,9 @@ namespace dynamicgraph
     static ptime timeStart(date(1970,1,1));
     time_duration diff = time - timeStart;
 
-    uint32_t sec = diff.ticks ()/time_duration::rep_type::res_adjust ();
-    uint32_t nsec = diff.fractional_seconds();
+    uint32_t sec = (unsigned int)diff.ticks ()/
+      (unsigned int)time_duration::rep_type::res_adjust ();
+    uint32_t nsec = (unsigned int)diff.fractional_seconds();
 
     return ros::Time (sec, nsec);
   }
diff --git a/src/geometric_simu.cpp b/src/geometric_simu.cpp
index f6cfffb40d1c338fa6c471072674bbb69ae06f7b..a9981133d569ab2d992d14fc079b88df4acfae4b 100644
--- a/src/geometric_simu.cpp
+++ b/src/geometric_simu.cpp
@@ -22,27 +22,6 @@
 
 #include <dynamic_graph_bridge/sot_loader.hh>
 
-boost::condition_variable cond;
-boost::mutex mut;
-
-void workThread(SotLoader *aSotLoader)
-{
-  {
-    boost::lock_guard<boost::mutex> lock(mut);
-  }
-  while(aSotLoader->isDynamicGraphStopped())
-    {
-      usleep(5000);
-    }  
-  while(!aSotLoader->isDynamicGraphStopped())
-    {
-      aSotLoader->oneIteration();
-      usleep(5000);
-    }
-  cond.notify_all();
-  ros::waitForShutdown();
-}
-
 
 int main(int argc, char *argv[])
 {
@@ -53,15 +32,10 @@ int main(int argc, char *argv[])
   if (aSotLoader.parseOptions(argc,argv)<0)
     return -1;
   
-  ros::NodeHandle n;
-  ros::ServiceServer service = n.advertiseService("start_dynamic_graph", 
-                                                  &SotLoader::start_dg,
-                                                  &aSotLoader);
-  ROS_INFO("Ready to start dynamic graph.");
-
-  boost::thread thr(workThread,&aSotLoader);
+  aSotLoader.initializeRosNode(argc,argv);
 
-  boost::unique_lock<boost::mutex> lock(mut);
-  cond.wait(lock);
-  ros::spin();
+  while(true){
+    usleep(5000);
+  }
+  
 }
diff --git a/src/ros_joint_state.cpp b/src/ros_joint_state.cpp
index dccc85ed93b645cd20d3bc00173ec69b2ea362f3..77b91408c155e953745773b84b95d9f961b08117 100644
--- a/src/ros_joint_state.cpp
+++ b/src/ros_joint_state.cpp
@@ -172,7 +172,7 @@ namespace dynamicgraph
 	// Fill position.
 	jointState_.position.resize (s);
 	for (std::size_t i = 0; i < s; ++i)
-	  jointState_.position[i] = state_.access (t) (i);
+	  jointState_.position[i] = state_.access (t) ((unsigned int)i);
 
 	publisher_.msg_ = jointState_;
 	publisher_.unlockAndPublish ();
diff --git a/src/ros_publish.hxx b/src/ros_publish.hxx
index 34f45fce29f1e58695c820af30c9b4995d2ba840..fd217385fa86e5f8c880e1d1930131c62b4e8e77 100644
--- a/src/ros_publish.hxx
+++ b/src/ros_publish.hxx
@@ -56,7 +56,6 @@ namespace dynamicgraph
   template <typename T>
   void RosPublish::add (const std::string& signal, const std::string& topic)
   {
-    typedef typename SotToRos<T>::sot_t sot_t;
     typedef typename SotToRos<T>::ros_t ros_t;
     typedef typename SotToRos<T>::signalIn_t signal_t;
 
diff --git a/src/ros_time.cpp b/src/ros_time.cpp
index 50a23671b71ebdae4d8f2378fc59f2ef5e5274d7..0d50559a74509f4f326390c344aacf82a4a659ab 100644
--- a/src/ros_time.cpp
+++ b/src/ros_time.cpp
@@ -32,7 +32,7 @@ namespace dynamicgraph {
   }
 
   ptime&
-  RosTime::update (ptime& time, const int& t)
+  RosTime::update (ptime& time, const int& )
   {
     time = rosTimeToPtime (ros::Time::now ());
     return time;
diff --git a/src/sot_loader.cpp b/src/sot_loader.cpp
index cc63d43ad6f92857741afd233c3af5355a953948..575f804c9b74773c82e533f7fcfaccc2db732dd6 100644
--- a/src/sot_loader.cpp
+++ b/src/sot_loader.cpp
@@ -21,14 +21,54 @@
 /* -------------------------------------------------------------------------- */
 
 #include <dynamic_graph_bridge/sot_loader.hh>
+#include "dynamic_graph_bridge/ros_init.hh"
 
 // POSIX.1-2001
 #include <dlfcn.h>
 
+#include <boost/thread/thread.hpp>
+#include <boost/thread/condition.hpp>
+
+boost::condition_variable cond;
+boost::mutex mut;
+
 using namespace std;
 using namespace dynamicgraph::sot; 
 namespace po = boost::program_options;
 
+void createRosSpin(SotLoader *aSotLoader)
+{
+  ROS_INFO("createRosSpin started\n");
+  ros::NodeHandle n;
+
+  ros::ServiceServer service = n.advertiseService("start_dynamic_graph",
+                                                  &SotLoader::start_dg,
+                                                  aSotLoader);
+
+  ros::ServiceServer service2 = n.advertiseService("stop_dynamic_graph",
+                                                  &SotLoader::stop_dg,
+                                                  aSotLoader);
+
+
+  ros::waitForShutdown();
+}
+
+void workThreadLoader(SotLoader *aSotLoader)
+{
+  while(aSotLoader->isDynamicGraphStopped())
+    {
+      usleep(5000);
+    }
+
+  while(!aSotLoader->isDynamicGraphStopped())
+    {
+      aSotLoader->oneIteration();
+      usleep(5000);
+    }
+  cond.notify_all();
+  ros::waitForShutdown();
+}
+
 SotLoader::SotLoader():
   dynamic_graph_stopped_(true),
   sensorsIn_ (),
@@ -47,8 +87,8 @@ SotLoader::SotLoader():
 
 int SotLoader::initPublication()
 {
-  ros::NodeHandle n;
-
+  ros::NodeHandle & n = dynamicgraph::rosInit(false);
+ 
 
   // Prepare message to be published
   joint_pub_ = n.advertise<sensor_msgs::JointState>("joint_states", 1);
@@ -56,6 +96,26 @@ int SotLoader::initPublication()
   return 0;
 }
 
+void SotLoader::startControlLoop()
+{
+  boost::thread thr(workThreadLoader, this);
+}
+
+void SotLoader::initializeRosNode(int , char *[])
+{
+  ROS_INFO("Ready to start dynamic graph.");
+  boost::unique_lock<boost::mutex> lock(mut);
+  boost::thread thr2(createRosSpin,this);
+
+  startControlLoop();
+}   
+
+
+void SotLoader::setDynamicLibraryName(std::string &afilename)
+{
+  dynamicLibraryName_ = afilename;
+}
+
 int SotLoader::readSotVectorStateParam()
 {
   std::map<std::string,int> from_state_name_to_state_vector;