Index: trunk/include/FlairCore/AhrsData.h
===================================================================
--- trunk/include/FlairCore/AhrsData.h	(revision 47)
+++ trunk/include/FlairCore/AhrsData.h	(revision 50)
@@ -121,5 +121,5 @@
   *
   */
-  void SetAngularRates(const Vector3D &angularRates);
+  void SetAngularRates(const Vector3Df &angularRates);
 
   /*!
@@ -131,5 +131,5 @@
   *
   */
-  Vector3D GetAngularRates(void) const;
+  Vector3Df GetAngularRates(void) const;
 
   /*!
@@ -143,5 +143,5 @@
   */
   void GetQuaternionAndAngularRates(Quaternion &quaternion,
-                                    Vector3D &angularRates) const;
+                                    Vector3Df &angularRates) const;
 
   /*!
@@ -155,5 +155,5 @@
   */
   void SetQuaternionAndAngularRates(const Quaternion &quaternion,
-                                    const Vector3D &angularRates);
+                                    const Vector3Df &angularRates);
 
   const Type &GetDataType() const { return dataType; }
@@ -182,5 +182,5 @@
   *
   */
-  Vector3D angularRates;
+  Vector3Df angularRates;
 
   Type dataType;
Index: trunk/include/FlairCore/GpsData.h
===================================================================
--- trunk/include/FlairCore/GpsData.h	(revision 47)
+++ trunk/include/FlairCore/GpsData.h	(revision 50)
@@ -19,5 +19,4 @@
 
   class IODataElement;
-  class Vector3D;
 
 /*! \class GpsData
@@ -42,4 +41,5 @@
       size += UInt8Type.GetSize(); // FixQuality_t
       size += 5*floatType.GetSize();//e,n,u,ve,vn
+      size += 3*floatType.GetSize();//pdop,hdop,vdop
       return size;
     }
@@ -63,4 +63,7 @@
     EastVelocity /*! east velocity*/,
     NorthVelocity /*! north velocity*/,
+    Pdop /* dilution of precision*/,
+    Hdop /* horizontal dilution of precision*/,
+    Vdop /* vertical dilution of precision*/,
   } PlotableData_t;
 
@@ -215,4 +218,28 @@
   */
   void SetFixQuality(FixQuality_t fixQuality);
+  
+  /*!
+  * \brief Get dilution of precision
+  *
+  * This method is mutex protected.
+  *
+  * \param pDop dilution of precision
+  * \param hDop horizontal dilution of precision
+  * \param vDop vertical dilution of precision
+  *
+  */
+  void GetDop(float &pDop, float &hDop,float &vDop) const;
+
+  /*!
+  * \brief Set dilution of precision
+  *
+  * This method is mutex protected.
+  *
+  * \param pDop dilution of precision
+  * \param hDop horizontal dilution of precision
+  * \param vDop vertical dilution of precision
+  *
+  */
+  void SetDop(float pDop, float hDop,float vDop);
 
   Type const &GetDataType() const { return dataType; }
@@ -235,5 +262,5 @@
   uint8_t numberOfSatellites;
   FixQuality_t fixQuality;
-  float east,north,up,eastVelocity,northVelocity;
+  float east,north,up,eastVelocity,northVelocity,pDop,hDop,vDop;
 };
 
Index: trunk/include/FlairCore/I2cPort.h
===================================================================
--- trunk/include/FlairCore/I2cPort.h	(revision 47)
+++ trunk/include/FlairCore/I2cPort.h	(revision 50)
@@ -95,5 +95,5 @@
 };
 } // end namespace core
-} // end namespace framework
+} // end namespace flair
 
 #endif // I2CPORT_H
Index: trunk/include/FlairCore/IODataElement.h
===================================================================
--- trunk/include/FlairCore/IODataElement.h	(revision 47)
+++ trunk/include/FlairCore/IODataElement.h	(revision 50)
@@ -56,5 +56,5 @@
 
 } // end namespace core
-} // end namespace framework
+} // end namespace flair
 
 #endif // IODATAELEMENT_H
Index: trunk/include/FlairCore/IODevice.h
===================================================================
--- trunk/include/FlairCore/IODevice.h	(revision 47)
+++ trunk/include/FlairCore/IODevice.h	(revision 50)
@@ -110,4 +110,14 @@
   */
   void OutputToShMem(bool enabled);
+  
+  /*!
+  * \brief is device ready
+  *
+  * Use it check if a device is ready or not.
+  * See also setIsReady.
+  *
+  * \return true if device is ready
+  */
+  bool IsReady(void) const;
 
   // TODO: these 2 method should be pure virtual
@@ -115,19 +125,29 @@
   virtual DataType const &GetOutputDataType() const;
 
-        protected:
-            /*!
-            * \brief Process the childs of type IODevice, and log if needed
-            *
-            * This method must be called after computing datas;
-            * generally at the end of the reimplemented UpdateFrom or after acquiring datas in case of a sensor. \n
-            * It will call UpdateFrom methods of each child of type IODevice,
-            * and log all datas (this IODevice and its childs)
-            * if logging is enabled (see SetDataToLog(), AddDeviceToLog(),
-            * FrameworkManager::StartLog and FrameworkManager::AddDeviceToLog). \n
-            * If a thread is waiting on this IODevice (see Thread::WaitUpdate), it will be resumed.
-            *
-            * \param data data to process
-            */
-            void ProcessUpdate(io_data* data);
+  protected:
+    /*!
+    * \brief Process the childs of type IODevice, and log if needed
+    *
+    * This method must be called after computing datas;
+    * generally at the end of the reimplemented UpdateFrom or after acquiring datas in case of a sensor. \n
+    * It will call UpdateFrom methods of each child of type IODevice,
+    * and log all datas (this IODevice and its childs)
+    * if logging is enabled (see SetDataToLog(), AddDeviceToLog(),
+    * FrameworkManager::StartLog and FrameworkManager::AddDeviceToLog). \n
+    * If a thread is waiting on this IODevice (see Thread::WaitUpdate), it will be resumed.
+    *
+    * \param data data to process
+    */
+    void ProcessUpdate(io_data* data);
+    
+    /*!
+    * \brief set is ready
+    *
+    * Sets if the device is ready or not. By default the IODevice is not ready.\n
+    * See also isReady.
+    *
+    * \param status status
+    */
+    void SetIsReady(bool status);
 
 private:
Index: trunk/include/FlairCore/ImuData.h
===================================================================
--- trunk/include/FlairCore/ImuData.h	(revision 47)
+++ trunk/include/FlairCore/ImuData.h	(revision 50)
@@ -104,5 +104,5 @@
   *
   */
-  Vector3D GetRawAcc(void) const;
+  Vector3Df GetRawAcc(void) const;
 
   /*!
@@ -114,5 +114,5 @@
   *
   */
-  Vector3D GetRawMag(void) const;
+  Vector3Df GetRawMag(void) const;
 
   /*!
@@ -124,5 +124,5 @@
   *
   */
-  Vector3D GetRawGyr(void) const;
+  Vector3Df GetRawGyr(void) const;
 
   /*!
@@ -136,6 +136,6 @@
   *
   */
-  void GetRawAccMagAndGyr(Vector3D &rawAcc, Vector3D &rawMag,
-                          Vector3D &rawGyr) const;
+  void GetRawAccMagAndGyr(Vector3Df &rawAcc, Vector3Df &rawMag,
+                          Vector3Df &rawGyr) const;
 
   /*!
@@ -147,5 +147,5 @@
   *
   */
-  void SetRawAcc(const Vector3D &rawAcc);
+  void SetRawAcc(const Vector3Df &rawAcc);
 
   /*!
@@ -157,5 +157,5 @@
   *
   */
-  void SetRawMag(const Vector3D &rawMag);
+  void SetRawMag(const Vector3Df &rawMag);
 
   /*!
@@ -167,5 +167,5 @@
   *
   */
-  void SetRawGyr(const Vector3D &rawGyr);
+  void SetRawGyr(const Vector3Df &rawGyr);
 
   /*!
@@ -179,6 +179,6 @@
   *
   */
-  void SetRawAccMagAndGyr(const Vector3D &rawAcc, const Vector3D &rawMag,
-                          const Vector3D &rawGyr);
+  void SetRawAccMagAndGyr(const Vector3Df &rawAcc, const Vector3Df &rawMag,
+                          const Vector3Df &rawGyr);
 
   Type const &GetDataType() const { return dataType; }
@@ -199,5 +199,5 @@
   *
   */
-  Vector3D rawAcc;
+  Vector3Df rawAcc;
 
   /*!
@@ -205,5 +205,5 @@
   *
   */
-  Vector3D rawGyr;
+  Vector3Df rawGyr;
 
   /*!
@@ -211,5 +211,5 @@
   *
   */
-  Vector3D rawMag;
+  Vector3Df rawMag;
 
   void Queue(char **dst, const void *src, size_t size) const;
Index: trunk/include/FlairCore/OneAxisRotation.h
===================================================================
--- trunk/include/FlairCore/OneAxisRotation.h	(revision 47)
+++ trunk/include/FlairCore/OneAxisRotation.h	(revision 50)
@@ -15,4 +15,5 @@
 
 #include <GroupBox.h>
+#include <Vector3D.h>
 
 class OneAxisRotation_impl;
@@ -24,5 +25,4 @@
 
 namespace core {
-class Vector3D;
 class Euler;
 class Quaternion;
@@ -57,7 +57,7 @@
   * \brief Compute rotation
   *
-  * \param vector Vector3D to rotate
+  * \param vector Vector3Df to rotate
   */
-  void ComputeRotation(core::Vector3D &vector) const;
+  template <typename T> void ComputeRotation(core::Vector3D<T> &vector) const;
 
   /*!
@@ -81,4 +81,12 @@
   */
   void ComputeRotation(core::RotationMatrix &matrix) const;
+  
+  /*!
+  * \brief Get angle
+  *
+  * \return angle in radians
+  */
+  float GetAngle() const;
+  int GetAxis() const;
 
 private:
Index: trunk/include/FlairCore/Quaternion.h
===================================================================
--- trunk/include/FlairCore/Quaternion.h	(revision 47)
+++ trunk/include/FlairCore/Quaternion.h	(revision 50)
@@ -13,8 +13,9 @@
 #define QUATERNION_H
 
+#include <Vector3D.h>
+
 namespace flair {
 namespace core {
 class Euler;
-class Vector3D;
 class RotationMatrix;
 
@@ -62,5 +63,5 @@
   * \param logarithm output logarithm
   */
-  void GetLogarithm(Vector3D &logarithm);
+  void GetLogarithm(Vector3Df &logarithm);
 
   /*!
@@ -71,5 +72,5 @@
   * \return output logarithm
   */
-  Vector3D GetLogarithm(void);
+  Vector3Df GetLogarithm(void);
 
   /*!
@@ -92,5 +93,5 @@
   * \return derivative
   */
-  Quaternion GetDerivative(const Vector3D &angularSpeed) const;
+  Quaternion GetDerivative(const Vector3Df &angularSpeed) const;
 
   /*!
@@ -99,5 +100,5 @@
   * \param w rotationonal speed
   */
-  void Derivate(const Vector3D &angularSpeed);
+  void Derivate(const Vector3Df &angularSpeed);
 
   /*!
Index: trunk/include/FlairCore/SerialPort.h
===================================================================
--- trunk/include/FlairCore/SerialPort.h	(revision 47)
+++ trunk/include/FlairCore/SerialPort.h	(revision 50)
@@ -85,5 +85,5 @@
 };
 } // end namespace core
-} // end namespace framework
+} // end namespace flair
 
 #endif // SERIALPORT_H
Index: trunk/include/FlairCore/SharedMem.h
===================================================================
--- trunk/include/FlairCore/SharedMem.h	(revision 47)
+++ trunk/include/FlairCore/SharedMem.h	(revision 50)
@@ -32,4 +32,5 @@
 class SharedMem : public Object {
 public:
+  enum class Type { mutex, producerConsumer };
   /*!
   * \brief Constructor
@@ -40,6 +41,7 @@
   * \param name name
   * \param size size of the shared memory
+  * \param blockOnRead if true reading will block if nothing written
   */
-  SharedMem(const Object *parent, std::string name, size_t size);
+  SharedMem(const Object *parent, std::string name, size_t size, Type type=Type::mutex);
 
   /*!
@@ -65,6 +67,12 @@
   void Read(char *buf, size_t size) const;
 
+
+  /*!
+  * \brief This function should be called when reader starts (in case of a SharedMem of type producerConsumer)
+  */
+   void ReaderReady();
 private:
   SharedMem_impl *pimpl_;
+  Type type;
 };
 
Index: trunk/include/FlairCore/Thread.h
===================================================================
--- trunk/include/FlairCore/Thread.h	(revision 47)
+++ trunk/include/FlairCore/Thread.h	(revision 50)
@@ -176,4 +176,12 @@
   */
   bool IsSuspended(void) const;
+  
+  /*!
+  * \brief Is the thread running?
+  *
+  * \return true if thread is running (call to Start). A suspended thread is running.
+  *
+  */
+  bool IsRunning(void) const;
 
   /*!
Index: trunk/include/FlairCore/UdpSocket.h
===================================================================
--- trunk/include/FlairCore/UdpSocket.h	(revision 50)
+++ trunk/include/FlairCore/UdpSocket.h	(revision 50)
@@ -0,0 +1,111 @@
+// %flair:license{
+// This file is part of the Flair framework distributed under the
+// CECILL-C License, Version 1.0.
+// %flair:license}
+/*!
+ * \file Socket.h
+ * \brief Class defining a UDP socket
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2013/11/17
+ * \version 4.0
+ */
+
+#ifndef UDPSOCKET_H
+#define UDPSOCKET_H
+
+#include <unistd.h>
+#include <stdint.h>
+#include <Object.h>
+
+class UdpSocket_impl;
+
+namespace flair {
+namespace core {
+
+/*! \class UdpSocket
+*
+* \brief Class encapsulating a UDP socket. It assumes packets are coming from
+*only one distant host on a given port.
+*
+*/
+class UdpSocket : public Object {
+public:
+  /*!
+  * \brief Constructor
+  *
+  * Construct the client side of the socket
+  *
+  * \param parent parent
+  * \param name name
+  * \param address server address (ex 192.168.1.1:9000)
+  * \param broadcast true if address is a broadcast address
+  */
+  UdpSocket(const Object *parent, std::string name, std::string address,
+         bool broadcast = false);
+
+  /*!
+  * \brief Constructor
+  *
+  * Construct the server side of the socket
+  *
+  * \param parent parent
+  * \param name name
+  * \param port listening port
+  */
+  UdpSocket(const Object *parent, std::string name, uint16_t port);
+
+  /*!
+  * \brief Destructor
+  *
+  */
+  ~UdpSocket();
+
+  /*!
+  * \brief Send a message
+  *
+  * In case of a broadcast Socket, Parent()->ObjectName() is used as source of
+  *the message, this name should be unique.
+  *
+  * \param message message
+  */
+  void SendMessage(std::string message);
+
+  /*!
+  * \brief Send a message
+  *
+  * \param message message
+  * \param message_len message length
+  */
+  void SendMessage(const char *message, size_t message_len);
+
+  /*!
+  * \brief Receive a message
+  *
+  * Receive a message and wait up to timeout. \n
+  * If src and src_len are specified, the source of the message will be
+  * copied in the src buffer. \n
+  * Note that in case of a broadcast socket, own messages are filtered and
+  * are not received.
+  *
+  * \param buf buffer to put the message
+  * \param buf_len buffer length
+  * \param timeout timeout
+  * \param src buffer to put source name
+  * \param src_len buffer length
+  *
+  * \return size of the received message
+  */
+  ssize_t RecvMessage(char *buf, size_t buf_len, Time timeout, char *src = NULL,
+                      size_t *src_len = NULL);
+
+  void NetworkToHost(char *data, size_t dataSize);
+  void HostToNetwork(char *data, size_t dataSize);
+
+private:
+  class UdpSocket_impl *pimpl_;
+};
+
+} // end namespace core
+} // end namespace flair
+
+#endif // UDPSOCKET_H
Index: trunk/include/FlairCore/Vector2D.h
===================================================================
--- trunk/include/FlairCore/Vector2D.h	(revision 47)
+++ trunk/include/FlairCore/Vector2D.h	(revision 50)
@@ -21,4 +21,5 @@
 * \brief Class defining a 2D vector
 */
+template <typename T>
 class Vector2D {
 public:
@@ -31,5 +32,5 @@
   * \param y
   */
-  Vector2D(float x = 0, float y = 0);
+  Vector2D(T x = 0, T y = 0);
 
   /*!
@@ -73,5 +74,5 @@
   * \param max maximum Vector2D value
   */
-  void Saturate(Vector2D min, Vector2D max);
+  void Saturate(Vector2D<T> min, Vector2D<T> max);
 
   /*!
@@ -92,5 +93,5 @@
   * \param value saturation Vector2D value
   */
-  void Saturate(const Vector2D &value);
+  void Saturate(const Vector2D<T> &value);
 
   /*!
@@ -106,13 +107,21 @@
   * \brief x
   */
-  float x;
+  T x;
 
   /*!
   * \brief y
   */
-  float y;
+  T y;
 
-  Vector2D &operator=(const Vector2D &vector);
+  template<typename S> Vector2D<T> &operator=(const Vector2D<S> &vector) {
+    x = vector.x;
+    y = vector.y;
+    return (*this);
+  }
+  Vector2D<T> &operator+=(const Vector2D<T> &vector);
+  Vector2D<T> &operator-=(const Vector2D<T> &vector);
 };
+
+typedef Vector2D<float> Vector2Df;
 
 /*! Add
@@ -123,5 +132,5 @@
 * \param vectorB vector
 */
-Vector2D operator+(const Vector2D &vectorA, const Vector2D &vectorB);
+template<typename T> Vector2D<T> operator+(const Vector2D<T> &vectorA, const Vector2D<T> &vectorB);
 
 /*! Substract
@@ -132,5 +141,15 @@
 * \param vectorB vector
 */
-Vector2D operator-(const Vector2D &vectorA, const Vector2D &vectorB);
+template<typename T> Vector2D<T> operator-(const Vector2D<T> &vectorA, const Vector2D<T> &vectorB);
+
+/*! Opposite
+*
+* \brief Opposite
+*
+* \param vectorA vector
+* 
+* \return -vectorA
+*/
+template<typename T> Vector2D<T> operator-(const Vector2D<T> &vectorA);
 
 /*! Divid
@@ -142,5 +161,5 @@
 * \return vector/coefficient
 */
-Vector2D operator/(const Vector2D &vector, float coeff);
+template<typename T> Vector2D<T> operator/(const Vector2D<T> &vector, float coeff);
 
 /*! Multiply
@@ -152,5 +171,5 @@
 * \return coefficient*vector
 */
-Vector2D operator*(const Vector2D &vector, float coeff);
+template<typename T> Vector2D<T> operator*(const Vector2D<T> &vector, float coeff);
 
 /*! Multiply
@@ -162,5 +181,5 @@
 * \return coefficient*vector
 */
-Vector2D operator*(float coeff, const Vector2D &vector);
+template<typename T> Vector2D<T> operator*(float coeff, const Vector2D<T> &vector);
 
 } // end namespace core
Index: trunk/include/FlairCore/Vector3D.h
===================================================================
--- trunk/include/FlairCore/Vector3D.h	(revision 47)
+++ trunk/include/FlairCore/Vector3D.h	(revision 50)
@@ -15,8 +15,8 @@
 
 #include <stddef.h>
+#include <Vector2D.h>
 
 namespace flair {
 namespace core {
-class Vector2D;
 class RotationMatrix;
 class Quaternion;
@@ -26,4 +26,5 @@
 * \brief Class defining a 3D vector
 */
+template <typename T>
 class Vector3D {
 public:
@@ -37,5 +38,5 @@
   * \param z
   */
-  Vector3D(float x = 0, float y = 0, float z = 0);
+  Vector3D(T x = 0, T y = 0, T z = 0);
 
   /*!
@@ -48,15 +49,15 @@
   * \brief x
   */
-  float x;
+  T x;
 
   /*!
   * \brief y
   */
-  float y;
+  T y;
 
   /*!
   * \brief z
   */
-  float z;
+  T z;
 
   /*!
@@ -126,5 +127,5 @@
   * \param vector destination
   */
-  void To2Dxy(Vector2D &vector) const;
+  void To2Dxy(Vector2D<T> &vector) const;
 
   /*!
@@ -135,5 +136,5 @@
   * \return destination
   */
-  Vector2D To2Dxy(void) const;
+  Vector2D<T> To2Dxy(void) const;
 
   /*!
@@ -157,5 +158,5 @@
   * \param max maximum value
   */
-  void Saturate(const Vector3D &min, const Vector3D &max);
+  void Saturate(const Vector3D<T> &min, const Vector3D<T> &max);
 
   /*!
@@ -176,5 +177,5 @@
   * \param value saturation Vector3D value
   */
-  void Saturate(const Vector3D &value);
+  void Saturate(const Vector3D<T> &value);
 
   /*!
@@ -188,13 +189,21 @@
   void Saturate(float value);
 
-  float &operator[](size_t idx);
-  const float &operator[](size_t idx) const;
-  Vector3D &operator=(const Vector3D &vector);
-  Vector3D &operator+=(const Vector3D &vector);
-  Vector3D &operator-=(const Vector3D &vector);
+  T &operator[](size_t idx);
+  const T &operator[](size_t idx) const;
+  //Vector3D<T> &operator=(const Vector3D<T> &vector);
+  template<typename S> Vector3D<T> &operator=(const Vector3D<S> &vector) {
+    x = vector.x;
+    y = vector.y;
+    z = vector.z;
+    return (*this);
+  }
+  Vector3D<T> &operator+=(const Vector3D<T> &vector);
+  Vector3D<T> &operator-=(const Vector3D<T> &vector);
 
 private:
 };
 
+typedef Vector3D<float> Vector3Df;
+
 /*! Add
 *
@@ -206,5 +215,5 @@
 * \return vectorA+vectorB
 */
-Vector3D operator+(const Vector3D &vectorA, const Vector3D &vectorB);
+template<typename T> Vector3D<T> operator+(const Vector3D<T> &vectorA, const Vector3D<T> &vectorB);
 
 /*! Substract
@@ -217,5 +226,5 @@
 * \return vectorA-vectorB
 */
-Vector3D operator-(const Vector3D &vectorA, const Vector3D &vectorB);
+template<typename T> Vector3D<T> operator-(const Vector3D<T> &vectorA, const Vector3D<T> &vectorB);
 
 /*! Minus
@@ -227,5 +236,5 @@
 * \return -vector
 */
-Vector3D operator-(const Vector3D &vector);
+template<typename T> Vector3D<T> operator-(const Vector3D<T> &vector);
 
 /*! Divid
@@ -238,5 +247,5 @@
 * \return vector/coefficient
 */
-Vector3D operator/(const Vector3D &vector, float coeff);
+template<typename T> Vector3D<T> operator/(const Vector3D<T> &vector, float coeff);
 
 /*! Hadamard product
@@ -249,5 +258,5 @@
 * \return Hadamard product
 */
-Vector3D operator*(const Vector3D &vectorA, const Vector3D &vectorB);
+template<typename T> Vector3D<T> operator*(const Vector3D<T> &vectorA, const Vector3D<T> &vectorB);
 
 /*! Multiply
@@ -260,5 +269,5 @@
 * \return coefficient*vector
 */
-Vector3D operator*(const Vector3D &vector, float coeff);
+template<typename T> Vector3D<T> operator*(const Vector3D<T> &vector, float coeff);
 
 /*! Multiply
@@ -271,5 +280,5 @@
 * \return coefficient*vector
 */
-Vector3D operator*(float coeff, const Vector3D &vector);
+template<typename T> Vector3D<T> operator*(float coeff, const Vector3D<T> &vector);
 
 /*! Cross product
@@ -282,5 +291,5 @@
 * \return cross product
 */
-Vector3D CrossProduct(const Vector3D &vectorA, const Vector3D &vectorB);
+template<typename T> Vector3D<T> CrossProduct(const Vector3D<T> &vectorA, const Vector3D<T> &vectorB);
 
 /*! Dot product
@@ -293,5 +302,5 @@
 * \return dot product
 */
-float DotProduct(const Vector3D &vectorA, const Vector3D &vectorB);
+template<typename T> float DotProduct(const Vector3D<T> &vectorA, const Vector3D<T> &vectorB);
 
 } // end namespace core
Index: trunk/include/FlairCore/Vector3DSpinBox.h
===================================================================
--- trunk/include/FlairCore/Vector3DSpinBox.h	(revision 47)
+++ trunk/include/FlairCore/Vector3DSpinBox.h	(revision 50)
@@ -44,5 +44,5 @@
   Vector3DSpinBox(const LayoutPosition *position, std::string name, double min,
                   double max, double step, int decimals = 2,
-                  core::Vector3D default_value = core::Vector3D(0, 0, 0));
+                  core::Vector3Df default_value = core::Vector3Df(0, 0, 0));
 
   /*!
@@ -57,5 +57,5 @@
   * \return value
   */
-  core::Vector3D Value(void) const;
+  core::Vector3Df Value(void) const;
   // operator core::Vector3D() const;
 private:
@@ -68,5 +68,5 @@
   void XmlEvent(void);
 
-  core::Vector3D box_value;
+  core::Vector3Df box_value;
 };
 
Index: trunk/include/FlairCore/Vector3Ddata.h
===================================================================
--- trunk/include/FlairCore/Vector3Ddata.h	(revision 47)
+++ trunk/include/FlairCore/Vector3Ddata.h	(revision 50)
@@ -26,5 +26,5 @@
 * User must manually use the io_data's Mutex to access to Vector3D values.
 */
-class Vector3Ddata : public io_data, public Vector3D {
+class Vector3Ddata : public io_data, public Vector3Df {
 public:
   /*!
Index: trunk/include/FlairCore/cvmatrix.h
===================================================================
--- trunk/include/FlairCore/cvmatrix.h	(revision 47)
+++ trunk/include/FlairCore/cvmatrix.h	(revision 50)
@@ -55,8 +55,9 @@
   * Construct an io_data representing a CvMat. \n
   * It uses a cvmatrix_descriptor to get size and elements' names. \n
-  * Names are used for graphs and logs.
+  * Names are used for graphs and logs. \n
+  * All values are initialized to 0.
   *
   * \param parent parent
-  * \param descriptor matrix description
+  * \param descriptor matrix description, it is safe to destroy it after calling this constructor
   * \param type type of matrix elements
   * \param name name
@@ -71,5 +72,6 @@
   *
   * Construct an io_data representing a CvMat. \n
-  * Elements are unamed.
+  * Elements are unamed. \n
+  * All values are initialized to 0.
   *
   * \param parent parent
