diff --git a/bfps/cpp/particles/particles_interp_spline.hpp b/bfps/cpp/particles/particles_generic_interp.hpp
similarity index 74%
rename from bfps/cpp/particles/particles_interp_spline.hpp
rename to bfps/cpp/particles/particles_generic_interp.hpp
index 8d1fa9a285b9000dc85a96bea6b45f758b03603a..9832bce98eeb84b1907a12f7212f3d258b93955c 100644
--- a/bfps/cpp/particles/particles_interp_spline.hpp
+++ b/bfps/cpp/particles/particles_generic_interp.hpp
@@ -1,23 +1,24 @@
-#ifndef PARTICLES_INTER_SPLINE_HPP
-#define PARTICLES_INTER_SPLINE_HPP
+#ifndef PARTICLES_GENERIC_INTERP_HPP
+#define PARTICLES_GENERIC_INTERP_HPP
 
 template <class real_number, int interp_neighbours, int mode>
-class particles_interp_spline;
+class particles_generic_interp;
 
+#include "Lagrange_polys.hpp"
 #include "spline.hpp"
 
 template <>
-class particles_interp_spline<double, 1,0>{
+class particles_generic_interp<double, 1,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n1_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n1(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 1,1>{
+class particles_generic_interp<double, 1,1>{
 public:
     using real_number = double;
 
@@ -27,7 +28,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 1,2>{
+class particles_generic_interp<double, 1,2>{
 public:
     using real_number = double;
 
@@ -37,17 +38,17 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 2,0>{
+class particles_generic_interp<double, 2,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n2_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n2(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 2,1>{
+class particles_generic_interp<double, 2,1>{
 public:
     using real_number = double;
 
@@ -57,7 +58,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 2,2>{
+class particles_generic_interp<double, 2,2>{
 public:
     using real_number = double;
 
@@ -67,17 +68,17 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 3,0>{
+class particles_generic_interp<double, 3,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n3_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n3(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 3,1>{
+class particles_generic_interp<double, 3,1>{
 public:
     using real_number = double;
 
@@ -87,7 +88,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 3,2>{
+class particles_generic_interp<double, 3,2>{
 public:
     using real_number = double;
 
@@ -97,17 +98,17 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 4,0>{
+class particles_generic_interp<double, 4,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n4_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n4(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 4,1>{
+class particles_generic_interp<double, 4,1>{
 public:
     using real_number = double;
 
@@ -117,7 +118,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 4,2>{
+class particles_generic_interp<double, 4,2>{
 public:
     using real_number = double;
 
@@ -127,17 +128,17 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 5,0>{
+class particles_generic_interp<double, 5,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n5_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n5(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 5,1>{
+class particles_generic_interp<double, 5,1>{
 public:
     using real_number = double;
 
@@ -147,7 +148,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 5,2>{
+class particles_generic_interp<double, 5,2>{
 public:
     using real_number = double;
 
@@ -158,17 +159,17 @@ public:
 
 
 template <>
-class particles_interp_spline<double, 6,0>{
+class particles_generic_interp<double, 6,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n6_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n6(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 6,1>{
+class particles_generic_interp<double, 6,1>{
 public:
     using real_number = double;
 
@@ -178,7 +179,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 6,2>{
+class particles_generic_interp<double, 6,2>{
 public:
     using real_number = double;
 
@@ -189,17 +190,17 @@ public:
 
 
 template <>
-class particles_interp_spline<double, 7,0>{
+class particles_generic_interp<double, 7,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n7_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n7(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 7,1>{
+class particles_generic_interp<double, 7,1>{
 public:
     using real_number = double;
 
@@ -209,7 +210,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 7,2>{
+class particles_generic_interp<double, 7,2>{
 public:
     using real_number = double;
 
@@ -220,17 +221,17 @@ public:
 
 
 template <>
-class particles_interp_spline<double, 8,0>{
+class particles_generic_interp<double, 8,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n8_m0(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n8(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 8,1>{
+class particles_generic_interp<double, 8,1>{
 public:
     using real_number = double;
 
@@ -240,7 +241,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 8,2>{
+class particles_generic_interp<double, 8,2>{
 public:
     using real_number = double;
 
@@ -251,17 +252,18 @@ public:
 
 
 template <>
-class particles_interp_spline<double, 9,0>{
+class particles_generic_interp<double, 9,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        // TODO use beta_Lagrange_n9(in_derivative, in_part_val, poly_val);
         beta_n9_m0(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 9,1>{
+class particles_generic_interp<double, 9,1>{
 public:
     using real_number = double;
 
@@ -271,7 +273,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 9,2>{
+class particles_generic_interp<double, 9,2>{
 public:
     using real_number = double;
 
@@ -282,17 +284,18 @@ public:
 
 
 template <>
-class particles_interp_spline<double, 10,0>{
+class particles_generic_interp<double, 10,0>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        // TODO use beta_Lagrange_n10(in_derivative, in_part_val, poly_val);
         beta_n10_m0(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_interp_spline<double, 10,1>{
+class particles_generic_interp<double, 10,1>{
 public:
     using real_number = double;
 
@@ -302,7 +305,7 @@ public:
 };
 
 template <>
-class particles_interp_spline<double, 10,2>{
+class particles_generic_interp<double, 10,2>{
 public:
     using real_number = double;
 
@@ -311,4 +314,4 @@ public:
     }
 };
 
-#endif
+#endif//PARTICLES_INTERP_SPLINE_HPP
diff --git a/bfps/cpp/particles/particles_system_builder.hpp b/bfps/cpp/particles/particles_system_builder.hpp
index d92c69065e22e0c4e5bc38c1941c9396bdef2c90..6a61a5b340588fb22074ffa559f5947b7fbb9840 100644
--- a/bfps/cpp/particles/particles_system_builder.hpp
+++ b/bfps/cpp/particles/particles_system_builder.hpp
@@ -6,7 +6,7 @@
 #include "abstract_particles_system.hpp"
 #include "particles_system.hpp"
 #include "particles_input_hdf5.hpp"
-#include "particles_interp_spline.hpp"
+#include "particles_generic_interp.hpp"
 
 #include "field.hpp"
 #include "kspace.hpp"
@@ -192,8 +192,8 @@ struct particles_system_build_container {
         const particles_rnumber my_spatial_up_limit_z = particles_rnumber(local_field_offset[IDX_Z]+local_field_dims[IDX_Z])*spatial_partition_width[IDX_Z];
 
         // Create the particles system
-        particles_system<partsize_t, particles_rnumber, field_rnumber, field<field_rnumber, be, THREE>, particles_interp_spline<particles_rnumber, interpolation_size,spline_mode>, interpolation_size>* part_sys
-         = new particles_system<partsize_t, particles_rnumber, field_rnumber, field<field_rnumber, be, THREE>, particles_interp_spline<particles_rnumber, interpolation_size,spline_mode>, interpolation_size>(field_grid_dim,
+        particles_system<partsize_t, particles_rnumber, field_rnumber, field<field_rnumber, be, THREE>, particles_generic_interp<particles_rnumber, interpolation_size,spline_mode>, interpolation_size>* part_sys
+         = new particles_system<partsize_t, particles_rnumber, field_rnumber, field<field_rnumber, be, THREE>, particles_generic_interp<particles_rnumber, interpolation_size,spline_mode>, interpolation_size>(field_grid_dim,
                                                                                                    spatial_box_width,
                                                                                                    spatial_box_offset,
                                                                                                    spatial_partition_width,
diff --git a/setup.py b/setup.py
index eaa5c929f0a57609ba69dd0b4185c7102ffd2b39..2ccc9c77bb517b7c60ed2b84517ab018549dd0fe 100644
--- a/setup.py
+++ b/setup.py
@@ -129,13 +129,13 @@ particle_headers = [
         'cpp/particles/particles_adams_bashforth.hpp',
         'cpp/particles/particles_field_computer.hpp',
         'cpp/particles/particles_input_hdf5.hpp',
-        'cpp/particles/particles_interp_spline.hpp',
+        'cpp/particles/particles_generic_interp.hpp',
         'cpp/particles/particles_output_hdf5.hpp',
         'cpp/particles/particles_output_mpiio.hpp',
         'cpp/particles/particles_system_builder.hpp',
         'cpp/particles/particles_system.hpp',
         'cpp/particles/particles_utils.hpp',
-        'cpp/particles/env_utils.hpp']
+        'cpp/particles/env_utils.hpp' ]
 
 full_code_headers = ['cpp/full_code/main_code.hpp',
                      'cpp/full_code/codes_with_no_output.hpp',