diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 2548a45..c72f0d8 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -890,23 +890,25 @@
                     mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT);
         }
 
-        boolean groupSelected = false;
+        boolean groupActionsEnabled = false;
         if (mListFragment instanceof DefaultContactBrowseListFragment) {
             ContactListFilter filter =
                     ((DefaultContactBrowseListFragment)mListFragment).getFilter();
-            if (filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_GROUP) {
-                groupSelected = true;
+            if (filter != null
+                    && filter.filterType == ContactListFilter.FILTER_TYPE_GROUP
+                    && !filter.groupReadOnly) {
+                groupActionsEnabled = true;
             }
         }
 
         MenuItem renameGroup = menu.findItem(R.id.menu_rename_group);
         if (renameGroup != null) {
-            renameGroup.setVisible(groupSelected);
+            renameGroup.setVisible(groupActionsEnabled);
         }
 
         MenuItem deleteGroup = menu.findItem(R.id.menu_delete_group);
         if (deleteGroup != null) {
-            deleteGroup.setVisible(groupSelected);
+            deleteGroup.setVisible(groupActionsEnabled);
         }
 
         return true;
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 2b212fd..dcaf608 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -40,6 +40,7 @@
     private static final String KEY_ACCOUNT_TYPE = "filter.accountType";
     private static final String KEY_GROUP_ID = "filter.groupId";
     private static final String KEY_GROUP_SOURCE_ID = "filter.groupSourceId";
+    private static final String KEY_GROUP_READ_ONLY = "filter.groupReadOnly";
 
     public int filterType;
     public String accountType;
@@ -47,6 +48,7 @@
     public Drawable icon;
     public long groupId;
     public String groupSourceId;
+    public boolean groupReadOnly;
     public String title;
     private String mId;
 
@@ -63,13 +65,14 @@
         this.title = title;
     }
 
-    public ContactListFilter(
-            String accountType, String accountName, long groupId, String groupSourceId, String title) {
+    public ContactListFilter(String accountType, String accountName, long groupId,
+            String groupSourceId, boolean groupReadOnly, String title) {
         this.filterType = ContactListFilter.FILTER_TYPE_GROUP;
         this.accountType = accountType;
         this.accountName = accountName;
         this.groupId = groupId;
         this.groupSourceId = groupSourceId;
+        this.groupReadOnly = groupReadOnly;
         this.title = title;
     }
 
@@ -159,6 +162,7 @@
             .putString(KEY_ACCOUNT_TYPE, filter == null ? null : filter.accountType)
             .putLong(KEY_GROUP_ID, filter == null ? -1 : filter.groupId)
             .putString(KEY_GROUP_SOURCE_ID, filter == null ? null : filter.groupSourceId)
+            .putBoolean(KEY_GROUP_READ_ONLY, filter == null ? false : filter.groupReadOnly)
             .apply();
     }
 
@@ -173,6 +177,7 @@
         filter.accountType = prefs.getString(KEY_ACCOUNT_TYPE, null);
         filter.groupId = prefs.getLong(KEY_GROUP_ID, -1);
         filter.groupSourceId = prefs.getString(KEY_GROUP_SOURCE_ID, null);
+        filter.groupReadOnly = prefs.getBoolean(KEY_GROUP_READ_ONLY, false);
         return filter;
     }
 
diff --git a/src/com/android/contacts/list/ContactListFilterLoader.java b/src/com/android/contacts/list/ContactListFilterLoader.java
index adb7c7f..8ad9168 100644
--- a/src/com/android/contacts/list/ContactListFilterLoader.java
+++ b/src/com/android/contacts/list/ContactListFilterLoader.java
@@ -45,6 +45,7 @@
             Groups.TITLE,
             Groups.AUTO_ADD,
             Groups.SOURCE_ID,
+            Groups.GROUP_IS_READ_ONLY,
         };
 
         public static final int ID = 0;
@@ -53,6 +54,7 @@
         public static final int TITLE = 3;
         public static final int IS_DEFAULT_GROUP = 4;       // Using the AUTO_ADD group as default
         public static final int SOURCE_ID = 5;
+        public static final int GROUP_IS_READ_ONLY = 6;
 
         private static final String SELECTION =
                 Groups.DELETED + "=0 AND " + Groups.FAVORITES + "=0";
@@ -88,6 +90,7 @@
             while (cursor.moveToNext()) {
                 long groupId = cursor.getLong(GroupQuery.ID);
                 String groupSourceId = cursor.getString(GroupQuery.SOURCE_ID);
+                boolean groupReadOnly = cursor.getInt(GroupQuery.GROUP_IS_READ_ONLY) != 0;
                 String accountType = cursor.getString(GroupQuery.ACCOUNT_TYPE);
                 String accountName = cursor.getString(GroupQuery.ACCOUNT_NAME);
                 boolean defaultGroup = false;
@@ -106,8 +109,8 @@
                     }
                 } else {
                     String title = cursor.getString(GroupQuery.TITLE);
-                    results.add(new ContactListFilter(
-                            accountType, accountName, groupId, groupSourceId, title));
+                    results.add(new ContactListFilter(accountType, accountName, groupId,
+                            groupSourceId, groupReadOnly, title));
                 }
             }
         } finally {
