diff --git a/src/logger.c b/src/logger.c
index 9254b6678c99406ce65d4e7b157561e89333669c..781be6b8fe841d7903f096530aa51d099dcf3788 100644
--- a/src/logger.c
+++ b/src/logger.c
@@ -40,7 +40,7 @@
 #include "units.h"
 #include "engine.h"
 
-char LOGGER_VERSION[LOGGER_VERSION_SIZE] = "0.1";
+char logger_version[logger_version_size] = "0.1";
 
 
 const unsigned int logger_datatype_size[logger_data_count] = {
@@ -63,9 +63,11 @@ const unsigned int logger_datatype_size[logger_data_count] = {
  * @return updated buff
  */
 char *logger_write_chunk_header(char *buff, const unsigned int *mask, const size_t *offset, const size_t offset_new) {
+  /* write mask */
   memcpy(buff, mask, logger_mask_size);
   buff += logger_mask_size;
-  
+
+  /* write offset */
   size_t diff_offset = offset_new - *offset;
   memcpy(buff, &diff_offset, logger_offset_size);
   buff += logger_offset_size;
@@ -104,12 +106,12 @@ void logger_write_general_data(struct dump *d, struct logger_parameters *params,
 {
   char *buff;
   /* write name */
-  buff = dump_get(d, params->name, offset);
-  memcpy(buff, name, params->name);
+  buff = dump_get(d, params->name_size, offset);
+  memcpy(buff, name, params->name_size);
 
   /* write data type */
-  buff = dump_get(d, LOGGER_DATATYPE_SIZE, offset);
-  memcpy(buff, &data_type, LOGGER_DATATYPE_SIZE);
+  buff = dump_get(d, params->data_type_size, offset);
+  memcpy(buff, &data_type, params->data_type_size);
 
   /* write value */
   if (data_type >= logger_data_count)
@@ -372,15 +374,13 @@ void logger_ensure_size(
     struct logger *log, size_t total_nr_parts,
     size_t total_nr_gparts, size_t total_nr_sparts) {
   size_t limit, i;
-  struct logger_parameters log_params;
-  logger_parameters_init(&log_params);
+  struct logger_parameters *log_params = log->params;
 
+  limit = log_params->offset_size + log_params->mask_size;
 
-  limit = log_params.offset + log_params.mask;
-
-  for(i=0; i < log_params.nber_mask; i++) {
-    if (log_params.masks[i] != logger_mask_timestamp)
-      limit += log_params.masks_size[i];
+  for(i=0; i < log_params->nber_mask; i++) {
+    if (log_params->masks[i] != logger_mask_timestamp)
+      limit += log_params->masks_size[i];
   }
 
   limit *= total_nr_parts;
@@ -393,8 +393,6 @@ void logger_ensure_size(
   if (total_nr_sparts > 0)
     error("Not implemented");
   
-  logger_parameters_free(&log_params);
-
   dump_ensure(log->dump, log->buffer_size);
 }
 
@@ -419,7 +417,11 @@ void logger_init(struct logger *log, const struct swift_params *params, const st
   /* init dump */
   log->dump = malloc(sizeof(struct dump));
   struct dump *dump_file = log->dump;
-  
+
+  /* init parameters */
+  log->params = (struct logger_parameters*) malloc(sizeof(struct logger_parameters));
+  logger_parameters_init(log->params);
+    
   dump_init(dump_file, logger_name_file, log->buffer_size);
   dump_ensure(dump_file, log->buffer_size);
   log->timestamp_offset = 0;
@@ -432,6 +434,7 @@ void logger_init(struct logger *log, const struct swift_params *params, const st
  */
 void logger_clean(struct logger *log) {
   dump_close(log->dump);
+  free(log->params);
 }
 
 /**
@@ -451,9 +454,8 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
   char *skip_header;
   size_t file_offset;
 
-  struct logger_parameters log_params;
+  const struct logger_parameters log_params = *log->params;
   struct dump *dump = log->dump;
-  logger_parameters_init(&log_params);
   
   file_offset = dump->file_offset;
     
@@ -463,39 +465,39 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
   logger_write_data(dump, &file_offset, logger_string_size, &logger_version);
  
   /* write number of bytes used for the offsets */
-  logger_write_data(dump, &file_offset, logger_number_size, &log_params.offset);
+  logger_write_data(dump, &file_offset, logger_number_size, &log_params.offset_size);
 
   /* write offset direction */
   int reversed = 0;
-  logger_write_data(dump, &file_offset, logger_data_size[logger_data_bool], &reversed);
+  logger_write_data(dump, &file_offset, logger_datatype_size[logger_data_bool], &reversed);
 
   /* will write the offset of the first particle here */
-  skip_header = dump_get(dump, log_params.offset, &file_offset);
+  skip_header = dump_get(dump, log_params.offset_size, &file_offset);
 
   /* write number of bytes used for names */
-  logger_write_data(dump, &file_offset, LOGGER_NAME_SIZE, &log_params.name);
+  logger_write_data(dump, &file_offset, logger_number_size, &log_params.name_size);
 
   /* write number of bytes used for numbers */
-  logger_write_data(dump, &file_offset, LOGGER_NBER_SIZE, &log_params.number);
+  logger_write_data(dump, &file_offset, logger_number_size, &log_params.number_size);
 
   /* write number of bytes used for masks */
-  logger_write_data(dump, &file_offset, LOGGER_MASK_SIZE, &log_params.mask);
+  logger_write_data(dump, &file_offset, logger_number_size, &log_params.mask_size);
 
   /* write number of masks */
-  logger_write_data(dump, &file_offset, log_params.number, &log_params.nber_mask);
+  logger_write_data(dump, &file_offset, log_params.number_size, &log_params.nber_mask);
   
   /* write masks */
   // loop over all mask type
   for(i=0; i<log_params.nber_mask; i++) {
     // mask name
-    size_t j = i * log_params.name;
-    logger_write_data(dump, &file_offset, log_params.name, &log_params.masks_name[j]);
+    size_t j = i * log_params.name_size;
+    logger_write_data(dump, &file_offset, log_params.name_size, &log_params.masks_name[j]);
     
     // mask
-    logger_write_data(dump, &file_offset, log_params.mask, &log_params.masks[i]);
+    logger_write_data(dump, &file_offset, log_params.mask_size, &log_params.masks[i]);
 
     // mask size
-    logger_write_data(dump, &file_offset, log_params.number, &log_params.masks_size[i]);
+    logger_write_data(dump, &file_offset, log_params.number_size, &log_params.masks_size[i]);
   }
 
   /* write mask data */
@@ -505,16 +507,15 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
   /* write data name (mass, id, ...) */
   
   /* Write data */
-  char *name = malloc(sizeof(char) * log_params.name);
+  char *name = malloc(sizeof(char) * log_params.name_size);
   strcpy(name, "time_base");
   logger_write_general_data(dump, &log_params, &file_offset, &e->time_base,
 			    name, logger_data_double);
 
   /* last step: write first offset */
-  memcpy(skip_header, &file_offset, log_params.offset);
+  memcpy(skip_header, &file_offset, log_params.offset_size);
 
   /* free memory */
-  logger_parameters_free(&log_params);
   free(name);
 
   dump_ensure(log->dump, log->buffer_size);
@@ -527,10 +528,11 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
  * @param log_params #logger_parameters to initialize
  */
 void logger_parameters_init(struct logger_parameters* log_params) {
-  log_params->name = 20;
-  log_params->offset = 7;
-  log_params->mask = 1;
-  log_params->number = 1;
+  log_params->name_size = 20;
+  log_params->offset_size = 7;
+  log_params->mask_size = 1;
+  log_params->number_size = 1;
+  log_params->data_type_size = 1;
 
   log_params->nber_mask = 8;
 
@@ -550,41 +552,41 @@ void logger_parameters_init(struct logger_parameters* log_params) {
   log_params->masks[7] = logger_mask_timestamp;
 
   // masks name
-  block_size = log_params->name * log_params->nber_mask;
+  block_size = log_params->name_size * log_params->nber_mask;
   log_params->masks_name = malloc(block_size);
   cur_name = log_params->masks_name;
 
   strcpy(tmp, "position");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   strcpy(tmp, "velocity");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   strcpy(tmp, "acceleration");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   strcpy(tmp, "entropy");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   strcpy(tmp, "cutoff radius");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   strcpy(tmp, "density");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   strcpy(tmp, "consts");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   strcpy(tmp, "timestamp");
-  memcpy(cur_name, &tmp, log_params->name);
-  cur_name += log_params->name;
+  memcpy(cur_name, &tmp, log_params->name_size);
+  cur_name += log_params->name_size;
 
   log_params->masks_size = malloc(sizeof(size_t) * log_params->nber_mask);
   log_params->masks_size[0] = 3 * sizeof(double);
@@ -608,7 +610,7 @@ void logger_parameters_init(struct logger_parameters* log_params) {
 void logger_parameters_free(struct logger_parameters* log_params) {
   free(log_params->masks);
   free(log_params->masks_name);
-  free(log_params->masks_size);
+  free(log_params->masks_data_size);
 }
 
 
diff --git a/src/logger.h b/src/logger.h
index 8096b1d8e9c73648137f91edd036b5223c2b52f8..6bf5c4e2218ba3e2d4dac1f09a3db13d20032055 100644
--- a/src/logger.h
+++ b/src/logger.h
@@ -69,6 +69,11 @@ struct dump;
  * indicated that this is the first message for the given particle/timestamp.
  */
 
+/* header constants
+ * Thoses are definitions from the format and therefore should not be changed!
+ * Size in bytes
+ */
+
 /* Some constants. */
 #define logger_mask_x 1
 #define logger_mask_v 2
@@ -79,30 +84,19 @@ struct dump;
 #define logger_mask_consts 64
 #define logger_mask_timestamp 128
 
-#define logger_mask_size 1 // size of the mask
-#define logger_offset_size 7 // size of the offset
+/* size of a mask */
+#define logger_mask_size 1
 
-/* header constants
- * Thoses are definitions from the format and therefore should not be changed!
- * Size in bytes
- */
-#define logger_string_size 20 // size of the version message
-#define logger_number_size 2 // size of the labels size information
-
-extern char logger_version[logger_string_size];
-
-
-struct logger_parameters {
-  size_t name; // labels size
-  size_t offset; // offset size
-  size_t mask; // mask size
-  size_t number; // number size
-  size_t nber_mask; // number of different masks
-  size_t *masks; // value of each masks (e.g. logger_mask_...)
-  size_t *masks_size; // size of each mask
-  char *masks_name; // label of each mask
-  char *masks_type; // type of data (e.g. 'CHAR', 'INT', 'FLOAT')
-};
+/* size of an offset */
+#define logger_offset_size 7
+
+/* size of the version information */
+#define logger_version_size 20
+
+/* size of the size information */
+#define logger_header_number_size 2
+
+extern char logger_version[logger_version_size];
 
 enum logger_datatype {
   logger_data_int,
diff --git a/src/logger_struct.h b/src/logger_struct.h
index 11c5d3e7c2d48b68ea7f340aeb950330cf0cd95a..4cc401046b2592862f196caf8017a87bb61a1243 100644
--- a/src/logger_struct.h
+++ b/src/logger_struct.h
@@ -24,6 +24,38 @@
 #define LOGGER_STRING_LENGTH 200
 #include "dump.h"
 
+/* parameters of the logger */
+struct logger_parameters {
+  /* size of a label in bytes */
+  size_t label_size;
+
+  /* size of an offset in bytes */
+  size_t offset_size;
+
+  /* size of a mask in bytes */
+  size_t mask_size;
+
+  /* size of a number in bytes */
+  size_t number_size;
+
+  /* size of a data type in bytes */
+  size_t data_type_size;
+  
+  /* number of different mask */
+  size_t nber_mask;
+
+  /* value of each masks */
+  size_t *masks;
+
+  /* data size of each mask */
+  size_t *masks_data_size;
+  
+  /* label of each mask */
+  char *masks_name;
+
+};
+
+
 /* structure containing global data */
 struct logger {
   /* Number of particle steps between dumping a chunk of data */
@@ -41,6 +73,9 @@ struct logger {
   /* size of the buffer */
   size_t buffer_size;
 
+  /* logger parameters */
+  struct logger_parameters *params;
+
 } SWIFT_STRUCT_ALIGN;
 
 /* required structure for each particle type */