diff --git a/briar-android/src/org/briarproject/android/forum/ForumInvitationAdapter.java b/briar-android/src/org/briarproject/android/forum/ForumInvitationAdapter.java
index 23e24b7e1494de5e919aa29691b89d267dffea85..28ef9e2f1c042c139567e106d0e4b8f9d6c3175c 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumInvitationAdapter.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumInvitationAdapter.java
@@ -12,6 +12,7 @@ import android.widget.TextView;
 import org.briarproject.R;
 import org.briarproject.android.util.TextAvatarView;
 import org.briarproject.api.contact.Contact;
+import org.briarproject.api.forum.ForumSharingMessage;
 import org.briarproject.util.StringUtils;
 
 import java.util.ArrayList;
@@ -94,6 +95,10 @@ class ForumInvitationAdapter extends
 		forums.addAll(list);
 	}
 
+	public void remove(ForumInvitationItem item) {
+		forums.remove(item);
+	}
+
 	public void clear() {
 		forums.clear();
 	}
@@ -154,7 +159,7 @@ class ForumInvitationAdapter extends
 		@Override
 		public boolean areContentsTheSame(ForumInvitationItem oldItem,
 				ForumInvitationItem newItem) {
-			return oldItem.getForum().equals(newItem.getForum()) &&
+			return oldItem.isSubscribed() == newItem.isSubscribed() &&
 					oldItem.getContacts().equals(newItem.getContacts());
 		}
 
diff --git a/briar-android/src/org/briarproject/android/forum/ForumInvitationsActivity.java b/briar-android/src/org/briarproject/android/forum/ForumInvitationsActivity.java
index 24436eb81efada0c75f0072b4876975f758d814b..fd3e24196be8434a274550368b44b72a7f75be3d 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumInvitationsActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumInvitationsActivity.java
@@ -71,10 +71,17 @@ public class ForumInvitationsActivity extends BriarActivity
 	public void onResume() {
 		super.onResume();
 		eventBus.addListener(this);
-		loadForums();
+		loadForums(false);
 	}
 
-	private void loadForums() {
+	@Override
+	public void onPause() {
+		super.onPause();
+		eventBus.removeListener(this);
+		adapter.clear();
+	}
+
+	private void loadForums(final boolean clear) {
 		runOnDbThread(new Runnable() {
 			@Override
 			public void run() {
@@ -97,7 +104,7 @@ public class ForumInvitationsActivity extends BriarActivity
 					long duration = System.currentTimeMillis() - now;
 					if (LOG.isLoggable(INFO))
 						LOG.info("Load took " + duration + " ms");
-					displayForums(forums);
+					displayForums(forums, clear);
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
@@ -106,7 +113,8 @@ public class ForumInvitationsActivity extends BriarActivity
 		});
 	}
 
-	private void displayForums(final Collection<ForumInvitationItem> forums) {
+	private void displayForums(final Collection<ForumInvitationItem> forums,
+			final boolean clear) {
 		runOnUiThread(new Runnable() {
 			@Override
 			public void run() {
@@ -114,39 +122,33 @@ public class ForumInvitationsActivity extends BriarActivity
 					LOG.info("No forums available, finishing");
 					finish();
 				} else {
-					adapter.clear();
+					if (clear) adapter.clear();
 					adapter.addAll(forums);
 				}
 			}
 		});
 	}
 
-	@Override
-	public void onPause() {
-		super.onPause();
-		eventBus.removeListener(this);
-	}
-
 	@Override
 	public void eventOccurred(Event e) {
 		if (e instanceof ContactRemovedEvent) {
 			LOG.info("Contact removed, reloading");
-			loadForums();
+			loadForums(true);
 		} else if (e instanceof GroupAddedEvent) {
 			GroupAddedEvent g = (GroupAddedEvent) e;
 			if (g.getGroup().getClientId().equals(forumManager.getClientId())) {
 				LOG.info("Forum added, reloading");
-				loadForums();
+				loadForums(false);
 			}
 		} else if (e instanceof GroupRemovedEvent) {
 			GroupRemovedEvent g = (GroupRemovedEvent) e;
 			if (g.getGroup().getClientId().equals(forumManager.getClientId())) {
 				LOG.info("Forum removed, reloading");
-				loadForums();
+				loadForums(true);
 			}
 		} else if (e instanceof ForumInvitationReceivedEvent) {
 			LOG.info("Available forums updated, reloading");
-			loadForums();
+			loadForums(false);
 		}
 	}
 
@@ -158,6 +160,12 @@ public class ForumInvitationsActivity extends BriarActivity
 		int res = R.string.forum_declined_toast;
 		if (accept) res = R.string.forum_joined_toast;
 		Toast.makeText(this, res, LENGTH_SHORT).show();
+
+		// remove item and finish if it was the last
+		adapter.remove(item);
+		if (adapter.getItemCount() == 0) {
+			supportFinishAfterTransition();
+		}
 	}
 
 	private void respondToInvitation(final ForumInvitationItem item,
@@ -174,7 +182,6 @@ public class ForumInvitationsActivity extends BriarActivity
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
 				}
-				loadForums();
 			}
 		});
 	}