diff --git a/src/libaevol/ExpManager.cpp b/src/libaevol/ExpManager.cpp
index 296c858126100615c8f221796c0413b559d96861..32a3679560b91aa62b751a3e2f2508ae55019a00 100644
--- a/src/libaevol/ExpManager.cpp
+++ b/src/libaevol/ExpManager.cpp
@@ -119,10 +119,10 @@ ExpManager::ExpManager()
 // ===========================================================================
 ExpManager::~ExpManager() noexcept
 {
+  delete simd_individual;
   delete exp_s_;
   delete output_m_;
   delete world_;
-  delete simd_individual;
 }
 
 // ===========================================================================
diff --git a/src/libaevol/SIMD_Individual.cpp b/src/libaevol/SIMD_Individual.cpp
index cd5861d842caac7aab477c46ed6c03dcfe5ca968..dbe213751f0c83c7ef955d9e0efcd9bec84a903c 100644
--- a/src/libaevol/SIMD_Individual.cpp
+++ b/src/libaevol/SIMD_Individual.cpp
@@ -284,12 +284,27 @@ void SIMD_Individual::do_mutation() {
 
 SIMD_Individual::~SIMD_Individual() {
   for (int indiv_id = 0; indiv_id < (int) exp_m_->nb_indivs(); indiv_id++) {
-    internal_simd_struct[indiv_id]->rnas.clear();
-    internal_simd_struct[indiv_id]->proteins.clear();
-    delete internal_simd_struct[indiv_id]->dna_;
+    if (internal_simd_struct[indiv_id] != nullptr) {
+      internal_simd_struct[indiv_id]->rnas.clear();
+      internal_simd_struct[indiv_id]->proteins.clear();
+
+      if (internal_simd_struct[indiv_id]->usage_count_ > 1)
+        internal_simd_struct[indiv_id]->usage_count_--;
+      else {
+        delete internal_simd_struct[indiv_id];
+        internal_simd_struct[indiv_id] = nullptr;
+      }
+    }
+
+    if (prev_internal_simd_struct[indiv_id] != nullptr) {
+      if (prev_internal_simd_struct[indiv_id]->usage_count_ > 1)
+        prev_internal_simd_struct[indiv_id]->usage_count_--;
+      else {
+        delete prev_internal_simd_struct[indiv_id];
+        prev_internal_simd_struct[indiv_id] = nullptr;
+      }
+    }
 
-    delete internal_simd_struct[indiv_id];
-    delete prev_internal_simd_struct[indiv_id];
   }
 
   delete[] prev_internal_simd_struct;