diff --git a/api/8.xml b/api/8.xml
index 8cffff1b..ff4afc7 100644
--- a/api/8.xml
+++ b/api/8.xml
@@ -27144,7 +27144,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="fd" type="android.os.ParcelFileDescriptor">
+<parameter name="newState" type="android.os.ParcelFileDescriptor">
 </parameter>
 </method>
 </interface>
@@ -37923,6 +37923,28 @@
  visibility="public"
 >
 </field>
+<field name="ACTION_EXTERNAL_APPLICATIONS_AVAILABLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="ACTION_FACTORY_TEST"
  type="java.lang.String"
  transient="false"
@@ -38890,6 +38912,28 @@
  visibility="public"
 >
 </field>
+<field name="EXTRA_CHANGED_PACKAGE_LIST"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.extra.changed_package_list&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EXTRA_CHANGED_UID_LIST"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;android.intent.extra.changed_uid_list&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="EXTRA_DATA_REMOVED"
  type="java.lang.String"
  transient="false"
@@ -42658,6 +42702,17 @@
  visibility="public"
 >
 </field>
+<field name="FLAG_EXTERNAL_STORAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="524288"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="FLAG_FACTORY_TEST"
  type="int"
  transient="false"
diff --git a/api/current.xml b/api/current.xml
index db28cba..ff4afc7 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -42702,6 +42702,17 @@
  visibility="public"
 >
 </field>
+<field name="FLAG_EXTERNAL_STORAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="524288"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="FLAG_FACTORY_TEST"
  type="int"
  transient="false"
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 0a04e5b..29b9d4c 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -252,20 +252,22 @@
     public static final int FLAG_RESTORE_ANY_VERSION = 1<<17;
 
     /**
+     * Value for {@link #flags}: Set to true if the application is
+     * currently installed on external/removable/unprotected storage.  Such
+     * applications may not be available if their storage is not currently
+     * mounted.  When the storage it is on is not available, it will look like
+     * the application has been uninstalled (its .apk is no longer available)
+     * but its persistent data is not removed.
+     */
+    public static final int FLAG_EXTERNAL_STORAGE = 1<<19;
+
+    /**
      * Value for {@link #flags}: Set to true if the application has been
      * installed using the forward lock option.
      *
      * {@hide}
      */
-    public static final int FLAG_FORWARD_LOCK = 1<<19;
-
-    /**
-     * Value for {@link #flags}: Set to true if the application is
-     * currently installed on the sdcard.
-     *
-     * {@hide}
-     */
-    public static final int FLAG_EXTERNAL_STORAGE = 1<<20;
+    public static final int FLAG_FORWARD_LOCK = 1<<20;
 
     /**
      * Value for {@link #flags}: Set to true if the application is
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 6a9218a..83ef8ba 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -147,6 +147,7 @@
     private int mSaveCount;
     @SuppressWarnings("unused")
     private Canvas mCanvas;
+    private String mName;
 
     // The display metrics used to provide the pseudo canvas size for applications
     // running in compatibility mode. This is set to null for non compatibility mode.
@@ -204,6 +205,7 @@
         }
         mCanvas = new CompatibleCanvas();
         init(s,pid,name,display,w,h,format,flags);
+        mName = name;
     }
 
     /**
@@ -386,7 +388,7 @@
 
     @Override
     public String toString() {
-        return "Surface(native-token=" + mSurface + ")";
+        return "Surface(name=" + mName + ", identity=" + getIdentity() + ")";
     }
 
     private Surface(Parcel source) throws OutOfResourcesException {
@@ -437,4 +439,6 @@
             throws OutOfResourcesException;
 
     private native void init(Parcel source);
+
+    private native int getIdentity();
 }
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index ed26cbe..788374b 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -229,6 +229,15 @@
     setSurface(env, clazz, rhs);
 }
 
+static jint Surface_getIdentity(JNIEnv* env, jobject clazz)
+{
+    const sp<SurfaceControl>& control(getSurfaceControl(env, clazz));
+    if (control != 0) return (jint) control->getIdentity();
+    const sp<Surface>& surface(getSurface(env, clazz));
+    if (surface != 0) return (jint) surface->getIdentity();
+    return -1;
+}
+
 static void Surface_destroy(JNIEnv* env, jobject clazz, uintptr_t *ostack)
 {
     const sp<SurfaceControl>& surface(getSurfaceControl(env, clazz));
@@ -261,14 +270,14 @@
         we can map to SkBitmap::kARGB_8888_Config, and optionally call
         bitmap.setIsOpaque(true) on the resulting SkBitmap (as an accelerator)
     */
-	switch (format) {
-	case PIXEL_FORMAT_RGBX_8888:    return SkBitmap::kARGB_8888_Config;
+    switch (format) {
+    case PIXEL_FORMAT_RGBX_8888:    return SkBitmap::kARGB_8888_Config;
     case PIXEL_FORMAT_RGBA_8888:    return SkBitmap::kARGB_8888_Config;
     case PIXEL_FORMAT_RGBA_4444:    return SkBitmap::kARGB_4444_Config;
-	case PIXEL_FORMAT_RGB_565:		return SkBitmap::kRGB_565_Config;
-	case PIXEL_FORMAT_A_8:          return SkBitmap::kA8_Config;
-	default:                        return SkBitmap::kNo_Config;
-	}
+    case PIXEL_FORMAT_RGB_565:      return SkBitmap::kRGB_565_Config;
+    case PIXEL_FORMAT_A_8:          return SkBitmap::kA8_Config;
+    default:                        return SkBitmap::kNo_Config;
+    }
 }
 
 static jobject Surface_lockCanvas(JNIEnv* env, jobject clazz, jobject dirtyRect)
@@ -347,7 +356,7 @@
         env->SetIntField(dirtyRect, ro.b, bounds.bottom);
     }
     
-	return canvas;
+    return canvas;
 }
 
 static void Surface_unlockCanvasAndPost(
@@ -631,8 +640,8 @@
 static void nativeClassInit(JNIEnv* env, jclass clazz);
 
 static JNINativeMethod gSurfaceSessionMethods[] = {
-	{"init",     "()V",  (void*)SurfaceSession_init },
-	{"destroy",  "()V",  (void*)SurfaceSession_destroy },
+    {"init",     "()V",  (void*)SurfaceSession_init },
+    {"destroy",  "()V",  (void*)SurfaceSession_destroy },
     {"kill",     "()V",  (void*)SurfaceSession_kill },
 };
 
@@ -640,43 +649,44 @@
     {"nativeClassInit",     "()V",  (void*)nativeClassInit },
     {"init",                "(Landroid/view/SurfaceSession;ILjava/lang/String;IIIII)V",  (void*)Surface_init },
     {"init",                "(Landroid/os/Parcel;)V",  (void*)Surface_initParcel },
+    {"getIdentity",         "()I",  (void*)Surface_getIdentity },
     {"destroy",             "()V",  (void*)Surface_destroy },
     {"release",             "()V",  (void*)Surface_release },
-	{"copyFrom",            "(Landroid/view/Surface;)V",  (void*)Surface_copyFrom },
-	{"isValid",             "()Z",  (void*)Surface_isValid },
-	{"lockCanvasNative",    "(Landroid/graphics/Rect;)Landroid/graphics/Canvas;",  (void*)Surface_lockCanvas },
-	{"unlockCanvasAndPost", "(Landroid/graphics/Canvas;)V", (void*)Surface_unlockCanvasAndPost },
-	{"unlockCanvas",        "(Landroid/graphics/Canvas;)V", (void*)Surface_unlockCanvas },
-	{"openTransaction",     "()V",  (void*)Surface_openTransaction },
+    {"copyFrom",            "(Landroid/view/Surface;)V",  (void*)Surface_copyFrom },
+    {"isValid",             "()Z",  (void*)Surface_isValid },
+    {"lockCanvasNative",    "(Landroid/graphics/Rect;)Landroid/graphics/Canvas;",  (void*)Surface_lockCanvas },
+    {"unlockCanvasAndPost", "(Landroid/graphics/Canvas;)V", (void*)Surface_unlockCanvasAndPost },
+    {"unlockCanvas",        "(Landroid/graphics/Canvas;)V", (void*)Surface_unlockCanvas },
+    {"openTransaction",     "()V",  (void*)Surface_openTransaction },
     {"closeTransaction",    "()V",  (void*)Surface_closeTransaction },
     {"setOrientation",      "(III)V", (void*)Surface_setOrientation },
     {"freezeDisplay",       "(I)V", (void*)Surface_freezeDisplay },
     {"unfreezeDisplay",     "(I)V", (void*)Surface_unfreezeDisplay },
     {"setLayer",            "(I)V", (void*)Surface_setLayer },
-	{"setPosition",         "(II)V",(void*)Surface_setPosition },
-	{"setSize",             "(II)V",(void*)Surface_setSize },
-	{"hide",                "()V",  (void*)Surface_hide },
-	{"show",                "()V",  (void*)Surface_show },
-	{"freeze",              "()V",  (void*)Surface_freeze },
-	{"unfreeze",            "()V",  (void*)Surface_unfreeze },
-	{"setFlags",            "(II)V",(void*)Surface_setFlags },
-	{"setTransparentRegionHint","(Landroid/graphics/Region;)V", (void*)Surface_setTransparentRegion },
-	{"setAlpha",            "(F)V", (void*)Surface_setAlpha },
-	{"setMatrix",           "(FFFF)V",  (void*)Surface_setMatrix },
-	{"setFreezeTint",       "(I)V",  (void*)Surface_setFreezeTint },
-	{"readFromParcel",      "(Landroid/os/Parcel;)V", (void*)Surface_readFromParcel },
-	{"writeToParcel",       "(Landroid/os/Parcel;I)V", (void*)Surface_writeToParcel },
+    {"setPosition",         "(II)V",(void*)Surface_setPosition },
+    {"setSize",             "(II)V",(void*)Surface_setSize },
+    {"hide",                "()V",  (void*)Surface_hide },
+    {"show",                "()V",  (void*)Surface_show },
+    {"freeze",              "()V",  (void*)Surface_freeze },
+    {"unfreeze",            "()V",  (void*)Surface_unfreeze },
+    {"setFlags",            "(II)V",(void*)Surface_setFlags },
+    {"setTransparentRegionHint","(Landroid/graphics/Region;)V", (void*)Surface_setTransparentRegion },
+    {"setAlpha",            "(F)V", (void*)Surface_setAlpha },
+    {"setMatrix",           "(FFFF)V",  (void*)Surface_setMatrix },
+    {"setFreezeTint",       "(I)V",  (void*)Surface_setFreezeTint },
+    {"readFromParcel",      "(Landroid/os/Parcel;)V", (void*)Surface_readFromParcel },
+    {"writeToParcel",       "(Landroid/os/Parcel;I)V", (void*)Surface_writeToParcel },
 };
 
 void nativeClassInit(JNIEnv* env, jclass clazz)
 {
     so.surface = env->GetFieldID(clazz, "mSurface", "I");
     so.surfaceControl = env->GetFieldID(clazz, "mSurfaceControl", "I");
-	so.saveCount = env->GetFieldID(clazz, "mSaveCount", "I");
-	so.canvas    = env->GetFieldID(clazz, "mCanvas", "Landroid/graphics/Canvas;");
+    so.saveCount = env->GetFieldID(clazz, "mSaveCount", "I");
+    so.canvas    = env->GetFieldID(clazz, "mCanvas", "Landroid/graphics/Canvas;");
 
     jclass surfaceSession = env->FindClass("android/view/SurfaceSession");
- 	sso.client = env->GetFieldID(surfaceSession, "mClient", "I");
+    sso.client = env->GetFieldID(surfaceSession, "mClient", "I");
 
     jclass canvas = env->FindClass("android/graphics/Canvas");
     no.native_canvas = env->GetFieldID(canvas, "mNativeCanvas", "I");
diff --git a/services/java/com/android/server/ThrottleService.java b/services/java/com/android/server/ThrottleService.java
index a1aa555..6a5bbd2 100644
--- a/services/java/com/android/server/ThrottleService.java
+++ b/services/java/com/android/server/ThrottleService.java
@@ -732,23 +732,25 @@
             checkForSubscriberId();
             boolean startNewPeriod = true;
 
-            // if we rolled back in time, toss out
-            // if we rolled foward, advance to the next
-            if (end.before(mPeriodStart)) {
+            if (start.equals(mPeriodStart) && end.equals(mPeriodEnd)) {
+                // same endpoints - keep collecting
                 if (DBG) {
-                    Slog.d(TAG, "next period (" + start.getTimeInMillis() + "," +
-                        end.getTimeInMillis() + ") - old start was " +
-                        mPeriodStart.getTimeInMillis() + ", wiping");
+                    Slog.d(TAG, "same period (" + start.getTimeInMillis() + "," +
+                            end.getTimeInMillis() +") - ammending data");
                 }
-                synchronized (mParent) {
-                    mPeriodRxData[mCurrentPeriod] = 0;
-                    mPeriodTxData[mCurrentPeriod] = 0;
-                }
-            } else if(start.after(mPeriodEnd)) {
+                startNewPeriod = false;
+            } else {
                 if (DBG) {
-                    Slog.d(TAG, "next period (" + start.getTimeInMillis() + "," +
-                            end.getTimeInMillis() + ") - old end was " +
-                            mPeriodEnd.getTimeInMillis() + ", following");
+                    if(start.equals(mPeriodEnd) || start.after(mPeriodEnd)) {
+                        Slog.d(TAG, "next period (" + start.getTimeInMillis() + "," +
+                                end.getTimeInMillis() + ") - old end was " +
+                                mPeriodEnd.getTimeInMillis() + ", following");
+                    } else {
+                        Slog.d(TAG, "new period (" + start.getTimeInMillis() + "," +
+                                end.getTimeInMillis() + ") replacing old (" +
+                                mPeriodStart.getTimeInMillis() + "," +
+                                mPeriodEnd.getTimeInMillis() + ")");
+                    }
                 }
                 synchronized (mParent) {
                     ++mCurrentPeriod;
@@ -756,12 +758,6 @@
                     mPeriodRxData[mCurrentPeriod] = 0;
                     mPeriodTxData[mCurrentPeriod] = 0;
                 }
-            } else {
-                startNewPeriod = false;
-                if (DBG) {
-                    Slog.d(TAG, "next period (" + start.getTimeInMillis() + "," +
-                            end.getTimeInMillis() + ") - we fit - ammending to last period");
-                }
             }
             setPeriodStart(start);
             setPeriodEnd(end);
