diff --git a/src/logger.c b/src/logger.c
index 40827bc188d6666015a35477a9d3a3522a88cfd3..caccd8c61d09f97e02a0d5f6cc12227fb8a6799f 100644
--- a/src/logger.c
+++ b/src/logger.c
@@ -65,25 +65,27 @@
 
 char logger_version[logger_version_size] = "0.1";
 
-
-const struct mask_data logger_mask_data[logger_count_mask] = {
-  /* Particle's position */
-  {3 * sizeof(double), 1 << logger_x, "positions"},
-  /* Particle's velocity */
-  {3 * sizeof(float), 1 << logger_v, "velocities"},
-  /* Particle's acceleration */
-  {3 * sizeof(float), 1 << logger_a, "accelerations"},
-  /* Particle's entropy */
-  {sizeof(float), 1 << logger_u, "entropy"},
-  /* Particle's smoothing length */
-  {sizeof(float), 1 << logger_h, "smoothing length"},
-  /* Particle's density */
-  {sizeof(float), 1 << logger_rho, "density"},
-  /* Particle's constants: mass (float) and ID (long long) */
-  {sizeof(float) + sizeof(long long), 1 << logger_consts, "consts"},
-  /* Simulation time stamp: integertime and double time (e.g. scale factor or time) */
-  {sizeof(integertime_t) + sizeof(double), 1 << logger_timestamp, "timestamp"}
-};
+const struct mask_data
+    logger_mask_data[logger_count_mask] =
+        {
+            /* Particle's position */
+            {3 * sizeof(double), 1 << logger_x, "positions"},
+            /* Particle's velocity */
+            {3 * sizeof(float), 1 << logger_v, "velocities"},
+            /* Particle's acceleration */
+            {3 * sizeof(float), 1 << logger_a, "accelerations"},
+            /* Particle's entropy */
+            {sizeof(float), 1 << logger_u, "entropy"},
+            /* Particle's smoothing length */
+            {sizeof(float), 1 << logger_h, "smoothing length"},
+            /* Particle's density */
+            {sizeof(float), 1 << logger_rho, "density"},
+            /* Particle's constants: mass (float) and ID (long long) */
+            {sizeof(float) + sizeof(long long), 1 << logger_consts, "consts"},
+            /* Simulation time stamp: integertime and double time (e.g. scale
+               factor or time) */
+            {sizeof(integertime_t) + sizeof(double), 1 << logger_timestamp,
+             "timestamp"}};
 
 /**
  * @brief Write the header of a chunk (offset + mask).
@@ -151,45 +153,43 @@ int logger_compute_chunk_size(unsigned int mask) {
       error("Timestamps should not include any other data.");
 
     /* A timestamp consists of an unsigned long long int. */
-    size += sizeof(unsigned long long int);
-    size += sizeof(double);
+    size += logger_mask_data[logger_timestamp].size;
 
   } else {
 
     /* Particle position as three doubles. */
     if (mask & logger_mask_data[logger_x].mask) {
-      size += 3 * sizeof(double);
+      size += logger_mask_data[logger_x].size;
     }
 
     /* Particle velocity as three floats. */
     if (mask & logger_mask_data[logger_v].mask) {
-      size += 3 * sizeof(float);
+      size += logger_mask_data[logger_v].size;
     }
 
     /* Particle accelleration as three floats. */
     if (mask & logger_mask_data[logger_a].mask) {
-      size += 3 * sizeof(float);
+      size += logger_mask_data[logger_a].size;
     }
 
     /* Particle internal energy as a single float. */
     if (mask & logger_mask_data[logger_u].mask) {
-      size += sizeof(float);
+      size += logger_mask_data[logger_u].size;
     }
 
     /* Particle smoothing length as a single float. */
     if (mask & logger_mask_data[logger_h].mask) {
-      size += sizeof(float);
+      size += logger_mask_data[logger_h].size;
     }
 
     /* Particle density as a single float. */
     if (mask & logger_mask_data[logger_rho].mask) {
-      size += sizeof(float);
+      size += logger_mask_data[logger_rho].size;
     }
 
     /* Particle constants, which is a bit more complicated. */
-    if (mask & logger_mask_data[logger_rho].mask) {
-      size += sizeof(float) +     // mass
-              sizeof(long long);  // id
+    if (mask & logger_mask_data[logger_consts].mask) {
+      size += logger_mask_data[logger_consts].size;
     }
   }
 
@@ -212,13 +212,11 @@ void logger_log_all(struct logger *log, const struct engine *e) {
 
   /* some constants */
   const struct space *s = e->s;
-  const unsigned int mask = logger_mask_data[logger_x].mask |
-    logger_mask_data[logger_v].mask |
-    logger_mask_data[logger_a].mask |
-    logger_mask_data[logger_u].mask |
-    logger_mask_data[logger_h].mask |
-    logger_mask_data[logger_rho].mask |
-    logger_mask_data[logger_consts].mask;
+  const unsigned int mask =
+      logger_mask_data[logger_x].mask | logger_mask_data[logger_v].mask |
+      logger_mask_data[logger_a].mask | logger_mask_data[logger_u].mask |
+      logger_mask_data[logger_h].mask | logger_mask_data[logger_rho].mask |
+      logger_mask_data[logger_consts].mask;
 
   /* loop over all parts */
   for (long long i = 0; i < e->total_nr_parts; i++) {
@@ -262,44 +260,45 @@ void logger_log_part(struct logger *log, const struct part *p,
 
   /* Particle position as three doubles. */
   if (mask & logger_mask_data[logger_x].mask) {
-    memcpy(buff, p->x, 3 * sizeof(double));
-    buff += 3 * sizeof(double);
+    memcpy(buff, p->x, logger_mask_data[logger_x].size);
+    buff += logger_mask_data[logger_x].size;
   }
 
   /* Particle velocity as three floats. */
   if (mask & logger_mask_data[logger_v].mask) {
-    memcpy(buff, p->v, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(buff, p->v, logger_mask_data[logger_v].size);
+    buff += logger_mask_data[logger_v].size;
   }
 
   /* Particle accelleration as three floats. */
   if (mask & logger_mask_data[logger_a].mask) {
-    memcpy(buff, p->a_hydro, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(buff, p->a_hydro, logger_mask_data[logger_a].size);
+    buff += logger_mask_data[logger_a].size;
   }
 
 #if defined(GADGET2_SPH)
 
   /* Particle internal energy as a single float. */
   if (mask & logger_mask_data[logger_u].mask) {
-    memcpy(buff, &p->entropy, sizeof(float));
-    buff += sizeof(float);
+    memcpy(buff, &p->entropy, logger_mask_data[logger_u].size);
+    buff += logger_mask_data[logger_u].size;
   }
 
   /* Particle smoothing length as a single float. */
   if (mask & logger_mask_data[logger_h].mask) {
-    memcpy(buff, &p->h, sizeof(float));
-    buff += sizeof(float);
+    memcpy(buff, &p->h, logger_mask_data[logger_h].size);
+    buff += logger_mask_data[logger_h].size;
   }
 
   /* Particle density as a single float. */
   if (mask & logger_mask_data[logger_rho].mask) {
-    memcpy(buff, &p->rho, sizeof(float));
-    buff += sizeof(float);
+    memcpy(buff, &p->rho, logger_mask_data[logger_rho].size);
+    buff += logger_mask_data[logger_rho].size;
   }
 
   /* Particle constants, which is a bit more complicated. */
   if (mask & logger_mask_data[logger_consts].mask) {
+    // TODO make it dependent of logger_mask_data
     memcpy(buff, &p->mass, sizeof(float));
     buff += sizeof(float);
     memcpy(buff, &p->id, sizeof(long long));
@@ -329,8 +328,8 @@ void logger_log_gpart(struct logger *log, const struct gpart *p,
     error("You should not log particles as timestamps.");
 
   /* Make sure we're not looging fields not supported by gparts. */
-  if (mask & (logger_mask_data[logger_u].mask |
-	      logger_mask_data[logger_rho].mask))
+  if (mask &
+      (logger_mask_data[logger_u].mask | logger_mask_data[logger_rho].mask))
     error("Can't log SPH quantities for gparts.");
 
   /* Start by computing the size of the message. */
@@ -345,24 +344,25 @@ void logger_log_gpart(struct logger *log, const struct gpart *p,
 
   /* Particle position as three doubles. */
   if (mask & logger_mask_data[logger_x].mask) {
-    memcpy(buff, p->x, 3 * sizeof(double));
-    buff += 3 * sizeof(double);
+    memcpy(buff, p->x, logger_mask_data[logger_x].size);
+    buff += logger_mask_data[logger_x].size;
   }
 
   /* Particle velocity as three floats. */
   if (mask & logger_mask_data[logger_v].mask) {
-    memcpy(buff, p->v_full, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(buff, p->v_full, logger_mask_data[logger_v].size);
+    buff += logger_mask_data[logger_v].size;
   }
 
   /* Particle accelleration as three floats. */
   if (mask & logger_mask_data[logger_a].mask) {
-    memcpy(buff, p->a_grav, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(buff, p->a_grav, logger_mask_data[logger_a].size);
+    buff += logger_mask_data[logger_a].size;
   }
 
   /* Particle constants, which is a bit more complicated. */
   if (mask & logger_mask_data[logger_consts].mask) {
+    // TODO make it dependent of logger_mask_data
     memcpy(buff, &p->mass, sizeof(float));
     buff += sizeof(float);
     memcpy(buff, &p->id_or_neg_offset, sizeof(long long));
@@ -387,7 +387,8 @@ void logger_log_timestamp(struct logger *log, integertime_t timestamp,
   struct dump *dump = &log->dump;
 
   /* Start by computing the size of the message. */
-  const int size = logger_compute_chunk_size(logger_mask_data[logger_timestamp].mask);
+  const int size =
+      logger_compute_chunk_size(logger_mask_data[logger_timestamp].mask);
 
   /* Allocate a chunk of memory in the dump of the right size. */
   size_t offset_new;
@@ -398,6 +399,7 @@ void logger_log_timestamp(struct logger *log, integertime_t timestamp,
   buff = logger_write_chunk_header(buff, &mask, offset, offset_new);
 
   /* Store the timestamp. */
+  // TODO make it dependent of logger_mask_data
   memcpy(buff, &timestamp, sizeof(integertime_t));
   buff += sizeof(integertime_t);
 
@@ -445,8 +447,7 @@ void logger_ensure_size(struct logger *log, size_t total_nr_parts,
 int logger_compute_max_chunk_size(const struct logger *log) {
 
   int *output = malloc(sizeof(int) * logger_count_mask);
-  if (output == NULL)
-    error("Unable to allocate memory");
+  if (output == NULL) error("Unable to allocate memory");
 
   int max_size = logger_offset_size + logger_mask_size;
   /* Loop over all fields except timestamp */
@@ -484,7 +485,7 @@ void logger_init(struct logger *log, struct swift_params *params) {
 
   /* Define some constants */
   log->max_chunk_size = logger_compute_max_chunk_size(log);
-  
+
   /* init dump */
   dump_init(&log->dump, logger_name_file, buffer_size);
 }
@@ -494,9 +495,7 @@ void logger_init(struct logger *log, struct swift_params *params) {
  *
  * @param log The #logger
  */
-void logger_clean(struct logger *log) {
-  dump_close(&log->dump);
-}
+void logger_clean(struct logger *log) { dump_close(&log->dump); }
 
 /**
  * @brief Write a file header to a logger file
@@ -522,21 +521,18 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
 
   /* write offset direction */
   const int reversed = 0;
-  logger_write_data(dump, &file_offset, logger_number_size,
-                    &reversed);
+  logger_write_data(dump, &file_offset, logger_number_size, &reversed);
 
   /* placeholder to write the offset of the first log here */
   char *skip_header = dump_get(dump, logger_offset_size, &file_offset);
 
   /* write number of bytes used for names */
   const int label_size = logger_label_size;
-  logger_write_data(dump, &file_offset, logger_number_size,
-                    &label_size);
+  logger_write_data(dump, &file_offset, logger_number_size, &label_size);
 
   /* write number of masks */
   int count_mask = logger_count_mask;
-  logger_write_data(dump, &file_offset, logger_number_size,
-                    &count_mask);
+  logger_write_data(dump, &file_offset, logger_number_size, &count_mask);
 
   /* write masks */
   // loop over all mask type
@@ -549,7 +545,7 @@ void logger_write_file_header(struct logger *log, const struct engine *e) {
     logger_write_data(dump, &file_offset, logger_number_size,
                       &logger_mask_data[i].size);
   }
-  
+
   /* last step: write first offset */
   memcpy(skip_header, &file_offset, logger_offset_size);
 }
@@ -602,44 +598,45 @@ int logger_read_part(struct part *p, size_t *offset, const char *buff) {
 
   /* Particle position as three doubles. */
   if (mask & logger_mask_data[logger_x].mask) {
-    memcpy(p->x, buff, 3 * sizeof(double));
-    buff += 3 * sizeof(double);
+    memcpy(p->x, buff, logger_mask_data[logger_x].size);
+    buff += logger_mask_data[logger_x].size;
   }
 
   /* Particle velocity as three floats. */
   if (mask & logger_mask_data[logger_v].mask) {
-    memcpy(p->v, buff, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(p->v, buff, logger_mask_data[logger_v].size);
+    buff += logger_mask_data[logger_v].size;
   }
 
   /* Particle accelleration as three floats. */
   if (mask & logger_mask_data[logger_a].mask) {
-    memcpy(p->a_hydro, buff, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(p->a_hydro, buff, logger_mask_data[logger_a].size);
+    buff += logger_mask_data[logger_a].size;
   }
 
 #if defined(GADGET2_SPH)
 
   /* Particle internal energy as a single float. */
   if (mask & logger_mask_data[logger_u].mask) {
-    memcpy(&p->entropy, buff, sizeof(float));
-    buff += sizeof(float);
+    memcpy(&p->entropy, buff, logger_mask_data[logger_u].size);
+    buff += logger_mask_data[logger_u].size;
   }
 
   /* Particle smoothing length as a single float. */
   if (mask & logger_mask_data[logger_h].mask) {
-    memcpy(&p->h, buff, sizeof(float));
-    buff += sizeof(float);
+    memcpy(&p->h, buff, logger_mask_data[logger_h].size);
+    buff += logger_mask_data[logger_h].size;
   }
 
   /* Particle density as a single float. */
   if (mask & logger_mask_data[logger_rho].mask) {
-    memcpy(&p->rho, buff, sizeof(float));
-    buff += sizeof(float);
+    memcpy(&p->rho, buff, logger_mask_data[logger_rho].size);
+    buff += logger_mask_data[logger_rho].size;
   }
 
   /* Particle constants, which is a bit more complicated. */
   if (mask & logger_mask_data[logger_rho].mask) {
+    // TODO make it dependent of logger_mask_data
     memcpy(&p->mass, buff, sizeof(float));
     buff += sizeof(float);
     memcpy(&p->id, buff, sizeof(long long));
@@ -677,30 +674,31 @@ int logger_read_gpart(struct gpart *p, size_t *offset, const char *buff) {
     error("Trying to read timestamp as particle.");
 
   /* We can't store all part fields in a gpart. */
-  if (mask & (logger_mask_data[logger_u].mask |
-	      logger_mask_data[logger_rho].mask))
+  if (mask &
+      (logger_mask_data[logger_u].mask | logger_mask_data[logger_rho].mask))
     error("Trying to read SPH quantities into a gpart.");
 
   /* Particle position as three doubles. */
   if (mask & logger_mask_data[logger_x].mask) {
-    memcpy(p->x, buff, 3 * sizeof(double));
-    buff += 3 * sizeof(double);
+    memcpy(p->x, buff, logger_mask_data[logger_x].size);
+    buff += logger_mask_data[logger_x].size;
   }
 
   /* Particle velocity as three floats. */
   if (mask & logger_mask_data[logger_v].mask) {
-    memcpy(p->v_full, buff, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(p->v_full, buff, logger_mask_data[logger_v].size);
+    buff += logger_mask_data[logger_v].size;
   }
 
   /* Particle accelleration as three floats. */
   if (mask & logger_mask_data[logger_a].mask) {
-    memcpy(p->a_grav, buff, 3 * sizeof(float));
-    buff += 3 * sizeof(float);
+    memcpy(p->a_grav, buff, logger_mask_data[logger_a].size);
+    buff += logger_mask_data[logger_a].size;
   }
 
   /* Particle constants, which is a bit more complicated. */
   if (mask & logger_mask_data[logger_rho].mask) {
+    // TODO make it dependent of logger_mask_data
     memcpy(&p->mass, buff, sizeof(float));
     buff += sizeof(float);
     memcpy(&p->id_or_neg_offset, buff, sizeof(long long));
@@ -741,6 +739,7 @@ int logger_read_timestamp(unsigned long long int *t, double *time,
     error("Timestamp message contains extra fields.");
 
   /* Copy the timestamp value from the buffer. */
+  // TODO make it dependent of logger_mask_data
   memcpy(t, buff, sizeof(unsigned long long int));
   buff += sizeof(unsigned long long int);
 
diff --git a/src/logger.h b/src/logger.h
index eaf8bb8c4f81a7afbf893632c03afb4629ec0d0b..56e2c8ab94c66b24df1800877bb9cfb129c3e645 100644
--- a/src/logger.h
+++ b/src/logger.h
@@ -82,7 +82,7 @@ enum logger_masks_number {
   logger_h = 4,
   logger_rho = 5,
   logger_consts = 6,
-  logger_timestamp = 7, /* expect it to be before count */
+  logger_timestamp = 7,  /* expect it to be before count */
   logger_count_mask = 8, /* Need to be the last */
 } __attribute__((packed));
 
@@ -158,7 +158,7 @@ int logger_read_timestamp(unsigned long long int *t, double *time,
  */
 INLINE static void logger_part_data_init(struct logger_part_data *logger) {
   logger->last_offset = 0;
-  logger->steps_since_last_output = SHRT_MAX;
+  logger->steps_since_last_output = INT_MAX;
 }
 
 /**
diff --git a/src/runner.c b/src/runner.c
index b368f2a069fa5c2c52d527fb8b00fcb015652d1e..54cfb64cb46230c097ab1d51576b7d5760a0fbf8 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -2736,12 +2736,12 @@ void runner_do_logger(struct runner *r, struct cell *c, int timer) {
           /* Currently writing everything, should adapt it through time */
           logger_log_part(e->logger, p,
                           logger_mask_data[logger_x].mask |
-			  logger_mask_data[logger_v].mask |
-			  logger_mask_data[logger_a].mask |
-			  logger_mask_data[logger_u].mask |
-			  logger_mask_data[logger_h].mask |
-			  logger_mask_data[logger_rho].mask |
-			  logger_mask_data[logger_consts].mask,
+                              logger_mask_data[logger_v].mask |
+                              logger_mask_data[logger_a].mask |
+                              logger_mask_data[logger_u].mask |
+                              logger_mask_data[logger_h].mask |
+                              logger_mask_data[logger_rho].mask |
+                              logger_mask_data[logger_consts].mask,
                           &xp->logger_data.last_offset);
 
           /* Set counter back to zero */