diff --git a/res/values/strings.xml b/res/values/strings.xml
index e9c5bec..fadb16e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -20,7 +20,8 @@
     <string name="choose_upload">Choose file for upload</string>
     <!-- Name of menu item of a new tab.  Also used in the title bar when displaying a new tab -->
     <string name="new_tab">New window</string>
-    <!-- Name of menu item of a new incognito tab.  Also used in the title bar when displaying a new tab -->
+    <!-- Name of menu item of a new incognito tab.  Also used in the
+         title bar when displaying a new tab [CHAR LIMIT=30] -->
     <string name="new_incognito_tab">New incognito window</string>
     <!-- Name of menu item which brings up a list of the currently active tabs -->
     <string name="active_tabs">Windows</string>
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index 87c38e2..33f3006 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -385,7 +385,7 @@
                 fixPicasaBookmark();
                 Editor ed = p.edit();
                 ed.putBoolean("fix_picasa", false);
-                ed.commit();
+                ed.apply();
             }
         }
         mSearchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 2f739fa..5a7dd0d 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -401,7 +401,7 @@
         Editor ed = PreferenceManager.
                 getDefaultSharedPreferences(context).edit();
         ed.putString(PREF_HOMEPAGE, url);
-        ed.commit();
+        ed.apply();
         homeUrl = url;
     }
 
@@ -581,7 +581,7 @@
         reset();
         SharedPreferences p =
             PreferenceManager.getDefaultSharedPreferences(ctx);
-        p.edit().clear().commit();
+        p.edit().clear().apply();
         PreferenceManager.setDefaultValues(ctx, R.xml.browser_preferences,
                 true);
         // reset homeUrl
diff --git a/src/com/android/browser/SystemAllowGeolocationOrigins.java b/src/com/android/browser/SystemAllowGeolocationOrigins.java
index 3f5a84e..b53611f 100644
--- a/src/com/android/browser/SystemAllowGeolocationOrigins.java
+++ b/src/com/android/browser/SystemAllowGeolocationOrigins.java
@@ -103,7 +103,7 @@
         // Save the new value as the last read value
         preferences.edit()
                 .putString(LAST_READ_ALLOW_GEOLOCATION_ORIGINS, newSetting)
-                .commit();
+                .apply();
 
         Set<String> oldOrigins = parseAllowGeolocationOrigins(lastReadSetting);
         Set<String> newOrigins = parseAllowGeolocationOrigins(newSetting);
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index d93a039..cba585e 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -73,6 +73,7 @@
     static final long FIXED_ID_OTHER_BOOKMARKS = 4;
 
     static final String DEFAULT_BOOKMARKS_SORT_ORDER = "position ASC, _id ASC";
+
     
     static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
 
@@ -112,6 +113,8 @@
         map.put(Bookmarks.ACCOUNT_TYPE, Bookmarks.ACCOUNT_TYPE);
         map.put(Bookmarks.SOURCE_ID, Bookmarks.SOURCE_ID);
         map.put(Bookmarks.VERSION, Bookmarks.VERSION);
+        map.put(Bookmarks.DATE_CREATED, Bookmarks.DATE_CREATED);
+        map.put(Bookmarks.DATE_MODIFIED, Bookmarks.DATE_MODIFIED);
         map.put(Bookmarks.DIRTY, Bookmarks.DIRTY);
         map.put(Bookmarks.SYNC1, Bookmarks.SYNC1);
         map.put(Bookmarks.SYNC2, Bookmarks.SYNC2);
@@ -148,13 +151,13 @@
     static final String qualifyColumn(String table, String column) {
         return table + "." + column + " AS " + column;
     }
-    
+
     DatabaseHelper mOpenHelper;
     SyncStateContentProviderHelper mSyncHelper = new SyncStateContentProviderHelper();
 
     final class DatabaseHelper extends SQLiteOpenHelper {
         static final String DATABASE_NAME = "browser2.db";
-        static final int DATABASE_VERSION = 15;
+        static final int DATABASE_VERSION = 16;
         public DatabaseHelper(Context context) {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
         }
@@ -177,6 +180,8 @@
                     Bookmarks.ACCOUNT_TYPE + " TEXT," +
                     Bookmarks.SOURCE_ID + " TEXT," +
                     Bookmarks.VERSION + " INTEGER NOT NULL DEFAULT 1," +
+                    Bookmarks.DATE_CREATED + " INTEGER," +
+                    Bookmarks.DATE_MODIFIED + " INTEGER," +
                     Bookmarks.DIRTY + " INTEGER NOT NULL DEFAULT 0," +
                     Bookmarks.SYNC1 + " TEXT," +
                     Bookmarks.SYNC2 + " TEXT," +
@@ -224,6 +229,7 @@
         public void onOpen(SQLiteDatabase db) {
             mSyncHelper.onDatabaseOpened(db);
         }
+
         
         private void createDefaultBookmarks(SQLiteDatabase db) {
             ContentValues values = new ContentValues();
@@ -451,7 +457,7 @@
                 if (TextUtils.isEmpty(sortOrder)) {
                     sortOrder = DEFAULT_BOOKMARKS_SORT_ORDER;
                 }
-                
+
                 qb.setProjectionMap(BOOKMARKS_PROJECTION_MAP);
                 qb.setTables(TABLE_BOOKMARKS);
                 break;
@@ -535,6 +541,7 @@
                     // If the caller isn't a sync adapter just go through and update all the
                     // bookmarks to have the deleted flag set.
                     ContentValues values = new ContentValues();
+                    values.put(Bookmarks.DATE_MODIFIED, System.currentTimeMillis());
                     values.put(Bookmarks.IS_DELETED, 1);
                     return updateInTransaction(uri, values, selection, selectionArgs,
                             callerIsSyncAdapter);
@@ -592,6 +599,9 @@
             case BOOKMARKS: {
                 // Mark rows dirty if they're not coming from a sync adapater
                 if (!callerIsSyncAdapter) {
+                    long now = System.currentTimeMillis();
+                    values.put(Bookmarks.DATE_CREATED, now);
+                    values.put(Bookmarks.DATE_MODIFIED, now);
                     values.put(Bookmarks.DIRTY, 1);
                 }
 
@@ -721,6 +731,7 @@
             // Mark the bookmark dirty if the caller isn't a sync adapter
             if (!callerIsSyncAdapter) {
                 values = new ContentValues(values);
+                values.put(Bookmarks.DATE_MODIFIED, System.currentTimeMillis());
                 values.put(Bookmarks.DIRTY, 1);
             }
             while (cursor.moveToNext()) {
