diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index e967522..86cd3b0 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -84,7 +84,10 @@
      * of the surface must be pushed by an external entity. This is type
      * of surface can be used for efficient camera preview or movie
      * play back.
+     *
+     * @deprecated not support by the system anymore
      */
+    @Deprecated
     public static final int PUSH_BUFFERS        = 0x00000200;
     /**
      * Indicates that the surface must be considered opaque, even if its
diff --git a/core/java/android/view/SurfaceHolder.java b/core/java/android/view/SurfaceHolder.java
index 0d38f7b..1b242b3 100644
--- a/core/java/android/view/SurfaceHolder.java
+++ b/core/java/android/view/SurfaceHolder.java
@@ -18,10 +18,6 @@
 
 import android.graphics.Canvas;
 import android.graphics.Rect;
-import static android.view.WindowManager.LayoutParams.MEMORY_TYPE_NORMAL;
-import static android.view.WindowManager.LayoutParams.MEMORY_TYPE_HARDWARE;
-import static android.view.WindowManager.LayoutParams.MEMORY_TYPE_GPU;
-import static android.view.WindowManager.LayoutParams.MEMORY_TYPE_PUSH_BUFFERS;
 
 /**
  * Abstract interface to someone holding a display surface.  Allows you to
@@ -34,30 +30,19 @@
  * {@link #lockCanvas} and {@link Callback#surfaceCreated Callback.surfaceCreated}.
  */
 public interface SurfaceHolder {
-    /**
-     * Surface type.
-     * 
-     * @see #SURFACE_TYPE_NORMAL
-     * @see #SURFACE_TYPE_PUSH_BUFFERS
-     */
-    
-    /** Surface type: creates a regular surface, usually in main, non
-     * contiguous, cached/buffered RAM. */
-    public static final int SURFACE_TYPE_NORMAL = MEMORY_TYPE_NORMAL;
-    /** Surface type: creates a suited to be used with DMA engines and
-     * hardware accelerators. 
-     * @deprecated this is ignored, this value is set automatically when needed.
-     */
+
+    /** @deprecated this is ignored, this value is set automatically when needed. */
     @Deprecated
-    public static final int SURFACE_TYPE_HARDWARE = MEMORY_TYPE_HARDWARE;
-    /** Surface type: creates a surface suited to be used with the GPU 
-     * @deprecated this is ignored, this value is set automatically when needed.
-     */
+    public static final int SURFACE_TYPE_NORMAL = 0;
+    /** @deprecated this is ignored, this value is set automatically when needed. */
     @Deprecated
-    public static final int SURFACE_TYPE_GPU = MEMORY_TYPE_GPU;
-    /** Surface type: creates a "push" surface, that is a surface that 
-     * doesn't owns its buffers. With such a surface lockCanvas will fail. */
-    public static final int SURFACE_TYPE_PUSH_BUFFERS = MEMORY_TYPE_PUSH_BUFFERS;
+    public static final int SURFACE_TYPE_HARDWARE = 1;
+    /** @deprecated this is ignored, this value is set automatically when needed. */
+    @Deprecated
+    public static final int SURFACE_TYPE_GPU = 2;
+    /** @deprecated this is ignored, this value is set automatically when needed. */
+    @Deprecated
+    public static final int SURFACE_TYPE_PUSH_BUFFERS = 3;
 
     /**
      * Exception that is thrown from {@link #lockCanvas} when called on a Surface
@@ -160,10 +145,11 @@
     public boolean isCreating();
     
     /**
-     * Sets the surface's type. 
-     * 
-     * @param type The surface's memory type.
+     * Sets the surface's type.
+     *  
+     * @deprecated this is ignored, this value is set automatically when needed.
      */
+    @Deprecated
     public void setType(int type);
 
     /**
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index b9a9674..7021604 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -145,7 +145,6 @@
      * compatibility with applications assuming this format.
      */
     int mRequestedFormat = PixelFormat.RGB_565;
-    int mRequestedType = -1;
 
     boolean mHaveFrame = false;
     boolean mDestroyReportNeeded = false;
@@ -158,7 +157,6 @@
     int mWidth = -1;
     int mHeight = -1;
     int mFormat = -1;
-    int mType = -1;
     final Rect mSurfaceFrame = new Rect();
     int mLastSurfaceWidth = -1, mLastSurfaceHeight = -1;
     boolean mUpdateWindowNeeded;
@@ -428,9 +426,9 @@
         final boolean sizeChanged = mWidth != myWidth || mHeight != myHeight;
         final boolean visibleChanged = mVisible != mRequestedVisible
                 || mNewSurfaceNeeded;
-        final boolean typeChanged = mType != mRequestedType;
+
         if (force || creating || formatChanged || sizeChanged || visibleChanged
-            || typeChanged || mLeft != mLocation[0] || mTop != mLocation[1]
+            || mLeft != mLocation[0] || mTop != mLocation[1]
             || mUpdateWindowNeeded || mReportDrawNeeded || redrawNeeded) {
 
             if (localLOGV) Log.i(TAG, "Changes: creating=" + creating
@@ -446,7 +444,6 @@
                 mWidth = myWidth;
                 mHeight = myHeight;
                 mFormat = mRequestedFormat;
-                mType = mRequestedType;
 
                 // Scaling/Translate window's layout here because mLayout is not used elsewhere.
                 
@@ -471,8 +468,6 @@
                     mLayout.flags |= WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW;
                 }
 
-                mLayout.memoryType = mRequestedType;
-
                 if (mWindow == null) {
                     mWindow = new MyWindow(this);
                     mLayout.type = mWindowType;
@@ -716,24 +711,11 @@
             }
         }
 
-        public void setType(int type) {
-            switch (type) {
-            case SURFACE_TYPE_HARDWARE:
-            case SURFACE_TYPE_GPU:
-                // these are deprecated, treat as "NORMAL"
-                type = SURFACE_TYPE_NORMAL;
-                break;
-            }
-            switch (type) {
-            case SURFACE_TYPE_NORMAL:
-            case SURFACE_TYPE_PUSH_BUFFERS:
-                mRequestedType = type;
-                if (mWindow != null) {
-                    updateWindow(false, false);
-                }
-                break;
-            }
-        }
+        /**
+         * @deprecated setType is now ignored.
+         */
+        @Deprecated
+        public void setType(int type) { }
 
         public void setKeepScreenOn(boolean screenOn) {
             Message msg = mHandler.obtainMessage(KEEP_SCREEN_ON_MSG);
@@ -750,10 +732,6 @@
         }
 
         private final Canvas internalLockCanvas(Rect dirty) {
-            if (mType == SURFACE_TYPE_PUSH_BUFFERS) {
-                throw new BadSurfaceTypeException(
-                        "Surface type is SURFACE_TYPE_PUSH_BUFFERS");
-            }
             mSurfaceLock.lock();
 
             if (localLOGV) Log.i(TAG, "Locking canvas... stopped="
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 51016f5..e8792ff 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -388,31 +388,22 @@
         public static final int LAST_SYSTEM_WINDOW      = 2999;
         
         /**
-         * Specifies what type of memory buffers should be used by this window.
-         * Default is normal.
-         * 
-         * @see #MEMORY_TYPE_NORMAL
-         * @see #MEMORY_TYPE_PUSH_BUFFERS
+         * @deprecated this is ignored
          */
+        @Deprecated
         public int memoryType;
 
-        /** Memory type: The window's surface is allocated in main memory. */
+        /** @deprecated this is ignored, this value is set automatically when needed. */
+        @Deprecated
         public static final int MEMORY_TYPE_NORMAL = 0;
-        /** Memory type: The window's surface is configured to be accessible
-         * by DMA engines and hardware accelerators.
-         * @deprecated this is ignored, this value is set automatically when needed.
-         */
+        /** @deprecated this is ignored, this value is set automatically when needed. */
         @Deprecated
         public static final int MEMORY_TYPE_HARDWARE = 1;
-        /** Memory type: The window's surface is configured to be accessible
-         * by graphics accelerators. 
-         * @deprecated this is ignored, this value is set automatically when needed.
-         */
+        /** @deprecated this is ignored, this value is set automatically when needed. */
         @Deprecated
         public static final int MEMORY_TYPE_GPU = 2;
-        /** Memory type: The window's surface doesn't own its buffers and
-         * therefore cannot be locked. Instead the buffers are pushed to
-         * it through native binder calls. */
+        /** @deprecated this is ignored, this value is set automatically when needed. */
+        @Deprecated
         public static final int MEMORY_TYPE_PUSH_BUFFERS = 3;
 
         /**
@@ -994,7 +985,6 @@
             out.writeInt(x);
             out.writeInt(y);
             out.writeInt(type);
-            out.writeInt(memoryType);
             out.writeInt(flags);
             out.writeInt(softInputMode);
             out.writeInt(gravity);
@@ -1030,7 +1020,6 @@
             x = in.readInt();
             y = in.readInt();
             type = in.readInt();
-            memoryType = in.readInt();
             flags = in.readInt();
             softInputMode = in.readInt();
             gravity = in.readInt();
@@ -1106,10 +1095,6 @@
                 type = o.type;
                 changes |= TYPE_CHANGED;
             }
-            if (memoryType != o.memoryType) {
-                memoryType = o.memoryType;
-                changes |= MEMORY_TYPE_CHANGED;
-            }
             if (flags != o.flags) {
                 flags = o.flags;
                 changes |= FLAGS_CHANGED;
