diff --git a/res/values/strings.xml b/res/values/strings.xml
index f473880..0c4aa26 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -60,12 +60,12 @@
     <!--  Labels for the tabs in All Apps -->
     <!--  Title of the tab for all applications (includes games and non-games) [CHAR_LIMIT=12] -->
     <string name="all_apps_tab_all">All</string>
-    <!--  Title of the tab for all applications *except* games [CHAR_LIMIT=12] -->
+    <!--  Title of the tab for all applications *except* games [CHAR_LIMIT=24] -->
     <string name="all_apps_tab_apps">Apps</string>
-    <!--  Title of the tab for applications labeled as games [CHAR_LIMIT=12] -->
+    <!--  Title of the tab for applications labeled as games [CHAR_LIMIT=24] -->
     <string name="all_apps_tab_games">Games</string>
-    <!--  Tile of the tab for applications that were downloaded from market [CHAR_LIMIT=12] -->
-    <string name="all_apps_tab_downloaded">Downloaded</string>
+    <!--  Tile of the tab for applications that were downloaded from market [CHAR_LIMIT=24] -->
+    <string name="all_apps_tab_downloaded">My Apps</string>
 
     <!-- All Apps pane -->
     <!-- Message to show when there are no games [CHAR_LIMIT=25] -->
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index fe7312d..5906599 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -314,6 +314,7 @@
                     filteredApps.add(info);
                 }
             }
+            Collections.sort(filteredApps, LauncherModel.APP_INSTALL_TIME_COMPARATOR);
         }
         return filteredApps;
     }
diff --git a/src/com/android/launcher2/ApplicationInfo.java b/src/com/android/launcher2/ApplicationInfo.java
index 0851cd3..3adea37 100644
--- a/src/com/android/launcher2/ApplicationInfo.java
+++ b/src/com/android/launcher2/ApplicationInfo.java
@@ -52,6 +52,11 @@
      */
     Bitmap iconBitmap;
 
+    /**
+     * The time at which the app was first installed.
+     */
+    long firstInstallTime;
+
     ComponentName componentName;
 
     static final int APP_FLAG = 1;
@@ -82,6 +87,7 @@
             if ((appFlags & android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
                 flags |= DOWNLOADED_FLAG;
             }
+            firstInstallTime = pm.getPackageInfo(packageName, 0).firstInstallTime;
             // TODO: Figure out how to determine what is a game
 
             // If it's not a game, it's an app
@@ -101,6 +107,7 @@
         title = info.title.toString();
         intent = new Intent(info.intent);
         flags = info.flags;
+        firstInstallTime = info.firstInstallTime;
     }
 
     /**
@@ -128,7 +135,8 @@
         Log.d(tag, label + " size=" + list.size());
         for (ApplicationInfo info: list) {
             Log.d(tag, "   title=\"" + info.title + "\" titleBitmap=" + info.titleBitmap
-                    + " iconBitmap=" + info.iconBitmap);
+                    + " iconBitmap=" + info.iconBitmap + " firstInstallTime="
+                    + info.firstInstallTime);
         }
     }
 
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 7e72610..0052737 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -1747,6 +1747,14 @@
             return sCollator.compare(a.title.toString(), b.title.toString());
         }
     };
+    public static final Comparator<ApplicationInfo> APP_INSTALL_TIME_COMPARATOR
+            = new Comparator<ApplicationInfo>() {
+        public final int compare(ApplicationInfo a, ApplicationInfo b) {
+            if (a.firstInstallTime < b.firstInstallTime) return 1;
+            if (a.firstInstallTime > b.firstInstallTime) return -1;
+            return 0;
+        }
+    };
 
     public void dumpState() {
         Log.d(TAG, "mCallbacks=" + mCallbacks);
