diff --git a/include/hpp/manipulation/path-optimization/enforce-transition-semantic.hh b/include/hpp/manipulation/path-optimization/enforce-transition-semantic.hh
index 570e0d6bc39944fd7d4309886da396b570101411..2a15ca687569dd0b116dba03fd9e95793ec6219e 100644
--- a/include/hpp/manipulation/path-optimization/enforce-transition-semantic.hh
+++ b/include/hpp/manipulation/path-optimization/enforce-transition-semantic.hh
@@ -38,6 +38,7 @@ namespace hpp {
 
           static Ptr_t create (const core::ProblemConstPtr_t& problem) {
             ProblemConstPtr_t p (HPP_DYNAMIC_PTR_CAST(const Problem, problem));
+            if (!p) throw std::invalid_argument("This is not a manipulation problem.");
             return Ptr_t (new EnforceTransitionSemantic (p));
           }
 
diff --git a/src/path-optimization/spline-gradient-based.cc b/src/path-optimization/spline-gradient-based.cc
index 592d8788e8d253f3599c8f4ae3992962cd45e6a5..8a961abdbfc259d443587e84e796d8ca12c2b2df 100644
--- a/src/path-optimization/spline-gradient-based.cc
+++ b/src/path-optimization/spline-gradient-based.cc
@@ -50,7 +50,8 @@ namespace hpp {
       typename SplineGradientBased<_PB, _SO>::Ptr_t SplineGradientBased<_PB, _SO>::createFromCore
       (const core::ProblemConstPtr_t& problem)
       {
-        assert(HPP_DYNAMIC_PTR_CAST(const Problem, problem));
+        if (!HPP_DYNAMIC_PTR_CAST(const Problem, problem))
+          throw std::invalid_argument("This is not a manipulation problem.");
         return create (HPP_STATIC_PTR_CAST(const Problem, problem));
       }