diff --git a/logger/logger_header.c b/logger/logger_header.c
index 8b8f3c9626caa2a69c3772f12b2a31ef5a455659..bd008e2926055dcd0a0126b3e2fdb02d1add90d9 100644
--- a/logger/logger_header.c
+++ b/logger/logger_header.c
@@ -93,7 +93,7 @@ void header_change_offset_direction(struct header *h,
   /* Skip file format and version numbers. */
   size_t offset = LOGGER_VERSION_SIZE + 2 * sizeof(int);
 
-  logger_loader_io_write_data(h->log->log.map + offset, sizeof(unsigned int),
+  logger_loader_io_write_data((char *) h->log->log.map + offset, sizeof(unsigned int),
                               &new_value);
 }
 
@@ -183,9 +183,9 @@ void header_read(struct header *h, struct logger_logfile *log) {
   }
 
   /* Check the logfile header's size. */
-  if (map != log->log.map + h->offset_first_record) {
+  if (map != (char *) log->log.map + h->offset_first_record) {
     header_print(h);
-    size_t offset = map - log->log.map;
+    size_t offset = (char *) map - (char *) log->log.map;
     error("Wrong header size (in header %zi, current %zi).",
           h->offset_first_record, offset);
   }
diff --git a/logger/logger_index.c b/logger/logger_index.c
index 774bc102279e5b874cfcf0bdac123a7ba2e53a66..0a12c9b1b0a95d8f514b99ed1ab5e17b9b45232a 100644
--- a/logger/logger_index.c
+++ b/logger/logger_index.c
@@ -64,18 +64,18 @@ void logger_index_read_header(struct logger_index *index,
   logger_index_map_file(index, filename, 0);
 
   /* Read times */
-  memcpy(&index->time, index->index.map + logger_index_time_offset,
+  memcpy(&index->time, (char *) index->index.map + logger_index_time_offset,
          logger_index_time_size);
   memcpy(&index->integer_time,
-         index->index.map + logger_index_integer_time_offset,
+         (char *) index->index.map + logger_index_integer_time_offset,
          logger_index_integer_time_size);
 
   /* Read the number of particles */
-  memcpy(index->nparts, index->index.map + logger_index_npart_offset,
+  memcpy(index->nparts, (char *) index->index.map + logger_index_npart_offset,
          logger_index_npart_size);
 
   /* Read if the file is sorted */
-  memcpy(&index->is_sorted, index->index.map + logger_index_is_sorted_offset,
+  memcpy(&index->is_sorted, (char *) index->index.map + logger_index_is_sorted_offset,
          logger_index_is_sorted_size);
 
   /* Close the file */
@@ -94,7 +94,7 @@ void logger_index_write_sorted(struct logger_index *index) {
   const char is_sorted = 1;
 
   /* Write the value */
-  memcpy(index->index.map + logger_index_is_sorted_offset, &is_sorted,
+  memcpy((char *) index->index.map + logger_index_is_sorted_offset, &is_sorted,
          logger_index_is_sorted_size);
 }
 
@@ -113,7 +113,8 @@ struct index_data *logger_index_get_data(struct logger_index *index, int type) {
   }
   const size_t type_offset = count * sizeof(struct index_data);
 
-  return index->index.map + logger_index_data_offset + type_offset;
+  const char * ret = (char *) index->index.map + logger_index_data_offset + type_offset;
+  return (struct index_data *) ret;
 }
 
 /**
diff --git a/logger/logger_loader_io.h b/logger/logger_loader_io.h
index b90337fe3e1e19c9a554fe36a93bf243218e56e1..7d03179ca51d4ea661ca04b55913750b790f1b7e 100644
--- a/logger/logger_loader_io.h
+++ b/logger/logger_loader_io.h
@@ -61,14 +61,14 @@ __attribute__((always_inline)) INLINE static void *logger_loader_io_read_mask(
     *mask = 0;
     memcpy(mask, data, LOGGER_MASK_SIZE);
   }
-  data += LOGGER_MASK_SIZE;
+  data = (char *) data + LOGGER_MASK_SIZE;
 
   /* read offset */
   if (diff_offset) {
     *diff_offset = 0;
     memcpy(diff_offset, data, LOGGER_OFFSET_SIZE);
   }
-  data += LOGGER_OFFSET_SIZE;
+  data = (char *) data + LOGGER_OFFSET_SIZE;
 
   return data;
 }
@@ -85,7 +85,7 @@ __attribute__((always_inline)) INLINE static void *logger_loader_io_read_mask(
 __attribute__((always_inline)) INLINE static void *logger_loader_io_read_data(
     void *data, const size_t size, void *p) {
   memcpy(p, data, size);
-  return data + size;
+  return (char *) data + size;
 };
 
 /**
@@ -101,7 +101,7 @@ __attribute__((always_inline)) INLINE static void *logger_loader_io_write_data(
     void *data, const size_t size, const void *p) {
   memcpy(data, p, size);
 
-  return data + size;
+  return (char *) data + size;
 };
 
 #endif  // LOGGER_LOGGER_LOADER_IO_H
diff --git a/logger/logger_particle.c b/logger/logger_particle.c
index d45c61cf66b720d8bf68cef7b63c2499bf59a6de..a6de2214cef562b1bf956b81596b42eb428da041 100644
--- a/logger/logger_particle.c
+++ b/logger/logger_particle.c
@@ -109,9 +109,9 @@ void *logger_particle_read_field(struct logger_particle *part, void *map,
     part->mass = 0;
     part->id = 0;
     memcpy(&part->mass, p, sizeof(float));
-    p += sizeof(float);
+    p = (char *) p + sizeof(float);
     memcpy(&part->id, p, sizeof(size_t));
-    p -= sizeof(float);
+    p = (char *) p - sizeof(float);
     free(p);
   }
 
@@ -149,7 +149,7 @@ size_t logger_particle_read(struct logger_particle *part,
   logger_particle_init(part);
 
   /* Read the record's mask. */
-  map = logger_loader_io_read_mask(h, map + offset, &mask, &h_offset);
+  map = logger_loader_io_read_mask(h, (char *) map + offset, &mask, &h_offset);
 
   /* Check that the mask is meaningful */
   if (mask > (unsigned int)(1 << h->masks_count)) {
@@ -178,7 +178,7 @@ size_t logger_particle_read(struct logger_particle *part,
     part->time = -1;
 
   /* update the offset. */
-  offset = (size_t)(map - reader->log.log.map);
+  offset = (size_t)((char *) map - (char *) reader->log.log.map);
 
   /* Check if an interpolation is required. */
   if (reader_type == logger_reader_const) return offset;
@@ -192,7 +192,7 @@ size_t logger_particle_read(struct logger_particle *part,
   }
 
   /* No next particle. */
-  if (h_offset == 0) return (size_t)(map - reader->log.log.map);
+  if (h_offset == 0) return (size_t)((char *) map - (char *) reader->log.log.map);
 
   /* get absolute offset of next particle. */
   h_offset += offset - header_get_record_size_from_mask(h, mask) -
diff --git a/logger/logger_reader.c b/logger/logger_reader.c
index f9f3fb558f887cc2d2bb3143ce13d06aacb1cfdd..307cdb6669b5c4fae32b617cc910d822f00b6de3 100644
--- a/logger/logger_reader.c
+++ b/logger/logger_reader.c
@@ -142,7 +142,7 @@ size_t reader_read_record(struct logger_reader *reader,
 
   /* Read mask to find out if timestamp or particle. */
   size_t mask = 0;
-  logger_loader_io_read_mask(&log->header, log->log.map + offset, &mask, NULL);
+  logger_loader_io_read_mask(&log->header, (char *) log->log.map + offset, &mask, NULL);
 
   /* Check if timestamp or not. */
   int ind = header_get_field_index(&log->header, "timestamp");
@@ -280,7 +280,7 @@ void logger_reader_read_all_particles_mapper(void *map_data, int num_elements,
       if (test == -1) {
         size_t mask = 0;
         logger_loader_io_read_mask(&reader->log.header,
-                                   reader->log.log.map + prev_offset, &mask,
+                                   (char *) reader->log.log.map + prev_offset, &mask,
                                    &next_offset);
         error(
             "Trying to get a particle without next record (mask: %zi, diff "
@@ -412,7 +412,7 @@ void logger_reader_get_next_particle(struct logger_reader *reader,
   while (1) {
     /* Read the offset to the next particle */
     size_t mask = 0;
-    logger_loader_io_read_mask(&reader->log.header, map + prev_offset, &mask,
+    logger_loader_io_read_mask(&reader->log.header, (char *) map + prev_offset, &mask,
                                &next_offset);
 
     /* Check if something special happened */
diff --git a/logger/logger_time.c b/logger/logger_time.c
index e6eb778637faf7bdc8841a996751245077b1b5b1..4a115d9636606cf84b52f7ace34023b468715806 100644
--- a/logger/logger_time.c
+++ b/logger/logger_time.c
@@ -92,7 +92,7 @@ size_t time_read(integertime_t *int_time, double *time,
   *time = 0;
 
   /* read record header. */
-  map = logger_loader_io_read_mask(h, map + offset, &mask, &prev_offset);
+  map = logger_loader_io_read_mask(h, (char *) map + offset, &mask, &prev_offset);
 
 #ifdef SWIFT_DEBUG_CHECKS
 
@@ -109,7 +109,7 @@ size_t time_read(integertime_t *int_time, double *time,
       logger_loader_io_read_data(map, sizeof(unsigned long long int), int_time);
   map = logger_loader_io_read_data(map, sizeof(double), time);
 
-  return map - h->log->log.map;
+  return (char *) map - (char *) h->log->log.map;
 }
 
 /**
@@ -131,7 +131,7 @@ size_t time_offset_first_record(const struct header *h) {
   if (i == -1) error("Time mask not present in the log file header.");
 
   size_t mask = 0;
-  logger_loader_io_read_mask(h, map + offset, &mask, NULL);
+  logger_loader_io_read_mask(h, (char *) map + offset, &mask, NULL);
 
   if (mask != h->masks[i].mask) error("Log file should begin by timestep.");
 
diff --git a/logger/logger_tools.c b/logger/logger_tools.c
index 1c8c813158330b934730a467edc1d81b85fd5de1..8f2c872760fb82d868814a6003dbe744b01bb0b7 100644
--- a/logger/logger_tools.c
+++ b/logger/logger_tools.c
@@ -60,7 +60,7 @@ int _tools_get_next_record_forward(const struct header *h, void *map,
   size_t diff_offset = 0;
 
   /* Read the offset. */
-  map = logger_loader_io_read_mask(h, map + *offset, NULL, &diff_offset);
+  map = logger_loader_io_read_mask(h, (char *) map + *offset, NULL, &diff_offset);
 
   if (diff_offset == 0) return -1;
 
@@ -91,7 +91,7 @@ int _tools_get_next_record_backward(const struct header *h, void *map,
   while (current_offset < file_size) {
     size_t mask = 0;
     size_t prev_offset;
-    logger_loader_io_read_mask(h, map + current_offset, &mask, &prev_offset);
+    logger_loader_io_read_mask(h, (char *) map + current_offset, &mask, &prev_offset);
 
     prev_offset = current_offset - prev_offset - record_header;
     if (*offset == prev_offset) {
@@ -123,16 +123,16 @@ size_t tools_reverse_offset(const struct header *h, void *file_map,
   void *map = file_map;
 
   /* read mask + offset. */
-  map = logger_loader_io_read_mask(h, map + offset, &mask, &prev_offset);
+  map = logger_loader_io_read_mask(h, (char *) map + offset, &mask, &prev_offset);
 
   /* write offset of zero (in case it is the last record). */
   const size_t zero = 0;
-  map -= LOGGER_OFFSET_SIZE;
+  map = (char *) map - LOGGER_OFFSET_SIZE;
   map = logger_loader_io_write_data(map, LOGGER_OFFSET_SIZE, &zero);
 
   /* set offset after current record. */
-  map += header_get_record_size_from_mask(h, mask);
-  size_t after_current_record = (size_t)(map - file_map);
+  map = (char *) map + header_get_record_size_from_mask(h, mask);
+  size_t after_current_record = (size_t)((char *) map - (char *)file_map);
 
   /* first records do not have a previous partner. */
   if (prev_offset == cur_offset) return after_current_record;
@@ -142,12 +142,12 @@ size_t tools_reverse_offset(const struct header *h, void *file_map,
           cur_offset);
 
   /* modify previous offset. */
-  map = file_map + cur_offset - prev_offset + LOGGER_MASK_SIZE;
+  map = (char *) file_map + cur_offset - prev_offset + LOGGER_MASK_SIZE;
   map = logger_loader_io_write_data(map, LOGGER_OFFSET_SIZE, &prev_offset);
 
 #ifdef SWIFT_DEBUG_CHECKS
   size_t prev_mask = 0;
-  map -= LOGGER_MASK_SIZE + LOGGER_OFFSET_SIZE;
+  map = (char *) map - LOGGER_MASK_SIZE + LOGGER_OFFSET_SIZE;
   logger_loader_io_read_mask(h, map, &prev_mask, NULL);
 
   /* Check if we are not mixing timestamp and particles */
@@ -179,7 +179,7 @@ size_t tools_check_record_consistency(const struct logger_reader *reader,
 
   const struct header *h = &reader->log.header;
   void *file_init = reader->log.log.map;
-  void *map = file_init + offset;
+  void *map = (char *) file_init + offset;
 
   size_t mask;
   size_t pointed_offset;
@@ -200,14 +200,14 @@ size_t tools_check_record_consistency(const struct logger_reader *reader,
   }
 
   /* set offset after current record. */
-  map += header_get_record_size_from_mask(h, mask);
+  map = (char *) + header_get_record_size_from_mask(h, mask);
 
   if (pointed_offset == offset || pointed_offset == 0)
-    return (size_t)(map - file_init);
+    return (size_t)((char *) map - (char *) file_init);
 
   /* read mask of the pointed record. */
   size_t pointed_mask = 0;
-  logger_loader_io_read_mask(h, file_init + pointed_offset, &pointed_mask,
+  logger_loader_io_read_mask(h, (char *) file_init + pointed_offset, &pointed_mask,
                              NULL);
 
   /* check if not mixing timestamp and particles. */
@@ -216,7 +216,7 @@ size_t tools_check_record_consistency(const struct logger_reader *reader,
     error("Error in the offset (mask %lu at %lu != %lu at %lu).", mask, offset,
           pointed_mask, pointed_offset);
 
-  if (pointed_mask == h->timestamp_mask) return (size_t)(map - file_init);
+  if (pointed_mask == h->timestamp_mask) return (size_t)((char *) map - (char *) file_init);
 
   struct logger_particle part;
   logger_particle_read(&part, reader, offset, 0, logger_reader_const);
@@ -229,5 +229,5 @@ size_t tools_check_record_consistency(const struct logger_reader *reader,
           pointed_offset);
   }
 
-  return (size_t)(map - file_init);
+  return (size_t)((char *) map - (char *) file_init);
 }
diff --git a/src/logger.h b/src/logger.h
index 54c19758163a2595913b907323af9c81c804be96..04eacc5eda958c8b3f693b1b065c74d74a70b6c2 100644
--- a/src/logger.h
+++ b/src/logger.h
@@ -186,7 +186,7 @@ void logger_struct_restore(struct logger_writer *log, FILE *stream);
  */
 INLINE static void logger_part_data_init(struct logger_part_data *logger) {
   logger->last_offset = 0;
-  logger->steps_since_last_output = INT_MAX;
+  logger->steps_since_last_output = 0; //INT_MAX;
 }
 
 /**