diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java
index 346c01ef8ba3274459b05758bf1a529a0ec8bcd6..4d82fe74dcfe02cf5e2d3243bc419edeb5550c19 100644
--- a/briar-android/src/org/briarproject/android/ActivityComponent.java
+++ b/briar-android/src/org/briarproject/android/ActivityComponent.java
@@ -2,25 +2,29 @@ package org.briarproject.android;
 
 import android.app.Activity;
 
+import org.briarproject.android.blogs.MyBlogsFragment;
+import org.briarproject.android.contact.ContactListFragment;
 import org.briarproject.android.contact.ConversationActivity;
 import org.briarproject.android.forum.AvailableForumsActivity;
 import org.briarproject.android.forum.ContactSelectorFragment;
 import org.briarproject.android.forum.CreateForumActivity;
 import org.briarproject.android.forum.ForumActivity;
+import org.briarproject.android.forum.ForumListFragment;
 import org.briarproject.android.forum.ForumSharingStatusActivity;
 import org.briarproject.android.forum.ShareForumActivity;
 import org.briarproject.android.forum.ShareForumMessageFragment;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.identity.CreateIdentityActivity;
+import org.briarproject.android.introduction.ContactChooserFragment;
 import org.briarproject.android.introduction.IntroductionActivity;
 import org.briarproject.android.introduction.IntroductionMessageFragment;
 import org.briarproject.android.invitation.AddContactActivity;
+import org.briarproject.android.keyagreement.ChooseIdentityFragment;
 import org.briarproject.android.keyagreement.KeyAgreementActivity;
+import org.briarproject.android.keyagreement.ShowQrCodeFragment;
 import org.briarproject.android.panic.PanicPreferencesActivity;
 import org.briarproject.android.panic.PanicResponderActivity;
 
-import javax.inject.Named;
-
 import dagger.Component;
 
 @ActivityScope
@@ -66,33 +70,16 @@ public interface ActivityComponent {
 
 	void inject(IntroductionActivity activity);
 
-	@Named("ContactListFragment")
-	BaseFragment newContactListFragment();
-
-	@Named("ForumListFragment")
-	BaseFragment newForumListFragment();
-
-	@Named("BlogsFragment")
-	BaseFragment newBlogsFragment();
-
-	@Named("MyBlogsFragment")
-	BaseFragment newMyBlogsFragment();
-
-	@Named("ChooseIdentityFragment")
-	BaseFragment newChooseIdentityFragment();
-
-	@Named("ShowQrCodeFragment")
-	BaseFragment newShowQrCodeFragment();
-
-	@Named("ContactChooserFragment")
-	BaseFragment newContactChooserFragment();
-
-	@Named("ContactSelectorFragment")
-	ContactSelectorFragment newContactSelectorFragment();
-
-	@Named("ShareForumMessageFragment")
-	ShareForumMessageFragment newShareForumMessageFragment();
+	// Fragments
+	void inject(ContactListFragment fragment);
+	void inject(ForumListFragment fragment);
+	void inject(BaseFragment fragment);
+	void inject(MyBlogsFragment fragment);
+	void inject(ChooseIdentityFragment fragment);
+	void inject(ShowQrCodeFragment fragment);
+	void inject(ContactChooserFragment fragment);
+	void inject(ContactSelectorFragment fragment);
+	void inject(ShareForumMessageFragment fragment);
+	void inject(IntroductionMessageFragment fragment);
 
-	@Named("IntroductionMessageFragment")
-	IntroductionMessageFragment newIntroductionMessageFragment();
 }
diff --git a/briar-android/src/org/briarproject/android/ActivityModule.java b/briar-android/src/org/briarproject/android/ActivityModule.java
index 5ba13b3ec88abbedcae21afa25fefbdae4b89e77..ea984bca0bab42760c652869ea561f87c85e69ee 100644
--- a/briar-android/src/org/briarproject/android/ActivityModule.java
+++ b/briar-android/src/org/briarproject/android/ActivityModule.java
@@ -3,19 +3,13 @@ package org.briarproject.android;
 import android.app.Activity;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.os.Bundle;
 
-import org.briarproject.android.blogs.BlogsFragment;
-import org.briarproject.android.blogs.MyBlogsFragment;
-import org.briarproject.android.contact.ContactListFragment;
 import org.briarproject.android.controller.BriarController;
 import org.briarproject.android.controller.BriarControllerImpl;
 import org.briarproject.android.controller.ConfigController;
 import org.briarproject.android.controller.ConfigControllerImpl;
 import org.briarproject.android.controller.DbController;
 import org.briarproject.android.controller.DbControllerImpl;
-import org.briarproject.android.forum.ForumController;
-import org.briarproject.android.forum.ForumControllerImpl;
 import org.briarproject.android.controller.NavDrawerController;
 import org.briarproject.android.controller.NavDrawerControllerImpl;
 import org.briarproject.android.controller.PasswordController;
@@ -23,15 +17,9 @@ import org.briarproject.android.controller.PasswordControllerImpl;
 import org.briarproject.android.controller.SetupController;
 import org.briarproject.android.controller.SetupControllerImpl;
 import org.briarproject.android.controller.TransportStateListener;
-import org.briarproject.android.forum.ContactSelectorFragment;
-import org.briarproject.android.forum.ForumListFragment;
+import org.briarproject.android.forum.ForumController;
+import org.briarproject.android.forum.ForumControllerImpl;
 import org.briarproject.android.forum.ForumTestControllerImpl;
-import org.briarproject.android.forum.ShareForumMessageFragment;
-import org.briarproject.android.fragment.BaseFragment;
-import org.briarproject.android.introduction.ContactChooserFragment;
-import org.briarproject.android.introduction.IntroductionMessageFragment;
-import org.briarproject.android.keyagreement.ChooseIdentityFragment;
-import org.briarproject.android.keyagreement.ShowQrCodeFragment;
 
 import javax.inject.Named;
 
@@ -137,78 +125,4 @@ public class ActivityModule {
 		return new BriarServiceConnection();
 	}
 
-	@Provides
-	@Named("ForumListFragment")
-	BaseFragment provideForumListFragment(ForumListFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("ContactListFragment")
-	BaseFragment provideContactListFragment(ContactListFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("BlogsFragment")
-	BaseFragment provideBlogsFragment(BlogsFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("MyBlogsFragment")
-	BaseFragment provideMyBlogsFragment(MyBlogsFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("ChooseIdentityFragment")
-	BaseFragment provideChooseIdentityFragment(
-			ChooseIdentityFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("ShowQrCodeFragment")
-	BaseFragment provideShowQrCodeFragment(ShowQrCodeFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("ContactChooserFragment")
-	BaseFragment provideContactChooserFragment(
-			ContactChooserFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("ContactSelectorFragment")
-	ContactSelectorFragment provideContactSelectorFragment(
-			ContactSelectorFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("ShareForumMessageFragment")
-	ShareForumMessageFragment provideShareForumMessageFragment(
-			ShareForumMessageFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
-
-	@Provides
-	@Named("IntroductionMessageFragment")
-	IntroductionMessageFragment provideIntroductionMessageFragment(
-			IntroductionMessageFragment fragment) {
-		fragment.setArguments(new Bundle());
-		return fragment;
-	}
 }
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java
index 38063e239e5b46ea9ce0ae233f06c76d647bf495..0ab5d1405f17dcf819dc3c6f462822ff8ae033e3 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/org/briarproject/android/BaseActivity.java
@@ -49,6 +49,10 @@ public abstract class BaseActivity extends AppCompatActivity {
 		}
 	}
 
+	public ActivityComponent getActivityComponent() {
+		return activityComponent;
+	}
+
 	// This exists to make test overrides easier
 	protected ActivityModule getActivityModule() {
 		return new ActivityModule(this);
diff --git a/briar-android/src/org/briarproject/android/BriarFragmentActivity.java b/briar-android/src/org/briarproject/android/BriarFragmentActivity.java
index ef7a9fd6a53111e6bef31a6493dd0a737c6750c1..a46581c471a1af1bf524aa15461ee918d453afdf 100644
--- a/briar-android/src/org/briarproject/android/BriarFragmentActivity.java
+++ b/briar-android/src/org/briarproject/android/BriarFragmentActivity.java
@@ -52,13 +52,17 @@ public abstract class BriarFragmentActivity extends BriarActivity {
 			exiting. This models the typical Google navigation behaviour such
 			as in Gmail/Inbox.
 			 */
-			startFragment(activityComponent.newContactListFragment());
+			startFragment(ContactListFragment.newInstance());
 
 		} else {
 			super.onBackPressed();
 		}
 	}
 
+	public void onFragmentCreated(String tag) {
+		updateToolbarTitle(tag);
+	}
+
 	protected void startFragment(BaseFragment fragment) {
 		if (getSupportFragmentManager().getBackStackEntryCount() == 0)
 			startFragment(fragment, false);
@@ -94,6 +98,5 @@ public abstract class BriarFragmentActivity extends BriarActivity {
 			trans.addToBackStack(fragment.getUniqueTag());
 		}
 		trans.commit();
-		updateToolbarTitle(fragment.getUniqueTag());
 	}
 }
diff --git a/briar-android/src/org/briarproject/android/NavDrawerActivity.java b/briar-android/src/org/briarproject/android/NavDrawerActivity.java
index 66d7d19b56d6d37cde92d1f06abb64181d4da73e..847a8d7e6a76913fe078b70512981b3090d83779 100644
--- a/briar-android/src/org/briarproject/android/NavDrawerActivity.java
+++ b/briar-android/src/org/briarproject/android/NavDrawerActivity.java
@@ -21,9 +21,12 @@ import android.widget.ImageView;
 import android.widget.TextView;
 
 import org.briarproject.R;
+import org.briarproject.android.blogs.BlogsFragment;
+import org.briarproject.android.contact.ContactListFragment;
 import org.briarproject.android.controller.NavDrawerController;
 import org.briarproject.android.controller.TransportStateListener;
 import org.briarproject.android.controller.handler.UiResultHandler;
+import org.briarproject.android.forum.ForumListFragment;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.util.CustomAnimations;
 import org.briarproject.api.TransportId;
@@ -49,8 +52,6 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 	public static final String INTENT_CONTACTS = "intent_contacts";
 	public static final String INTENT_FORUMS = "intent_forums";
 
-	private static final String KEY_CURRENT_FRAGMENT_ID = "key_current_id";
-
 	private static final Logger LOG =
 			Logger.getLogger(NavDrawerActivity.class.getName());
 
@@ -66,7 +67,6 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 
 	private List<Transport> transports;
 	private BaseAdapter transportsAdapter;
-	private int currentFragmentId = R.id.nav_btn_contacts;
 
 	@Override
 	protected void onNewIntent(Intent intent) {
@@ -74,10 +74,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 		exitIfStartupFailed(intent);
 		checkAuthorHandle(intent);
 		clearBackStack();
-		if (intent.getBooleanExtra(INTENT_FORUMS, false))
-			startFragment(activityComponent.newForumListFragment());
-		else if (intent.getBooleanExtra(INTENT_CONTACTS, false))
-			startFragment(activityComponent.newContactListFragment());
+		if (intent.getBooleanExtra(INTENT_FORUMS, false)) {
+			startFragment(ForumListFragment.newInstance());
+		}
+		else if (intent.getBooleanExtra(INTENT_CONTACTS, false)) {
+			startFragment(ContactListFragment.newInstance());
+		}
 	}
 
 	@Override
@@ -109,22 +111,17 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 				R.string.nav_drawer_close_description);
 		drawerLayout.addDrawerListener(drawerToggle);
 		navigation.setNavigationItemSelectedListener(this);
-		if (state == null) {
-			navigation.setCheckedItem(R.id.nav_btn_contacts);
-			startFragment(activityComponent.newContactListFragment());
-		}
 		checkAuthorHandle(getIntent());
 
 		initializeTransports(getLayoutInflater());
 		transportsView.setAdapter(transportsAdapter);
 
 		welcomeMessageCheck();
-	}
 
-	@Override
-	public void onSaveInstanceState(Bundle outState) {
-		super.onSaveInstanceState(outState);
-		outState.putInt(KEY_CURRENT_FRAGMENT_ID, currentFragmentId);
+		if (state == null) {
+			navigation.setCheckedItem(R.id.nav_btn_contacts);
+			startFragment(ContactListFragment.newInstance());
+		}
 	}
 
 	private void welcomeMessageCheck() {
@@ -171,16 +168,17 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 		});
 	}
 
-	private void loadCurrentFragment() {
-		switch (currentFragmentId) {
+	private void loadFragment(int fragmentId) {
+		// TODO re-use fragments from the manager when possible
+		switch (fragmentId) {
 			case R.id.nav_btn_contacts:
-				startFragment(activityComponent.newContactListFragment());
+				startFragment(ContactListFragment.newInstance());
 				break;
 			case R.id.nav_btn_forums:
-				startFragment(activityComponent.newForumListFragment());
+				startFragment(ForumListFragment.newInstance());
 				break;
 			case R.id.nav_btn_blogs:
-				startFragment(activityComponent.newBlogsFragment());
+				startFragment(BlogsFragment.newInstance());
 				break;
 			case R.id.nav_btn_settings:
 				startActivity(new Intent(this, SettingsActivity.class));
@@ -195,8 +193,7 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 	public boolean onNavigationItemSelected(MenuItem item) {
 		drawerLayout.closeDrawer(START);
 		clearBackStack();
-		currentFragmentId = item.getItemId();
-		loadCurrentFragment();
+		loadFragment(item.getItemId());
 		return true;
 	}
 
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java
index 5d4521803f0fa3fffe95fc47b7d4b53de8ca763e..a736537ff9257943e90197255ef9b08e42079765 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java
@@ -12,25 +12,25 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 
-import javax.inject.Inject;
-
 public class BlogsFragment extends BaseFragment {
 
 	public final static String TAG = BlogsFragment.class.getName();
 
-	// TODO add your first fragment here
-	//@Inject
-	//Lazy<MyBlogsFragment> myBlogsFragment;
-
 	private static final String SELECTED_TAB = "selectedTab";
 	private TabLayout tabLayout;
 
-	@Inject
-	public BlogsFragment() {
+	public static BlogsFragment newInstance() {
+		
+		Bundle args = new Bundle();
+		
+		BlogsFragment fragment = new BlogsFragment();
+		fragment.setArguments(args);
+		return fragment;
 	}
-
+	
 	@Nullable
 	@Override
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -72,6 +72,11 @@ public class BlogsFragment extends BaseFragment {
 		return TAG;
 	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
+	}
+
 
 	private static class TabAdapter extends FragmentStatePagerAdapter {
 		private String[] titles;
diff --git a/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java b/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java
index e20fb6c1e9f065b09db5c39931f5f38a75b60501..572bc516eb02192deee98f8b4b0d9a7965e120c5 100644
--- a/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java
+++ b/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java
@@ -8,10 +8,9 @@ import android.view.ViewGroup;
 import android.widget.TextView;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 
-import java.util.logging.Logger;
-
 import javax.inject.Inject;
 
 public class MyBlogsFragment extends BaseFragment {
@@ -52,4 +51,9 @@ public class MyBlogsFragment extends BaseFragment {
 		return TAG;
 	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
+	}
+
 }
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java
index 7b71d84f040b0086010ce833d0d38a082d422a83..e76c39e86fc229ad968cc6917318507e08905144 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java
@@ -14,6 +14,7 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.keyagreement.KeyAgreementActivity;
 import org.briarproject.android.util.BriarRecyclerView;
@@ -84,9 +85,13 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 	@Inject
 	protected volatile ForumSharingManager forumSharingManager;
 
-	@Inject
-	public ContactListFragment() {
-
+	public static ContactListFragment newInstance() {
+		
+		Bundle args = new Bundle();
+		
+		ContactListFragment fragment = new ContactListFragment();
+		fragment.setArguments(args);
+		return fragment;
 	}
 
 	@Override
@@ -94,6 +99,11 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 		return TAG;
 	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
+	}
+
 	@Nullable
 	@Override
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -154,7 +164,6 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 		return contentView;
 	}
 
-
 	@Override
 	public void onResume() {
 		super.onResume();
diff --git a/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java b/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java
index 313231ebcbdbc8f74aabae4d41ac4191e9b2f61d..99f1f41c6109fe9a6f7e14ea0c44e83ccfdaf6c5 100644
--- a/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java
+++ b/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java
@@ -13,6 +13,7 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.contact.BaseContactListAdapter;
 import org.briarproject.android.contact.ContactListItem;
 import org.briarproject.android.fragment.BaseFragment;
@@ -64,15 +65,18 @@ public class ContactSelectorFragment extends BaseFragment implements
 
 	protected volatile GroupId groupId;
 
-	public void initBundle(GroupId groupId) {
-		Bundle bundle = new Bundle();
-		bundle.putByteArray(GROUP_ID, groupId.getBytes());
-		setArguments(bundle);
-	}
+	public static ContactSelectorFragment newInstance(GroupId groupId) {
 
-	@Inject
-	public ContactSelectorFragment() {
+		Bundle args = new Bundle();
+		args.putByteArray(GROUP_ID, groupId.getBytes());
+		ContactSelectorFragment fragment = new ContactSelectorFragment();
+		fragment.setArguments(args);
+		return fragment;
+	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
 	}
 
 	@Override
diff --git a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java
index ea33d2b3791ef52c646f3dec39acbef7929a679f..0a1cb32ef58ca3c17f7a59aceb71602ca97f5157 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java
@@ -14,6 +14,7 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseEventFragment;
 import org.briarproject.android.util.BriarRecyclerView;
 import org.briarproject.api.db.DbException;
@@ -59,9 +60,13 @@ public class ForumListFragment extends BaseEventFragment implements
 	@Inject protected volatile ForumManager forumManager;
 	@Inject protected volatile ForumSharingManager forumSharingManager;
 
-	@Inject
-	public ForumListFragment() {
+	public static ForumListFragment newInstance() {
 
+		Bundle args = new Bundle();
+
+		ForumListFragment fragment = new ForumListFragment();
+		fragment.setArguments(args);
+		return fragment;
 	}
 
 	@Nullable
@@ -96,6 +101,11 @@ public class ForumListFragment extends BaseEventFragment implements
 		return TAG;
 	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
+	}
+
 	@Override
 	public void onResume() {
 		super.onResume();
diff --git a/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
index 81bcdf8cd7025b179a4a4ba66ab36768926db478..d789e854f69307e931b9202376bacdea20a75fcd 100644
--- a/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
@@ -15,6 +15,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+// TODO extend the BriarFragmentActivity ?
 public class ShareForumActivity extends BriarActivity implements
 		BaseFragment.BaseFragmentListener {
 
@@ -33,8 +34,7 @@ public class ShareForumActivity extends BriarActivity implements
 
 		if (savedInstanceState == null) {
 			ContactSelectorFragment contactSelectorFragment =
-					activityComponent.newContactSelectorFragment();
-			contactSelectorFragment.initBundle(groupId);
+					ContactSelectorFragment.newInstance(groupId);
 			getSupportFragmentManager().beginTransaction()
 					.add(R.id.shareForumContainer, contactSelectorFragment)
 					.commit();
@@ -50,8 +50,7 @@ public class ShareForumActivity extends BriarActivity implements
 			Collection<ContactId> contacts) {
 
 		ShareForumMessageFragment messageFragment =
-				activityComponent.newShareForumMessageFragment();
-		messageFragment.initBundle(groupId, contacts);
+				ShareForumMessageFragment.newInstance(groupId, contacts);
 
 		getSupportFragmentManager().beginTransaction()
 				.setCustomAnimations(android.R.anim.fade_in,
@@ -86,7 +85,7 @@ public class ShareForumActivity extends BriarActivity implements
 
 		// turn contact integers from a bundle back to ContactIds
 		List<ContactId> contacts = new ArrayList<>(intContacts.size());
-		for(Integer c : intContacts) {
+		for (Integer c : intContacts) {
 			contacts.add(new ContactId(c));
 		}
 		return contacts;
@@ -102,4 +101,9 @@ public class ShareForumActivity extends BriarActivity implements
 		// this is handled by the recycler view in ContactSelectorFragment
 	}
 
+	@Override
+	public void onFragmentCreated(String tag) {
+
+	}
+
 }
diff --git a/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java b/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java
index cf2b6e16062c4ffb5990fe27b6d0baa28e5f1afa..e8682a13695e96341100c14c9eb2e2d2e290218d 100644
--- a/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java
@@ -12,6 +12,7 @@ import android.widget.EditText;
 import android.widget.Toast;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DbException;
@@ -46,16 +47,13 @@ public class ShareForumMessageFragment extends BaseFragment {
 	private volatile GroupId groupId;
 	private volatile Collection<ContactId> contacts;
 
-	public void initBundle(GroupId groupId, Collection<ContactId> contacts) {
-		Bundle bundle = new Bundle();
-		bundle.putByteArray(GROUP_ID, groupId.getBytes());
-		bundle.putIntegerArrayList(CONTACTS, getContactsFromIds(contacts));
-		setArguments(bundle);
-	}
-
-	@Inject
-	public ShareForumMessageFragment() {
-
+	public static ShareForumMessageFragment newInstance(GroupId groupId, Collection<ContactId> contacts) {
+		Bundle args = new Bundle();
+		args.putByteArray(GROUP_ID, groupId.getBytes());
+		args.putIntegerArrayList(CONTACTS, getContactsFromIds(contacts));
+		ShareForumMessageFragment fragment = new ShareForumMessageFragment();
+		fragment.setArguments(args);
+		return fragment;
 	}
 
 	@Override
@@ -119,6 +117,11 @@ public class ShareForumMessageFragment extends BaseFragment {
 		return TAG;
 	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
+	}
+
 	public void onButtonClick() {
 		// disable button to prevent accidental double invitations
 		ui.button.setEnabled(false);
diff --git a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java
index cb0c69c93f682980593c75c9b3ff7c6b5f42236a..75d480bfbfe78a18600f4338f3c57e4892dfb9e7 100644
--- a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java
+++ b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java
@@ -2,14 +2,19 @@ package org.briarproject.android.fragment;
 
 import android.content.Context;
 import android.os.Bundle;
+import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 
+import org.briarproject.android.ActivityComponent;
+
 public abstract class BaseFragment extends Fragment {
 
 	protected BaseFragmentListener listener;
 
 	public abstract String getUniqueTag();
 
+	public abstract void injectFragment(ActivityComponent component);
+
 	@Override
 	public void onAttach(Context context) {
 		super.onAttach(context);
@@ -26,6 +31,14 @@ public abstract class BaseFragment extends Fragment {
 		super.onCreate(savedInstanceState);
 	}
 
+
+	@Override
+	public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+		super.onActivityCreated(savedInstanceState);
+		this.injectFragment(listener.getActivityComponent());
+		listener.onFragmentCreated(getUniqueTag());
+	}
+
 	public interface BaseFragmentListener {
 
 		void showLoadingScreen(boolean isBlocking, int stringId);
@@ -35,5 +48,9 @@ public abstract class BaseFragment extends Fragment {
 		void runOnUiThread(Runnable runnable);
 
 		void runOnDbThread(Runnable runnable);
+
+		ActivityComponent getActivityComponent();
+
+		void onFragmentCreated(String tag);
 	}
 }
diff --git a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java
index 2a2bd5143b60c7c8572bfa28bb525e90b7ba1d18..8bf810454f99d6a169772ab96162bd503369c5cd 100644
--- a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java
+++ b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java
@@ -12,6 +12,7 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.contact.ContactListAdapter;
 import org.briarproject.android.contact.ContactListItem;
 import org.briarproject.android.contact.ConversationItem;
@@ -66,9 +67,13 @@ public class ContactChooserFragment extends BaseFragment {
 	@Inject
 	protected volatile ConnectionRegistry connectionRegistry;
 
-	@Inject
-	public ContactChooserFragment() {
-
+	public static ContactChooserFragment newInstance() {
+		
+		Bundle args = new Bundle();
+		
+		ContactChooserFragment fragment = new ContactChooserFragment();
+		fragment.setArguments(args);
+		return fragment;
 	}
 
 	@Override
@@ -142,6 +147,11 @@ public class ContactChooserFragment extends BaseFragment {
 		return TAG;
 	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
+	}
+
 	private void loadContacts() {
 		introductionActivity.runOnDbThread(new Runnable() {
 			@Override
diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java b/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java
index 5c00e2562888ac2af45ec9dc2406e3c59a338b99..b42516e56a21b62758e65cfd0c5f5e522a1fd447 100644
--- a/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java
+++ b/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java
@@ -15,6 +15,7 @@ import org.briarproject.android.BriarActivity;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.api.contact.Contact;
 
+// TODO extend the BriarFragmentActivity ?
 public class IntroductionActivity extends BriarActivity implements
 		BaseFragment.BaseFragmentListener {
 
@@ -37,7 +38,7 @@ public class IntroductionActivity extends BriarActivity implements
 			getSupportFragmentManager()
 					.beginTransaction()
 					.add(R.id.introductionContainer,
-							activityComponent.newContactChooserFragment())
+							ContactChooserFragment.newInstance())
 					.commit();
 		}
 	}
@@ -57,6 +58,11 @@ public class IntroductionActivity extends BriarActivity implements
 		// this is handled by the recycler view in ContactChooserFragment
 	}
 
+	@Override
+	public void onFragmentCreated(String tag) {
+
+	}
+
 	@Override
 	public boolean onOptionsItemSelected(final MenuItem item) {
 		// Handle presses on the action bar items
@@ -86,8 +92,8 @@ public class IntroductionActivity extends BriarActivity implements
 	public void showMessageScreen(View view, Contact c1, Contact c2) {
 
 		IntroductionMessageFragment messageFragment =
-				activityComponent.newIntroductionMessageFragment();
-		messageFragment.initBundle(c1.getId().getInt(), c2.getId().getInt());
+				IntroductionMessageFragment
+						.newInstance(c1.getId().getInt(), c2.getId().getInt());
 
 		if (Build.VERSION.SDK_INT >= 21) {
 			messageFragment.setSharedElementEnterTransition(new ChangeBounds());
diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
index 93b7c6c070412e86891e67099eff3f58d87125e6..42e0b93d1e74c9819e35c8a85df69b3b2add7150 100644
--- a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
@@ -13,6 +13,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.contact.Contact;
@@ -51,19 +52,21 @@ public class IntroductionMessageFragment extends BaseFragment {
 	@Inject
 	protected volatile IntroductionManager introductionManager;
 
-	public void initBundle(int contactId1, int contactId2) {
+	public static IntroductionMessageFragment newInstance(int contactId1, int contactId2) {
 		Bundle args = new Bundle();
 		args.putInt(CONTACT_ID_1, contactId1);
 		args.putInt(CONTACT_ID_2, contactId2);
-		setArguments(args);
+		IntroductionMessageFragment fragment =
+				new IntroductionMessageFragment();
+		fragment.setArguments(args);
+		return fragment;
 	}
 
-	@Inject
-	public IntroductionMessageFragment() {
-
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
 	}
 
-
 	@Override
 	public void onAttach(Context context) {
 		super.onAttach(context);
@@ -94,6 +97,13 @@ public class IntroductionMessageFragment extends BaseFragment {
 		ui.text.setVisibility(GONE);
 		ui.button.setEnabled(false);
 
+		return v;
+	}
+
+	@Override
+	public void onStart() {
+		super.onStart();
+
 		// get contact IDs from fragment arguments
 		int contactId1 = getArguments().getInt(CONTACT_ID_1, -1);
 		int contactId2 = getArguments().getInt(CONTACT_ID_2, -1);
@@ -101,11 +111,8 @@ public class IntroductionMessageFragment extends BaseFragment {
 			throw new java.lang.InstantiationError(
 					"You need to use newInstance() to instantiate");
 		}
-
 		// get contacts and then show view
 		prepareToSetUpViews(contactId1, contactId2);
-
-		return v;
 	}
 
 	@Override
diff --git a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java
index c74b0a366bdebeaefef12364bda30672c0ad766c..176a277948302f91595c93ed1a42b10eff7c8502 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java
+++ b/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java
@@ -13,6 +13,7 @@ import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.Spinner;
 
 import org.briarproject.R;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.identity.CreateIdentityActivity;
 import org.briarproject.android.identity.LocalAuthorItem;
@@ -57,9 +58,18 @@ public class ChooseIdentityFragment extends BaseFragment
 	@Inject
 	protected volatile IdentityManager identityManager;
 
-	@Inject
-	public ChooseIdentityFragment() {
+	public static ChooseIdentityFragment newInstance() {
+		
+		Bundle args = new Bundle();
+		
+		ChooseIdentityFragment fragment = new ChooseIdentityFragment();
+		fragment.setArguments(args);
+		return fragment;
+	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
 	}
 
 	@Override
@@ -104,6 +114,11 @@ public class ChooseIdentityFragment extends BaseFragment
 			}
 		});
 
+	}
+
+	@Override
+	public void onStart() {
+		super.onStart();
 		loadLocalAuthors();
 	}
 
diff --git a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java b/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java
index 40122d928a1cd928042c0334156dd1209e0140da..e72e742e25b06190096eae7d2535dcb66bb5e1e7 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java
+++ b/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java
@@ -94,11 +94,11 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements
 						STEPS));
 		switch (step) {
 			case STEP_QR:
-				startFragment(activityComponent.newShowQrCodeFragment());
+				startFragment(ShowQrCodeFragment.newInstance());
 				break;
 			case STEP_ID:
 			default:
-				startFragment(activityComponent.newChooseIdentityFragment());
+				startFragment(ChooseIdentityFragment.newInstance());
 				break;
 		}
 	}
diff --git a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
index 60c7ca85bd794414fa1dd27d2b0ddce1fe455a66..dacca905bf432a02239e28d17d17dd1178c69237 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
+++ b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
@@ -21,7 +21,7 @@ import android.widget.Toast;
 import com.google.zxing.Result;
 
 import org.briarproject.R;
-import org.briarproject.android.AndroidComponent;
+import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.api.AndroidExecutor;
 import org.briarproject.android.fragment.BaseEventFragment;
 import org.briarproject.android.util.CameraView;
@@ -86,9 +86,18 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	private volatile KeyAgreementTask task;
 	private volatile boolean waitingForBluetooth;
 
-	@Inject
-	public ShowQrCodeFragment() {
+	public static ShowQrCodeFragment newInstance() {
+		
+		Bundle args = new Bundle();
+		
+		ShowQrCodeFragment fragment = new ShowQrCodeFragment();
+		fragment.setArguments(args);
+		return fragment;
+	}
 
+	@Override
+	public void injectFragment(ActivityComponent component) {
+		component.inject(this);
 	}
 
 	@Override
diff --git a/build.gradle b/build.gradle
index 816417b2f7e1f9cccb9c346eb7885cfedcfbe0cb..c1b7382b30428dccde26ebfd76d6cf8e0840e137 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,7 +14,7 @@ buildscript {
 	}
 
 	dependencies {
-		classpath 'com.android.tools.build:gradle:2.1.0'
+		classpath 'com.android.tools.build:gradle:2.1.2'
 		classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
 		classpath 'de.undercouch:gradle-download-task:2.1.0'
 		classpath files('briar-core/libs/gradle-witness.jar')