diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java
index 5092037..6332b57 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java
@@ -186,7 +186,11 @@
 	 */
 	static int createProcedureHeader(Row row1, Row row2, int offset) {
 		row2.createCell(offset++).setCellValue(replaceSpace("ID"));
-		row2.createCell(offset++).setCellValue(replaceSpace("Date"));
+		row2.createCell(offset++).setCellValue(replaceSpace("Effective Date"));
+		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
+		row2.createCell(offset++).setCellValue(replaceSpace("Start Date"));
+		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
+		row2.createCell(offset++).setCellValue(replaceSpace("End Date"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
 		offset = addCodeHeader(row2, offset, "Procedure");
@@ -264,7 +268,10 @@
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
 		row2.createCell(offset++).setCellValue(replaceSpace("Administration Date"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
-		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
+		row2.createCell(offset++).setCellValue(replaceSpace("Administration Start Date"));
+		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
+		row2.createCell(offset++).setCellValue(replaceSpace("Administration End Date"));
+		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Lot Number"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
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 7ed8d35..08ad94d 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
@@ -1701,6 +1701,57 @@
 		return offset;
 	}
 
+	static int serializeCompleteDate(Row row, int offset, IVL_TS effectiveTime) {
+
+		if (effectiveTime.getValue() != null) {
+
+			Date effectiveDate = CDAValueUtil.getDate(effectiveTime.getValue());
+			if (effectiveDate != null) {
+				row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(effectiveDate));
+			} else {
+				row.createCell(offset++).setCellValue("");
+			}
+			row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(effectiveTime));
+		} else {
+			row.createCell(offset++).setCellValue("");
+			row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(effectiveTime));
+		}
+
+		if (effectiveTime.getLow() != null) {
+
+			Date effectiveDateLow = CDAValueUtil.getDate(effectiveTime.getLow().getValue());
+			if (effectiveDateLow != null) {
+				row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(effectiveDateLow));
+			} else {
+				row.createCell(offset++).setCellValue("");
+			}
+			row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(effectiveTime.getLow()));
+
+		} else {
+			row.createCell(offset++).setCellValue("");
+			row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(effectiveTime));
+
+		}
+
+		if (effectiveTime.getLow() != null) {
+
+			Date effectiveDateHigh = CDAValueUtil.getDate(effectiveTime.getHigh().getValue());
+			if (effectiveDateHigh != null) {
+				row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(effectiveDateHigh));
+			} else {
+				row.createCell(offset++).setCellValue("");
+			}
+
+			row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(effectiveTime.getHigh()));
+		} else {
+			row.createCell(offset++).setCellValue("");
+			row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(effectiveTime));
+
+		}
+
+		return offset;
+	}
+
 	/**
 	 * @param row
 	 * @param offset
@@ -1718,14 +1769,7 @@
 
 		sb = new StringBuffer();
 
-		Date d = CDAValueUtil.getDate(CDAValueUtil.getValueAsString(procedureActivityAct.getEffectiveTime()));
-		if (d != null) {
-			row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(d));
-		} else {
-			row.createCell(offset++).setCellValue("");
-		}
-
-		row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(procedureActivityAct.getEffectiveTime()));
+		offset = serializeCompleteDate(row, offset, procedureActivityAct.getEffectiveTime());
 
 		offset = SpreadsheetSerializer.appendCodeShowNullFlavor(
 			row, offset, procedureActivityAct.getSection(), procedureActivityAct.getCode(),
@@ -1787,14 +1831,16 @@
 
 		sb = new StringBuffer();
 
-		Date d = CDAValueUtil.getDate(CDAValueUtil.getValueAsString(procedureActivityObservation.getEffectiveTime()));
-		if (d != null) {
-			row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(d));
-		} else {
-			row.createCell(offset++).setCellValue("");
-		}
+		// Date d = CDAValueUtil.getDate(CDAValueUtil.getValueAsString(procedureActivityObservation.getEffectiveTime()));
+		// if (d != null) {
+		// row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(d));
+		// } else {
+		// row.createCell(offset++).setCellValue("");
+		// }
+		//
+		// row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(procedureActivityObservation.getEffectiveTime()));
 
-		row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(procedureActivityObservation.getEffectiveTime()));
+		offset = serializeCompleteDate(row, offset, procedureActivityObservation.getEffectiveTime());
 
 		offset = SpreadsheetSerializer.appendCodeShowNullFlavor(
 			row, offset, procedureActivityObservation.getSection(), procedureActivityObservation.getCode(),
@@ -1821,14 +1867,16 @@
 
 		sb = new StringBuffer();
 
-		Date d = CDAValueUtil.getDate(CDAValueUtil.getValueAsString(procedureActivityProcedure.getEffectiveTime()));
-		if (d != null) {
-			row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(d));
-		} else {
-			row.createCell(offset++).setCellValue("");
-		}
+		// Date d = CDAValueUtil.getDate(CDAValueUtil.getValueAsString(procedureActivityProcedure.getEffectiveTime()));
+		// if (d != null) {
+		// row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(d));
+		// } else {
+		// row.createCell(offset++).setCellValue("");
+		// }
+		//
+		// row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(procedureActivityProcedure.getEffectiveTime()));
 
-		row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(procedureActivityProcedure.getEffectiveTime()));
+		offset = serializeCompleteDate(row, offset, procedureActivityProcedure.getEffectiveTime());
 
 		offset = SpreadsheetSerializer.appendCodeShowNullFlavor(
 			row, offset, procedureActivityProcedure.getSection(), procedureActivityProcedure.getCode(),
@@ -2022,7 +2070,6 @@
 		row.createCell(offset++).setCellValue(sb.toString());
 
 		sb = new StringBuffer();
-		substanceAdministration.getEffectiveTimes();
 
 		ST lotNumberText = null;
 		boolean hasCode = false;
@@ -2066,32 +2113,13 @@
 		row.createCell(offset++).setCellValue(CDAValueUtil.getValue(substanceAdministration.getDoseQuantity()));
 		row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(substanceAdministration.getDoseQuantity()));
 
-		String time = "";
-		EObject source = null;
 		for (SXCM_TS t : substanceAdministration.getEffectiveTimes()) {
-			source = t;
-			if (!StringUtils.isEmpty(t.getValue())) {
-				time = t.getValue();
-			}
-
 			if (t instanceof IVL_TS) {
-
-				time = CDAValueUtil.getValueAsString((IVL_TS) t);
-
+				offset = serializeCompleteDate(row, offset, (IVL_TS) t);
 			}
-
+			break;
 		}
 
-		Date d = CDAValueUtil.getDate(time);
-
-		if (d != null) {
-			row.createCell(offset++).setCellValue(CDAValueUtil.DATE_PRETTY.format(d));
-		} else {
-			row.createCell(offset++).setCellValue(time);
-		}
-
-		row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(source));
-
 		if (lotNumberText != null) {
 			row.createCell(offset++).setCellValue(lotNumberText.getText());
 			row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(lotNumberText));
