diff --git a/examples/main.c b/examples/main.c
index 15e8d78fcdeddd8f09bf3b5645405d58b2883539..fe2cda57e5f8523ecf894cb5e4008c3778ff60ef 100644
--- a/examples/main.c
+++ b/examples/main.c
@@ -416,6 +416,7 @@ int main(int argc, char *argv[]) {
     sparts = NULL;
     for (size_t k = 0; k < Nspart; ++k)
       if (gparts[k].type == swift_type_star) error("Linking problem");
+    Nspart = 0;
   }
   if (!with_hydro) {
     free(parts);
diff --git a/src/common_io.c b/src/common_io.c
index b74d056e98c6bf02bdac80fca1cdab3e9355bde5..82c00cf5bed7118276e0595e3d9c590d29bdda74 100644
--- a/src/common_io.c
+++ b/src/common_io.c
@@ -590,7 +590,7 @@ void prepare_dm_gparts(struct gpart* const gparts, size_t Ndm) {
             gparts[i].id_or_neg_offset);
 
     /* Set gpart type */
-    gparts[i + Ndm].type = swift_type_dark_matter;
+    gparts[i].type = swift_type_dark_matter;
   }
 }
 
@@ -690,7 +690,7 @@ void collect_dm_gparts(const struct gpart* const gparts, size_t Ntot,
      * gparts[i].part); */
 
     /* And collect the DM ones */
-    if (gparts[i].id_or_neg_offset > 0) {
+    if (gparts[i].type == swift_type_dark_matter) {
       dmparts[count] = gparts[i];
       count++;
     }