diff --git a/configure.ac b/configure.ac
index 2f88793960d9a695064e2edaf82ffd253b8b6c34..c2954cacd28499b80e9d003f32003885caf2dcaf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -935,7 +935,7 @@ esac
 #  chemistry function
 AC_ARG_WITH([chemistry],
    [AS_HELP_STRING([--with-chemistry=<function>],
-      [chemistry function @<:@none, grackle default: none@:>@]
+      [chemistry function @<:@none, gear default: none@:>@]
    )],
    [with_chemistry="$withval"],
    [with_chemistry="none"]
@@ -944,8 +944,8 @@ case "$with_chemistry" in
    none)
       AC_DEFINE([CHEMISTRY_NONE], [1], [No chemistry function])
    ;; 
-   grackle)
-      AC_DEFINE([CHEMISTRY_GRACKLE], [1], [Chemistry compatible with the grackle cooling])
+   gear)
+      AC_DEFINE([CHEMISTRY_GEAR], [1], [Chemistry taken from the GEAR model])
    ;; 
    *)
       AC_MSG_ERROR([Unknown chemistry function: $with_chemistry])
diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 0193760d3114aecab91f0c2ad27a9c1dd77dec9a..844a6fa68029af3c119d7c03e09e6dec957c5da4 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -765,7 +765,8 @@ INPUT		       += @top_srcdir@/src/gravity/Default
 INPUT		       += @top_srcdir@/src/stars/Default
 INPUT		       += @top_srcdir@/src/riemann
 INPUT		       += @top_srcdir@/src/potential/point_mass
-INPUT		       += @top_srcdir@/src/cooling/const_du
+INPUT		       += @top_srcdir@/src/cooling/none
+INPUT		       += @top_srcdir@/src/chemistry/none
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
diff --git a/examples/main.c b/examples/main.c
index 24a9412ecc76bb5262b9c402cf86661233d454dd..bdd559c9b8aab718962398f6f6e06c43f94f9df6 100644
--- a/examples/main.c
+++ b/examples/main.c
@@ -612,6 +612,9 @@ int main(int argc, char *argv[]) {
   if (with_cooling) cooling_init(params, &us, &prog_const, &cooling_func);
   if (with_cooling && myrank == 0) cooling_print(&cooling_func);
 
+  /* Initialise the chemistry */
+  chemistry_print();
+
   /* Initialise the feedback properties */
   struct sourceterms sourceterms;
   if (with_sourceterms) sourceterms_init(params, &us, &sourceterms);
diff --git a/src/Makefile.am b/src/Makefile.am
index ed330b8abbe307bf6055b607a4b9d9899413d433..e191bb9008e5f4eb9b2aaec4876acc76cd00fd59 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -123,9 +123,9 @@ nobase_noinst_HEADERS = align.h approx_math.h atomic.h barrier.h cycle.h error.h
                  chemistry/none/chemistry.h \
 		 chemistry/none/chemistry_io.h \
 		 chemistry/none/chemistry_struct.h \
-                 chemistry/grackle/chemistry.h \
-		 chemistry/grackle/chemistry_io.h \
-		 chemistry/grackle/chemistry_struct.h
+                 chemistry/gear/chemistry.h \
+		 chemistry/gear/chemistry_io.h \
+		 chemistry/gear/chemistry_struct.h
 
 
 # Sources and flags for regular library
diff --git a/src/chemistry.c b/src/chemistry.c
index a80459f3cac56be1287b87aecaca9178b4ea0c32..ae9fcc31f5f8bd91d00744d7c96c7b4095356026 100644
--- a/src/chemistry.c
+++ b/src/chemistry.c
@@ -31,24 +31,17 @@
  * @param parameter_file The parsed parameter file.
  * @param us The current internal system of units.
  * @param phys_const The physical constants in internal units.
- * @param chemistry The chemistry properties to initialize
  */
 void chemistry_init(const struct swift_params* parameter_file,
                     const struct unit_system* us,
-                    const struct phys_const* phys_const,
-                    struct chemistry_part_data* chemistry) {
+                    const struct phys_const* phys_const) {
 
-  chemistry_init_backend(parameter_file, us, phys_const, chemistry);
+  chemistry_init_backend(parameter_file, us, phys_const);
 }
 
 /**
  * @brief Prints the properties of the chemistry model to stdout.
  *
- * Calls chemistry_print_backend for the chosen chemistry function.
- *
- * @param chemistry The properties of the chemistry function.
+ * Calls chemistry_print_backend for the chosen chemistry model.
  */
-void chemistry_print(const struct chemistry_part_data* chemistry) {
-
-  chemistry_print_backend(chemistry);
-}
+void chemistry_print() { chemistry_print_backend(); }
diff --git a/src/chemistry.h b/src/chemistry.h
index e151e9803fed5abed7558834c51c08980bdc8a00..c464106a7c09eb4dd13f57a0b17cb34131f99091 100644
--- a/src/chemistry.h
+++ b/src/chemistry.h
@@ -31,8 +31,8 @@
 /* Import the right chemistry definition */
 #if defined(CHEMISTRY_NONE)
 #include "./chemistry/none/chemistry.h"
-#elif defined(CHEMISTRY_GRACKLE)
-#include "./chemistry/grackle/chemistry.h"
+#elif defined(CHEMISTRY_GEAR)
+#include "./chemistry/gear/chemistry.h"
 #else
 #error "Invalid choice of chemistry function."
 #endif
@@ -40,9 +40,8 @@
 /* Common functions */
 void chemistry_init(const struct swift_params* parameter_file,
                     const struct unit_system* us,
-                    const struct phys_const* phys_const,
-                    struct chemistry_part_data* chem);
+                    const struct phys_const* phys_const);
 
-void chemistry_print(const struct chemistry_part_data* chem);
+void chemistry_print();
 
 #endif /* SWIFT_CHEMISTRY_H */
diff --git a/src/chemistry/grackle/chemistry.h b/src/chemistry/gear/chemistry.h
similarity index 80%
rename from src/chemistry/grackle/chemistry.h
rename to src/chemistry/gear/chemistry.h
index 86cbdcb03608627c30d831456ef6f10697a5ea7f..de8badb08eb3742cc7105b84f673a517c50b81ee 100644
--- a/src/chemistry/grackle/chemistry.h
+++ b/src/chemistry/gear/chemistry.h
@@ -16,11 +16,11 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  ******************************************************************************/
-#ifndef SWIFT_CHEMISTRY_NONE_H
-#define SWIFT_CHEMISTRY_NONE_H
+#ifndef SWIFT_CHEMISTRY_GEAR_H
+#define SWIFT_CHEMISTRY_GEAR_H
 
 /**
- * @file src/chemistry/none/chemistry.h
+ * @file src/chemistry/gear/chemistry.h
  * @brief Empty infrastructure for the cases without chemistry function
  */
 
@@ -57,22 +57,17 @@ __attribute__((always_inline)) INLINE static void chemistry_init_part(
  * @param parameter_file The parsed parameter file.
  * @param us The current internal system of units.
  * @param phys_const The physical constants in internal units.
- * @param chemistry The chemistry properties to initialize
  */
 static INLINE void chemistry_init_backend(
     const struct swift_params* parameter_file, const struct unit_system* us,
-    const struct phys_const* phys_const,
-    struct chemistry_part_data* chemistry) {}
+    const struct phys_const* phys_const) {}
 
 /**
  * @brief Prints the properties of the chemistry model to stdout.
- *
- * @param chemistry The properties of the chemistry function.
  */
-static INLINE void chemistry_print_backend(
-    const struct chemistry_part_data* chemistry) {
+static INLINE void chemistry_print_backend() {
 
-  message("Chemistry function is 'grackle'.");
+  message("Chemistry function is 'gear'.");
 }
 
-#endif /* SWIFT_CHEMISTRY_NONE_H */
+#endif /* SWIFT_CHEMISTRY_GEAR_H */
diff --git a/src/chemistry/grackle/chemistry_io.h b/src/chemistry/gear/chemistry_io.h
similarity index 77%
rename from src/chemistry/grackle/chemistry_io.h
rename to src/chemistry/gear/chemistry_io.h
index f1affe8cef35e3a74efc0a12b10f0488708853d7..1be8ee49e33c5a7a0193db4af57d69408c2c1134 100644
--- a/src/chemistry/grackle/chemistry_io.h
+++ b/src/chemistry/gear/chemistry_io.h
@@ -16,6 +16,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  ******************************************************************************/
+#ifndef SWIFT_CHEMISTRY_IO_GEAR_H
+#define SWIFT_CHEMISTRY_IO_GEAR_H
 
 #include "io_properties.h"
 
@@ -24,18 +26,17 @@
  *
  * @param parts The particle array.
  * @param list The list of i/o properties to read.
- * @param num_fields The number of i/o fields to read.
+ *
+ * @return Returns the number of fields to read.
  */
-void chemistry_read_particles(struct part* parts, struct io_props* list,
-                              int* num_fields) {
-
-  list += *num_fields;
-  *num_fields += 1;
+int chemistry_read_particles(struct part* parts, struct io_props* list) {
 
   /* List what we want to read */
   list[0] =
       io_make_input_field("HeDensity", FLOAT, 1, COMPULSORY, UNIT_CONV_DENSITY,
                           parts, chemistry_data.he_density);
+
+  return 1;
 }
 
 /**
@@ -43,16 +44,16 @@ void chemistry_read_particles(struct part* parts, struct io_props* list,
  *
  * @param parts The particle array.
  * @param list The list of i/o properties to write.
- * @param num_fields The number of i/o fields to write.
+ *
+ * @return Returns the number of fields to write.
  */
-void chemistry_write_particles(const struct part* parts, struct io_props* list,
-                               int* num_fields) {
-
-  list += *num_fields;
-  *num_fields += 1;
+int chemistry_write_particles(const struct part* parts, struct io_props* list) {
 
+  /* List what we want to write */
   list[0] = io_make_output_field("HeDensity", FLOAT, 1, UNIT_CONV_DENSITY,
                                  parts, chemistry_data.he_density);
+
+  return 1;
 }
 
 /**
@@ -61,5 +62,7 @@ void chemistry_write_particles(const struct part* parts, struct io_props* list,
  */
 void writeChemistryFlavor(hid_t h_grpsph) {
 
-  io_write_attribute_s(h_grpsph, "Chemistry Model", "Grackle");
+  io_write_attribute_s(h_grpsph, "Chemistry Model", "GEAR");
 }
+
+#endif /* SWIFT_CHEMISTRY_IO_GEAR_H */
diff --git a/src/chemistry/grackle/chemistry_struct.h b/src/chemistry/gear/chemistry_struct.h
similarity index 87%
rename from src/chemistry/grackle/chemistry_struct.h
rename to src/chemistry/gear/chemistry_struct.h
index f62b81b56cecae8ab38816d8d2ee34ee3a7470c3..dee3f267d4c61825bf67febab7397396cf071773 100644
--- a/src/chemistry/grackle/chemistry_struct.h
+++ b/src/chemistry/gear/chemistry_struct.h
@@ -16,11 +16,11 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  ******************************************************************************/
-#ifndef SWIFT_CHEMISTRY_STRUCT_NONE_H
-#define SWIFT_CHEMISTRY_STRUCT_NONE_H
+#ifndef SWIFT_CHEMISTRY_STRUCT_GEAR_H
+#define SWIFT_CHEMISTRY_STRUCT_GEAR_H
 
 /**
- * @file src/chemistry/none/chemistry_struct.h
+ * @file src/chemistry/gear/chemistry_struct.h
  * @brief Empty infrastructure for the cases without chemistry function
  */
 
@@ -31,4 +31,4 @@ struct chemistry_part_data {
   float he_density;
 };
 
-#endif /* SWIFT_CHEMISTRY_STRUCT_NONE_H */
+#endif /* SWIFT_CHEMISTRY_STRUCT_GEAR_H */
diff --git a/src/chemistry/none/chemistry.h b/src/chemistry/none/chemistry.h
index 6f2cb354d9f011689479554528c142e45bd9c32a..d4aa7fb10a5cb1d872dde201e8ec6caa3c9c62f0 100644
--- a/src/chemistry/none/chemistry.h
+++ b/src/chemistry/none/chemistry.h
@@ -57,20 +57,15 @@ __attribute__((always_inline)) INLINE static void chemistry_init_part(
  * @param parameter_file The parsed parameter file.
  * @param us The current internal system of units.
  * @param phys_const The physical constants in internal units.
- * @param chemistry The chemistry properties to initialize
  */
 static INLINE void chemistry_init_backend(
     const struct swift_params* parameter_file, const struct unit_system* us,
-    const struct phys_const* phys_const,
-    struct chemistry_part_data* chemistry) {}
+    const struct phys_const* phys_const) {}
 
 /**
  * @brief Prints the properties of the chemistry model to stdout.
- *
- * @param chemistry The properties of the chemistry function.
  */
-static INLINE void chemistry_print_backend(
-    const struct chemistry_part_data* chemistry) {
+static INLINE void chemistry_print_backend() {
 
   message("Chemistry function is 'No chemistry'.");
 }
diff --git a/src/chemistry/none/chemistry_io.h b/src/chemistry/none/chemistry_io.h
index 55e41772b3bcf955d9c170ff24cf7d4e79ccf462..6070ca0df12c67077b15e8d86f02d0d3390156ef 100644
--- a/src/chemistry/none/chemistry_io.h
+++ b/src/chemistry/none/chemistry_io.h
@@ -16,6 +16,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  ******************************************************************************/
+#ifndef SWIFT_CHEMISTRY_IO_NONE_H
+#define SWIFT_CHEMISTRY_IO_NONE_H
 
 #include "io_properties.h"
 
@@ -24,12 +26,15 @@
  *
  * @param parts The particle array.
  * @param list The list of i/o properties to read.
- * @param num_fields The number of i/o fields to read.
+ *
+ * @return Returns the number of fields to write.
  */
-void chemistry_read_particles(struct part* parts, struct io_props* list,
-                              int* num_fields) {
+int chemistry_read_particles(struct part* parts, struct io_props* list) {
+
+  /* update list according to hydro_io */
 
-  /* update num_fields and list according to hydro_io */
+  /* Return the number of fields to read */
+  return 0;
 }
 
 /**
@@ -37,12 +42,15 @@ void chemistry_read_particles(struct part* parts, struct io_props* list,
  *
  * @param parts The particle array.
  * @param list The list of i/o properties to write.
- * @param num_fields The number of i/o fields to write.
+ *
+ * @return Returns the number of fields to write.
  */
-void chemistry_write_particles(const struct part* parts, struct io_props* list,
-                               int* num_fields) {
+int chemistry_write_particles(const struct part* parts, struct io_props* list) {
 
-  /* update num_fields and list according to hydro_io */
+  /* update list according to hydro_io */
+
+  /* Return the number of fields to write */
+  return 0;
 }
 
 /**
@@ -53,3 +61,5 @@ void writeChemistryFlavor(hid_t h_grpsph) {
 
   io_write_attribute_s(h_grpsph, "Chemistry Model", "None");
 }
+
+#endif /* SWIFT_CHEMISTRY_IO_NONE_H */
diff --git a/src/chemistry_io.h b/src/chemistry_io.h
index 315248d690d0199730034b290de12648ff76e115..8ba1c8f78de9adb87fc327c1ce04b13849755aa6 100644
--- a/src/chemistry_io.h
+++ b/src/chemistry_io.h
@@ -25,8 +25,8 @@
 /* Import the right functions */
 #if defined(CHEMISTRY_NONE)
 #include "./chemistry/none/chemistry_io.h"
-#elif defined(CHEMISTRY_GRACKLE)
-#include "./chemistry/grackle/chemistry_io.h"
+#elif defined(CHEMISTRY_GEAR)
+#include "./chemistry/gear/chemistry_io.h"
 #else
 #error "Invalid choice of chemistry function."
 #endif
diff --git a/src/chemistry_struct.h b/src/chemistry_struct.h
index f75cd3ff486a1c25964dd40e4ab29433273aa2a4..5bb228dac084ab080ba720fd64283e147c7e1fff 100644
--- a/src/chemistry_struct.h
+++ b/src/chemistry_struct.h
@@ -30,8 +30,8 @@
 /* Import the right chemistry definition */
 #if defined(CHEMISTRY_NONE)
 #include "./chemistry/none/chemistry_struct.h"
-#elif defined(CHEMISTRY_GRACKLE)
-#include "./chemistry/grackle/chemistry_struct.h"
+#elif defined(CHEMISTRY_GEAR)
+#include "./chemistry/gear/chemistry_struct.h"
 #else
 #error "Invalid choice of chemistry function."
 #endif
diff --git a/src/cooling/const_du/cooling.h b/src/cooling/const_du/cooling.h
index 4d5b12ed808ea38f7cd9e861b12e16af4e7fb80f..1becafb4fe3702240d726ab5f177c16f0f4e1415 100644
--- a/src/cooling/const_du/cooling.h
+++ b/src/cooling/const_du/cooling.h
@@ -51,7 +51,7 @@
 __attribute__((always_inline)) INLINE static void writeCoolingFlavor(
     hid_t h_grpsph) {
 
-  io_write_attribute_s(h_grpsph, "Cooling Model", "const_du");
+  io_write_attribute_s(h_grpsph, "Cooling Model", "Constant du/dt");
 }
 
 /**
diff --git a/src/cooling/const_lambda/cooling.h b/src/cooling/const_lambda/cooling.h
index 2daa93d7ab6a5f52235318de67f4b97eaeb39ec0..5e166b562a34f7111468d40e2eb79e97f61a0bd8 100644
--- a/src/cooling/const_lambda/cooling.h
+++ b/src/cooling/const_lambda/cooling.h
@@ -44,7 +44,7 @@
 __attribute__((always_inline)) INLINE static void writeCoolingFlavor(
     hid_t h_grpsph) {
 
-  io_write_attribute_s(h_grpsph, "Cooling Model", "const_lambda");
+  io_write_attribute_s(h_grpsph, "Cooling Model", "Constant Lambda");
 }
 
 /**
diff --git a/src/cooling/grackle/cooling_struct.h b/src/cooling/grackle/cooling_struct.h
index 8895137eb9884c54fd982ee9a2b1d61db453a44d..9ad1470922fdcbf892014f988389eccc1a4e9014 100644
--- a/src/cooling/grackle/cooling_struct.h
+++ b/src/cooling/grackle/cooling_struct.h
@@ -53,8 +53,6 @@ struct cooling_function_data {
 
 /**
  * @brief Properties of the cooling stored in the extra particle data
- *
- * theses data are not processed during the SPH density/force.
  */
 struct cooling_xpart_data {
 
diff --git a/src/hydro/Gadget2/hydro_io.h b/src/hydro/Gadget2/hydro_io.h
index 4260501b48763172114e5d04a9e932b17536346d..24d4718168fef46c96b407902c9d548ba9132a4e 100644
--- a/src/hydro/Gadget2/hydro_io.h
+++ b/src/hydro/Gadget2/hydro_io.h
@@ -36,8 +36,6 @@
 void hydro_read_particles(struct part* parts, struct io_props* list,
                           int* num_fields) {
 
-  *num_fields = 8;
-
   /* List what we want to read */
   list[0] = io_make_input_field("Coordinates", DOUBLE, 3, COMPULSORY,
                                 UNIT_CONV_LENGTH, parts, x);
@@ -56,7 +54,13 @@ void hydro_read_particles(struct part* parts, struct io_props* list,
   list[7] = io_make_input_field("Density", FLOAT, 1, OPTIONAL,
                                 UNIT_CONV_DENSITY, parts, rho);
 
-  chemistry_read_particles(parts, list, num_fields);
+  *num_fields = 8;
+  list += *num_fields;
+
+  /* Read in chemistry information */
+  const int num_chem_fields = chemistry_read_particles(parts, list);
+  *num_fields += num_chem_fields;
+  list += num_chem_fields;
 }
 
 void convert_u(const struct engine* e, const struct part* p, float* ret) {
@@ -93,12 +97,6 @@ void convert_part_pos(const struct engine* e, const struct part* p,
 void hydro_write_particles(const struct part* parts, struct io_props* list,
                            int* num_fields) {
 
-  *num_fields = 10;
-
-#ifdef DEBUG_INTERACTIONS_SPH
-  *num_fields += 4;
-#endif
-
   /* List what we want to write */
   list[0] = io_make_output_field_convert_part(
       "Coordinates", DOUBLE, 3, UNIT_CONV_LENGTH, parts, convert_part_pos);
@@ -122,21 +120,30 @@ void hydro_write_particles(const struct part* parts, struct io_props* list,
   list[9] = io_make_output_field_convert_part(
       "Pressure", FLOAT, 1, UNIT_CONV_PRESSURE, parts, convert_P);
 
+  *num_fields = 10;
+  list += *num_fields;
+
+  /* Write some chemistry information */
+  const int num_chem_fields = chemistry_write_particles(parts, list);
+  *num_fields += num_chem_fields;
+  list += num_chem_fields;
+
 #ifdef DEBUG_INTERACTIONS_SPH
 
-  list[10] = io_make_output_field("Num_ngb_density", INT, 1, UNIT_CONV_NO_UNITS,
-                                  parts, num_ngb_density);
-  list[11] = io_make_output_field("Num_ngb_force", INT, 1, UNIT_CONV_NO_UNITS,
-                                  parts, num_ngb_force);
-  list[12] =
+  list[0] = io_make_output_field("Num_ngb_density", INT, 1, UNIT_CONV_NO_UNITS,
+                                 parts, num_ngb_density);
+  list[1] = io_make_output_field("Num_ngb_force", INT, 1, UNIT_CONV_NO_UNITS,
+                                 parts, num_ngb_force);
+  list[2] =
       io_make_output_field("Ids_ngb_density", LONGLONG, MAX_NUM_OF_NEIGHBOURS,
                            UNIT_CONV_NO_UNITS, parts, ids_ngbs_density);
-  list[13] =
+  list[3] =
       io_make_output_field("Ids_ngb_force", LONGLONG, MAX_NUM_OF_NEIGHBOURS,
                            UNIT_CONV_NO_UNITS, parts, ids_ngbs_force);
-#endif
 
-  chemistry_write_particles(parts, list, num_fields);
+  *num_fields += 4;
+  list += 4;
+#endif
 }
 
 /**
@@ -153,9 +160,6 @@ void writeSPHflavour(hid_t h_grpsph) {
       "as in Springel (2005), i.e. Monaghan (1992) with Balsara (1995) switch");
   io_write_attribute_f(h_grpsph, "Viscosity alpha", const_viscosity_alpha);
   io_write_attribute_f(h_grpsph, "Viscosity beta", 3.f);
-
-  writeCoolingFlavor(h_grpsph);
-  writeChemistryFlavor(h_grpsph);
 }
 
 /**
diff --git a/src/hydro/Gadget2/hydro_part.h b/src/hydro/Gadget2/hydro_part.h
index 1d82451509682a8e8c267d9af5c0527c551025e4..55745b52f4459905b02adf4824c489510ee93f97 100644
--- a/src/hydro/Gadget2/hydro_part.h
+++ b/src/hydro/Gadget2/hydro_part.h
@@ -131,11 +131,12 @@ struct part {
     } force;
   };
 
+  /* Chemistry information */
+  struct chemistry_part_data chemistry_data;
+
   /* Time-step length */
   timebin_t time_bin;
 
-  struct chemistry_part_data chemistry_data;
-
 #ifdef SWIFT_DEBUG_CHECKS
 
   /* Time of the last drift */
diff --git a/src/parallel_io.c b/src/parallel_io.c
index 0711cc1d8ec3014ea23a2abf1d7c31309539fed2..d8b7adeca74cb949d2aa39f1f31e8d47f5354dd9 100644
--- a/src/parallel_io.c
+++ b/src/parallel_io.c
@@ -961,6 +961,14 @@ void write_output_parallel(struct engine* e, const char* baseName,
     H5Gclose(h_grp);
   }
 
+  /* Print the subgrid parameters */
+  h_grp = H5Gcreate(h_file, "/SubgridScheme", H5P_DEFAULT, H5P_DEFAULT,
+                    H5P_DEFAULT);
+  if (h_grp < 0) error("Error while creating subgrid group");
+  writeCoolingFlavor(h_grp);
+  writeChemistryFlavor(h_grp);
+  H5Gclose(h_grp);
+
   /* Print the gravity parameters */
   if (e->policy & engine_policy_self_gravity) {
     h_grp = H5Gcreate(h_file, "/GravityScheme", H5P_DEFAULT, H5P_DEFAULT,
diff --git a/src/serial_io.c b/src/serial_io.c
index 7f87c0183d637e8266f80e208783411664274edd..9c0f53850ffa3241335a8ba6c69df1edd050b625 100644
--- a/src/serial_io.c
+++ b/src/serial_io.c
@@ -811,10 +811,18 @@ void write_output_serial(struct engine* e, const char* baseName,
                         H5P_DEFAULT);
       if (h_grp < 0) error("Error while creating SPH group");
       hydro_props_print_snapshot(h_grp, e->hydro_properties);
-      writeSPHflavour(h_grp);
+      writeChemistryFlavor(h_grp);
       H5Gclose(h_grp);
     }
 
+    /* Print the subgrid parameters */
+    h_grp = H5Gcreate(h_file, "/SubgridScheme", H5P_DEFAULT, H5P_DEFAULT,
+                      H5P_DEFAULT);
+    if (h_grp < 0) error("Error while creating subgrid group");
+    writeCoolingFlavor(h_grp);
+    writeChemistryFlavor(h_grp);
+    H5Gclose(h_grp);
+
     /* Print the gravity parameters */
     if (e->policy & engine_policy_self_gravity) {
       h_grp = H5Gcreate(h_file, "/GravityScheme", H5P_DEFAULT, H5P_DEFAULT,
diff --git a/src/single_io.c b/src/single_io.c
index 3cf1d313dc5ed03073e794695d077f1f71e5b30a..1635ce5c526043e40ed2d9b1d0227cb93f82fcfb 100644
--- a/src/single_io.c
+++ b/src/single_io.c
@@ -665,6 +665,14 @@ void write_output_single(struct engine* e, const char* baseName,
     H5Gclose(h_grp);
   }
 
+  /* Print the subgrid parameters */
+  h_grp = H5Gcreate(h_file, "/SubgridScheme", H5P_DEFAULT, H5P_DEFAULT,
+                    H5P_DEFAULT);
+  if (h_grp < 0) error("Error while creating subgrid group");
+  writeCoolingFlavor(h_grp);
+  writeChemistryFlavor(h_grp);
+  H5Gclose(h_grp);
+
   /* Print the gravity parameters */
   if (e->policy & engine_policy_self_gravity) {
     h_grp = H5Gcreate(h_file, "/GravityScheme", H5P_DEFAULT, H5P_DEFAULT,