diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java
index a8b3dee8b96705d920673fa205b7765502e86328..7f5b272848905c73f66dfc20263bd60d01dc527a 100644
--- a/briar-android/src/org/briarproject/android/ActivityComponent.java
+++ b/briar-android/src/org/briarproject/android/ActivityComponent.java
@@ -4,6 +4,7 @@ import android.app.Activity;
 
 import org.briarproject.android.blogs.BlogActivity;
 import org.briarproject.android.blogs.BlogFragment;
+import org.briarproject.android.blogs.BlogModule;
 import org.briarproject.android.blogs.BlogPostFragment;
 import org.briarproject.android.blogs.BlogPostPagerFragment;
 import org.briarproject.android.blogs.FeedFragment;
@@ -15,10 +16,12 @@ import org.briarproject.android.blogs.RssFeedImportActivity;
 import org.briarproject.android.blogs.RssFeedManageActivity;
 import org.briarproject.android.blogs.WriteBlogPostActivity;
 import org.briarproject.android.contact.ContactListFragment;
+import org.briarproject.android.contact.ContactModule;
 import org.briarproject.android.contact.ConversationActivity;
 import org.briarproject.android.forum.CreateForumActivity;
 import org.briarproject.android.forum.ForumActivity;
 import org.briarproject.android.forum.ForumListFragment;
+import org.briarproject.android.forum.ForumModule;
 import org.briarproject.android.introduction.ContactChooserFragment;
 import org.briarproject.android.introduction.IntroductionActivity;
 import org.briarproject.android.introduction.IntroductionMessageFragment;
@@ -29,14 +32,20 @@ import org.briarproject.android.keyagreement.ShowQrCodeFragment;
 import org.briarproject.android.panic.PanicPreferencesActivity;
 import org.briarproject.android.panic.PanicResponderActivity;
 import org.briarproject.android.privategroup.conversation.GroupActivity;
+import org.briarproject.android.privategroup.conversation.GroupConversationModule;
 import org.briarproject.android.privategroup.creation.CreateGroupActivity;
 import org.briarproject.android.privategroup.creation.CreateGroupFragment;
 import org.briarproject.android.privategroup.creation.CreateGroupMessageFragment;
+import org.briarproject.android.privategroup.creation.GroupCreateModule;
 import org.briarproject.android.privategroup.creation.GroupInviteActivity;
 import org.briarproject.android.privategroup.creation.GroupInviteFragment;
 import org.briarproject.android.privategroup.invitation.GroupInvitationActivity;
+import org.briarproject.android.privategroup.invitation.GroupInvitationModule;
 import org.briarproject.android.privategroup.list.GroupListFragment;
+import org.briarproject.android.privategroup.list.GroupListModule;
 import org.briarproject.android.privategroup.memberlist.GroupMemberListActivity;
+import org.briarproject.android.privategroup.memberlist.GroupMemberModule;
+import org.briarproject.android.privategroup.reveal.GroupRevealModule;
 import org.briarproject.android.privategroup.reveal.RevealContactsActivity;
 import org.briarproject.android.privategroup.reveal.RevealContactsFragment;
 import org.briarproject.android.sharing.BlogInvitationActivity;
@@ -49,13 +58,19 @@ import org.briarproject.android.sharing.ShareBlogMessageFragment;
 import org.briarproject.android.sharing.ShareForumActivity;
 import org.briarproject.android.sharing.ShareForumFragment;
 import org.briarproject.android.sharing.ShareForumMessageFragment;
+import org.briarproject.android.sharing.SharingModule;
 import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
 import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
 
 import dagger.Component;
 
 @ActivityScope
-@Component(modules = ActivityModule.class,
+@Component(
+		modules = {ActivityModule.class, ForumModule.class, SharingModule.class,
+				BlogModule.class, ContactModule.class, GroupListModule.class,
+				GroupCreateModule.class, GroupInvitationModule.class,
+				GroupConversationModule.class, GroupMemberModule.class,
+				GroupRevealModule.class},
 		dependencies = AndroidComponent.class)
 public interface ActivityComponent {
 
diff --git a/briar-android/src/org/briarproject/android/ActivityModule.java b/briar-android/src/org/briarproject/android/ActivityModule.java
index 4f17c24bc6596b48a663a019ad7c9c013453f993..0402ef56fc46948dd0d29b508e433d462cd005af 100644
--- a/briar-android/src/org/briarproject/android/ActivityModule.java
+++ b/briar-android/src/org/briarproject/android/ActivityModule.java
@@ -3,10 +3,6 @@ package org.briarproject.android;
 import android.app.Activity;
 import android.content.SharedPreferences;
 
-import org.briarproject.android.blogs.BlogController;
-import org.briarproject.android.blogs.BlogControllerImpl;
-import org.briarproject.android.blogs.FeedController;
-import org.briarproject.android.blogs.FeedControllerImpl;
 import org.briarproject.android.controller.BriarController;
 import org.briarproject.android.controller.BriarControllerImpl;
 import org.briarproject.android.controller.ConfigController;
@@ -19,28 +15,6 @@ import org.briarproject.android.controller.PasswordController;
 import org.briarproject.android.controller.PasswordControllerImpl;
 import org.briarproject.android.controller.SetupController;
 import org.briarproject.android.controller.SetupControllerImpl;
-import org.briarproject.android.forum.ForumController;
-import org.briarproject.android.forum.ForumControllerImpl;
-import org.briarproject.android.privategroup.conversation.GroupController;
-import org.briarproject.android.privategroup.conversation.GroupControllerImpl;
-import org.briarproject.android.privategroup.creation.CreateGroupController;
-import org.briarproject.android.privategroup.creation.CreateGroupControllerImpl;
-import org.briarproject.android.privategroup.invitation.GroupInvitationController;
-import org.briarproject.android.privategroup.invitation.GroupInvitationControllerImpl;
-import org.briarproject.android.privategroup.list.GroupListController;
-import org.briarproject.android.privategroup.list.GroupListControllerImpl;
-import org.briarproject.android.privategroup.memberlist.GroupMemberListController;
-import org.briarproject.android.privategroup.memberlist.GroupMemberListControllerImpl;
-import org.briarproject.android.privategroup.reveal.RevealContactsController;
-import org.briarproject.android.privategroup.reveal.RevealContactsControllerImpl;
-import org.briarproject.android.sharing.BlogInvitationController;
-import org.briarproject.android.sharing.BlogInvitationControllerImpl;
-import org.briarproject.android.sharing.ForumInvitationController;
-import org.briarproject.android.sharing.ForumInvitationControllerImpl;
-import org.briarproject.android.sharing.ShareBlogController;
-import org.briarproject.android.sharing.ShareBlogControllerImpl;
-import org.briarproject.android.sharing.ShareForumController;
-import org.briarproject.android.sharing.ShareForumControllerImpl;
 
 import dagger.Module;
 import dagger.Provides;
@@ -110,100 +84,6 @@ public class ActivityModule {
 		return dbController;
 	}
 
-	@ActivityScope
-	@Provides
-	GroupListController provideGroupListController(
-			GroupListControllerImpl groupListController) {
-		return groupListController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected CreateGroupController provideCreateGroupController(
-			CreateGroupControllerImpl createGroupController) {
-		return createGroupController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected GroupController provideGroupController(
-			GroupControllerImpl groupController) {
-		activity.addLifecycleController(groupController);
-		return groupController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected GroupInvitationController provideInvitationGroupController(
-			GroupInvitationControllerImpl groupInvitationController) {
-		return groupInvitationController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected GroupMemberListController provideGroupMemberListController(
-			GroupMemberListControllerImpl groupMemberListController) {
-		return groupMemberListController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected RevealContactsController provideRevealContactsController(
-			RevealContactsControllerImpl revealContactsController) {
-		return revealContactsController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected ForumController provideForumController(
-			ForumControllerImpl forumController) {
-		activity.addLifecycleController(forumController);
-		return forumController;
-	}
-
-	@ActivityScope
-	@Provides
-	ShareForumController provideShareForumController(
-			ShareForumControllerImpl shareForumController) {
-		return shareForumController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected ForumInvitationController provideInvitationForumController(
-			ForumInvitationControllerImpl forumInvitationController) {
-		activity.addLifecycleController(forumInvitationController);
-		return forumInvitationController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected BlogInvitationController provideInvitationBlogController(
-			BlogInvitationControllerImpl blogInvitationController) {
-		activity.addLifecycleController(blogInvitationController);
-		return blogInvitationController;
-	}
-
-	@ActivityScope
-	@Provides
-	BlogController provideBlogController(BlogControllerImpl blogController) {
-		activity.addLifecycleController(blogController);
-		return blogController;
-	}
-
-	@ActivityScope
-	@Provides
-	ShareBlogController provideShareBlogController(
-			ShareBlogControllerImpl shareBlogController) {
-		return shareBlogController;
-	}
-
-	@ActivityScope
-	@Provides
-	FeedController provideFeedController(FeedControllerImpl feedController) {
-		return feedController;
-	}
-
 	@ActivityScope
 	@Provides
 	NavDrawerController provideNavDrawerController(
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java
index daa5bf4668b9667228ec08798c5d5e07e280b7e0..02395fbf10775009a93b15cc21c7c8f0c587e01e 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/org/briarproject/android/BaseActivity.java
@@ -8,6 +8,7 @@ import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
 import org.briarproject.android.controller.ActivityLifecycleController;
+import org.briarproject.android.forum.ForumModule;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,6 +44,7 @@ public abstract class BaseActivity extends AppCompatActivity
 		activityComponent = DaggerActivityComponent.builder()
 				.androidComponent(applicationComponent)
 				.activityModule(getActivityModule())
+				.forumModule(getForumModule())
 				.build();
 
 		injectActivity(activityComponent);
@@ -61,6 +63,10 @@ public abstract class BaseActivity extends AppCompatActivity
 		return new ActivityModule(this);
 	}
 
+	protected ForumModule getForumModule() {
+		return new ForumModule();
+	}
+
 	@Override
 	protected void onStart() {
 		super.onStart();
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
index 64cee65a5b89d45644f6fab5674e5398b0e05e10..abc5108e94a78f246fcbeaa7befbcc8570a7f2fc 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
@@ -29,7 +29,7 @@ import javax.inject.Inject;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 
-public class BlogControllerImpl extends BaseControllerImpl
+class BlogControllerImpl extends BaseControllerImpl
 		implements ActivityLifecycleController, BlogController, EventListener {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogModule.java b/briar-android/src/org/briarproject/android/blogs/BlogModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4392e90a438b68ad924c20a382a569f974b27f0
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/blogs/BlogModule.java
@@ -0,0 +1,25 @@
+package org.briarproject.android.blogs;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class BlogModule {
+
+	@ActivityScope
+	@Provides
+	BlogController provideBlogController(BaseActivity activity,
+			BlogControllerImpl blogController) {
+		activity.addLifecycleController(blogController);
+		return blogController;
+	}
+
+	@ActivityScope
+	@Provides
+	FeedController provideFeedController(FeedControllerImpl feedController) {
+		return feedController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
index 33cce78e29c60a2b1357dd58c74baa1df3cce36d..a70097b34d2daf1f53d7e6cc66653fbbe7a48663 100644
--- a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
@@ -27,7 +27,7 @@ import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.blogs.BlogManager.CLIENT_ID;
 
-public class FeedControllerImpl extends BaseControllerImpl
+class FeedControllerImpl extends BaseControllerImpl
 		implements FeedController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/contact/ContactModule.java b/briar-android/src/org/briarproject/android/contact/ContactModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..b9bf00e24de8034e2ab88e8f9b036d6d8cfc1ed0
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/contact/ContactModule.java
@@ -0,0 +1,7 @@
+package org.briarproject.android.contact;
+
+import dagger.Module;
+
+@Module
+public class ContactModule {
+}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java b/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
index 55c8f817b86e5b4e0d62a32dd6003c0b13561c08..7cc859614d2f8e2d5b58a21dc3c5067753cd89c8 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
@@ -32,7 +32,7 @@ import javax.inject.Inject;
 import static java.lang.Math.max;
 import static java.util.logging.Level.WARNING;
 
-public class ForumControllerImpl
+class ForumControllerImpl
 		extends ThreadListControllerImpl<Forum, ForumItem, ForumPostHeader, ForumPost, ThreadListListener<ForumPostHeader>>
 		implements ForumController {
 
diff --git a/briar-android/src/org/briarproject/android/forum/ForumModule.java b/briar-android/src/org/briarproject/android/forum/ForumModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b665673be1fb08427fb5cecc98990aeec198ad1
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/forum/ForumModule.java
@@ -0,0 +1,20 @@
+package org.briarproject.android.forum;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class ForumModule {
+
+	@ActivityScope
+	@Provides
+	ForumController provideForumController(BaseActivity activity,
+			ForumControllerImpl forumController) {
+		activity.addLifecycleController(forumController);
+		return forumController;
+	}
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
index 630da0e85b24e0824993ea0122d1441782b380b0..7cea3d521f9a3c991e66aa4d11a40e9a8041eec6 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
@@ -36,7 +36,7 @@ import javax.inject.Inject;
 import static java.lang.Math.max;
 import static java.util.logging.Level.WARNING;
 
-public class GroupControllerImpl extends
+class GroupControllerImpl extends
 		ThreadListControllerImpl<PrivateGroup, GroupMessageItem, GroupMessageHeader, GroupMessage, GroupListener>
 		implements GroupController {
 
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..8595b461c3af8bf097368556956d4aff8655d89c
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java
@@ -0,0 +1,19 @@
+package org.briarproject.android.privategroup.conversation;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupConversationModule {
+
+	@ActivityScope
+	@Provides
+	GroupController provideGroupController(BaseActivity activity,
+			GroupControllerImpl groupController) {
+		activity.addLifecycleController(groupController);
+		return groupController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
index d63e3e128e74d060becac56045f5973936db0e7e..051f5a20f9d46e378107b7bcde7c6e8b677c961d 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
@@ -36,7 +36,7 @@ import static java.util.logging.Level.WARNING;
 
 @Immutable
 @NotNullByDefault
-public class CreateGroupControllerImpl extends ContactSelectorControllerImpl
+class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 		implements CreateGroupController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java b/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..a553cb0ed46390dc3b3526c8932d70e4f5ccd572
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java
@@ -0,0 +1,18 @@
+package org.briarproject.android.privategroup.creation;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupCreateModule {
+
+	@ActivityScope
+	@Provides
+	protected CreateGroupController provideCreateGroupController(
+			CreateGroupControllerImpl createGroupController) {
+		return createGroupController;
+	}
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
index bf4101edc16a93fe5bf097acfb631fc805b0ebc5..68a8690791ee680158fbb91fef13079749ea705a 100644
--- a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
@@ -25,7 +25,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.privategroup.PrivateGroupManager.CLIENT_ID;
 
 @NotNullByDefault
-public class GroupInvitationControllerImpl
+class GroupInvitationControllerImpl
 		extends InvitationControllerImpl<GroupInvitationItem>
 		implements GroupInvitationController {
 
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6998cd19534808c01f19562ff724a1a2f77bd57
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.invitation;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupInvitationModule {
+
+	@ActivityScope
+	@Provides
+	GroupInvitationController provideInvitationGroupController(
+			GroupInvitationControllerImpl groupInvitationController) {
+		return groupInvitationController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
index 5c86e79f81efb1159c8341241222f6ff659e98f8..f756f6ffcbf0e92ccb9fda122c76faf61891bcec 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
@@ -38,7 +38,7 @@ import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.privategroup.PrivateGroupManager.CLIENT_ID;
 
-public class GroupListControllerImpl extends DbControllerImpl
+class GroupListControllerImpl extends DbControllerImpl
 		implements GroupListController, EventListener {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java b/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..2bf5c565431fd063378b3de11eca739ea684ea35
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.list;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupListModule {
+
+	@ActivityScope
+	@Provides
+	GroupListController provideGroupListController(
+			GroupListControllerImpl groupListController) {
+		return groupListController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
index 6b317558c432f175ec95c1d498a088e749cbff7e..8a91bee96ea53089f0750d99d65d6007dee37b52 100644
--- a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
@@ -18,7 +18,7 @@ import javax.inject.Inject;
 
 import static java.util.logging.Level.WARNING;
 
-public class GroupMemberListControllerImpl extends DbControllerImpl
+class GroupMemberListControllerImpl extends DbControllerImpl
 		implements GroupMemberListController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..e92d2e94782cb17ef3742b24e17dbf6e40583086
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.memberlist;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupMemberModule {
+
+	@ActivityScope
+	@Provides
+	GroupMemberListController provideGroupMemberListController(
+			GroupMemberListControllerImpl groupMemberListController) {
+		return groupMemberListController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java b/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..dad020c3f6630e6a15a619ab15a787a4622f953b
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.reveal;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupRevealModule {
+
+	@ActivityScope
+	@Provides
+	RevealContactsController provideRevealContactsController(
+			RevealContactsControllerImpl revealContactsController) {
+		return revealContactsController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
index d0b89a0e2441149751f5d51d68d4ab41ea86eca9..985708f2ed172ca28c49196cedeea147b641e815 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
@@ -33,7 +33,7 @@ import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
 
 @Immutable
 @NotNullByDefault
-public class RevealContactsControllerImpl extends DbControllerImpl
+class RevealContactsControllerImpl extends DbControllerImpl
 		implements RevealContactsController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
index 83bb183fa3b7e1990da311e9b4d3e18f44f38bf6..8b1a318484db34164ffece97a22764d1e0c2d301 100644
--- a/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
@@ -23,7 +23,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.blogs.BlogManager.CLIENT_ID;
 
 @NotNullByDefault
-public class BlogInvitationControllerImpl
+class BlogInvitationControllerImpl
 		extends InvitationControllerImpl<SharingInvitationItem>
 		implements BlogInvitationController {
 
diff --git a/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
index a472ecb4d3033c5f229cf862ab3ee3b6d5157f6b..38274956ac534b1cd8ae049376a8013897e26bc3 100644
--- a/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
@@ -23,7 +23,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.forum.ForumManager.CLIENT_ID;
 
 @NotNullByDefault
-public class ForumInvitationControllerImpl
+class ForumInvitationControllerImpl
 		extends InvitationControllerImpl<SharingInvitationItem>
 		implements ForumInvitationController {
 
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
index a2f9be5b39af5d55f6882f5960a0b3dad33877bc..33e21f3d153f71b140ccc12508ee5397bc54c13b 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
@@ -25,7 +25,7 @@ import static java.util.logging.Level.WARNING;
 
 @Immutable
 @NotNullByDefault
-public class ShareBlogControllerImpl extends ContactSelectorControllerImpl
+class ShareBlogControllerImpl extends ContactSelectorControllerImpl
 		implements ShareBlogController {
 
 	private final static Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
index b59f0a5585f1bc10781e3b56a207ce079cbc8c5e..73eba81b672faadf43ff9b285cab6e4e9e464f3e 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
@@ -25,7 +25,7 @@ import static java.util.logging.Level.WARNING;
 
 @Immutable
 @NotNullByDefault
-public class ShareForumControllerImpl extends ContactSelectorControllerImpl
+class ShareForumControllerImpl extends ContactSelectorControllerImpl
 		implements ShareForumController {
 
 	private final static Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/sharing/SharingModule.java b/briar-android/src/org/briarproject/android/sharing/SharingModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..de632f6b132658b3337763a5405d4f6aafd8c81a
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/sharing/SharingModule.java
@@ -0,0 +1,44 @@
+package org.briarproject.android.sharing;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class SharingModule {
+
+	@ActivityScope
+	@Provides
+	ShareForumController provideShareForumController(
+			ShareForumControllerImpl shareForumController) {
+		return shareForumController;
+	}
+
+	@ActivityScope
+	@Provides
+	BlogInvitationController provideInvitationBlogController(
+			BaseActivity activity,
+			BlogInvitationControllerImpl blogInvitationController) {
+		activity.addLifecycleController(blogInvitationController);
+		return blogInvitationController;
+	}
+
+	@ActivityScope
+	@Provides
+	ForumInvitationController provideInvitationForumController(
+			BaseActivity activity,
+			ForumInvitationControllerImpl forumInvitationController) {
+		activity.addLifecycleController(forumInvitationController);
+		return forumInvitationController;
+	}
+
+	@ActivityScope
+	@Provides
+	ShareBlogController provideShareBlogController(
+			ShareBlogControllerImpl shareBlogController) {
+		return shareBlogController;
+	}
+
+}
diff --git a/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java b/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java
index a77a88cc156c4771d0da6689eca875539f624037..7d4ff2f7d27dcedd92e14bbf1c8d5e4d67f3b58c 100644
--- a/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java
+++ b/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java
@@ -1,6 +1,7 @@
 package org.briarproject.android.forum;
 
 import org.briarproject.android.ActivityModule;
+import org.briarproject.android.BaseActivity;
 import org.briarproject.android.controller.BriarController;
 import org.briarproject.android.controller.BriarControllerImpl;
 import org.briarproject.android.threaded.ThreadItemAdapter;
@@ -32,8 +33,14 @@ public class TestForumActivity extends ForumActivity {
 				return c;
 			}
 
+		};
+	}
+
+	@Override
+	protected ForumModule getForumModule() {
+		return new ForumModule() {
 			@Override
-			protected ForumController provideForumController(
+			ForumController provideForumController(BaseActivity activity,
 					ForumControllerImpl forumController) {
 				return Mockito.mock(ForumController.class);
 			}