diff --git a/res/values/colors.xml b/res/values/colors.xml
index f55cc95..98c522d 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -45,6 +45,9 @@
     <color name="primary_color_dark">#0277bd</color>
     <color name="primary_color">#0288d1</color>
 
+    <color name="group_primary_color_dark">#546E7A</color>
+    <color name="group_primary_color">#607D8B</color>
+
     <!-- Color of the selected tab underline -->
     <color name="contacts_accent_color">#FFFFFF</color>
 
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index b810eec..3fc3c9d 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -54,6 +54,7 @@
 import com.android.contacts.common.util.AccountFilterUtil;
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.editor.SelectAccountDialogFragment;
@@ -134,6 +135,7 @@
             // another fragment in navigation drawer, the current search/selection mode will be
             // overlaid by the action bar of the newly-created fragment.
             stopSearchAndSelection();
+            updateStatusBarBackground();
         }
 
         private void stopSearchAndSelection() {
@@ -170,7 +172,7 @@
             super.onDrawerStateChanged(newState);
             // Set transparent status bar when drawer starts to move.
             if (newState != DrawerLayout.STATE_IDLE) {
-                makeStatusBarTransparent();
+                updateStatusBarBackground();
             }
             if (mRunnable != null && newState == DrawerLayout.STATE_IDLE) {
                 mRunnable.run();
@@ -285,17 +287,23 @@
     protected void onResume() {
         super.onResume();
         if (mDrawer.isDrawerOpen(GravityCompat.START)) {
-            makeStatusBarTransparent();
+            updateStatusBarBackground();
         }
     }
 
-    private void makeStatusBarTransparent() {
-        // Avoid making status bar transparent when action bar's selection mode is on.
-        if (getWindow().getStatusBarColor() !=
-                ContextCompat.getColor(this, R.color.contextual_selection_bar_status_bar_color)
-                        && CompatUtils.isLollipopCompatible()) {
-            getWindow().setStatusBarColor(Color.TRANSPARENT);
+    public void updateStatusBarBackground() {
+        updateStatusBarBackground(/* color */ -1);
+    }
+
+    public void updateStatusBarBackground(int color) {
+        if (!CompatUtils.isLollipopCompatible()) return;
+        if (color == -1) {
+            mDrawer.setStatusBarBackgroundColor(MaterialColorMapUtils.getStatusBarColor(this));
+        } else {
+            mDrawer.setStatusBarBackgroundColor(color);
         }
+        mDrawer.invalidate();
+        getWindow().setStatusBarColor(Color.TRANSPARENT);
     }
 
     // Set up fragment manager to load groups and filters.
@@ -417,7 +425,7 @@
         return null;
     }
 
-    protected boolean isGroupView() {
+    public boolean isGroupView() {
         return mCurrentView == ContactsView.GROUP_VIEW;
     }
 
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 824d4ea..880aa63 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -43,9 +43,11 @@
 import android.widget.EditText;
 import android.widget.TextView;
 
+import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter.Listener.Action;
 import com.android.contacts.common.compat.CompatUtils;
+import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.list.ContactsRequest;
 
 import java.util.ArrayList;
@@ -365,6 +367,8 @@
                 = (mSearchContainer.getParent() == null) == mSearchMode;
         final boolean isTabHeightChanging = isSearchModeChanging || isSelectionModeChanging;
 
+        // Update toolbar and status bar color.
+        mToolBarFrame.setBackgroundColor(MaterialColorMapUtils.getToolBarColor(mActivity));
         updateStatusBarColor(isSelectionModeChanging && !isSearchModeChanging);
 
         // When skipAnimation=true, it is possible that we will switch from search mode
@@ -494,12 +498,11 @@
                     mActivity, R.color.contextual_selection_bar_status_bar_color);
             runStatusBarAnimation(/* colorTo */ cabStatusBarColor);
         } else {
-            final int normalStatusBarColor = ContextCompat.getColor(
-                    mActivity, R.color.primary_color_dark);
             if (shouldAnimate) {
-                runStatusBarAnimation(/* colorTo */ normalStatusBarColor);
-            } else {
-                mActivity.getWindow().setStatusBarColor(normalStatusBarColor);
+                runStatusBarAnimation(/* colorTo */
+                        MaterialColorMapUtils.getStatusBarColor(mActivity));
+            } else if (mActivity instanceof ContactsDrawerActivity) {
+                ((ContactsDrawerActivity) mActivity).updateStatusBarBackground();
             }
         }
     }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index e4dc56d..b2a0a07 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -27,6 +27,8 @@
 import android.content.Intent;
 import android.content.SyncStatusObserver;
 import android.content.IntentFilter;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -34,6 +36,7 @@
 import android.provider.ContactsContract.ProviderStatus;
 import android.support.design.widget.CoordinatorLayout;
 import android.support.design.widget.Snackbar;
+import android.support.v4.content.ContextCompat;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
@@ -384,10 +387,7 @@
 
         setUpAllFragment(fragmentManager);
 
-        if (isGroupView()) {
-            mMembersFragment = (GroupMembersFragment)
-                    fragmentManager.findFragmentByTag(TAG_GROUP_VIEW);
-        }
+        mMembersFragment = (GroupMembersFragment) fragmentManager.findFragmentByTag(TAG_GROUP_VIEW);
 
         // Configure floating action button
         mFloatingActionButtonContainer = findViewById(R.id.floating_action_button_container);
@@ -692,11 +692,13 @@
     }
 
     private boolean isAllFragmentInSelectionMode() {
-        return mAllFragment.getActionBarAdapter().isSelectionMode();
+        return mAllFragment.getActionBarAdapter() != null
+                && mAllFragment.getActionBarAdapter().isSelectionMode();
     }
 
     private boolean isAllFragmentInSearchMode() {
-        return mAllFragment.getActionBarAdapter().isSearchMode();
+        return mAllFragment.getActionBarAdapter() != null
+                && mAllFragment.getActionBarAdapter().isSearchMode();
     }
 
     @Override
@@ -758,10 +760,11 @@
     }
 
     private void switchToOrUpdateGroupView(String action) {
-        final boolean shouldUpdate = mMembersFragment != null;
-        switchView(ContactsView.GROUP_VIEW);
-        if (shouldUpdate) {
+        // If group fragment is active and visible, we simply update it.
+        if (mMembersFragment != null && !mMembersFragment.isInactive()) {
             mMembersFragment.updateExistingGroupFragment(mGroupUri, action);
+        } else {
+            switchView(ContactsView.GROUP_VIEW);
         }
     }
 
@@ -782,14 +785,21 @@
             transaction.replace(
                     R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
         } else if (isDuplicatesView()) {
-            final Fragment duplicatesFragment = ObjectFactory.getDuplicatesFragment();
-            final Fragment duplicatesUtilFragment = ObjectFactory.getDuplicatesUtilFragment();
-            if (duplicatesFragment != null && duplicatesUtilFragment != null) {
+            Fragment duplicatesFragment = fragmentManager.findFragmentByTag(TAG_DUPLICATES);
+            Fragment duplicatesUtilFragment =
+                    fragmentManager.findFragmentByTag(TAG_DUPLICATES_UTIL);
+            if (duplicatesFragment == null || duplicatesUtilFragment == null) {
+                duplicatesFragment = ObjectFactory.getDuplicatesFragment();
+                duplicatesUtilFragment = ObjectFactory.getDuplicatesUtilFragment();
                 duplicatesUtilFragment.setTargetFragment(duplicatesFragment, /* requestCode */ 0);
-                transaction.replace(
-                        R.id.contacts_list_container, duplicatesFragment, TAG_DUPLICATES);
-                transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
             }
+            transaction.replace(
+                    R.id.contacts_list_container, duplicatesFragment, TAG_DUPLICATES);
+            if (!duplicatesUtilFragment.isAdded()) {
+                transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
+                resetToolBarStatusBarColor();
+            }
+            resetToolBarStatusBarColor();
         }
         transaction.addToBackStack(TAG_SECOND_LEVEL);
         transaction.commit();
@@ -806,6 +816,7 @@
         mShouldSwitchToAllContacts = false;
         mCurrentView = ContactsView.ALL_CONTACTS;
         showFabWithAnimation(/* showFab */ true);
+        mAllFragment.scrollToTop();
 
         super.switchToAllContacts();
     }
@@ -814,6 +825,14 @@
         getFragmentManager().popBackStackImmediate(
                 TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
         mMembersFragment = null;
+        resetToolBarStatusBarColor();
+    }
+
+    // Reset toolbar and status bar color to Contacts theme color.
+    private void resetToolBarStatusBarColor() {
+        findViewById(R.id.toolbar_frame).setBackgroundColor(
+                ContextCompat.getColor(this, R.color.primary_color));
+        updateStatusBarBackground(ContextCompat.getColor(this, R.color.primary_color_dark));
     }
 
     @Override
diff --git a/src/com/android/contacts/common/util/MaterialColorMapUtils.java b/src/com/android/contacts/common/util/MaterialColorMapUtils.java
index a8fbf42..50d8f0f 100644
--- a/src/com/android/contacts/common/util/MaterialColorMapUtils.java
+++ b/src/com/android/contacts/common/util/MaterialColorMapUtils.java
@@ -16,13 +16,16 @@
 
 package com.android.contacts.common.util;
 
-import com.android.contacts.common.R;
+import com.android.contacts.ContactsDrawerActivity;
+import com.android.contacts.R;
 
+import android.app.Activity;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.Trace;
+import android.support.v4.content.ContextCompat;
 
 public class MaterialColorMapUtils {
     private final TypedArray sPrimaryColors;
@@ -177,4 +180,26 @@
 
         return H;
     }
+
+    /**
+     * Returns status bar color for group view and non-group views.
+     */
+    public static int getStatusBarColor(Activity activity) {
+        final boolean isGroupView = activity instanceof ContactsDrawerActivity
+                && ((ContactsDrawerActivity) activity).isGroupView();
+        return isGroupView
+                ? ContextCompat.getColor(activity, R.color.group_primary_color_dark)
+                : ContextCompat.getColor(activity, R.color.primary_color_dark);
+    }
+
+    /**
+     * Returns toolbar color for group view and non-group views.
+     */
+    public static int getToolBarColor(Activity activity) {
+        final boolean isGroupView = activity instanceof ContactsDrawerActivity
+                && ((ContactsDrawerActivity) activity).isGroupView();
+        return isGroupView
+                ? ContextCompat.getColor(activity, R.color.group_primary_color)
+                : ContextCompat.getColor(activity, R.color.primary_color);
+    }
 }
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 809cf20..30f339c 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -24,8 +24,9 @@
 import android.database.CursorWrapper;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.provider.ContactsContract.Contacts;
-import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -78,7 +79,7 @@
     private static final String ARG_GROUP_URI = "groupUri";
 
     private static final int LOADER_GROUP_METADATA = 0;
-
+    private static final int MSG_FAIL_TO_LOAD = 1;
     private static final int RESULT_GROUP_ADD_MEMBER = 100;
 
     /** Filters out duplicate contacts. */
@@ -194,9 +195,7 @@
                 Log.e(TAG, "Failed to load group metadata for " + mGroupUri);
                 Toast.makeText(getContext(), R.string.groupLoadErrorToast, Toast.LENGTH_SHORT)
                         .show();
-                // TODO: we probably shouldn't finish mActivity.
-                mActivity.setResult(AppCompatActivity.RESULT_CANCELED);
-                mActivity.finish();
+                mHandler.sendEmptyMessage(MSG_FAIL_TO_LOAD);
                 return;
             }
             mGroupMetaData = new GroupMetaData(getActivity(), cursor);
@@ -219,6 +218,15 @@
 
     private Set<String> mGroupMemberContactIds = new HashSet();
 
+    private Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            if(msg.what == MSG_FAIL_TO_LOAD) {
+                mActivity.onBackPressed();
+            }
+        }
+    };
+
     public static GroupMembersFragment newInstance(Uri groupUri) {
         final Bundle args = new Bundle();
         args.putParcelable(ARG_GROUP_URI, groupUri);
@@ -646,6 +654,13 @@
         return mGroupMetaData != null && mGroupMetaData.groupId == groupId;
     }
 
+    /**
+     * Return true if the fragment is not yet added, being removed, or detached.
+     */
+    public boolean isInactive() {
+        return !isAdded() || isRemoving() || isDetached();
+    }
+
     @Override
     public void onDestroy() {
         if (mActionBarAdapter != null) {
