diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java
index 92c4d99789e7be22ef040a19f426d3a7d879917e..8998c9f403caf40f984d9ba6d6176c000bb7e4bd 100644
--- a/router/java/src/net/i2p/router/transport/UPnP.java
+++ b/router/java/src/net/i2p/router/transport/UPnP.java
@@ -684,9 +684,9 @@ public class UPnP extends ControlPoint implements DeviceChangeListener, EventLis
 	/**
 	 * Get the addresses we want to bind to
 	 *
-	 * @since 0.9.46
+	 * @since 0.9.46, public since 0.9.55 for HTTPServerList
 	 */
-	static Set<String> getLocalAddresses() {
+	public static Set<String> getLocalAddresses() {
 		// older miniupnpd will send ipv6 ssdp search response to ipv4 address,
 		// but newer ones won't. So we need to bind to an ipv6 address
 		// to get his ipv6 address so we can bind to OUR ipv6 address
@@ -729,9 +729,6 @@ public class UPnP extends ControlPoint implements DeviceChangeListener, EventLis
 				if (pct > 0)
 					addr = addr.substring(0, pct);
 				if (!addrs.contains(addr)) {
-					// the first time through this will close a lot of sockets,
-					// because HTTPServerList binds to every address,
-					// including IPv6 deprecated
 					iter.remove();
 					skt.close();
 					skt.stop();
diff --git a/router/java/src/org/cybergarage/http/HTTPServerList.java b/router/java/src/org/cybergarage/http/HTTPServerList.java
index ef41bb0028bde58a045381fc0094ce77bd9262fa..1a66ad42e5099dc07a9cad17a2b6e61d3787fc60 100644
--- a/router/java/src/org/cybergarage/http/HTTPServerList.java
+++ b/router/java/src/org/cybergarage/http/HTTPServerList.java
@@ -18,11 +18,14 @@
 package org.cybergarage.http;
 
 import java.net.InetAddress;
+import java.util.Set;
 import java.util.Vector;
 
 import org.cybergarage.net.HostInterface;
 import org.cybergarage.upnp.Device;
 
+import net.i2p.router.transport.UPnP;
+
 public class HTTPServerList extends Vector<HTTPServer> 
 {
 	////////////////////////////////////////////////
@@ -80,12 +83,10 @@ public class HTTPServerList extends Vector<HTTPServer>
 				bindAddresses[i] = binds[i].getHostAddress();
 			}
 		}else{
-			int nHostAddrs = HostInterface.getNHostAddresses();
-			bindAddresses = new String[nHostAddrs]; 
-			for (int n=0; n<nHostAddrs; n++) {
-				bindAddresses[n] = HostInterface.getHostAddress(n);
-			}
-		}		
+			// I2P non-public addresses only
+			Set<String> addrs = UPnP.getLocalAddresses();
+			bindAddresses = addrs.toArray(new String[addrs.size()]); 
+		}
 		int j=0;
 		for (int i = 0; i < bindAddresses.length; i++) {
 			HTTPServer httpServer = new HTTPServer();