diff --git a/CMakeLists.txt b/CMakeLists.txt
index 006d985a2120ff563e7b75b060f445193142845c..17f55ec81591cb2e99ea0c0ed99420e3b8330950 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -303,7 +303,7 @@ set(cpp_for_lib
     ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEcomplex_particles.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE_Stokes_particles.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEp_extra_sampling.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_inner_computer.cpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/ornstein_uhlenbeck_process.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/ou_vorticity_equation.cpp)
 
@@ -354,22 +354,22 @@ set(hpp_for_lib
     ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEcomplex_particles.hpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE_Stokes_particles.hpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEp_extra_sampling.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_inner_computer.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_inner_computer_2nd_order.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_inner_computer_empty.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer_2nd_order.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer_empty.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_input.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_output.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_system.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_system_with_p2p.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/alltoall_exchanger.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/lock_free_bool_array.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p_computer_empty.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p_computer.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p_ghost_collision_base.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p_ghost_collisions.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p_cylinder_collisions.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p_distr_mpi.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p_tree.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_computer_empty.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_computer.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_ghost_collision_base.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_ghost_collisions.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_cylinder_collisions.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_distr_mpi.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_tree.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/particles_adams_bashforth.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/particles_distr_mpi.hpp
     ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/particles_field_computer.hpp
diff --git a/cpp/full_code/NSVE_Stokes_particles.cpp b/cpp/full_code/NSVE_Stokes_particles.cpp
index a4b3c41e8908a853333d6041b073d8742021b87a..a3e4dd381c4b2e11e1b5963407f0dd91d2a34793 100644
--- a/cpp/full_code/NSVE_Stokes_particles.cpp
+++ b/cpp/full_code/NSVE_Stokes_particles.cpp
@@ -26,11 +26,11 @@
 
 #include <string>
 #include <cmath>
-#include "NSVE_Stokes_particles.hpp"
+#include "full_code/NSVE_Stokes_particles.hpp"
 #include "scope_timer.hpp"
 #include "particles/particles_sampling.hpp"
-#include "particles/p2p_ghost_collisions.hpp"
-#include "particles/particles_inner_computer_2nd_order.hpp"
+#include "particles/p2p/p2p_ghost_collisions.hpp"
+#include "particles/inner/particles_inner_computer_2nd_order.hpp"
 
 template <typename rnumber>
 int NSVE_Stokes_particles<rnumber>::initialize(void)
diff --git a/cpp/full_code/NSVEcomplex_particles.cpp b/cpp/full_code/NSVEcomplex_particles.cpp
index d7e500920d6ef6ac3375804bf922425b4a5277a8..e82f1054666e0f277fb7adf576b2e0990f131600 100644
--- a/cpp/full_code/NSVEcomplex_particles.cpp
+++ b/cpp/full_code/NSVEcomplex_particles.cpp
@@ -26,11 +26,11 @@
 
 #include <string>
 #include <cmath>
-#include "NSVEcomplex_particles.hpp"
+#include "full_code/NSVEcomplex_particles.hpp"
 #include "scope_timer.hpp"
 #include "particles/particles_sampling.hpp"
-#include "particles/p2p_computer.hpp"
-#include "particles/particles_inner_computer.hpp"
+#include "particles/p2p/p2p_computer.hpp"
+#include "particles/inner/particles_inner_computer.hpp"
 
 template <typename rnumber>
 int NSVEcomplex_particles<rnumber>::initialize(void)
diff --git a/cpp/particles/particles_inner_computer.cpp b/cpp/particles/inner/particles_inner_computer.cpp
similarity index 99%
rename from cpp/particles/particles_inner_computer.cpp
rename to cpp/particles/inner/particles_inner_computer.cpp
index d1e346c8376105aefc307870224d418c304d6a0d..2a8ac8da1ab7978a123569b9a052f9821423e9da 100644
--- a/cpp/particles/particles_inner_computer.cpp
+++ b/cpp/particles/inner/particles_inner_computer.cpp
@@ -24,8 +24,8 @@
 
 
 #include "base.hpp"
-#include "particles_utils.hpp"
-#include "particles_inner_computer.hpp"
+#include "particles/particles_utils.hpp"
+#include "particles/inner/particles_inner_computer.hpp"
 
 #include <cmath>
 
diff --git a/cpp/particles/particles_inner_computer.hpp b/cpp/particles/inner/particles_inner_computer.hpp
similarity index 100%
rename from cpp/particles/particles_inner_computer.hpp
rename to cpp/particles/inner/particles_inner_computer.hpp
diff --git a/cpp/particles/particles_inner_computer_2nd_order.hpp b/cpp/particles/inner/particles_inner_computer_2nd_order.hpp
similarity index 100%
rename from cpp/particles/particles_inner_computer_2nd_order.hpp
rename to cpp/particles/inner/particles_inner_computer_2nd_order.hpp
diff --git a/cpp/particles/particles_inner_computer_empty.hpp b/cpp/particles/inner/particles_inner_computer_empty.hpp
similarity index 100%
rename from cpp/particles/particles_inner_computer_empty.hpp
rename to cpp/particles/inner/particles_inner_computer_empty.hpp
diff --git a/cpp/particles/p2p_computer.hpp b/cpp/particles/p2p/p2p_computer.hpp
similarity index 100%
rename from cpp/particles/p2p_computer.hpp
rename to cpp/particles/p2p/p2p_computer.hpp
diff --git a/cpp/particles/p2p_computer_empty.hpp b/cpp/particles/p2p/p2p_computer_empty.hpp
similarity index 100%
rename from cpp/particles/p2p_computer_empty.hpp
rename to cpp/particles/p2p/p2p_computer_empty.hpp
diff --git a/cpp/particles/p2p_cylinder_collisions.hpp b/cpp/particles/p2p/p2p_cylinder_collisions.hpp
similarity index 100%
rename from cpp/particles/p2p_cylinder_collisions.hpp
rename to cpp/particles/p2p/p2p_cylinder_collisions.hpp
diff --git a/cpp/particles/p2p_distr_mpi.hpp b/cpp/particles/p2p/p2p_distr_mpi.hpp
similarity index 99%
rename from cpp/particles/p2p_distr_mpi.hpp
rename to cpp/particles/p2p/p2p_distr_mpi.hpp
index 69995c9e0fa05444ea682c38dab36dc1c99829d4..a525d154c7fe78d3bf3a4b122d13607ae514737c 100644
--- a/cpp/particles/p2p_distr_mpi.hpp
+++ b/cpp/particles/p2p/p2p_distr_mpi.hpp
@@ -37,9 +37,9 @@
 #include <algorithm>
 
 #include "scope_timer.hpp"
-#include "particles_utils.hpp"
-#include "p2p_tree.hpp"
-#include "lock_free_bool_array.hpp"
+#include "particles/particles_utils.hpp"
+#include "particles/p2p/p2p_tree.hpp"
+#include "particles/lock_free_bool_array.hpp"
 
 template <class partsize_t, class real_number>
 class p2p_distr_mpi {
diff --git a/cpp/particles/p2p_ghost_collision_base.hpp b/cpp/particles/p2p/p2p_ghost_collision_base.hpp
similarity index 100%
rename from cpp/particles/p2p_ghost_collision_base.hpp
rename to cpp/particles/p2p/p2p_ghost_collision_base.hpp
diff --git a/cpp/particles/p2p_ghost_collisions.hpp b/cpp/particles/p2p/p2p_ghost_collisions.hpp
similarity index 98%
rename from cpp/particles/p2p_ghost_collisions.hpp
rename to cpp/particles/p2p/p2p_ghost_collisions.hpp
index 82662695af316fd7bbce7e311feec2c9c1c48ee0..dd9dd222f711957fa1c8c6fbf7eba003064d1d8e 100644
--- a/cpp/particles/p2p_ghost_collisions.hpp
+++ b/cpp/particles/p2p/p2p_ghost_collisions.hpp
@@ -27,7 +27,7 @@
 #include <set>
 #include <utility>
 #include <vector>
-#include "particles/p2p_ghost_collision_base.hpp"
+#include "particles/p2p/p2p_ghost_collision_base.hpp"
 
 
 template <class real_number, class partsize_t>
diff --git a/cpp/particles/p2p_merge_collisions.hpp b/cpp/particles/p2p/p2p_merge_collisions.hpp
similarity index 100%
rename from cpp/particles/p2p_merge_collisions.hpp
rename to cpp/particles/p2p/p2p_merge_collisions.hpp
diff --git a/cpp/particles/p2p_tree.hpp b/cpp/particles/p2p/p2p_tree.hpp
similarity index 100%
rename from cpp/particles/p2p_tree.hpp
rename to cpp/particles/p2p/p2p_tree.hpp
diff --git a/cpp/particles/particles_system.hpp b/cpp/particles/particles_system.hpp
index 8e27fef0fe8290ab69d8a0a8cdb448270aa74f84..6ed1a890f2acc4b9bac5bed7e14e85074bd57d48 100644
--- a/cpp/particles/particles_system.hpp
+++ b/cpp/particles/particles_system.hpp
@@ -40,7 +40,7 @@
 #include "particles/particles_adams_bashforth.hpp"
 #include "scope_timer.hpp"
 
-#include "particles/p2p_distr_mpi.hpp"
+#include "particles/p2p/p2p_distr_mpi.hpp"
 
 template <class partsize_t, class real_number, class field_rnumber, class field_class, class interpolator_class, int interp_neighbours,
           int size_particle_positions, int size_particle_rhs, class p2p_computer_class, class particles_inner_computer_class>
diff --git a/cpp/particles/particles_system_builder.hpp b/cpp/particles/particles_system_builder.hpp
index dbf6ace3c485534330e0f9671cb02954fbc771c4..2e3b9fa90212602ac803a1a8de0201320e4f467e 100644
--- a/cpp/particles/particles_system_builder.hpp
+++ b/cpp/particles/particles_system_builder.hpp
@@ -33,13 +33,14 @@
 #include "particles/particles_system.hpp"
 #include "particles/particles_input_hdf5.hpp"
 #include "particles/interpolation/particles_generic_interp.hpp"
-#include "particles/p2p_computer_empty.hpp"
-#include "particles/particles_inner_computer_empty.hpp"
+#include "particles/p2p/p2p_computer_empty.hpp"
+#include "particles/inner/particles_inner_computer_empty.hpp"
 
 #include "field.hpp"
 #include "kspace.hpp"
 
-
+const int MAX_INTERPOLATION_NEIGHBOURS=5;
+const int MAX_INTERPOLATION_SMOOTHNESS=2;
 
 //////////////////////////////////////////////////////////////////////////////
 ///
@@ -297,8 +298,8 @@ inline std::unique_ptr<abstract_particles_system<partsize_t, particles_rnumber>>
         MPI_Comm mpi_comm,
         const int in_current_iteration){
     return Template_double_for_if::evaluate<std::unique_ptr<abstract_particles_system<partsize_t, particles_rnumber>>,
-                       int, 1, 11, 1, // interpolation_size
-                       int, 0, 5, 1, // spline_mode
+                       int, 1, MAX_INTERPOLATION_NEIGHBOURS, 1, // interpolation_size
+                       int, 0, MAX_INTERPOLATION_SMOOTHNESS, 1, // spline_mode
                        particles_system_build_container<partsize_t, field_rnumber,be,fc,particles_rnumber,
                                                         p2p_computer_empty<particles_rnumber,partsize_t>,
                                                         particles_inner_computer_empty<particles_rnumber,partsize_t>,
@@ -327,8 +328,8 @@ inline std::unique_ptr<abstract_particles_system_with_p2p<partsize_t, particles_
         particles_inner_computer_class inner_computer,
         const particles_rnumber cutoff){
     return Template_double_for_if::evaluate<std::unique_ptr<abstract_particles_system_with_p2p<partsize_t, particles_rnumber, p2p_computer_class>>,
-                       int, 1, 11, 1, // interpolation_size
-                       int, 0, 5, 1, // spline_mode
+                       int, 1, MAX_INTERPOLATION_NEIGHBOURS, 1, // interpolation_size
+                       int, 0, MAX_INTERPOLATION_SMOOTHNESS, 1, // spline_mode
                        particles_system_build_container<partsize_t, field_rnumber,be,fc,particles_rnumber,
                                                         p2p_computer_class,
                                                         particles_inner_computer_class,