diff --git a/src/adp/adp.c b/src/adp/adp.c
index 656b09e8e9cdb64c449029075fc81ff600f5e8c5..8544b57a6c45f1c74a42bced150aaa9806384041 100644
--- a/src/adp/adp.c
+++ b/src/adp/adp.c
@@ -116,142 +116,6 @@ idx_t get_j_ksel_idx(global_context_t* ctx, idx_t j, idx_t ksel, MPI_Win exposed
     }                 
 }
 
-void compute_density_kstarnn_rma(global_context_t* ctx, const float_t d, int verbose){
-
-    /*
-     * Point density computation:                       
-     * args:                                            
-     * - paricles: array of structs                   
-     * - d       : intrinsic dimension of the dataset 
-     * - points  : number of points in the dataset    
-     */
-
-
-    MPI_Info info;
-
-
-    MPI_Barrier(ctx -> mpi_communicator);
-    idx_t k = ctx -> local_datapoints[0].ngbh.N;
-
-    struct timespec start_tot, finish_tot;
-    double elapsed_tot;
-
-    datapoint_info_t* local_datapoints = ctx -> local_datapoints;
-
-	if(verbose)
-	{
-		printf("Density and k* estimation:\n");
-		clock_gettime(CLOCK_MONOTONIC, &start_tot);
-	}
-
-    idx_t kMAX = ctx -> local_datapoints[0].ngbh.N - 1;   
-
-    float_t omega = 0.;  
-    if(sizeof(float_t) == sizeof(float)){ omega = powf(PI_F,d/2)/tgammaf(d/2.0f + 1.0f);}  
-    else{omega = pow(M_PI,d/2.)/tgamma(d/2.0 + 1.0);}
-
-
-    MPI_Win exposed_ngbh;
-    MPI_Win_create( ctx -> __local_heap_buffers, 
-                    ctx -> local_n_points * k * sizeof(heap_node), 
-                    1, MPI_INFO_NULL, 
-                    ctx -> mpi_communicator, 
-                    &exposed_ngbh);
-
-    MPI_Win_fence(0, exposed_ngbh);
-    MPI_Win_lock_all(0, exposed_ngbh);
-
-    MPI_Barrier(ctx -> mpi_communicator);
-
-    #pragma omp parallel for
-    for(idx_t i = 0; i < ctx -> local_n_points; ++i)
-    {
-        for(idx_t k = 0; k <= kMAX; ++k)
-        {
-            local_datapoints[i].ngbh.data[k].value = omega * pow(local_datapoints[i].ngbh.data[k].value, d/2.);  
-        }
-    }
-
-    for(idx_t i = 0; i < ctx -> local_n_points; ++i)
-    {
-
-        idx_t j = 4;
-        idx_t k;
-        float_t dL  = 0.;
-        float_t vvi = 0.;
-		float_t vvj = 0.;
-		float_t vp  = 0.;
-        while(j < kMAX  && dL < DTHR)
-        {
-            idx_t ksel = j - 1;
-            //vvi = omega * pow(local_datapoints[i].ngbh.data[ksel].value,d/2.);
-            vvi = local_datapoints[i].ngbh.data[ksel].value;
-
-            idx_t jj = local_datapoints[i].ngbh.data[j].array_idx;
-
-            /* 
-             * note jj can be an halo point 
-             * need to search maybe for it in foreign nodes
-             * */
-            //float_t dist_jj = get_j_ksel_dist(ctx, jj, ksel, exposed_ngbh);
-            //vvj = omega * pow(dist_jj,d/2.);
-            vvj = get_j_ksel_dist(ctx, jj, ksel, exposed_ngbh);
-
-            vp = (vvi + vvj)*(vvi + vvj);
-            dL = -2.0 * ksel * log(4.*vvi*vvj/vp);
-            j = j + 1;
-        }
-        if(j == kMAX)
-        {
-            k = j - 1;
-            //vvi = omega * pow(ctx -> local_datapoints[i].ngbh.data[k].value,d/2.);
-            vvi = ctx -> local_datapoints[i].ngbh.data[k].value;
-        }
-        else
-        {
-            k = j - 2;
-        }
-        local_datapoints[i].kstar = k;
-        local_datapoints[i].log_rho = log((float_t)(k)/vvi/((float_t)(ctx -> n_points)));
-        //dp_info[i].log_rho = log((float_t)(k)) - log(vvi) -log((float_t)(points));
-        local_datapoints[i].log_rho_err =   1.0/sqrt((float_t)k); //(float_t)(-Q_rsqrt((float)k));
-        local_datapoints[i].g = local_datapoints[i].log_rho - local_datapoints[i].log_rho_err;
-    }
-
-	if(verbose)
-	{
-		clock_gettime(CLOCK_MONOTONIC, &finish_tot);
-		elapsed_tot = (finish_tot.tv_sec - start_tot.tv_sec);
-		elapsed_tot += (finish_tot.tv_nsec - start_tot.tv_nsec) / 1000000000.0;
-		printf("\tTotal time: %.3lfs\n\n", elapsed_tot);
-	}
-
-    MPI_Win_unlock_all(exposed_ngbh);
-    MPI_Win_fence(0, exposed_ngbh);
-    MPI_Win_free(&exposed_ngbh);
-
-    #if defined(WRITE_DENSITY)
-        /* densities */
-        float_t* den = (float_t*)MY_MALLOC(ctx -> local_n_points * sizeof(float_t));
-        float_t* gs = (float_t*)MY_MALLOC(ctx -> local_n_points * sizeof(float_t));
-        idx_t* ks = (idx_t*)MY_MALLOC(ctx -> local_n_points * sizeof(idx_t));
-
-        for(int i = 0; i < ctx -> local_n_points; ++i) den[i] = ctx -> local_datapoints[i].log_rho;
-        for(int i = 0; i < ctx -> local_n_points; ++i) ks[i] = ctx -> local_datapoints[i].kstar;
-        for(int i = 0; i < ctx -> local_n_points; ++i) gs[i] = ctx -> local_datapoints[i].g;
-
-        ordered_buffer_to_file(ctx, den, sizeof(float_t), ctx -> local_n_points, "bb/ordered_density.npy");
-        ordered_buffer_to_file(ctx, ks, sizeof(idx_t), ctx -> local_n_points, "bb/ks.npy");
-        ordered_buffer_to_file(ctx, gs, sizeof(float_t), ctx -> local_n_points, "bb/g.npy");
-
-        ordered_data_to_file(ctx, "bb/ordered_data.npy");
-        free(den);
-        free(ks);
-    #endif
-    return;
-
-
-}
 
 void compute_density_kstarnn_rma_v2(global_context_t* ctx, const float_t d, int verbose){
 
@@ -288,6 +152,12 @@ void compute_density_kstarnn_rma_v2(global_context_t* ctx, const float_t d, int
     else{omega = pow(M_PI,d/2.)/tgamma(d/2.0 + 1.0);}
 
 
+    // [LT comment] it may be the case to promote this win to a global variable
+    //              and to leave it open until it is needed (then also for the next
+    //              heuristics
+    //              Also, shall we give som info argument to it ?
+    //
+
     MPI_Win exposed_ngbh;
     MPI_Win_create( ctx -> __local_heap_buffers, 
                     ctx -> local_n_points * k * sizeof(heap_node), 
diff --git a/src/tree/heap.h b/src/tree/heap.h
index 84fc8f49da59904ed862efeed36d6ae7471f5406..9d86491c933d1c7e97a6f86224542520026b3484 100644
--- a/src/tree/heap.h
+++ b/src/tree/heap.h
@@ -40,6 +40,9 @@ struct heap_node
 
 struct heap
 {
+  // [LT comment] is it possible to drop this N in favor of a global variable,
+  //              when the tree is compiled to be used in adP?
+  //              if N is constant, then we can save 8 bytes here
    idx_t N; 
    idx_t count;
    struct heap_node* data;