diff --git a/src/examples/src/org/apache/poi/examples/xssf/streaming/DeferredGeneration.java b/src/examples/src/org/apache/poi/examples/xssf/streaming/DeferredGeneration.java
index 1d07d32..e3907a9 100644
--- a/src/examples/src/org/apache/poi/examples/xssf/streaming/DeferredGeneration.java
+++ b/src/examples/src/org/apache/poi/examples/xssf/streaming/DeferredGeneration.java
@@ -27,23 +27,23 @@
 
 public class DeferredGeneration {
 
-	public static void main(String[] args) throws IOException {
-		try (DeferredSXSSFWorkbook wb = new DeferredSXSSFWorkbook()) {
-			DeferredSXSSFSheet sheet1 = wb.createSheet("new sheet");
+    public static void main(String[] args) throws IOException {
+        try (DeferredSXSSFWorkbook wb = new DeferredSXSSFWorkbook()) {
+            DeferredSXSSFSheet sheet1 = wb.createSheet("new sheet");
 
-			sheet1.setRowGenerator((ssxSheet) -> {
-				for (int i = 0; i < 10; i++) {
-					Row row = ssxSheet.createRow(i);
-					Cell cell = row.createCell(1);
-					cell.setCellValue("value " + i);
-				}
-			});
+            sheet1.setRowGenerator((ssxSheet) -> {
+                for (int i = 0; i < 10; i++) {
+                    Row row = ssxSheet.createRow(i);
+                    Cell cell = row.createCell(1);
+                    cell.setCellValue("value " + i);
+                }
+            });
 
-			try (FileOutputStream fileOut = new FileOutputStream("DeferredGeneration.xlsx")) {
-				wb.write(fileOut);
-			} finally {
-				wb.dispose();
-			}
-		}
-	}
+            try (FileOutputStream fileOut = new FileOutputStream("DeferredGeneration.xlsx")) {
+                wb.write(fileOut);
+            } finally {
+                wb.dispose();
+            }
+        }
+    }
 }
diff --git a/src/examples/src/org/apache/poi/examples/xssf/streaming/Outlining.java b/src/examples/src/org/apache/poi/examples/xssf/streaming/Outlining.java
index bd558e9..6c29813 100644
--- a/src/examples/src/org/apache/poi/examples/xssf/streaming/Outlining.java
+++ b/src/examples/src/org/apache/poi/examples/xssf/streaming/Outlining.java
@@ -25,30 +25,30 @@
 
 public class Outlining {
 
-	public static void main(String[] args) throws IOException {
-		Outlining o = new Outlining();
-		o.collapseRow();
-	}
+    public static void main(String[] args) throws IOException {
+        Outlining o = new Outlining();
+        o.collapseRow();
+    }
 
-	private void collapseRow() throws IOException {
-		try (SXSSFWorkbook wb2 = new SXSSFWorkbook(100)) {
-			SXSSFSheet sheet2 = wb2.createSheet("new sheet");
+    private void collapseRow() throws IOException {
+        try (SXSSFWorkbook wb2 = new SXSSFWorkbook(100)) {
+            SXSSFSheet sheet2 = wb2.createSheet("new sheet");
 
-			int rowCount = 20;
-			for (int i = 0; i < rowCount; i++) {
-				sheet2.createRow(i);
-			}
+            int rowCount = 20;
+            for (int i = 0; i < rowCount; i++) {
+                sheet2.createRow(i);
+            }
 
-			sheet2.groupRow(4, 9);
-			sheet2.groupRow(11, 19);
+            sheet2.groupRow(4, 9);
+            sheet2.groupRow(11, 19);
 
-			sheet2.setRowGroupCollapsed(4, true);
+            sheet2.setRowGroupCollapsed(4, true);
 
-			try (FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx")) {
-				wb2.write(fileOut);
-			} finally {
-				wb2.dispose();
-			}
-		}
-	}
+            try (FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx")) {
+                wb2.write(fileOut);
+            } finally {
+                wb2.dispose();
+            }
+        }
+    }
 }
