diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketEepGet.java b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketEepGet.java
index d68270bc62aed4a90e3a1023141940ca2c547a3f..0f11ea5340d713cf7db6ad63090f6a4d85b46b8d 100644
--- a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketEepGet.java
+++ b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketEepGet.java
@@ -181,7 +181,13 @@ public class I2PSocketEepGet extends EepGet {
                    "Cache-control: no-cache\r\n" +
                    "Pragma: no-cache\r\n" +
                    "User-Agent: " + USER_AGENT + "\r\n" +
-                   "Connection: close\r\n\r\n");
+                   "Connection: close\r\n");
+        if (_extraHeaders != null) {
+            for (String hdr : _extraHeaders) {
+                buf.append(hdr).append("\r\n");
+            }
+        }
+        buf.append("\r\n");
         return buf.toString();
     }
 
diff --git a/core/java/src/net/i2p/util/EepGet.java b/core/java/src/net/i2p/util/EepGet.java
index c5edd976f330fbfed970671afa5e95c5c31ad245..27c0fd2ad3745cedcefac5dd7b0d55dcbfa37541 100644
--- a/core/java/src/net/i2p/util/EepGet.java
+++ b/core/java/src/net/i2p/util/EepGet.java
@@ -45,6 +45,7 @@ public class EepGet {
     private final String _postData;
     private boolean _allowCaching;
     protected final List<StatusListener> _listeners;
+    protected List<String> _extraHeaders;
     
     protected boolean _keepFetching;
     protected Socket _proxy;
@@ -1022,7 +1023,13 @@ public class EepGet {
         // This will be replaced if we are going through I2PTunnelHTTPClient
         buf.append("User-Agent: " + USER_AGENT + "\r\n" +
                    "Accept-Encoding: \r\n" +
-                   "Connection: close\r\n\r\n");
+                   "Connection: close\r\n");
+        if (_extraHeaders != null) {
+            for (String hdr : _extraHeaders) {
+                buf.append(hdr).append("\r\n");
+            }
+        }
+        buf.append("\r\n");
         if (post)
             buf.append(_postData);
         if (_log.shouldLog(Log.DEBUG))
@@ -1075,4 +1082,16 @@ public class EepGet {
     public void setWriteErrorToOutput() {
         _shouldWriteErrorToOutput = true;
     }
+
+    /**
+     *  Add an extra header to the request.
+     *  Must be called before fetch().
+     *
+     *  @since 0.8.8
+     */
+    public void addHeader(String name, String value) {
+        if (_extraHeaders == null)
+            _extraHeaders = new ArrayList();
+        _extraHeaders.add(name + ": " + value);
+    }
 }
diff --git a/core/java/src/net/i2p/util/PartialEepGet.java b/core/java/src/net/i2p/util/PartialEepGet.java
index 1b44fce25d8c3eb5fc9919dfdbf8f5034171d8ed..6075a4ca4f31166c08cb296fa85aa9dcc312885b 100644
--- a/core/java/src/net/i2p/util/PartialEepGet.java
+++ b/core/java/src/net/i2p/util/PartialEepGet.java
@@ -119,7 +119,13 @@ public class PartialEepGet extends EepGet {
         // This will be replaced if we are going through I2PTunnelHTTPClient
         buf.append("User-Agent: " + USER_AGENT + "\r\n" +
                    "Accept-Encoding: \r\n" +
-                   "Connection: close\r\n\r\n");
+                   "Connection: close\r\n");
+        if (_extraHeaders != null) {
+            for (String hdr : _extraHeaders) {
+                buf.append(hdr).append("\r\n");
+            }
+        }
+        buf.append("\r\n");
 
         if (_log.shouldLog(Log.DEBUG))
             _log.debug("Request: [" + buf.toString() + "]");