diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersion.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersion.java
new file mode 100644
index 0000000000000000000000000000000000000000..36a51a4e3edd6c7f4e038c1bcb6d3b00140dbf17
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersion.java
@@ -0,0 +1,42 @@
+package org.briarproject.bramble.sync;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.ClientId;
+
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
+class ClientVersion implements Comparable<ClientVersion> {
+
+	final ClientId clientId;
+	final int clientVersion;
+
+	ClientVersion(ClientId clientId, int clientVersion) {
+		this.clientId = clientId;
+		this.clientVersion = clientVersion;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (o instanceof ClientVersion) {
+			ClientVersion cv = (ClientVersion) o;
+			return clientId.equals(cv.clientId)
+					&& clientVersion == cv.clientVersion;
+		}
+		return false;
+	}
+
+	@Override
+	public int hashCode() {
+		return (clientId.hashCode() << 16) + clientVersion;
+	}
+
+	@Override
+	public int compareTo(ClientVersion c) {
+		int compare = clientId.compareTo(c.clientId);
+		if (compare != 0) return compare;
+		return clientVersion - c.clientVersion;
+	}
+}
+
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java
index 9cb4d9c63f647815353d77480b1e58f74ebc0135..5594ac5e57331ec89a5d20a5045aca91dc519ee6 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java
@@ -501,39 +501,6 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 		}
 	}
 
-	private static class ClientVersion implements Comparable<ClientVersion> {
-
-		private final ClientId clientId;
-		private final int clientVersion;
-
-		private ClientVersion(ClientId clientId, int clientVersion) {
-			this.clientId = clientId;
-			this.clientVersion = clientVersion;
-		}
-
-		@Override
-		public boolean equals(Object o) {
-			if (o instanceof ClientVersion) {
-				ClientVersion cv = (ClientVersion) o;
-				return clientId.equals(cv.clientId)
-						&& clientVersion == cv.clientVersion;
-			}
-			return false;
-		}
-
-		@Override
-		public int hashCode() {
-			return (clientId.hashCode() << 16) + clientVersion;
-		}
-
-		@Override
-		public int compareTo(ClientVersion c) {
-			int compare = clientId.compareTo(c.clientId);
-			if (compare != 0) return compare;
-			return clientVersion - c.clientVersion;
-		}
-	}
-
 	private static class ClientState {
 
 		private final ClientVersion version;