diff --git a/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java b/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java
index 7662479d47330f6a3d6b574c1a7f7a8825851d42..c8c396eb505022ea761ff93d41447be045758cab 100644
--- a/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tcp/LanTcpPlugin.java
@@ -184,7 +184,7 @@ class LanTcpPlugin extends TcpPlugin {
 				boolean site = addr.isSiteLocalAddress();
 				if(link || site) {
 					if(LOG.isLoggable(INFO))
-						LOG.info("Preferring " + addr.getHostAddress());
+						LOG.info("Preferring " + getHostAddress(addr));
 					return addr;
 				}
 			}
@@ -194,7 +194,7 @@ class LanTcpPlugin extends TcpPlugin {
 			for(InetAddress addr : Collections.list(iface.getInetAddresses())) {
 				if(addr.isLoopbackAddress()) continue;
 				if(LOG.isLoggable(INFO))
-					LOG.info("Accepting " + addr.getHostAddress());
+					LOG.info("Accepting " + getHostAddress(addr));
 				return addr;
 			}
 		}
diff --git a/briar-core/src/net/sf/briar/plugins/tcp/PortMapperImpl.java b/briar-core/src/net/sf/briar/plugins/tcp/PortMapperImpl.java
index c5a24dc2e9668ff7f0248e3c8439d1386f3f60fd..2792e591d57cb20e4d35254e5c5b1c5038fed1ad 100644
--- a/briar-core/src/net/sf/briar/plugins/tcp/PortMapperImpl.java
+++ b/briar-core/src/net/sf/briar/plugins/tcp/PortMapperImpl.java
@@ -35,11 +35,13 @@ class PortMapperImpl implements PortMapper {
 		if(gateway == null) return null;
 		InetAddress internal = gateway.getLocalAddress();
 		if(internal == null) return null;
+		if(LOG.isLoggable(INFO))
+			LOG.info("Internal address " + getHostAddress(internal));
 		boolean succeeded = false;
 		InetAddress external = null;
 		try {
 			succeeded = gateway.addPortMapping(port, port,
-					internal.getHostAddress(), "TCP", "TCP");
+					getHostAddress(internal), "TCP", "TCP");
 			if(succeeded) {
 				shutdownManager.addShutdownHook(new Runnable() {
 					public void run() {
@@ -60,6 +62,13 @@ class PortMapperImpl implements PortMapper {
 		return new MappingResult(internal, external, port, succeeded);
 	}
 
+	private String getHostAddress(InetAddress a) {
+		String addr = a.getHostAddress();
+		int percent = addr.indexOf('%');
+		if(percent == -1) return addr;
+		return addr.substring(0, percent);
+	}
+
 	private void start() {
 		GatewayDiscover d = new GatewayDiscover();
 		try {
diff --git a/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java b/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java
index 77e50e18f8986009cb826306983cbef3be44d9bb..0c6c3b7890f61ab2b32bbf105a299d500d524ee8 100644
--- a/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tcp/TcpPlugin.java
@@ -93,7 +93,7 @@ abstract class TcpPlugin implements DuplexPlugin {
 		}
 		socket = ss;
 		if(LOG.isLoggable(INFO)) {
-			String addr = ss.getInetAddress().getHostAddress();
+			String addr = getHostAddress(ss.getInetAddress());
 			int port = ss.getLocalPort();
 			LOG.info("Listening on " + addr + " " + port);
 		}
@@ -109,10 +109,16 @@ abstract class TcpPlugin implements DuplexPlugin {
 		}
 	}
 
+	protected String getHostAddress(InetAddress a) {
+		String addr = a.getHostAddress();
+		int percent = addr.indexOf('%');
+		if(percent == -1) return addr;
+		return addr.substring(0, percent);
+	}
+
 	protected void setLocalSocketAddress(InetSocketAddress a) {
-		InetAddress addr = a.getAddress();
 		TransportProperties p = new TransportProperties();
-		p.put("address", addr.getHostAddress());
+		p.put("address", getHostAddress(a.getAddress()));
 		p.put("port", String.valueOf(a.getPort()));
 		callback.mergeLocalProperties(p);
 	}
diff --git a/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java b/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java
index e5396a4f1bef22a3f5c01de57d46f026cd5770b7..8f4bbb7903d79ab7d87b064b1a3c01712a24a23a 100644
--- a/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tcp/WanTcpPlugin.java
@@ -110,7 +110,7 @@ class WanTcpPlugin extends TcpPlugin {
 				a = mappingResult.getExternal();
 		}
 		TransportProperties p = new TransportProperties();
-		p.put("address", a.getAddress().getHostAddress());
+		p.put("address", getHostAddress(a.getAddress()));
 		p.put("port", String.valueOf(a.getPort()));
 		callback.mergeLocalProperties(p);
 	}