diff --git a/src/cooling/grackle/cooling.h b/src/cooling/grackle/cooling.h
index 515ecb679311fb4a827baa4846c43b3df7d0853c..db3184feed7a786192d3670d8cdddba2eb86b613 100644
--- a/src/cooling/grackle/cooling.h
+++ b/src/cooling/grackle/cooling.h
@@ -69,6 +69,34 @@ __attribute__((always_inline)) INLINE static void cooling_first_init_part(
     const struct cooling_function_data* cooling) {
 
   xp->cooling_data.radiated_energy = 0.f;
+#if COOLING_GRACKLE_MODE >= 1
+  /* primordial chemistry >= 1 */
+  xp->cooling_data.HI_density = 0.f;
+  xp->cooling_data.HII_density = 0.f;
+  xp->cooling_data.HeI_density = 0.f;
+  xp->cooling_data.HeII_density = 0.f;
+  xp->cooling_data.HeIII_density = 0.f;
+  xp->cooling_data.e_density = 0.f;
+
+#if COOLING_GRACKLE_MODE >= 2
+  /* primordial chemistry >= 2 */
+  xp->cooling_data.HM_density = 0.f;
+  xp->cooling_data.H2I_density = 0.f;
+  xp->cooling_data.H2II_density = 0.f;
+
+#if COOLING_GRACKLE_MODE >= 3
+  /* primordial chemistry >= 3 */
+  xp->cooling_data.DI_density = 0.f;
+  xp->cooling_data.DII_density = 0.f;
+  xp->cooling_data.HDI_density = 0.f;
+#endif // MODE >= 3
+
+#endif // MODE >= 2
+
+#endif // MODE >= 1
+  
+  /* metal cooling = 1 */
+  xp->cooling_data.metal_density = 0.f;
 }
 
 /**
@@ -168,24 +196,24 @@ __attribute__((always_inline)) INLINE static double cooling_rate(
 
 #if COOLING_GRACKLE_MODE >= 1
   /* primordial chemistry >= 1 */
-  data.HI_density = &xp->HI_density;
-  data.HII_density = &xp->HII_density;
-  data.HeI_density = &xp->HeI_density;
-  data.HeII_density = &xp->HeII_density;
-  data.HeIII_density = &xp->HeIII_density;
-  data.e_density = &xp->e_density;
+  data.HI_density = &xp->cooling_data.HI_density;
+  data.HII_density = &xp->cooling_data.HII_density;
+  data.HeI_density = &xp->cooling_data.HeI_density;
+  data.HeII_density = &xp->cooling_data.HeII_density;
+  data.HeIII_density = &xp->cooling_data.HeIII_density;
+  data.e_density = &xp->cooling_data.e_density;
 
  #if COOLING_GRACKLE_MODE >= 2
   /* primordial chemistry >= 2 */
-  data.HM_density = &xp->HM_density;
-  data.H2I_density = &xp->H2I_density;
-  data.H2II_density = &xp->H2II_density;
+  data.HM_density = &xp->cooling_data.HM_density;
+  data.H2I_density = &xp->cooling_data.H2I_density;
+  data.H2II_density = &xp->cooling_data.H2II_density;
 
 #if COOLING_GRACKLE_MODE >= 3
   /* primordial chemistry >= 3 */
-  data.DI_density = &xp->DI_density;
-  data.DII_density = &xp->DII_density;
-  data.HDI_density = &xp->HDI_density;
+  data.DI_density = &xp->cooling_data.DI_density;
+  data.DII_density = &xp->cooling_data.DII_density;
+  data.HDI_density = &xp->cooling_data.HDI_density;
 #endif // MODE >= 3
 
 #endif // MODE >= 2
@@ -193,7 +221,7 @@ __attribute__((always_inline)) INLINE static double cooling_rate(
 #endif // MODE >= 1
 
   /* metal cooling = 1 */
-  data.metal_density = &xp->metal_density;
+  data.metal_density = &xp->cooling_data.metal_density;
 
   /* /\* volumetric heating rate *\/ */
   /* gr_float volumetric_heating_rate = 0.; */
diff --git a/src/cooling/grackle/cooling_struct.h b/src/cooling/grackle/cooling_struct.h
index 9e567f516fed73de57edcd63c18d5d1ac44cd350..5c8dc240c55bbba73baa9efc70281e5d30496c90 100644
--- a/src/cooling/grackle/cooling_struct.h
+++ b/src/cooling/grackle/cooling_struct.h
@@ -88,7 +88,7 @@ struct cooling_xpart_data {
 #endif // MODE >= 1
   
   /* metal cooling = 1 */
-  gr_float metal_density = density * grackle_data->SolarMetalFractionByMass;
+  gr_float metal_density;
 };
 
 #endif /* SWIFT_COOLING_STRUCT_NONE_H */