diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c1af548..dfbf918 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,9 +29,7 @@
             android:writePermission="android.permission.WRITE_SMS" />
         <provider android:name="MmsProvider" android:authorities="mms" android:multiprocess="true" 
             android:readPermission="android.permission.READ_SMS"
-            android:writePermission="android.permission.WRITE_SMS">
-            <grant-uri-permission android:pathPrefix="/part/" />
-        </provider>
+            android:writePermission="android.permission.WRITE_SMS" />
         <provider android:name="MmsSmsProvider" android:authorities="mms-sms" android:multiprocess="true" 
             android:readPermission="android.permission.READ_SMS"
             android:writePermission="android.permission.WRITE_SMS" />
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 31d7cb7..1644186 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -230,10 +230,6 @@
             }
             c.close();
         }
-        // remove orphaned threads
-        db.delete("threads",
-                "_id NOT IN (SELECT DISTINCT thread_id FROM sms " +
-                "UNION SELECT DISTINCT thread_id FROM pdu)", null);
     }
     
     public static int deleteOneSms(SQLiteDatabase db, int message_id) {
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index ee60142..56b39de 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -46,9 +46,7 @@
     private static final Uri NOTIFICATION_URI = Uri.parse("content://sms");
     private static final Uri SIM_URI = Uri.parse("content://sms/sim");
     static final String TABLE_SMS = "sms";
-    private static final String TABLE_RAW = "raw";
-    private static final String TABLE_SR_PENDING = "sr_pending";
-    
+
     private static final Integer ONE = Integer.valueOf(1);
 
     /**
@@ -246,12 +244,7 @@
             ArrayList<SmsMessage> messages = smsManager.getAllMessagesFromSim();
             ArrayList<ArrayList> singleRow = new ArrayList<ArrayList>();
 
-            SmsMessage message = messages.get(messageIndex);
-            if (message == null) {
-                throw new IllegalArgumentException(
-                        "Message not retrieved. ID: " + messageIndexString);
-            }
-            singleRow.add(convertSimToSms(message));
+            singleRow.add(convertSimToSms(messages.get(messageIndex)));
             return withSimNotificationUri(
                     new ArrayListCursor(SIM_COLUMNS, singleRow));
         } catch (NumberFormatException exception) {
@@ -269,10 +262,7 @@
         ArrayList<ArrayList> rows = new ArrayList<ArrayList>();
 
         for (int count = messages.size(), i = 0; i < count; i++) {
-            SmsMessage message = messages.get(i);
-            if (message != null) {
-                rows.add(convertSimToSms(message));
-            }
+            rows.add(convertSimToSms(messages.get(i)));
         }
         return withSimNotificationUri(new ArrayListCursor(SIM_COLUMNS, rows));
     }
@@ -562,17 +552,14 @@
     public int update(
             Uri url, ContentValues values, String where, String[] whereArgs) {
         int count = 0;
-        String table = TABLE_SMS;
-        String extraWhere = null;
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-
         switch (sURLMatcher.match(url)) {
             case SMS_RAW_MESSAGE:
-                table = TABLE_RAW;
+                count = db.update("raw", values, where, whereArgs);
                 break;
 
             case SMS_STATUS_PENDING:
-                table = TABLE_SR_PENDING;
+                count = db.update("sr_pending", values, where, whereArgs);
                 break;
 
             case SMS_ALL:
@@ -583,10 +570,17 @@
             case SMS_DRAFT:
             case SMS_OUTBOX:
             case SMS_CONVERSATIONS:
+                count = db.update(
+                        TABLE_SMS, values, where, whereArgs);
                 break;
 
             case SMS_ALL_ID:
-                extraWhere = "_id=" + url.getPathSegments().get(0);
+                if (where != null) {
+                    throw new UnsupportedOperationException(
+                            "WHERE not supported");
+                }
+                count = db.update(TABLE_SMS, values, "_id="
+                        + url.getPathSegments().get(0), null);
                 break;
 
             case SMS_INBOX_ID:
@@ -594,25 +588,40 @@
             case SMS_SENT_ID:
             case SMS_DRAFT_ID:
             case SMS_OUTBOX_ID:
-                extraWhere = "_id=" + url.getPathSegments().get(1);
+                if (where != null) {
+                    throw new UnsupportedOperationException(
+                            "WHERE not supported for this URI");
+                }
+                count = db.update(TABLE_SMS, values, "_id="
+                        + url.getPathSegments().get(1), null);
                 break;
 
             case SMS_CONVERSATIONS_ID: {
-                String threadId = url.getPathSegments().get(1);
+                int threadId;
 
                 try {
-                    Integer.parseInt(threadId);
+                    threadId = Integer.parseInt(url.getPathSegments().get(1));
                 } catch (Exception ex) {
-                    Log.e(TAG, "Bad conversation thread id: " + threadId);
+                    Log.e(TAG, "Bad conversation thread id: "
+                            + url.getPathSegments().get(1));
+                    count = 0;
                     break;
                 }
 
-                extraWhere = "thread_id=" + threadId;
+                if (where != null) {
+                    throw new UnsupportedOperationException(
+                            "WHERE not supported for this URI");
+                }
+                count = db.update(
+                        TABLE_SMS, values, "thread_id = " + threadId,
+                        null);
                 break;
             }
 
             case SMS_STATUS_ID:
-                extraWhere = "_id=" + url.getPathSegments().get(1);
+                String idString = url.getPathSegments().get(1); 
+
+                count = db.update(TABLE_SMS, values, "_id=" + idString, null);
                 break;  
                     
             default:
@@ -620,9 +629,6 @@
                         "URI " + url + " not supported");
         }
 
-        where = DatabaseUtils.concatenateWhere(where, extraWhere);
-        count = db.update(table, values, where, whereArgs);
-
         if (count > 0) {
             notifyChange(url);
         }
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 324d007..95018be 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -48,7 +48,6 @@
     private static final int URL_TELEPHONY = 1;
     private static final int URL_CURRENT = 2;
     private static final int URL_ID = 3;
-    private static final int URL_RESTOREAPN = 4;
 
     private static final String TAG = "TelephonyProvider";
     private static final String CARRIERS_TABLE = "carriers";
@@ -63,7 +62,6 @@
         s_urlMatcher.addURI("telephony", "carriers", URL_TELEPHONY);
         s_urlMatcher.addURI("telephony", "carriers/current", URL_CURRENT);
         s_urlMatcher.addURI("telephony", "carriers/#", URL_ID);
-        s_urlMatcher.addURI("telephony", "carriers/restore", URL_RESTOREAPN);
 
         s_currentNullMap = new ContentValues(1);
         s_currentNullMap.put("current", (Long) null);
@@ -124,10 +122,6 @@
                     "type TEXT," +
                     "current INTEGER);");
 
-            initDatabase(db);
-        }
-
-        private void initDatabase(SQLiteDatabase db) {
             // Read internal APNS data
             Resources r = mContext.getResources();
             XmlResourceParser parser = r.getXml(com.android.internal.R.xml.apns);
@@ -435,12 +429,6 @@
                 break;
             }
 
-            case URL_RESTOREAPN: {
-                count = 1;
-                restoreDefaultAPN();
-                break;
-            }
-
             default: {
                 throw new UnsupportedOperationException("Cannot delete that URL: " + url);
             }
@@ -486,7 +474,7 @@
                         new String[] { url.getLastPathSegment() });
                 break;
             }
-
+            
             default: {
                 throw new UnsupportedOperationException("Cannot update that URL: " + url);
             }
@@ -506,11 +494,4 @@
     }
 
     private SQLiteOpenHelper mOpenHelper;
-
-    private void restoreDefaultAPN() {
-        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-
-        db.delete(CARRIERS_TABLE, null, null);
-        ((DatabaseHelper) mOpenHelper).initDatabase(db);
-    }
 }
