diff --git a/include/spline/cubic_spline.h b/include/spline/cubic_spline.h
index db9af917944773773c95cfa11f9069554a8a89c5..016c54d7a7b16c561abd45bb93b7639dc668b1d1 100644
--- a/include/spline/cubic_spline.h
+++ b/include/spline/cubic_spline.h
@@ -16,7 +16,7 @@
 
 #include "MathDefs.h"
 
-#include "spline_curve.h"
+#include "polynom.h"
 
 #include <stdexcept>
 
@@ -35,11 +35,11 @@ T_Point make_cubic_vector(Point const& a, Point const& b, Point const& c, Point
 }
 
 template<typename Time, typename Numeric, std::size_t Dim, bool Safe, typename Point, typename T_Point>
-spline_curve<Time,Numeric,Dim,Safe,Point,T_Point> create_cubic(Point const& a, Point const& b, Point const& c, Point const &d,
+polynom<Time,Numeric,Dim,Safe,Point,T_Point> create_cubic(Point const& a, Point const& b, Point const& c, Point const &d,
                const Time min, const Time max)
 {
     T_Point coeffs = make_cubic_vector<Point, T_Point>(a,b,c,d);
-    return spline_curve<Time,Numeric,Dim,Safe,Point,T_Point>(coeffs.begin(),coeffs.end(), min, max);
+    return polynom<Time,Numeric,Dim,Safe,Point,T_Point>(coeffs.begin(),coeffs.end(), min, max);
 }
 }
 #endif //_STRUCT_CUBICSPLINE
diff --git a/include/spline/exact_cubic.h b/include/spline/exact_cubic.h
index 63da3389f95c1a14e87a73384a95688e6a33f9cf..354fd0bb48ffbf3da689596e453270efc4f74eae 100644
--- a/include/spline/exact_cubic.h
+++ b/include/spline/exact_cubic.h
@@ -37,7 +37,7 @@ namespace spline
 ///
 template<typename Time= double, typename Numeric=Time, std::size_t Dim=3, bool Safe=false
 , typename Point= Eigen::Matrix<Numeric, Dim, 1>, typename T_Point =std::vector<Point,Eigen::aligned_allocator<Point> >
-, typename SplineBase=spline_curve<Time, Numeric, Dim, Safe, Point, T_Point> >
+, typename SplineBase=polynom<Time, Numeric, Dim, Safe, Point, T_Point> >
 struct exact_cubic : public curve_abc<Time, Numeric, Dim, Safe, Point>
 {
 	typedef Point 	point_t;
diff --git a/include/spline/spline_curve.h b/include/spline/polynom.h
similarity index 79%
rename from include/spline/spline_curve.h
rename to include/spline/polynom.h
index 369ae2a6ac043a1659042b8db8b9ebca979c761a..a8306c3f369de853b0b209da1958f8d4d5189778 100644
--- a/include/spline/spline_curve.h
+++ b/include/spline/polynom.h
@@ -1,18 +1,18 @@
 /**
-* \file spline_curve.h
+* \file polynom.h
 * \brief Definition of a cubic spline.
 * \author Steve T.
 * \version 0.1
 * \date 06/17/2013
 *
-* This file contains definitions for the spline_curve struct.
+* This file contains definitions for the polynom struct.
 * It allows the creation and evaluation of natural
 * smooth splines of arbitrary dimension and order
 */
 
 
-#ifndef _STRUCT_SPLINE
-#define _STRUCT_SPLINE
+#ifndef _STRUCT_POLYNOM
+#define _STRUCT_POLYNOM
 
 #include "MathDefs.h"
 
@@ -25,14 +25,14 @@
 
 namespace spline
 {
-/// \class spline_curve
-/// \brief Represents a spline curve of arbitrary order defined on the interval
+/// \class polynom
+/// \brief Represents a polynomf arbitrary order defined on the interval
 /// [tBegin, tEnd]. It follows the equation
 /// x(t) = a + b(t - t_min_) + ... + d(t - t_min_)^N, where N is the order
 ///
 template<typename Time= double, typename Numeric=Time, std::size_t Dim=3, bool Safe=false,
          typename Point= Eigen::Matrix<Numeric, Dim, 1>, typename T_Point =std::vector<Point,Eigen::aligned_allocator<Point> > >
-struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
+struct polynom : public curve_abc<Time, Numeric, Dim, Safe, Point>
 {
     typedef Point 	point_t;
     typedef Time 	time_t;
@@ -49,7 +49,7 @@ struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
     /// by the number of the columns -1.
     ///\param min: LOWER bound on interval definition of the spline
     ///\param max: UPPER bound on interval definition of the spline
-    spline_curve(const coeff_t& coefficients, const time_t min, const time_t max)
+    polynom(const coeff_t& coefficients, const time_t min, const time_t max)
         : curve_abc_t(),
           coefficients_(coefficients), t_min_(min), t_max_(max), dim_(Dim), order_(coefficients_.cols()-1)
     {
@@ -62,7 +62,7 @@ struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
     /// by the size of the coefficients
     ///\param min: LOWER bound on interval definition of the spline
     ///\param max: UPPER bound on interval definition of the spline
-    spline_curve(const T_Point& coefficients, const time_t min, const time_t max)
+    polynom(const T_Point& coefficients, const time_t min, const time_t max)
         : curve_abc_t(),
           coefficients_(init_coeffs(coefficients.begin(), coefficients.end())),
           t_min_(min), t_max_(max), dim_(Dim), order_(coefficients_.cols()-1)
@@ -77,7 +77,7 @@ struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
     ///\param min: LOWER bound on interval definition of the spline
     ///\param max: UPPER bound on interval definition of the spline
     template<typename In>
-    spline_curve(In zeroOrderCoefficient, In out, const time_t min, const time_t max)
+    polynom(In zeroOrderCoefficient, In out, const time_t min, const time_t max)
         :coefficients_(init_coeffs(zeroOrderCoefficient, out)), dim_(Dim), order_(coefficients_.cols()-1),
           t_min_(min), t_max_(max)
     {
@@ -85,18 +85,18 @@ struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
     }
 
     ///\brief Destructor
-    ~spline_curve()
+    ~polynom()
     {
         // NOTHING
     }
 
 
-    spline_curve(const spline_curve& other)
+    polynom(const polynom& other)
         : coefficients_(other.coefficients_), dim_(other.dim_), order_(other.order_),
           t_min_(other.t_min_), t_max_(other.t_max_){}
 
 
-    //spline_curve& operator=(const spline_curve& other);
+    //polynom& operator=(const polynom& other);
 
     private:
     void safe_check()
@@ -114,7 +114,7 @@ struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
 
 /*Operations*/
     public:
-    ///  \brief Evaluation of the cubic spline at time t.
+    /*///  \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()(const time_t t) const
@@ -126,6 +126,20 @@ struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
         for(int i = 0; i < order_+1; ++i, cdt*=dt)
             currentPoint_ += cdt *coefficients_.col(i);
         return currentPoint_;
+    }*/
+
+
+    ///  \brief Evaluation of the cubic spline at time t using horner's scheme.
+    ///  \param t : the time when to evaluate the spine
+    ///  \param return : the value x(t)
+    virtual point_t operator()(const time_t t) const
+    {
+        if((t < t_min_ || t > t_max_) && Safe){ throw std::out_of_range("TODO");}
+        time_t const dt (t-t_min_);
+        point_t h = coefficients_.col(order_);
+        for(int i=order_-1; i>=0; i--)
+            h = dt*h + coefficients_.col(i);
+        return h;
     }
 
 
@@ -183,7 +197,7 @@ struct spline_curve : public curve_abc<Time, Numeric, Dim, Safe, Point>
             res.col(i) = *cit;
         return res;
     }
-}; //class spline_curve
+}; //class polynom
 }
-#endif //_STRUCT_SPLINE
+#endif //_STRUCT_POLYNOM
 
diff --git a/include/spline/quintic_spline.h b/include/spline/quintic_spline.h
index 5860a6f5450ef01f9b339bba943e491822003171..ae14e4d4d62f5a2467ec9160cbfb307532265b69 100644
--- a/include/spline/quintic_spline.h
+++ b/include/spline/quintic_spline.h
@@ -16,7 +16,7 @@
 
 #include "MathDefs.h"
 
-#include "spline_curve.h"
+#include "polynom.h"
 
 #include <stdexcept>
 
@@ -37,11 +37,11 @@ T_Point make_quintic_vector(Point const& a, Point const& b, Point const& c,
 }
 
 template<typename Time, typename Numeric, std::size_t Dim, bool Safe, typename Point, typename T_Point>
-spline_curve<Time,Numeric,Dim,Safe,Point,T_Point> create_quintic(Point const& a, Point const& b, Point const& c, Point const &d, Point const &e, Point const &f,
+polynom<Time,Numeric,Dim,Safe,Point,T_Point> create_quintic(Point const& a, Point const& b, Point const& c, Point const &d, Point const &e, Point const &f,
                const Time min, const Time max)
 {
     T_Point coeffs = make_quintic_vector<Point, T_Point>(a,b,c,d,e,f);
-    return spline_curve<Time,Numeric,Dim,Safe,Point,T_Point>(coeffs.begin(),coeffs.end(), min, max);
+    return polynom<Time,Numeric,Dim,Safe,Point,T_Point>(coeffs.begin(),coeffs.end(), min, max);
 }
 }
 #endif //_STRUCT_QUINTIC_SPLINE
diff --git a/include/spline/spline_deriv_constraint.h b/include/spline/spline_deriv_constraint.h
index a4ddbb6e8749fb011674cf811546bba353c4f331..304cca63b4b9fc7526a0e30954ceba15e28c0eb8 100644
--- a/include/spline/spline_deriv_constraint.h
+++ b/include/spline/spline_deriv_constraint.h
@@ -40,7 +40,7 @@ namespace spline
 template<typename Time= double, typename Numeric=Time, std::size_t Dim=3, bool Safe=false,
          typename Point= Eigen::Matrix<Numeric, Dim, 1>,
          typename T_Point =std::vector<Point,Eigen::aligned_allocator<Point> >,
-         typename SplineBase=spline_curve<Time, Numeric, Dim, Safe, Point, T_Point> >
+         typename SplineBase=polynom<Time, Numeric, Dim, Safe, Point, T_Point> >
 struct spline_deriv_constraint : public exact_cubic<Time, Numeric, Dim, Safe, Point, T_Point, SplineBase>
 {
     typedef Point 	point_t;
@@ -49,7 +49,7 @@ struct spline_deriv_constraint : public exact_cubic<Time, Numeric, Dim, Safe, Po
     typedef Eigen::Matrix<Numeric, 3, 3> Matrix3;
     typedef Time 	time_t;
     typedef Numeric	num_t;
-    typedef spline_curve<time_t, Numeric, Dim, Safe, point_t, t_point_t> spline_t;
+    typedef polynom<time_t, Numeric, Dim, Safe, point_t, t_point_t> spline_t;
     typedef exact_cubic<time_t, Numeric, Dim, Safe, point_t, t_point_t> exact_cubic_t;
     typedef typename std::vector<spline_t> t_spline_t;
     typedef typename t_spline_t::iterator it_spline_t;
diff --git a/python/spline_python.cpp b/python/spline_python.cpp
index 4777c58bf3f338c82b85e77fb5f45863dc5286a0..1150ce5c72fa34af6cbbbe52f64f5cc91b435177 100644
--- a/python/spline_python.cpp
+++ b/python/spline_python.cpp
@@ -1,5 +1,5 @@
 #include "spline/bezier_curve.h"
-#include "spline/spline_curve.h"
+#include "spline/polynom.h"
 #include "spline/exact_cubic.h"
 #include "spline/spline_deriv_constraint.h"
 #include "spline/curve_constraint.h"
@@ -29,9 +29,9 @@ typedef std::vector<Waypoint6> T_Waypoint6;
 
 typedef spline::bezier_curve  <real, real, 3, true, point_t> bezier_t;
 typedef spline::bezier_curve  <real, real, 6, true, point6_t> bezier6_t;
-typedef spline::spline_curve  <real, real, 3, true, point_t, t_point_t> spline_curve_t;
+typedef spline::polynom  <real, real, 3, true, point_t, t_point_t> polynom_t;
 typedef spline::exact_cubic  <real, real, 3, true, point_t, t_point_t> exact_cubic_t;
-typedef spline_curve_t::coeff_t coeff_t;
+typedef polynom_t::coeff_t coeff_t;
 typedef std::pair<real, point_t> waypoint_t;
 typedef std::vector<waypoint_t, Eigen::aligned_allocator<point_t> > t_waypoint_t;
 
@@ -43,7 +43,7 @@ typedef spline::curve_constraints<point6_t> curve_constraints6_t;
 
 EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(bezier_t)
 EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(bezier6_t)
-EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(spline_curve_t)
+EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(polynom_t)
 EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(exact_cubic_t)
 EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(curve_constraints_t)
 EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(spline_deriv_constraint_t)
@@ -111,9 +111,9 @@ bezier6_t* wrapBezierConstructorBounds6Constraints(const point_list6_t& array, c
 }
 /*END 6D constructors */
 
-spline_curve_t* wrapSplineConstructor(const coeff_t& array)
+polynom_t* wrapSplineConstructor(const coeff_t& array)
 {
-    return new spline_curve_t(array, 0., 1.);
+    return new polynom_t(array, 0., 1.);
 }
 
 
@@ -255,12 +255,12 @@ BOOST_PYTHON_MODULE(spline)
 
 
     /** BEGIN spline curve function**/
-    class_<spline_curve_t>("spline",  init<const spline_curve_t::coeff_t, const real, const real >())
+    class_<polynom_t>("polynom",  init<const polynom_t::coeff_t, const real, const real >())
             .def("__init__", make_constructor(&wrapSplineConstructor))
-            .def("min", &spline_curve_t::min)
-            .def("max", &spline_curve_t::max)
-            .def("__call__", &spline_curve_t::operator())
-            .def("derivate", &spline_curve_t::derivate)
+            .def("min", &polynom_t::min)
+            .def("max", &polynom_t::max)
+            .def("__call__", &polynom_t::operator())
+            .def("derivate", &polynom_t::derivate)
         ;
     /** END cubic function**/
 
diff --git a/python/test/test.py b/python/test/test.py
index 8840c541fda0f335b89fe3bd1c7b60635fb65a85..7075a3d99c6d7b85ceda1b99f808ae0bf8c6c873 100644
--- a/python/test/test.py
+++ b/python/test/test.py
@@ -1,4 +1,4 @@
-from spline import bezier, bezier6, spline, exact_cubic, curve_constraints, spline_deriv_constraint
+from spline import bezier, bezier6, polynom, exact_cubic, curve_constraints, spline_deriv_constraint
 
 from numpy import matrix
 from numpy.linalg import norm
@@ -46,9 +46,9 @@ assert norm(a.derivate(0,1) - c.init_vel) < 1e-10
 assert norm(a.derivate(1,2) - c.end_acc) < 1e-10
 
 
-#testing spline function
-a = spline(waypoints)
-a = spline(waypoints, -1., 3.)
+#testing polynom function
+a = polynom(waypoints)
+a = polynom(waypoints, -1., 3.)
 a.min()
 a.max()
 a(0.4)
diff --git a/src/tests/spline_test/Main.cpp b/src/tests/spline_test/Main.cpp
index 6579c1accc186ec3695737c510a7260595aff87b..6a20615b0609443b3e1d23e859937594b95e99d0 100644
--- a/src/tests/spline_test/Main.cpp
+++ b/src/tests/spline_test/Main.cpp
@@ -1,7 +1,7 @@
 
 #include "spline/exact_cubic.h"
 #include "spline/bezier_curve.h"
-#include "spline/spline_curve.h"
+#include "spline/polynom.h"
 #include "spline/spline_deriv_constraint.h"
 #include "spline/helpers/effector_spline.h"
 #include "spline/helpers/effector_spline_rotation.h"
@@ -16,7 +16,7 @@ namespace spline
 {
 typedef Eigen::Vector3d point_t;
 typedef std::vector<point_t,Eigen::aligned_allocator<point_t> >  t_point_t;
-typedef spline_curve  <double, double, 3, true, point_t, t_point_t> spline_curve_t;
+typedef polynom  <double, double, 3, true, point_t, t_point_t> polynom_t;
 typedef exact_cubic <double, double, 3, true, point_t> exact_cubic_t;
 typedef spline_deriv_constraint <double, double, 3, true, point_t> spline_deriv_constraint_t;
 typedef bezier_curve  <double, double, 3, true, point_t> bezier_curve_t;
@@ -26,7 +26,7 @@ typedef std::vector<Waypoint> T_Waypoint;
 
 
 typedef Eigen::Matrix<double,1,1> point_one;
-typedef spline_curve<double, double, 1, true, point_one> spline_curve_one;
+typedef polynom<double, double, 1, true, point_one> polynom_one;
 typedef exact_cubic   <double, double, 1, true, point_one> exact_cubic_one;
 typedef std::pair<double, point_one> WaypointOne;
 typedef std::vector<WaypointOne> T_WaypointOne;
@@ -68,28 +68,28 @@ void ComparePoints(const Eigen::VectorXd& pt1, const Eigen::VectorXd& pt2, const
 
 void CubicFunctionTest(bool& error)
 {
-	std::string errMsg("In test CubicFunctionTest ; unexpected result for x ");
+    std::string errMsg("In test CubicFunctionTest ; unexpected result for x ");
 	point_t a(1,2,3);
 	point_t b(2,3,4);
 	point_t c(3,4,5);
-	point_t d(3,6,7);
+    point_t d(3,6,7);
     t_point_t vec;
     vec.push_back(a);
     vec.push_back(b);
     vec.push_back(c);
     vec.push_back(d);
-    spline_curve_t cf(vec.begin(), vec.end(), 0, 1);
-	point_t res1;
-	res1 =cf(0); 
-	point_t x0(1,2,3);
+    polynom_t cf(vec.begin(), vec.end(), 0, 1);
+    point_t res1;
+    res1 =cf(0);
+    point_t x0(1,2,3);
     ComparePoints(x0, res1, errMsg + "(0) ", error);
-	
+
     point_t x1(9,15,19);
     res1 =cf(1);
     ComparePoints(x1, res1, errMsg + "(1) ", error);
-	
-	point_t x2(3.125,5.25,7.125);
-	res1 =cf(0.5);
+
+    point_t x2(3.125,5.25,7.125);
+    res1 =cf(0.5);
     ComparePoints(x2, res1, errMsg + "(0.5) ", error);
 
     vec.clear();
@@ -97,45 +97,45 @@ void CubicFunctionTest(bool& error)
     vec.push_back(b);
     vec.push_back(c);
     vec.push_back(d);
-    spline_curve_t cf2(vec, 0.5, 1);
-	res1 = cf2(0.5); 
+    polynom_t cf2(vec, 0.5, 1);
+    res1 = cf2(0.5);
     ComparePoints(x0, res1, errMsg + "x3 ", error);
-	error = true;	
-	try
-	{
-		cf2(0.4);
-	}
-	catch(...)
-	{
-		error = false;
-	}
-	if(error)
-	{
-		std::cout << "Evaluation of cubic cf2 error, 0.4 should be an out of range value\n";
-	}
-	error = true;	
-	try
-	{
-		cf2(1.1);
-	}
-	catch(...)
-	{
-		error = false;
-	}
-	if(error)
-	{
-		std::cout << "Evaluation of cubic cf2 error, 1.1 should be an out of range value\n";
-	}
-	if(cf.max() != 1)
-	{
-		error = true;
-		std::cout << "Evaluation of exactCubic error, MaxBound should be equal to 1\n";
-	}
-	if(cf.min() != 0)
-	{
-		error = true;
-		std::cout << "Evaluation of exactCubic error, MinBound should be equal to 1\n";
-	}
+    error = true;
+    try
+    {
+        cf2(0.4);
+    }
+    catch(...)
+    {
+        error = false;
+    }
+    if(error)
+    {
+        std::cout << "Evaluation of cubic cf2 error, 0.4 should be an out of range value\n";
+    }
+    error = true;
+    try
+    {
+        cf2(1.1);
+    }
+    catch(...)
+    {
+        error = false;
+    }
+    if(error)
+    {
+        std::cout << "Evaluation of cubic cf2 error, 1.1 should be an out of range value\n";
+    }
+    if(cf.max() != 1)
+    {
+        error = true;
+        std::cout << "Evaluation of exactCubic error, MaxBound should be equal to 1\n";
+    }
+    if(cf.min() != 0)
+    {
+        error = true;
+        std::cout << "Evaluation of exactCubic error, MinBound should be equal to 1\n";
+    }
 }
 
 /*bezier_curve Function tests*/