diff --git a/src/logger.c b/src/logger.c
index d165843bcd7b6d0d20dcf350a9e8c0b34a4f1759..cb868a2ffc865672c33a30c7f9fc0e1f9285c0f6 100644
--- a/src/logger.c
+++ b/src/logger.c
@@ -25,6 +25,7 @@
 
 /* Some standard headers. */
 #include <hdf5.h>
+#include <math.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
@@ -44,10 +45,14 @@
  * Thoses are definitions from the format and therefore should not be changed!
  */
 /* number of bytes for a mask */
+// TODO change this to number of bits
 #define logger_mask_size 1
 
+/* number of bits for chunk header */
+#define logger_header_bytes 8
+
 /* number bytes for an offset */
-#define logger_offset_size 7
+#define logger_offset_size logger_header_bytes - logger_mask_size
 
 /* number of bytes for the version information */
 #define logger_version_size 20
@@ -214,7 +219,7 @@ void logger_log_part(struct logger *log, const struct part *p,
 
   /* Allocate a chunk of memory in the dump of the right size. */
   size_t offset_new;
-  char *buff = (char *)dump_get(log->dump, size, &offset_new);
+  char *buff = (char *)dump_get(&log->dump, size, &offset_new);
 
   /* Write the header. */
   buff = logger_write_chunk_header(buff, &mask, offset, offset_new);
@@ -296,7 +301,7 @@ void logger_log_gpart(struct logger *log, const struct gpart *p,
 
   /* Allocate a chunk of memory in the dump of the right size. */
   size_t offset_new;
-  char *buff = (char *)dump_get(log->dump, size, &offset_new);
+  char *buff = (char *)dump_get(&log->dump, size, &offset_new);
 
   /* Write the header. */
   buff = logger_write_chunk_header(buff, &mask, offset, offset_new);
@@ -342,7 +347,7 @@ void logger_log_gpart(struct logger *log, const struct gpart *p,
  */
 void logger_log_timestamp(struct logger *log, integertime_t timestamp,
                           double time, size_t *offset) {
-  struct dump *dump = log->dump;
+  struct dump *dump = &log->dump;
 
   /* Start by computing the size of the message. */
   const int size = logger_compute_chunk_size(logger_mask_timestamp);
@@ -392,7 +397,7 @@ void logger_ensure_size(struct logger *log, size_t total_nr_parts,
   if (total_nr_sparts > 0) error("Not implemented");
 
   /* ensure enough space in dump */
-  dump_ensure(log->dump, limit, log->buffer_scale * limit);
+  dump_ensure(&log->dump, limit, log->buffer_scale * limit);
 }
 
 /**
@@ -414,9 +419,14 @@ void logger_get_list_mask_size(const struct logger *log, int *output) {
   output[4] = sizeof(float);
   /* Density */
   output[5] = sizeof(float);
-  /* Constants */
+  /* Constants
+   * Stores the mass (float) and the ID (long long).
+   */
   output[6] = sizeof(float) + sizeof(long long);
-  /* Time stamp */
+  /* Time stamp
+   * Stores the integer time along with the double time
+   * (time or scale factor).
+   */
   output[7] = sizeof(integertime_t) + sizeof(double);
 
 }
@@ -536,14 +546,11 @@ void logger_init(struct logger *log, struct swift_params *params) {
   strcat(logger_name_file, ".dump");
 
   /* Define some constants */
-  log->number_masks = 8;
+  log->number_masks = log10(logger_mask_timestamp) / log10(2) + 1;
   log->max_chunk_size = logger_compute_max_chunk_size(log);
   
   /* init dump */
-  log->dump = malloc(sizeof(struct dump));
-  struct dump *dump_file = log->dump;
-
-  dump_init(dump_file, logger_name_file, buffer_size);
+  dump_init(&log->dump, logger_name_file, buffer_size);
 }
 
 /**
@@ -552,9 +559,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);
-  free(log->dump);
-  log->dump = NULL;
+  dump_close(&log->dump);
 }
 
 /**
@@ -567,7 +572,7 @@ void logger_clean(struct logger *log) {
 void logger_write_file_header(struct logger *log, const struct engine *e) {
 
   /* get required variables */
-  struct dump *dump = log->dump;
+  struct dump *dump = &log->dump;
 
   size_t file_offset = dump->file_offset;
 
diff --git a/src/logger.h b/src/logger.h
index 3d453dd390788131eb611eccdc2a399fe10f6c42..d6c178a48efcc66c4f3cf3b30ce271df673b3b08 100644
--- a/src/logger.h
+++ b/src/logger.h
@@ -23,6 +23,7 @@
 
 /* Includes. */
 #include "common_io.h"
+#include "dump.h"
 #include "inline.h"
 #include "timeline.h"
 #include "units.h"
@@ -95,8 +96,8 @@ struct logger {
   /* Logger basename */
   char base_name[logger_string_length];
 
-  /* File name of the dump file */
-  struct dump *dump;
+  /* Dump file */
+  struct dump dump;
 
   /* timestamp offset for logger*/
   size_t timestamp_offset;