diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 30e445e..073f665 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -49,6 +49,7 @@
 
     private static final String EXTRA_KEY_SEARCH_MODE = "navBar.searchMode";
     private static final String EXTRA_KEY_QUERY = "navBar.query";
+    private static final String EXTRA_KEY_SELECTED_TAB = "navBar.selectedTab";
 
     private boolean mSearchMode;
     private String mQueryString;
@@ -213,11 +214,13 @@
     public void onSaveInstanceState(Bundle outState) {
         outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
         outState.putString(EXTRA_KEY_QUERY, mQueryString);
+        outState.putInt(EXTRA_KEY_SELECTED_TAB, mActionBar.getSelectedNavigationIndex());
     }
 
     public void onRestoreInstanceState(Bundle savedState) {
         mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
         mQueryString = savedState.getString(EXTRA_KEY_QUERY);
+        mActionBar.setSelectedNavigationItem(savedState.getInt(EXTRA_KEY_SELECTED_TAB));
     }
 
     @Override
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
index 95a85b6..59b0cec 100644
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ b/src/com/android/contacts/group/GroupBrowseListFragment.java
@@ -33,6 +33,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Groups;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
@@ -77,6 +78,8 @@
 
     private boolean mSelectionToScreenRequested;
 
+    private static final String EXTRA_KEY_GROUP_URI = "groups.groupUri";
+
     /**
      * Map of account name to a list of {@link GroupMetaData} objects
      * representing groups within that account.
@@ -108,6 +111,13 @@
         mListView.setOnFocusChangeListener(this);
         mListView.setOnTouchListener(this);
         mEmptyView = mRootView.findViewById(R.id.empty);
+
+        if (savedInstanceState != null) {
+            String groupUriString = savedInstanceState.getString(EXTRA_KEY_GROUP_URI);
+            if (groupUriString != null) {
+                mSelectedGroupUri = Uri.parse(groupUriString);
+            }
+        }
         return mRootView;
     }
 
@@ -230,6 +240,10 @@
         if (mSelectionToScreenRequested) {
             requestSelectionToScreen();
         }
+
+        if (mSelectionVisible && mSelectedGroupUri != null) {
+            viewGroup(mSelectedGroupUri);
+        }
     }
 
     public void setListener(OnGroupBrowserActionListener listener) {
@@ -293,4 +307,15 @@
         }
         return false;
     }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        if (mSelectedGroupUri != null) {
+            String uriString = mSelectedGroupUri.toString();
+            if (!TextUtils.isEmpty(uriString)) {
+                outState.putString(EXTRA_KEY_GROUP_URI, uriString);
+            }
+        }
+    }
 }
