diff --git a/include/hpp/manipulation/device.hh b/include/hpp/manipulation/device.hh
index 62c3d68f89b790cc6d0e122afa0266b521814c05..31bb3a8239dee1fb40e350ddbd3c8a34d4c0277b 100644
--- a/include/hpp/manipulation/device.hh
+++ b/include/hpp/manipulation/device.hh
@@ -51,12 +51,7 @@ class HPP_MANIPULATION_DLLAPI Device : public pinocchio::HumanoidRobot {
 
   /// Constructor
   /// \param name of the new instance,
-  static DevicePtr_t create(const std::string& name) {
-    Device* ptr = new Device(name);
-    DevicePtr_t shPtr(ptr);
-    ptr->init(shPtr);
-    return shPtr;
-  }
+  static DevicePtr_t create(const std::string& name);
 
   DevicePtr_t self() const { return self_.lock(); }
 
@@ -84,7 +79,7 @@ class HPP_MANIPULATION_DLLAPI Device : public pinocchio::HumanoidRobot {
   /// \param name of the new instance,
   /// \param robot Robots that manipulate objects,
   /// \param objects Set of objects manipulated by the robot.
-  Device(const std::string& name) : Parent_t(name) {}
+  Device(const std::string& name);
 
   void init(const DeviceWkPtr_t& self) {
     Parent_t::init(self);
diff --git a/src/device.cc b/src/device.cc
index 36d286453fcd164e6d58dcb002dd88055bac241a..6ffddde62dbbbcf45f71a640ef5f7deca70e8ace 100644
--- a/src/device.cc
+++ b/src/device.cc
@@ -43,6 +43,17 @@ namespace hpp {
 namespace manipulation {
 using ::pinocchio::Frame;
 
+DevicePtr_t Device::create(const std::string& name) {
+  Device* ptr = new Device(name);
+  DevicePtr_t shPtr(ptr);
+  ptr->init(shPtr);
+  return shPtr;
+}
+
+Device::Device(const std::string& name) : Parent_t(name)
+{
+}
+
 pinocchio::DevicePtr_t Device::clone() const {
   Device* ptr = new Device(*this);
   DevicePtr_t shPtr(ptr);