diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
index 9f61ac1..683a105 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
@@ -395,14 +395,14 @@
 		 * @param rollupStats
 		 */
 		public ProcessSelection(Object object, String splitOption, String filterOption, HashSet<EClass> theSections,
-				HashMap<EClass, HashSet<EClass>> theSectionCache, SXSSFWorkbook rollupStats) {
+				HashMap<EClass, HashSet<EClass>> theSectionCache) {
 			super();
 			this.object = object;
 			this.splitOption = splitOption;
 			this.filterOption = filterOption;
 			this.theSections = theSections;
 			this.theSectionCache = theSectionCache;
-			this.rollupStats = rollupStats;
+			// this.rollupStats = rollupStats;
 		}
 
 		public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
@@ -415,14 +415,44 @@
 					IFolder folder = (IFolder) object;
 					codeMetricsFile = folder.getFile("codemetrics.cfg");
 					monitor.beginTask("Generate Spreadsheet", folder.members().length);
+
+					final SXSSFWorkbook rollupStats = new SXSSFWorkbook(10);
 					processSelection(folder, null, monitor, splitOption, theSections, theSectionCache, rollupStats);
+
+					final StringBuffer fileLocation = new StringBuffer();
+					fileLocation.append(
+						folder.getParent().getLocation().toOSString() + System.getProperty("file.separator") +
+								CDAValueUtil.DATE_FORMAT3.format(new Date()) + "_" + folder.getName() + "_" +
+								"RollupStatistics.xlsx");
+
+					try (OutputStream fileOut = Files.newOutputStream(Paths.get(fileLocation.toString()))) {
+						rollupStats.write(fileOut);
+						fileOut.close();
+						rollupStats.close();
+						rollupStats.dispose();
+					}
 				}
 
 				if (object instanceof IFile) {
 					IFile zipFile = (IFile) object;
 
+					final SXSSFWorkbook rollupStats = new SXSSFWorkbook(10);
 					processSelection(null, zipFile, monitor, splitOption, theSections, theSectionCache, rollupStats);
 
+					final StringBuffer fileLocation = new StringBuffer();
+					fileLocation.append(
+						zipFile.getParent().getLocation().toOSString() + System.getProperty("file.separator") +
+								CDAValueUtil.DATE_FORMAT3.format(new Date()) + "_" +
+								FilenameUtils.getBaseName(zipFile.getName()).toUpperCase() + "_" +
+								"RollupStatistics.xlsx");
+
+					try (OutputStream fileOut = Files.newOutputStream(Paths.get(fileLocation.toString()))) {
+						rollupStats.write(fileOut);
+						fileOut.close();
+						rollupStats.close();
+						rollupStats.dispose();
+					}
+
 				}
 			} catch (Exception e) {
 				ILog log = Activator.getDefault().getLog();
@@ -457,7 +487,7 @@
 
 		final HashMap<EClass, HashSet<EClass>> theSectionCache = new HashMap<EClass, HashSet<EClass>>();
 
-		final SXSSFWorkbook rollupStats = new SXSSFWorkbook(10);
+		// final SXSSFWorkbook rollupStats = new SXSSFWorkbook(10);
 
 		if (filterOption != null) {
 
@@ -571,8 +601,8 @@
 										resource.getParent().getName() + "_" + "RollupStatistics.xlsx");
 						}
 						pd.run(
-							true, true, new ProcessSelection(
-								element, splitOption, filterOption, theSections, theSectionCache, rollupStats));
+							true, true,
+							new ProcessSelection(element, splitOption, filterOption, theSections, theSectionCache));
 					} catch (Throwable e) {
 						ILog log = Activator.getDefault().getLog();
 						log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error generating report", e));
@@ -590,6 +620,8 @@
 
 				final IStructuredSelection iss = (IStructuredSelection) selection;
 
+				final SXSSFWorkbook rollupStats = new SXSSFWorkbook(10);
+
 				try {
 					pd.run(true, true, new IRunnableWithProgress() {
 
@@ -626,7 +658,7 @@
 												zipFile.getParent().getLocation().toOSString() +
 														System.getProperty("file.separator") +
 														CDAValueUtil.DATE_FORMAT3.format(new Date()) + "_" +
-														"RollupStatistics.xlsx");
+														zipFile.getName() + "RollupStatistics.xlsx");
 										}
 
 										processSelection(
@@ -634,6 +666,14 @@
 											rollupStats);
 
 									}
+
+									try (OutputStream fileOut = Files.newOutputStream(
+										Paths.get(fileLocation.toString()))) {
+										rollupStats.write(fileOut);
+										fileOut.close();
+										rollupStats.close();
+										rollupStats.dispose();
+									}
 								}
 							} catch (Throwable e) {
 								ILog log = Activator.getDefault().getLog();
@@ -691,12 +731,12 @@
 				//
 				// console.println("Start Saving " + currentProcessingTime);
 
-				try (OutputStream fileOut = Files.newOutputStream(Paths.get(fileLocation.toString()))) {
-					rollupStats.write(fileOut);
-					fileOut.close();
-					rollupStats.close();
-					rollupStats.dispose();
-				}
+				// try (OutputStream fileOut = Files.newOutputStream(Paths.get(fileLocation.toString()))) {
+				// rollupStats.write(fileOut);
+				// fileOut.close();
+				// rollupStats.close();
+				// rollupStats.dispose();
+				// }
 
 				for (
 
@@ -1415,20 +1455,31 @@
 		validation.write("File,Rule,XPath");
 		validation.newLine();
 
+		final int STATSFILENAME = 0;
+		final int STATSTOTAL = 1;
+		final int STATSCONSOLIDATED = 2;
+		final int STATSCONTINUITYOFCARE = 3;
+		final int STATSPROGRESSNOTE = 4;
+		final int STATSDISCHARGESUMMARY = 5;
+		final int STATSOTHER = 6;
+		final int STATSC32 = 7;
+		final int STATSNONXML = 8;
+		final int STATSERRORS = 9;
+
 		SXSSFSheet statsheet = rollupStats.getSheet("File Statistics");
 		if (statsheet == null) {
 			statsheet = rollupStats.createSheet("File Statistics");
 			Row hrow = statsheet.createRow(statsheet.getPhysicalNumberOfRows());
-			hrow.createCell(0).setCellValue("File Name");
-
-			hrow.createCell(1).setCellValue("Totals");
-			hrow.createCell(2).setCellValue("Consolidated");
-			hrow.createCell(3).setCellValue("Outpatient Progress note");
-			hrow.createCell(4).setCellValue("Summary of episode note");
-			hrow.createCell(5).setCellValue("Other");
-			hrow.createCell(6).setCellValue("C32");
-			hrow.createCell(7).setCellValue("NonXML");
-			hrow.createCell(8).setCellValue("Errors");
+			hrow.createCell(STATSFILENAME).setCellValue("File Name");
+			hrow.createCell(STATSTOTAL).setCellValue("Totals");
+			hrow.createCell(STATSCONSOLIDATED).setCellValue("Consolidated");
+			hrow.createCell(STATSCONTINUITYOFCARE).setCellValue("Summarization of episode note");
+			hrow.createCell(STATSPROGRESSNOTE).setCellValue("Outpatient Progress note");
+			hrow.createCell(STATSDISCHARGESUMMARY).setCellValue("Discharge Summary");
+			hrow.createCell(STATSOTHER).setCellValue("Other");
+			hrow.createCell(STATSC32).setCellValue("C32");
+			hrow.createCell(STATSNONXML).setCellValue("NonXML");
+			hrow.createCell(STATSERRORS).setCellValue("Errors");
 			;
 
 		}
@@ -1736,15 +1787,27 @@
 				nonxmldocuments++;
 			}
 
-			statrow.createCell(1).setCellValue(statfilectr);
-			statrow.createCell(2).setCellValue(consoldocumentsprocessed);
-			statrow.createCell(3).setCellValue(continuityofcareprocessed);
-			statrow.createCell(4).setCellValue(outpatientprogressnoteprocessed);
-			statrow.createCell(5).setCellValue(dischargesummaryprocessed);
-			statrow.createCell(6).setCellValue(otherdocumentprocessed);
-			statrow.createCell(7).setCellValue(c32documentsprocessed);
-			statrow.createCell(8).setCellValue(nonxmldocuments);
-			statrow.createCell(9).setCellValue(documenterrors);
+			// final int STATSFILENAME = 0;
+			// final int STATSTOTAL = 1;
+			// final int STATSCONSOLIDATED = 2;
+			// final int STATSCONTINUITYOFCARE = 3;
+			// final int STATSPROGRESSNOTE = 4;
+			// final int STATSEPISODENOTE = 5;
+			// final int STATSDISCHARGESUMMARY = 6;
+			// final int STATSOTHER = 7;
+			// final int STATSC32 = 8;
+			// final int STATSNONXML = 9;
+			// final int STATSERRORS = 10;
+
+			statrow.createCell(STATSTOTAL).setCellValue(statfilectr);
+			statrow.createCell(STATSCONSOLIDATED).setCellValue(consoldocumentsprocessed);
+			statrow.createCell(STATSCONTINUITYOFCARE).setCellValue(continuityofcareprocessed);
+			statrow.createCell(STATSPROGRESSNOTE).setCellValue(outpatientprogressnoteprocessed);
+			statrow.createCell(STATSDISCHARGESUMMARY).setCellValue(dischargesummaryprocessed);
+			statrow.createCell(STATSOTHER).setCellValue(otherdocumentprocessed);
+			statrow.createCell(STATSC32).setCellValue(c32documentsprocessed);
+			statrow.createCell(STATSNONXML).setCellValue(nonxmldocuments);
+			statrow.createCell(STATSERRORS).setCellValue(documenterrors);
 
 			stopwatch.stop();
 		}
