diff --git a/src/hydro/Gadget2/hydro.h b/src/hydro/Gadget2/hydro.h
index 66a475f32ec06eb40ff2bc890bc156f76e3b7b9f..ad927ed2c55e008af2a98529bf1bd2d175a75f33 100644
--- a/src/hydro/Gadget2/hydro.h
+++ b/src/hydro/Gadget2/hydro.h
@@ -175,6 +175,11 @@ __attribute__((always_inline)) INLINE static void hydro_timestep_extra(
 __attribute__((always_inline)) INLINE static void hydro_init_part(
     struct part *restrict p, const struct hydro_space *hs) {
 
+#ifdef DEBUG_INTERACTIONS
+  for (int i = 0; i < NUM_OF_NEIGHBOURS; ++i) p->ids_ngbs_density[i] = -1;
+  p->num_ngb_density = 0;
+#endif
+  
   p->rho = 0.f;
   p->density.wcount = 0.f;
   p->density.wcount_dh = 0.f;
@@ -311,6 +316,11 @@ __attribute__((always_inline)) INLINE static void hydro_prepare_force(
 __attribute__((always_inline)) INLINE static void hydro_reset_acceleration(
     struct part *restrict p) {
 
+#ifdef DEBUG_INTERACTIONS
+  for (int i = 0; i < NUM_OF_NEIGHBOURS; ++i) p->ids_ngbs_force[i] = -1;
+  p->num_ngb_force = 0;
+#endif
+  
   /* Reset the acceleration. */
   p->a_hydro[0] = 0.0f;
   p->a_hydro[1] = 0.0f;
diff --git a/src/hydro/Gadget2/hydro_iact.h b/src/hydro/Gadget2/hydro_iact.h
index 45ee89ceb1ba119b396aa847b39a8b6ff1b38b8c..a8affdc6e13b4d7e31416a365d6a6d0e7443d42c 100644
--- a/src/hydro/Gadget2/hydro_iact.h
+++ b/src/hydro/Gadget2/hydro_iact.h
@@ -103,6 +103,15 @@ __attribute__((always_inline)) INLINE static void runner_iact_density(
   pj->density.rot_v[0] += facj * curlvr[0];
   pj->density.rot_v[1] += facj * curlvr[1];
   pj->density.rot_v[2] += facj * curlvr[2];
+  
+  /* Update ngb counters */
+#ifdef DEBUG_INTERACTIONS
+  if(pi->id == CHECK_PART_ID) pi->ids_ngbs_density[pi->num_ngb_density] = pj->id;
+  ++pi->num_ngb_density;
+  if(pj->id == CHECK_PART_ID) pj->ids_ngbs_density[pj->num_ngb_density] = pi->id;
+  ++pj->num_ngb_density;
+#endif
+
 }
 
 /**
@@ -151,6 +160,13 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density(
   pi->density.rot_v[0] += fac * curlvr[0];
   pi->density.rot_v[1] += fac * curlvr[1];
   pi->density.rot_v[2] += fac * curlvr[2];
+  
+#ifdef DEBUG_INTERACTIONS
+  /* Update ngb counters */
+  if(pi->id == CHECK_PART_ID) pi->ids_ngbs_density[pi->num_ngb_density] = pj->id;
+  ++pi->num_ngb_density;
+#endif
+
 }
 
 #ifdef WITH_VECTORIZATION
@@ -480,6 +496,19 @@ __attribute__((always_inline)) INLINE static void runner_iact_force(
   /* Change in entropy */
   pi->entropy_dt += mj * visc_term * dvdr;
   pj->entropy_dt += mi * visc_term * dvdr;
+  
+#ifdef DEBUG_INTERACTIONS
+  /* Update ngb counters */
+  if(pi->id == CHECK_PART_ID) {
+    pi->ids_ngbs_force[pi->num_ngb_force] = pj->id;
+  }
+  ++pi->num_ngb_force;
+  if(pj->id == CHECK_PART_ID) {
+    pj->ids_ngbs_force[pj->num_ngb_force] = pi->id;
+  }
+  ++pj->num_ngb_force;
+#endif
+
 }
 
 /**
@@ -569,6 +598,15 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_force(
 
   /* Change in entropy */
   pi->entropy_dt += mj * visc_term * dvdr;
+  
+#ifdef DEBUG_INTERACTIONS
+  /* Update ngb counters */
+  if(pi->id == CHECK_PART_ID) {
+    pi->ids_ngbs_force[pi->num_ngb_force] = pj->id;
+  }
+  ++pi->num_ngb_force;
+#endif
+
 }
 
 #ifdef WITH_VECTORIZATION
diff --git a/src/hydro/Gadget2/hydro_io.h b/src/hydro/Gadget2/hydro_io.h
index 3e46b2351eb6a3871946dd9c69c8d108b10da0df..f4b1cca41d80a8efcc6c9a53adfb6d683383b8e3 100644
--- a/src/hydro/Gadget2/hydro_io.h
+++ b/src/hydro/Gadget2/hydro_io.h
@@ -77,6 +77,10 @@ void hydro_write_particles(struct part* parts, struct io_props* list,
 
   *num_fields = 10;
 
+#ifdef DEBUG_INTERACTIONS
+  *num_fields = 14;
+#endif
+
   /* List what we want to write */
   list[0] = io_make_output_field("Coordinates", DOUBLE, 3, UNIT_CONV_LENGTH,
                                  parts, x);
@@ -99,6 +103,17 @@ void hydro_write_particles(struct part* parts, struct io_props* list,
                                               parts, rho, convert_u);
   list[9] = io_make_output_field_convert_part(
       "Pressure", FLOAT, 1, UNIT_CONV_PRESSURE, parts, rho, convert_P);
+#ifdef DEBUG_INTERACTIONS
+  list[10] = io_make_output_field("Num_ngb_density", INT, 1, UNIT_CONV_NO_UNITS,
+                                 parts, num_ngb_density);
+  list[11] = io_make_output_field("Num_ngb_force", INT, 1, UNIT_CONV_NO_UNITS,
+                                 parts, num_ngb_force);
+  list[12] = io_make_output_field("Ids_ngb_density", LONGLONG, NUM_OF_NEIGHBOURS,
+                                 UNIT_CONV_NO_UNITS, parts, ids_ngbs_density);
+  list[13] = io_make_output_field("Ids_ngb_force", LONGLONG, NUM_OF_NEIGHBOURS,
+                                 UNIT_CONV_NO_UNITS, parts, ids_ngbs_force);
+#endif
+
 }
 
 /**
diff --git a/src/hydro/Gadget2/hydro_part.h b/src/hydro/Gadget2/hydro_part.h
index 571aaf39ed2509d95e9f68c34ab8e6c09ded3fbb..52ff778f7e091e0acc5b215517378f2480409f55 100644
--- a/src/hydro/Gadget2/hydro_part.h
+++ b/src/hydro/Gadget2/hydro_part.h
@@ -33,6 +33,10 @@
 
 #include "cooling_struct.h"
 
+#define NUM_OF_NEIGHBOURS 128
+#define CHECK_PART_ID 999999999999999999999
+//#define CHECK_PART_ID 5673486482283
+
 /* Extra particle data not needed during the SPH loops over neighbours. */
 struct xpart {
 
@@ -143,6 +147,20 @@ struct part {
 
 #endif
 
+#ifdef DEBUG_INTERACTIONS
+  /*! List of interacting particles in the density SELF and PAIR */
+  long long ids_ngbs_density[NUM_OF_NEIGHBOURS];
+
+  /*! List of interacting particles in the force SELF and PAIR */
+  long long ids_ngbs_force[NUM_OF_NEIGHBOURS];
+
+  /*! Number of interactions in the density SELF and PAIR */
+  int num_ngb_density;
+
+  /*! Number of interactions in the force SELF and PAIR */
+  int num_ngb_force;
+#endif
+
 } SWIFT_STRUCT_ALIGN;
 
 #endif /* SWIFT_GADGET2_HYDRO_PART_H */
diff --git a/src/runner_doiact_vec.c b/src/runner_doiact_vec.c
index 8188663119351d88abdf3593f5fcb92a21645295..eecfa75c34bda78ba7a79617974f43b042b7c310 100644
--- a/src/runner_doiact_vec.c
+++ b/src/runner_doiact_vec.c
@@ -662,6 +662,26 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec(
       doi_mask = doi_mask & doi_mask_self_check;
       doi_mask2 = doi_mask2 & doi_mask2_self_check;
 
+#ifdef DEBUG_INTERACTIONS
+      for (int bit_index = 0; bit_index < VEC_SIZE; bit_index++) {
+        if (doi_mask & (1 << bit_index)) {
+          if(pi->id == CHECK_PART_ID) {
+            pi->ids_ngbs_density[pi->num_ngb_density] = parts[pjd + bit_index].id;
+          }
+          ++pi->num_ngb_density;
+        }
+      }
+      
+      for (int bit_index = 0; bit_index < VEC_SIZE; bit_index++) {
+        if (doi_mask2 & (1 << bit_index)) {
+          if(pi->id == CHECK_PART_ID) {
+            pi->ids_ngbs_density[pi->num_ngb_density] = parts[pjd + VEC_SIZE + bit_index].id;
+          }
+          ++pi->num_ngb_density;
+        }
+      }
+#endif
+
       /* If there are any interactions left pack interaction values into c2
        * cache. */
       if (doi_mask) {
@@ -776,6 +796,12 @@ __attribute__((always_inline)) INLINE void runner_doself2_force_vec(
 
     /* Get a pointer to the ith particle. */
     pi = &parts[pid];
+    
+    if(pi->id == CHECK_PART_ID) {
+      message("Here");
+    }
+
+
 
     /* Is the ith particle active? */
     if (!part_is_active_no_debug(pi, max_active_bin)) continue;
@@ -881,6 +907,17 @@ __attribute__((always_inline)) INLINE void runner_doself2_force_vec(
       vec_combine_masks(v_doi_mask, v_doi_mask_self_check);
       doi_mask = vec_form_int_mask(v_doi_mask);
 
+#ifdef DEBUG_INTERACTIONS
+      for (int bit_index = 0; bit_index < VEC_SIZE; bit_index++) {
+        if (doi_mask & (1 << bit_index)) {
+          if(pi->id == CHECK_PART_ID) {
+            pi->ids_ngbs_force[pi->num_ngb_force] = parts[pjd + bit_index].id;
+          }
+          ++pi->num_ngb_force;
+        }
+      }
+#endif
+
       /* If there are any interactions perform them. */
       if (doi_mask) {
         vector v_hj_inv;
@@ -1171,6 +1208,17 @@ void runner_dopair1_density_vec(struct runner *r, struct cell *ci,
         /* Form integer mask. */
         doi_mask = vec_form_int_mask(v_doi_mask);
 
+#ifdef DEBUG_INTERACTIONS
+        for (int bit_index = 0; bit_index < VEC_SIZE; bit_index++) {
+          if (doi_mask & (1 << bit_index)) {
+            if(pi->id == CHECK_PART_ID) {
+              pi->ids_ngbs_density[pi->num_ngb_density] = parts_j[sort_j[pjd + bit_index].i].id;
+            }
+            ++pi->num_ngb_density;
+          }
+        }
+#endif
+
         /* If there are any interactions perform them. */
         if (doi_mask)
           runner_iact_nonsym_1_vec_density(
@@ -1302,6 +1350,17 @@ void runner_dopair1_density_vec(struct runner *r, struct cell *ci,
         /* Form integer mask. */
         doj_mask = vec_form_int_mask(v_doj_mask);
 
+#ifdef DEBUG_INTERACTIONS
+        for (int bit_index = 0; bit_index < VEC_SIZE; bit_index++) {
+          if (doj_mask & (1 << bit_index)) {
+            if(pj->id == CHECK_PART_ID) {
+              pj->ids_ngbs_density[pj->num_ngb_density] = parts_i[sort_i[ci_cache_idx + first_pi_align + bit_index].i].id;
+            }
+            ++pj->num_ngb_density;
+          }
+        }
+#endif
+
         /* If there are any interactions perform them. */
         if (doj_mask)
           runner_iact_nonsym_1_vec_density(
@@ -1509,6 +1568,10 @@ void runner_dopair2_force_vec(struct runner *r, struct cell *ci,
       struct part *restrict pi = &parts_i[sort_i[pid].i];
       if (!part_is_active(pi, e)) continue;
 
+      if(pi->id == CHECK_PART_ID) {
+        message("Here");
+      }
+
       /* Set the cache index. */
       int ci_cache_idx = pid - first_pi_align;
 
@@ -1612,6 +1675,17 @@ void runner_dopair2_force_vec(struct runner *r, struct cell *ci,
         /* Form integer masks. */
         doi_mask = vec_form_int_mask(v_doi_mask);
 
+#ifdef DEBUG_INTERACTIONS
+        for (int bit_index = 0; bit_index < VEC_SIZE; bit_index++) {
+          if (doi_mask & (1 << bit_index)) {
+            if(pi->id == CHECK_PART_ID) {
+              pi->ids_ngbs_force[pi->num_ngb_force] = parts_j[sort_j[pjd + bit_index].i].id;
+            }
+            ++pi->num_ngb_force;
+          }
+        }
+#endif
+
         /* If there are any interactions perform them. */
         if (doi_mask) {
           vector v_hj_inv;
@@ -1652,6 +1726,10 @@ void runner_dopair2_force_vec(struct runner *r, struct cell *ci,
       struct part *restrict pj = &parts_j[sort_j[pjd].i];
       if (!part_is_active(pj, e)) continue;
 
+      if(pj->id == CHECK_PART_ID) {
+        message("Here");
+      }
+
       /* Set the cache index. */
       int cj_cache_idx = pjd;
 
@@ -1659,7 +1737,7 @@ void runner_dopair2_force_vec(struct runner *r, struct cell *ci,
       /* Skip this particle if no particle in ci is within range of it. */
       const float hj = cj_cache->h[cj_cache_idx];
       const double dj_test =
-          sort_j[pjd].d - hj * kernel_gamma - dx_max - rshift;
+          sort_j[pjd].d - hj * kernel_gamma - dx_max;
       if (dj_test > di_max) continue;
 
       /* Determine the exit iteration of the interaction loop. */
@@ -1755,6 +1833,17 @@ void runner_dopair2_force_vec(struct runner *r, struct cell *ci,
         /* Form integer masks. */
         doj_mask = vec_form_int_mask(v_doj_mask);
 
+#ifdef DEBUG_INTERACTIONS
+        for (int bit_index = 0; bit_index < VEC_SIZE; bit_index++) {
+          if (doj_mask & (1 << bit_index)) {
+            if(pj->id == CHECK_PART_ID) {
+              pj->ids_ngbs_force[pj->num_ngb_force] = parts_i[sort_i[ci_cache_idx + first_pi_align + bit_index].i].id;
+            }
+            ++pj->num_ngb_force;
+          }
+        }
+#endif
+
         /* If there are any interactions perform them. */
         if (doj_mask) {
           vector v_hi_inv;