diff --git a/include/hpp/manipulation/problem-solver.hh b/include/hpp/manipulation/problem-solver.hh
index b7ac344cdf8fd7d7afaa9a1e34f6b42fc86969ca..45edd5386612f58430f6b8311f5c7becd2ef40ec 100644
--- a/include/hpp/manipulation/problem-solver.hh
+++ b/include/hpp/manipulation/problem-solver.hh
@@ -45,6 +45,8 @@ namespace hpp {
         {
         }
 
+        static ProblemSolverPtr_t create ();
+
         /// Set robot
         /// Check that robot is of type hpp::manipulation::Device
         virtual void robot (const DevicePtr_t& robot)
diff --git a/src/problem-solver.cc b/src/problem-solver.cc
index bb85b1c38f895f8c14797b6ad331e5a9666c9422..b15aedd098de5b0c4ecaf038e66e92e49be76e57 100644
--- a/src/problem-solver.cc
+++ b/src/problem-solver.cc
@@ -38,6 +38,11 @@ namespace hpp {
       return robot.print (os);
     }
 
+    ProblemSolverPtr_t ProblemSolver::create ()
+    {
+      return ProblemSolverPtr_t (new ProblemSolver ());
+    }
+
     void ProblemSolver::resetProblem ()
     {
       if (problem_)