private List<Task> createTaskSnapshot() {
		List<Task> taskSnapshot = new ArrayList<Task>();
		List<Task> finishedTasks = new ArrayList<Task>();
		
		for(Task task : runningTaskStats.values()) {
			if(task instanceof MapTask) {
				taskSnapshot.add(new MapTask((MapTask)task));
			} else if(task instanceof ReduceTask) {
				taskSnapshot.add(new ReduceTask((ReduceTask)task));
			}
			
			if(task.getPercentComplete() == 100) {
				finishedTasks.add(task);
			}
			
		}
		
		//cleanup tasks which have finished.
		for(Task task : finishedTasks) {
			runningTaskStats.remove(task.getTaskId());
		}
		
		return taskSnapshot;
	}