diff --git a/api/net/sf/briar/api/serial/SigningConsumer.java b/api/net/sf/briar/api/serial/SigningConsumer.java
index 4b0349ed81d1af73948fecc326ea4140b45be4b5..e370317725eb5cd3e86e3e5c9fe6a5f544ccc2df 100644
--- a/api/net/sf/briar/api/serial/SigningConsumer.java
+++ b/api/net/sf/briar/api/serial/SigningConsumer.java
@@ -17,7 +17,7 @@ public class SigningConsumer implements Consumer {
 		try {
 			signature.update(b);
 		} catch(SignatureException e) {
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 	}
 
@@ -25,7 +25,7 @@ public class SigningConsumer implements Consumer {
 		try {
 			signature.update(b, off, len);
 		} catch(SignatureException e) {
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/db/DatabaseCleanerImpl.java b/components/net/sf/briar/db/DatabaseCleanerImpl.java
index a5c6fb194e8705700920a4efb324aac1e4a0183d..39e6c70b47c85774fb3e80b4596f6ef73516fe4c 100644
--- a/components/net/sf/briar/db/DatabaseCleanerImpl.java
+++ b/components/net/sf/briar/db/DatabaseCleanerImpl.java
@@ -45,10 +45,10 @@ class DatabaseCleanerImpl implements DatabaseCleaner, Runnable {
 					}
 				} catch(DbException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				} catch(RuntimeException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 			}
 		}
diff --git a/components/net/sf/briar/db/DatabaseComponentImpl.java b/components/net/sf/briar/db/DatabaseComponentImpl.java
index f7d2d31bfcc19711a5eeaf2bca3749cf388677a4..fd6d9555ebcee427c4b4e96c75f889306ac6bd78 100644
--- a/components/net/sf/briar/db/DatabaseComponentImpl.java
+++ b/components/net/sf/briar/db/DatabaseComponentImpl.java
@@ -138,10 +138,10 @@ DatabaseCleaner.Callback {
 						}
 					} catch(DbException e) {
 						if(LOG.isLoggable(Level.WARNING))
-							LOG.warning(e.getMessage());
+							LOG.warning(e.toString());
 					} catch(IOException e) {
 						if(LOG.isLoggable(Level.WARNING))
-							LOG.warning(e.getMessage());
+							LOG.warning(e.toString());
 					}
 				}
 			});
diff --git a/components/net/sf/briar/db/JdbcDatabase.java b/components/net/sf/briar/db/JdbcDatabase.java
index 6cd1e1155f6a255ea72007e690957173243c828e..562d90785ce068e983b02258bb2d252f97fd11da 100644
--- a/components/net/sf/briar/db/JdbcDatabase.java
+++ b/components/net/sf/briar/db/JdbcDatabase.java
@@ -372,8 +372,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 		if(s != null) try {
 			s.close();
 		} catch(SQLException e) {
-			if(LOG.isLoggable(Level.WARNING))
-				LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING))LOG.warning(e.toString());
 		}
 	}
 
@@ -381,8 +380,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 		if(rs != null) try {
 			rs.close();
 		} catch(SQLException e) {
-			if(LOG.isLoggable(Level.WARNING))
-				LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING))LOG.warning(e.toString());
 		}
 	}
 
@@ -418,11 +416,11 @@ abstract class JdbcDatabase implements Database<Connection> {
 			}
 		} catch(SQLException e) {
 			// Try to close the connection
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			try {
 				txn.close();
 			} catch(SQLException e1) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.toString());
 			}
 			// Whatever happens, allow the database to close
 			synchronized(connections) {
diff --git a/components/net/sf/briar/i18n/FontManagerImpl.java b/components/net/sf/briar/i18n/FontManagerImpl.java
index 16b6ffccf065e2c711b1c5ec0c6ae016a8485432..ad0c0b2223ff5d34bec1c5de6fc582b23e6b264c 100644
--- a/components/net/sf/briar/i18n/FontManagerImpl.java
+++ b/components/net/sf/briar/i18n/FontManagerImpl.java
@@ -57,11 +57,9 @@ public class FontManagerImpl implements FontManager {
 				font = font.deriveFont(bf.size);
 				for(String language : bf.languages) fonts.put(language, font);
 			} catch(FontFormatException e) {
-				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning("Could not load font: " + e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning("Could not load font: " + e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		defaultFont = getFont("Sans", 12f);
diff --git a/components/net/sf/briar/i18n/I18nImpl.java b/components/net/sf/briar/i18n/I18nImpl.java
index bd1bbf5fff698db153e11901e7f368c4442bd900..ca541eaa28f3f157b83dfa51a9456f25fabfd097 100644
--- a/components/net/sf/briar/i18n/I18nImpl.java
+++ b/components/net/sf/briar/i18n/I18nImpl.java
@@ -105,7 +105,7 @@ public class I18nImpl implements I18n {
 							UIManager.put(key, bundle.getString(key));
 						} catch(MissingResourceException e) {
 							if(LOG.isLoggable(Level.WARNING))
-								LOG.warning(e.getMessage());
+								LOG.warning(e.toString());
 						}
 					}
 				}
diff --git a/components/net/sf/briar/invitation/InvitationWorker.java b/components/net/sf/briar/invitation/InvitationWorker.java
index 8f2cd77f2befecf092a70e0319946f84dee613b3..6328135120ff8ffd2d75abc964220d730d0d5aba 100644
--- a/components/net/sf/briar/invitation/InvitationWorker.java
+++ b/components/net/sf/briar/invitation/InvitationWorker.java
@@ -57,7 +57,7 @@ class InvitationWorker implements Runnable {
 			if(callback.isCancelled()) return;
 			if(parameters.shouldCreateJar()) files.add(createBriarJar(dir));
 		} catch(IOException e) {
-			callback.error(e.getMessage());
+			callback.error(e.toString());
 			return;
 		}
 		if(callback.isCancelled()) return;
@@ -75,7 +75,7 @@ class InvitationWorker implements Runnable {
 		try {
 			transports = db.getLocalTransports();
 		} catch(DbException e) {
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 		FileOutputStream out = new FileOutputStream(invitationDat);
 		Writer w = writerFactory.createWriter(out);
diff --git a/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java b/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java
index bd1316e602b1ef6dc0d6f071c29b74a1b546fab2..4869e99fb8101febdbafb207ec394f1e93e3345f 100644
--- a/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java
+++ b/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java
@@ -128,7 +128,7 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl {
 					user32.DispatchMessage(msg);
 				}
 			} catch(UnsatisfiedLinkError e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
diff --git a/components/net/sf/briar/plugins/PluginManagerImpl.java b/components/net/sf/briar/plugins/PluginManagerImpl.java
index a4bb45f61ba9813016a8f1867599596200bfa02a..a3343b5c860c63807ee6ed97a5272de6bca0ccb5 100644
--- a/components/net/sf/briar/plugins/PluginManagerImpl.java
+++ b/components/net/sf/briar/plugins/PluginManagerImpl.java
@@ -111,10 +111,10 @@ class PluginManagerImpl implements PluginManager {
 				plugin.start();
 				batchPlugins.add(plugin);
 			} catch(ClassCastException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			} catch(Exception e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			}
 		}
@@ -151,10 +151,10 @@ class PluginManagerImpl implements PluginManager {
 				plugin.start();
 				streamPlugins.add(plugin);
 			} catch(ClassCastException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			} catch(Exception e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			}
 		}
@@ -175,7 +175,7 @@ class PluginManagerImpl implements PluginManager {
 				plugin.stop();
 				stopped++;
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		batchPlugins.clear();
@@ -185,7 +185,7 @@ class PluginManagerImpl implements PluginManager {
 				plugin.stop();
 				stopped++;
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		streamPlugins.clear();
@@ -209,7 +209,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				return db.getConfig(id);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return new TransportConfig();
 			}
 		}
@@ -220,7 +220,7 @@ class PluginManagerImpl implements PluginManager {
 				TransportProperties p = db.getLocalProperties(id);
 				return p == null ? new TransportProperties() : p;
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return new TransportProperties();
 			}
 		}
@@ -230,7 +230,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				return db.getRemoteProperties(id);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return Collections.emptyMap();
 			}
 		}
@@ -240,7 +240,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				db.setConfig(id, c);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 
@@ -268,7 +268,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				db.setLocalProperties(id, p);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
index 4614b6b54820a8fb4619f7e4d259faaa1a84a890..749ab8ea37512ae9800cd603f81b405b47219d99 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
@@ -76,7 +76,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 					}
 				});
 			}
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 		pluginExecutor.execute(createContactSocketBinder());
 	}
@@ -111,7 +111,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			scn = (StreamConnectionNotifier) Connector.open(url);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		synchronized(this) {
@@ -120,7 +120,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 					scn.close();
 				} catch(IOException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 				return;
 			}
@@ -154,7 +154,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			localDevice.setDiscoverable(DiscoveryAgent.GIAC);
 		} catch(BluetoothStateException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		// Advertise the address to contacts if the device is discoverable
 		if(localDevice.getDiscoverable() != DiscoveryAgent.NOT_DISCOVERABLE) {
@@ -176,7 +176,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 				s = scn.acceptAndOpen();
 			} catch(IOException e) {
 				// This is expected when the socket is closed
-				if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+				if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 				return;
 			}
 			BluetoothTransportConnection conn =
@@ -243,7 +243,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			try {
 				discoveryAgent.startInquiry(DiscoveryAgent.GIAC, listener);
 			} catch(BluetoothStateException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return Collections.emptyMap();
 			}
 			try {
@@ -267,7 +267,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			if(LOG.isLoggable(Level.INFO)) LOG.info("Connected");
 			return new BluetoothTransportConnection(s);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return null;
 		}
 	}
@@ -340,7 +340,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 					url = listener.waitForUrl();
 				} catch(BluetoothStateException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 					return;
 				} catch(InterruptedException e) {
 					if(LOG.isLoggable(Level.INFO))
@@ -359,7 +359,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			StreamConnection s = (StreamConnection) Connector.open(url);
 			c.addConnection(s);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 
@@ -374,7 +374,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			scn = (StreamConnectionNotifier) Connector.open(url);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		pluginExecutor.execute(new Runnable() {
@@ -393,7 +393,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			scn.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 
@@ -407,7 +407,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			c.addConnection(s);
 		} catch(IOException e) {
 			// This is expected when the socket is closed
-			if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+			if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java b/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
index 1f484b4223ac9f666714087008bd2a3a1b96f07e..3ff9d853c8e140b1a12645175c0dee301746761f 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
@@ -33,7 +33,7 @@ class BluetoothTransportConnection implements StreamTransportConnection {
 		try {
 			stream.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java b/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java
index 7700263f3a3516f58fb4d3cb64fcf25e53a423ff..d558e6f91ef4510f56e16adf0cf3e047577fc89d 100644
--- a/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java
+++ b/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java
@@ -50,7 +50,7 @@ class ConnectionCallback {
 			try {
 				s.close();
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
diff --git a/components/net/sf/briar/plugins/bluetooth/ContactListener.java b/components/net/sf/briar/plugins/bluetooth/ContactListener.java
index 5f52a435394dee1ca2bdcc4d97ae02e144719dc3..6e29d6d8f70250312a15b58a2848cacc57086a4d 100644
--- a/components/net/sf/briar/plugins/bluetooth/ContactListener.java
+++ b/components/net/sf/briar/plugins/bluetooth/ContactListener.java
@@ -51,7 +51,7 @@ class ContactListener extends AbstractListener {
 		try {
 			discoveryAgent.searchServices(null, uuids, device, this);
 		} catch(BluetoothStateException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		searches.incrementAndGet();
 	}
diff --git a/components/net/sf/briar/plugins/bluetooth/InvitationListener.java b/components/net/sf/briar/plugins/bluetooth/InvitationListener.java
index e7f35bf16270300e03024c8ddddfc0f637fb110f..1dfa6b46eb39127751dbc71723d63dd485249d14 100644
--- a/components/net/sf/briar/plugins/bluetooth/InvitationListener.java
+++ b/components/net/sf/briar/plugins/bluetooth/InvitationListener.java
@@ -38,7 +38,7 @@ class InvitationListener extends AbstractListener {
 			discoveryAgent.searchServices(null, uuids, device, this);
 			searches.incrementAndGet();
 		} catch(BluetoothStateException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 
diff --git a/components/net/sf/briar/plugins/file/FilePlugin.java b/components/net/sf/briar/plugins/file/FilePlugin.java
index 40f579ff13b38ad29ed6c7d937ebca16f5b441ed..7b13fc8a166d904a1de67cd29b065536e916eb17 100644
--- a/components/net/sf/briar/plugins/file/FilePlugin.java
+++ b/components/net/sf/briar/plugins/file/FilePlugin.java
@@ -75,7 +75,7 @@ abstract class FilePlugin extends AbstractPlugin implements BatchPlugin {
 			OutputStream out = new FileOutputStream(f);
 			return new FileTransportWriter(f, out, capacity, this);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			f.delete();
 			return null;
 		}
@@ -136,7 +136,7 @@ abstract class FilePlugin extends AbstractPlugin implements BatchPlugin {
 				FileInputStream in = new FileInputStream(f);
 				return new FileTransportReader(f, in, FilePlugin.this);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		return null;
@@ -175,7 +175,7 @@ abstract class FilePlugin extends AbstractPlugin implements BatchPlugin {
 							FilePlugin.this));
 				} catch(IOException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 			}
 		}
diff --git a/components/net/sf/briar/plugins/file/FileTransportReader.java b/components/net/sf/briar/plugins/file/FileTransportReader.java
index a1996df84bae216154f0180aae20f44ad954c19c..679fc86ba9dca0ad9afc1076baa6d26508730fd3 100644
--- a/components/net/sf/briar/plugins/file/FileTransportReader.java
+++ b/components/net/sf/briar/plugins/file/FileTransportReader.java
@@ -31,7 +31,7 @@ class FileTransportReader implements BatchTransportReader {
 		try {
 			in.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		if(success) {
 			file.delete();
diff --git a/components/net/sf/briar/plugins/file/FileTransportWriter.java b/components/net/sf/briar/plugins/file/FileTransportWriter.java
index 427b708673d15f703889daf6f1c4f89400172dc4..2563e296298f39eeabd155bfd70ef7285922c6b6 100644
--- a/components/net/sf/briar/plugins/file/FileTransportWriter.java
+++ b/components/net/sf/briar/plugins/file/FileTransportWriter.java
@@ -38,7 +38,7 @@ class FileTransportWriter implements BatchTransportWriter {
 		try {
 			out.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		if(success) plugin.writerFinished(file);
 		else file.delete();
diff --git a/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java b/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
index b2412c46d0ce63aac2d470e3de607c0830cf3c3f..31b575aefc6cbd97e8198c3033a64527c296a5b0 100644
--- a/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
+++ b/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
@@ -83,7 +83,7 @@ implements RemovableDriveMonitor.Callback {
 			if(i == -1) return null;
 			return drives.get(i);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return null;
 		}
 	}
@@ -112,7 +112,7 @@ implements RemovableDriveMonitor.Callback {
 				}
 			}
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		return Collections.unmodifiableList(matches);
 	}
diff --git a/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java b/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java
index 7672cae66d3bd677907e82013611bf931301f6a1..4b3b408d2f255c719c9a8d21ee1f49be82d3a43e 100644
--- a/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java
+++ b/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java
@@ -23,7 +23,7 @@ class WindowsRemovableDriveFinder implements RemovableDriveFinder {
 				int type = Kernel32.INSTANCE.GetDriveType(root.getPath());
 				if(type == DRIVE_REMOVABLE) drives.add(root);
 			} catch(RuntimeException e) {
-				throw new IOException(e.getMessage());
+				throw new IOException(e.toString());
 			}
 		}
 		return Collections.unmodifiableList(drives);
diff --git a/components/net/sf/briar/plugins/socket/LanSocketPlugin.java b/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
index 751d0f1fb60e738c6cb2eb7d90461c0f94e5ddfe..d8016be741cfba5c7094c1f700de55f017647b3b 100644
--- a/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
@@ -47,13 +47,13 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			ms.setInterface(iface);
 			ms.joinGroup(mcast.getAddress());
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ms != null) {
 				try {
 					ms.leaveGroup(mcast.getAddress());
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 				ms.close();
 			}
@@ -82,7 +82,7 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 							return new SocketTransportConnection(s);
 						} catch(IOException e) {
 							if(LOG.isLoggable(Level.WARNING))
-								LOG.warning(e.getMessage());
+								LOG.warning(e.toString());
 						}
 					}
 				} catch(SocketTimeoutException e) {
@@ -93,11 +93,11 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			if(LOG.isLoggable(Level.INFO))
 				LOG.info("Timeout while sending invitation");
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			try {
 				ms.leaveGroup(mcast.getAddress());
 			} catch(IOException e1) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.toString());
 			}
 			ms.close();
 		}
@@ -148,13 +148,13 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			ss = new ServerSocket();
 			ss.bind(new InetSocketAddress(iface, 0));
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ss != null) {
 				try {
 					ss.close();
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 			}
 			return null;
@@ -166,13 +166,13 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			ms = new MulticastSocket();
 			ms.setInterface(iface);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ms != null) ms.close();
 			try {
 				ss.close();
 			} catch(IOException e1) {
 				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning(e1.getMessage());
+					LOG.warning(e1.toString());
 			}
 			return null;
 		}
@@ -205,14 +205,14 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			if(LOG.isLoggable(Level.INFO))
 				LOG.info("Timeout while accepting invitation");
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		} finally {
 			ms.close();
 			try {
 				ss.close();
 			} catch(IOException e1) {
 				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning(e1.getMessage());
+					LOG.warning(e1.toString());
 			}
 		}
 		return null;
diff --git a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
index c887005a6ee5f40c6bf3443bc8caaacc3cc5c6b8..bc650249eeb890a7dfd57961d948d79c8f4b5b25 100644
--- a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
@@ -71,7 +71,7 @@ class SimpleSocketPlugin extends SocketPlugin {
 			try {
 				return new InetSocketAddress(chooseInterface(false), 0);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		return addr;
diff --git a/components/net/sf/briar/plugins/socket/SocketPlugin.java b/components/net/sf/briar/plugins/socket/SocketPlugin.java
index e01ef0cf82e77855cb6521914bfeb36034ced3f2..552acc468773f95794b3a5853d1e6bd975d3d221 100644
--- a/components/net/sf/briar/plugins/socket/SocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SocketPlugin.java
@@ -65,13 +65,13 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 						+ ":" + ss.getLocalPort());
 			}
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ss != null) {
 				try {
 					ss.close();
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 			}
 			return;
@@ -82,7 +82,7 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 					ss.close();
 				} catch(IOException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 				return;
 			}
@@ -99,12 +99,12 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 				s = ss.accept();
 			} catch(IOException e) {
 				// This is expected when the socket is closed
-				if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+				if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 				try {
 					ss.close();
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 				return;
 			}
@@ -153,7 +153,7 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 			}
 			s.connect(addr);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+			if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 			return null;
 		}
 		return new SocketTransportConnection(s);
diff --git a/components/net/sf/briar/plugins/socket/SocketTransportConnection.java b/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
index 999e6e2be57b5f7c59ff47ccd9504047af5bdf82..242e5e3f3e6adb52986479461e16aed96a5658e2 100644
--- a/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
+++ b/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
@@ -32,7 +32,7 @@ class SocketTransportConnection implements StreamTransportConnection {
 		try {
 			socket.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java b/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java
index 09fca527316b59aced24860ecf1055c785cf52b6..dd28997d1ea6b122cf05bacbac0b55a9db222955 100644
--- a/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java
+++ b/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java
@@ -81,7 +81,7 @@ class IncomingBatchConnection {
 			}
 			transport.dispose(true);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			transport.dispose(false);
 		}
 	}
@@ -98,7 +98,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveAck(contactId, ack);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -116,7 +116,7 @@ class IncomingBatchConnection {
 				Batch b = batch.verify();
 				dbExecutor.execute(new ReceiveBatch(b));
 			} catch(GeneralSecurityException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -133,7 +133,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveBatch(contactId, batch);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -150,7 +150,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveSubscriptionUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -167,7 +167,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveTransportUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
diff --git a/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java b/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java
index 1d22b832009cf1ab72349745866f081fb086df1d..f58dc925eee9c607829e5db4b2b6a891b5c01265 100644
--- a/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java
+++ b/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java
@@ -92,10 +92,10 @@ class OutgoingBatchConnection {
 			out.flush();
 			transport.dispose(true);
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			transport.dispose(false);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			transport.dispose(false);
 		}
 	}
diff --git a/components/net/sf/briar/protocol/stream/StreamConnection.java b/components/net/sf/briar/protocol/stream/StreamConnection.java
index f91714c46b85adcff02f46e895dc65361dc5a9ed..5695ffca87941eed48905876654f334259a7a38a 100644
--- a/components/net/sf/briar/protocol/stream/StreamConnection.java
+++ b/components/net/sf/briar/protocol/stream/StreamConnection.java
@@ -168,10 +168,10 @@ abstract class StreamConnection implements DatabaseListener {
 			writerTasks.add(CLOSE);
 			if(!disposed.getAndSet(true)) transport.dispose(true);
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		}
 	}
@@ -205,14 +205,14 @@ abstract class StreamConnection implements DatabaseListener {
 			}
 			if(!disposed.getAndSet(true)) transport.dispose(true);
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} catch(InterruptedException e) {
 			if(LOG.isLoggable(Level.INFO))
 				LOG.info("Interrupted while waiting for task");
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} finally {
 			db.removeListener(this);
@@ -232,7 +232,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveAck(contactId, ack);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -251,7 +251,7 @@ abstract class StreamConnection implements DatabaseListener {
 				Batch b = batch.verify();
 				dbExecutor.execute(new ReceiveBatch(b));
 			} catch(GeneralSecurityException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -269,7 +269,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveBatch(contactId, batch);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -288,7 +288,7 @@ abstract class StreamConnection implements DatabaseListener {
 				Request r = db.receiveOffer(contactId, offer);
 				writerTasks.add(new WriteRequest(r));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -307,7 +307,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeRequest(request);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -326,7 +326,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.setSeen(contactId, seen);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -344,7 +344,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveSubscriptionUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -362,7 +362,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveTransportUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -377,7 +377,7 @@ abstract class StreamConnection implements DatabaseListener {
 				Ack a = db.generateAck(contactId, maxBatches);
 				if(a != null) writerTasks.add(new WriteAck(a));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -397,7 +397,7 @@ abstract class StreamConnection implements DatabaseListener {
 				writer.writeAck(ack);
 				dbExecutor.execute(new GenerateAcks());
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -420,7 +420,7 @@ abstract class StreamConnection implements DatabaseListener {
 				if(b == null) new GenerateOffer().run();
 				else writerTasks.add(new WriteBatch(b, requested));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -443,7 +443,7 @@ abstract class StreamConnection implements DatabaseListener {
 				if(requested.isEmpty()) dbExecutor.execute(new GenerateOffer());
 				else dbExecutor.execute(new GenerateBatches(requested));
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -467,7 +467,7 @@ abstract class StreamConnection implements DatabaseListener {
 					writerTasks.add(new WriteOffer(o));
 				}
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -486,7 +486,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeOffer(offer);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -500,7 +500,7 @@ abstract class StreamConnection implements DatabaseListener {
 				SubscriptionUpdate s = db.generateSubscriptionUpdate(contactId);
 				if(s != null) writerTasks.add(new WriteSubscriptionUpdate(s));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -519,7 +519,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeSubscriptionUpdate(update);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -533,7 +533,7 @@ abstract class StreamConnection implements DatabaseListener {
 				TransportUpdate t = db.generateTransportUpdate(contactId);
 				if(t != null) writerTasks.add(new WriteTransportUpdate(t));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -552,7 +552,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeTransportUpdate(update);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
diff --git a/components/net/sf/briar/setup/SetupWorker.java b/components/net/sf/briar/setup/SetupWorker.java
index 415031796a109cb389f8237c9e450b18d91e3f9b..54f8d2d3f49119c26e79dd334e134088e04968c4 100644
--- a/components/net/sf/briar/setup/SetupWorker.java
+++ b/components/net/sf/briar/setup/SetupWorker.java
@@ -87,7 +87,7 @@ class SetupWorker implements Runnable {
 			// Installation succeeded - delete the installer
 			jar.deleteOnExit();
 		} catch(IOException e) {
-			callback.error(e.getMessage());
+			callback.error(e.toString());
 			return;
 		}
 		if(callback.isCancelled()) return;
diff --git a/components/net/sf/briar/transport/ConnectionDispatcherImpl.java b/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
index e9be62a634ce45f3d851ecc590e0a46b4f0bfbf8..3e4763cf56fd153d7562ccc304401592cef0da4a 100644
--- a/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
+++ b/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
@@ -92,10 +92,10 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
 				if(ctx == null) r.dispose(true);
 				else batchConnFactory.createIncomingConnection(ctx, r, tag);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				r.dispose(false);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				r.dispose(false);
 			}
 		}
@@ -119,10 +119,10 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
 				if(ctx == null) s.dispose(true);
 				else streamConnFactory.createIncomingConnection(ctx, s, tag);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				s.dispose(false);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				s.dispose(false);
 			}
 		}
diff --git a/components/net/sf/briar/transport/ConnectionRecogniserImpl.java b/components/net/sf/briar/transport/ConnectionRecogniserImpl.java
index c5c29d9ef1a469f86e6990e48a710f16ace402a6..81753d7d72b0962778b41ef9069bf3ccdd41856e 100644
--- a/components/net/sf/briar/transport/ConnectionRecogniserImpl.java
+++ b/components/net/sf/briar/transport/ConnectionRecogniserImpl.java
@@ -206,7 +206,7 @@ DatabaseListener {
 				}
 			}
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		localTransportIds.add(t);
@@ -234,7 +234,7 @@ DatabaseListener {
 			// The contact was removed - clean up in removeContact()
 			return;
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		// Remove the old IVs
diff --git a/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java b/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java
index c37aa73b5b94a49aa44ff0dbd8642660e442fdc9..40da955372e785bb142aeec6a3b572be8da8ab12 100644
--- a/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java
+++ b/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java
@@ -20,7 +20,7 @@ implements BatchTransportWriter {
 	}
 
 	public long getCapacity() {
-		return capacity - out.size();
+		return capacity;
 	}
 
 	public OutputStream getOutputStream() {