diff --git a/include/spline/cubic_function.h b/include/spline/cubic_function.h
index 7fd5125e8c6eeba0635feeabe949f847257c05cb..cee59c3678dd3bcf8a30f685262e26faceab2dd8 100644
--- a/include/spline/cubic_function.h
+++ b/include/spline/cubic_function.h
@@ -16,7 +16,7 @@
 
 #include "MathDefs.h"
 
-#include "curve_abc.h"
+#include "spline_curve.h"
 
 #include <stdexcept>
 
@@ -28,23 +28,30 @@ namespace spline
 /// x(t) = a + b(t - t_min_) + c(t - t_min_)^2 + d(t - t_min_)^3 
 ///
 template<typename Time= double, typename Numeric=Time, std::size_t Dim=3, bool Safe=false
-, typename Point= Eigen::Matrix<Numeric, Dim, 1> >
-struct cubic_function : public curve_abc<Time, Numeric, Dim, Safe, Point>
+, typename Point= Eigen::Matrix<Numeric, Dim, 1>, typename T_Point =std::vector<Point,Eigen::aligned_allocator<Point> > >
+struct cubic_function : public spline_curve<Time, Numeric, Dim,3, Safe, Point, T_Point>
 {
     typedef Point 	point_t;
+    typedef T_Point t_point_t;
   	typedef Time 	time_t;
-  	typedef Numeric	num_t;
+    typedef Numeric	num_t;
+    typedef spline_curve<Time, Numeric, Dim,3, Safe, Point, T_Point> spline_curve_t;
 /* Constructors - destructors */
 	public:
 	///\brief Constructor
 	cubic_function(point_t const& a, point_t const& b, point_t const& c, point_t const &d, time_t min, time_t max)
-        :a_(a), b_(b), c_(c), d_(d), t_min_(min), t_max_(max)
-	{
-        if(t_min_ > t_max_ && Safe)
-        {
-            std::out_of_range("TODO");
-        }
-    }
+        :spline_curve_t(makeVector(a,b,c,d), min, max) {}
+
+
+    ///\brief Constructor
+    cubic_function(const T_Point& coefficients, time_t min, time_t max)
+        :spline_curve_t(coefficients, min, max) {}
+
+
+    ///\brief Constructor
+    template<typename In>
+    cubic_function(In zeroOrderCoefficient, In out, time_t min, time_t max)
+        :spline_curve_t(zeroOrderCoefficient, out, min, max) {}
 
     ///\brief Destructor
     ~cubic_function()
@@ -57,32 +64,15 @@ struct cubic_function : public curve_abc<Time, Numeric, Dim, Safe, Point>
     cubic_function& operator=(const cubic_function&);
 /* Constructors - destructors */
 
-/*Operations*/
-    public:
-    ///  \brief Evaluation of the cubic spline at time t.
-    ///  \param t : the time when to evaluate the spine
-    ///  \param return : the value x(t)
-    virtual point_t operator()(time_t t) const
+    /*Operations*/
+    T_Point makeVector(point_t const& a, point_t const& b, point_t const& c, point_t const &d)
     {
-            if((t < t_min_ || t > t_max_) && Safe){ throw std::out_of_range("TODO");}
-            time_t const dt (t-t_min_);
-            return a_+ b_ * dt + c_ * dt*dt  + d_ * dt*dt*dt;
+        T_Point res;
+        res.push_back(a);res.push_back(b);res.push_back(c);res.push_back(d);
+        return res;
     }
-/*Operations*/
-
-/*Helpers*/
-    public:
-    ///  \brief Returns the minimum time for wich curve is defined
-    num_t virtual min() const {return t_min_;}
-    ///  \brief Returns the maximum time for wich curve is defined
-    num_t virtual max() const {return t_max_;}
-/*Helpers*/
 
-/*Attributes*/
-    public:
-    const point_t a_, b_, c_ ,d_;
-    const time_t t_min_, t_max_;
-/*Attributes*/
+    /*Operations*/
     }; //class CubicFunction
 }
 #endif //_STRUCT_CUBICFUNCTION