diff --git a/res/layout/settings_actionbar.xml b/res/layout/settings_actionbar.xml
deleted file mode 100644
index 711a0a1..0000000
--- a/res/layout/settings_actionbar.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="horizontal"
-        android:padding="4dip"
-        android:gravity="center_vertical"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent">
-
-    <!-- ImageView
-            android:src="@mipmap/ic_launcher_settings"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:layout_marginLeft="4dip"
-            android:layout_marginRight="4dip"
-    /-->
-
-    <view class="com.android.settings.Settings$BreadCrumbs"
-            android:id="@+id/bread_crumbs"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:orientation="horizontal">
-
-        <TextView android:id="@+id/level_up_title"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:gravity="center_vertical"
-                style="?android:attr/textAppearanceMediumInverse"
-                />
-
-        <ImageView
-                android:id="@+id/level_divider"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:layout_marginTop="4dip"
-                android:layout_marginBottom="4dip"
-                android:layout_marginLeft="12dip"
-                android:layout_marginRight="12dip"
-                android:src="@drawable/nav_divider"/>
-
-        <TextView android:id="@+id/level_current_title"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:gravity="center_vertical"
-                style="?android:attr/textAppearanceMediumInverse"
-                />
-    </view>
-</LinearLayout>
diff --git a/res/layout/settings_top_level.xml b/res/layout/settings_top_level.xml
deleted file mode 100644
index b029915..0000000
--- a/res/layout/settings_top_level.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Top-level Settings layout with fragments. -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <FrameLayout android:id="@+id/prefs"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            />
-
-    <!-- button_bar -->
-    <RelativeLayout android:id="@+id/button_bar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:layout_weight="0"
-        android:background="@android:drawable/bottom_bar"
-        android:visibility="gone">
-
-        <Button android:id="@+id/back_button"
-            android:layout_width="150dip"
-            android:layout_height="wrap_content"
-            android:layout_margin="5dip"
-            android:layout_alignParentLeft="true"
-            android:drawablePadding="3dip"
-        />
-        <LinearLayout
-            android:orientation="horizontal"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true">
-
-            <Button android:id="@+id/skip_button"
-                android:layout_width="150dip"
-                android:layout_height="wrap_content"
-                android:layout_margin="5dip"
-                android:text="@string/skip_button_label"
-                android:visibility="gone"
-            />
-
-            <Button android:id="@+id/next_button"
-                android:layout_width="150dip"
-                android:layout_height="wrap_content"
-                android:layout_margin="5dip"
-                android:drawableRight="@drawable/ic_btn_next"
-                android:drawablePadding="3dip"
-                android:text="@string/next_button_label"
-            />
-        </LinearLayout>
-    </RelativeLayout>
-</LinearLayout>
diff --git a/src/com/android/settings/deviceinfo/MemoryMeasurement.java b/src/com/android/settings/deviceinfo/MemoryMeasurement.java
index ead9dd6..19bd784 100644
--- a/src/com/android/settings/deviceinfo/MemoryMeasurement.java
+++ b/src/com/android/settings/deviceinfo/MemoryMeasurement.java
@@ -180,8 +180,6 @@
 
         public static final int MSG_INVALIDATE = 6;
 
-        private List<String> mPendingApps = new ArrayList<String>();
-
         private Object mLock = new Object();
 
         private IMediaContainerService mDefaultContainer;
@@ -190,7 +188,7 @@
 
         private volatile boolean mMeasured = false;
 
-        private long mAppsSize = 0;
+        private StatsObserver mStatsObserver;
 
         private final WeakReference<Context> mContext;
 
@@ -287,39 +285,49 @@
             sendEmptyMessage(MSG_DISCONNECT);
         }
 
-        public void queuePackageMeasurementLocked(String packageName) {
-            mPendingApps.add(packageName);
-        }
-
         /**
          * Request measurement of each package.
          *
          * @param pm PackageManager instance to query
          */
         public void requestQueuedMeasurementsLocked(PackageManager pm) {
-            final int N = mPendingApps.size();
+            final List<String> appsList = mStatsObserver.getAppsList();
+            final int N = appsList.size();
             for (int i = 0; i < N; i++) {
-                pm.getPackageSizeInfo(mPendingApps.get(i), mStatsObserver);
+                pm.getPackageSizeInfo(appsList.get(i), mStatsObserver);
             }
         }
 
-        final IPackageStatsObserver.Stub mStatsObserver = new IPackageStatsObserver.Stub() {
+        private class StatsObserver extends IPackageStatsObserver.Stub {
+            private long mAppsSizeForThisStatsObserver = 0;
+            private final List<String> mAppsList = new ArrayList<String>();
             public void onGetStatsCompleted(PackageStats stats, boolean succeeded) {
+                if (!mStatsObserver.equals(this)) {
+                    // this callback's class object is no longer in use. ignore this callback.
+                    return;
+                }
                 if (succeeded) {
-                    mAppsSize += stats.codeSize + stats.dataSize;
+                    mAppsSizeForThisStatsObserver += stats.codeSize + stats.dataSize;
                 }
 
-                synchronized (mPendingApps) {
-                    mPendingApps.remove(stats.packageName);
+                synchronized (mAppsList) {
+                    mAppsList.remove(stats.packageName);
 
-                    if (mPendingApps.size() == 0) {
-                        mInternalAppsSize = mAppsSize;
+                    if (mAppsList.size() == 0) {
+                        mInternalAppsSize = mAppsSizeForThisStatsObserver;
 
                         onInternalMeasurementComplete();
                     }
                 }
             }
-        };
+
+            public void queuePackageMeasurementLocked(String packageName) {
+                mAppsList.add(packageName);
+            }
+            public List<String> getAppsList() {
+                return mAppsList;
+            }
+        }
 
         private void onInternalMeasurementComplete() {
             sendEmptyMessage(MSG_COMPLETED);
@@ -368,10 +376,12 @@
                     .getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES
                             | PackageManager.GET_DISABLED_COMPONENTS);
             if (apps != null) {
-                synchronized (mPendingApps) {
+                // initiate measurement of all package sizes. need new StatsObserver object.
+                mStatsObserver = new StatsObserver();
+                synchronized (mStatsObserver.mAppsList) {
                     for (int i = 0; i < apps.size(); i++) {
                         final ApplicationInfo info = apps.get(i);
-                        queuePackageMeasurementLocked(info.packageName);
+                        mStatsObserver.queuePackageMeasurementLocked(info.packageName);
                     }
 
                     requestQueuedMeasurementsLocked(pm);
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 117bec5..a4808b0 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -21,29 +21,15 @@
 import com.android.settings.Utils;
 import com.android.settings.VoiceInputOutputSettings;
 
-import android.app.AlertDialog;
 import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.os.Bundle;
-import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
-import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
 public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
         implements Preference.OnPreferenceChangeListener{
 
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
index 6981927..03c5ea1 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
@@ -204,6 +204,7 @@
                     if (DEBUG) {
                         Log.d(TAG, "Current IME was uninstalled or disabled.");
                     }
+                    currentInputMethodId = null;
                 }
             }
             // If it's a disabled system ime, add it to the disabled list so that it
