diff --git a/scripts/generate_timeline.pl b/scripts/generate_timeline.pl
index bf442ba5c5ec2999f44864e511e94745240bd006..c7ec15901a705fff6334e337ed10de3483348354 100755
--- a/scripts/generate_timeline.pl
+++ b/scripts/generate_timeline.pl
@@ -152,31 +152,33 @@ sub main {
     # Get the events from the database
     my %events = ();
     {
-        my @tmp_dates = @{$dbh->selectall_arrayref('SELECT DATE_FORMAT(born, "%Y-%m-%dT%T"), analysis_id, meadow_name, process_id, resource_class_id, 1 FROM worker WHERE analysis_id IS NOT NULL')};
-        push @tmp_dates, @{$dbh->selectall_arrayref('SELECT DATE_FORMAT(died, "%Y-%m-%dT%T"), analysis_id, meadow_name, process_id, resource_class_id, -1 FROM worker WHERE analysis_id IS NOT NULL')};
+        my @tmp_dates = @{$dbh->selectall_arrayref('SELECT DATE_FORMAT(born, "%Y-%m-%dT%T"), DATE_FORMAT(died, "%Y-%m-%dT%T"), analysis_id, meadow_name, process_id, resource_class_id FROM worker WHERE analysis_id IS NOT NULL')};
         warn scalar(@tmp_dates), " events\n" if $verbose;
 
         foreach my $db_entry (@tmp_dates) {
-            my ($event_date, $analysis_id, $meadow_name, $process_id, $resource_class_id, $offset) = @$db_entry;
+            my ($birth_date, $death_date, $analysis_id, $meadow_name, $process_id, $resource_class_id) = @$db_entry;
             $resource_class_id = $default_resource_class{$analysis_id} unless $resource_class_id;
+            my $offset = 0;
+
             if ($mode eq 'workers') {
-                $events{$event_date}{$analysis_id} += $offset;
+                $offset = 1;
             } elsif ($mode eq 'memory') {
-                $events{$event_date}{$analysis_id} += $offset * ($mem_resources{$resource_class_id} || $default_memory) / 1024.;
+                $offset = ($mem_resources{$resource_class_id} || $default_memory) / 1024.;
             } elsif ($mode eq 'cores') {
-                $events{$event_date}{$analysis_id} += $offset * ($cpu_resources{$resource_class_id} || $default_cores);
+                $offset = ($cpu_resources{$resource_class_id} || $default_cores);
             } elsif ($mode eq 'unused_memory') {
                 my $process_signature = $meadow_name."_____".$process_id;
                 if (exists $used_res{$process_signature}) {
-                    $events{$event_date}{$analysis_id} += $offset * (($mem_resources{$resource_class_id} || $default_memory) - $used_res{$process_signature}->[0]) / 1024.;
+                    $offset = (($mem_resources{$resource_class_id} || $default_memory) - $used_res{$process_signature}->[0]) / 1024.;
                 }
             } else {
                 my $process_signature = $meadow_name."_____".$process_id;
                 if (exists $used_res{$process_signature}) {
-                    my $unused_cores = ($cpu_resources{$resource_class_id} || $default_cores) - $used_res{$process_signature}->[1];
-                    $events{$event_date}{$analysis_id} += $offset * $unused_cores if $unused_cores > 0;
+                    $offset = ($cpu_resources{$resource_class_id} || $default_cores) - $used_res{$process_signature}->[1];
                 }
             }
+            $events{$birth_date}{$analysis_id} += $offset if $offset > 0;
+            $events{$death_date}{$analysis_id} -= $offset if $offset > 0;
         }
     }
     my @event_dates = sort {$a cmp $b} (keys %events);