diff --git a/include/hpp/manipulation/graph-optimizer.hh b/include/hpp/manipulation/graph-optimizer.hh
index 9b2c15eb5f36acdc1d564c1286e0012a06710e3f..bd2456dc6db65f738cdd99b0ac53a4f03c5bb578 100644
--- a/include/hpp/manipulation/graph-optimizer.hh
+++ b/include/hpp/manipulation/graph-optimizer.hh
@@ -49,7 +49,7 @@ namespace hpp {
       public:
         typedef core::ProblemSolver::PathOptimizerBuilder_t PathOptimizerBuilder_t;
 
-        template <typename InnerPathOptimizer_t>
+        template <typename TraitsOrInnerType>
           static GraphOptimizerPtr_t create (const core::Problem& problem);
 
         virtual PathVectorPtr_t optimize (const PathVectorPtr_t& path);
@@ -80,12 +80,12 @@ namespace hpp {
     /// \}
 
     /// Member function definition
-    template <typename InnerPathOptimizer_t>
+    template <typename TraitsOrInnerType>
       GraphOptimizerPtr_t GraphOptimizer::create
       (const core::Problem& problem)
     {
       return GraphOptimizerPtr_t (
-          new GraphOptimizer (problem, InnerPathOptimizer_t::create)
+          new GraphOptimizer (problem, TraitsOrInnerType::create)
           );
     }
 
diff --git a/src/problem-solver.cc b/src/problem-solver.cc
index d9020524442f8f25425cacfe7d942d4bcae51cba..3c792008b8b4339b243bfa89eec015a3a3ea2d2f 100644
--- a/src/problem-solver.cc
+++ b/src/problem-solver.cc
@@ -45,6 +45,15 @@ namespace hpp {
         core::pathOptimization::PartialShortcutTraits {
           static bool removeLockedJoints () { return false; }
       };
+
+      template <typename InnerConfigOptimizationTraits>
+        struct GraphConfigOptimizationTraits {
+          static core::PathOptimizerPtr_t create (const core::Problem& problem)
+          {
+            return core::pathOptimization::ConfigOptimization::
+              createWithTraits <InnerConfigOptimizationTraits> (problem);
+          }
+        };
     }
 
     std::ostream& operator<< (std::ostream& os, const Device& robot)
@@ -67,6 +76,11 @@ namespace hpp {
       addPathOptimizerType ("ConfigOptimization",
           core::pathOptimization::ConfigOptimization::createWithTraits
           <pathOptimization::ConfigOptimizationTraits>);
+      addPathOptimizerType ("Graph-ConfigOptimization",
+          GraphOptimizer::create <
+          GraphConfigOptimizationTraits
+            <pathOptimization::ConfigOptimizationTraits>
+            >);
       pathPlannerType ("M-RRT");
       pathValidationType ("Graph-discretized", 0.05);
     }