diff --git a/src/single_io.c b/src/single_io.c
index b0e350ffe2e2f7ff077c29dd0b581c9c3c555822..ee080c7836ba0a25afc935bf031ea1351e57179f 100644
--- a/src/single_io.c
+++ b/src/single_io.c
@@ -94,7 +94,7 @@ void readArrayBackEnd(hid_t grp, char* name, enum DATA_TYPE type, int N,
    * "compulsory": "optional  ", name); */
 
   /* Open data space */
-  h_data = H5Dopen1(grp, name);
+  h_data = H5Dopen(grp, name, H5P_DEFAULT);
   if (h_data < 0) {
     error("Error while opening data space '%s'.", name);
   }
@@ -157,7 +157,7 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name,
                        enum DATA_TYPE type, int N, int dim, char* part_c,
                        struct UnitSystem* us,
                        enum UnitConversionFactor convFactor) {
-  hid_t h_data = 0, h_err = 0, h_space = 0;
+  hid_t h_data = 0, h_err = 0, h_space = 0, h_prop = 0;
   void* temp = 0;
   int i = 0, rank = 0;
   const size_t typeSize = sizeOfType(type);
@@ -165,9 +165,10 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name,
   const size_t partSize = sizeof(struct part);
   char* temp_c = 0;
   hsize_t shape[2];
+  hsize_t chunk_shape[2];
   char buffer[150];
 
-  /* message("Writing '%s' array...", name); */
+  message("Writing '%s' array...", name);
 
   /* Allocate temporary buffer */
   temp = malloc(N * dim * sizeOfType(type));
@@ -188,10 +189,14 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name,
     rank = 2;
     shape[0] = N;
     shape[1] = dim;
+    chunk_shape[0] = 1 << 16; /* Just a guess...*/
+    chunk_shape[1] = dim;
   } else {
     rank = 1;
     shape[0] = N;
     shape[1] = 0;
+    chunk_shape[0] = 1 << 16; /* Just a guess...*/
+    chunk_shape[1] = 0;
   }
 
   /* Change shape of data space */
@@ -200,8 +205,25 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name,
     error("Error while changing data space shape for field '%s'.", name);
   }
 
+  /* Dataset properties */
+  h_prop = H5Pcreate(H5P_DATASET_CREATE);
+
+  /* Set chunk size */
+  h_err = H5Pset_chunk(h_prop, rank, chunk_shape);
+  if (h_err < 0) {
+    error("Error while setting chunk size (%lld, %lld) for field '%s'.",
+          chunk_shape[0], chunk_shape[1], name);
+  }
+
+  /* Impose data compression */
+  h_err = H5Pset_deflate(h_prop, 4);
+  if (h_err < 0) {
+    error("Error while setting compression options for field '%s'.", name);
+  }
+
   /* Create dataset */
-  h_data = H5Dcreate1(grp, name, hdf5Type(type), h_space, H5P_DEFAULT);
+  h_data = H5Dcreate(grp, name, hdf5Type(type), h_space, H5P_DEFAULT, h_prop,
+                     H5P_DEFAULT);
   if (h_data < 0) {
     error("Error while creating dataspace '%s'.", name);
   }
@@ -225,6 +247,7 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name,
 
   /* Free and close everything */
   free(temp);
+  H5Pclose(h_prop);
   H5Dclose(h_data);
   H5Sclose(h_space);
 }
@@ -313,7 +336,7 @@ void read_ic_single(char* fileName, double dim[3], struct part** parts, int* N,
 
   /* Open header to read simulation properties */
   /* message("Reading runtime parameters..."); */
-  h_grp = H5Gopen1(h_file, "/RuntimePars");
+  h_grp = H5Gopen(h_file, "/RuntimePars", H5P_DEFAULT);
   if (h_grp < 0) error("Error while opening runtime parameters\n");
 
   /* Read the relevant information */
@@ -324,7 +347,7 @@ void read_ic_single(char* fileName, double dim[3], struct part** parts, int* N,
 
   /* Open header to read simulation properties */
   /* message("Reading file header..."); */
-  h_grp = H5Gopen1(h_file, "/Header");
+  h_grp = H5Gopen(h_file, "/Header", H5P_DEFAULT);
   if (h_grp < 0) error("Error while opening file header\n");
 
   /* Read the relevant information and print status */
@@ -352,7 +375,7 @@ void read_ic_single(char* fileName, double dim[3], struct part** parts, int* N,
 
   /* Open SPH particles group */
   /* message("Reading particle arrays..."); */
-  h_grp = H5Gopen1(h_file, "/PartType0");
+  h_grp = H5Gopen(h_file, "/PartType0", H5P_DEFAULT);
   if (h_grp < 0) error("Error while opening particle group.\n");
 
   /* Read particle fields into the particle structure */
@@ -415,7 +438,8 @@ void write_output_single(struct engine* e, struct UnitSystem* us) {
 
   /* Open header to write simulation properties */
   /* message("Writing runtime parameters..."); */
-  h_grp = H5Gcreate1(h_file, "/RuntimePars", 0);
+  h_grp =
+      H5Gcreate(h_file, "/RuntimePars", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   if (h_grp < 0) error("Error while creating runtime parameters group\n");
 
   /* Write the relevant information */
@@ -426,7 +450,7 @@ void write_output_single(struct engine* e, struct UnitSystem* us) {
 
   /* Open header to write simulation properties */
   /* message("Writing file header..."); */
-  h_grp = H5Gcreate1(h_file, "/Header", 0);
+  h_grp = H5Gcreate(h_file, "/Header", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   if (h_grp < 0) error("Error while creating file header\n");
 
   /* Print the relevant information and print status */
@@ -451,7 +475,7 @@ void write_output_single(struct engine* e, struct UnitSystem* us) {
   writeCodeDescription(h_file);
 
   /* Print the SPH parameters */
-  h_grpsph = H5Gcreate1(h_file, "/SPH", 0);
+  h_grpsph = H5Gcreate(h_file, "/SPH", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   if (h_grpsph < 0) error("Error while creating SPH group");
   writeSPHflavour(h_grpsph);
   H5Gclose(h_grpsph);
@@ -461,7 +485,8 @@ void write_output_single(struct engine* e, struct UnitSystem* us) {
 
   /* Create SPH particles group */
   /* message("Writing particle arrays..."); */
-  h_grp = H5Gcreate1(h_file, "/PartType0", 0);
+  h_grp =
+      H5Gcreate(h_file, "/PartType0", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   if (h_grp < 0) error("Error while creating particle group.\n");
 
   /* Write particle fields from the particle structure */