diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/UnsupportedVersionException.java b/bramble-api/src/main/java/org/briarproject/bramble/api/UnsupportedVersionException.java
new file mode 100644
index 0000000000000000000000000000000000000000..827f33e161a75490936b7e59a81439ccbd487248
--- /dev/null
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/UnsupportedVersionException.java
@@ -0,0 +1,18 @@
+package org.briarproject.bramble.api;
+
+/**
+ * Thrown when data being parsed uses a protocol or format version that is not
+ * supported.
+ */
+public class UnsupportedVersionException extends FormatException {
+
+	private final boolean tooOld;
+
+	public UnsupportedVersionException(boolean tooOld) {
+		this.tooOld = tooOld;
+	}
+
+	public boolean isTooOld() {
+		return tooOld;
+	}
+}
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/keyagreement/UnsupportedVersionException.java b/bramble-api/src/main/java/org/briarproject/bramble/api/keyagreement/UnsupportedVersionException.java
deleted file mode 100644
index 3f861d83b7bab48a840d9e37d074c17416a003ad..0000000000000000000000000000000000000000
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/keyagreement/UnsupportedVersionException.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.briarproject.bramble.api.keyagreement;
-
-import java.io.IOException;
-
-/**
- * Thrown when a QR code that has been scanned uses a protocol version that is
- * not supported.
- */
-public class UnsupportedVersionException extends IOException {
-
-	private final boolean tooOld;
-
-	public UnsupportedVersionException(boolean tooOld) {
-		this.tooOld = tooOld;
-	}
-
-	public boolean isTooOld() {
-		return tooOld;
-	}
-}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java
index 2f60967606515736f2b4bc5738e68ebc7a3b023c..f574360a7eb2d867fb28d702c56fc23b2b06b491 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java
@@ -1,13 +1,13 @@
 package org.briarproject.bramble.keyagreement;
 
 import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.UnsupportedVersionException;
 import org.briarproject.bramble.api.data.BdfList;
 import org.briarproject.bramble.api.data.BdfReader;
 import org.briarproject.bramble.api.data.BdfReaderFactory;
 import org.briarproject.bramble.api.keyagreement.Payload;
 import org.briarproject.bramble.api.keyagreement.PayloadParser;
 import org.briarproject.bramble.api.keyagreement.TransportDescriptor;
-import org.briarproject.bramble.api.keyagreement.UnsupportedVersionException;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.plugin.BluetoothConstants;
 import org.briarproject.bramble.api.plugin.LanTcpConstants;
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/PayloadParserImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/PayloadParserImplTest.java
index 3b072547f82c07da422f6ad6ee6b2ccb368164f3..f9d74e081ffeff4ff5ebf2677b501b5312deb3db 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/PayloadParserImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/PayloadParserImplTest.java
@@ -2,11 +2,11 @@ package org.briarproject.bramble.keyagreement;
 
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.UnsupportedVersionException;
 import org.briarproject.bramble.api.data.BdfList;
 import org.briarproject.bramble.api.data.BdfReader;
 import org.briarproject.bramble.api.data.BdfReaderFactory;
 import org.briarproject.bramble.api.keyagreement.Payload;
-import org.briarproject.bramble.api.keyagreement.UnsupportedVersionException;
 import org.briarproject.bramble.test.BrambleMockTestCase;
 import org.jmock.Expectations;
 import org.junit.Test;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementFragment.java
index 16870836759d5fca4810e40e70daa37ed9c649bc..e2b4491269b1fe1a67585181ea693d07fe60561c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementFragment.java
@@ -15,6 +15,7 @@ import android.widget.Toast;
 
 import com.google.zxing.Result;
 
+import org.briarproject.bramble.api.UnsupportedVersionException;
 import org.briarproject.bramble.api.event.Event;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.keyagreement.KeyAgreementResult;
@@ -22,7 +23,6 @@ import org.briarproject.bramble.api.keyagreement.KeyAgreementTask;
 import org.briarproject.bramble.api.keyagreement.Payload;
 import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
 import org.briarproject.bramble.api.keyagreement.PayloadParser;
-import org.briarproject.bramble.api.keyagreement.UnsupportedVersionException;
 import org.briarproject.bramble.api.keyagreement.event.KeyAgreementAbortedEvent;
 import org.briarproject.bramble.api.keyagreement.event.KeyAgreementFailedEvent;
 import org.briarproject.bramble.api.keyagreement.event.KeyAgreementFinishedEvent;