diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/properties/TransportPropertyManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/properties/TransportPropertyManager.java
index 8a8ec4dad2c1be9929e872e8600657781b1c9a36..a634bfaa74abac3057cdb548e01c4f8dee5e85d3 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/properties/TransportPropertyManager.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/properties/TransportPropertyManager.java
@@ -22,6 +22,11 @@ public interface TransportPropertyManager {
 	 */
 	int MAJOR_VERSION = 0;
 
+	/**
+	 * The current minor version of the transport property client.
+	 */
+	int MINOR_VERSION = 0;
+
 	/**
 	 * Stores the given properties received while adding a contact - they will
 	 * be superseded by any properties synced from the contact.
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java
index d2a9dac37cec5ccaf13b24ac4f652efd9da69f62..b8be969f48f92f69e6651884caee50e26b003f4a 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java
@@ -25,7 +25,7 @@ public interface ClientVersioningManager {
 	 * Registers a client that will be advertised to contacts. This method
 	 * should be called before {@link LifecycleManager#startServices(String)}.
 	 */
-	void registerClient(ClientId clientId, int majorVersion);
+	void registerClient(ClientId clientId, int majorVersion, int minorVersion);
 
 	/**
 	 * Registers a hook that will be called when the visibility of the given
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java b/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java
index 763e0d636d9bc286e3723e2d3e7743a988fa114b..d2d1b6324bbd1d146f2c98816f9171f0f57b0250 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java
@@ -17,6 +17,7 @@ import dagger.Provides;
 
 import static org.briarproject.bramble.api.properties.TransportPropertyManager.CLIENT_ID;
 import static org.briarproject.bramble.api.properties.TransportPropertyManager.MAJOR_VERSION;
+import static org.briarproject.bramble.api.properties.TransportPropertyManager.MINOR_VERSION;
 
 @Module
 public class PropertiesModule {
@@ -51,7 +52,8 @@ public class PropertiesModule {
 		validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
 				transportPropertyManager);
 		contactManager.registerContactHook(transportPropertyManager);
-		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION);
+		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION,
+				MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(CLIENT_ID,
 				MAJOR_VERSION, transportPropertyManager);
 		return transportPropertyManager;
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
index 39738122088aee1ffee8189b1f713adc6dad9089..bd2d85b03819f486cbb355442ac5893563c26034 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersion.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersion.java
@@ -33,15 +33,10 @@ class ClientVersion implements Comparable<ClientVersion> {
 	}
 
 	@Override
-	public int compareTo(ClientVersion c) {
-		int compare = clientId.compareTo(c.clientId);
+	public int compareTo(ClientVersion cv) {
+		int compare = clientId.compareTo(cv.clientId);
 		if (compare != 0) return compare;
-		return majorVersion - c.majorVersion;
-	}
-
-	@Override
-	public String toString() {
-		return clientId.getString() + ":" + majorVersion;
+		return majorVersion - cv.majorVersion;
 	}
 }
 
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 7c4b670a2098f4c11a0c6620f93b04f30081bb13..653b72af534558fbdfc0c40bdaaf5cb32730039b 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
@@ -61,7 +61,7 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 	private final Clock clock;
 	private final Group localGroup;
 
-	private final Collection<ClientVersion> clients =
+	private final List<ClientMinorVersion> clients =
 			new CopyOnWriteArrayList<>();
 	private final Map<ClientVersion, ClientVersioningHook> hooks =
 			new ConcurrentHashMap<>();
@@ -79,8 +79,10 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 	}
 
 	@Override
-	public void registerClient(ClientId clientId, int majorVersion) {
-		clients.add(new ClientVersion(clientId, majorVersion));
+	public void registerClient(ClientId clientId, int majorVersion,
+			int minorVersion) {
+		clients.add(new ClientMinorVersion(clientId, majorVersion,
+				minorVersion));
 	}
 
 	@Override
@@ -124,7 +126,7 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 
 	@Override
 	public void startService() throws ServiceException {
-		List<ClientVersion> versions = new ArrayList<>(clients);
+		List<ClientMinorVersion> versions = new ArrayList<>(clients);
 		Collections.sort(versions);
 		try {
 			Transaction txn = db.startTransaction(false);
@@ -161,7 +163,7 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 			throw new AssertionError(e);
 		}
 		// Create and store the first local update
-		List<ClientVersion> versions = new ArrayList<>(clients);
+		List<ClientMinorVersion> versions = new ArrayList<>(clients);
 		Collections.sort(versions);
 		storeFirstUpdate(txn, g.getId(), versions);
 	}
@@ -230,7 +232,7 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 	}
 
 	private void storeClientVersions(Transaction txn,
-			List<ClientVersion> versions) throws DbException {
+			List<ClientMinorVersion> versions) throws DbException {
 		long now = clock.currentTimeMillis();
 		BdfList body = encodeClientVersions(versions);
 		try {
@@ -242,30 +244,35 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 		}
 	}
 
-	private BdfList encodeClientVersions(List<ClientVersion> versions) {
+	private BdfList encodeClientVersions(List<ClientMinorVersion> versions) {
 		BdfList encoded = new BdfList();
-		for (ClientVersion cv : versions)
-			encoded.add(BdfList.of(cv.clientId.getString(), cv.majorVersion));
+		for (ClientMinorVersion cm : versions)
+			encoded.add(encodeClientVersion(cm));
 		return encoded;
 	}
 
+	private BdfList encodeClientVersion(ClientMinorVersion cm) {
+		return BdfList.of(cm.version.clientId.getString(),
+				cm.version.majorVersion, cm.minorVersion);
+	}
+
 	private boolean updateClientVersions(Transaction txn,
-			List<ClientVersion> newVersions) throws DbException {
+			List<ClientMinorVersion> newVersions) throws DbException {
 		Collection<MessageId> ids = db.getMessageIds(txn, localGroup.getId());
 		if (ids.isEmpty()) {
 			storeClientVersions(txn, newVersions);
 			return true;
 		}
 		MessageId m = ids.iterator().next();
-		List<ClientVersion> oldVersions = loadClientVersions(txn, m);
+		List<ClientMinorVersion> oldVersions = loadClientVersions(txn, m);
 		if (oldVersions.equals(newVersions)) return false;
 		db.removeMessage(txn, m);
 		storeClientVersions(txn, newVersions);
 		return true;
 	}
 
-	private List<ClientVersion> loadClientVersions(Transaction txn, MessageId m)
-			throws DbException {
+	private List<ClientMinorVersion> loadClientVersions(Transaction txn,
+			MessageId m) throws DbException {
 		try {
 			BdfList body = clientHelper.getMessageAsList(txn, m);
 			if (body == null) throw new DbException();
@@ -275,21 +282,23 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 		}
 	}
 
-	private List<ClientVersion> parseClientVersions(BdfList body)
+	private List<ClientMinorVersion> parseClientVersions(BdfList body)
 			throws FormatException {
 		int size = body.size();
-		List<ClientVersion> parsed = new ArrayList<>(size);
+		List<ClientMinorVersion> parsed = new ArrayList<>(size);
 		for (int i = 0; i < size; i++) {
 			BdfList cv = body.getList(i);
 			ClientId clientId = new ClientId(cv.getString(0));
 			int majorVersion = cv.getLong(1).intValue();
-			parsed.add(new ClientVersion(clientId, majorVersion));
+			int minorVersion = cv.getLong(2).intValue();
+			parsed.add(new ClientMinorVersion(clientId, majorVersion,
+					minorVersion));
 		}
 		return parsed;
 	}
 
 	private void clientVersionsUpdated(Transaction txn, Contact c,
-			List<ClientVersion> versions) throws DbException {
+			List<ClientMinorVersion> versions) throws DbException {
 		try {
 			// Find the latest local and remote updates
 			Group g = getContactGroup(c);
@@ -372,11 +381,12 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 
 	private ClientState parseClientState(BdfList clientState)
 			throws FormatException {
-		// Client ID, major version, active
+		// Client ID, major version, minor version, active
 		ClientId clientId = new ClientId(clientState.getString(0));
 		int majorVersion = clientState.getLong(1).intValue();
-		boolean active = clientState.getBoolean(2);
-		return new ClientState(clientId, majorVersion, active);
+		int minorVersion = clientState.getLong(2).intValue();
+		boolean active = clientState.getBoolean(3);
+		return new ClientState(clientId, majorVersion, minorVersion, active);
 	}
 
 	private long parseUpdateVersion(BdfList body) throws FormatException {
@@ -385,14 +395,15 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 	}
 
 	private List<ClientState> updateStatesFromLocalVersions(
-			List<ClientState> oldStates, List<ClientVersion> newVersions) {
+			List<ClientState> oldStates, List<ClientMinorVersion> newVersions) {
 		Map<ClientVersion, ClientState> oldMap = new HashMap<>();
 		for (ClientState cs : oldStates) oldMap.put(cs.version, cs);
 		List<ClientState> newStates = new ArrayList<>(newVersions.size());
-		for (ClientVersion newVersion : newVersions) {
-			ClientState oldState = oldMap.get(newVersion);
+		for (ClientMinorVersion newVersion : newVersions) {
+			ClientState oldState = oldMap.get(newVersion.version);
 			boolean active = oldState != null && oldState.active;
-			newStates.add(new ClientState(newVersion, active));
+			newStates.add(new ClientState(newVersion.version,
+					newVersion.minorVersion, active));
 		}
 		return newStates;
 	}
@@ -420,7 +431,7 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 
 	private BdfList encodeClientState(ClientState cs) {
 		return BdfList.of(cs.version.clientId.getString(),
-				cs.version.majorVersion, cs.active);
+				cs.version.majorVersion, cs.minorVersion, cs.active);
 	}
 
 	private Map<ClientVersion, Visibility> getVisibilities(
@@ -461,10 +472,10 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 	}
 
 	private void storeFirstUpdate(Transaction txn, GroupId g,
-			List<ClientVersion> versions) throws DbException {
+			List<ClientMinorVersion> versions) throws DbException {
 		List<ClientState> states = new ArrayList<>(versions.size());
-		for (ClientVersion cv : versions)
-			states.add(new ClientState(cv, false));
+		for (ClientMinorVersion cm : versions)
+			states.add(new ClientState(cm.version, cm.minorVersion, false));
 		storeUpdate(txn, g, states, 1);
 	}
 
@@ -487,7 +498,8 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 				new ArrayList<>(oldLocalStates.size());
 		for (ClientState oldState : oldLocalStates) {
 			boolean active = remoteSet.contains(oldState.version);
-			newLocalStates.add(new ClientState(oldState.version, active));
+			newLocalStates.add(new ClientState(oldState.version,
+					oldState.minorVersion, active));
 		}
 		return newLocalStates;
 	}
@@ -526,26 +538,71 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client,
 		}
 	}
 
+	private static class ClientMinorVersion
+			implements Comparable<ClientMinorVersion> {
+
+		private final ClientVersion version;
+		private final int minorVersion;
+
+		private ClientMinorVersion(ClientVersion version, int minorVersion) {
+			this.version = version;
+			this.minorVersion = minorVersion;
+		}
+
+		private ClientMinorVersion(ClientId clientId, int majorVersion,
+				int minorVersion) {
+			this(new ClientVersion(clientId, majorVersion), minorVersion);
+		}
+
+		@Override
+		public boolean equals(Object o) {
+			if (o instanceof ClientMinorVersion) {
+				ClientMinorVersion cm = (ClientMinorVersion) o;
+				return version.equals(cm.version)
+						&& minorVersion == cm.minorVersion;
+			}
+			return false;
+		}
+
+		@Override
+		public int hashCode() {
+			return version.hashCode();
+		}
+
+		@Override
+		public int compareTo(ClientMinorVersion cm) {
+			int compare = version.compareTo(cm.version);
+			if (compare != 0) return compare;
+			return minorVersion - cm.minorVersion;
+		}
+	}
+
 	private static class ClientState {
 
 		private final ClientVersion version;
+		private final int minorVersion;
 		private final boolean active;
 
-		private ClientState(ClientVersion version, boolean active) {
+		private ClientState(ClientVersion version, int minorVersion,
+				boolean active) {
 			this.version = version;
+			this.minorVersion = minorVersion;
 			this.active = active;
 		}
 
 		private ClientState(ClientId clientId, int majorVersion,
-				boolean active) {
-			this(new ClientVersion(clientId, majorVersion), active);
+				int minorVersion, boolean active) {
+			this(new ClientVersion(clientId, majorVersion), minorVersion,
+					active);
 		}
 
 		@Override
 		public boolean equals(Object o) {
 			if (o instanceof ClientState) {
 				ClientState cs = (ClientState) o;
-				return version.equals(cs.version) && active == cs.active;
+				return version.equals(cs.version)
+						&& minorVersion == cs.minorVersion
+						&& active == cs.active;
 			}
 			return false;
 		}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningValidator.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningValidator.java
index 7306f22c50c97c8ecfa409fb3b3747fb265559e7..55e0383bfc2d891752674cebb3d9d6e38500209e 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningValidator.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningValidator.java
@@ -39,13 +39,15 @@ class ClientVersioningValidator extends BdfMessageValidator {
 		int size = states.size();
 		for (int i = 0; i < size; i++) {
 			BdfList clientState = states.getList(i);
-			// Client ID, major version, active
-			checkSize(clientState, 3);
+			// Client ID, major version, minor version, active
+			checkSize(clientState, 4);
 			String clientId = clientState.getString(0);
 			checkLength(clientId, 1, MAX_CLIENT_ID_LENGTH);
 			int majorVersion = clientState.getLong(1).intValue();
 			if (majorVersion < 0) throw new FormatException();
-			clientState.getBoolean(2);
+			int minorVersion = clientState.getLong(2).intValue();
+			if (minorVersion < 0) throw new FormatException();
+			clientState.getBoolean(3);
 		}
 		// Update version
 		long updateVersion = body.getLong(1);
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java
index c32f16736eda5f71d713bc0acfa4163eca4042f2..5381dd4901275e88f5c718484dafc751e72dbfe5 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java
@@ -26,6 +26,11 @@ public interface BlogManager {
 	 */
 	int MAJOR_VERSION = 0;
 
+	/**
+	 * The current minor version of the blog client.
+	 */
+	int MINOR_VERSION = 0;
+
 	/**
 	 * Adds the given {@link Blog).}
 	 */
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogSharingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogSharingManager.java
index 2e4a02d3bff2f80767ae7bb156234eec0b180211..f2f04afc54939a91c15e71b3c3d18e1ec0723f6c 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogSharingManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogSharingManager.java
@@ -14,4 +14,9 @@ public interface BlogSharingManager extends SharingManager<Blog> {
 	 * The current major version of the blog sharing client.
 	 */
 	int MAJOR_VERSION = 0;
+
+	/**
+	 * The current minor version of the blog sharing client.
+	 */
+	int MINOR_VERSION = 0;
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java
index 0d67a9c4267318e582da8f51cbab1cd2483674b0..96f44777680116348bf6eb5fe25d891376336b56 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java
@@ -27,6 +27,11 @@ public interface ForumManager {
 	 */
 	int MAJOR_VERSION = 0;
 
+	/**
+	 * The current minor version of the forum client.
+	 */
+	int MINOR_VERSION = 0;
+
 	/**
 	 * Subscribes to a forum.
 	 */
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumSharingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumSharingManager.java
index c021a23a9c9cd9267b9672f6ed5ea08f0b78534a..29b2468d0f1c396b11c609013a97ad2a241579a0 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumSharingManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumSharingManager.java
@@ -14,4 +14,9 @@ public interface ForumSharingManager extends SharingManager<Forum> {
 	 * The current major version of the forum sharing client.
 	 */
 	int MAJOR_VERSION = 0;
+
+	/**
+	 * The current minor version of the forum sharing client.
+	 */
+	int MINOR_VERSION = 0;
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
index c337dd44ca5506581d7f7d1dd589fc7824ddad3c..532d633539e3e33b89a386383e9d9cc79122395f 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
@@ -30,6 +30,11 @@ public interface IntroductionManager extends ConversationClient {
 	 */
 	boolean canIntroduce(Contact c1, Contact c2) throws DbException;
 
+	/**
+	 * The current minor version of the introduction client.
+	 */
+	int MINOR_VERSION = 0;
+
 	/**
 	 * Sends two initial introduction messages.
 	 */
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java
index be28aaa7bb9a132adc719d7ddf296d2e921acd9f..f29d2c9e451468169d15dbcfb177fe779aac3329 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java
@@ -23,6 +23,11 @@ public interface MessagingManager extends ConversationClient {
 	 */
 	int MAJOR_VERSION = 0;
 
+	/**
+	 * The current minor version of the messaging client.
+	 */
+	int MINOR_VERSION = 0;
+
 	/**
 	 * Stores a local private message.
 	 */
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java
index 4034c4d613caaaefef477a36c570aff4433aa386..de4caecfc6a15d91e0eb130efbdb474800ffbfeb 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java
@@ -26,6 +26,11 @@ public interface PrivateGroupManager {
 	 */
 	int MAJOR_VERSION = 0;
 
+	/**
+	 * The current minor version of the private group client.
+	 */
+	int MINOR_VERSION = 0;
+
 	/**
 	 * Adds a new private group and joins it.
 	 *
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java
index e510c6dec652f61e3fec30e12559a9458fb5f3e9..1062d0ce1127f828425532cb56fd504ea6e89380 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java
@@ -30,6 +30,11 @@ public interface GroupInvitationManager extends ConversationClient {
 	 */
 	int MAJOR_VERSION = 0;
 
+	/**
+	 * The current minor version of the private group invitation client.
+	 */
+	int MINOR_VERSION = 0;
+
 	/**
 	 * Sends an invitation to share the given private group with the given
 	 * contact, including an optional message.
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java
index 1f3c7d7a56ccb5300abd5eff093eb350872c82e5..17d08cd185c3379c95a0c3656f1f717cb91367d7 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java
@@ -18,6 +18,7 @@ import dagger.Provides;
 
 import static org.briarproject.briar.api.introduction.IntroductionManager.CLIENT_ID;
 import static org.briarproject.briar.api.introduction.IntroductionManager.MAJOR_VERSION;
+import static org.briarproject.briar.api.introduction.IntroductionManager.MINOR_VERSION;
 
 @Module
 public class IntroductionModule {
@@ -55,7 +56,8 @@ public class IntroductionModule {
 		validationManager.registerIncomingMessageHook(CLIENT_ID,
 				MAJOR_VERSION, introductionManager);
 		conversationManager.registerConversationClient(introductionManager);
-		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION);
+		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION,
+				MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(CLIENT_ID,
 				MAJOR_VERSION, introductionManager);
 		return introductionManager;
diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java
index 0916a942668492ff063bdb9811df7d1e6f40e224..8363ef3931109cf7509f560b86288bb98ade408e 100644
--- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java
+++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java
@@ -19,6 +19,7 @@ import dagger.Provides;
 
 import static org.briarproject.briar.api.messaging.MessagingManager.CLIENT_ID;
 import static org.briarproject.briar.api.messaging.MessagingManager.MAJOR_VERSION;
+import static org.briarproject.briar.api.messaging.MessagingManager.MINOR_VERSION;
 
 @Module
 public class MessagingModule {
@@ -62,7 +63,8 @@ public class MessagingModule {
 		validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION,
 				messagingManager);
 		conversationManager.registerConversationClient(messagingManager);
-		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION);
+		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION,
+				MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(CLIENT_ID,
 				MAJOR_VERSION, messagingManager);
 		return messagingManager;
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java
index f00192af7ed4dfeec03df5b2fdcc922cad735dff..03f0ed6788bb7bba9ea01163dde88f4646826cc4 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java
@@ -21,6 +21,7 @@ import dagger.Provides;
 
 import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.CLIENT_ID;
 import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.MAJOR_VERSION;
+import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.MINOR_VERSION;
 
 @Module
 public class GroupInvitationModule {
@@ -47,13 +48,15 @@ public class GroupInvitationModule {
 		contactManager.registerContactHook(groupInvitationManager);
 		privateGroupManager.registerPrivateGroupHook(groupInvitationManager);
 		conversationManager.registerConversationClient(groupInvitationManager);
-		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION);
+		clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION,
+				MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(CLIENT_ID,
 				MAJOR_VERSION, groupInvitationManager);
 		// The group invitation manager handles client visibility changes for
 		// the private group manager
 		clientVersioningManager.registerClient(PrivateGroupManager.CLIENT_ID,
-				PrivateGroupManager.MAJOR_VERSION);
+				PrivateGroupManager.MAJOR_VERSION,
+				PrivateGroupManager.MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(
 				PrivateGroupManager.CLIENT_ID,
 				PrivateGroupManager.MAJOR_VERSION,
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java
index 921ab756986cd66c8b6c994d163de19cbfe82cbc..b58bc246ab28fbe7f277ba5022423e5384ebec71 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java
@@ -84,14 +84,15 @@ public class SharingModule {
 		conversationManager.registerConversationClient(blogSharingManager);
 		blogManager.registerRemoveBlogHook(blogSharingManager);
 		clientVersioningManager.registerClient(BlogSharingManager.CLIENT_ID,
-				BlogSharingManager.MAJOR_VERSION);
+				BlogSharingManager.MAJOR_VERSION,
+				BlogSharingManager.MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(
 				BlogSharingManager.CLIENT_ID, BlogSharingManager.MAJOR_VERSION,
 				blogSharingManager);
 		// The blog sharing manager handles client visibility changes for the
 		// blog manager
 		clientVersioningManager.registerClient(BlogManager.CLIENT_ID,
-				BlogManager.MAJOR_VERSION);
+				BlogManager.MAJOR_VERSION, BlogManager.MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(
 				BlogManager.CLIENT_ID, BlogManager.MAJOR_VERSION,
 				blogSharingManager.getShareableClientVersioningHook());
@@ -147,14 +148,15 @@ public class SharingModule {
 		conversationManager.registerConversationClient(forumSharingManager);
 		forumManager.registerRemoveForumHook(forumSharingManager);
 		clientVersioningManager.registerClient(ForumSharingManager.CLIENT_ID,
-				ForumSharingManager.MAJOR_VERSION);
+				ForumSharingManager.MAJOR_VERSION,
+				ForumSharingManager.MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(
 				ForumSharingManager.CLIENT_ID,
 				ForumSharingManager.MAJOR_VERSION, forumSharingManager);
 		// The forum sharing manager handles client visibility changes for the
 		// forum manager
 		clientVersioningManager.registerClient(ForumManager.CLIENT_ID,
-				ForumManager.MAJOR_VERSION);
+				ForumManager.MAJOR_VERSION, ForumManager.MINOR_VERSION);
 		clientVersioningManager.registerClientVersioningHook(
 				ForumManager.CLIENT_ID, ForumManager.MAJOR_VERSION,
 				forumSharingManager.getShareableClientVersioningHook());