diff --git a/src/problem-solver.cc b/src/problem-solver.cc
index 78951c60f7642ed94488b91a5ce3dad30811b73d..977b713700ca0319e0d2a856fbf1330265a4b8a7 100644
--- a/src/problem-solver.cc
+++ b/src/problem-solver.cc
@@ -24,6 +24,7 @@
 
 #include <hpp/core/random-shortcut.hh>
 #include <hpp/core/discretized-collision-checking.hh>
+#include <hpp/core/path-optimization/partial-shortcut.hh>
 
 #include "hpp/manipulation/device.hh"
 #include "hpp/manipulation/handle.hh"
@@ -38,6 +39,13 @@
 
 namespace hpp {
   namespace manipulation {
+    namespace {
+      struct PartialShortcutTrait :
+        core::pathOptimization::PartialShortcutTrait {
+          static bool removeLockedJoints () { return false; }
+      };
+    }
+
     std::ostream& operator<< (std::ostream& os, const Device& robot)
     {
       return robot.print (os);
@@ -51,6 +59,10 @@ namespace hpp {
           GraphPathValidation::create <core::DiscretizedCollisionChecking>);
       addPathOptimizerType ("Graph-RandomShortcut",
           GraphOptimizer::create <core::RandomShortcut>);
+      addPathOptimizerType ("PartialShortcut", core::pathOptimization::
+          PartialShortcut::createWithTrait <PartialShortcutTrait>);
+      addPathOptimizerType ("Graph-PartialShortcut",
+          GraphOptimizer::create <core::pathOptimization::PartialShortcut>);
       pathPlannerType ("M-RRT");
       pathValidationType ("Graph-discretized", 0.05);
     }