diff --git a/src/com/android/contacts/group/GroupListItem.java b/src/com/android/contacts/group/GroupListItem.java
index f2359b6..3bfcdd3 100644
--- a/src/com/android/contacts/group/GroupListItem.java
+++ b/src/com/android/contacts/group/GroupListItem.java
@@ -15,6 +15,8 @@
  */
 package com.android.contacts.group;
 
+import java.util.Objects;
+
 /**
  * Meta-data for a contact group.  We load all groups associated with the contact's
  * constituent accounts.
@@ -83,4 +85,36 @@
     public String getSystemId() {
         return mSystemId;
     }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mAccountName, mAccountType, mDataSet, mGroupId, mTitle,
+                mIsFirstGroupInAccount, mMemberCount, mIsReadOnly, mSystemId);
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+
+        if (!(other instanceof GroupListItem)) {
+            return false;
+        }
+
+        final GroupListItem otherGroup = (GroupListItem) other;
+        if (!Objects.equals(mAccountName, otherGroup.getAccountName())
+                || !Objects.equals(mAccountType, otherGroup.getAccountType())
+                || !Objects.equals(mDataSet, otherGroup.getDataSet())
+                || !(mGroupId == otherGroup.getGroupId())
+                || !Objects.equals(mTitle, otherGroup.getTitle())
+                || !(mIsFirstGroupInAccount == otherGroup.isFirstGroupInAccount())
+                || !(mMemberCount == otherGroup.getMemberCount())
+                || !(mIsReadOnly == otherGroup.isReadOnly())
+                || !Objects.equals(mSystemId, otherGroup.getSystemId())) {
+            return false;
+        }
+
+        return true;
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/contacts/group/GroupsFragment.java b/src/com/android/contacts/group/GroupsFragment.java
index be1b44a..4c9e251 100644
--- a/src/com/android/contacts/group/GroupsFragment.java
+++ b/src/com/android/contacts/group/GroupsFragment.java
@@ -18,11 +18,11 @@
 
 import android.app.Fragment;
 import android.app.LoaderManager;
-import android.content.Context;
 import android.content.CursorLoader;
 import android.content.Loader;
 import android.database.Cursor;
 import android.os.Bundle;
+import android.util.Log;
 
 import com.android.contacts.GroupListLoader;
 
@@ -34,6 +34,8 @@
  */
 public final class GroupsFragment extends Fragment {
 
+    private static final String TAG = GroupsFragment.class.getSimpleName();
+
     private static final int LOADER_GROUPS = 1;
 
     /**
@@ -57,12 +59,26 @@
 
                 @Override
                 public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-                    mGroupListItems.clear();
+                    final List<GroupListItem> newGroupListItems = new ArrayList<>();
                     for (int i = 0; i < data.getCount(); i++) {
                         if (data.moveToNext()) {
-                            mGroupListItems.add(GroupUtil.getGroupListItem(data, i));
+                            newGroupListItems.add(GroupUtil.getGroupListItem(data, i));
                         }
                     }
+
+                    if (mGroupListItems.equals(newGroupListItems)) {
+                        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                            Log.v(TAG, "The same groups loaded, returning.");
+                        }
+                        return;
+                    }
+
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "New group(s) loaded.");
+                    }
+
+                    mGroupListItems.clear();
+                    mGroupListItems.addAll(newGroupListItems);
                     if (mListener != null) {
                         mListener.onGroupsLoaded(mGroupListItems);
                     }
