diff --git a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java
index 489e51a5917bc5f477cef44bd6ff2d71d82d9218..2a4d4539f382870bd20b4ac66078a8c0fb88f9a5 100644
--- a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java
+++ b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java
@@ -42,6 +42,12 @@ public interface GroupInvitationManager {
 	void respondToInvitation(ContactId c, SessionId s, boolean accept)
 			throws DbException;
 
+	/**
+	 * Makes the user's relationship with the given contact visible to the
+	 * given private group.
+	 */
+	void revealRelationship(ContactId c, GroupId g) throws DbException;
+
 	/**
 	 * Returns all private group invitation messages related to the given
 	 * contact.
diff --git a/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java
index ae11b48b850f13154046c447614061e910e8dd4c..bc6dd88f6d9b1e9db6f128b15099b95b3597407e 100644
--- a/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java
+++ b/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java
@@ -315,6 +315,30 @@ class GroupInvitationManagerImpl extends ConversationClientImpl
 		}
 	}
 
+	@Override
+	public void revealRelationship(ContactId c, GroupId g) throws DbException {
+		Transaction txn = db.startTransaction(false);
+		try {
+			// Look up the session
+			Contact contact = db.getContact(txn, c);
+			GroupId contactGroupId = getContactGroup(contact).getId();
+			StoredSession ss = getSession(txn, contactGroupId, getSessionId(g));
+			if (ss == null) throw new IllegalArgumentException();
+			// Parse the session
+			PeerSession session = sessionParser
+					.parsePeerSession(contactGroupId, ss.bdfSession);
+			// Handle the join action
+			session = peerEngine.onJoinAction(txn, session);
+			// Store the updated session
+			storeSession(txn, ss.storageId, session);
+			db.commitTransaction(txn);
+		} catch (FormatException e) {
+			throw new DbException(e);
+		} finally {
+			db.endTransaction(txn);
+		}
+	}
+
 	private <S extends Session> S handleAction(Transaction txn,
 			LocalAction type, S session, ProtocolEngine<S> engine)
 			throws DbException, FormatException {