diff --git a/apps/routerconsole/jsp/flags.jsp b/apps/routerconsole/jsp/flags.jsp
index 153b4c2f27c0be1ae96d4f06e1e5037ede252871..7148782e31bd00b0e7a0670d30994db52d8190fe 100644
--- a/apps/routerconsole/jsp/flags.jsp
+++ b/apps/routerconsole/jsp/flags.jsp
@@ -11,7 +11,6 @@
  *  flags.jsp?c=de => icons/flags/de.png
  *  with headers set so the browser caches.
  */
-boolean rendered = false;
 String c = request.getParameter("c");
 if (c != null && c.length() > 0) {
     java.io.OutputStream cout = response.getOutputStream();
@@ -38,17 +37,23 @@ if (c != null && c.length() > 0) {
     response.setContentType("image/png");
     try {
         net.i2p.util.FileUtil.readFile(file, base, cout);
-        rendered = true;
-    } catch (java.io.IOException ioe) {}
-    if (rendered)
-        cout.close();
+    } catch (java.io.IOException ioe) {
+        // prevent 'Committed' IllegalStateException from Jetty
+        if (!response.isCommitted()) {
+            response.sendError(403, ioe.toString());
+        }  else {
+            net.i2p.I2PAppContext.getGlobalContext().logManager().getLog(getClass()).error("Error serving flags/" + c + ".png", ioe);
+            // Jetty doesn't log this
+            throw ioe;
+        }
+    }
+} else {
+    /*
+     *  Send a 403 instead of a 404, because the server sends error.jsp
+     *  for 404 errors, complete with the summary bar, which would be
+     *  a huge load for a page full of flags if the user didn't have the
+     *  flags directory for some reason.
+     */
+    response.sendError(403, "No flag specified");
 }
-/*
- *  Send a 403 instead of a 404, because the server sends error.jsp
- *  for 404 errors, complete with the summary bar, which would be
- *  a huge load for a page full of flags if the user didn't have the
- *  flags directory for some reason.
- */
-if (!rendered)
-    response.sendError(403, "Flag not found");
 %>
\ No newline at end of file
diff --git a/apps/routerconsole/jsp/viewhistory.jsp b/apps/routerconsole/jsp/viewhistory.jsp
index 14ee0bbffa644ab63c34bef0ceebe8aba0d16e66..aa3ce4d545d2a5664bc145baa587f0533e22d567 100644
--- a/apps/routerconsole/jsp/viewhistory.jsp
+++ b/apps/routerconsole/jsp/viewhistory.jsp
@@ -11,6 +11,13 @@ String base = net.i2p.I2PAppContext.getGlobalContext().getBaseDir().getAbsoluteP
 try {
     net.i2p.util.FileUtil.readFile("history.txt", base, response.getOutputStream());
 } catch (java.io.IOException ioe) {
-    response.sendError(403, ioe.toString());
+    // prevent 'Committed' IllegalStateException from Jetty
+    if (!response.isCommitted()) {
+        response.sendError(403, ioe.toString());
+    }  else {
+        net.i2p.I2PAppContext.getGlobalContext().logManager().getLog(getClass()).error("Error serving history.txt", ioe);
+        // Jetty doesn't log this
+        throw ioe;
+    }
 }
 %>
\ No newline at end of file
diff --git a/apps/routerconsole/jsp/viewtheme.jsp b/apps/routerconsole/jsp/viewtheme.jsp
index 814705e142516759209dfdd39ce8578054b1e3e2..ce1a6fe3807e065f58f6773f1e4afb8524130387 100644
--- a/apps/routerconsole/jsp/viewtheme.jsp
+++ b/apps/routerconsole/jsp/viewtheme.jsp
@@ -63,6 +63,13 @@ if (length > 0)
 try {
     net.i2p.util.FileUtil.readFile(uri, base, response.getOutputStream());
 } catch (java.io.IOException ioe) {
-    response.sendError(403, ioe.toString());
+    // prevent 'Committed' IllegalStateException from Jetty
+    if (!response.isCommitted()) {
+        response.sendError(403, ioe.toString());
+    }  else {
+        net.i2p.I2PAppContext.getGlobalContext().logManager().getLog(getClass()).error("Error serving " + uri, ioe);
+        // Jetty doesn't log this
+        throw ioe;
+    }
 }
 %>
\ No newline at end of file