diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/.classpath b/cda/plugins/org.eclipse.mdht.cda.xml.ui/.classpath
index 0824bf7..4b901de 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/.classpath
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/.classpath
@@ -1,15 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry exported="true" kind="lib" path="jericho/jericho-html-3.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="poi-3.16/lib/commons-codec-1.10.jar"/>
-	<classpathentry exported="true" kind="lib" path="poi-3.16/lib/commons-collections4-4.1.jar"/>
-	<classpathentry exported="true" kind="lib" path="poi-3.16/ooxml-lib/curvesapi-1.04.jar"/>
-	<classpathentry exported="true" kind="lib" path="poi-3.16/ooxml-lib/xmlbeans-2.6.0.jar"/>
-	<classpathentry exported="true" kind="lib" path="poi-3.16/poi-3.16.jar"/>
-	<classpathentry exported="true" kind="lib" path="poi-3.16/poi-ooxml-3.16.jar"/>
-	<classpathentry exported="true" kind="lib" path="poi-3.16/poi-ooxml-schemas-3.16.jar"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-examples-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-excelant-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-integration-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-ooxml-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-ooxml-full-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-ooxml-lite-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/poi-scratchpad-5.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/ooxml-lib/commons-compress-1.20.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/ooxml-lib/curvesapi-1.06.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/ooxml-lib/xmlbeans-4.0.0.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/lib/commons-codec-1.15.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/lib/commons-collections4-4.4.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/lib/commons-math3-3.6.1.jar"/>
+	<classpathentry kind="lib" path="poi-5.0.0/lib/SparseBitSet-1.2.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/CDAValueUtil.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/CDAValueUtil.java
index 64e8ec1..4dedb1c 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/CDAValueUtil.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/CDAValueUtil.java
@@ -21,9 +21,6 @@
 import javax.swing.text.html.parser.ParserDelegator;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.CreationHelper;
-import org.apache.poi.ss.usermodel.Sheet;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.mdht.uml.cda.AssignedAuthor;
 import org.eclipse.mdht.uml.cda.Author;
@@ -290,16 +287,16 @@
 
 	}
 
-	static CellStyle getDocumentDateStyle(Sheet sheet) {
-		if (!GenerateCDADataHandler.documentDateStyles.containsKey(sheet)) {
-			CellStyle documentDateStyle = sheet.getWorkbook().createCellStyle();
-			CreationHelper createHelper = sheet.getWorkbook().getCreationHelper();
-			documentDateStyle.setDataFormat(createHelper.createDataFormat().getFormat("mm/dd/yyyy hh:mm AM/PM"));
-			GenerateCDADataHandler.documentDateStyles.put(sheet, documentDateStyle);
-		}
-
-		return GenerateCDADataHandler.documentDateStyles.get(sheet);
-	}
+	// static CellStyle getDocumentDateStyle(Sheet sheet) {
+	// if (!GenerateCDADataHandler.documentDateStyles.containsKey(sheet)) {
+	// CellStyle documentDateStyle = sheet.getWorkbook().createCellStyle();
+	// CreationHelper createHelper = sheet.getWorkbook().getCreationHelper();
+	// documentDateStyle.setDataFormat(createHelper.createDataFormat().getFormat("mm/dd/yyyy hh:mm AM/PM"));
+	// GenerateCDADataHandler.documentDateStyles.put(sheet, documentDateStyle);
+	// }
+	//
+	// return GenerateCDADataHandler.documentDateStyles.get(sheet);
+	// }
 
 	static String getKey(II ii) {
 		if (ii.getRoot() != null) {
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 5240a25..b4a92a4 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
@@ -54,8 +54,6 @@
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.poi.openxml4j.util.ZipSecureFile;
 import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.IndexedColors;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellReference;
@@ -284,7 +282,7 @@
 	 */
 	private static final String DIVIDER_PATTERN = "(?<=[^\\p{Lu}])(?=\\p{Lu})" + "|(?<=[\\p{Ll}])(?=\\d)";
 
-	static HashMap<Sheet, CellStyle> documentDateStyles = new HashMap<Sheet, CellStyle>();
+	// static HashMap<Sheet, CellStyle> documentDateStyles = new HashMap<Sheet, CellStyle>();
 
 	static ExtractText extractText = new ExtractText();
 
@@ -871,7 +869,7 @@
 			monitor.subTask(
 				"Opened  " + CDAValueUtil.DATE_FORMAT3.format(new Date()) + "_" + fileLocation.toUpperCase() +
 						"_SA.xlsx");
-			CellStyle boldstyle = wb.createCellStyle();
+			// CellStyle boldstyle = wb.createCellStyle();
 			// Font boldFont = wb.createFont();
 			// boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
 			// boldstyle.setFont(boldFont);
@@ -890,7 +888,7 @@
 						}
 						// skip section sheet - different formatting
 						if (sheetCtr != 1 && topRow.getCell(columnCtr) != null) {
-							topRow.getCell(columnCtr).setCellStyle(boldstyle);
+							// topRow.getCell(columnCtr).setCellStyle(boldstyle);
 						}
 
 					}
@@ -1425,7 +1423,7 @@
 		 */
 		// documentDateStyle = null;
 
-		documentDateStyles.clear();
+		// documentDateStyles.clear();
 		sheets.clear();
 
 		// sectionbyfileByDocument.clear();
@@ -2044,10 +2042,10 @@
 				cell.setCellFormula(strFormula);
 			}
 
-			CellStyle style = null;
+			// CellStyle style = null;
 			if (sectionsSheet.getWorkbook().getNumCellStyles() < 100) {
-				style = sectionsSheet.getWorkbook().createCellStyle();
-				style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+				// style = sectionsSheet.getWorkbook().createCellStyle();
+				// style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
 				// style.setFillPattern(CellStyle.SOLID_FOREGROUND);
 				// style.setAlignment(CellStyle.ALIGN_CENTER);
 			}
@@ -2068,9 +2066,9 @@
 						if (sectionbyfile.get(sectionclass).contains(file)) {
 							Cell cell = row1.createCell(offset++);
 							cell.setCellValue("X");
-							if (style != null) {
-								cell.setCellStyle(style);
-							}
+							// if (style != null) {
+							// cell.setCellStyle(style);
+							// }
 						} else {
 							row1.createCell(offset++).setCellValue("");
 						}
@@ -3323,11 +3321,11 @@
 
 			// Font boldFont = wb.createFont();
 			// boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
-			CellStyle sectionstyle = null;
+			// CellStyle sectionstyle = null;
 			if (sectionsSheet.getWorkbook().getNumCellStyles() < 100) {
-				sectionstyle = sectionsSheet.getWorkbook().createCellStyle();
-				sectionstyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());
-				sectionstyle.setRotation((short) -90);
+				// sectionstyle = sectionsSheet.getWorkbook().createCellStyle();
+				// sectionstyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());
+				// sectionstyle.setRotation((short) -90);
 				// sectionstyle.setFont(boldFont);
 			}
 
@@ -3343,9 +3341,9 @@
 			for (String sectionclass : sortedKeys) {
 				Cell cell = row1.createCell(offset++);
 				cell.setCellValue(sectionclass);
-				if (sectionstyle != null) {
-					cell.setCellStyle(sectionstyle);
-				}
+				// if (sectionstyle != null) {
+				// cell.setCellStyle(sectionstyle);
+				// }
 			}
 
 			row1 = sectionsSheet.createRow(sectionsSheet.getPhysicalNumberOfRows());
@@ -3359,10 +3357,10 @@
 				cell.setCellFormula(strFormula);
 			}
 
-			CellStyle style = null;
+			// CellStyle style = null;
 			if (sectionsSheet.getWorkbook().getNumCellStyles() < 100) {
-				style = sectionsSheet.getWorkbook().createCellStyle();
-				style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+				// style = sectionsSheet.getWorkbook().createCellStyle();
+				// style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
 				// style.setFillPattern(CellStyle.SOLID_FOREGROUND);
 				// style.setAlignment(CellStyle.ALIGN_CENTER);
 			}
@@ -3383,9 +3381,9 @@
 						if (sectionbyfile.get(sectionclass).contains(file)) {
 							Cell cell = row1.createCell(offset++);
 							cell.setCellValue("X");
-							if (style != null) {
-								cell.setCellStyle(style);
-							}
+							// if (style != null) {
+							// cell.setCellStyle(style);
+							// }
 						} else {
 							row1.createCell(offset++).setCellValue("");
 						}
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java
index 76dd8b4..8fadb8a 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java
@@ -1159,7 +1159,7 @@
 
 		if (documentMetadata.documentDate != null) {
 			cell = row.createCell(offset++);
-			cell.setCellStyle(CDAValueUtil.getDocumentDateStyle(row.getSheet()));
+			// cell.setCellStyle(CDAValueUtil.getDocumentDateStyle(row.getSheet()));
 			cell.setCellValue(documentMetadata.documentDate);
 		} else {
 			row.createCell(offset++);
