diff --git a/briar-android/AndroidManifest.xml b/briar-android/AndroidManifest.xml
index 5a23c838b0fcd6cc7ee7afa0db3fd6d10c2d614f..18b68762941190ca4fd64fa65ec023047cd0a2b3 100644
--- a/briar-android/AndroidManifest.xml
+++ b/briar-android/AndroidManifest.xml
@@ -125,35 +125,35 @@
 			/>
 		</activity>
 		<activity
-			android:name=".android.groups.AvailableGroupsActivity"
+			android:name=".android.forum.AvailableForumsActivity"
 			android:label="@string/available_forums_title"
-			android:parentActivityName=".android.groups.GroupListActivity" >
+			android:parentActivityName=".android.forum.ForumListActivity" >
 			<meta-data
 				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.groups.GroupListActivity"
+				android:value=".android.forum.ForumListActivity"
 			/>
 		</activity>
 		<activity
-			android:name=".android.groups.CreateGroupActivity"
+			android:name=".android.forum.CreateForumActivity"
 			android:label="@string/create_forum_title"
 			android:windowSoftInputMode="stateVisible"
-			android:parentActivityName=".android.groups.GroupListActivity" >
+			android:parentActivityName=".android.forum.ForumListActivity" >
 			<meta-data
 				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.groups.GroupListActivity"
+				android:value=".android.forum.ForumListActivity"
 			/>
 		</activity>
 		<activity
-			android:name=".android.groups.GroupActivity"
+			android:name=".android.forum.ForumActivity"
 			android:label="@string/app_name"
-			android:parentActivityName=".android.groups.GroupListActivity" >
+			android:parentActivityName=".android.forum.ForumListActivity" >
 			<meta-data
 				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.groups.GroupListActivity"
+				android:value=".android.forum.ForumListActivity"
 			/>
 		</activity>
 		<activity
-			android:name=".android.groups.GroupListActivity"
+			android:name=".android.forum.ForumListActivity"
 			android:label="@string/forums_title"
 			android:parentActivityName=".android.DashboardActivity" >
 			<meta-data
@@ -162,31 +162,31 @@
 			/>
 		</activity>
 		<activity
-			android:name=".android.groups.ReadGroupPostActivity"
+			android:name=".android.forum.ReadForumPostActivity"
 			android:label="@string/app_name"
-			android:parentActivityName=".android.groups.GroupListActivity" >
+			android:parentActivityName=".android.forum.ForumListActivity" >
 			<meta-data
 				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.groups.GroupListActivity"
+				android:value=".android.forum.ForumListActivity"
 			/>
 		</activity>
 		<activity
-			android:name=".android.groups.ShareGroupActivity"
+			android:name=".android.forum.ShareForumActivity"
 			android:label="@string/app_name"
-			android:parentActivityName=".android.groups.GroupListActivity" >
+			android:parentActivityName=".android.forum.ForumListActivity" >
 			<meta-data
 				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.groups.GroupListActivity"
+				android:value=".android.forum.ForumListActivity"
 			/>
 		</activity>
 		<activity
-			android:name=".android.groups.WriteGroupPostActivity"
+			android:name=".android.forum.WriteForumPostActivity"
 			android:label="@string/app_name"
 			android:windowSoftInputMode="stateVisible"
-			android:parentActivityName=".android.groups.GroupListActivity" >
+			android:parentActivityName=".android.forum.ForumListActivity" >
 			<meta-data
 				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.groups.GroupListActivity"
+				android:value=".android.forum.ForumListActivity"
 			/>
 		</activity>
 		<activity
diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index bab54dbf6600cabf4f3025b402611665f52e3ba5..0ce4e1c57ab4cb95b3fb705a932991a5460d5811 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -106,7 +106,7 @@
     <string name="tor_wifi_setting"> Use Tor over WiFi Only</string>
     <string name="notification_settings_title">NOTIFICATIONS</string>
     <string name="notify_private_messages_setting">Show alerts for private messages</string>
-    <string name="notify_group_posts_setting">Show alerts for forum posts</string>
+    <string name="notify_forum_posts_setting">Show alerts for forum posts</string>
     <string name="notify_vibration_setting">Vibrate</string>
     <string name="notify_sound_setting">Sound</string>
     <string name="notify_sound_setting_default">Default ringtone</string>
diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
index 97b4dcc81396e45326a29cb9f1b5c67dab07ada0..f5ba0b03dd04dad58717dc4e772a640063bbbbd7 100644
--- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
@@ -1,27 +1,18 @@
 package org.briarproject.android;
 
-import static android.app.Notification.DEFAULT_LIGHTS;
-import static android.app.Notification.DEFAULT_SOUND;
-import static android.app.Notification.DEFAULT_VIBRATE;
-import static android.content.Context.NOTIFICATION_SERVICE;
-import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
-import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
-import static java.util.logging.Level.WARNING;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.Executor;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.app.Application;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.app.TaskStackBuilder;
 
 import org.briarproject.R;
 import org.briarproject.android.contact.ContactListActivity;
 import org.briarproject.android.contact.ConversationActivity;
-import org.briarproject.android.groups.GroupActivity;
-import org.briarproject.android.groups.GroupListActivity;
+import org.briarproject.android.forum.ForumActivity;
+import org.briarproject.android.forum.ForumListActivity;
 import org.briarproject.api.ContactId;
 import org.briarproject.api.Settings;
 import org.briarproject.api.android.AndroidNotificationManager;
@@ -35,23 +26,32 @@ import org.briarproject.api.event.SettingsUpdatedEvent;
 import org.briarproject.api.messaging.GroupId;
 import org.briarproject.util.StringUtils;
 
-import android.app.Application;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.TaskStackBuilder;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.app.Notification.DEFAULT_LIGHTS;
+import static android.app.Notification.DEFAULT_SOUND;
+import static android.app.Notification.DEFAULT_VIBRATE;
+import static android.content.Context.NOTIFICATION_SERVICE;
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
+import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
+import static java.util.logging.Level.WARNING;
 
 class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 EventListener {
 
 	private static final int PRIVATE_MESSAGE_NOTIFICATION_ID = 3;
-	private static final int GROUP_POST_NOTIFICATION_ID = 4;
+	private static final int FORUM_POST_NOTIFICATION_ID = 4;
 	private static final String CONTACT_URI =
 			"content://org.briarproject/contact";
-	private static final String GROUP_URI =
-			"content://org.briarproject/group";
+	private static final String FORUM_URI =
+			"content://org.briarproject/forum";
 
 	private static final Logger LOG =
 			Logger.getLogger(AndroidNotificationManagerImpl.class.getName());
@@ -65,9 +65,9 @@ EventListener {
 	// The following are locking: lock
 	private final Map<ContactId, Integer> contactCounts =
 			new HashMap<ContactId, Integer>();
-	private final Map<GroupId, Integer> groupCounts =
+	private final Map<GroupId, Integer> forumCounts =
 			new HashMap<GroupId, Integer>();
-	private int privateTotal = 0, groupTotal = 0;
+	private int contactTotal = 0, forumTotal = 0;
 	private int nextRequestId = 0;
 
 	private volatile Settings settings = new Settings();
@@ -116,7 +116,7 @@ EventListener {
 			Integer count = contactCounts.get(c);
 			if (count == null) contactCounts.put(c, 1);
 			else contactCounts.put(c, count + 1);
-			privateTotal++;
+			contactTotal++;
 			updatePrivateMessageNotification();
 		} finally {
 			lock.unlock();
@@ -128,7 +128,7 @@ EventListener {
 		try {
 			Integer count = contactCounts.remove(c);
 			if (count == null) return; // Already cleared
-			privateTotal -= count;
+			contactTotal -= count;
 			updatePrivateMessageNotification();
 		} finally {
 			lock.unlock();
@@ -137,18 +137,16 @@ EventListener {
 
 	// Locking: lock
 	private void updatePrivateMessageNotification() {
-		if (privateTotal == 0) {
+		if (contactTotal == 0) {
 			clearPrivateMessageNotification();
-		} else if (!settings.getBoolean("notifyPrivateMessages", true)) {
-			return;
-		} else {
+		} else if (settings.getBoolean("notifyPrivateMessages", true)) {
 			NotificationCompat.Builder b =
 					new NotificationCompat.Builder(appContext);
 			b.setSmallIcon(R.drawable.message_notification_icon);
 			b.setContentTitle(appContext.getText(R.string.app_name));
 			b.setContentText(appContext.getResources().getQuantityString(
-					R.plurals.private_message_notification_text, privateTotal,
-					privateTotal));
+					R.plurals.private_message_notification_text, contactTotal,
+					contactTotal));
 			boolean sound = settings.getBoolean("notifySound", true);
 			String ringtoneUri = settings.get("notifyRingtoneUri");
 			if (sound && !StringUtils.isNullOrEmpty(ringtoneUri))
@@ -198,91 +196,89 @@ EventListener {
 		return defaults;
 	}
 
-	public void showGroupPostNotification(GroupId g) {
+	public void showForumPostNotification(GroupId g) {
 		lock.lock();
 		try {
-			Integer count = groupCounts.get(g);
-			if (count == null) groupCounts.put(g, 1);
-			else groupCounts.put(g, count + 1);
-			groupTotal++;
-			updateGroupPostNotification();
+			Integer count = forumCounts.get(g);
+			if (count == null) forumCounts.put(g, 1);
+			else forumCounts.put(g, count + 1);
+			forumTotal++;
+			updateForumPostNotification();
 		} finally {
 			lock.unlock();
 		}
 	}
 
-	public void clearGroupPostNotification(GroupId g) {
+	public void clearForumPostNotification(GroupId g) {
 		lock.lock();
 		try {
-			Integer count = groupCounts.remove(g);
+			Integer count = forumCounts.remove(g);
 			if (count == null) return; // Already cleared
-			groupTotal -= count;
-			updateGroupPostNotification();
+			forumTotal -= count;
+			updateForumPostNotification();
 		} finally {
 			lock.unlock();
 		}
 	}
 
 	// Locking: lock
-	private void updateGroupPostNotification() {
-		if (groupTotal == 0) {
-			clearGroupPostNotification();
-		} else if (!settings.getBoolean("notifyGroupPosts", true)) {
-			return;
-		} else {
+	private void updateForumPostNotification() {
+		if (forumTotal == 0) {
+			clearForumPostNotification();
+		} else if (settings.getBoolean("notifyForumPosts", true)) {
 			NotificationCompat.Builder b =
 					new NotificationCompat.Builder(appContext);
 			b.setSmallIcon(R.drawable.message_notification_icon);
 			b.setContentTitle(appContext.getText(R.string.app_name));
 			b.setContentText(appContext.getResources().getQuantityString(
-					R.plurals.forum_post_notification_text, groupTotal,
-					groupTotal));
+					R.plurals.forum_post_notification_text, forumTotal,
+					forumTotal));
 			String ringtoneUri = settings.get("notifyRingtoneUri");
 			if (!StringUtils.isNullOrEmpty(ringtoneUri))
 				b.setSound(Uri.parse(ringtoneUri));
 			b.setDefaults(getDefaults());
 			b.setOnlyAlertOnce(true);
 			b.setAutoCancel(true);
-			if (groupCounts.size() == 1) {
-				Intent i = new Intent(appContext, GroupActivity.class);
-				GroupId g = groupCounts.keySet().iterator().next();
+			if (forumCounts.size() == 1) {
+				Intent i = new Intent(appContext, ForumActivity.class);
+				GroupId g = forumCounts.keySet().iterator().next();
 				i.putExtra("briar.GROUP_ID", g.getBytes());
 				String idHex = StringUtils.toHexString(g.getBytes());
-				i.setData(Uri.parse(GROUP_URI + "/" + idHex));
+				i.setData(Uri.parse(FORUM_URI + "/" + idHex));
 				i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
 				TaskStackBuilder t = TaskStackBuilder.create(appContext);
-				t.addParentStack(GroupActivity.class);
+				t.addParentStack(ForumActivity.class);
 				t.addNextIntent(i);
 				b.setContentIntent(t.getPendingIntent(nextRequestId++, 0));
 			} else {
-				Intent i = new Intent(appContext, GroupListActivity.class);
+				Intent i = new Intent(appContext, ForumListActivity.class);
 				i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
 				TaskStackBuilder t = TaskStackBuilder.create(appContext);
-				t.addParentStack(GroupListActivity.class);
+				t.addParentStack(ForumListActivity.class);
 				t.addNextIntent(i);
 				b.setContentIntent(t.getPendingIntent(nextRequestId++, 0));
 			}
 			Object o = appContext.getSystemService(NOTIFICATION_SERVICE);
 			NotificationManager nm = (NotificationManager) o;
-			nm.notify(GROUP_POST_NOTIFICATION_ID, b.build());
+			nm.notify(FORUM_POST_NOTIFICATION_ID, b.build());
 		}
 	}
 
 	// Locking: lock
-	private void clearGroupPostNotification() {
+	private void clearForumPostNotification() {
 		Object o = appContext.getSystemService(NOTIFICATION_SERVICE);
 		NotificationManager nm = (NotificationManager) o;
-		nm.cancel(GROUP_POST_NOTIFICATION_ID);
+		nm.cancel(FORUM_POST_NOTIFICATION_ID);
 	}
 
 	public void clearNotifications() {
 		lock.lock();
 		try {
 			contactCounts.clear();
-			groupCounts.clear();
-			privateTotal = groupTotal = 0;
+			forumCounts.clear();
+			contactTotal = forumTotal = 0;
 			clearPrivateMessageNotification();
-			clearGroupPostNotification();
+			clearForumPostNotification();
 		} finally {
 			lock.unlock();
 		}
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java
index c453c471859a0136d751bbc702dafc55c8381694..f6b3641f3cef7f9f93c496d3d72f246fc82826be 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/org/briarproject/android/BaseActivity.java
@@ -26,7 +26,6 @@ import roboguice.activity.event.OnResumeEvent;
 import roboguice.activity.event.OnStartEvent;
 import roboguice.activity.event.OnStopEvent;
 import roboguice.event.EventManager;
-import roboguice.inject.ContentViewListener;
 import roboguice.inject.RoboInjector;
 import roboguice.util.RoboContext;
 
@@ -34,20 +33,20 @@ import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
 import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
 
-public abstract class BaseActivity extends AppCompatActivity implements RoboContext {
+public abstract class BaseActivity extends AppCompatActivity
+		implements RoboContext {
 
 	private final static String PREFS_DB = "db";
 	private final static String KEY_DB_KEY = "key";
 
-	protected EventManager eventManager;
-	protected HashMap<Key<?>, Object> scopedObjects = new HashMap();
-	@Inject
-	ContentViewListener ignored;
+	private final HashMap<Key<?>, Object> scopedObjects =
+			new HashMap<Key<?>, Object>();
+
+	@Inject private EventManager eventManager;
 
 	@Override
 	public void onCreate(Bundle savedInstanceState) {
 		RoboInjector injector = RoboGuice.getInjector(this);
-		eventManager = (EventManager) injector.getInstance(EventManager.class);
 		injector.injectMembersWithoutViews(this);
 		super.onCreate(savedInstanceState);
 		eventManager.fire(new OnCreateEvent(savedInstanceState));
@@ -105,7 +104,8 @@ public abstract class BaseActivity extends AppCompatActivity implements RoboCont
 	public void onConfigurationChanged(Configuration newConfig) {
 		Configuration currentConfig = getResources().getConfiguration();
 		super.onConfigurationChanged(newConfig);
-		eventManager.fire(new OnConfigurationChangedEvent(currentConfig, newConfig));
+		eventManager.fire(new OnConfigurationChangedEvent(currentConfig,
+				newConfig));
 	}
 
 	public void onContentChanged() {
@@ -114,9 +114,11 @@ public abstract class BaseActivity extends AppCompatActivity implements RoboCont
 		eventManager.fire(new OnContentChangedEvent());
 	}
 
-	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+	protected void onActivityResult(int requestCode, int resultCode,
+			Intent data) {
 		super.onActivityResult(requestCode, resultCode, data);
-		eventManager.fire(new OnActivityResultEvent(requestCode, resultCode, data));
+		eventManager.fire(new OnActivityResultEvent(requestCode, resultCode,
+				data));
 	}
 
 	@Override
@@ -139,7 +141,7 @@ public abstract class BaseActivity extends AppCompatActivity implements RoboCont
 	}
 
 	protected void clearDbPrefs() {
-		this.clearPrefs(PREFS_DB);
+		clearPrefs(PREFS_DB);
 	}
 
 	protected void gotoAndFinish(Class classInstance, int resultCode) {
diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java
index 49a02591469dc86a82f5cbd8ce8d393f88396027..5442839acb2534211ad3d59b17bea27d6465b95b 100644
--- a/briar-android/src/org/briarproject/android/BriarActivity.java
+++ b/briar-android/src/org/briarproject/android/BriarActivity.java
@@ -1,15 +1,9 @@
 package org.briarproject.android;
 
-import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION;
-import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
-import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
-import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
-import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
-
-import java.util.concurrent.Executor;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
 
 import org.briarproject.android.BriarService.BriarBinder;
 import org.briarproject.android.BriarService.BriarServiceConnection;
@@ -17,12 +11,13 @@ import org.briarproject.api.db.DatabaseConfig;
 import org.briarproject.api.db.DatabaseExecutor;
 import org.briarproject.api.lifecycle.LifecycleManager;
 
-import roboguice.activity.RoboActivity;
-import android.annotation.SuppressLint;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.view.inputmethod.InputMethodManager;
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION;
+import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
 
 @SuppressLint("Registered")
 public class BriarActivity extends BaseActivity {
@@ -136,9 +131,4 @@ public class BriarActivity extends BaseActivity {
 			}
 		});
 	}
-
-	protected void hideSoftKeyboard() {
-		Object o = getSystemService(INPUT_METHOD_SERVICE);
-		((InputMethodManager) o).toggleSoftInput(HIDE_IMPLICIT_ONLY, 0);
-	}
 }
diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/org/briarproject/android/BriarService.java
index 65a03d3a68b8856c5a06e0c6f15d1c84515b766f..11e8dcebaa156dec816adc693595754b14151d45 100644
--- a/briar-android/src/org/briarproject/android/BriarService.java
+++ b/briar-android/src/org/briarproject/android/BriarService.java
@@ -1,18 +1,13 @@
 package org.briarproject.android;
 
-import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING;
-import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.SUCCESS;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executor;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Binder;
+import android.os.IBinder;
+import android.support.v4.app.NotificationCompat;
 
 import org.briarproject.R;
 import org.briarproject.api.ContactId;
@@ -30,15 +25,21 @@ import org.briarproject.api.lifecycle.LifecycleManager;
 import org.briarproject.api.lifecycle.LifecycleManager.StartResult;
 import org.briarproject.api.messaging.GroupId;
 
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
 import roboguice.service.RoboService;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.Binder;
-import android.os.IBinder;
-import android.support.v4.app.NotificationCompat;
+
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING;
+import static org.briarproject.api.lifecycle.LifecycleManager.StartResult.SUCCESS;
 
 public class BriarService extends RoboService implements EventListener {
 
@@ -182,7 +183,7 @@ public class BriarService extends RoboService implements EventListener {
 					lifecycleManager.waitForDatabase();
 					if (g.equals(db.getInboxGroupId(c)))
 						notificationManager.showPrivateMessageNotification(c);
-					else notificationManager.showGroupPostNotification(g);
+					else notificationManager.showForumPostNotification(g);
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
diff --git a/briar-android/src/org/briarproject/android/DashboardActivity.java b/briar-android/src/org/briarproject/android/DashboardActivity.java
index 8e261318a203b1d173b13fdd25f8b8e452f9c8ea..fc9d05b881d54ce114b5e25bcbd2ccdac9689272 100644
--- a/briar-android/src/org/briarproject/android/DashboardActivity.java
+++ b/briar-android/src/org/briarproject/android/DashboardActivity.java
@@ -1,26 +1,5 @@
 package org.briarproject.android;
 
-import static android.view.Gravity.CENTER;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import org.briarproject.R;
-import org.briarproject.android.contact.ContactListActivity;
-import org.briarproject.android.groups.GroupListActivity;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.LocalAuthor;
-import org.briarproject.api.android.ReferenceManager;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
@@ -34,6 +13,27 @@ import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.ProgressBar;
 
+import org.briarproject.R;
+import org.briarproject.android.contact.ContactListActivity;
+import org.briarproject.android.forum.ForumListActivity;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.api.LocalAuthor;
+import org.briarproject.api.android.ReferenceManager;
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.view.Gravity.CENTER;
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
+
 public class DashboardActivity extends BriarActivity {
 
 	private static final Logger LOG =
@@ -109,7 +109,7 @@ public class DashboardActivity extends BriarActivity {
 		forumsButton.setOnClickListener(new OnClickListener() {
 			public void onClick(View view) {
 				startActivity(new Intent(DashboardActivity.this,
-						GroupListActivity.class));
+						ForumListActivity.class));
 			}
 		});
 		buttons.add(forumsButton);
diff --git a/briar-android/src/org/briarproject/android/SettingsActivity.java b/briar-android/src/org/briarproject/android/SettingsActivity.java
index fdbf99120c50f21cc54dd63af310cbf670c4b386..0fd88f46ddf040a0e1ded7c72767eb93e2974610 100644
--- a/briar-android/src/org/briarproject/android/SettingsActivity.java
+++ b/briar-android/src/org/briarproject/android/SettingsActivity.java
@@ -1,5 +1,40 @@
 package org.briarproject.android;
 
+import android.bluetooth.BluetoothAdapter;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.CheckBox;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+import org.briarproject.R;
+import org.briarproject.android.util.FixedVerticalSpace;
+import org.briarproject.android.util.HorizontalBorder;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.android.util.ListLoadingProgressBar;
+import org.briarproject.api.Settings;
+import org.briarproject.api.TransportConfig;
+import org.briarproject.api.TransportId;
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+import org.briarproject.api.event.Event;
+import org.briarproject.api.event.EventBus;
+import org.briarproject.api.event.EventListener;
+import org.briarproject.api.event.SettingsUpdatedEvent;
+import org.briarproject.util.StringUtils;
+
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
 import static android.graphics.Typeface.DEFAULT_BOLD;
 import static android.media.RingtoneManager.ACTION_RINGTONE_PICKER;
 import static android.media.RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI;
@@ -20,41 +55,6 @@ import static org.briarproject.android.TestingConstants.SHOW_TESTING_ACTIVITY;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
 
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import org.briarproject.R;
-import org.briarproject.android.util.FixedVerticalSpace;
-import org.briarproject.android.util.HorizontalBorder;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.android.util.ListLoadingProgressBar;
-import org.briarproject.api.Settings;
-import org.briarproject.api.TransportConfig;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.event.Event;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.SettingsUpdatedEvent;
-import org.briarproject.util.StringUtils;
-
-import android.bluetooth.BluetoothAdapter;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.CheckBox;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.ScrollView;
-import android.widget.TextView;
-
 public class SettingsActivity extends BriarActivity implements EventListener,
 OnClickListener {
 
@@ -65,7 +65,7 @@ OnClickListener {
 
 	private ScrollView scroll = null;
 	private TextView enableBluetooth = null, enableBluetoothHint = null;
-	private CheckBox notifyPrivateMessages = null, notifyGroupPosts = null;
+	private CheckBox notifyPrivateMessages = null, notifyForumPosts = null;
 	private CheckBox notifyVibration = null;
 	private CheckBox torOverWifi = null;
 	private TextView notifySound = null, notifySoundHint = null;
@@ -158,11 +158,11 @@ OnClickListener {
 		settings.addView(new HorizontalBorder(this));
 		settings.addView(new FixedVerticalSpace(this));
 
-		notifyGroupPosts = new CheckBox(this);
-		notifyGroupPosts.setTextSize(18);
-		notifyGroupPosts.setText(R.string.notify_group_posts_setting);
-		notifyGroupPosts.setOnClickListener(this);
-		settings.addView(notifyGroupPosts);
+		notifyForumPosts = new CheckBox(this);
+		notifyForumPosts.setTextSize(18);
+		notifyForumPosts.setText(R.string.notify_forum_posts_setting);
+		notifyForumPosts.setOnClickListener(this);
+		settings.addView(notifyForumPosts);
 
 		settings.addView(new FixedVerticalSpace(this));
 		settings.addView(new HorizontalBorder(this));
@@ -259,8 +259,8 @@ OnClickListener {
 				notifyPrivateMessages.setChecked(settings.getBoolean(
 						"notifyPrivateMessages", true));
 
-				notifyGroupPosts.setChecked(settings.getBoolean(
-						"notifyGroupPosts", true));
+				notifyForumPosts.setChecked(settings.getBoolean(
+						"notifyForumPosts", true));
 
 				notifyVibration.setChecked(settings.getBoolean(
 						"notifyVibration", true));
@@ -305,9 +305,9 @@ OnClickListener {
 			s.putBoolean("notifyPrivateMessages",
 					notifyPrivateMessages.isChecked());
 			storeSettings(s);
-		} else if (view == notifyGroupPosts) {
+		} else if (view == notifyForumPosts) {
 			Settings s = new Settings();
-			s.putBoolean("notifyGroupPosts", notifyGroupPosts.isChecked());
+			s.putBoolean("notifyForumPosts", notifyForumPosts.isChecked());
 			storeSettings(s);
 		} else if (view == notifyVibration) {
 			Settings s = new Settings();
diff --git a/briar-android/src/org/briarproject/android/groups/AvailableGroupsActivity.java b/briar-android/src/org/briarproject/android/forum/AvailableForumsActivity.java
similarity index 82%
rename from briar-android/src/org/briarproject/android/groups/AvailableGroupsActivity.java
rename to briar-android/src/org/briarproject/android/forum/AvailableForumsActivity.java
index e1fd39964b2903cad14d44cc3e7142846dc3d041..1c9cb668997d98934101f329b5e3f09fc17fb687 100644
--- a/briar-android/src/org/briarproject/android/groups/AvailableGroupsActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/AvailableForumsActivity.java
@@ -1,15 +1,11 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
-import static android.widget.Toast.LENGTH_SHORT;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.Toast;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
@@ -28,20 +24,24 @@ import org.briarproject.api.event.SubscriptionRemovedEvent;
 import org.briarproject.api.messaging.Group;
 import org.briarproject.api.messaging.GroupId;
 
-import android.os.Bundle;
-import android.view.View;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ListView;
-import android.widget.Toast;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.widget.Toast.LENGTH_SHORT;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
 
-public class AvailableGroupsActivity extends BriarActivity
+public class AvailableForumsActivity extends BriarActivity
 implements EventListener, OnItemClickListener {
 
 	private static final Logger LOG =
-			Logger.getLogger(AvailableGroupsActivity.class.getName());
+			Logger.getLogger(AvailableForumsActivity.class.getName());
 
-	private AvailableGroupsAdapter adapter = null;
+	private AvailableForumsAdapter adapter = null;
 	private ListView list = null;
 	private ListLoadingProgressBar loading = null;
 
@@ -53,7 +53,7 @@ implements EventListener, OnItemClickListener {
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
 
-		adapter = new AvailableGroupsAdapter(this);
+		adapter = new AvailableForumsAdapter(this);
 		list = new ListView(this);
 		list.setLayoutParams(MATCH_MATCH);
 		list.setAdapter(adapter);
@@ -68,29 +68,29 @@ implements EventListener, OnItemClickListener {
 	public void onResume() {
 		super.onResume();
 		eventBus.addListener(this);
-		loadGroups();
+		loadForums();
 	}
 
-	private void loadGroups() {
+	private void loadForums() {
 		runOnDbThread(new Runnable() {
 			public void run() {
 				try {
-					Collection<GroupContacts> available =
-							new ArrayList<GroupContacts>();
+					Collection<ForumContacts> available =
+							new ArrayList<ForumContacts>();
 					long now = System.currentTimeMillis();
 					for (Group g : db.getAvailableGroups()) {
 						try {
 							GroupId id = g.getId();
 							Collection<Contact> c = db.getSubscribers(id);
-							available.add(new GroupContacts(g, c));
+							available.add(new ForumContacts(g, c));
 						} catch (NoSuchSubscriptionException e) {
-							continue;
+							// Continue
 						}
 					}
 					long duration = System.currentTimeMillis() - now;
 					if (LOG.isLoggable(INFO))
 						LOG.info("Load took " + duration + " ms");
-					displayGroups(available);
+					displayForums(available);
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
@@ -99,18 +99,18 @@ implements EventListener, OnItemClickListener {
 		});
 	}
 
-	private void displayGroups(final Collection<GroupContacts> available) {
+	private void displayForums(final Collection<ForumContacts> available) {
 		runOnUiThread(new Runnable() {
 			public void run() {
 				if (available.isEmpty()) {
-					LOG.info("No groups available, finishing");
+					LOG.info("No forums available, finishing");
 					finish();
 				} else {
 					setContentView(list);
 					adapter.clear();
-					for (GroupContacts g : available)
-						adapter.add(new AvailableGroupsItem(g));
-					adapter.sort(AvailableGroupsItemComparator.INSTANCE);
+					for (ForumContacts f : available)
+						adapter.add(new AvailableForumsItem(f));
+					adapter.sort(AvailableForumsItemComparator.INSTANCE);
 					adapter.notifyDataSetChanged();
 				}
 			}
@@ -126,19 +126,19 @@ implements EventListener, OnItemClickListener {
 	public void eventOccurred(Event e) {
 		if (e instanceof RemoteSubscriptionsUpdatedEvent) {
 			LOG.info("Remote subscriptions changed, reloading");
-			loadGroups();
+			loadForums();
 		} else if (e instanceof SubscriptionAddedEvent) {
 			LOG.info("Subscription added, reloading");
-			loadGroups();
+			loadForums();
 		} else if (e instanceof SubscriptionRemovedEvent) {
 			LOG.info("Subscription removed, reloading");
-			loadGroups();
+			loadForums();
 		}
 	}
 
 	public void onItemClick(AdapterView<?> parent, View view, int position,
 			long id) {
-		AvailableGroupsItem item = adapter.getItem(position);
+		AvailableForumsItem item = adapter.getItem(position);
 		Collection<ContactId> visible = new ArrayList<ContactId>();
 		for (Contact c : item.getContacts()) visible.add(c.getId());
 		addSubscription(item.getGroup(), visible);
diff --git a/briar-android/src/org/briarproject/android/groups/AvailableGroupsAdapter.java b/briar-android/src/org/briarproject/android/forum/AvailableForumsAdapter.java
similarity index 86%
rename from briar-android/src/org/briarproject/android/groups/AvailableGroupsAdapter.java
rename to briar-android/src/org/briarproject/android/forum/AvailableForumsAdapter.java
index ec52754c2676a4205467e3c927a87cc1cb90f57f..f2e34cad11d245c3e46764492e7bcd413c565902 100644
--- a/briar-android/src/org/briarproject/android/groups/AvailableGroupsAdapter.java
+++ b/briar-android/src/org/briarproject/android/forum/AvailableForumsAdapter.java
@@ -1,15 +1,4 @@
-package org.briarproject.android.groups;
-
-import static android.text.TextUtils.TruncateAt.END;
-import static android.widget.LinearLayout.VERTICAL;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.briarproject.R;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.Contact;
-import org.briarproject.util.StringUtils;
+package org.briarproject.android.forum;
 
 import android.content.Context;
 import android.view.View;
@@ -18,19 +7,30 @@ import android.widget.ArrayAdapter;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-class AvailableGroupsAdapter extends ArrayAdapter<AvailableGroupsItem> {
+import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.api.Contact;
+import org.briarproject.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import static android.text.TextUtils.TruncateAt.END;
+import static android.widget.LinearLayout.VERTICAL;
+
+class AvailableForumsAdapter extends ArrayAdapter<AvailableForumsItem> {
 
 	private final int pad;
 
-	AvailableGroupsAdapter(Context ctx) {
+	AvailableForumsAdapter(Context ctx) {
 		super(ctx, android.R.layout.simple_expandable_list_item_1,
-				new ArrayList<AvailableGroupsItem>());
+				new ArrayList<AvailableForumsItem>());
 		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	@Override
 	public View getView(int position, View convertView, ViewGroup parent) {
-		AvailableGroupsItem item = getItem(position);
+		AvailableForumsItem item = getItem(position);
 		Context ctx = getContext();
 
 		LinearLayout layout = new LinearLayout(ctx);
diff --git a/briar-android/src/org/briarproject/android/forum/AvailableForumsItem.java b/briar-android/src/org/briarproject/android/forum/AvailableForumsItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c46e66b5f54eea0b69b57d8403d6db38719ba92
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/forum/AvailableForumsItem.java
@@ -0,0 +1,23 @@
+package org.briarproject.android.forum;
+
+import org.briarproject.api.Contact;
+import org.briarproject.api.messaging.Group;
+
+import java.util.Collection;
+
+class AvailableForumsItem {
+
+	private final ForumContacts forumContacts;
+
+	AvailableForumsItem(ForumContacts forumContacts) {
+		this.forumContacts = forumContacts;
+	}
+
+	Group getGroup() {
+		return forumContacts.getGroup();
+	}
+
+	Collection<Contact> getContacts() {
+		return forumContacts.getContacts();
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/forum/AvailableForumsItemComparator.java b/briar-android/src/org/briarproject/android/forum/AvailableForumsItemComparator.java
new file mode 100644
index 0000000000000000000000000000000000000000..82a8b9a928a29ff575979b9a285dce695f1d7320
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/forum/AvailableForumsItemComparator.java
@@ -0,0 +1,16 @@
+package org.briarproject.android.forum;
+
+import java.util.Comparator;
+
+class AvailableForumsItemComparator implements Comparator<AvailableForumsItem> {
+
+	static final AvailableForumsItemComparator INSTANCE =
+			new AvailableForumsItemComparator();
+
+	public int compare(AvailableForumsItem a, AvailableForumsItem b) {
+		if (a == b) return 0;
+		String aName = a.getGroup().getName();
+		String bName = b.getGroup().getName();
+		return String.CASE_INSENSITIVE_ORDER.compare(aName, bName);
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java b/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
similarity index 89%
rename from briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
rename to briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
index 120de84fe7c37a5cd6103eef3a2c25312bc85824..c005104e685b0dfb9ed01da1a5fcd32211e1b0f0 100644
--- a/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
@@ -1,4 +1,30 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
+import android.widget.Toast;
+
+import org.briarproject.R;
+import org.briarproject.android.BriarActivity;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+import org.briarproject.api.messaging.Group;
+import org.briarproject.api.messaging.GroupFactory;
+import org.briarproject.util.StringUtils;
+
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
 
 import static android.text.InputType.TYPE_CLASS_TEXT;
 import static android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
@@ -14,37 +40,11 @@ import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
 import static org.briarproject.api.messaging.MessagingConstants.MAX_GROUP_NAME_LENGTH;
 
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.messaging.Group;
-import org.briarproject.api.messaging.GroupFactory;
-import org.briarproject.util.StringUtils;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-import android.widget.Toast;
-
-public class CreateGroupActivity extends BriarActivity
+public class CreateForumActivity extends BriarActivity
 implements OnEditorActionListener, OnClickListener {
 
 	private static final Logger LOG =
-			Logger.getLogger(CreateGroupActivity.class.getName());
+			Logger.getLogger(CreateForumActivity.class.getName());
 
 	private EditText nameEntry = null;
 	private Button createForumButton = null;
@@ -130,11 +130,11 @@ implements OnEditorActionListener, OnClickListener {
 			if (!validateName()) return;
 			createForumButton.setVisibility(GONE);
 			progress.setVisibility(VISIBLE);
-			storeGroup(nameEntry.getText().toString());
+			storeForum(nameEntry.getText().toString());
 		}
 	}
 
-	private void storeGroup(final String name) {
+	private void storeForum(final String name) {
 		runOnDbThread(new Runnable() {
 			public void run() {
 				try {
@@ -143,8 +143,8 @@ implements OnEditorActionListener, OnClickListener {
 					db.addGroup(g);
 					long duration = System.currentTimeMillis() - now;
 					if (LOG.isLoggable(INFO))
-						LOG.info("Storing group took " + duration + " ms");
-					displayGroup(g);
+						LOG.info("Storing forum took " + duration + " ms");
+					displayForum(g);
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
@@ -154,15 +154,15 @@ implements OnEditorActionListener, OnClickListener {
 		});
 	}
 
-	private void displayGroup(final Group g) {
+	private void displayForum(final Group g) {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				Intent i = new Intent(CreateGroupActivity.this,
-						GroupActivity.class);
+				Intent i = new Intent(CreateForumActivity.this,
+						ForumActivity.class);
 				i.putExtra("briar.GROUP_ID", g.getId().getBytes());
-				i.putExtra("briar.GROUP_NAME", g.getName());
+				i.putExtra("briar.FORUM_NAME", g.getName());
 				startActivity(i);
-				Toast.makeText(CreateGroupActivity.this,
+				Toast.makeText(CreateForumActivity.this,
 						R.string.forum_created_toast, LENGTH_LONG).show();
 				finish();
 			}
diff --git a/briar-android/src/org/briarproject/android/groups/GroupActivity.java b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
similarity index 91%
rename from briar-android/src/org/briarproject/android/groups/GroupActivity.java
rename to briar-android/src/org/briarproject/android/forum/ForumActivity.java
index dcf94c9079eba831e76c9622aa80f399c40577bb..8786ec401f27b924fab0fdbf7dd5b310a241a4c7 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
@@ -1,26 +1,16 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
-import static android.view.Gravity.CENTER;
-import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-import static android.widget.LinearLayout.VERTICAL;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.groups.ReadGroupPostActivity.RESULT_PREV_NEXT;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
@@ -44,29 +34,39 @@ import org.briarproject.api.messaging.Group;
 import org.briarproject.api.messaging.GroupId;
 import org.briarproject.api.messaging.MessageId;
 
-import android.content.Intent;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.ListView;
-import android.widget.TextView;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.view.Gravity.CENTER;
+import static android.view.Gravity.CENTER_HORIZONTAL;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+import static android.widget.LinearLayout.VERTICAL;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.forum.ReadForumPostActivity.RESULT_PREV_NEXT;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
 
-public class GroupActivity extends BriarActivity implements EventListener,
+public class ForumActivity extends BriarActivity implements EventListener,
 OnClickListener, OnItemClickListener {
 
 	private static final int REQUEST_READ = 2;
 	private static final Logger LOG =
-			Logger.getLogger(GroupActivity.class.getName());
+			Logger.getLogger(ForumActivity.class.getName());
 
 	@Inject private AndroidNotificationManager notificationManager;
 	private Map<MessageId, byte[]> bodyCache = new HashMap<MessageId, byte[]>();
 	private TextView empty = null;
-	private GroupAdapter adapter = null;
+	private ForumAdapter adapter = null;
 	private ListView list = null;
 	private ListLoadingProgressBar loading = null;
 	private ImageButton composeButton = null, shareButton = null;
@@ -85,8 +85,8 @@ OnClickListener, OnItemClickListener {
 		byte[] b = i.getByteArrayExtra("briar.GROUP_ID");
 		if (b == null) throw new IllegalStateException();
 		groupId = new GroupId(b);
-		String name = i.getStringExtra("briar.GROUP_NAME");
-		if (name != null) setTitle(name);
+		String forumName = i.getStringExtra("briar.FORUM_NAME");
+		if (forumName != null) setTitle(forumName);
 
 		LinearLayout layout = new LinearLayout(this);
 		layout.setLayoutParams(MATCH_MATCH);
@@ -101,7 +101,7 @@ OnClickListener, OnItemClickListener {
 		empty.setVisibility(GONE);
 		layout.addView(empty);
 
-		adapter = new GroupAdapter(this);
+		adapter = new ForumAdapter(this);
 		list = new ListView(this);
 		list.setLayoutParams(MATCH_WRAP_1);
 		list.setAdapter(adapter);
@@ -144,11 +144,11 @@ OnClickListener, OnItemClickListener {
 	public void onResume() {
 		super.onResume();
 		eventBus.addListener(this);
-		loadGroup();
+		loadForum();
 		loadHeaders();
 	}
 
-	private void loadGroup() {
+	private void loadForum() {
 		runOnDbThread(new Runnable() {
 			public void run() {
 				try {
@@ -157,7 +157,7 @@ OnClickListener, OnItemClickListener {
 					long duration = System.currentTimeMillis() - now;
 					if (LOG.isLoggable(INFO))
 						LOG.info("Loading group " + duration + " ms");
-					displayGroupName();
+					displayForumName();
 				} catch (NoSuchSubscriptionException e) {
 					finishOnUiThread();
 				} catch (DbException e) {
@@ -168,7 +168,7 @@ OnClickListener, OnItemClickListener {
 		});
 	}
 
-	private void displayGroupName() {
+	private void displayForumName() {
 		runOnUiThread(new Runnable() {
 			public void run() {
 				setTitle(group.getName());
@@ -209,13 +209,13 @@ OnClickListener, OnItemClickListener {
 					empty.setVisibility(GONE);
 					list.setVisibility(VISIBLE);
 					for (MessageHeader h : headers) {
-						GroupItem item = new GroupItem(h);
+						ForumItem item = new ForumItem(h);
 						byte[] body = bodyCache.get(h.getId());
 						if (body == null) loadMessageBody(h);
 						else item.setBody(body);
 						adapter.add(item);
 					}
-					adapter.sort(GroupItemComparator.INSTANCE);
+					adapter.sort(ForumItemComparator.INSTANCE);
 					// Scroll to the bottom
 					list.setSelection(adapter.getCount() - 1);
 				}
@@ -250,7 +250,7 @@ OnClickListener, OnItemClickListener {
 				bodyCache.put(m, body);
 				int count = adapter.getCount();
 				for (int i = 0; i < count; i++) {
-					GroupItem item = adapter.getItem(i);
+					ForumItem item = adapter.getItem(i);
 					if (item.getHeader().getId().equals(m)) {
 						item.setBody(body);
 						adapter.notifyDataSetChanged();
@@ -281,7 +281,7 @@ OnClickListener, OnItemClickListener {
 	}
 
 	private void markMessagesRead() {
-		notificationManager.clearGroupPostNotification(groupId);
+		notificationManager.clearForumPostNotification(groupId);
 		List<MessageId> unread = new ArrayList<MessageId>();
 		int count = adapter.getCount();
 		for (int i = 0; i < count; i++) {
@@ -331,15 +331,15 @@ OnClickListener, OnItemClickListener {
 
 	public void onClick(View view) {
 		if (view == composeButton) {
-			Intent i = new Intent(this, WriteGroupPostActivity.class);
+			Intent i = new Intent(this, WriteForumPostActivity.class);
 			i.putExtra("briar.GROUP_ID", groupId.getBytes());
-			i.putExtra("briar.GROUP_NAME", group.getName());
+			i.putExtra("briar.FORUM_NAME", group.getName());
 			i.putExtra("briar.MIN_TIMESTAMP", getMinTimestampForNewMessage());
 			startActivity(i);
 		} else if (view == shareButton) {
-			Intent i = new Intent(this, ShareGroupActivity.class);
+			Intent i = new Intent(this, ShareForumActivity.class);
 			i.putExtra("briar.GROUP_ID", groupId.getBytes());
-			i.putExtra("briar.GROUP_NAME", group.getName());
+			i.putExtra("briar.FORUM_NAME", group.getName());
 			startActivity(i);
 		}
 	}
@@ -362,9 +362,9 @@ OnClickListener, OnItemClickListener {
 
 	private void displayMessage(int position) {
 		MessageHeader item = adapter.getItem(position).getHeader();
-		Intent i = new Intent(this, ReadGroupPostActivity.class);
+		Intent i = new Intent(this, ReadForumPostActivity.class);
 		i.putExtra("briar.GROUP_ID", groupId.getBytes());
-		i.putExtra("briar.GROUP_NAME", group.getName());
+		i.putExtra("briar.FORUM_NAME", group.getName());
 		i.putExtra("briar.MESSAGE_ID", item.getId().getBytes());
 		Author author = item.getAuthor();
 		if (author != null) i.putExtra("briar.AUTHOR_NAME", author.getName());
diff --git a/briar-android/src/org/briarproject/android/groups/GroupAdapter.java b/briar-android/src/org/briarproject/android/forum/ForumAdapter.java
similarity index 93%
rename from briar-android/src/org/briarproject/android/groups/GroupAdapter.java
rename to briar-android/src/org/briarproject/android/forum/ForumAdapter.java
index b1421400de931e72e9c36cd387149ee423b47b09..cc8db894db029791b93f35c204b8a053fef64041 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupAdapter.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumAdapter.java
@@ -1,19 +1,4 @@
-package org.briarproject.android.groups;
-
-import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.Gravity.CENTER_VERTICAL;
-import static android.widget.LinearLayout.HORIZONTAL;
-import static android.widget.LinearLayout.VERTICAL;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
-
-import java.util.ArrayList;
-
-import org.briarproject.R;
-import org.briarproject.android.util.AuthorView;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.Author;
-import org.briarproject.api.db.MessageHeader;
-import org.briarproject.util.StringUtils;
+package org.briarproject.android.forum;
 
 import android.content.Context;
 import android.content.res.Resources;
@@ -25,19 +10,34 @@ import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-class GroupAdapter extends ArrayAdapter<GroupItem> {
+import org.briarproject.R;
+import org.briarproject.android.util.AuthorView;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.api.Author;
+import org.briarproject.api.db.MessageHeader;
+import org.briarproject.util.StringUtils;
+
+import java.util.ArrayList;
+
+import static android.view.Gravity.CENTER_HORIZONTAL;
+import static android.view.Gravity.CENTER_VERTICAL;
+import static android.widget.LinearLayout.HORIZONTAL;
+import static android.widget.LinearLayout.VERTICAL;
+import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
+
+class ForumAdapter extends ArrayAdapter<ForumItem> {
 
 	private final int pad;
 
-	GroupAdapter(Context ctx) {
+	ForumAdapter(Context ctx) {
 		super(ctx, android.R.layout.simple_expandable_list_item_1,
-				new ArrayList<GroupItem>());
+				new ArrayList<ForumItem>());
 		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	@Override
 	public View getView(int position, View convertView, ViewGroup parent) {
-		GroupItem item = getItem(position);
+		ForumItem item = getItem(position);
 		MessageHeader header = item.getHeader();
 		Context ctx = getContext();
 		Resources res = ctx.getResources();
diff --git a/briar-android/src/org/briarproject/android/groups/GroupContacts.java b/briar-android/src/org/briarproject/android/forum/ForumContacts.java
similarity index 73%
rename from briar-android/src/org/briarproject/android/groups/GroupContacts.java
rename to briar-android/src/org/briarproject/android/forum/ForumContacts.java
index 62bca859e3ae4983406a503dd2a5cde669f55755..daa01d7efe9d9707d8ea33a2858a336b7ad7ef44 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupContacts.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumContacts.java
@@ -1,16 +1,16 @@
-package org.briarproject.android.groups;
-
-import java.util.Collection;
+package org.briarproject.android.forum;
 
 import org.briarproject.api.Contact;
 import org.briarproject.api.messaging.Group;
 
-class GroupContacts {
+import java.util.Collection;
+
+class ForumContacts {
 
 	private final Group group;
 	private final Collection<Contact> contacts;
 
-	GroupContacts(Group group, Collection<Contact> contacts) {
+	ForumContacts(Group group, Collection<Contact> contacts) {
 		this.group = group;
 		this.contacts = contacts;
 	}
diff --git a/briar-android/src/org/briarproject/android/groups/GroupItem.java b/briar-android/src/org/briarproject/android/forum/ForumItem.java
similarity index 77%
rename from briar-android/src/org/briarproject/android/groups/GroupItem.java
rename to briar-android/src/org/briarproject/android/forum/ForumItem.java
index b9d95299633773d522eefbb5996d02182270324f..ca42d7e9a6f9df994c4c667906d9ffbe6d1a5398 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupItem.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumItem.java
@@ -1,14 +1,14 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
 import org.briarproject.api.db.MessageHeader;
 
 // This class is not thread-safe
-class GroupItem {
+class ForumItem {
 
 	private final MessageHeader header;
 	private byte[] body;
 
-	GroupItem(MessageHeader header) {
+	ForumItem(MessageHeader header) {
 		this.header = header;
 		body = null;
 	}
diff --git a/briar-android/src/org/briarproject/android/groups/GroupItemComparator.java b/briar-android/src/org/briarproject/android/forum/ForumItemComparator.java
similarity index 53%
rename from briar-android/src/org/briarproject/android/groups/GroupItemComparator.java
rename to briar-android/src/org/briarproject/android/forum/ForumItemComparator.java
index 37558da6b98ff69a26a22e4058979e37567f6e94..d482b979b7d8e95caec1c15c61ce9c89d5f77693 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupItemComparator.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumItemComparator.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
 import java.util.Comparator;
 
-class GroupItemComparator implements Comparator<GroupItem> {
+class ForumItemComparator implements Comparator<ForumItem> {
 
-	static final GroupItemComparator INSTANCE = new GroupItemComparator();
+	static final ForumItemComparator INSTANCE = new ForumItemComparator();
 
-	public int compare(GroupItem a, GroupItem b) {
+	public int compare(ForumItem a, ForumItem b) {
 		// The oldest message comes first
 		long aTime = a.getHeader().getTimestamp();
 		long bTime = b.getHeader().getTimestamp();
diff --git a/briar-android/src/org/briarproject/android/groups/GroupListActivity.java b/briar-android/src/org/briarproject/android/forum/ForumListActivity.java
similarity index 88%
rename from briar-android/src/org/briarproject/android/groups/GroupListActivity.java
rename to briar-android/src/org/briarproject/android/forum/ForumListActivity.java
index 869939241f30b8685446e5308cd354533b57ecce..ee1c75584fdc6b0e76a7056841c755b2e208a99a 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupListActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumListActivity.java
@@ -1,25 +1,22 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
-import static android.view.Gravity.CENTER;
-import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.Menu.NONE;
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-import static android.widget.LinearLayout.HORIZONTAL;
-import static android.widget.LinearLayout.VERTICAL;
-import static android.widget.Toast.LENGTH_SHORT;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnCreateContextMenuListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.AdapterContextMenuInfo;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
@@ -41,41 +38,44 @@ import org.briarproject.api.event.SubscriptionRemovedEvent;
 import org.briarproject.api.messaging.Group;
 import org.briarproject.api.messaging.GroupId;
 
-import android.content.Intent;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.view.ContextMenu;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnCreateContextMenuListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.AdapterContextMenuInfo;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.view.Gravity.CENTER;
+import static android.view.Gravity.CENTER_HORIZONTAL;
+import static android.view.Menu.NONE;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+import static android.widget.LinearLayout.HORIZONTAL;
+import static android.widget.LinearLayout.VERTICAL;
+import static android.widget.Toast.LENGTH_SHORT;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
 
-public class GroupListActivity extends BriarActivity
+public class ForumListActivity extends BriarActivity
 implements EventListener, OnClickListener, OnItemClickListener,
 OnCreateContextMenuListener {
 
 	private static final int MENU_ITEM_UNSUBSCRIBE = 1;
 	private static final Logger LOG =
-			Logger.getLogger(GroupListActivity.class.getName());
+			Logger.getLogger(ForumListActivity.class.getName());
 
-	private final Map<GroupId,GroupId> groups =
-			new ConcurrentHashMap<GroupId,GroupId>();
+	private final Map<GroupId, GroupId> groupIds =
+			new ConcurrentHashMap<GroupId, GroupId>();
 
 	private TextView empty = null;
-	private GroupListAdapter adapter = null;
+	private ForumListAdapter adapter = null;
 	private ListView list = null;
 	private ListLoadingProgressBar loading = null;
 	private TextView available = null;
-	private ImageButton newGroupButton = null;
+	private ImageButton newForumButton = null;
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject private volatile DatabaseComponent db;
@@ -99,7 +99,7 @@ OnCreateContextMenuListener {
 		empty.setVisibility(GONE);
 		layout.addView(empty);
 
-		adapter = new GroupListAdapter(this);
+		adapter = new ForumListAdapter(this);
 		list = new ListView(this);
 		list.setLayoutParams(MATCH_WRAP_1);
 		list.setAdapter(adapter);
@@ -131,11 +131,11 @@ OnCreateContextMenuListener {
 		footer.setOrientation(HORIZONTAL);
 		footer.setGravity(CENTER);
 		footer.setBackgroundColor(res.getColor(R.color.button_bar_background));
-		newGroupButton = new ImageButton(this);
-		newGroupButton.setBackgroundResource(0);
-		newGroupButton.setImageResource(R.drawable.social_new_chat);
-		newGroupButton.setOnClickListener(this);
-		footer.addView(newGroupButton);
+		newForumButton = new ImageButton(this);
+		newForumButton.setBackgroundResource(0);
+		newForumButton.setImageResource(R.drawable.social_new_chat);
+		newForumButton.setOnClickListener(this);
+		footer.addView(newForumButton);
 		layout.addView(footer);
 
 		setContentView(layout);
@@ -177,7 +177,7 @@ OnCreateContextMenuListener {
 	private void clearHeaders() {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				groups.clear();
+				groupIds.clear();
 				empty.setVisibility(GONE);
 				list.setVisibility(GONE);
 				available.setVisibility(GONE);
@@ -193,15 +193,15 @@ OnCreateContextMenuListener {
 		runOnUiThread(new Runnable() {
 			public void run() {
 				GroupId id = g.getId();
-				groups.put(id, id);
+				groupIds.put(id, id);
 				list.setVisibility(VISIBLE);
 				loading.setVisibility(GONE);
 				// Remove the old item, if any
-				GroupListItem item = findGroup(id);
+				ForumListItem item = findForum(id);
 				if (item != null) adapter.remove(item);
 				// Add a new item
-				adapter.add(new GroupListItem(g, headers));
-				adapter.sort(GroupListItemComparator.INSTANCE);
+				adapter.add(new ForumListItem(g, headers));
+				adapter.sort(ForumListItemComparator.INSTANCE);
 				adapter.notifyDataSetChanged();
 				selectFirstUnread();
 			}
@@ -225,10 +225,10 @@ OnCreateContextMenuListener {
 		});
 	}
 
-	private GroupListItem findGroup(GroupId g) {
+	private ForumListItem findForum(GroupId g) {
 		int count = adapter.getCount();
 		for (int i = 0; i < count; i++) {
-			GroupListItem item = adapter.getItem(i);
+			ForumListItem item = adapter.getItem(i);
 			if (item.getGroup().getId().equals(g)) return item;
 		}
 		return null; // Not found
@@ -255,7 +255,7 @@ OnCreateContextMenuListener {
 	public void eventOccurred(Event e) {
 		if (e instanceof MessageAddedEvent) {
 			Group g = ((MessageAddedEvent) e).getGroup();
-			if (groups.containsKey(g.getId())) {
+			if (groupIds.containsKey(g.getId())) {
 				LOG.info("Message added, reloading");
 				loadHeaders(g);
 			}
@@ -270,7 +270,7 @@ OnCreateContextMenuListener {
 			loadHeaders();
 		} else if (e instanceof SubscriptionRemovedEvent) {
 			Group g = ((SubscriptionRemovedEvent) e).getGroup();
-			if (groups.containsKey(g.getId())) {
+			if (groupIds.containsKey(g.getId())) {
 				LOG.info("Group removed, reloading");
 				loadHeaders();
 			}
@@ -289,7 +289,7 @@ OnCreateContextMenuListener {
 						LOG.info("Partial load took " + duration + " ms");
 					displayHeaders(g, headers);
 				} catch (NoSuchSubscriptionException e) {
-					removeGroup(g.getId());
+					removeForum(g.getId());
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
@@ -298,12 +298,12 @@ OnCreateContextMenuListener {
 		});
 	}
 
-	private void removeGroup(final GroupId g) {
+	private void removeForum(final GroupId g) {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				GroupListItem item = findGroup(g);
+				ForumListItem item = findForum(g);
 				if (item != null) {
-					groups.remove(g);
+					groupIds.remove(g);
 					adapter.remove(item);
 					adapter.notifyDataSetChanged();
 					if (adapter.isEmpty()) {
@@ -337,18 +337,18 @@ OnCreateContextMenuListener {
 
 	public void onClick(View view) {
 		if (view == available) {
-			startActivity(new Intent(this, AvailableGroupsActivity.class));
-		} else if (view == newGroupButton) {
-			startActivity(new Intent(this, CreateGroupActivity.class));
+			startActivity(new Intent(this, AvailableForumsActivity.class));
+		} else if (view == newForumButton) {
+			startActivity(new Intent(this, CreateForumActivity.class));
 		}
 	}
 
 	public void onItemClick(AdapterView<?> parent, View view, int position,
 			long id) {
-		Intent i = new Intent(this, GroupActivity.class);
+		Intent i = new Intent(this, ForumActivity.class);
 		Group g = adapter.getItem(position).getGroup();
 		i.putExtra("briar.GROUP_ID", g.getId().getBytes());
-		i.putExtra("briar.GROUP_NAME", g.getName());
+		i.putExtra("briar.FORUM_NAME", g.getName());
 		startActivity(i);
 	}
 
@@ -364,7 +364,7 @@ OnCreateContextMenuListener {
 		if (menuItem.getItemId() == MENU_ITEM_UNSUBSCRIBE) {
 			ContextMenuInfo info = menuItem.getMenuInfo();
 			int position = ((AdapterContextMenuInfo) info).position;
-			GroupListItem item = adapter.getItem(position);
+			ForumListItem item = adapter.getItem(position);
 			removeSubscription(item.getGroup());
 			String unsubscribed = getString(R.string.unsubscribed_toast);
 			Toast.makeText(this, unsubscribed, LENGTH_SHORT).show();
diff --git a/briar-android/src/org/briarproject/android/groups/GroupListAdapter.java b/briar-android/src/org/briarproject/android/forum/ForumListAdapter.java
similarity index 83%
rename from briar-android/src/org/briarproject/android/groups/GroupListAdapter.java
rename to briar-android/src/org/briarproject/android/forum/ForumListAdapter.java
index bceebb5e77e20fdd12d7cb1b8059dd9e3cc60fe0..e61cf9d249c3b275b16b4b40cf8c0c21a83724e1 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupListAdapter.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumListAdapter.java
@@ -1,13 +1,4 @@
-package org.briarproject.android.groups;
-
-import static android.text.TextUtils.TruncateAt.END;
-import static android.widget.LinearLayout.HORIZONTAL;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
-
-import java.util.ArrayList;
-
-import org.briarproject.R;
-import org.briarproject.android.util.LayoutUtils;
+package org.briarproject.android.forum;
 
 import android.content.Context;
 import android.content.res.Resources;
@@ -18,19 +9,28 @@ import android.widget.ArrayAdapter;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-class GroupListAdapter extends ArrayAdapter<GroupListItem> {
+import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+
+import java.util.ArrayList;
+
+import static android.text.TextUtils.TruncateAt.END;
+import static android.widget.LinearLayout.HORIZONTAL;
+import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
+
+class ForumListAdapter extends ArrayAdapter<ForumListItem> {
 
 	private final int pad;
 
-	GroupListAdapter(Context ctx) {
+	ForumListAdapter(Context ctx) {
 		super(ctx, android.R.layout.simple_expandable_list_item_1,
-				new ArrayList<GroupListItem>());
+				new ArrayList<ForumListItem>());
 		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	@Override
 	public View getView(int position, View convertView, ViewGroup parent) {
-		GroupListItem item = getItem(position);
+		ForumListItem item = getItem(position);
 		Context ctx = getContext();
 		Resources res = ctx.getResources();
 
@@ -46,9 +46,9 @@ class GroupListAdapter extends ArrayAdapter<GroupListItem> {
 		name.setSingleLine();
 		name.setEllipsize(END);
 		name.setPadding(pad, pad, pad, pad);
-		String groupName = item.getGroup().getName();
-		if (unread > 0) name.setText(groupName + " (" + unread + ")");
-		else name.setText(groupName);
+		String forumName = item.getGroup().getName();
+		if (unread > 0) name.setText(forumName + " (" + unread + ")");
+		else name.setText(forumName);
 		layout.addView(name);
 
 		if (item.isEmpty()) {
diff --git a/briar-android/src/org/briarproject/android/groups/GroupListItem.java b/briar-android/src/org/briarproject/android/forum/ForumListItem.java
similarity index 60%
rename from briar-android/src/org/briarproject/android/groups/GroupListItem.java
rename to briar-android/src/org/briarproject/android/forum/ForumListItem.java
index 4b26d33b4a4c90b0b33557e44bffc8f92a9a2795..c20b91603fed1ba8bf0ed198875bdada8e47128a 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupListItem.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumListItem.java
@@ -1,30 +1,26 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
-import java.util.Collection;
-
-import org.briarproject.api.Author;
 import org.briarproject.api.db.MessageHeader;
 import org.briarproject.api.messaging.Group;
 
-class GroupListItem {
+import java.util.Collection;
+
+class ForumListItem {
 
 	private final Group group;
 	private final boolean empty;
-	private final String authorName, contentType;
 	private final long timestamp;
 	private final int unread;
 
-	GroupListItem(Group group, Collection<MessageHeader> headers) {
+	ForumListItem(Group group, Collection<MessageHeader> headers) {
 		this.group = group;
 		empty = headers.isEmpty();
 		if (empty) {
-			authorName = null;
-			contentType = null;
 			timestamp = 0;
 			unread = 0;
 		} else {
 			MessageHeader newest = null;
-			long timestamp = 0;
+			long timestamp = -1;
 			int unread = 0;
 			for (MessageHeader h : headers) {
 				if (h.getTimestamp() > timestamp) {
@@ -33,10 +29,6 @@ class GroupListItem {
 				}
 				if (!h.isRead()) unread++;
 			}
-			Author a = newest.getAuthor();
-			if (a == null) authorName = null;
-			else authorName = a.getName();
-			contentType = newest.getContentType();
 			this.timestamp = newest.getTimestamp();
 			this.unread = unread;
 		}
@@ -50,14 +42,6 @@ class GroupListItem {
 		return empty;
 	}
 
-	String getAuthorName() {
-		return authorName;
-	}
-
-	String getContentType() {
-		return contentType;
-	}
-
 	long getTimestamp() {
 		return timestamp;
 	}
diff --git a/briar-android/src/org/briarproject/android/groups/GroupListItemComparator.java b/briar-android/src/org/briarproject/android/forum/ForumListItemComparator.java
similarity index 62%
rename from briar-android/src/org/briarproject/android/groups/GroupListItemComparator.java
rename to briar-android/src/org/briarproject/android/forum/ForumListItemComparator.java
index 7d179a7749ccca32351bd0dd8e3cc613a37aefeb..46bc0d613a78c015ab40ae1f4150f4e21cb0bd1c 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupListItemComparator.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumListItemComparator.java
@@ -1,13 +1,13 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
 import java.util.Comparator;
 
-class GroupListItemComparator implements Comparator<GroupListItem> {
+class ForumListItemComparator implements Comparator<ForumListItem> {
 
-	static final GroupListItemComparator INSTANCE =
-			new GroupListItemComparator();
+	static final ForumListItemComparator INSTANCE =
+			new ForumListItemComparator();
 
-	public int compare(GroupListItem a, GroupListItem b) {
+	public int compare(ForumListItem a, ForumListItem b) {
 		if (a == b) return 0;
 		// The item with the newest message comes first
 		long aTime = a.getTimestamp(), bTime = b.getTimestamp();
diff --git a/briar-android/src/org/briarproject/android/groups/NoContactsDialog.java b/briar-android/src/org/briarproject/android/forum/NoContactsDialog.java
similarity index 96%
rename from briar-android/src/org/briarproject/android/groups/NoContactsDialog.java
rename to briar-android/src/org/briarproject/android/forum/NoContactsDialog.java
index 4ca0b6ede41736be5720ba7401f62d2f1f960d23..8e6340aa34e6cd9ede5753cec0b20050a475a5a7 100644
--- a/briar-android/src/org/briarproject/android/groups/NoContactsDialog.java
+++ b/briar-android/src/org/briarproject/android/forum/NoContactsDialog.java
@@ -1,12 +1,12 @@
-package org.briarproject.android.groups;
-
-import org.briarproject.R;
+package org.briarproject.android.forum;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
 
+import org.briarproject.R;
+
 public class NoContactsDialog {
 
 	private Listener listener = null;
diff --git a/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java b/briar-android/src/org/briarproject/android/forum/ReadForumPostActivity.java
similarity index 93%
rename from briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
rename to briar-android/src/org/briarproject/android/forum/ReadForumPostActivity.java
index d97d6e88d07eb9a4e82b3c82261640b171986c41..0318ecb24a64e9053a93d9b5cc3e2a9e04ce7f0c 100644
--- a/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ReadForumPostActivity.java
@@ -1,18 +1,15 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
-import static android.view.Gravity.CENTER;
-import static android.view.Gravity.CENTER_VERTICAL;
-import static android.widget.LinearLayout.HORIZONTAL;
-import static android.widget.LinearLayout.VERTICAL;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
-
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.text.format.DateUtils;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
@@ -28,29 +25,32 @@ import org.briarproject.api.messaging.GroupId;
 import org.briarproject.api.messaging.MessageId;
 import org.briarproject.util.StringUtils;
 
-import android.content.Intent;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.text.format.DateUtils;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.ScrollView;
-import android.widget.TextView;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.view.Gravity.CENTER;
+import static android.view.Gravity.CENTER_VERTICAL;
+import static android.widget.LinearLayout.HORIZONTAL;
+import static android.widget.LinearLayout.VERTICAL;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
+import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
 
-public class ReadGroupPostActivity extends BriarActivity
+public class ReadForumPostActivity extends BriarActivity
 implements OnClickListener {
 
 	static final int RESULT_REPLY = RESULT_FIRST_USER;
 	static final int RESULT_PREV_NEXT = RESULT_FIRST_USER + 1;
 
 	private static final Logger LOG =
-			Logger.getLogger(ReadGroupPostActivity.class.getName());
+			Logger.getLogger(ReadForumPostActivity.class.getName());
 
 	private GroupId groupId = null;
-	private String groupName = null;
-	private long timestamp = -1, minTimestamp = -1;
+	private String forumName = null;
+	private long minTimestamp = -1;
 	private ImageButton prevButton = null, nextButton = null;
 	private ImageButton replyButton = null;
 	private TextView content = null;
@@ -68,15 +68,15 @@ implements OnClickListener {
 		byte[] b = i.getByteArrayExtra("briar.GROUP_ID");
 		if (b == null) throw new IllegalStateException();
 		groupId = new GroupId(b);
-		groupName = i.getStringExtra("briar.GROUP_NAME");
-		if (groupName == null) throw new IllegalStateException();
-		setTitle(groupName);
+		forumName = i.getStringExtra("briar.FORUM_NAME");
+		if (forumName == null) throw new IllegalStateException();
+		setTitle(forumName);
 		b = i.getByteArrayExtra("briar.MESSAGE_ID");
 		if (b == null) throw new IllegalStateException();
 		messageId = new MessageId(b);
 		String contentType = i.getStringExtra("briar.CONTENT_TYPE");
 		if (contentType == null) throw new IllegalStateException();
-		timestamp = i.getLongExtra("briar.TIMESTAMP", -1);
+		long timestamp = i.getLongExtra("briar.TIMESTAMP", -1);
 		if (timestamp == -1) throw new IllegalStateException();
 		minTimestamp = i.getLongExtra("briar.MIN_TIMESTAMP", -1);
 		if (minTimestamp == -1) throw new IllegalStateException();
@@ -221,9 +221,9 @@ implements OnClickListener {
 			setResult(RESULT_PREV_NEXT, i);
 			finish();
 		} else if (view == replyButton) {
-			Intent i = new Intent(this, WriteGroupPostActivity.class);
+			Intent i = new Intent(this, WriteForumPostActivity.class);
 			i.putExtra("briar.GROUP_ID", groupId.getBytes());
-			i.putExtra("briar.GROUP_NAME", groupName);
+			i.putExtra("briar.FORUM_NAME", forumName);
 			i.putExtra("briar.PARENT_ID", messageId.getBytes());
 			i.putExtra("briar.MIN_TIMESTAMP", minTimestamp);
 			startActivity(i);
diff --git a/briar-android/src/org/briarproject/android/groups/ShareGroupActivity.java b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
similarity index 91%
rename from briar-android/src/org/briarproject/android/groups/ShareGroupActivity.java
rename to briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
index 1169c69e1ae8557f3cc4b193cd94625eceb624fd..3f736c096b132dccdb6148e44c8952de14ca1505 100644
--- a/briar-android/src/org/briarproject/android/groups/ShareGroupActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
@@ -1,19 +1,14 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
-import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-import static android.widget.LinearLayout.VERTICAL;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
@@ -26,24 +21,28 @@ import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.messaging.GroupId;
 
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.RadioButton;
-import android.widget.RadioGroup;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.view.Gravity.CENTER_HORIZONTAL;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+import static android.widget.LinearLayout.VERTICAL;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
+import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
 
-public class ShareGroupActivity extends BriarActivity
+public class ShareForumActivity extends BriarActivity
 implements OnClickListener, NoContactsDialog.Listener,
 SelectContactsDialog.Listener {
 
 	private static final Logger LOG =
-			Logger.getLogger(ShareGroupActivity.class.getName());
+			Logger.getLogger(ShareForumActivity.class.getName());
 
-	private String groupName = null;
 	private RadioGroup radioGroup = null;
 	private RadioButton shareWithAll = null, shareWithSome = null;
 	private Button shareButton = null;
@@ -64,9 +63,9 @@ SelectContactsDialog.Listener {
 		byte[] b = i.getByteArrayExtra("briar.GROUP_ID");
 		if (b == null) throw new IllegalStateException();
 		groupId = new GroupId(b);
-		groupName = i.getStringExtra("briar.GROUP_NAME");
-		if (groupName == null) throw new IllegalStateException();
-		setTitle(groupName);
+		String forumName = i.getStringExtra("briar.FORUM_NAME");
+		if (forumName == null) throw new IllegalStateException();
+		setTitle(forumName);
 
 		LinearLayout layout = new LinearLayout(this);
 		layout.setLayoutParams(MATCH_MATCH);
@@ -156,14 +155,14 @@ SelectContactsDialog.Listener {
 			public void run() {
 				if (contacts.isEmpty()) {
 					NoContactsDialog builder = new NoContactsDialog();
-					builder.setListener(ShareGroupActivity.this);
-					builder.build(ShareGroupActivity.this).show();
+					builder.setListener(ShareForumActivity.this);
+					builder.build(ShareForumActivity.this).show();
 				} else {
 					SelectContactsDialog builder = new SelectContactsDialog();
-					builder.setListener(ShareGroupActivity.this);
+					builder.setListener(ShareForumActivity.this);
 					builder.setContacts(contacts);
 					builder.setSelected(selected);
-					builder.build(ShareGroupActivity.this).show();
+					builder.build(ShareForumActivity.this).show();
 				}
 			}
 		});
diff --git a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java b/briar-android/src/org/briarproject/android/forum/WriteForumPostActivity.java
similarity index 97%
rename from briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
rename to briar-android/src/org/briarproject/android/forum/WriteForumPostActivity.java
index ff5c2c8a204056bcd77d31fe31737eed2f2c7e73..6ae49b1faf1fa8bfe0d657c447732ed5e6d61b4b 100644
--- a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/WriteForumPostActivity.java
@@ -1,25 +1,19 @@
-package org.briarproject.android.groups;
+package org.briarproject.android.forum;
 
-import static android.text.InputType.TYPE_CLASS_TEXT;
-import static android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
-import static android.widget.LinearLayout.VERTICAL;
-import static android.widget.RelativeLayout.ALIGN_PARENT_LEFT;
-import static android.widget.RelativeLayout.ALIGN_PARENT_RIGHT;
-import static android.widget.RelativeLayout.CENTER_VERTICAL;
-import static android.widget.RelativeLayout.LEFT_OF;
-import static android.widget.RelativeLayout.RIGHT_OF;
-import static android.widget.Toast.LENGTH_LONG;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
-
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.util.Collection;
-import java.util.concurrent.Executor;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.InputType;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
@@ -44,27 +38,33 @@ import org.briarproject.api.messaging.MessageFactory;
 import org.briarproject.api.messaging.MessageId;
 import org.briarproject.util.StringUtils;
 
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.InputType;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.TextView;
-import android.widget.Toast;
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.util.Collection;
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.text.InputType.TYPE_CLASS_TEXT;
+import static android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
+import static android.widget.LinearLayout.VERTICAL;
+import static android.widget.RelativeLayout.ALIGN_PARENT_LEFT;
+import static android.widget.RelativeLayout.ALIGN_PARENT_RIGHT;
+import static android.widget.RelativeLayout.CENTER_VERTICAL;
+import static android.widget.RelativeLayout.LEFT_OF;
+import static android.widget.RelativeLayout.RIGHT_OF;
+import static android.widget.Toast.LENGTH_LONG;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
 
-public class WriteGroupPostActivity extends BriarActivity
+public class WriteForumPostActivity extends BriarActivity
 implements OnItemSelectedListener, OnClickListener {
 
 	private static final int REQUEST_CREATE_IDENTITY = 2;
 	private static final Logger LOG =
-			Logger.getLogger(WriteGroupPostActivity.class.getName());
+			Logger.getLogger(WriteForumPostActivity.class.getName());
 
 	@Inject @CryptoExecutor private Executor cryptoExecutor;
 	private LocalAuthorSpinnerAdapter adapter = null;
@@ -91,9 +91,9 @@ implements OnItemSelectedListener, OnClickListener {
 		byte[] b = i.getByteArrayExtra("briar.GROUP_ID");
 		if (b == null) throw new IllegalStateException();
 		groupId = new GroupId(b);
-		String groupName = i.getStringExtra("briar.GROUP_NAME");
-		if (groupName == null) throw new IllegalStateException();
-		setTitle(groupName);
+		String forumName = i.getStringExtra("briar.FORUM_NAME");
+		if (forumName == null) throw new IllegalStateException();
+		setTitle(forumName);
 		minTimestamp = i.getLongExtra("briar.MIN_TIMESTAMP", -1);
 		if (minTimestamp == -1) throw new IllegalStateException();
 		b = i.getByteArrayExtra("briar.PARENT_ID");
diff --git a/briar-android/src/org/briarproject/android/groups/AvailableGroupsItem.java b/briar-android/src/org/briarproject/android/groups/AvailableGroupsItem.java
deleted file mode 100644
index aaf39676f631b7fdaa7c9447ee6c054e3d5fcad5..0000000000000000000000000000000000000000
--- a/briar-android/src/org/briarproject/android/groups/AvailableGroupsItem.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.briarproject.android.groups;
-
-import java.util.Collection;
-
-import org.briarproject.api.Contact;
-import org.briarproject.api.messaging.Group;
-
-class AvailableGroupsItem {
-
-	private final GroupContacts groupContacts;
-
-	AvailableGroupsItem(GroupContacts groupContacts) {
-		this.groupContacts = groupContacts;
-	}
-
-	Group getGroup() {
-		return groupContacts.getGroup();
-	}
-
-	Collection<Contact> getContacts() {
-		return groupContacts.getContacts();
-	}
-}
diff --git a/briar-android/src/org/briarproject/android/groups/AvailableGroupsItemComparator.java b/briar-android/src/org/briarproject/android/groups/AvailableGroupsItemComparator.java
deleted file mode 100644
index 884013559004f6870e2ad48b4fbae3512dc40d44..0000000000000000000000000000000000000000
--- a/briar-android/src/org/briarproject/android/groups/AvailableGroupsItemComparator.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.briarproject.android.groups;
-
-import java.util.Comparator;
-
-class AvailableGroupsItemComparator implements Comparator<AvailableGroupsItem> {
-
-	static final AvailableGroupsItemComparator INSTANCE =
-			new AvailableGroupsItemComparator();
-
-	public int compare(AvailableGroupsItem a, AvailableGroupsItem b) {
-		if (a == b) return 0;
-		String aName = a.getGroup().getName();
-		String bName = b.getGroup().getName();
-		return String.CASE_INSENSITIVE_ORDER.compare(aName, bName);
-	}
-}
diff --git a/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java b/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
index 992116647047df605723da8471fb78e6ea7258f8..a824b1ca5ddf7711291ec26b15d2b18906a752c2 100644
--- a/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
+++ b/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
@@ -10,13 +10,13 @@ import org.briarproject.api.messaging.GroupId;
  */
 public interface AndroidNotificationManager extends Service {
 
-	public void showPrivateMessageNotification(ContactId c);
+	void showPrivateMessageNotification(ContactId c);
 
-	public void clearPrivateMessageNotification(ContactId c);
+	void clearPrivateMessageNotification(ContactId c);
 
-	public void showGroupPostNotification(GroupId g);
+	void showForumPostNotification(GroupId g);
 
-	public void clearGroupPostNotification(GroupId g);
+	void clearForumPostNotification(GroupId g);
 
-	public void clearNotifications();
+	void clearNotifications();
 }