diff --git a/theory/mkplots_tasks.m b/theory/mkplots_tasks.m
new file mode 100644
index 0000000000000000000000000000000000000000..202b0ee6d65fd03bad610adf93b284ff83268f31
--- /dev/null
+++ b/theory/mkplots_tasks.m
@@ -0,0 +1,180 @@
+
+%% Some global stuff
+tpms = 1/2.4e6;
+ms_max = 82;
+
+%% Plot the task timelines for tasks allocation
+% Load the data
+tasks = importdata( 'SedovBlast_fixed_16.dump' );
+tasks(:,6) = ( tasks(:,6) - tasks(:,5) ) * tpms;
+start = min( tasks(:,5) );
+tasks(:,5) = ( tasks(:,5) - start ) * tpms;
+% for k=0:max(tasks(:,1))
+%     temp = tasks( tasks(:,1)==k , : );
+%     start = min( temp(:,5) );
+%     temp(:,5) = ( temp(:,5) - start ) * tpms;
+%     tasks( tasks(:,1)==k , :) = temp;
+% end
+tasks_sorts = tasks( tasks(:,2)==1 , : );
+tasks_pairs = tasks( tasks(:,2)==3 | ( tasks(:,2)==4 & tasks(:,4)==0 ) , : );
+tasks_selfs = tasks( tasks(:,2)==2 | ( tasks(:,2)==4 & tasks(:,4)==1 ) , : );
+tasks_ghosts = tasks( tasks(:,2)==5 , : );
+tasks_kick2s = tasks( tasks(:,2)==6 , : );
+nr_cores = max( tasks(:,1) ) + 1;
+
+% Init the plot
+clf;
+subplot('position',[ 0.05 , 0.1 , 0.9 , 0.8 ]);
+hold on;
+
+% Plot the pairs
+for k=1:size(tasks_pairs,1)
+    rectangle( 'Position' , [ tasks_pairs(k,5) , tasks_pairs(k,1)+0.5 , tasks_pairs(k,6) , 1 ] , ...
+        'EdgeColor' , [ 0 0.8 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 0 1 0 ] );
+end
+
+% Plot the selfs
+for k=1:size(tasks_selfs,1)
+    rectangle( 'Position' , [ tasks_selfs(k,5) , tasks_selfs(k,1)+0.5 , tasks_selfs(k,6) , 1 ] , ...
+        'EdgeColor' , [ 0 0 0.8 ] , 'LineWidth' , 1 , 'FaceColor' , [ 0 0 1 ] );
+end
+
+% Plot the sorts
+for k=1:size(tasks_sorts,1)
+    rectangle( 'Position' , [ tasks_sorts(k,5) , tasks_sorts(k,1)+0.5 , tasks_sorts(k,6) , 1 ] , ...
+        'EdgeColor' , [ 0.8 0 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 1 0 0 ] );
+end
+
+% Plot the ghosts
+for k=1:size(tasks_ghosts,1)
+    rectangle( 'Position' , [ tasks_ghosts(k,5) , tasks_ghosts(k,1)+0.5 , tasks_ghosts(k,6) , 1 ] , ...
+        'EdgeColor' , [ 0.9 0.9 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 1 1 0 ] );
+end
+
+% Plot the kick2s
+for k=1:size(tasks_kick2s,1)
+    rectangle( 'Position' , [ tasks_kick2s(k,5) , tasks_kick2s(k,1)+0.5 , tasks_kick2s(k,6) , 1 ] , ...
+        'EdgeColor' , [ 1 0.5 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 1 0.5 0 ] );
+end
+
+% Set the axes and stuff.
+hold off;
+xlabel('time (ms)');
+ylabel('core ID');
+set(gca,'YTick',1:(max(tasks(:,1))+1))
+title('SWIFT tasks');
+axis([ 0 , ms_max , 0.5 , max(tasks(:,1))+1.5 ]);
+
+% Print this plot
+set( gcf , 'PaperSize' , 2.3*[ 16 4 ] );
+set( gcf , 'PaperPosition' , 2.3*[ 0.25 0.25 16 4 ] );
+print -depsc2 tasks_dynamic.eps
+!epstopdf tasks_dynamic.eps 
+
+
+
+%% Make a fake task ordering a la OpenMP.
+
+% Init the core timers
+timers = zeros( nr_cores , 1 );
+for k=1:nr_cores
+    timers(k) = min( tasks( tasks(:,1)==k , 5 ) );
+end;
+delta = 0.0035;
+
+% Loop through the sort tasks and put them at the front of the shortest queue
+for k=1:size(tasks,1)
+    if ( tasks(k,2)==1 )
+        [ tic, ind ] = min( timers );
+        tasks(k,5) = tic;
+        tasks(k,1) = ind-1;
+        timers(ind) = timers(ind) + tasks(k,6) + delta;
+    end
+end
+
+% Re-set the timers
+timers = ones( nr_cores , 1 ) * max( timers );
+
+% Loop through the self density tasks and put them at the front of the shortest queue
+for k=1:size(tasks,1)
+    if tasks(k,2)==2 && tasks(k,3)==1
+        [ tic, ind ] = min( timers );
+        tasks(k,5) = tic;
+        tasks(k,1) = ind-1;
+        timers(ind) = timers(ind) + tasks(k,6) + delta;
+    end
+end
+
+% Re-set the timers
+timers = ones( nr_cores , 1 ) * max( timers );
+
+% Loop through the pair density tasks and put them at the front of the shortest queue
+for k=1:size(tasks,1)
+    if tasks(k,2)==3 && tasks(k,3)==1
+        [ tic, ind ] = min( timers );
+        tasks(k,5) = tic;
+        tasks(k,1) = ind-1;
+        timers(ind) = timers(ind) + tasks(k,6) + delta;
+    end
+end
+
+% Re-set the timers
+timers = ones( nr_cores , 1 ) * max( timers );
+
+% Loop through the ghost tasks and put them at the front of the shortest queue
+for k=1:size(tasks,1)
+    if tasks(k,2)==5
+        [ tic, ind ] = min( timers );
+        tasks(k,5) = tic;
+        tasks(k,1) = ind-1;
+        timers(ind) = timers(ind) + tasks(k,6) + delta;
+    end
+end
+
+% Re-set the timers
+timers = ones( nr_cores , 1 ) * max( timers );
+
+% Loop through the self force tasks and put them at the front of the shortest queue
+for k=1:size(tasks,1)
+    if tasks(k,2)==2 && tasks(k,3)==2
+        [ tic, ind ] = min( timers );
+        tasks(k,5) = tic;
+        tasks(k,1) = ind-1;
+        timers(ind) = timers(ind) + tasks(k,6) + delta;
+    end
+end
+
+% Re-set the timers
+timers = ones( nr_cores , 1 ) * max( timers );
+
+% Loop through the pair force tasks and put them at the front of the shortest queue
+for k=1:size(tasks,1)
+    if tasks(k,2)==3 && tasks(k,3)==2
+        [ tic, ind ] = min( timers );
+        tasks(k,5) = tic;
+        tasks(k,1) = ind-1;
+        timers(ind) = timers(ind) + tasks(k,6) + delta;
+    end
+end
+
+% Re-set the timers
+timers = ones( nr_cores , 1 ) * max( timers );
+
+% Loop through the kick tasks and put them at the front of the shortest queue
+for k=1:size(tasks,1)
+    if tasks(k,2)==6
+        [ tic, ind ] = min( timers );
+        tasks(k,5) = tic;
+        tasks(k,1) = ind-1;
+        timers(ind) = timers(ind) + tasks(k,6) + delta;
+    end
+end
+
+
+
+% Print this plot
+set( gcf , 'PaperSize' , 2.3*[ 20 4 ] );
+set( gcf , 'PaperPosition' , 2.3*[ 0.25 0.25 20 4 ] );
+print -depsc2 tasks_static.eps
+!epstopdf tasks_static.eps 
+