diff --git a/examples/test.c b/examples/test.c
index 8be5f449f628af6d210a6c24750715a50a2baf1c..0c0cfc9fafef044325078b222936a88cc12ec19b 100644
--- a/examples/test.c
+++ b/examples/test.c
@@ -48,7 +48,7 @@
 
 /* Ticks per second on this machine. */
 #ifndef CPU_TPS
-    #define CPU_TPS 2.67e9
+    #define CPU_TPS 2.40e9
 #endif
 
 /* Engine policy flags. */
@@ -305,60 +305,6 @@ void read_coords ( char *fname , struct part *parts , int N ) {
     }
 
 
-/**
- * @brief Read cutoffs from a text file.
- *
- * @param fname The name of the cutoffs file.
- * @param parts An array of #part in which to store the cutoffs.
- * @param N The number of parts to read.
- */
- 
-void read_cutoffs ( char *fname , struct part *parts , int N ) {
-
-#ifdef HAVE_LIBZ
-    gzFile fd;
-    char buff[1024];
-    int k;
-    
-    /* Open the given file. */
-    if ( ( fd = gzopen( fname , "r" ) ) == NULL )
-        error( "Failed to open cutoff file" );
-        
-    /* Read the coordinates into the part positions. */
-    for ( k = 0 ; k < N ; k++ ) {
-        if ( gzgets( fd , buff , 1024 ) == NULL )
-            error( "Error reading cutoff file." );
-        if ( sscanf( buff , "%ef" , &parts[k].h ) != 1 ) {
-            printf( "read_cutoffs: failed to parse %ith entry.\n" , k );
-            error( "Error parsing cutoff file." );
-            }
-        }
-        
-    /* Wrap it up. */
-    gzclose( fd );
-#else
-    FILE *fd;
-    int k;
-    
-    /* Open the given file. */
-    if ( ( fd = fopen( fname , "r" ) ) == NULL )
-        error( "Failed to open cutoff file" );
-        
-    /* Read the coordinates into the part positions. */
-    for ( k = 0 ; k < N ; k++ ) {
-        if ( fscanf( fd , "%ef" , &parts[k].h ) != 1 ) {
-            printf( "read_cutoffs: failed to read %ith entry.\n" , k );
-            error( "Error reading cutoff file." );
-            }
-        }
-        
-    /* Wrap it up. */
-    fclose( fd );
-#endif
-
-    }
-    
-    
 /**
  * @brief Read id from a text file.
  *
@@ -413,56 +359,6 @@ void read_id ( char *fname , struct part *parts , int N ) {
     }
     
     
-/**
- * @brief Read dt from a text file.
- *
- * @param fname The name of the dt file.
- * @param parts An array of #part in which to store the dt.
- * @param N The number of parts to read.
- */
- 
-void read_dt ( char *fname , struct part *parts , int N ) {
-
-#ifdef HAVE_LIBZ
-    gzFile fd;
-    char buff[1024];
-    int k;
-    
-    /* Open the given file. */
-    if ( ( fd = gzopen( fname , "r" ) ) == NULL )
-        error( "Failed to open dt file" );
-        
-    /* Read the coordinates into the part positions. */
-    for ( k = 0 ; k < N ; k++ ) {
-        if ( gzgets( fd , buff , 1024 ) == NULL )
-            error( "Error reading id file." );
-        if ( sscanf( buff , "%f" , &parts[k].dt ) != 1 )
-            error( "Error parsing dt file." );
-        }
-        
-    /* Wrap it up. */
-    gzclose( fd );
-#else
-    FILE *fd;
-    int k;
-    
-    /* Open the given file. */
-    if ( ( fd = fopen( fname , "r" ) ) == NULL )
-        error( "Failed to open dt file" );
-        
-    /* Read the coordinates into the part positions. */
-    for ( k = 0 ; k < N ; k++ ) {
-        if ( fscanf( fd , "%ef" , &parts[k].dt ) != 1 )
-            error( "Error reading dt file." );
-        }
-
-    /* Wrap it up. */
-    fclose( fd );
-#endif
-
-    }
-    
-    
 /**
  * @brief Compute the average number of pairs per particle using
  *      a brute-force O(N^2) computation.
@@ -705,7 +601,7 @@ void density_dump ( int N ) {
  
 int main ( int argc , char *argv[] ) {
 
-    int c, icount, j, k, N = 100, periodic = 1;
+    int c, icount, j, k, N = -1, periodic = 1;
     int nr_threads = 1, nr_queues = -1, runs = INT_MAX;
     int data[2];
     double dim[3] = { 1.0 , 1.0 , 1.0 }, shift[3] = { 0.0 , 0.0 , 0.0 };
@@ -721,7 +617,7 @@ int main ( int argc , char *argv[] ) {
     int nr_nodes = 1, myrank = 0, grid[3] = { 1 , 1 , 1 };
     
     /* Choke on FP-exceptions. */
-    feenableexcept( FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW );
+    // feenableexcept( FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW );
     
 #ifdef WITH_MPI
     /* Start by initializing MPI. */
@@ -770,8 +666,8 @@ int main ( int argc , char *argv[] ) {
 	case 'f':
 	  if( !strcpy(ICfileName, optarg))
 	    error("Error parsing IC file name.");
-	  if ( myrank == 0 )
-        message("IC to be read from file '%s'.", ICfileName);
+	  // if ( myrank == 0 )
+        // message("IC to be read from file '%s'.", ICfileName);
 	  break;
 	case 'g':
 	  if ( sscanf( optarg , "%i %i %i" , &grid[0] , &grid[1] , &grid[2] ) != 3 )
@@ -863,6 +759,32 @@ int main ( int argc , char *argv[] ) {
 	    parts[k].x[2] += shift[2];
       }
 
+    /* printParticle( parts , 10312237508790 , N );
+    printParticle( parts , 10312286091950 , N ); */
+    /* for ( k = 0 ; k < N ; k++ )
+	if ( parts[k].id == 10312286091950 ||
+	     parts[k].id == 10286889371446  ||
+	     parts[k].id == 9536045071298 ||
+	     parts[k].id == 12726778692106  ||
+	     parts[k].id == 9479892852626  ||
+	     parts[k].id == 9535843125514  ||
+	     parts[k].id == 14151507889834  ||
+	     parts[k].id == 14144038209438  ||
+	     parts[k].id == 14121890205050  ||
+	     parts[k].id == 5868762382714  ||
+	     parts[k].id == 12840527117206 ||
+	     parts[k].id == 10292087642778  ||
+	     parts[k].id == 9465178320650  ||
+	     parts[k].id == 2834846537770  ||
+	     parts[k].id == 9483000048314  ||
+	     parts[k].id == 10247332828902  ||
+	     parts[k].id == 10223834653674  ||
+	     parts[k].id == 16719632108962  ||
+	     parts[k].id == 16759192850622  ||
+	     parts[k].id == 9483599082554  ||
+	     parts[k].id == 10247340329226 )
+            parts[k] = parts[--N]; */
+
     /* Set default number of queues. */
     if ( nr_queues < 0 )
         nr_queues = nr_threads;
@@ -906,14 +828,13 @@ int main ( int argc , char *argv[] ) {
     
     /* Initialize the engine with this space. */
     tic = getticks();
+    message( "nr_nodes is %i." , nr_nodes );
     engine_init( &e , &s , dt_max , nr_threads , nr_queues , nr_nodes , myrank , ENGINE_POLICY | engine_policy_steal );
     if ( myrank == 0 )
         message( "engine_init took %.3f ms." , ((double)(getticks() - tic)) / CPU_TPS * 1000 ); fflush(stdout);
 
 #ifdef WITH_MPI
     /* Split the space. */
-    if ( nr_nodes != grid[0]*grid[1]*grid[2] )
-        error( "Grid size does not match number of nodes." );
     engine_split( &e , grid );
     printParticle( s.parts , 5665430362989 , s.nr_parts );
     engine_redistribute ( &e );
@@ -989,7 +910,7 @@ int main ( int argc , char *argv[] ) {
                 printf( " %.3f" , ((double)timers[k])/CPU_TPS*1000 );
             printf( "\n" ); fflush(stdout);
             }
-        
+
         }
         
     /* Print the values of the runner histogram. */
@@ -1001,19 +922,39 @@ int main ( int argc , char *argv[] ) {
                 runner_hist_a + (k + 1) * (runner_hist_b - runner_hist_a) / runner_hist_N ,
                 (double)runner_hist_bins[k] );
     #endif
+
+    // write_output( &e );
         
     /* Loop over the parts directly. */
     // for ( k = 0 ; k < N ; k++ )
     //     printf( " %i %e %e\n" , s.parts[k].id , s.parts[k].count , s.parts[k].count_dh );
     
     /* Dump the task data. */
-    /* for ( k = 0 ; k < e.sched.nr_tasks ; k++ )
+    /* #ifdef WITH_MPI
+    for ( j = 0 ; j < nr_nodes ; j++ ) {
+    MPI_Barrier( MPI_COMM_WORLD );
+    if ( j == myrank ) {
+    printf( " %03i 0 0 0 0 %lli 0 0 0 0\n" , myrank , e.tic_step );
+    for ( k = 0 ; k < e.sched.nr_tasks ; k++ )
+        if ( !e.sched.tasks[k].skip && !e.sched.tasks[k].implicit )
+            printf( " %03i %i %i %i %i %lli %lli %i %i %i\n" ,
+                myrank ,
+                e.sched.tasks[k].rid , e.sched.tasks[k].type , e.sched.tasks[k].subtype ,
+                (e.sched.tasks[k].cj == NULL) , e.sched.tasks[k].tic , e.sched.tasks[k].toc ,
+		e.sched.tasks[k].ci->count , (e.sched.tasks[k].cj!=NULL)?e.sched.tasks[k].cj->count:0 , e.sched.tasks[k].flags); 
+    fflush(stdout);
+    sleep(1);
+    }
+    }
+    #else
+    for ( k = 0 ; k < e.sched.nr_tasks ; k++ )
         if ( !e.sched.tasks[k].skip && !e.sched.tasks[k].implicit )
-            printf( " %i %i %i %i %lli %lli %i %i\n" ,
+                printf( " %i %i %i %i %lli %lli %i %i\n" ,
                 e.sched.tasks[k].rid , e.sched.tasks[k].type , e.sched.tasks[k].subtype , 
                 (e.sched.tasks[k].cj == NULL) , e.sched.tasks[k].tic , e.sched.tasks[k].toc ,
                 e.sched.tasks[k].ci->count , 
-                (e.sched.tasks[k].cj==NULL)?0:e.sched.tasks[k].cj->count ); */
+                (e.sched.tasks[k].cj==NULL)?0:e.sched.tasks[k].cj->count ); 
+    #endif */
     
     /* Write final output. */
 #ifdef WITH_MPI