diff --git a/examples/plot_sorted.py b/examples/plot_sorted.py
index 033e496864a328e26bf2289b819b79ae492f69be..4f7abfae1899a3fd10036f82efb849ce0c7fa128 100644
--- a/examples/plot_sorted.py
+++ b/examples/plot_sorted.py
@@ -33,6 +33,9 @@ rcParams.update(params)
 rc('font', family='serif')
 import sys
 import os
+from scipy import stats
+
+dist_cutoff_ratio=1.2
 
 print "Plotting..."
 
@@ -68,19 +71,28 @@ axis = [
 
 #names = ["side", "edge", "corner"]
 
-for orientation in range( 26 ):
-# for jjj in range(2):
-#     if jjj == 0:
-#         orientation = 0
-#     if jjj == 1:
-#         orientation = 8
+#for orientation in range( 26 ):
+for jjj in range(3):
+    if jjj == 0:
+        orientation = 0
+    if jjj == 1:
+        orientation = 1
+    if jjj == 2:
+        orientation = 4
 
+         
     # Read Quickshed accelerations
     data=loadtxt( "interaction_dump_%d.dat"%orientation )
     id = data[:,0]
     pos = data[:,2]
     pos -= mean(pos)
-        
+
+    x = data[:,3]
+    y = data[:,4]
+    z = data[:,5]
+
+    dist = data[:,12]
+    
     accx_u=data[:,6]
     accy_u=data[:,7]
     accz_u=data[:,8]
@@ -112,56 +124,95 @@ for orientation in range( 26 ):
     stdz_s = std(errz_s[abs(errz_s) < 0.1])
     
 
+#     sample_pos = pos[dist<0.2]
+#     sample_x = e_errx_s[dist<0.2]
+#     sample_y = e_erry_s[dist<0.2]
+#     sample_z = e_errz_s[dist<0.2]
+            
+
+#     numBins = 100
+#     binEdges = linspace(-1.5-1.5/numBins, 1.5+1.5/numBins, numBins+2)
+#     bins = linspace(-1.5, 1.5, numBins+1)
 
+#     corr_x, a, b = stats.binned_statistic(sample_pos, sample_x, statistic='mean', bins=binEdges)
+#     corr_y, a, b = stats.binned_statistic(sample_pos, sample_y, statistic='mean', bins=binEdges)
+#     corr_z, a, b = stats.binned_statistic(sample_pos, sample_z, statistic='mean', bins=binEdges)
+
+#     a,b, sample_bin = stats.binned_statistic(pos, pos, statistic='mean', bins=binEdges)
+#     sample_bin -= 2
+
+    
+# #    for j in range(size(pos)):
+# #        e_errx_s /= corr_x[sample_bin[j]]
+# #        e_erry_s /= corr_y[sample_bin[j]]
+# #        e_errz_s /= corr_z[sample_bin[j]]
+            
     # Plot -------------------------------------------------------
     figure(frameon=True)
+
     
     subplot(311, title="Acceleration along X")
-    #plot(id[abs(errx_s) > 0.001], e_errx_s , 'ro')
-    plot(pos, e_errx_s , 'ro')
-    # for j in range(size(pos)):
-    #     if ( pos[j-1] != pos[j] ):
-    #         text(pos[j], e_errx_s[j]-0.005, "%d"%id[j], fontsize=10)
-    #     else:
-    #         text(pos[j], e_errx_s[j]-0.015, "%d"%id[j], fontsize=10)
-    text( 0., 0.1, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
+    scatter(pos[dist<1.], e_errx_s[dist<1.] ,c=dist[dist<1.], marker='o', s=1, linewidth=0, cmap='jet')
+    plot([-dist_cutoff_ratio/2., -dist_cutoff_ratio/2.],  [-0.01, 0.01], 'k--')
+    plot([dist_cutoff_ratio/2., dist_cutoff_ratio/2.],  [-0.01, 0.01], 'k--')
+    text( 0., 0.005, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
     xlim(-1.2*max(abs(pos)), 1.2*max(abs(pos)))
-    ylim(-0.05, 0.05)
+    ylim(-0.03, 0.03)
     grid()
     
     subplot(312, title="Acceleration along Y")
-    #plot(id[abs(erry_s) > 0.001], e_erry_s , 'ro')
-    plot(pos, e_erry_s , 'ro')
-    # for j in range(size(pos)):
-    #     if ( pos[j-1] != pos[j] ):
-    #         text(pos[j], e_errx_s[j]-0.005, "%d"%id[j], fontsize=10)
-    #     else:
-    #         text(pos[j], e_errx_s[j]-0.015, "%d"%id[j], fontsize=10)
-    text( 0., 0.1, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
+    scatter(pos[dist<1.], e_erry_s[dist<1.] , c=dist[dist<1.], marker='o', s=1, linewidth=0, cmap='jet')
+    plot([-dist_cutoff_ratio/2., -dist_cutoff_ratio/2.],  [-0.03, 0.03], 'k--')
+    plot([dist_cutoff_ratio/2., dist_cutoff_ratio/2.],  [-0.03, 0.03], 'k--')
+    text( 0., 0.005, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
     xlim(-1.2*max(abs(pos)), 1.2*max(abs(pos)))
-    ylim(-0.05, 0.05)  
+    ylim(-0.03, 0.03)  
     grid()
     
     subplot(313, title="Acceleration along Z")
-    #plot(id[abs(errz_s) > 0.001], e_errz_s , 'ro', label="Sorted")
-    plot(pos, e_errz_s , 'ro', label="Sorted")
-    # for j in range(size(pos)):
-    #     if ( pos[j-1] != pos[j] ):
-    #         text(pos[j], e_errx_s[j]-0.005, "%d"%id[j], fontsize=10)
-    #     else:
-    #         text(pos[j], e_errx_s[j]-0.015, "%d"%id[j], fontsize=10)
-    text( 0., 0.1, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
-
-    legend(loc="upper right")
+    scatter(pos[dist<1.], e_errz_s[dist<1.] , c=dist[dist<1.], label="Sorted", marker='o', s=1, linewidth=0, cmap='jet')
+    plot([-dist_cutoff_ratio/2., -dist_cutoff_ratio/2.],  [-0.03, 0.03], 'k--')
+    plot([dist_cutoff_ratio/2., dist_cutoff_ratio/2.],  [-0.03, 0.03], 'k--')
+    text( 0., 0.005, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
+    #legend(loc="upper right")
     xlim(-1.2*max(abs(pos)), 1.2*max(abs(pos)))
-    ylim(-0.05, 0.05)
-    #xlim(0, size(id)-1)
+    ylim(-0.03, 0.03)
     grid()
 
-    savefig("1quadrupole_accelerations_relative_%d.png"%orientation)
+    savefig("quadrupole_accelerations_relative_%d.png"%orientation)
     close()
 
 
+
+    figure(frameon=True)
+    
+    subplot(311, title="Acceleration along X")
+    scatter(dist, e_errx_s )
+    text( 0., 0.005, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
+    #xlim(-1.2*max(abs(pos)), 1.2*max(abs(pos)))
+    #ylim(-0.01, 0.01)
+    grid()
+    
+    subplot(312, title="Acceleration along Y")
+    scatter(dist, e_erry_s )
+    text( 0., 0.005, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
+    #xlim(-1.2*max(abs(pos)), 1.2*max(abs(pos)))
+    #ylim(-0.01, 0.01)  
+    grid()
+    
+    subplot(313, title="Acceleration along Z")
+    scatter(dist, e_errz_s , label="Sorted")
+    text( 0., 0.005, "axis=( %d %d %d )"%(axis[orientation*3 + 0], axis[orientation*3 + 1], axis[orientation*3 + 2]) , ha='center', backgroundcolor='w', fontsize=14)
+    #legend(loc="upper right")
+    #xlim(-1.2*max(abs(pos)), 1.2*max(abs(pos)))
+    #ylim(-0.01, 0.01)
+    grid()
+
+    savefig("error_distance_%d.png"%orientation)
+    close()
+
+
+    
     # # Plot -------------------------------------------------------
     # figure(frameon=True)
     
@@ -207,22 +258,22 @@ for orientation in range( 26 ):
     
     
     
-    # figure(frameon=True)
-    # subplot(311, title="Acceleration along X")
-    # hist(e_errx_s, bins=bins, normed=1, histtype='step', rwidth=0.01, color='r', label="Sorted")
-    # legend(loc="upper right")
-    # xlim(-0.12, 0.12)
+    figure(frameon=True)
+    subplot(311, title="Acceleration along X")
+    hist(e_errx_s, bins=bins, normed=1, histtype='step', rwidth=0.01, color='r', label="Sorted")
+    legend(loc="upper right")
+    xlim(-0.12, 0.12)
     
-    # subplot(312, title="Acceleration along Y")
-    # hist(e_erry_s, bins=bins, normed=1, histtype='step', rwidth=0.01, color='r')
-    # xlim(-0.12, 0.12)
+    subplot(312, title="Acceleration along Y")
+    hist(e_erry_s, bins=bins, normed=1, histtype='step', rwidth=0.01, color='r')
+    xlim(-0.12, 0.12)
 
-    # subplot(313, title="Acceleration along Z")
-    # hist(e_errz_s, bins=bins, normed=1, histtype='step', rwidth=0.01, color='r')
-    # xlim(-0.12, 0.12)
+    subplot(313, title="Acceleration along Z")
+    hist(e_errz_s, bins=bins, normed=1, histtype='step', rwidth=0.01, color='r')
+    xlim(-0.12, 0.12)
     
-    # savefig("histogram_%d.png"%orientation)
-    # close()
+    savefig("histogram_%d.png"%orientation)
+    close()
 
 
 
diff --git a/examples/test_bh_sorted.c b/examples/test_bh_sorted.c
index 4b8469bf83cc8c5b378ce4a30822b3f60d7f5d50..185377b3b663afb413f1b6592cf361cfd2815e7e 100644
--- a/examples/test_bh_sorted.c
+++ b/examples/test_bh_sorted.c
@@ -190,6 +190,7 @@ static inline void multipole_iact(struct multipole *d, const float *x, float* a)
   w = const_G * ir * ir * ir * d->mass;
   for (k = 0; k < 3; k++) a[k] -= w * dx[k];
 
+
   /* Compute some helpful terms */
   float w1 = const_G * ir * ir * ir * ir * ir; 
   float w2 = -2.5f * const_G * ir * ir * ir * ir * ir * ir * ir;
@@ -2207,18 +2208,30 @@ void test_direct_neighbour(int N_parts, int orientation) {
   }
 
   /* Position along the axis */
-  double *position;
+  double *position, *ortho_dist;
   if ((position = (double *)malloc(sizeof(double) * N_parts * 2)) == NULL)
     error("Failed to allocate position buffer.");
+  if ((ortho_dist = (double *)malloc(sizeof(double) * N_parts * 2)) == NULL)
+    error("Failed to allocate orthogonal distance buffer.");
 
   float w = 1.0f / sqrtf(shift[0]*shift[0] + shift[1]*shift[1] + shift[2]*shift[2]);
   shift[0] *= w;
   shift[1] *= w;
   shift[2] *= w;
 
-  for (k = 0; k < 2 * N_parts; ++k)
-    position[k] = parts[k].x[0] * shift[0] + parts[k].x[1] * shift[1] +
-      parts[k].x[2] * shift[2];
+  for (k = 0; k < 2 * N_parts; ++k) {
+    float dx = parts[k].x[0] * shift[0];
+    float dy = parts[k].x[1] * shift[1];
+    float dz = parts[k].x[2] * shift[2];
+
+    position[k] =  dx + dy + dz;
+
+    dx = (parts[k].x[1] - 0.5f)*shift[2] - (parts[k].x[2] - 0.5f)*shift[1];
+    dy = (parts[k].x[2] - 0.5f)*shift[0] - (parts[k].x[0] - 0.5f)*shift[2];
+    dz = (parts[k].x[0] - 0.5f)*shift[1] - (parts[k].x[1] - 0.5f)*shift[0];
+
+    ortho_dist[k] = sqrtf(dx*dx + dy*dy + dz*dz);
+  }
 
   /* Now, output everything */
   char fileName[100];
@@ -2226,12 +2239,13 @@ void test_direct_neighbour(int N_parts, int orientation) {
   message("Writing file '%s'", fileName);
   FILE *file = fopen(fileName, "w");
   fprintf(file,
-          "# ID m r x y z a_u.x   a_u.y    a_u.z    a_s.x    a_s.y    a_s.z\n");
+          "# ID m r x y z a_u.x   a_u.y    a_u.z    a_s.x    a_s.y    a_s.z    ortho\n");
   for (k = 0; k < 2 * N_parts; k++) {
-    fprintf(file, "%d %e %e %e %e %e %e %e %e %e %e %e\n", parts[k].id,
+    fprintf(file, "%d %e %e %e %e %e %e %e %e %e %e %e %e\n", parts[k].id,
             parts[k].mass, position[k], parts[k].x[0], parts[k].x[1],
             parts[k].x[2], parts[k].a_exact[0], parts[k].a_exact[1],
-            parts[k].a_exact[2], parts[k].a[0], parts[k].a[1], parts[k].a[2]);
+            parts[k].a_exact[2], parts[k].a[0], parts[k].a[1], parts[k].a[2],
+	    ortho_dist[k]);
   }
   fclose(file);
 
@@ -2490,11 +2504,11 @@ int main(int argc, char *argv[]) {
             N_parts);
 
     /* Run the test */
-    for (k = 0; k < 26; ++k) test_direct_neighbour(N_parts, k);
-    /* k++; */
-    /* test_direct_neighbour(N_parts, 0); */
-    /* test_direct_neighbour(N_parts, 8); */
-
+    //for (k = 0; k < 26; ++k) test_direct_neighbour(N_parts, k);
+    test_direct_neighbour(N_parts, 0);
+    test_direct_neighbour(N_parts, 1);
+    test_direct_neighbour(N_parts, 4);
+    k++;
 
     /* Dump arguments */
     message("Interacting one cell with %d particles with its 27 neighbours"