diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index c0578fa..8a7d9a3 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -613,6 +613,66 @@
         <item>Always use HDCP checking</item>
     </string-array>
 
+    <!-- Titles for window animation scale preference. [CHAR LIMIT=35] -->
+    <string-array name="window_animation_scale_entries">
+        <item>Animation off</item>
+        <item>Animation scale .5x</item>
+        <item>Animation scale 1x</item>
+        <item>Animation scale 1.5x</item>
+        <item>Animation scale 2x</item>
+        <item>Animation scale 5x</item>
+        <item>Animation scale 10x</item>
+    </string-array>
+
+    <!-- Values for window animation scale preference. -->
+    <string-array name="window_animation_scale_values" translatable="false" >
+        <item>0</item>
+        <item>.5</item>
+        <item>1</item>
+        <item>1.5</item>
+        <item>2</item>
+        <item>5</item>
+        <item>10</item>
+    </string-array>
+
+    <!-- Titles for transition animation scale preference. [CHAR LIMIT=35] -->
+    <string-array name="transition_animation_scale_entries">
+        <item>Animation off</item>
+        <item>Animation scale .5x</item>
+        <item>Animation scale 1x</item>
+        <item>Animation scale 1.5x</item>
+        <item>Animation scale 2x</item>
+        <item>Animation scale 5x</item>
+        <item>Animation scale 10x</item>
+    </string-array>
+
+    <!-- Values for transition animation scale preference. -->
+    <string-array name="transition_animation_scale_values" translatable="false" >
+        <item>0</item>
+        <item>.5</item>
+        <item>1</item>
+        <item>1.5</item>
+        <item>2</item>
+        <item>5</item>
+        <item>10</item>
+    </string-array>
+
+    <!-- Titles for app process limit preference. [CHAR LIMIT=35] -->
+    <string-array name="app_process_limit_entries">
+        <item>No app process limit</item>
+        <item>Max 1 app process</item>
+        <item>Max 2 app processes</item>
+        <item>Max 3 app processes</item>
+    </string-array>
+
+    <!-- Values for app process limit preference. -->
+    <string-array name="app_process_limit_values" translatable="false" >
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+    </string-array>
+
     <!-- Match this with the constants in VpnProfile. --> <skip />
     <!-- Short names for each VPN type, not really translatable. [CHAR LIMIT=20] -->
     <string-array name="vpn_types" translatable="false">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e6a5136..bc20859 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3410,6 +3410,48 @@
     <!-- HDCP checking dialog title, used for debug purposes only. [CHAR LIMIT=25] -->
     <string name="hdcp_checking_dialog_title">Set HDCP checking behavior</string>
 
+    <!-- Preference category for user interface debugging development settings. [CHAR LIMIT=25] -->
+    <string name="debug_ui_category">User interface</string>
+
+    <!-- UI debug setting: always enable strict mode? [CHAR LIMIT=25] -->
+    <string name="strict_mode">Strict mode enabled</string>
+    <!-- UI debug setting: show strict mode summary [CHAR LIMIT=50] -->
+    <string name="strict_mode_summary">Flash screen when apps do long operations
+            on main thread</string>
+
+    <!-- UI debug setting: show pointer location? [CHAR LIMIT=25] -->
+    <string name="pointer_location">Pointer location</string>
+    <!-- UI debug setting: show pointer location summary [CHAR LIMIT=50] -->
+    <string name="pointer_location_summary">Screen overlay showing current touch data</string>
+
+    <!-- UI debug setting: show where screen updates happen? [CHAR LIMIT=25] -->
+    <string name="show_screen_updates">Show screen updates</string>
+    <!-- UI debug setting: show screen updates summary [CHAR LIMIT=50] -->
+    <string name="show_screen_updates_summary">Flash areas of screen when they update</string>
+
+    <!-- UI debug setting: show how CPU is being used? [CHAR LIMIT=25] -->
+    <string name="show_cpu_usage">Show CPU usage</string>
+    <!-- UI debug setting: show cpu usage summary [CHAR LIMIT=50] -->
+    <string name="show_cpu_usage_summary">Screen overlay showing current CPU usage</string>
+
+    <!-- UI debug setting: scaling factor for window animations [CHAR LIMIT=25] -->
+    <string name="window_animation_scale_title">Window animation scale</string>
+
+    <!-- UI debug setting: scaling factor for transition animations [CHAR LIMIT=25] -->
+    <string name="transition_animation_scale_title">Transition animation scale</string>
+
+    <!-- Preference category for application debugging development settings. [CHAR LIMIT=25] -->
+    <string name="debug_applications_category">Applications</string>
+
+    <!-- UI debug setting: immediately destroy activities? [CHAR LIMIT=25] -->
+    <string name="immediately_destroy_activities">Immediately destroy activities</string>
+    <!-- UI debug setting: immediately destroy activities summary [CHAR LIMIT=50] -->
+    <string name="immediately_destroy_activities_summary">Destroy every activity as soon as
+            the user leaves it</string>
+
+    <!-- UI debug setting: limit number of running application processes [CHAR LIMIT=25] -->
+    <string name="app_process_limit_title">Application process limit</string>
+
     <!-- Activity title for network data usage summary. [CHAR LIMIT=25] -->
     <string name="data_usage_summary_title">Data usage</string>
     <!-- Title for option to pick visible time range from a list available usage periods. [CHAR LIMIT=25] -->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 292206a..a73e7d1 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -38,4 +38,61 @@
         android:dialogTitle="@string/hdcp_checking_dialog_title"
         android:entries="@array/hdcp_checking_titles"
         android:entryValues="@array/hdcp_checking_values" />
+
+    <PreferenceCategory android:key="debug_ui_category"
+            android:title="@string/debug_ui_category">
+
+        <CheckBoxPreference
+            android:key="strict_mode"
+            android:title="@string/strict_mode"
+            android:summary="@string/strict_mode_summary"/>
+
+        <CheckBoxPreference
+            android:key="pointer_location"
+            android:title="@string/pointer_location"
+            android:summary="@string/pointer_location_summary"/>
+
+        <CheckBoxPreference
+            android:key="show_screen_updates"
+            android:title="@string/show_screen_updates"
+            android:summary="@string/show_screen_updates_summary"/>
+
+        <CheckBoxPreference
+            android:key="show_cpu_usage"
+            android:title="@string/show_cpu_usage"
+            android:summary="@string/show_cpu_usage_summary"/>
+
+        <ListPreference
+            android:key="window_animation_scale"
+            android:title="@string/window_animation_scale_title"
+            android:persistent="false"
+            android:entries="@array/window_animation_scale_entries"
+            android:entryValues="@array/window_animation_scale_values" />
+
+        <ListPreference
+            android:key="transition_animation_scale"
+            android:title="@string/transition_animation_scale_title"
+            android:persistent="false"
+            android:entries="@array/transition_animation_scale_entries"
+            android:entryValues="@array/transition_animation_scale_values" />
+
+    </PreferenceCategory>
+
+    <PreferenceCategory android:key="debug_applications_category"
+            android:title="@string/debug_applications_category">
+
+        <CheckBoxPreference
+            android:key="immediately_destroy_activities"
+            android:title="@string/immediately_destroy_activities"
+            android:summary="@string/immediately_destroy_activities_summary"/>
+
+        <ListPreference
+            android:key="app_process_limit"
+            android:title="@string/app_process_limit_title"
+            android:persistent="false"
+            android:entries="@array/app_process_limit_entries"
+            android:entryValues="@array/app_process_limit_values" />
+
+    </PreferenceCategory>
+
 </PreferenceScreen>
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 2508454..9692dd5 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -16,13 +16,20 @@
 
 package com.android.settings;
 
+import android.app.ActivityManagerNative;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.ContentResolver;
 import android.content.DialogInterface;
+import android.content.Intent;
 import android.os.BatteryManager;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.StrictMode;
 import android.os.SystemProperties;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
@@ -31,6 +38,8 @@
 import android.preference.PreferenceScreen;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.provider.Settings;
+import android.text.TextUtils;
+import android.view.IWindowManager;
 
 /*
  * Displays preferences for application developers.
@@ -45,10 +54,33 @@
     private static final String HDCP_CHECKING_KEY = "hdcp_checking";
     private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
 
+    private static final String STRICT_MODE_KEY = "strict_mode";
+    private static final String POINTER_LOCATION_KEY = "pointer_location";
+    private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
+    private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
+    private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
+    private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
+
+    private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
+            = "immediately_destroy_activities";
+    private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
+
+    private IWindowManager mWindowManager;
+
     private CheckBoxPreference mEnableAdb;
     private CheckBoxPreference mKeepScreenOn;
     private CheckBoxPreference mAllowMockLocation;
 
+    private CheckBoxPreference mStrictMode;
+    private CheckBoxPreference mPointerLocation;
+    private CheckBoxPreference mShowScreenUpdates;
+    private CheckBoxPreference mShowCpuUsage;
+    private ListPreference mWindowAnimationScale;
+    private ListPreference mTransitionAnimationScale;
+
+    private CheckBoxPreference mImmediatelyDestroyActivities;
+    private ListPreference mAppProcessLimit;
+
     // To track whether Yes was clicked in the adb warning dialog
     private boolean mOkClicked;
 
@@ -58,12 +90,25 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
+
         addPreferencesFromResource(R.xml.development_prefs);
 
         mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB);
         mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON);
         mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION);
 
+        mStrictMode = (CheckBoxPreference) findPreference(STRICT_MODE_KEY);
+        mPointerLocation = (CheckBoxPreference) findPreference(POINTER_LOCATION_KEY);
+        mShowScreenUpdates = (CheckBoxPreference) findPreference(SHOW_SCREEN_UPDATES_KEY);
+        mShowCpuUsage = (CheckBoxPreference) findPreference(SHOW_CPU_USAGE_KEY);
+        mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
+        mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
+
+        mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
+                IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
+        mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
+
         removeHdcpOptionsForProduction();
     }
 
@@ -89,6 +134,13 @@
         mAllowMockLocation.setChecked(Settings.Secure.getInt(cr,
                 Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
         updateHdcpValues();
+        updateStrictModeVisualOptions();
+        updatePointerLocationOptions();
+        updateFlingerOptions();
+        updateCpuUsageOptions();
+        updateAnimationScaleOptions();
+        updateImmediatelyDestroyActivitiesOptions();
+        updateAppProcessLimitOptions();
     }
 
     private void updateHdcpValues() {
@@ -110,6 +162,165 @@
         }
     }
 
+    // Returns the current state of the system property that controls
+    // strictmode flashes.  One of:
+    //    0: not explicitly set one way or another
+    //    1: on
+    //    2: off
+    private int currentStrictModeActiveIndex() {
+        if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
+            return 0;
+        }
+        boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
+        return enabled ? 1 : 2;
+    }
+
+    private void writeStrictModeVisualOptions() {
+        try {
+            mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
+                    ? "1" : "");
+        } catch (RemoteException e) {
+        }
+    }
+
+    private void updateStrictModeVisualOptions() {
+        mStrictMode.setChecked(currentStrictModeActiveIndex() == 1);
+    }
+
+    private void writePointerLocationOptions() {
+        Settings.System.putInt(getActivity().getContentResolver(),
+                Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
+    }
+
+    private void updatePointerLocationOptions() {
+        mPointerLocation.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
+                Settings.System.POINTER_LOCATION, 0) != 0);
+    }
+
+    private void updateFlingerOptions() {
+        // magic communication with surface flinger.
+        try {
+            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
+            if (flinger != null) {
+                Parcel data = Parcel.obtain();
+                Parcel reply = Parcel.obtain();
+                data.writeInterfaceToken("android.ui.ISurfaceComposer");
+                flinger.transact(1010, data, reply, 0);
+                @SuppressWarnings("unused")
+                int showCpu = reply.readInt();
+                @SuppressWarnings("unused")
+                int enableGL = reply.readInt();
+                int showUpdates = reply.readInt();
+                mShowScreenUpdates.setChecked(showUpdates != 0);
+                @SuppressWarnings("unused")
+                int showBackground = reply.readInt();
+                reply.recycle();
+                data.recycle();
+            }
+        } catch (RemoteException ex) {
+        }
+    }
+
+    private void writeFlingerOptions() {
+        try {
+            IBinder flinger = ServiceManager.getService("SurfaceFlinger");
+            if (flinger != null) {
+                Parcel data = Parcel.obtain();
+                data.writeInterfaceToken("android.ui.ISurfaceComposer");
+                data.writeInt(mShowScreenUpdates.isChecked() ? 1 : 0);
+                flinger.transact(1002, data, null, 0);
+                data.recycle();
+
+                updateFlingerOptions();
+            }
+        } catch (RemoteException ex) {
+        }
+    }
+
+    private void updateCpuUsageOptions() {
+        mShowCpuUsage.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
+                Settings.System.SHOW_PROCESSES, 0) != 0);
+    }
+
+    private void writeCpuUsageOptions() {
+        boolean value = mShowCpuUsage.isChecked();
+        Settings.System.putInt(getActivity().getContentResolver(),
+                Settings.System.SHOW_PROCESSES, value ? 1 : 0);
+        Intent service = (new Intent())
+                .setClassName("android", "com.android.server.LoadAverageService");
+        if (value) {
+            getActivity().startService(service);
+        } else {
+            getActivity().stopService(service);
+        }
+    }
+
+    private void writeImmediatelyDestroyActivitiesOptions() {
+        try {
+            ActivityManagerNative.getDefault().setAlwaysFinish(
+                    mImmediatelyDestroyActivities.isChecked());
+        } catch (RemoteException ex) {
+        }
+    }
+
+    private void updateImmediatelyDestroyActivitiesOptions() {
+        mImmediatelyDestroyActivities.setChecked(Settings.System.getInt(
+            getActivity().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
+    }
+
+    private void updateAnimationScaleValue(int which, ListPreference pref) {
+        try {
+            float scale = mWindowManager.getAnimationScale(which);
+            CharSequence[] values = pref.getEntryValues();
+            for (int i=0; i<values.length; i++) {
+                float val = Float.parseFloat(values[i].toString());
+                if (scale <= val) {
+                    pref.setValueIndex(i);
+                    return;
+                }
+            }
+            pref.setValueIndex(values.length-1);
+        } catch (RemoteException e) {
+        }
+    }
+
+    private void updateAnimationScaleOptions() {
+        updateAnimationScaleValue(0, mWindowAnimationScale);
+        updateAnimationScaleValue(1, mTransitionAnimationScale);
+    }
+
+    private void writeAnimationScaleOption(int which, ListPreference pref) {
+        try {
+            float scale = Float.parseFloat(pref.getValue().toString());
+            mWindowManager.setAnimationScale(which, scale);
+        } catch (RemoteException e) {
+        }
+    }
+
+    private void updateAppProcessLimitOptions() {
+        try {
+            int limit = ActivityManagerNative.getDefault().getProcessLimit();
+            CharSequence[] values = mAppProcessLimit.getEntryValues();
+            for (int i=0; i<values.length; i++) {
+                int val = Integer.parseInt(values[i].toString());
+                if (val >= limit) {
+                    mAppProcessLimit.setValueIndex(i);
+                    return;
+                }
+            }
+            mAppProcessLimit.setValueIndex(0);
+        } catch (RemoteException e) {
+        }
+    }
+
+    private void writeAppProcessLimitOptions() {
+        try {
+            int limit = Integer.parseInt(mAppProcessLimit.getValue().toString());
+            ActivityManagerNative.getDefault().setProcessLimit(limit);
+        } catch (RemoteException e) {
+        }
+    }
+
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
 
@@ -142,6 +353,22 @@
             Settings.Secure.putInt(getActivity().getContentResolver(),
                     Settings.Secure.ALLOW_MOCK_LOCATION,
                     mAllowMockLocation.isChecked() ? 1 : 0);
+        } else if (preference == mStrictMode) {
+            writeStrictModeVisualOptions();
+        } else if (preference == mPointerLocation) {
+            writePointerLocationOptions();
+        } else if (preference == mShowScreenUpdates) {
+            writeFlingerOptions();
+        } else if (preference == mShowCpuUsage) {
+            writeCpuUsageOptions();
+        } else if (preference == mWindowAnimationScale) {
+            writeAnimationScaleOption(0, mWindowAnimationScale);
+        } else if (preference == mTransitionAnimationScale) {
+            writeAnimationScaleOption(1, mTransitionAnimationScale);
+        } else if (preference == mImmediatelyDestroyActivities) {
+            writeImmediatelyDestroyActivitiesOptions();
+        } else if (preference == mAppProcessLimit) {
+            writeAppProcessLimitOptions();
         }
 
         return false;
