diff --git a/src/io_properties.h b/src/io_properties.h
index 5c69a6ad760e7eb45a1fd5f1eda25a9427f08a4b..17aff20aa9651b060463fe7f6e8152c7db0365ac 100644
--- a/src/io_properties.h
+++ b/src/io_properties.h
@@ -107,6 +107,9 @@ struct io_props {
   /* Dimension (1D, 3D, ...) */
   int dimension;
 
+  /* Has this entry been filled */
+  int is_used;
+
   /* Is it compulsory ? (input only) */
   enum DATA_IMPORTANCE importance;
 
@@ -126,11 +129,13 @@ struct io_props {
   enum lossy_compression_schemes lossy_compression;
 
   /* Pointer to the start of the temporary buffer used in i/o */
-  char *start_temp_c;
-  int *start_temp_i;
-  float *start_temp_f;
-  double *start_temp_d;
-  long long *start_temp_l;
+  union {
+    char *start_temp_c;
+    int *start_temp_i;
+    float *start_temp_f;
+    double *start_temp_d;
+    long long *start_temp_l;
+  };
 
   /* Pointer to the engine */
   const struct engine *e;
@@ -149,35 +154,37 @@ struct io_props {
   /* Are we converting? */
   int conversion;
 
-  /* Conversion function for part */
-  conversion_func_part_float convert_part_f;
-  conversion_func_part_int convert_part_i;
-  conversion_func_part_double convert_part_d;
-  conversion_func_part_long_long convert_part_l;
-
-  /* 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;
-
-  /* Conversion function for sink */
-  conversion_func_sink_float convert_sink_f;
-  conversion_func_sink_int convert_sink_i;
-  conversion_func_sink_double convert_sink_d;
-  conversion_func_sink_long_long convert_sink_l;
+  union {
+    /* Conversion function for part */
+    conversion_func_part_float convert_part_f;
+    conversion_func_part_int convert_part_i;
+    conversion_func_part_double convert_part_d;
+    conversion_func_part_long_long convert_part_l;
+
+    /* 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;
+
+    /* Conversion function for sink */
+    conversion_func_sink_float convert_sink_f;
+    conversion_func_sink_int convert_sink_i;
+    conversion_func_sink_double convert_sink_d;
+    conversion_func_sink_long_long convert_sink_l;
+  };
 };
 
 /**
@@ -250,6 +257,7 @@ INLINE static struct io_props io_make_input_field_(
 
   safe_strcpy(r.name, name, FIELD_BUFFER_SIZE);
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = importance;
   r.units = units;
@@ -303,6 +311,7 @@ INLINE static struct io_props io_make_output_field_(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -355,6 +364,7 @@ INLINE static struct io_props io_make_output_field_convert_part_INT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -400,6 +410,7 @@ INLINE static struct io_props io_make_output_field_convert_part_FLOAT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -445,6 +456,7 @@ INLINE static struct io_props io_make_output_field_convert_part_DOUBLE(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -490,6 +502,7 @@ INLINE static struct io_props io_make_output_field_convert_part_LONGLONG(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -543,6 +556,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_INT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -586,6 +600,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_FLOAT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -629,6 +644,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_DOUBLE(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -672,6 +688,7 @@ INLINE static struct io_props io_make_output_field_convert_gpart_LONGLONG(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -724,6 +741,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_INT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -767,6 +785,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_FLOAT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -810,6 +829,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_DOUBLE(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -853,6 +873,7 @@ INLINE static struct io_props io_make_output_field_convert_spart_LONGLONG(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -905,6 +926,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_INT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -948,6 +970,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_FLOAT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -991,6 +1014,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_DOUBLE(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -1034,6 +1058,7 @@ INLINE static struct io_props io_make_output_field_convert_bpart_LONGLONG(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -1086,6 +1111,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_INT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -1129,6 +1155,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_FLOAT(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -1172,6 +1199,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_DOUBLE(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;
@@ -1215,6 +1243,7 @@ INLINE static struct io_props io_make_output_field_convert_sink_LONGLONG(
     safe_strcpy(r.description, description, DESCRIPTION_BUFFER_SIZE);
   }
   r.type = type;
+  r.is_used = 1;
   r.dimension = dimension;
   r.importance = UNUSED;
   r.units = units;