diff --git a/src/com/android/contacts/GroupMetaDataLoader.java b/src/com/android/contacts/GroupMetaDataLoader.java
index d900825..8533bb6 100644
--- a/src/com/android/contacts/GroupMetaDataLoader.java
+++ b/src/com/android/contacts/GroupMetaDataLoader.java
@@ -34,6 +34,7 @@
         Groups.AUTO_ADD,
         Groups.FAVORITES,
         Groups.GROUP_IS_READ_ONLY,
+        Groups.DELETED,
     };
 
     public final static int ACCOUNT_NAME = 0;
@@ -43,6 +44,7 @@
     public final static int AUTO_ADD = 4;
     public final static int FAVORITES = 5;
     public final static int IS_READ_ONLY = 6;
+    public final static int DELETED = 7;
 
     public GroupMetaDataLoader(Context context, Uri groupUri) {
         super(context, ensureIsGroupUri(groupUri), COLUMNS, Groups.ACCOUNT_TYPE + " NOT NULL AND "
diff --git a/src/com/android/contacts/activities/GroupDetailActivity.java b/src/com/android/contacts/activities/GroupDetailActivity.java
index 21900c6..c8f511b 100644
--- a/src/com/android/contacts/activities/GroupDetailActivity.java
+++ b/src/com/android/contacts/activities/GroupDetailActivity.java
@@ -43,6 +43,7 @@
                 R.id.group_detail_fragment);
         fragment.setListener(mFragmentListener);
         fragment.loadGroup(getIntent().getData());
+        fragment.closeActivityAfterDelete(true);
 
         ActionBar actionBar =  getActionBar();
         if (actionBar != null) {
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
index 59b0cec..4443a53 100644
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ b/src/com/android/contacts/group/GroupBrowseListFragment.java
@@ -196,6 +196,8 @@
             String accountType = mGroupListCursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
             long groupId = mGroupListCursor.getLong(GroupMetaDataLoader.GROUP_ID);
             String title = mGroupListCursor.getString(GroupMetaDataLoader.TITLE);
+            boolean deleted =
+                    (mGroupListCursor.getInt(GroupMetaDataLoader.DELETED) == 1);
             boolean defaultGroup = mGroupListCursor.isNull(GroupMetaDataLoader.AUTO_ADD)
                     ? false
                     : mGroupListCursor.getInt(GroupMetaDataLoader.AUTO_ADD) != 0;
@@ -204,8 +206,8 @@
                     : mGroupListCursor.getInt(GroupMetaDataLoader.FAVORITES) != 0;
 
             // Don't show the "auto-added" (i.e. My Contacts) or "favorites" groups because
-            // they show up elsewhere in the app
-            if (defaultGroup || favorites) {
+            // they show up elsewhere in the app. Also skip groups that are marked as "deleted"
+            if (defaultGroup || favorites || deleted) {
                 continue;
             }
 
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index c4824ae..fe2605e 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -90,6 +90,7 @@
     private String mGroupName;
 
     private boolean mOptionsMenuEditable;
+    private boolean mCloseActivityAfterDelete;
 
     public GroupDetailFragment() {
     }
@@ -190,11 +191,20 @@
 
         @Override
         public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-            bindGroupMetaData(data);
+            data.moveToPosition(-1);
+            if (data.moveToNext()) {
+                boolean deleted = data.getInt(GroupMetaDataLoader.DELETED) == 1;
+                if (!deleted) {
+                    bindGroupMetaData(data);
 
-            // Retrieve the list of members
-            configureAdapter(mGroupId);
-            startGroupMembersLoader();
+                    // Retrieve the list of members
+                    configureAdapter(mGroupId);
+                    startGroupMembersLoader();
+                    return;
+                }
+            }
+            updateSize(null);
+            updateTitle(null);
         }
 
         @Override
@@ -295,10 +305,15 @@
                 break;
             }
             case R.id.menu_delete_group: {
-                GroupDeletionDialogFragment.show(getFragmentManager(), mGroupId, mGroupName);
+                GroupDeletionDialogFragment.show(getFragmentManager(), mGroupId, mGroupName,
+                        mCloseActivityAfterDelete);
                 return true;
             }
         }
         return false;
     }
+
+    public void closeActivityAfterDelete(boolean closeActivity) {
+        mCloseActivityAfterDelete = closeActivity;
+    }
 }
diff --git a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
index 44d31be..c9c1342 100644
--- a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
@@ -33,8 +33,15 @@
     private static final String ARG_GROUP_ID = "groupId";
     private static final String ARG_LABEL = "label";
 
-    public static void show(FragmentManager fragmentManager, long groupId, String label) {
-        GroupDeletionDialogFragment dialog = new GroupDeletionDialogFragment();
+    private boolean mEndActivity;
+
+    public GroupDeletionDialogFragment(boolean endActivity) {
+        mEndActivity = endActivity;
+    }
+
+    public static void show(FragmentManager fragmentManager, long groupId, String label,
+            boolean endActivity) {
+        GroupDeletionDialogFragment dialog = new GroupDeletionDialogFragment(endActivity);
         Bundle args = new Bundle();
         args.putLong(ARG_GROUP_ID, groupId);
         args.putString(ARG_LABEL, label);
@@ -69,5 +76,8 @@
 
         getActivity().startService(ContactSaveService.createGroupDeletionIntent(
                 getActivity(), groupId));
+        if (mEndActivity) {
+            getActivity().finish();
+        }
     }
 }
