diff --git a/src/libaevol/SIMD_Individual.cpp b/src/libaevol/SIMD_Individual.cpp
index 257e7bc805f9f74c08b2462493993362bf156294..872e1afbcf33f67e05911e673cc128190ddae5a0 100644
--- a/src/libaevol/SIMD_Individual.cpp
+++ b/src/libaevol/SIMD_Individual.cpp
@@ -4749,7 +4749,7 @@ void SIMD_Individual::run_a_step(double w_max, double selection_pressure,bool op
         exp_m_->output_m()->write_tree(AeTime::time());
     }
 
-  if (standalone_ && AeTime::time() % exp_m_->backup_step() == 0 && !exp_m_->record_light_tree()) {
+  if (standalone_ && AeTime::time() % exp_m_->backup_step() == 0) {
 
     for (int indiv_id = 0; indiv_id < (int) exp_m_->nb_indivs(); indiv_id++) {
       int x = indiv_id / exp_m_->world()->height();
diff --git a/src/post_treatments/ancestor_stats.cpp b/src/post_treatments/ancestor_stats.cpp
index 096aaf18bcfca73f3fc169e175c105c8f76c871d..23c1221836dc84569c48b026ee72c4bdbddd9b64 100644
--- a/src/post_treatments/ancestor_stats.cpp
+++ b/src/post_treatments/ancestor_stats.cpp
@@ -96,6 +96,7 @@ int main(int argc, char* argv[]) {
   gzread(lineage_file, &t0, sizeof(t0));
   gzread(lineage_file, &t_end, sizeof(t_end));
   gzread(lineage_file, &final_indiv_index, sizeof(final_indiv_index));
+  gzread(lineage_file, &final_indiv_rank,  sizeof(final_indiv_rank));
 
   if (verbose) {
     printf("\n\n""===============================================================================\n");
@@ -112,8 +113,6 @@ int main(int argc, char* argv[]) {
   // =============================
   ExpManager* exp_manager = new ExpManager();
   exp_manager->load(t0, true, false);
-    exp_manager->exp_s()->set_fuzzy_flavor(1);
-    FuzzyFactory::fuzzyFactory = new FuzzyFactory(exp_manager->exp_s());
 
   // The current version doesn't allow for phenotypic variation nor for
   // different phenotypic targets among the grid
@@ -143,8 +142,8 @@ int main(int argc, char* argv[]) {
   auto prefix = "ancestor_stats/ancestor_stats";
   char postfix[255];
   snprintf(postfix, 255,
-           "-b" TIMESTEP_FORMAT "-e" TIMESTEP_FORMAT "-i%" PRId32 "-r%" PRId32,
-          t0, t_end, final_indiv_index, final_indiv_rank);
+      "-b" TIMESTEP_FORMAT "-e" TIMESTEP_FORMAT "-i%" PRId32 "-r%" PRId32,
+      t0, t_end, final_indiv_index, final_indiv_rank);
   bool best_indiv_only = true;
   bool addition_old_stats = false;
   bool delete_old_stats = true;
@@ -208,12 +207,14 @@ int main(int argc, char* argv[]) {
   // ==================================================
   //  Prepare the initial ancestor and write its stats
   // ==================================================
-  Individual* indiv = new Individual(exp_manager, lineage_file);
-  //auto* indiv = grid_cell->individual();
-  indiv->EvaluateInContext(exp_manager->world()->grid(0,0)->habitat());
+  GridCell* grid_cell = new GridCell(lineage_file, exp_manager, nullptr);
+  auto* indiv = grid_cell->individual();
+  indiv->Evaluate();
   indiv->compute_statistical_data();
   indiv->compute_non_coding();
 
+  mystats->write_statistics_of_this_indiv(t0,indiv, nullptr);
+
   // Additional outputs
   write_environment_stats(t0, phenotypicTargetHandler, env_output_file);
   write_terminators_stats(t0, indiv, term_output_file);
@@ -255,7 +256,7 @@ int main(int argc, char* argv[]) {
         printf("Rebuilding ancestor at generation %" PRId64
             " (index %" PRId32 ")...", time(), index);
 
-    indiv->ReevaluateInContext(exp_manager->world()->grid(0,0)->habitat());
+    indiv->Reevaluate();
 
     // 2) Replay replication (create current individual's child)
     GeneticUnit& gen_unit = indiv->genetic_unit_nonconst(0);
@@ -377,7 +378,7 @@ int main(int argc, char* argv[]) {
     }
 
     // 3) All the mutations have been replayed, we can now evaluate the new individual
-      indiv->ReevaluateInContext(exp_manager->world()->grid(0,0)->habitat());
+    indiv->Reevaluate();
     indiv->compute_statistical_data();
     indiv->compute_non_coding();
 
@@ -426,7 +427,7 @@ int main(int argc, char* argv[]) {
 
 FILE* open_environment_stat_file(const char* prefix, const char* postfix) {
   // Open file
-  char* env_output_file_name = new char[80];
+  char* env_output_file_name = new char[120];
   sprintf(env_output_file_name, "stats/%s_envir%s.out", prefix, postfix);
   FILE* env_output_file = fopen(env_output_file_name, "w");
   delete env_output_file_name;
@@ -458,7 +459,7 @@ void write_environment_stats(int64_t t, const PhenotypicTargetHandler* pth,
 
 
 FILE* open_terminators_stat_file(const char* prefix, const char* postfix) {
-  char* term_output_file_name = new char[80];
+  char* term_output_file_name = new char[120];
   sprintf(term_output_file_name, "stats/%s_nb_term%s.out", prefix, postfix);
   FILE* term_output_file = fopen(term_output_file_name, "w");
   delete [] term_output_file_name;
@@ -485,7 +486,7 @@ void write_terminators_stats(int64_t t,  Individual* indiv,
 
 FILE* open_zones_stat_file(const char* prefix, const char* postfix) {
   // Open file
-  char* zones_output_file_name = new char[80];
+  char* zones_output_file_name = new char[120];
   sprintf(zones_output_file_name, "stats/%s_zones%s.out", prefix, postfix);
   FILE* zones_output_file = fopen(zones_output_file_name, "w");
   delete [] zones_output_file_name;
@@ -606,7 +607,7 @@ void write_zones_stats(int64_t t,
 
 
 FILE* open_operons_stat_file(const char* prefix, const char* postfix) {
-  char* operons_output_file_name = new char[80];
+  char* operons_output_file_name = new char[120];
   sprintf(operons_output_file_name, "stats/%s_operons%s.out", prefix, postfix);
   FILE* operons_output_file = fopen(operons_output_file_name, "w");
   delete [] operons_output_file_name,
diff --git a/src/post_treatments/soft_lineage.cpp b/src/post_treatments/soft_lineage.cpp
index 9f02187f86358003fd3e02ae20ff8cb04eb8ba07..22a0acb5b4c0b95ceaef088f0b42a790ad968ba5 100644
--- a/src/post_treatments/soft_lineage.cpp
+++ b/src/post_treatments/soft_lineage.cpp
@@ -82,15 +82,27 @@ int main(int argc, char** argv) {
   printf("OK\n");
   printf("====================================\n");
 
-  //Find the best indiv
   int32_t best_id = 0;
   int32_t best_rank = 0;
+
+  // Specify the index of indiv
+  int final_indiv_index = 0;
+
   for(auto rep : replics[last_gen]) {
-    if(rep.second->rank() > best_rank) {
+    if (rep.first == final_indiv_index) {
       best_rank = rep.second->rank();
       best_id = rep.first;
     }
   }
+
+  //Find the best indiv
+
+  /*for(auto rep : replics[last_gen]) {
+    if(rep.second->rank() > best_rank) {
+      best_rank = rep.second->rank();
+      best_id = rep.first;
+    }
+  }*/
   //His rank have to be the number of indivs
   std::cout << "Best indiv is : " << best_id << " with rank : " << best_rank << '\n';
   int32_t anc_id = best_id;
@@ -115,12 +127,15 @@ int main(int argc, char** argv) {
     exit(EXIT_FAILURE);
   }
 
+  //printf("Luca is %d\n",luca_time);
   for(int64_t gen = 1 ; gen < luca_time ; ) {
+      //printf("Searching at gen %d\n",gen);
     c = gzgetc(trunc_file);
     if(c < 0) {
       gzclose(trunc_file);
       current_gen += backup_step;
       if(current_gen > last_gen) {
+          //printf("Current gen %d -- %d\n",current_gen,last_gen);
         break;
       }
       sprintf(input_file_name, "lightTree/tree_trunc" TIMESTEP_FORMAT ".ae", current_gen);
@@ -133,8 +148,8 @@ int main(int argc, char** argv) {
     }
     gzungetc(c, trunc_file);
     ReplicationReport* rep = new ReplicationReport(trunc_file, nullptr);
-    //printf("Getting the replication report for the ancestor at generation %" PRId64 "\n", gen);
     reports[gen] = rep;
+      //printf("Getting TRUNC the replication report for the ancestor at generation %" PRId64 " => %d (%d)\n", gen,rep->id(),rep->parent_id());
     gen++;
   }
   printf("OK\n");
@@ -158,6 +173,8 @@ int main(int argc, char** argv) {
     exit(EXIT_FAILURE);
   }
 
+    printf("Loading individual %d\n",reports[1]->parent_id());
+
   const Individual& initial_ancestor = *(exp_manager->indiv_by_id(reports[1]->parent_id()));
 
   // Write file "header"