diff --git a/src/serial_io.c b/src/serial_io.c
index 5325d252504d9e85948c9e7c4a4a937d2c087907..c6ef6e8c3e8c558a697477958cadf5adc1e87b2c 100644
--- a/src/serial_io.c
+++ b/src/serial_io.c
@@ -175,9 +175,10 @@ void readArrayBackEnd(hid_t grp, char* name, enum DATA_TYPE type, int N,
 void prepareArray(hid_t grp, char* fileName, FILE* xmfFile, char* name,
                   enum DATA_TYPE type, long long N_total, int dim,
                   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;
   int rank = 0;
   hsize_t shape[2];
+  hsize_t chunk_shape[2];
   char buffer[150];
 
   /* Create data space */
@@ -190,10 +191,14 @@ void prepareArray(hid_t grp, char* fileName, FILE* xmfFile, char* name,
     rank = 2;
     shape[0] = N_total;
     shape[1] = dim;
+    chunk_shape[0] = 1 << 16; /* Just a guess...*/
+    chunk_shape[1] = dim;
   } else {
     rank = 1;
     shape[0] = N_total;
     shape[1] = 0;
+    chunk_shape[0] = 1 << 16; /* Just a guess...*/
+    chunk_shape[1] = 0;
   }
 
   /* Change shape of data space */
@@ -202,8 +207,24 @@ void prepareArray(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 = H5Dcreate(grp, name, hdf5Type(type), h_space, H5P_DEFAULT, 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);
@@ -220,6 +241,7 @@ void prepareArray(hid_t grp, char* fileName, FILE* xmfFile, char* name,
   writeAttribute_f(h_data, "a-scale exponent", aFactor(us, convFactor));
   writeAttribute_s(h_data, "Conversion factor", buffer);
 
+  H5Pclose(h_prop);
   H5Dclose(h_data);
   H5Sclose(h_space);
 }
@@ -612,7 +634,7 @@ void write_output_serial(struct engine* e, struct UnitSystem* us, int mpi_rank,
 
     /* Create SPH particles group */
     /* message("Writing particle arrays..."); */
-    h_grp = H5Gcreate(h_file, "/PartType0", H5P_DEFAULT);
+    h_grp = H5Gcreate(h_file, "/PartType0", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     if (h_grp < 0) error("Error while creating particle group.\n");
 
     /* Close particle group */