diff --git a/include/curves/so3_linear.h b/include/curves/so3_linear.h
index 2d288a9202936a18e61ba9f1380fdf64eb69e1eb..f4ce72e9622833169a597b5c4ee949c6ad5f0d84 100644
--- a/include/curves/so3_linear.h
+++ b/include/curves/so3_linear.h
@@ -87,6 +87,10 @@ namespace curves
       {
         throw std::invalid_argument("can't evaluate bezier curve, time t is out of range"); // TODO
       }
+      if(t > T_max_)
+        return end_rot_;
+      if(t < T_min_)
+        return init_rot_;
       Scalar u = (t-T_min_) / (T_max_ - T_min_);
       return init_rot_.slerp(u,end_rot_);
     }
@@ -103,9 +107,9 @@ namespace curves
     ///  \param t : the time when to evaluate the spline.
     ///  \param order : order of derivative.
     ///  \return \f$\frac{d^Nx(t)}{dt^N}\f$ point corresponding on derivative spline at time t.
-    virtual point3_t derivate(const time_t /*t*/, const std::size_t order) const
+    virtual point3_t derivate(const time_t t, const std::size_t order) const
     {
-      if(order > 1){
+      if(order > 1 || t > T_max_ || t < T_min_){
         return point3_t::Zero(3);
       }else if(order == 1){
         return angular_vel_;