diff --git a/doc/Doxyfile.extra.in b/doc/Doxyfile.extra.in
index 5d0ee659857b48b4bd5646538af774441e91e29b..f36a30b8d16c3f7bfd34667bc6b07ef39cbac903 100644
--- a/doc/Doxyfile.extra.in
+++ b/doc/Doxyfile.extra.in
@@ -1,7 +1,7 @@
 INPUT     = @CMAKE_SOURCE_DIR@/doc \
             @CMAKE_SOURCE_DIR@/include \
-            @CMAKE_BINARY_DIR@/doc \
-            @CMAKE_BINARY_DIR@/src/steering-method/cross-state-optimization
+            @CMAKE_SOURCE_DIR@/src/steering-method/cross-state-optimization/function.cc \
+            @CMAKE_BINARY_DIR@/doc
 
 HTML_EXTRA_FILES = @CMAKE_SOURCE_DIR@/doc/ObjectManipulation_MasterThesis_JosephMirabel.pdf
 
diff --git a/include/hpp/manipulation/steering-method/cross-state-optimization.hh b/include/hpp/manipulation/steering-method/cross-state-optimization.hh
index cf040c1edf4d0d6919aaa2404345e3c38018a24e..8b555508fab9dcdbaa1025881e7a490043fd38b3 100644
--- a/include/hpp/manipulation/steering-method/cross-state-optimization.hh
+++ b/include/hpp/manipulation/steering-method/cross-state-optimization.hh
@@ -28,6 +28,31 @@
 namespace hpp {
   namespace manipulation {
     namespace steeringMethod {
+      /// \addtogroup steering_method
+      /// \{
+
+      /// Optimization-based steering method.
+      ///
+      /// #### Methodology
+      ///
+      /// Given two configuration \f$ (q_1,q_2) \f$, this class formulates and
+      /// solves the problem as follows. 
+      /// - Compute the corresponding states \f$ (s_1, s_2) \f$.
+      /// - For a each path \f$ (e_0, ... e_n) \f$ between \f$ (s_1, s_2) \f$
+      ///   in the constraint graph, do:
+      ///   - define \f$ n-1 \f$ intermediate configuration \f$ p_i \f$,
+      ///   - initialize the optimization problem, as explained below,
+      ///   - solve the optimization problem, which gives \f$ p^*_i \f$,
+      ///   - in case of failure, continue the loop.
+      ///   - call the Edge::build of each \f$ e_j \f$ for each consecutive
+      ///     \f$ (p^*_i, p^*_{i+1}) \f$.
+      ///
+      /// #### Problem formulation
+      /// Find \f$ (p_i) \f$ such that:
+      /// - \f$ p_0 = q_1 \f$,
+      /// - \f$ p_{n+1} = q_2 \f$,
+      /// - \f$ p_i \f$ is in state between \f$ (e_{i-1}, e_i) \f$, (\ref StateFunction)
+      /// - \f$ (p_i, p_{i+1}) \f$ are reachable with transition \f$ e_i \f$ (\ref EdgeFunction).
       class HPP_MANIPULATION_DLLAPI CrossStateOptimization :
         public SteeringMethod
       {
@@ -81,6 +106,7 @@ namespace hpp {
           /// Weak pointer to itself
           CrossStateOptimizationWkPtr_t weak_;
       }; // class CrossStateOptimization
+      /// \}
 
       template <typename T>
         CrossStateOptimizationPtr_t CrossStateOptimization::create
diff --git a/include/hpp/manipulation/steering-method/graph.hh b/include/hpp/manipulation/steering-method/graph.hh
index 5374e8099e06eedaa4cb0296e70af87d83504804..b3145b7109500354416b1fab673554c6e0b9707b 100644
--- a/include/hpp/manipulation/steering-method/graph.hh
+++ b/include/hpp/manipulation/steering-method/graph.hh
@@ -28,6 +28,8 @@
 
 namespace hpp {
   namespace manipulation {
+    /// \addtogroup steering_method
+    /// \{
     class HPP_MANIPULATION_DLLAPI SteeringMethod : public core::SteeringMethod
     {
       public:
@@ -61,8 +63,6 @@ namespace hpp {
 
     namespace steeringMethod {
       using core::PathPtr_t;
-      /// \addtogroup steering_method
-      /// \{
 
       class HPP_MANIPULATION_DLLAPI Graph : public SteeringMethod
       {
@@ -119,8 +119,8 @@ namespace hpp {
         gsm->innerSteeringMethod (T::create (problem));
         return gsm;
       }
-      /// \}
     } // namespace steeringMethod
+    /// \}
   } // namespace manipulation
 } // namespace hpp
 
diff --git a/src/steering-method/cross-state-optimization/function.cc b/src/steering-method/cross-state-optimization/function.cc
index 40ea94060c8664823610aed61a1cf7b7f77eb6e0..3ba0c3d79aefbf8eafacf286723ea8ec674ef6ea 100644
--- a/src/steering-method/cross-state-optimization/function.cc
+++ b/src/steering-method/cross-state-optimization/function.cc
@@ -31,7 +31,7 @@ namespace hpp {
         }
       }
 
-      /// Apply the constraint on a subspace of the input space:
+      /// Apply the constraint on a subspace of the input space.
       /// i.e.: \f$ f (q_0, ... , q_n) = f_{inner} (q_k) \f$
       class HPP_MANIPULATION_LOCAL StateFunction :
         public constraints::DifferentiableFunction