diff --git a/cpp/particles/p2p/p2p_ghost_collisions.hpp b/cpp/particles/p2p/p2p_ghost_collisions.hpp
index 84bb63b0ade72e75c077dff5fdb197cf8f1d85c1..4bf83c850f7f8ec87aab7b9ff5d2bb5aaab93c96 100644
--- a/cpp/particles/p2p/p2p_ghost_collisions.hpp
+++ b/cpp/particles/p2p/p2p_ghost_collisions.hpp
@@ -41,16 +41,28 @@ void print_pair_vec(std::vector<partsize_t> vec)
 template <class real_number, class partsize_t>
 class p2p_ghost_collisions
 {
-    private:
+    protected:
         const double pi  = atan(1.0)*4;
         const double pi2 = atan(1.0)*8;
-        // depending on the particle shape, we will be deciding whether particles intersect in different ways
+
+        enum particle_shape {CYLINDER, SPHERE, DISK};
+
+    private:
+        bool isActive;
+
+        bool synchronisation;
+
+        // description for cylinders:
+        double cylinder_width;
+        double cylinder_length;
 
         // description for disks:
         double disk_width;
-   protected:        
-       enum particle_shape {CYLINDER, SPHERE, DISK};
-       particle_shape current_particle_shape;
+
+        // depending on the particle shape, we will be deciding whether particles intersect in different ways
+        particle_shape current_particle_shape;
+
+    protected:
         void add_colliding_pair(partsize_t idx_part1, partsize_t idx_part2)
         {
             // store colliding particle ids in order, to be able to identify pairs more easily
@@ -65,21 +77,15 @@ class p2p_ghost_collisions
             this->collision_pairs_local.push_back(idx_part_small);
             this->collision_pairs_local.push_back(idx_part_big);
         }
-        // description for cylinders:
-        double cylinder_width;
-        double cylinder_length;
 
-        bool isActive;
-        
-        bool synchronisation;
         std::vector <partsize_t> collision_pairs_local;
         std::vector <partsize_t> collision_pairs_global;
 
 public:
     p2p_ghost_collisions(): current_particle_shape(SPHERE), cylinder_width(1.0), cylinder_length(1.0), disk_width(1.0), isActive(true), synchronisation(false) {}
 
-    // Copy constructor use a counter set to zero
-    p2p_ghost_collisions(const p2p_ghost_collisions& src)
+
+    void copy_from_p2p_ghost_collisions(const p2p_ghost_collisions<real_number, partsize_t>& src)
     {
         this->current_particle_shape = src.current_particle_shape;
         this->cylinder_width = src.cylinder_width;
@@ -90,6 +96,12 @@ public:
         this->collision_pairs_local.reserve(src.collision_pairs_local.capacity());
     }
 
+    // Copy constructor use a counter set to zero
+    p2p_ghost_collisions(const p2p_ghost_collisions<real_number, partsize_t>& src)
+    {
+        this->copy_from_p2p_ghost_collisions(src);
+    }
+
     double rod_distance(double px, double py, double pz, double qx, double qy, double qz, double t, double s, double x, double y, double z){
         double x_dist, y_dist, z_dist;
         double min_distance;
@@ -382,12 +394,12 @@ public:
         this->cylinder_length = LENGTH;
     }
 
-    double get_cylinder_width()
+    double get_cylinder_width() const
     {
         return this->cylinder_width;
     }
 
-    double get_cylinder_length()
+    double get_cylinder_length() const
     {
         return this->cylinder_length;
     }
@@ -397,12 +409,17 @@ public:
         this->current_particle_shape = DISK;
     }
 
+    particle_shape get_current_particle_shape() const
+    {
+        return this->current_particle_shape;
+    }
+
     void set_disk_width(const double WIDTH)
     {
         this->disk_width = WIDTH;
     }
 
-    double get_disk_width()
+    double get_disk_width() const
     {
         return this->disk_width;
     }
@@ -411,9 +428,15 @@ public:
         return isActive;
     }
 
-    void setEnable(const bool inIsActive) {
+    void setEnable(const bool inIsActive)
+    {
         isActive = inIsActive;
     }
+
+    bool isSynchronized() const
+    {
+        return this->synchronisation;
+    }
 };