diff --git a/src/part.c b/src/part.c
index 6a99325ef23a7062fafb387fa3f3bd6b2203d057..00b90d99f94ebdcc1a3b9184c7513f9e52644d3e 100644
--- a/src/part.c
+++ b/src/part.c
@@ -28,6 +28,34 @@
 /* This object's header. */
 #include "part.h"
 
+/**
+ * @brief Re-link the #gparts associated with the list of #parts.
+ *
+ * @param parts The list of #part.
+ * @param N The number of particles to re-link;
+ * @param offset The offset of #parts relative to the global parts list.
+ */
+void part_relink_gparts(struct part *parts, size_t N, ptrdiff_t offset) {
+  for (size_t k = 0; k < N; k++) {
+    parts[k]->gpart->id_or_neg_offset = -(k + offset);
+  }
+}
+
+/**
+ * @brief Re-link the #gparts associated with the list of #parts.
+ *
+ * @param gparts The list of #gpart.
+ * @param N The number of particles to re-link;
+ * @param parts The global part array in which to find the #gpart offsets.
+ */
+void part_relink_parts(struct gpart *gparts, size_t N, struct part *parts) {
+  for (size_t k = 0; k < N; k++) {
+    if (gparts[k].id_or_neg_offset < 0) {
+      parts[-gparts[k].id_or_neg_offset].gpart = &gparts[k];
+    }
+  }
+}
+
 #ifdef WITH_MPI
 /**
  * @brief Registers and returns an MPI type for the particles
diff --git a/src/part.h b/src/part.h
index 865403e8c2c157dc5a8ff7a32bc41be676d7919b..7cd74fada98855c82addf844bff6ee72ce5429ce 100644
--- a/src/part.h
+++ b/src/part.h
@@ -51,6 +51,8 @@
 
 #include "./gravity/Default/gravity_part.h"
 
+void part_relink_gparts(struct parts *parts, size_t N, ptrdiff_t offset);
+void part_relink_parts(struct gparts *parts, size_t N);
 #ifdef WITH_MPI
 void part_create_mpi_type(MPI_Datatype* part_type);
 void xpart_create_mpi_type(MPI_Datatype* xpart_type);