diff --git a/src/runner_doiact_vec.c b/src/runner_doiact_vec.c
index 5359091611abb14623bf427856612317a1f78235..1c0c882988322531ed5f6b16b747ce937d605be6 100644
--- a/src/runner_doiact_vec.c
+++ b/src/runner_doiact_vec.c
@@ -263,195 +263,72 @@ __attribute__((always_inline)) INLINE static void populate_max_d_no_cache(
   const struct part *restrict parts_j = cj->parts;
 
   int first_pi = 0, last_pj = cj->count - 1;
+  int temp;
 
-  /* Find the first active particle in ci to interact with any particle in cj.
-   */
-  /* Populate max_di with distances. */
-  //int active_id = ci->count - 1;
-  //for (int k = ci->count - 1; k >= 0; k--) {
-  //  const struct part *pi = &parts_i[sort_i[k].i];
-  //  const float d = sort_i[k].d + dx_max;
-
-  //  //max_di[k] = d + hi_max;
-
-  //  /* If the particle is out of range set the index to
-  //   * the last active particle within range. */
-  //  if (d + hi_max < dj_min) {
-  //    if (part_is_active(pi, e)) {
-  //      first_pi = k;
-  //    }
-  //    else {
-  //      first_pi = active_id;
-  //    }
-  //    break;
-  //  } else {
-  //    if (part_is_active(pi, e)) active_id = k;
-  //  }
-  //}
-
-  //for(int i=0; i<ci->count; i++) max_index_i[i] = FLT_MAX;
-  //for(int i=0; i<cj->count; i++) max_index_j[i] = FLT_MAX;
-  
-  float di, dj;
-
-  first_pi = ci->count - 1;
-  di = sort_i[first_pi].d + dx_max;
-
-  while(first_pi >= 0 && di + hi_max > dj_min) {
+  /* Find the leftmost particle in cell i that interacts with any particle in cell j. */
+  first_pi = ci->count;
+  while(first_pi > 0 && sort_i[first_pi - 1].d + dx_max + hi_max > dj_min)
     first_pi--;
-    di = sort_i[first_pi].d + dx_max;
-  }
 
-  first_pi++;
+  /* Find the maximum index into cell j for each particle in range in cell i. */
+  if(first_pi < ci->count) {
 
-  int temp = 0;
-  
-  const struct part *pi = &parts_i[sort_i[first_pi].i];
+    /* Start from the first particle in cell j. */
+    temp = 0;
 
-  di = sort_i[first_pi].d + dx_max;
+    const struct part *pi = &parts_i[sort_i[first_pi].i];
 
-  while(di + (pi->h * kernel_gamma - rshift) > sort_j[temp].d) {
-    temp++;
-  }
+    /* Loop through particles in cell j until they are not in range of pi. */
+    while(temp <= cj->count && sort_i[first_pi].d + (pi->h * kernel_gamma + dx_max - rshift) > sort_j[temp].d)
+      temp++;
 
-  max_index_i[first_pi] = temp;
+    max_index_i[first_pi] = temp;
 
-  for(int i = first_pi + 1; i<ci->count; i++) {
-    temp = max_index_i[i - 1];
+    /* Populate max_index_i for remaining particles that are within range. */
+    for(int i = first_pi + 1; i<ci->count; i++) {
+      temp = max_index_i[i - 1];
 
-    di = sort_i[i].d + dx_max;
-    
-    while(di + (pi->h * kernel_gamma - rshift) > sort_j[temp].d) {
-      temp++;
-    }
+      while(temp <= cj->count && sort_i[i].d + (pi->h * kernel_gamma + dx_max - rshift) > sort_j[temp].d)
+        temp++;
 
-    max_index_i[i] = temp;
+      max_index_i[i] = temp;
 
-    //message("first_pi: %d, max_index_i: %d", first_pi, max_index_i[i]);
+    }
   }
 
-  /* Find the maximum distance of pi particles into cj.*/
-  //int first_pj = 0;
-  //const struct part *pi = &parts_i[sort_i[first_pi].i];
-  //float dj = sort_j[first_pj].d;
-
-  //while (sort_i[first_pi].d + dx_max + pi->h > dj) {
-  //  first_pj++;
-  //  dj = sort_j[first_pj].d;
-  //}
-
-  //max_index_i[first_pi] = first_pj;
-
-  //for (int i = first_pi + 1; i < ci->count; i++) {
-  //  int temp = max_index_i[i - 1];
-  //  pi = &parts_i[sort_i[i].i];
-  //  dj = sort_j[temp].d;
-
-  //  while (sort_i[i].d + dx_max + pi->h > dj) {
-  //    temp++;
-  //    dj = sort_j[temp].d;
-  //  }
-
-  //  max_index_i[i] = temp;
-  //}
-
-  /* Find the last particle in cj to interact with any particle in ci. */
-  /* Populate max_dj with distances. */
-  //active_id = 0;
-  //for (int k = 0; k < cj->count; k++) {
-  //  const struct part *pj = &parts_j[sort_j[k].i];
-  //  const float d = sort_j[k].d - dx_max;
-
-  //  /*TODO: don't think rshift should be taken off here, waiting on Pedro. */
-  //  // max_dj[k] = d - h * kernel_gamma - rshift;
-  //  //max_dj[k] = d - hj_max;
-
-  //  /* If the particle is out of range set the index to
-  //   * the last active particle within range. */
-  //  if (d - hj_max > di_max) {
-  //    if (part_is_active(pj, e)) {
-  //      last_pj = k;
-  //    }
-  //    else {
-  //      last_pj = active_id;
-  //    }
-  //    break;
-  //  } else {
-  //    if (part_is_active(pj, e)) active_id = k;
-  //  }
-  //}
-
-  //last_pj = 0;
-  //dj = sort_j[last_pj].d - dx_max;
-
-  //while(dj - hj_max < di_max) {
-  //  last_pj++;
-  //  dj = sort_j[last_pj].d - dx_max;
-  //} 
-  //
-  ///* Find the maximum distance of pj particles into ci.*/
-  //int last_pi = ci->count - 1;
-  //  
-  //const struct part *pj = &parts_j[sort_j[last_pj].i];
-  //di = sort_i[last_pi].d;
-
-  //while (sort_j[last_pj].d - dx_max - (pj->h * kernel_gamma) < di) {
-  //  last_pi--;
-  //  di = sort_i[last_pi].d;
-  //}
-
-  //max_index_j[last_pj] = last_pi;
-
-  //for (int i = last_pj - 1; i >= 0; i--) {
-  //  int temp = max_index_j[i + 1];
-  //  pj = &parts_j[sort_j[i].i];
-  //  di = sort_i[temp].d;
-
-  //  while (sort_j[i].d - dx_max - (pj->h * kernel_gamma) < di) {
-  //    temp--;
-  //    di = sort_i[temp].d;
-  //  }
-
-  //  max_index_j[last_pj] = temp;
-  //}
-
+  /* Find the rightmost particle in cell j that interacts with any particle in cell i. */
   last_pj = 0;
-  dj = sort_j[last_pj].d - dx_max;
-
-  while(last_pj < cj->count && dj - hi_max < di_max) {
+  while(last_pj < cj->count && sort_j[last_pj].d - hj_max - dx_max < di_max)
     last_pj++;
-    dj = sort_j[last_pj].d - dx_max;
-  }
 
-  last_pj--;
+  /* Find the maximum index into cell i for each particle in range in cell j. */
+  if(last_pj > 0 ) {
 
-  temp = ci->count - 1;
-  
-  const struct part *pj = &parts_j[sort_j[last_pj].i];
+    /* Decrement to make sure that we checking that correct particle. */
+    last_pj--;
 
-  dj = sort_j[last_pj].d - dx_max;
+    /* Start from the last particle in cell i. */
+    temp = ci->count - 1;
 
-  while(dj - (pj->h * kernel_gamma) < sort_i[temp].d) {
-    temp--;
-  }
+    const struct part *pj = &parts_j[sort_j[last_pj].i];
+
+    /* Loop through particles in cell i until they are not in range of pj. */
+    while(temp >= 0 && sort_j[last_pj].d - dx_max - (pj->h * kernel_gamma) < sort_i[temp].d - rshift)
+      temp--;
 
-  max_index_j[last_pj] = temp;
+    max_index_j[last_pj] = temp;
 
-  for(int i = last_pj - 1; i>=0; i--) {
-    temp = max_index_j[i + 1];
+    /* Populate max_index_j for remaining particles that are within range. */
+    for(int i = last_pj - 1; i>=0; i--) {
+      temp = max_index_j[i + 1];
 
-    dj = sort_j[i].d - dx_max;
-    
-    while(dj - (pj->h * kernel_gamma) < sort_i[temp].d) {
-      temp--;
-    }
+      while(temp >= 0 && sort_j[i].d - dx_max - (pj->h * kernel_gamma) < sort_i[temp].d - rshift)
+        temp--;
 
-    max_index_j[i] = temp;
+      max_index_j[i] = temp;
 
-    //message("first_pi: %d, max_index_i: %d", first_pi, max_index_i[i]);
+    }
   }
-  //for(int i=0; i<ci->count; i++) max_index_i[i] = cj->count - 1;//temp;
-  //for(int i=0; i<cj->count; i++) max_index_j[i] = 0;//temp;
 
   *init_pi = first_pi;
   *init_pj = last_pj;
@@ -1085,7 +962,5 @@ void runner_dopair1_density_vec(struct runner *r, struct cell *ci,
     TIMER_TOC(timer_dopair_density);
   }
 
-  //message("Interaction Count: %d", intCount);
-
 #endif /* WITH_VECTORIZATION */
 }