private static void generatedConsolidatedAnalysis(final Map<File, AnalysisData> processedWorkflows) throws FactoryConfigurationError, TransformerFactoryConfigurationError {
		// Build consolidated workflow analysis data 
		final AnalysisData consolidatedData = new AnalysisData();
		consolidatedData.name = "Consolidated Analysis";

		final List<AnalysisData.Row> consolidatedRows = new ArrayList<AnalysisData.Row>();
		for (final File processedWorkflowDirectory : processedWorkflows.keySet()) {
			final AnalysisData analysisData = processedWorkflows.get(processedWorkflowDirectory);

			if (consolidatedData.duration == -1) {
				consolidatedData.duration += analysisData.duration;
			} else {
				consolidatedData.duration = (consolidatedData.duration + analysisData.duration) / 2;
			}
			
			if (analysisData.rows != null) {
				for (final AnalysisData.Row analysisRow : analysisData.rows) {
					// Search for already existing consolidated row
					AnalysisData.Row existingConsolidatedRow = null;
					for (final AnalysisData.Row consolidatedRow : consolidatedRows) {
						if (consolidatedRow.name.equals(analysisRow.name)) {
							existingConsolidatedRow = consolidatedRow;
							break;
						}
					}
					if (existingConsolidatedRow == null) {
						existingConsolidatedRow = new AnalysisData.Row();
						existingConsolidatedRow.name = analysisRow.name;
						consolidatedRows.add(existingConsolidatedRow);
					}
					
					existingConsolidatedRow.count += analysisRow.count;
					existingConsolidatedRow.countErrors += analysisRow.countErrors;
					existingConsolidatedRow.countFailures += analysisRow.countFailures;
					
					if (existingConsolidatedRow.min > analysisRow.min) {
						existingConsolidatedRow.min = analysisRow.min;
					}
					if (existingConsolidatedRow.max < analysisRow.max) {
						existingConsolidatedRow.max = analysisRow.max;
					}
					if (existingConsolidatedRow.avg == -1) {
						existingConsolidatedRow.avg = analysisRow.avg;
					} else {
						existingConsolidatedRow.avg =  (existingConsolidatedRow.avg + analysisRow.avg) / 2;
					}
				}	
			}
		}
		consolidatedData.rows = consolidatedRows.toArray(new AnalysisData.Row[consolidatedRows.size()]);
		
		generateXML(consolidatedData, new File("."));
		generateHTML(consolidatedData, new File("."));
	}