diff --git a/exchange2/src/com/android/exchange/EasSyncService.java b/exchange2/src/com/android/exchange/EasSyncService.java
index f1e544d..863e322 100644
--- a/exchange2/src/com/android/exchange/EasSyncService.java
+++ b/exchange2/src/com/android/exchange/EasSyncService.java
@@ -1668,14 +1668,14 @@
 
             // Start with the default timeout
             int timeout = COMMAND_TIMEOUT;
-            if (!syncKey.equals("0")) {
-                // EAS doesn't allow GetChanges in an initial sync; sending other options
-                // appears to cause the server to delay its response in some cases, and this delay
-                // can be long enough to result in an IOException and total failure to sync.
-                // Therefore, we don't send any options with the initial sync.
-                // Set the truncation amount, body preference, lookback, etc.
-                target.sendSyncOptions(mProtocolVersionDouble, s);
-            } else {
+            boolean initialSync = syncKey.equals("0");
+            // EAS doesn't allow GetChanges in an initial sync; sending other options
+            // appears to cause the server to delay its response in some cases, and this delay
+            // can be long enough to result in an IOException and total failure to sync.
+            // Therefore, we don't send any options with the initial sync.
+            // Set the truncation amount, body preference, lookback, etc.
+            target.sendSyncOptions(mProtocolVersionDouble, s, initialSync);
+            if (initialSync) {
                 // Use enormous timeout for initial sync, which empirically can take a while longer
                 timeout = 120*SECONDS;
             }
diff --git a/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java
index 52400c4..04a67d0 100644
--- a/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/AbstractSyncAdapter.java
@@ -71,7 +71,8 @@
     public abstract void cleanup();
     public abstract boolean isSyncable();
     // Add sync options (filter, body type - html vs plain, and truncation)
-    public abstract void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException;
+    public abstract void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+            throws IOException;
     /**
      * Delete all records of this class in this account
      */
diff --git a/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java
index cf54ed5..e56a7d3 100644
--- a/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/AccountSyncAdapter.java
@@ -40,6 +40,7 @@
     }
 
     @Override
-    public void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException {
+    public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+            throws IOException {
     }
 }
diff --git a/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java
index 4df45a9..c21be00 100644
--- a/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/CalendarSyncAdapter.java
@@ -223,8 +223,11 @@
     }
 
     @Override
-    public void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException  {
-        setPimSyncOptions(protocolVersion, Eas.FILTER_2_WEEKS, s);
+    public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+            throws IOException  {
+        if (!initialSync) {
+            setPimSyncOptions(protocolVersion, Eas.FILTER_2_WEEKS, s);
+        }
     }
 
     @Override
diff --git a/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java
index 1b21d11..7b7be15 100644
--- a/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/ContactsSyncAdapter.java
@@ -144,8 +144,73 @@
     }
 
     @Override
-    public void sendSyncOptions(Double protocolVersion, Serializer s) throws IOException  {
-        setPimSyncOptions(protocolVersion, null, s);
+    public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
+            throws IOException  {
+        if (initialSync) {
+            // These are the tags we support for upload; whenever we add/remove support
+            // (in addData), we need to update this list
+            s.start(Tags.SYNC_SUPPORTED);
+            s.tag(Tags.CONTACTS_FIRST_NAME);
+            s.tag(Tags.CONTACTS_LAST_NAME);
+            s.tag(Tags.CONTACTS_MIDDLE_NAME);
+            s.tag(Tags.CONTACTS_SUFFIX);
+            s.tag(Tags.CONTACTS_COMPANY_NAME);
+            s.tag(Tags.CONTACTS_JOB_TITLE);
+            s.tag(Tags.CONTACTS_EMAIL1_ADDRESS);
+            s.tag(Tags.CONTACTS_EMAIL2_ADDRESS);
+            s.tag(Tags.CONTACTS_EMAIL3_ADDRESS);
+            s.tag(Tags.CONTACTS_BUSINESS2_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS_BUSINESS_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS2_MMS);
+            s.tag(Tags.CONTACTS_BUSINESS_FAX_NUMBER);
+            s.tag(Tags.CONTACTS2_COMPANY_MAIN_PHONE);
+            s.tag(Tags.CONTACTS_HOME_FAX_NUMBER);
+            s.tag(Tags.CONTACTS_HOME_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS_HOME2_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS_MOBILE_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS_CAR_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS_RADIO_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS_PAGER_NUMBER);
+            s.tag(Tags.CONTACTS_ASSISTANT_TELEPHONE_NUMBER);
+            s.tag(Tags.CONTACTS2_IM_ADDRESS);
+            s.tag(Tags.CONTACTS2_IM_ADDRESS_2);
+            s.tag(Tags.CONTACTS2_IM_ADDRESS_3);
+            s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_CITY);
+            s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_COUNTRY);
+            s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_POSTAL_CODE);
+            s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_STATE);
+            s.tag(Tags.CONTACTS_BUSINESS_ADDRESS_STREET);
+            s.tag(Tags.CONTACTS_HOME_ADDRESS_CITY);
+            s.tag(Tags.CONTACTS_HOME_ADDRESS_COUNTRY);
+            s.tag(Tags.CONTACTS_HOME_ADDRESS_POSTAL_CODE);
+            s.tag(Tags.CONTACTS_HOME_ADDRESS_STATE);
+            s.tag(Tags.CONTACTS_HOME_ADDRESS_STREET);
+            s.tag(Tags.CONTACTS_OTHER_ADDRESS_CITY);
+            s.tag(Tags.CONTACTS_OTHER_ADDRESS_COUNTRY);
+            s.tag(Tags.CONTACTS_OTHER_ADDRESS_POSTAL_CODE);
+            s.tag(Tags.CONTACTS_OTHER_ADDRESS_STATE);
+            s.tag(Tags.CONTACTS_OTHER_ADDRESS_STREET);
+            s.tag(Tags.CONTACTS_YOMI_COMPANY_NAME);
+            s.tag(Tags.CONTACTS_YOMI_FIRST_NAME);
+            s.tag(Tags.CONTACTS_YOMI_LAST_NAME);
+            s.tag(Tags.CONTACTS2_NICKNAME);
+            s.tag(Tags.CONTACTS_ASSISTANT_NAME);
+            s.tag(Tags.CONTACTS2_MANAGER_NAME);
+            s.tag(Tags.CONTACTS_SPOUSE);
+            s.tag(Tags.CONTACTS_DEPARTMENT);
+            s.tag(Tags.CONTACTS_TITLE);
+            s.tag(Tags.CONTACTS_OFFICE_LOCATION);
+            s.tag(Tags.CONTACTS2_CUSTOMER_ID);
+            s.tag(Tags.CONTACTS2_GOVERNMENT_ID);
+            s.tag(Tags.CONTACTS2_ACCOUNT_NAME);
+            s.tag(Tags.CONTACTS_ANNIVERSARY);
+            s.tag(Tags.CONTACTS_BIRTHDAY);
+            s.tag(Tags.CONTACTS_WEBPAGE);
+            s.tag(Tags.CONTACTS_PICTURE);
+            s.end(); // SYNC_SUPPORTED
+        } else {
+            setPimSyncOptions(protocolVersion, null, s);
+        }
     }
 
     @Override
@@ -352,7 +417,6 @@
 
         public void addData(String serverId, ContactOperations ops, Entity entity)
                 throws IOException {
-            String fileAs = null;
             String prefix = null;
             String firstName = null;
             String lastName = null;
@@ -390,9 +454,6 @@
                     case Tags.CONTACTS_MIDDLE_NAME:
                         middleName = getValue();
                         break;
-                    case Tags.CONTACTS_FILE_AS:
-                        fileAs = getValue();
-                        break;
                     case Tags.CONTACTS_SUFFIX:
                         suffix = getValue();
                         break;
@@ -568,11 +629,6 @@
                         categoriesParser(ops, entity);
                         break;
 
-                    case Tags.CONTACTS_COMPRESSED_RTF:
-                        // We don't use this, and it isn't necessary to upload, so we'll ignore it
-                        skipTag();
-                        break;
-
                     default:
                         skipTag();
                 }
@@ -593,7 +649,7 @@
             }
 
             ops.addName(entity, prefix, firstName, lastName, middleName, suffix, name,
-                    yomiFirstName, yomiLastName, fileAs);
+                    yomiFirstName, yomiLastName);
             ops.addBusiness(entity, business);
             ops.addPersonal(entity, personal);
 
@@ -1209,7 +1265,7 @@
 
         public void addName(Entity entity, String prefix, String givenName, String familyName,
                 String middleName, String suffix, String displayName, String yomiFirstName,
-                String yomiLastName, String fileAs) {
+                String yomiLastName) {
             RowBuilder builder = untypedRowBuilder(entity, StructuredName.CONTENT_ITEM_TYPE);
             ContentValues cv = builder.cv;
             if (cv != null && cvCompareString(cv, StructuredName.GIVEN_NAME, givenName) &&
@@ -1218,7 +1274,6 @@
                     cvCompareString(cv, StructuredName.PREFIX, prefix) &&
                     cvCompareString(cv, StructuredName.PHONETIC_GIVEN_NAME, yomiFirstName) &&
                     cvCompareString(cv, StructuredName.PHONETIC_FAMILY_NAME, yomiLastName) &&
-                    //cvCompareString(cv, StructuredName.DISPLAY_NAME, fileAs) &&
                     cvCompareString(cv, StructuredName.SUFFIX, suffix)) {
                 return;
             }
@@ -1229,7 +1284,6 @@
             builder.withValue(StructuredName.PHONETIC_GIVEN_NAME, yomiFirstName);
             builder.withValue(StructuredName.PHONETIC_FAMILY_NAME, yomiLastName);
             builder.withValue(StructuredName.PREFIX, prefix);
-            //builder.withValue(StructuredName.DISPLAY_NAME, fileAs);
             add(builder.build());
         }
 
@@ -1601,12 +1655,6 @@
         sendStringData(s, cv, StructuredName.PHONETIC_GIVEN_NAME, Tags.CONTACTS_YOMI_FIRST_NAME);
         sendStringData(s, cv, StructuredName.PHONETIC_FAMILY_NAME, Tags.CONTACTS_YOMI_LAST_NAME);
         sendStringData(s, cv, StructuredName.PREFIX, Tags.CONTACTS_TITLE);
-        if (cv.containsKey(StructuredName.DISPLAY_NAME)) {
-            displayName = cv.getAsString(StructuredName.DISPLAY_NAME);
-            if (!TextUtils.isEmpty(displayName)) {
-                s.data(Tags.CONTACTS_FILE_AS, displayName);
-            }
-        }
         return displayName;
     }
 
diff --git a/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java b/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java
index 73199f8..5a6523c 100644
--- a/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java
+++ b/exchange2/src/com/android/exchange/adapter/EmailSyncAdapter.java
@@ -193,8 +193,9 @@
     }
 
     @Override
-    public void sendSyncOptions(Double protocolVersion, Serializer s)
+    public void sendSyncOptions(Double protocolVersion, Serializer s, boolean initialSync)
             throws IOException  {
+        if (initialSync) return;
         mFetchRequestList.clear();
         // Find partially loaded messages; this should typically be a rare occurrence
         Cursor c = mContext.getContentResolver().query(Message.CONTENT_URI,
