diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
index bbb03d2e8b8954b306cc4529687a29e24d7c5610..e8cd7e17b5bd2b2fc15ee0db4f5c0bf27cd3dc15 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
@@ -304,6 +304,7 @@ public class StatSummarizer implements Runnable {
         long period = 60*1000;
         long start = end - period*periodCount;
         //long begin = System.currentTimeMillis();
+        ImageOutputStream ios = null;
         try {
             RrdGraphDef def = new RrdGraphDef();
             def.setTimeSpan(start/1000, end/1000);
@@ -356,7 +357,7 @@ public class StatSummarizer implements Runnable {
             BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB);
             Graphics gfx = img.getGraphics();
             graph.render(gfx);
-            ImageOutputStream ios = new MemoryCacheImageOutputStream(out);
+            ios = new MemoryCacheImageOutputStream(out);
             ImageIO.write(img, "png", ios);
 
             //File t = File.createTempFile("jrobinData", ".xml");
@@ -373,6 +374,9 @@ public class StatSummarizer implements Runnable {
         } catch (OutOfMemoryError oom) {
             _log.error("Error rendering", oom);
             throw new IOException("Error plotting: " + oom.getMessage());
+        } finally {
+            // this does not close the underlying stream
+            if (ios != null) try {ios.close();} catch (IOException ioe) {}
         }
     }
     
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
index a0349aa7114776ce09c55f638fad2986ee2ff92d..2e0c44fed10aacae98015b55d0f238909a91c444 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
@@ -99,6 +99,7 @@ class SummaryRenderer {
             periodCount = _listener.getRows();
         long start = end - (period * periodCount);
         //long begin = System.currentTimeMillis();
+        ImageOutputStream ios = null;
         try {
             RrdGraphDef def = new RrdGraphDef();
             def.setTimeSpan(start/1000, end/1000);
@@ -186,7 +187,7 @@ class SummaryRenderer {
             BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB);
             Graphics gfx = img.getGraphics();
             graph.render(gfx);
-            ImageOutputStream ios = new MemoryCacheImageOutputStream(out);
+            ios = new MemoryCacheImageOutputStream(out);
             ImageIO.write(img, "png", ios);
             //System.out.println("Graph created");
 
@@ -203,6 +204,9 @@ class SummaryRenderer {
         } catch (OutOfMemoryError oom) {
             _log.error("Error rendering", oom);
             throw new IOException("Error plotting: " + oom.getMessage());
+        } finally {
+            // this does not close the underlying stream
+            if (ios != null) try {ios.close();} catch (IOException ioe) {}
         }
     }