diff --git a/src/com/android/exchange/EasAccountService.java b/src/com/android/exchange/EasAccountService.java
index f5710b2..93efddd 100644
--- a/src/com/android/exchange/EasAccountService.java
+++ b/src/com/android/exchange/EasAccountService.java
@@ -268,9 +268,9 @@
                         cv.clear();
                         // Save the protocol version in the account; if we're using 12.0 or greater,
                         // set the flag for support of SmartForward
-                        cv.put(Account.PROTOCOL_VERSION, mProtocolVersion);
+                        cv.put(AccountColumns.PROTOCOL_VERSION, mProtocolVersion);
                         if (mProtocolVersionDouble >= 12.0) {
-                            cv.put(Account.FLAGS,
+                            cv.put(AccountColumns.FLAGS,
                                     mAccount.mFlags |
                                     Account.FLAGS_SUPPORTS_SMART_FORWARD |
                                     Account.FLAGS_SUPPORTS_SEARCH |
diff --git a/src/com/android/exchange/EasOutboxService.java b/src/com/android/exchange/EasOutboxService.java
index 0a4c233..19a5af8 100644
--- a/src/com/android/exchange/EasOutboxService.java
+++ b/src/com/android/exchange/EasOutboxService.java
@@ -66,7 +66,7 @@
         SyncColumns.SERVER_ID + "!=" + SEND_FAILED + ')';
     public static final String[] BODY_SOURCE_PROJECTION =
         new String[] {BodyColumns.SOURCE_MESSAGE_KEY};
-    public static final String WHERE_MESSAGE_KEY = Body.MESSAGE_KEY + "=?";
+    public static final String WHERE_MESSAGE_KEY = BodyColumns.MESSAGE_KEY + "=?";
 
     // This is a normal email (i.e. not one of the other types)
     public static final int MODE_NORMAL = 0;
diff --git a/src/com/android/exchange/EasSyncService.java b/src/com/android/exchange/EasSyncService.java
index 443e719..45191a6 100644
--- a/src/com/android/exchange/EasSyncService.java
+++ b/src/com/android/exchange/EasSyncService.java
@@ -1108,7 +1108,7 @@
                     } else if (statusCode == MoveItemsParser.STATUS_CODE_SUCCESS) {
                         // Update with the new server id
                         cv.put(SyncColumns.SERVER_ID, p.getNewServerId());
-                        cv.put(Message.FLAGS, msg.mFlags | MESSAGE_FLAG_MOVED_MESSAGE);
+                        cv.put(MessageColumns.FLAGS, msg.mFlags | MESSAGE_FLAG_MOVED_MESSAGE);
                         mContentResolver.update(
                                 ContentUris.withAppendedId(Message.CONTENT_URI, req.mMessageId),
                                 cv, null, null);
diff --git a/src/com/android/exchange/ExchangeService.java b/src/com/android/exchange/ExchangeService.java
index dd9e3e8..0d20ebb 100644
--- a/src/com/android/exchange/ExchangeService.java
+++ b/src/com/android/exchange/ExchangeService.java
@@ -36,7 +36,7 @@
 import com.android.emailcommon.provider.Account;
 import com.android.emailcommon.provider.EmailContent.Attachment;
 import com.android.emailcommon.provider.EmailContent.MailboxColumns;
-import com.android.emailcommon.provider.EmailContent.Message;
+import com.android.emailcommon.provider.EmailContent.MessageColumns;
 import com.android.emailcommon.provider.HostAuth;
 import com.android.emailcommon.provider.Mailbox;
 import com.android.emailcommon.provider.MailboxUtilities;
@@ -77,7 +77,7 @@
         MailboxColumns.ACCOUNT_KEY + "=? and " + MailboxColumns.TYPE + "!=" +
         Mailbox.TYPE_EAS_ACCOUNT_MAILBOX + " and " + MailboxColumns.SYNC_INTERVAL +
         " IN (" + Mailbox.CHECK_INTERVAL_PING + ',' + Mailbox.CHECK_INTERVAL_PUSH + ')';
-    private static final String WHERE_MAILBOX_KEY = Message.MAILBOX_KEY + "=?";
+    private static final String WHERE_MAILBOX_KEY = MessageColumns.MAILBOX_KEY + "=?";
     private static final String WHERE_CALENDAR_ID = Events.CALENDAR_ID + "=?";
     private static final String ACCOUNT_KEY_IN = MailboxColumns.ACCOUNT_KEY + " in (";
 
diff --git a/src/com/android/exchange/adapter/EmailSyncAdapter.java b/src/com/android/exchange/adapter/EmailSyncAdapter.java
index bee33a2..b8676ea 100644
--- a/src/com/android/exchange/adapter/EmailSyncAdapter.java
+++ b/src/com/android/exchange/adapter/EmailSyncAdapter.java
@@ -29,6 +29,7 @@
 import android.net.Uri;
 import android.os.RemoteException;
 import android.os.TransactionTooLargeException;
+import android.provider.BaseColumns;
 import android.provider.CalendarContract.Events;
 import android.text.Html;
 import android.text.SpannedString;
@@ -100,14 +101,15 @@
     private static final int MESSAGE_ID_SUBJECT_ID_COLUMN = 0;
     private static final int MESSAGE_ID_SUBJECT_SUBJECT_COLUMN = 1;
     private static final String[] MESSAGE_ID_SUBJECT_PROJECTION =
-        new String[] { Message.RECORD_ID, MessageColumns.SUBJECT };
+        new String[] { MessageColumns._ID, MessageColumns.SUBJECT };
 
-    private static final String WHERE_BODY_SOURCE_MESSAGE_KEY = Body.SOURCE_MESSAGE_KEY + "=?";
+    private static final String WHERE_BODY_SOURCE_MESSAGE_KEY =
+            EmailContent.BodyColumns.SOURCE_MESSAGE_KEY + "=?";
     private static final String WHERE_MAILBOX_KEY_AND_MOVED =
         MessageColumns.MAILBOX_KEY + "=? AND (" + MessageColumns.FLAGS + "&" +
         EasSyncService.MESSAGE_FLAG_MOVED_MESSAGE + ")!=0";
     private static final String[] FETCH_REQUEST_PROJECTION =
-        new String[] {EmailContent.RECORD_ID, SyncColumns.SERVER_ID};
+        new String[] {BaseColumns._ID, SyncColumns.SERVER_ID};
     private static final int FETCH_REQUEST_RECORD_ID = 0;
     private static final int FETCH_REQUEST_SERVER_ID = 1;
 
@@ -136,11 +138,11 @@
     @Override
     public void wipe() {
         mContentResolver.delete(Message.CONTENT_URI,
-                Message.MAILBOX_KEY + "=" + mMailbox.mId, null);
+                MessageColumns.MAILBOX_KEY + "=" + mMailbox.mId, null);
         mContentResolver.delete(Message.DELETED_CONTENT_URI,
-                Message.MAILBOX_KEY + "=" + mMailbox.mId, null);
+                MessageColumns.MAILBOX_KEY + "=" + mMailbox.mId, null);
         mContentResolver.delete(Message.UPDATED_CONTENT_URI,
-                Message.MAILBOX_KEY + "=" + mMailbox.mId, null);
+                MessageColumns.MAILBOX_KEY + "=" + mMailbox.mId, null);
         mService.clearRequests();
         mFetchRequestList.clear();
         // Delete attachments...
@@ -1164,12 +1166,13 @@
                         msg.mText = msg.mText.substring(0, maxPerFetch) + "...";
                     }
                     ops.add(ContentProviderOperation.newUpdate(Body.CONTENT_URI)
-                            .withSelection(Body.MESSAGE_KEY + "=?", bindArgument)
-                            .withValue(Body.TEXT_CONTENT, msg.mText)
+                            .withSelection(EmailContent.BodyColumns.MESSAGE_KEY + "=?",
+                                    bindArgument)
+                            .withValue(EmailContent.BodyColumns.TEXT_CONTENT, msg.mText)
                             .build());
                     ops.add(ContentProviderOperation.newUpdate(Message.CONTENT_URI)
-                            .withSelection(EmailContent.RECORD_ID + "=?", bindArgument)
-                            .withValue(Message.FLAG_LOADED, Message.FLAG_LOADED_COMPLETE)
+                            .withSelection(BaseColumns._ID + "=?", bindArgument)
+                            .withValue(MessageColumns.FLAG_LOADED, Message.FLAG_LOADED_COMPLETE)
                             .build());
                 }
             }
diff --git a/src/com/android/exchange/adapter/EmailSyncParser.java b/src/com/android/exchange/adapter/EmailSyncParser.java
index ab16dd8..787dcdb 100644
--- a/src/com/android/exchange/adapter/EmailSyncParser.java
+++ b/src/com/android/exchange/adapter/EmailSyncParser.java
@@ -27,6 +27,8 @@
 import com.android.emailcommon.mail.Part;
 import com.android.emailcommon.provider.Account;
 import com.android.emailcommon.provider.EmailContent;
+import com.android.emailcommon.provider.EmailContent.MessageColumns;
+import com.android.emailcommon.provider.EmailContent.SyncColumns;
 import com.android.emailcommon.provider.Mailbox;
 import com.android.emailcommon.provider.Policy;
 import com.android.emailcommon.provider.ProviderUnavailableException;
@@ -53,8 +55,8 @@
 public class EmailSyncParser extends AbstractSyncParser {
     private static final String TAG = Eas.LOG_TAG;
 
-    private static final String WHERE_SERVER_ID_AND_MAILBOX_KEY = EmailContent.SyncColumns.SERVER_ID
-            + "=? and " + EmailContent.MessageColumns.MAILBOX_KEY + "=?";
+    private static final String WHERE_SERVER_ID_AND_MAILBOX_KEY = SyncColumns.SERVER_ID
+            + "=? and " + MessageColumns.MAILBOX_KEY + "=?";
 
     private final String mMailboxIdAsString;
 
@@ -68,7 +70,7 @@
     private static final int MESSAGE_ID_SUBJECT_ID_COLUMN = 0;
     private static final int MESSAGE_ID_SUBJECT_SUBJECT_COLUMN = 1;
     private static final String[] MESSAGE_ID_SUBJECT_PROJECTION =
-            new String[] { EmailContent.Message.RECORD_ID, EmailContent.MessageColumns.SUBJECT };
+            new String[] { MessageColumns._ID, MessageColumns.SUBJECT };
 
     @VisibleForTesting
     static final int LAST_VERB_REPLY = 1;
@@ -824,11 +826,11 @@
                 final String[] bindArgument = new String[] {id};
                 ops.add(ContentProviderOperation.newUpdate(EmailContent.Body.CONTENT_URI)
                         .withSelection(EmailContent.Body.SELECTION_BY_MESSAGE_KEY, bindArgument)
-                        .withValue(EmailContent.Body.TEXT_CONTENT, msg.mText)
+                        .withValue(EmailContent.BodyColumns.TEXT_CONTENT, msg.mText)
                         .build());
                 ops.add(ContentProviderOperation.newUpdate(EmailContent.Message.CONTENT_URI)
-                        .withSelection(EmailContent.RECORD_ID + "=?", bindArgument)
-                        .withValue(EmailContent.Message.FLAG_LOADED,
+                        .withSelection(MessageColumns._ID + "=?", bindArgument)
+                        .withValue(MessageColumns.FLAG_LOADED,
                                 EmailContent.Message.FLAG_LOADED_COMPLETE)
                         .build());
             }
diff --git a/src/com/android/exchange/eas/EasOutboxSync.java b/src/com/android/exchange/eas/EasOutboxSync.java
index f8b428c..b231ef1 100644
--- a/src/com/android/exchange/eas/EasOutboxSync.java
+++ b/src/com/android/exchange/eas/EasOutboxSync.java
@@ -251,7 +251,7 @@
     private static class SmartSendInfo {
         public static final String[] BODY_SOURCE_PROJECTION =
                 new String[] {BodyColumns.SOURCE_MESSAGE_KEY};
-        public static final String WHERE_MESSAGE_KEY = Body.MESSAGE_KEY + "=?";
+        public static final String WHERE_MESSAGE_KEY = BodyColumns.MESSAGE_KEY + "=?";
 
         final String mItemId;
         final String mCollectionId;
diff --git a/tests/src/com/android/exchange/adapter/EmailSyncAdapterTests.java b/tests/src/com/android/exchange/adapter/EmailSyncAdapterTests.java
index 8f030cd..e390816 100644
--- a/tests/src/com/android/exchange/adapter/EmailSyncAdapterTests.java
+++ b/tests/src/com/android/exchange/adapter/EmailSyncAdapterTests.java
@@ -151,7 +151,7 @@
         Body body = Body.restoreBodyWithMessageId(mProviderContext, msg4.mId);
         // Set its source message to msg2's id
         ContentValues values = new ContentValues();
-        values.put(Body.SOURCE_MESSAGE_KEY, msg2.mId);
+        values.put(EmailContent.BodyColumns.SOURCE_MESSAGE_KEY, msg2.mId);
         body.update(mProviderContext, values);
 
         // Now send deletions again; this time only two should get deleted; msg2 should NOT be
