diff --git a/src/com/android/mail/providers/Folder.java b/src/com/android/mail/providers/Folder.java
index 4b96c77..eeba954 100644
--- a/src/com/android/mail/providers/Folder.java
+++ b/src/com/android/mail/providers/Folder.java
@@ -67,11 +67,6 @@
     public boolean hasChildren;
 
     /**
-     * How often this folder should be synchronized with the server.
-     */
-    public int syncFrequency;
-
-    /**
      * How large the synchronization window is: how many days worth of data is retained on the
      * device.
      */
@@ -149,7 +144,6 @@
         capabilities = in.readInt();
         // 1 for true, 0 for false.
         hasChildren = in.readInt() == 1;
-        syncFrequency = in.readInt();
         syncWindow = in.readInt();
         conversationListUri = in.readString();
         childFoldersListUri = in.readString();
@@ -167,7 +161,6 @@
         capabilities = cursor.getInt(UIProvider.FOLDER_CAPABILITIES_COLUMN);
         // 1 for true, 0 for false.
         hasChildren = cursor.getInt(UIProvider.FOLDER_HAS_CHILDREN_COLUMN) == 1;
-        syncFrequency = cursor.getInt(UIProvider.FOLDER_SYNC_FREQUENCY_COLUMN);
         syncWindow = cursor.getInt(UIProvider.FOLDER_SYNC_WINDOW_COLUMN);
         conversationListUri = cursor.getString(UIProvider.FOLDER_CONVERSATION_LIST_URI_COLUMN);
         childFoldersListUri = cursor.getString(UIProvider.FOLDER_CHILD_FOLDERS_LIST_COLUMN);
@@ -186,7 +179,6 @@
         dest.writeInt(capabilities);
         // 1 for true, 0 for false.
         dest.writeInt(hasChildren ? 1 : 0);
-        dest.writeInt(syncFrequency);
         dest.writeInt(syncWindow);
         dest.writeString(conversationListUri);
         dest.writeString(childFoldersListUri);
@@ -207,7 +199,6 @@
         out.append(name).append(LABEL_COMPONENT_SEPARATOR);
         out.append(capabilities).append(LABEL_COMPONENT_SEPARATOR);
         out.append(hasChildren ? "1": "0").append(LABEL_COMPONENT_SEPARATOR);
-        out.append(syncFrequency).append(LABEL_COMPONENT_SEPARATOR);
         out.append(syncWindow).append(LABEL_COMPONENT_SEPARATOR);
         out.append(conversationListUri).append(LABEL_COMPONENT_SEPARATOR);
         out.append(childFoldersListUri).append(LABEL_COMPONENT_SEPARATOR);
@@ -235,7 +226,6 @@
         capabilities = Integer.valueOf(folderMembers[2]);
         // 1 for true, 0 for false
         hasChildren = folderMembers[3] == "1";
-        syncFrequency = Integer.valueOf(folderMembers[4]);
         syncWindow = Integer.valueOf(folderMembers[5]);
         conversationListUri = folderMembers[6];
         childFoldersListUri = folderMembers[7];
diff --git a/src/com/android/mail/providers/UIProvider.java b/src/com/android/mail/providers/UIProvider.java
index 570b72f..7133fe5 100644
--- a/src/com/android/mail/providers/UIProvider.java
+++ b/src/com/android/mail/providers/UIProvider.java
@@ -277,7 +277,6 @@
         FolderColumns.NAME,
         FolderColumns.HAS_CHILDREN,
         FolderColumns.CAPABILITIES,
-        FolderColumns.SYNC_FREQUENCY,
         FolderColumns.SYNC_WINDOW,
         FolderColumns.CONVERSATION_LIST_URI,
         FolderColumns.CHILD_FOLDERS_LIST_URI,
@@ -293,15 +292,14 @@
     public static final int FOLDER_NAME_COLUMN = 2;
     public static final int FOLDER_HAS_CHILDREN_COLUMN = 3;
     public static final int FOLDER_CAPABILITIES_COLUMN = 4;
-    public static final int FOLDER_SYNC_FREQUENCY_COLUMN = 5;
-    public static final int FOLDER_SYNC_WINDOW_COLUMN = 6;
-    public static final int FOLDER_CONVERSATION_LIST_URI_COLUMN = 7;
-    public static final int FOLDER_CHILD_FOLDERS_LIST_COLUMN = 8;
-    public static final int FOLDER_UNREAD_COUNT_COLUMN = 9;
-    public static final int FOLDER_TOTAL_COUNT_COLUMN = 10;
-    public static final int FOLDER_REFRESH_URI_COLUMN = 11;
-    public static final int FOLDER_SYNC_STATUS_COLUMN = 12;
-    public static final int FOLDER_LAST_SYNC_RESULT_COLUMN = 13;
+    public static final int FOLDER_SYNC_WINDOW_COLUMN = 5;
+    public static final int FOLDER_CONVERSATION_LIST_URI_COLUMN = 6;
+    public static final int FOLDER_CHILD_FOLDERS_LIST_COLUMN = 7;
+    public static final int FOLDER_UNREAD_COUNT_COLUMN = 8;
+    public static final int FOLDER_TOTAL_COUNT_COLUMN = 9;
+    public static final int FOLDER_REFRESH_URI_COLUMN = 10;
+    public static final int FOLDER_SYNC_STATUS_COLUMN = 11;
+    public static final int FOLDER_LAST_SYNC_RESULT_COLUMN = 12;
 
     public static final class FolderCapabilities {
         public static final int SYNCABLE = 0x0001;
@@ -327,10 +325,6 @@
          */
         public static String HAS_CHILDREN = "hasChildren";
         /**
-         * This int column represents how often the folder should be synchronized with the server.
-         */
-        public static String SYNC_FREQUENCY = "syncFrequency";
-        /**
          * This int column represents how large the sync window is.
          */
         public static String SYNC_WINDOW = "syncWindow";
