diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5bf5bcf..77659ad 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -130,7 +130,7 @@
 
     <!-- Menu item that joins an aggregate with another aggregate -->
     <string name="menu_joinAggregate">Join</string>
-    
+
     <!-- Menu item to toggle the tabs that show where the contact data comes from. -->
     <string name="menu_showSources">Show sources</string>
     <string name="menu_hideSources">Hide sources</string>
@@ -301,6 +301,9 @@
     <!-- The text displayed when the contacts list is empty while displaying all contacts -->
     <string name="noContacts">No contacts.</string>
 
+    <!-- The text displayed when the contacts list is empty while displaying results after searching contacts -->
+    <string name="noMatchingContacts">No matching contacts found.</string>
+
     <!-- The text displayed when the contacts list is empty while displaying only contacts that have phone numbers -->
     <string name="noContactsWithPhoneNumbers">No contacts with phone numbers.</string>
 
@@ -1130,7 +1133,7 @@
     <string name="name_phonetic_middle">Phonetic middle name</string>
     <!-- Field title for the phonetic family name of a contact -->
     <string name="name_phonetic_family">Phonetic family name</string>
-    
+
     <!-- The title for the action to remove a contact from an aggregated contact -->
     <string name="split_label">Split</string>
     <!-- The explanation of what "split" will do. This needs word-smithing. -->
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index d446efe..6a433d1 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -620,6 +620,8 @@
             gravity = Gravity.CENTER;
         } else if (mMode == MODE_STREQUENT || mMode == MODE_STARRED) {
             empty.setText(getText(R.string.noFavoritesHelpText));
+        } else if (mMode == MODE_QUERY) {
+             empty.setText(getText(R.string.noMatchingContacts));
         } else {
             boolean hasSim = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE))
                     .hasIccCard();
diff --git a/src/com/android/contacts/model/EntityDelta.java b/src/com/android/contacts/model/EntityDelta.java
index f95bc12..7ac0f5b 100644
--- a/src/com/android/contacts/model/EntityDelta.java
+++ b/src/com/android/contacts/model/EntityDelta.java
@@ -437,6 +437,7 @@
         protected ContentValues mBefore;
         protected ContentValues mAfter;
         protected String mIdColumn = BaseColumns._ID;
+        private boolean mFromTemplate;
 
         /**
          * Next value to assign to {@link #mIdColumn} when building an insert
@@ -543,6 +544,14 @@
             return isPrimary == null ? false : isPrimary != 0;
         }
 
+        public void setFromTemplate(boolean isFromTemplate) {
+            mFromTemplate = isFromTemplate;
+        }
+
+        public boolean isFromTemplate() {
+            return mFromTemplate;
+        }
+
         public boolean beforeExists() {
             return (mBefore != null && mBefore.containsKey(mIdColumn));
         }
diff --git a/src/com/android/contacts/model/EntityModifier.java b/src/com/android/contacts/model/EntityModifier.java
index beaf3e6..d6f6571 100644
--- a/src/com/android/contacts/model/EntityModifier.java
+++ b/src/com/android/contacts/model/EntityModifier.java
@@ -389,7 +389,7 @@
                     // TODO: remove this verbose logging
                     Log.w(TAG, "Trimming: " + entry.toString());
                     entry.markDeleted();
-                } else {
+                } else if (!entry.isFromTemplate()) {
                     hasValues = true;
                 }
             }
diff --git a/src/com/android/contacts/model/GoogleSource.java b/src/com/android/contacts/model/GoogleSource.java
index 9968ace..b6f1e29 100644
--- a/src/com/android/contacts/model/GoogleSource.java
+++ b/src/com/android/contacts/model/GoogleSource.java
@@ -42,7 +42,6 @@
 
 public class GoogleSource extends FallbackSource {
     public static final String ACCOUNT_TYPE = "com.google.GAIA";
-
     public GoogleSource(String resPackageName) {
         this.accountType = ACCOUNT_TYPE;
         this.resPackageName = null;
@@ -160,6 +159,7 @@
 
     public static final void attemptMyContactsMembership(EntityDelta state, Context context) {
         final ValuesDelta stateValues = state.getValues();
+	stateValues.setFromTemplate(true);
         final String accountName = stateValues.getAsString(RawContacts.ACCOUNT_NAME);
         final String accountType = stateValues.getAsString(RawContacts.ACCOUNT_TYPE);
         attemptMyContactsMembership(state, accountName, accountType, context, true);
