diff --git a/src/cell.c b/src/cell.c
index cd2f2d6b86e2301b2e675f442ed9a6790ab223eb..a1360b9d5ef036b6e9481ca9373fde889f3ddbf3 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -53,6 +53,9 @@
 #include "error.h"
 #include "inline.h"
 
+/* Global variables. */
+int cell_next_tag = 0;
+
 
 /**
  * @brief Get the size of the cell subtree.
@@ -178,7 +181,8 @@ int cell_pack ( struct cell *c , struct pcell *pc ) {
     pc->dt_min = c->dt_min;
     pc->dt_max = c->dt_max;
     pc->count = c->count;
-    c->tag = pc->tag = ( ((long long int)c) / sizeof(struct cell) ) % (1 << 30);
+    // c->tag = pc->tag = ( ((long long int)c) / sizeof(struct cell) ) % (1 << 30);
+    c->tag = pc->tag = cell_next_tag++;
     
     /* Fill in the progeny, depth-first recursion. */
     for ( k = 0 ; k < 8 ; k++ )
diff --git a/src/cell.h b/src/cell.h
index 0b4828efbef4e297cb765e98c193bec901e370ce..43dedefbb6c079b726ed1cbb5d4cfe0b39e368a2 100644
--- a/src/cell.h
+++ b/src/cell.h
@@ -21,6 +21,10 @@
 #define cell_sid_dt                 13
 
 
+/* Global variables. */
+extern int cell_next_tag;
+
+
 /* Packed cell. */
 struct pcell {
 
diff --git a/src/engine.c b/src/engine.c
index a6291a0c87b45ceb4ff8db773277ddb9164d5aad..31286005523e810d31d68f6f2b827efa357f5ea6 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -702,6 +702,7 @@ void engine_exchange_cells ( struct engine *e ) {
         error( "Failed to allocate pcell buffer." );
         
     /* Pack the cells. */
+    cell_next_tag = 0;
     for ( k = 0 ; k < nr_cells ; k++ )
         if ( cells[k].sendto ) {
             cell_pack( &cells[k] , &pcells[ offset[k] ] );