diff --git a/include/hpp/manipulation/graph/edge.hh b/include/hpp/manipulation/graph/edge.hh
index 159b1adec540ed1084b23351ec818f5a38f8dff1..9a25a670a776dfe1c9b9ddc96dbc9af136d1e5f3 100644
--- a/include/hpp/manipulation/graph/edge.hh
+++ b/include/hpp/manipulation/graph/edge.hh
@@ -19,6 +19,7 @@
 
 #include <hpp/core/constraint-set.hh>
 #include <hpp/core/steering-method.hh>
+#include <hpp/core/relative-motion.hh>
 #include <hpp/core/path.hh>
 
 #include "hpp/manipulation/config.hh"
@@ -59,6 +60,8 @@ namespace hpp {
       class HPP_MANIPULATION_DLLAPI Edge : public GraphComponent
       {
         public:
+          typedef core::RelativeMotion RelativeMotion;
+
           /// Destructor
           virtual ~Edge ();
 
@@ -120,6 +123,11 @@ namespace hpp {
 	    return pathValidation_->get();
 	  }
 
+          const RelativeMotion::matrix_type& relativeMotion () const
+          {
+            return relMotion_;
+          }
+
           /// Get direction of the path compare to the edge
           /// \return true is reverse
           virtual bool direction (const core::PathPtr_t& path) const;
@@ -187,6 +195,7 @@ namespace hpp {
 	  SteeringMethod_t* steeringMethod_;
 
 	  /// Path validation associated to the edge
+          mutable RelativeMotion::matrix_type relMotion_;
 	  PathValidation_t* pathValidation_;
 
           /// Weak pointer to itself.
diff --git a/src/graph/edge.cc b/src/graph/edge.cc
index 9e9ee772d3ba91b32658c3b34f3423b49563653d..4e8c30abed1e33a3b271701555e2800b77effb3c 100644
--- a/src/graph/edge.cc
+++ b/src/graph/edge.cc
@@ -254,10 +254,9 @@ namespace hpp {
         // TODO this path validation will not contain obstacles added after
         // its creation.
         pathValidation_->set(problem->pathValidationFactory ());
-        using core::RelativeMotion;
-        RelativeMotion::matrix_type matrix (RelativeMotion::matrix (g->robot()));
-        RelativeMotion::fromConstraint (matrix, g->robot(), constraint);
-        pathValidation_->get()->filterCollisionPairs (matrix);
+        relMotion_ = RelativeMotion::matrix (g->robot());
+        RelativeMotion::fromConstraint (relMotion_, g->robot(), constraint);
+        pathValidation_->get()->filterCollisionPairs (relMotion_);
         return constraint;
       }