diff --git a/cpp/particles/particles_generic_interp.hpp b/cpp/particles/particles_generic_interp.hpp
index da48641ca543dd853c24d675c1fea8b96f9da449..01f90569d1a9a61d6a8bb0572fef64e9510004f5 100644
--- a/cpp/particles/particles_generic_interp.hpp
+++ b/cpp/particles/particles_generic_interp.hpp
@@ -32,6 +32,9 @@ class particles_generic_interp;
 #include "Lagrange_polys.hpp"
 #include "spline.hpp"
 
+/*****************************************************************************/
+/* Lagrange interpolation */
+
 template <>
 class particles_generic_interp<double, 1,0>{
 public:
@@ -43,122 +46,137 @@ public:
 };
 
 template <>
-class particles_generic_interp<double, 1,1>{
+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_n1_m1(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n2(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 1,2>{
+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_n1_m2(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n3(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 2,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_Lagrange_n2(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n4(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 2,1>{
+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_n2_m1(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n5(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 2,2>{
+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_n2_m2(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n6(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 3,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_Lagrange_n3(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n7(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 3,1>{
+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_n3_m1(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n8(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 3,2>{
+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 {
-        beta_n3_m2(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n9(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 4,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 {
-        beta_Lagrange_n4(in_derivative, in_part_val, poly_val);
+        beta_Lagrange_n10(in_derivative, in_part_val, poly_val);
     }
 };
 
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* spline C1 */
+
 template <>
-class particles_generic_interp<double, 4,1>{
+class particles_generic_interp<double, 1,1>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n4_m1(in_derivative, in_part_val, poly_val);
+        beta_n1_m1(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 4,2>{
+class particles_generic_interp<double, 2,1>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n4_m2(in_derivative, in_part_val, poly_val);
+        beta_n2_m1(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 5,0>{
+class particles_generic_interp<double, 3,1>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_Lagrange_n5(in_derivative, in_part_val, poly_val);
+        beta_n3_m1(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 4,1>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n4_m1(in_derivative, in_part_val, poly_val);
     }
 };
 
@@ -173,95 +191,127 @@ public:
 };
 
 template <>
-class particles_generic_interp<double, 5,2>{
+class particles_generic_interp<double, 6,1>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n5_m2(in_derivative, in_part_val, poly_val);
+        beta_n6_m1(in_derivative, in_part_val, poly_val);
     }
 };
 
+template <>
+class particles_generic_interp<double, 7,1>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n7_m1(in_derivative, in_part_val, poly_val);
+    }
+};
 
 template <>
-class particles_generic_interp<double, 6,0>{
+class particles_generic_interp<double, 8,1>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_Lagrange_n6(in_derivative, in_part_val, poly_val);
+        beta_n8_m1(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 6,1>{
+class particles_generic_interp<double, 9,1>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n6_m1(in_derivative, in_part_val, poly_val);
+        beta_n9_m1(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 6,2>{
+class particles_generic_interp<double, 10,1>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n6_m2(in_derivative, in_part_val, poly_val);
+        beta_n10_m1(in_derivative, in_part_val, poly_val);
     }
 };
 
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* spline C2 */
 
 template <>
-class particles_generic_interp<double, 7,0>{
+class particles_generic_interp<double, 1,2>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_Lagrange_n7(in_derivative, in_part_val, poly_val);
+        beta_n1_m2(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 7,1>{
+class particles_generic_interp<double, 2,2>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n7_m1(in_derivative, in_part_val, poly_val);
+        beta_n2_m2(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 7,2>{
+class particles_generic_interp<double, 3,2>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n7_m2(in_derivative, in_part_val, poly_val);
+        beta_n3_m2(in_derivative, in_part_val, poly_val);
     }
 };
 
+template <>
+class particles_generic_interp<double, 4,2>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n4_m2(in_derivative, in_part_val, poly_val);
+    }
+};
 
 template <>
-class particles_generic_interp<double, 8,0>{
+class particles_generic_interp<double, 5,2>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_Lagrange_n8(in_derivative, in_part_val, poly_val);
+        beta_n5_m2(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 8,1>{
+class particles_generic_interp<double, 6,2>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n8_m1(in_derivative, in_part_val, poly_val);
+        beta_n6_m2(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 7,2>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n7_m2(in_derivative, in_part_val, poly_val);
     }
 };
 
@@ -275,67 +325,177 @@ public:
     }
 };
 
+template <>
+class particles_generic_interp<double, 9,2>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n9_m2(in_derivative, in_part_val, poly_val);
+    }
+};
 
 template <>
-class particles_generic_interp<double, 9, 0>{
+class particles_generic_interp<double, 10,2>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_Lagrange_n9(in_derivative, in_part_val, poly_val);
+        beta_n10_m2(in_derivative, in_part_val, poly_val);
     }
 };
 
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* spline C3 */
+
 template <>
-class particles_generic_interp<double, 9,1>{
+class particles_generic_interp<double, 3,3>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n9_m1(in_derivative, in_part_val, poly_val);
+        beta_n3_m3(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 9,2>{
+class particles_generic_interp<double, 4,3>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n9_m2(in_derivative, in_part_val, poly_val);
+        beta_n4_m3(in_derivative, in_part_val, poly_val);
     }
 };
 
+template <>
+class particles_generic_interp<double, 5,3>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n5_m3(in_derivative, in_part_val, poly_val);
+    }
+};
 
 template <>
-class particles_generic_interp<double, 10,0>{
+class particles_generic_interp<double, 6,3>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_Lagrange_n10(in_derivative, in_part_val, poly_val);
+        beta_n6_m3(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 10,1>{
+class particles_generic_interp<double, 7,3>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n10_m1(in_derivative, in_part_val, poly_val);
+        beta_n7_m3(in_derivative, in_part_val, poly_val);
     }
 };
 
 template <>
-class particles_generic_interp<double, 10,2>{
+class particles_generic_interp<double, 8,3>{
 public:
     using real_number = double;
 
     void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
-        beta_n10_m2(in_derivative, in_part_val, poly_val);
+        beta_n8_m3(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 9,3>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n9_m3(in_derivative, in_part_val, poly_val);
     }
 };
 
+template <>
+class particles_generic_interp<double, 10,3>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n10_m3(in_derivative, in_part_val, poly_val);
+    }
+};
+
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* spline C4 */
+
+template <>
+class particles_generic_interp<double, 5,4>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n5_m4(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 6,4>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n6_m4(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 7,4>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n7_m4(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 8,4>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n8_m4(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 9,4>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n9_m4(in_derivative, in_part_val, poly_val);
+    }
+};
+
+template <>
+class particles_generic_interp<double, 10,4>{
+public:
+    using real_number = double;
+
+    void compute_beta(const int in_derivative, const double in_part_val, double poly_val[]) const {
+        beta_n10_m4(in_derivative, in_part_val, poly_val);
+    }
+};
+
+/*****************************************************************************/
+
 #endif//PARTICLES_INTERP_SPLINE_HPP