diff --git a/src/common_io.c b/src/common_io.c
index 140dfc14593aa8964845e3bb73cbf01c2176e534..1c5befb8698109d7d4f6711c84e5fb4e7496c37d 100644
--- a/src/common_io.c
+++ b/src/common_io.c
@@ -993,6 +993,26 @@ void io_convert_gpart_f_mapper(void* restrict temp, int N,
     props.convert_gpart_f(e, gparts + delta + i, &temp_f[i * dim]);
 }
 
+/**
+ * @brief Mapper function to copy #gpart into a buffer of ints using a
+ * conversion function.
+ */
+void io_convert_gpart_i_mapper(void* restrict temp, int N,
+                               void* restrict extra_data) {
+
+  const struct io_props props = *((const struct io_props*)extra_data);
+  const struct gpart* restrict gparts = props.gparts;
+  const struct engine* e = props.e;
+  const size_t dim = props.dimension;
+
+  /* How far are we with this chunk? */
+  int* restrict temp_i = (int*)temp;
+  const ptrdiff_t delta = (temp_i - props.start_temp_i) / dim;
+
+  for (int i = 0; i < N; i++)
+    props.convert_gpart_i(e, gparts + delta + i, &temp_i[i * dim]);
+}
+
 /**
  * @brief Mapper function to copy #gpart into a buffer of doubles using a
  * conversion function.
@@ -1053,6 +1073,26 @@ void io_convert_spart_f_mapper(void* restrict temp, int N,
     props.convert_spart_f(e, sparts + delta + i, &temp_f[i * dim]);
 }
 
+/**
+ * @brief Mapper function to copy #spart into a buffer of ints using a
+ * conversion function.
+ */
+void io_convert_spart_i_mapper(void* restrict temp, int N,
+                               void* restrict extra_data) {
+
+  const struct io_props props = *((const struct io_props*)extra_data);
+  const struct spart* restrict sparts = props.sparts;
+  const struct engine* e = props.e;
+  const size_t dim = props.dimension;
+
+  /* How far are we with this chunk? */
+  int* restrict temp_i = (int*)temp;
+  const ptrdiff_t delta = (temp_i - props.start_temp_i) / dim;
+
+  for (int i = 0; i < N; i++)
+    props.convert_spart_i(e, sparts + delta + i, &temp_i[i * dim]);
+}
+
 /**
  * @brief Mapper function to copy #spart into a buffer of doubles using a
  * conversion function.
@@ -1113,6 +1153,26 @@ void io_convert_bpart_f_mapper(void* restrict temp, int N,
     props.convert_bpart_f(e, bparts + delta + i, &temp_f[i * dim]);
 }
 
+/**
+ * @brief Mapper function to copy #bpart into a buffer of ints using a
+ * conversion function.
+ */
+void io_convert_bpart_i_mapper(void* restrict temp, int N,
+                               void* restrict extra_data) {
+
+  const struct io_props props = *((const struct io_props*)extra_data);
+  const struct bpart* restrict bparts = props.bparts;
+  const struct engine* e = props.e;
+  const size_t dim = props.dimension;
+
+  /* How far are we with this chunk? */
+  int* restrict temp_i = (int*)temp;
+  const ptrdiff_t delta = (temp_i - props.start_temp_i) / dim;
+
+  for (int i = 0; i < N; i++)
+    props.convert_bpart_i(e, bparts + delta + i, &temp_i[i * dim]);
+}
+
 /**
  * @brief Mapper function to copy #bpart into a buffer of doubles using a
  * conversion function.
@@ -1246,6 +1306,18 @@ void io_copy_temp_buffer(void* temp, const struct engine* e,
                      io_convert_gpart_f_mapper, temp_f, N, copySize, 0,
                      (void*)&props);
 
+    } else if (props.convert_gpart_i != NULL) {
+
+      /* Prepare some parameters */
+      int* temp_i = (int*)temp;
+      props.start_temp_i = (int*)temp;
+      props.e = e;
+
+      /* Copy the whole thing into a buffer */
+      threadpool_map((struct threadpool*)&e->threadpool,
+                     io_convert_gpart_i_mapper, temp_i, N, copySize, 0,
+                     (void*)&props);
+
     } else if (props.convert_gpart_d != NULL) {
 
       /* Prepare some parameters */
@@ -1282,6 +1354,18 @@ void io_copy_temp_buffer(void* temp, const struct engine* e,
                      io_convert_spart_f_mapper, temp_f, N, copySize, 0,
                      (void*)&props);
 
+    } else if (props.convert_spart_i != NULL) {
+
+      /* Prepare some parameters */
+      int* temp_i = (int*)temp;
+      props.start_temp_i = (int*)temp;
+      props.e = e;
+
+      /* Copy the whole thing into a buffer */
+      threadpool_map((struct threadpool*)&e->threadpool,
+                     io_convert_spart_i_mapper, temp_i, N, copySize, 0,
+                     (void*)&props);
+
     } else if (props.convert_spart_d != NULL) {
 
       /* Prepare some parameters */
@@ -1318,6 +1402,18 @@ void io_copy_temp_buffer(void* temp, const struct engine* e,
                      io_convert_bpart_f_mapper, temp_f, N, copySize, 0,
                      (void*)&props);
 
+    } else if (props.convert_bpart_i != NULL) {
+
+      /* Prepare some parameters */
+      int* temp_i = (int*)temp;
+      props.start_temp_i = (int*)temp;
+      props.e = e;
+
+      /* Copy the whole thing into a buffer */
+      threadpool_map((struct threadpool*)&e->threadpool,
+                     io_convert_bpart_i_mapper, temp_i, N, copySize, 0,
+                     (void*)&props);
+
     } else if (props.convert_bpart_d != NULL) {
 
       /* Prepare some parameters */
diff --git a/src/io_properties.h b/src/io_properties.h
index 0c2fb52f53a6dda649ea05e30355c25c638be762..7ddc8e241f6f114196e25bda2f737253f6fa9338 100644
--- a/src/io_properties.h
+++ b/src/io_properties.h
@@ -51,6 +51,8 @@ typedef void (*conversion_func_part_long_long)(const struct engine*,
                                                const struct xpart*, long long*);
 typedef void (*conversion_func_gpart_float)(const struct engine*,
                                             const struct gpart*, float*);
+typedef void (*conversion_func_gpart_int)(const struct engine*,
+                                          const struct gpart*, int*);
 typedef void (*conversion_func_gpart_double)(const struct engine*,
                                              const struct gpart*, double*);
 typedef void (*conversion_func_gpart_long_long)(const struct engine*,
@@ -58,6 +60,8 @@ typedef void (*conversion_func_gpart_long_long)(const struct engine*,
                                                 long long*);
 typedef void (*conversion_func_spart_float)(const struct engine*,
                                             const struct spart*, float*);
+typedef void (*conversion_func_spart_int)(const struct engine*,
+                                          const struct spart*, int*);
 typedef void (*conversion_func_spart_double)(const struct engine*,
                                              const struct spart*, double*);
 typedef void (*conversion_func_spart_long_long)(const struct engine*,
@@ -65,6 +69,8 @@ typedef void (*conversion_func_spart_long_long)(const struct engine*,
                                                 long long*);
 typedef void (*conversion_func_bpart_float)(const struct engine*,
                                             const struct bpart*, float*);
+typedef void (*conversion_func_bpart_int)(const struct engine*,
+                                          const struct bpart*, int*);
 typedef void (*conversion_func_bpart_double)(const struct engine*,
                                              const struct bpart*, double*);
 typedef void (*conversion_func_bpart_long_long)(const struct engine*,
@@ -125,16 +131,19 @@ struct io_props {
 
   /* Conversion function for gpart */
   conversion_func_gpart_float convert_gpart_f;
+  conversion_func_gpart_int convert_gpart_i;
   conversion_func_gpart_double convert_gpart_d;
   conversion_func_gpart_long_long convert_gpart_l;
 
   /* Conversion function for spart */
   conversion_func_spart_float convert_spart_f;
+  conversion_func_spart_int convert_spart_i;
   conversion_func_spart_double convert_spart_d;
   conversion_func_spart_long_long convert_spart_l;
 
   /* Conversion function for bpart */
   conversion_func_bpart_float convert_bpart_f;
+  conversion_func_bpart_int convert_bpart_i;
   conversion_func_bpart_double convert_bpart_d;
   conversion_func_bpart_long_long convert_bpart_l;
 };
@@ -215,7 +224,10 @@ INLINE static struct io_props io_make_input_field_(
 INLINE static struct io_props io_make_output_field_(
     const char name[FIELD_BUFFER_SIZE], enum IO_DATA_TYPE type, int dimension,
     enum unit_conversion_factor units, char* field, size_t partSize) {
+
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
@@ -223,23 +235,7 @@ INLINE static struct io_props io_make_output_field_(
   r.units = units;
   r.field = field;
   r.partSize = partSize;
-  r.parts = NULL;
-  r.gparts = NULL;
-  r.sparts = NULL;
-  r.bparts = NULL;
   r.conversion = 0;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -273,27 +269,18 @@ INLINE static struct io_props io_make_output_field_convert_part_INT(
     conversion_func_part_int functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = partSize;
   r.parts = parts;
   r.xparts = xparts;
-  r.sparts = NULL;
   r.conversion = 1;
   r.convert_part_i = functionPtr;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
 
   return r;
 }
@@ -319,32 +306,18 @@ INLINE static struct io_props io_make_output_field_convert_part_FLOAT(
     conversion_func_part_float functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = partSize;
   r.parts = parts;
   r.xparts = xparts;
-  r.gparts = NULL;
-  r.sparts = NULL;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
   r.convert_part_f = functionPtr;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -370,32 +343,18 @@ INLINE static struct io_props io_make_output_field_convert_part_DOUBLE(
     conversion_func_part_double functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = partSize;
   r.parts = parts;
   r.xparts = xparts;
-  r.gparts = NULL;
-  r.sparts = NULL;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
   r.convert_part_d = functionPtr;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -421,32 +380,18 @@ INLINE static struct io_props io_make_output_field_convert_part_LONGLONG(
     conversion_func_part_long_long functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = partSize;
   r.parts = parts;
   r.xparts = xparts;
-  r.gparts = NULL;
-  r.sparts = NULL;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
   r.convert_part_l = functionPtr;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -459,6 +404,40 @@ INLINE static struct io_props io_make_output_field_convert_part_LONGLONG(
   io_make_output_field_convert_gpart_##type(name, type, dim, units,       \
                                             sizeof(gpart[0]), gpart, convert)
 
+/**
+ * @brief Construct an #io_props from its parameters
+ *
+ * @param name Name of the field to read
+ * @param type The type of the data
+ * @param dimension Dataset dimension (1D, 3D, ...)
+ * @param units The units of the dataset
+ * @param gpartSize The size in byte of the particle
+ * @param gparts The particle array
+ * @param functionPtr The function used to convert a g-particle to a float
+ *
+ * Do not call this function directly. Use the macro defined above.
+ */
+INLINE static struct io_props io_make_output_field_convert_gpart_INT(
+    const char name[FIELD_BUFFER_SIZE], enum IO_DATA_TYPE type, int dimension,
+    enum unit_conversion_factor units, size_t gpartSize,
+    const struct gpart* gparts, conversion_func_gpart_int functionPtr) {
+
+  struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
+  strcpy(r.name, name);
+  r.type = type;
+  r.dimension = dimension;
+  r.importance = UNUSED;
+  r.units = units;
+  r.partSize = gpartSize;
+  r.gparts = gparts;
+  r.conversion = 1;
+  r.convert_gpart_i = functionPtr;
+
+  return r;
+}
+
 /**
  * @brief Construct an #io_props from its parameters
  *
@@ -478,32 +457,17 @@ INLINE static struct io_props io_make_output_field_convert_gpart_FLOAT(
     const struct gpart* gparts, conversion_func_gpart_float functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = gpartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
   r.gparts = gparts;
-  r.sparts = NULL;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
   r.convert_gpart_f = functionPtr;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -527,32 +491,17 @@ INLINE static struct io_props io_make_output_field_convert_gpart_DOUBLE(
     const struct gpart* gparts, conversion_func_gpart_double functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = gpartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
   r.gparts = gparts;
-  r.sparts = NULL;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
   r.convert_gpart_d = functionPtr;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -576,32 +525,17 @@ INLINE static struct io_props io_make_output_field_convert_gpart_LONGLONG(
     const struct gpart* gparts, conversion_func_gpart_long_long functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = gpartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
   r.gparts = gparts;
-  r.sparts = NULL;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
   r.convert_gpart_l = functionPtr;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -614,6 +548,40 @@ INLINE static struct io_props io_make_output_field_convert_gpart_LONGLONG(
   io_make_output_field_convert_spart_##type(name, type, dim, units,       \
                                             sizeof(spart[0]), spart, convert)
 
+/**
+ * @brief Construct an #io_props from its parameters
+ *
+ * @param name Name of the field to read
+ * @param type The type of the data
+ * @param dimension Dataset dimension (1D, 3D, ...)
+ * @param units The units of the dataset
+ * @param spartSize The size in byte of the particle
+ * @param sparts The particle array
+ * @param functionPtr The function used to convert a g-particle to a float
+ *
+ * Do not call this function directly. Use the macro defined above.
+ */
+INLINE static struct io_props io_make_output_field_convert_spart_INT(
+    const char name[FIELD_BUFFER_SIZE], enum IO_DATA_TYPE type, int dimension,
+    enum unit_conversion_factor units, size_t spartSize,
+    const struct spart* sparts, conversion_func_spart_int functionPtr) {
+
+  struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
+  strcpy(r.name, name);
+  r.type = type;
+  r.dimension = dimension;
+  r.importance = UNUSED;
+  r.units = units;
+  r.partSize = spartSize;
+  r.sparts = sparts;
+  r.conversion = 1;
+  r.convert_spart_i = functionPtr;
+
+  return r;
+}
+
 /**
  * @brief Construct an #io_props from its parameters
  *
@@ -633,32 +601,17 @@ INLINE static struct io_props io_make_output_field_convert_spart_FLOAT(
     const struct spart* sparts, conversion_func_spart_float functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = spartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
-  r.gparts = NULL;
   r.sparts = sparts;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
   r.convert_spart_f = functionPtr;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -682,32 +635,17 @@ INLINE static struct io_props io_make_output_field_convert_spart_DOUBLE(
     const struct spart* sparts, conversion_func_spart_double functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = spartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
-  r.gparts = NULL;
   r.sparts = sparts;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
   r.convert_spart_d = functionPtr;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -731,32 +669,17 @@ INLINE static struct io_props io_make_output_field_convert_spart_LONGLONG(
     const struct spart* sparts, conversion_func_spart_long_long functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = spartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
-  r.gparts = NULL;
   r.sparts = sparts;
-  r.bparts = NULL;
   r.conversion = 1;
-  r.convert_part_i = NULL;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
   r.convert_spart_l = functionPtr;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -769,6 +692,40 @@ INLINE static struct io_props io_make_output_field_convert_spart_LONGLONG(
   io_make_output_field_convert_bpart_##type(name, type, dim, units,       \
                                             sizeof(bpart[0]), bpart, convert)
 
+/**
+ * @brief Construct an #io_props from its parameters
+ *
+ * @param name Name of the field to read
+ * @param type The type of the data
+ * @param dimension Dataset dimension (1D, 3D, ...)
+ * @param units The units of the dataset
+ * @param bpartSize The size in byte of the particle
+ * @param bparts The particle array
+ * @param functionPtr The function used to convert a b-particle to a int
+ *
+ * Do not call this function directly. Use the macro defined above.
+ */
+INLINE static struct io_props io_make_output_field_convert_bpart_INT(
+    const char name[FIELD_BUFFER_SIZE], enum IO_DATA_TYPE type, int dimension,
+    enum unit_conversion_factor units, size_t bpartSize,
+    const struct bpart* bparts, conversion_func_bpart_int functionPtr) {
+
+  struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
+  strcpy(r.name, name);
+  r.type = type;
+  r.dimension = dimension;
+  r.importance = UNUSED;
+  r.units = units;
+  r.partSize = bpartSize;
+  r.bparts = bparts;
+  r.conversion = 1;
+  r.convert_bpart_i = functionPtr;
+
+  return r;
+}
+
 /**
  * @brief Construct an #io_props from its parameters
  *
@@ -788,31 +745,17 @@ INLINE static struct io_props io_make_output_field_convert_bpart_FLOAT(
     const struct bpart* bparts, conversion_func_bpart_float functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = bpartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
-  r.gparts = NULL;
-  r.sparts = NULL;
   r.bparts = bparts;
   r.conversion = 1;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
   r.convert_bpart_f = functionPtr;
-  r.convert_bpart_d = NULL;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -836,31 +779,17 @@ INLINE static struct io_props io_make_output_field_convert_bpart_DOUBLE(
     const struct bpart* bparts, conversion_func_bpart_double functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = bpartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
-  r.gparts = NULL;
-  r.sparts = NULL;
   r.bparts = bparts;
   r.conversion = 1;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
   r.convert_bpart_d = functionPtr;
-  r.convert_bpart_l = NULL;
 
   return r;
 }
@@ -884,30 +813,16 @@ INLINE static struct io_props io_make_output_field_convert_bpart_LONGLONG(
     const struct bpart* bparts, conversion_func_bpart_long_long functionPtr) {
 
   struct io_props r;
+  bzero(&r, sizeof(struct io_props));
+
   strcpy(r.name, name);
   r.type = type;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
-  r.field = NULL;
   r.partSize = bpartSize;
-  r.parts = NULL;
-  r.xparts = NULL;
-  r.gparts = NULL;
-  r.sparts = NULL;
   r.bparts = bparts;
   r.conversion = 1;
-  r.convert_part_f = NULL;
-  r.convert_part_d = NULL;
-  r.convert_part_l = NULL;
-  r.convert_gpart_f = NULL;
-  r.convert_gpart_d = NULL;
-  r.convert_gpart_l = NULL;
-  r.convert_spart_f = NULL;
-  r.convert_spart_d = NULL;
-  r.convert_spart_l = NULL;
-  r.convert_bpart_f = NULL;
-  r.convert_bpart_d = NULL;
   r.convert_bpart_l = functionPtr;
 
   return r;