diff --git a/examples/plot.py b/examples/plot.py
index 773abb2afb428799a7a91c6f85ac76ef079a8ff6..6f395138d81a2d7448eb9afe045d33496a03a571 100644
--- a/examples/plot.py
+++ b/examples/plot.py
@@ -93,21 +93,20 @@ errz_new = (accz_new - accz_e )/abs(accz_e)
 # erry_g = (accy_g - accy_e )/abs(accy_e) 
 # errz_g = (accz_g - accz_e )/abs(accz_e) 
 
-
 # Statistics
-meanx_bh = mean(errx_bh)
-stdx_bh = sqrt(mean(errx_bh**2) - meanx_bh**2)
-meany_bh = mean(erry_bh)
-stdy_bh = std(erry_bh)
-meanz_bh = mean(errz_bh)
-stdz_bh = std(errz_bh)
-
-meanx_new = mean(errx_new)
-stdx_new = std(errx_new)
-meany_new = mean(erry_new)
-stdy_new = std(erry_new)
-meanz_new = mean(errz_new)
-stdz_new = std(errz_new)
+meanx_bh = mean(errx_bh[abs(errx_bh) < 0.1])
+stdx_bh = std(errx_bh[abs(errx_bh) < 0.1])
+meany_bh = mean(erry_bh[abs(erry_bh) < 0.1])
+stdy_bh = std(erry_bh[abs(erry_bh) < 0.1])
+meanz_bh = mean(errz_bh[abs(errz_bh) < 0.1])
+stdz_bh = std(errz_bh[abs(errz_bh) < 0.1])
+
+meanx_new = mean(errx_new[abs(errx_new) < 0.1])
+stdx_new = std(errx_new[abs(errx_new) < 0.1])
+meany_new = mean(erry_new[abs(erry_new) < 0.1])
+stdy_new = std(erry_new[abs(erry_new) < 0.1])
+meanz_new = mean(errz_new[abs(errz_new) < 0.1])
+stdz_new = std(errz_new[abs(errz_new) < 0.1])
 
 # meanx_g = mean(errx_g)
 # stdx_g = std(errx_g)
@@ -123,7 +122,7 @@ subplot(311, title="Acceleration along X")
 #plot(id, errx_g , 'gs')
 plot(id, errx_bh , 'rx')
 plot(id, errx_new , 'b.')
-#text(id[-1], 0.18, "Gadget: $%5.3f\\pm%5.3f$ \n B-H: $%5.3f\\pm%5.3f$\n QuickShed: $%5.3f\\pm%5.3f$"%(meanx_g, stdx_g, meanx_bh, stdx_bh, meanx_new, stdx_new), backgroundcolor="w", va="top", ha="right" )
+text(id[-1], 0.18, "B-H: $%5.3f\\pm%5.3f$\n QuickShed: $%5.3f\\pm%5.3f$"%(meanx_bh, stdx_bh, meanx_new, stdx_new), backgroundcolor="w", va="top", ha="right" )
 
 
 ylim(-0.2, 0.2)
@@ -134,7 +133,8 @@ subplot(312, title="Acceleration along Y")
 #plot(id, erry_g , 'gs')
 plot(id, erry_bh , 'rx')
 plot(id, erry_new , 'b.')
-#text(id[-1], 0.18, "Gadget: $%5.3f\\pm%5.3f$ \n B-H: $%5.3f\\pm%5.3f$\n QuickShed: $%5.3f\\pm%5.3f$"%(meany_g, stdy_g, meany_bh, stdy_bh, meany_new, stdy_new), backgroundcolor="w", va="top", ha="right" )
+text(id[-1], 0.18, "B-H: $%5.3f\\pm%5.3f$\n QuickShed: $%5.3f\\pm%5.3f$"%(meany_bh, stdy_bh, meany_new, stdy_new), backgroundcolor="w", va="top", ha="right" )
+
 
 ylim(-0.2, 0.2)
 xlim(0,id[-1])
@@ -145,7 +145,8 @@ subplot(313, title="Acceleration along Z")
 #plot(id, errz_g , 'gs')
 plot(id, errz_bh , 'rx')
 plot(id, errz_new , 'b.')
-#text(id[-1], 0.18, "Gadget: $%5.3f\\pm%5.3f$ \n B-H: $%5.3f\\pm%5.3f$\n QuickShed: $%5.3f\\pm%5.3f$"%(meany_g, stdy_g, meany_bh, stdy_bh, meany_new, stdy_new), backgroundcolor="w", va="top", ha="right" )
+text(id[-1], 0.18, "B-H: $%5.3f\\pm%5.3f$\n QuickShed: $%5.3f\\pm%5.3f$"%(meanz_bh, stdz_bh, meanz_new, stdz_new), backgroundcolor="w", va="top", ha="right" )
+
 
 ylim(-0.2, 0.2)
 xlim(0,id[-1])
diff --git a/examples/test_bh_3.c b/examples/test_bh_3.c
index a351f456a6e6ed08eda978dfca5d94784ff69582..88c274cd526a4517e4d1d0c7261a14bef3453f4d 100644
--- a/examples/test_bh_3.c
+++ b/examples/test_bh_3.c
@@ -36,11 +36,10 @@
 /* Some local constants. */
 #define cell_pool_grow 1000
 #define cell_maxparts 1
-#define task_limit 500
+#define task_limit 5000
 #define const_G 6.6738e-8
 #define dist_min 0.5 // 0.5
 
-
 #define ICHECK -1
 
 /** Data structure for the particles. */
@@ -65,18 +64,25 @@ struct cell {
     struct cell* firstchild; /* Next node if opening */
     struct cell* sibling;  /* Next node */
 
-    union {
+    /* We keep both CoMs and masses to make sure the comp_com calculation is correct */
+    union { 
+
+      /* Information for the legacy walk */
       struct {
 	double com[3];
 	double mass;
       } legacy;
+
+      /* Information for the QuickShed walk */
       struct {
 	double com[3];
 	double mass;
       } new;
+
     } u;
 
     int res, com_tid;
+   
     }  __attribute__((aligned (128)));
     
     
@@ -404,7 +410,7 @@ void iact_pair_pc ( struct cell *ci , struct cell *cj ) {
       printf("%e %e %e %d %p %d %p\n", cj->u.new.com[0], cj->u.new.com[1], cj->u.new.com[2], cj->count, cj , cj->split, cj->sibling);
 
       for ( j = 0 ; j < cj->count ; ++j )
-	printf("part %d mass= %e id= %d\n", j, cj->parts[j].mass , cj->parts[j].id );
+    	printf("part %d mass= %e id= %d\n", j, cj->parts[j].mass , cj->parts[j].id );
 
         error( "com does not seem to have been set." );
     }
@@ -456,7 +462,7 @@ void iact_pair ( struct cell *ci , struct cell *cj ) {
   
     int i, j, k;
     int count_i = ci->count, count_j = cj->count;
-    double dx[3], xi[3], ai[3], mi, mj, r2, w, ir;
+    double dx[3], xi[3], ai[3], mi, mj, r2, r2_i, r2_j, w, ir;
     struct part *parts_i = ci->parts, *parts_j = cj->parts;
     struct cell *cp;
 
@@ -470,15 +476,17 @@ void iact_pair ( struct cell *ci , struct cell *cj ) {
 
 
     /* Distance between the CoMs */
-    for ( r2 = 0.0, k = 0 ; k < 3 ; k++ ) {
-      dx[k] = fabs( ci->u.new.com[k] - cj->u.new.com[k] );	
-      r2 += dx[k]*dx[k];
+    for ( r2 = 0.0, r2_i = 0.0, r2_j = 0.0, k = 0 ; k < 3 ; k++ ) {
+      //   dx[k] = fabs( ci->u.new.com[k] - cj->u.new.com[k] );	
+      dx[k] = fabs( ci->loc[k] - cj->loc[k] );	
+
+      r2 += dx[k] * dx[k];
+      r2_i += ( dx[k] - 0.5*ci->h ) * ( dx[k] - 0.5*ci->h );
+      r2_j += ( dx[k] - 0.5*cj->h ) * ( dx[k] - 0.5*cj->h );
     }
+
     
-    double s_max_i = ci->h; 
-    double s_max_j = cj->h; 
-      
-    if ( ( dist_min * dist_min * r2 > s_max_i * s_max_i ) && ( dist_min * dist_min * r2 > s_max_j * s_max_j ) )
+    if ( ( dist_min * dist_min * r2_j > ci->h * ci->h ) && ( dist_min * dist_min * r2_i > cj->h * cj->h ) )
       {
 	iact_pair_pc( ci, cj );
 	iact_pair_pc( cj, ci );
@@ -585,6 +593,7 @@ void iact_pair ( struct cell *ci , struct cell *cj ) {
 	    cp = cp->sibling;
 	  }
 	}
+
 	else
 	  error("Want to split unpslitable cells !\n");
 
@@ -703,7 +712,7 @@ void create_tasks ( struct qsched *s , struct cell *ci , struct cell *cj ) {
     int k;
     qsched_task_t tid;
     struct cell *data[2], *cp, *cps;
-    double dx, r2;
+    double dx, r2, r2_i, r2_j;
 
     
     /* If either cell is empty, stop. */
@@ -761,13 +770,17 @@ void create_tasks ( struct qsched *s , struct cell *ci , struct cell *cj ) {
     else {
 
       /* Distance between the cells */
-      for ( r2 = 0.0, k = 0 ; k < 3 ; k++ ) {
+      for ( r2 = 0.0, r2_i = 0.0, r2_j = 0.0,  k = 0 ; k < 3 ; k++ ) {
         dx = fabs( ci->loc[k] - cj->loc[k] );	
+
         r2 += dx*dx;
+	r2_i += ( dx - 0.5 * ci->h ) * ( dx - 0.5 * ci->h );
+	r2_j += ( dx - 0.5 * cj->h ) * ( dx - 0.5 * cj->h );
       }
-            
+
+
       /* Check whether we can use the multipoles. */
-      if ( ( dist_min * dist_min * r2 > ci->h * ci->h ) && ( dist_min * dist_min * r2 > cj->h * cj->h ) )
+      if ( ( dist_min * dist_min * r2_j > ci->h * ci->h ) && ( dist_min * dist_min * r2_i > cj->h * cj->h ) )
 	{  
 	  data[0] = ci; data[1] = cj;
 	  tid = qsched_addtask( s , task_type_pair_pc , task_flag_none , data , sizeof(struct cell *) * 2 , ci->count );
@@ -819,6 +832,7 @@ void create_tasks ( struct qsched *s , struct cell *ci , struct cell *cj ) {
 		cp = cp->sibling;
 	      }
 	    }
+
 	    else
 	      error("Want to split unpslitable cells !\n");
 	    
@@ -840,6 +854,7 @@ void create_tasks ( struct qsched *s , struct cell *ci , struct cell *cj ) {
 		cp = cp->sibling;
 	      }
 	    }	    
+
 	    else
 	      error("Want to split unpslitable cells !\n");
 
@@ -1289,7 +1304,7 @@ void test_bh ( int N , int nr_threads , int runs , char* fileName ) {
     /* Do a N^2 interactions calculation */
 
     tic_exact = getticks();
-    interact_exact( N , parts , ICHECK );
+    //interact_exact( N , parts , ICHECK );
     toc_exact = getticks();
 
     printf( "Exact calculation (1 thread) took %lli (= %e) ticks\n", toc_exact - tic_exact , (float)(toc_exact - tic_exact) );