diff --git a/src/engine.c b/src/engine.c
index c27f7e63e9db2a29f3ab09f1b051d280eead8491..1f4a05f08971ea9905ce8b7dec58690b5784a569 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -1470,7 +1470,7 @@ void engine_exchange_cells(struct engine *e) {
   MPI_Request reqs_in[engine_maxproxies];
   MPI_Request reqs_out[engine_maxproxies];
   MPI_Status status;
-  ticks tic = getticks();
+  const ticks tic = getticks();
 
   /* Run through the cells and get the size of the ones that will be sent off.
    */
@@ -1543,8 +1543,10 @@ void engine_exchange_cells(struct engine *e) {
   size_t count_parts_in = 0, count_gparts_in = 0, count_sparts_in = 0;
   for (int k = 0; k < nr_proxies; k++)
     for (int j = 0; j < e->proxies[k].nr_cells_in; j++) {
-      count_parts_in += e->proxies[k].cells_in[j]->count;
-      count_gparts_in += e->proxies[k].cells_in[j]->gcount;
+      if(e->proxies[k].cells_in_type[j] & proxy_cell_type_hydro) 
+	count_parts_in += e->proxies[k].cells_in[j]->count;
+      if(e->proxies[k].cells_in_type[j] & proxy_cell_type_gravity) 
+	count_gparts_in += e->proxies[k].cells_in[j]->gcount;
       count_sparts_in += e->proxies[k].cells_in[j]->scount;
     }
   if (count_parts_in > s->size_parts_foreign) {
@@ -1575,11 +1577,18 @@ void engine_exchange_cells(struct engine *e) {
   struct spart *sparts = s->sparts_foreign;
   for (int k = 0; k < nr_proxies; k++) {
     for (int j = 0; j < e->proxies[k].nr_cells_in; j++) {
-      cell_link_parts(e->proxies[k].cells_in[j], parts);
-      cell_link_gparts(e->proxies[k].cells_in[j], gparts);
+      
+      if(e->proxies[k].cells_in_type[j] & proxy_cell_type_hydro) {
+	cell_link_parts(e->proxies[k].cells_in[j], parts);
+	parts = &parts[e->proxies[k].cells_in[j]->count];
+      }
+
+      if(e->proxies[k].cells_in_type[j] & proxy_cell_type_gravity) {
+	cell_link_gparts(e->proxies[k].cells_in[j], gparts);
+	gparts = &gparts[e->proxies[k].cells_in[j]->gcount];
+      }
+
       cell_link_sparts(e->proxies[k].cells_in[j], sparts);
-      parts = &parts[e->proxies[k].cells_in[j]->count];
-      gparts = &gparts[e->proxies[k].cells_in[j]->gcount];
       sparts = &sparts[e->proxies[k].cells_in[j]->scount];
     }
   }