diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..e19442d
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,5 @@
+[gerrit]
+host=review.blissroms.com
+port=29418
+project=platform_packages_providers_TelephonyProvider.git
+defaultbranch=o8.1
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 4b84fe5..8b2c839 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -240,7 +240,7 @@
     private static boolean sFakeLowStorageTest = false;     // for testing only
 
     static final String DATABASE_NAME = "mmssms.db";
-    static final int DATABASE_VERSION = 66;
+    static final int DATABASE_VERSION = 68;
     private static final int IDLE_CONNECTION_TIMEOUT_MS = 30000;
 
     private final Context mContext;
@@ -890,10 +890,16 @@
             "offset INTEGER);";
 
     private void createSmsTables(SQLiteDatabase db) {
+        createSmsTables(db, false);
+    }
+
+    private void createSmsTables(SQLiteDatabase db, boolean onlySMS) {
         // N.B.: Whenever the columns here are changed, the columns in
         // {@ref MmsSmsProvider} must be changed to match.
         db.execSQL(CREATE_SMS_TABLE_STRING);
 
+        if (onlySMS) return;
+
         /**
          * This table is used by the SMS dispatcher to hold
          * incomplete partial messages until all the parts arrive.
@@ -934,6 +940,10 @@
     }
 
     private void createCommonTables(SQLiteDatabase db) {
+        createCommonTables(db, false);
+    }
+
+    private void createCommonTables(SQLiteDatabase db, boolean threadsOnly) {
         // TODO Ensure that each entry is removed when the last use of
         // any address equivalent to its address is removed.
 
@@ -946,9 +956,10 @@
          * will be used. The _id is created with AUTOINCREMENT so it
          * will never be reused again if a recipient is deleted.
          */
-        db.execSQL("CREATE TABLE canonical_addresses (" +
-                   "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
-                   "address TEXT);");
+        if (!threadsOnly)
+            db.execSQL("CREATE TABLE canonical_addresses (" +
+                       "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
+                       "address TEXT);");
 
         /**
          * This table maps the subject and an ordered set of recipient
@@ -971,6 +982,8 @@
                    Threads.ERROR + " INTEGER DEFAULT 0," +
                    Threads.HAS_ATTACHMENT + " INTEGER DEFAULT 0);");
 
+        if (threadsOnly)
+            return;
         /**
          * This table stores the queue of messages to be sent/downloaded.
          */
@@ -1486,7 +1499,25 @@
             } finally {
                 db.endTransaction();
             }
-
+            // fall through
+        case 66:
+            // fall through - version not used by AOSP
+        case 67:
+            // fall through - version not used by AOSP
+        case 68:
+            // upgrade from 14.1
+            if (currentVersion <= 68) {
+                return;
+            }
+            try {
+                upgradeDatabaseToVersion68(db);
+                db.setTransactionSuccessful();
+            } catch (Throwable ex) {
+                Log.e(TAG, ex.getMessage(), ex);
+                break;
+            } finally {
+                db.endTransaction();
+            }
             return;
         }
 
@@ -1789,6 +1820,39 @@
         }
     }
 
+    private void upgradeDatabaseToVersion68(SQLiteDatabase db) {
+        try {
+            // back up and recreate sms table to drop priority column
+            db.execSQL("DROP TABLE IF EXISTS sms_tmp;");
+            db.execSQL("ALTER TABLE sms RENAME TO sms_tmp;");
+            createSmsTables(db, true);
+            final String columns = "_id, thread_id, address, person, date, date_sent, " +
+                    "protocol, read, status, type, reply_path_present, subject, body, service_center" +
+                    "locked, sub_id, error_code, creator, seen";
+            db.execSQL("INSERT INTO sms (" + columns + ") SELECT " + columns + " FROM sms_tmp");
+            db.execSQL("DROP TABLE sms_tmp;");
+        } catch (SQLiteException e) {
+            Log.e(TAG, "[upgradeDatabaseToVersion68] Exception removing column "
+                    + "priority; " + e);
+        }
+
+        // now do attachment_info and notification sections
+        try {
+            db.execSQL("DROP TABLE IF EXISTS threads_tmp;");
+            db.execSQL("ALTER TABLE threads RENAME TO threads_tmp;");
+            createCommonTables(db, true);
+            final String columns = Threads._ID + ", " + Threads.DATE + ", " + Threads.MESSAGE_COUNT +
+                ", " + Threads.RECIPIENT_IDS + ", " + Threads.SNIPPET + ", " + Threads.SNIPPET_CHARSET + ", " +
+                Threads.READ + ", " + Threads.ARCHIVED + ", " + Threads.TYPE + ", " + Threads.ERROR + ", " +
+                Threads.HAS_ATTACHMENT;
+            db.execSQL("INSERT INTO threads (" + columns + ") SELECT " + columns + " FROM threads_tmp");
+            db.execSQL("DROP TABLE threads_tmp");
+        } catch (SQLiteException e) {
+            Log.e(TAG, "[upgradeDatabaseToVersion68] Exception removing columns "
+                    + "from threads table; " + e);
+        }
+    }
+
     @Override
     public synchronized SQLiteDatabase getWritableDatabase() {
         SQLiteDatabase db = super.getWritableDatabase();
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index e94493b..b785f1f 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -119,7 +119,7 @@
     private static final boolean DBG = true;
     private static final boolean VDBG = false; // STOPSHIP if true
 
-    private static final int DATABASE_VERSION = 21 << 16;
+    private static final int DATABASE_VERSION = 24 << 16;
     private static final int URL_UNKNOWN = 0;
     private static final int URL_TELEPHONY = 1;
     private static final int URL_CURRENT = 2;
@@ -816,8 +816,11 @@
                 }
                 oldVersion = 18 << 16 | 6;
             }
-            if (oldVersion < (19 << 16 | 6)) {
-                // Upgrade steps from version 18 are:
+            // version 19 is latest AOSP version (i.e. Android 8.0).
+            // versions 20-23 are unused by AOSP.
+            // version 23 is latest cm-14.1 version
+            if (oldVersion < (24 << 16 | 6)) {
+                // Upgrade steps from Lineage 14.1 (version 23) are:
                 // 1. Create a temp table- done in createCarriersTable()
                 // 2. copy over APNs from old table to new table - done in copyDataToTmpTable()
                 // 3. Drop the existing table.
@@ -862,9 +865,7 @@
                             ": " + c.getCount());
                     c.close();
                 }
-                oldVersion = 19 << 16 | 6;
-            }
-            if (oldVersion < (20 << 16 | 6)) {
+
                 try {
                     // Try to update the siminfo table. It might not be there.
                     db.execSQL("ALTER TABLE " + SIMINFO_TABLE + " ADD COLUMN " +
@@ -879,9 +880,7 @@
                                 "The table will get created in onOpen.");
                     }
                 }
-                oldVersion = 20 << 16 | 6;
-            }
-            if (oldVersion < (21 << 16 | 6)) {
+
                 try {
                     // Try to update the siminfo table. It might not be there.
                     db.execSQL("ALTER TABLE " + CARRIERS_TABLE + " ADD COLUMN " +
@@ -894,8 +893,9 @@
                                 "The table will get created in onOpen.");
                     }
                 }
-                oldVersion = 21 << 16 | 6;
+                oldVersion = 24 << 16 | 6;
             }
+
             if (DBG) {
                 log("dbh.onUpgrade:- db=" + db + " oldV=" + oldVersion + " newV=" + newVersion);
             }
