diff --git a/src/aevol_create.cpp b/src/aevol_create.cpp
index ffaf30cab928cea85f9ca83a1ca1362c7a1fcc51..0062a1e7cda740118115143accb07dcfc6600b66 100644
--- a/src/aevol_create.cpp
+++ b/src/aevol_create.cpp
@@ -91,9 +91,7 @@ int main(int argc, char* argv[]) {
       exit(EXIT_FAILURE);
     }
     lchromosome = strlen(raw_chromosome) - 1;
-    chromosome = new char[lchromosome + 1]; // Warning: will become the DNA of the
-                                            // first individual created -> do not
-                                            // delete, will be freed in Dna
+    chromosome = new char[lchromosome + 1];
     strncpy(chromosome, raw_chromosome, lchromosome + 1);
     printf("Loading chromosome from text file %s (%" PRId32 " base pairs) \n",
         chromosome_file_name, lchromosome);
@@ -104,6 +102,7 @@ int main(int argc, char* argv[]) {
   if(param_file_name != nullptr) {
     if (lchromosome > -1) {
       ParamLoader::load(param_values, exp_manager, true, chromosome, lchromosome);
+      delete chromosome;
     } else {
       ParamLoader::load(param_values, exp_manager, true);
     }
diff --git a/src/libaevol/io/parameters/ParamLoader.cpp b/src/libaevol/io/parameters/ParamLoader.cpp
index 4c9397f1a0127b69fbf65d7e8cc9d0e82b9c8495..5e69822f0a0d5f791f7985af4d2aa9533a9e5441 100644
--- a/src/libaevol/io/parameters/ParamLoader.cpp
+++ b/src/libaevol/io/parameters/ParamLoader.cpp
@@ -46,7 +46,7 @@ namespace aevol {
 void ParamLoader::load(const ParamValues& param_values,
                        ExpManager* exp_m,
                        bool verbose,
-                       char* chromosome,
+                       const char* chromosome,
                        int32_t lchromosome) {
   // Initialize master prng
   // Will be used to create the initial genome(s) and to generate seeds for the other prngs
@@ -275,7 +275,12 @@ void ParamLoader::load(const ParamValues& param_values,
 
 #endif
 
-    indiv->add_GU(chromosome, lchromosome);
+    // Make a copy of the provided chromosome and transfer ownership to the genetic unit we create with it
+    char* chromosome_copy = new char[lchromosome + 1];
+    strncpy(chromosome_copy, chromosome, lchromosome + 1);
+    indiv->add_GU(chromosome_copy, lchromosome);
+    chromosome_copy = nullptr;
+
     indiv->genetic_unit_nonconst(0).set_min_gu_length(param_values.chromosome_minimal_length_);
     indiv->genetic_unit_nonconst(0).set_max_gu_length(param_values.chromosome_maximal_length_);
 
diff --git a/src/libaevol/io/parameters/ParamLoader.h b/src/libaevol/io/parameters/ParamLoader.h
index de423c1f10f5840f2892b60fb6aca920617be86f..3e0c9c30a57a7aa78589cceae9e71072cd812922 100644
--- a/src/libaevol/io/parameters/ParamLoader.h
+++ b/src/libaevol/io/parameters/ParamLoader.h
@@ -59,7 +59,7 @@ class ParamLoader {
   static void load(const ParamValues& param_values,
                    ExpManager* exp_m,
                    bool verbose = false,
-                   char* chromosome = nullptr,
+                   const char* chromosome = nullptr,
                    int32_t lchromosome = 0);
 
  protected: