diff --git a/src/common_io.c b/src/common_io.c
index 494a702125cf873946d06855b5683216cb2aceaf..68311107575a89ce8a2990a8e0f7a8eeb5d2d644 100644
--- a/src/common_io.c
+++ b/src/common_io.c
@@ -250,13 +250,18 @@ void io_write_attribute_s(hid_t grp, const char* name, const char* str) {
 
 /**
  * @brief Reads the Unit System from an IC file.
+ *
+ * If the 'Units' group does not exist in the ICs, we will use the internal
+ * system of units.
+ *
  * @param h_file The (opened) HDF5 file from which to read.
- * @param us The unit_system to fill.
+ * @param ic_units The unit_system to fill.
+ * @param internal_units The internal system of units to copy if needed.
  * @param mpi_rank The MPI rank we are on.
- *
- * If the 'Units' group does not exist in the ICs, cgs units will be assumed
  */
-void io_read_unit_system(hid_t h_file, struct unit_system* us, int mpi_rank) {
+void io_read_unit_system(hid_t h_file, struct unit_system* ic_units,
+                         const struct unit_system* internal_units,
+                         int mpi_rank) {
 
   /* First check if it exists as this is *not* required. */
   const htri_t exists = H5Lexists(h_file, "/Units", H5P_DEFAULT);
@@ -264,16 +269,12 @@ void io_read_unit_system(hid_t h_file, struct unit_system* us, int mpi_rank) {
   if (exists == 0) {
 
     if (mpi_rank == 0)
-      message("'Units' group not found in ICs. Assuming CGS unit system.");
+      message("'Units' group not found in ICs. Assuming internal unit system.");
 
-    /* Default to CGS */
-    us->UnitMass_in_cgs = 1.;
-    us->UnitLength_in_cgs = 1.;
-    us->UnitTime_in_cgs = 1.;
-    us->UnitCurrent_in_cgs = 1.;
-    us->UnitTemperature_in_cgs = 1.;
+    units_copy(ic_units, internal_units);
 
     return;
+
   } else if (exists < 0) {
     error("Serious problem with 'Units' group in ICs. H5Lexists gives %d",
           exists);
@@ -284,15 +285,15 @@ void io_read_unit_system(hid_t h_file, struct unit_system* us, int mpi_rank) {
 
   /* Ok, Read the damn thing */
   io_read_attribute(h_grp, "Unit length in cgs (U_L)", DOUBLE,
-                    &us->UnitLength_in_cgs);
+                    &ic_units->UnitLength_in_cgs);
   io_read_attribute(h_grp, "Unit mass in cgs (U_M)", DOUBLE,
-                    &us->UnitMass_in_cgs);
+                    &ic_units->UnitMass_in_cgs);
   io_read_attribute(h_grp, "Unit time in cgs (U_t)", DOUBLE,
-                    &us->UnitTime_in_cgs);
+                    &ic_units->UnitTime_in_cgs);
   io_read_attribute(h_grp, "Unit current in cgs (U_I)", DOUBLE,
-                    &us->UnitCurrent_in_cgs);
+                    &ic_units->UnitCurrent_in_cgs);
   io_read_attribute(h_grp, "Unit temperature in cgs (U_T)", DOUBLE,
-                    &us->UnitTemperature_in_cgs);
+                    &ic_units->UnitTemperature_in_cgs);
 
   /* Clean up */
   H5Gclose(h_grp);
diff --git a/src/common_io.h b/src/common_io.h
index f26a635a66f40424984238e586fcdf5bc752fc99..61feffe2ba613c339df02e8c71cbbd1d4aec7a87 100644
--- a/src/common_io.h
+++ b/src/common_io.h
@@ -75,7 +75,9 @@ void io_write_attribute_s(hid_t grp, const char* name, const char* str);
 void io_write_code_description(hid_t h_file);
 void io_write_engine_policy(hid_t h_file, const struct engine* e);
 
-void io_read_unit_system(hid_t h_file, struct unit_system* us, int mpi_rank);
+void io_read_unit_system(hid_t h_file, struct unit_system* ic_units,
+                         const struct unit_system* internal_units,
+                         int mpi_rank);
 void io_write_unit_system(hid_t h_grp, const struct unit_system* us,
                           const char* groupName);
 
diff --git a/src/parallel_io.c b/src/parallel_io.c
index d37c8632675dc13e487e0c80e2f7390f5c14e527..dc370094b7c59ecbcf992ad9e28ffb75535fad67 100644
--- a/src/parallel_io.c
+++ b/src/parallel_io.c
@@ -709,7 +709,7 @@ void read_ic_parallel(char* fileName, const struct unit_system* internal_units,
   struct unit_system* ic_units =
       (struct unit_system*)malloc(sizeof(struct unit_system));
   if (ic_units == NULL) error("Unable to allocate memory for IC unit system");
-  io_read_unit_system(h_file, ic_units, mpi_rank);
+  io_read_unit_system(h_file, ic_units, internal_units, mpi_rank);
 
   /* Tell the user if a conversion will be needed */
   if (mpi_rank == 0) {
diff --git a/src/serial_io.c b/src/serial_io.c
index 4074f9bd54754f4b50a0e62a6a54089efb4d5bfb..59d05ddda8050ffcf4fdbc1c1adafe717ef5622e 100644
--- a/src/serial_io.c
+++ b/src/serial_io.c
@@ -503,7 +503,7 @@ void read_ic_serial(char* fileName, const struct unit_system* internal_units,
 
     /* Read the unit system used in the ICs */
     if (ic_units == NULL) error("Unable to allocate memory for IC unit system");
-    io_read_unit_system(h_file, ic_units, mpi_rank);
+    io_read_unit_system(h_file, ic_units, internal_units, mpi_rank);
 
     if (units_are_equal(ic_units, internal_units)) {
 
diff --git a/src/single_io.c b/src/single_io.c
index 975487a1d954e0144f4675f4b90b7cd3b70f3a13..d019cd1a33646f817676ac9fc7942148b20b6048 100644
--- a/src/single_io.c
+++ b/src/single_io.c
@@ -410,7 +410,7 @@ void read_ic_single(const char* fileName,
   struct unit_system* ic_units =
       (struct unit_system*)malloc(sizeof(struct unit_system));
   if (ic_units == NULL) error("Unable to allocate memory for IC unit system");
-  io_read_unit_system(h_file, ic_units, 0);
+  io_read_unit_system(h_file, ic_units, internal_units, 0);
 
   /* Tell the user if a conversion will be needed */
   if (units_are_equal(ic_units, internal_units)) {
diff --git a/src/units.c b/src/units.c
index 48f0a3aee6e348b5df24ac41b308aebf6f70224a..6d070c9c8ebdf56dff53b9dfeecc73d68fb6b4b6 100644
--- a/src/units.c
+++ b/src/units.c
@@ -128,6 +128,21 @@ void units_init_default(struct unit_system* us, struct swift_params* params,
       parser_get_opt_param_double(params, buffer, def->UnitTemperature_in_cgs);
 }
 
+/**
+ * @brief Copy the content of a #unit_system to another one.
+ *
+ * @param dest The destination of the copy.
+ * @param src The source of the copy.
+ */
+void units_copy(struct unit_system* dest, const struct unit_system* src) {
+
+  dest->UnitMass_in_cgs = src->UnitMass_in_cgs;
+  dest->UnitLength_in_cgs = src->UnitLength_in_cgs;
+  dest->UnitTime_in_cgs = src->UnitTime_in_cgs;
+  dest->UnitCurrent_in_cgs = src->UnitCurrent_in_cgs;
+  dest->UnitTemperature_in_cgs = src->UnitTemperature_in_cgs;
+}
+
 /**
  * @brief Returns the base unit conversion factor for a given unit system
  * @param us The unit_system used
diff --git a/src/units.h b/src/units.h
index 829a1ce542500308cbc64a2463545fbd23921eef..da2c209815b07d1d5597a598ee4a61f3132e39db 100644
--- a/src/units.h
+++ b/src/units.h
@@ -103,6 +103,7 @@ void units_init_from_params(struct unit_system*, struct swift_params*,
 void units_init_default(struct unit_system* us, struct swift_params* params,
                         const char* category, const struct unit_system* def);
 
+void units_copy(struct unit_system* dest, const struct unit_system* src);
 int units_are_equal(const struct unit_system* a, const struct unit_system* b);
 
 /* Base units */