diff --git a/include/ui/FramebufferNativeWindow.h b/include/ui/FramebufferNativeWindow.h
index 1d49cca..4b281db 100644
--- a/include/ui/FramebufferNativeWindow.h
+++ b/include/ui/FramebufferNativeWindow.h
@@ -76,13 +76,9 @@
 
     framebuffer_device_t const * getDevice() const { return fbDev; } 
 
-    void setSwapRectangle(const Rect& dirty);
-
 private:
     friend class LightRefBase<FramebufferNativeWindow>;    
     ~FramebufferNativeWindow(); // this class cannot be overloaded
-    static void connect(android_native_window_t* window);
-    static void disconnect(android_native_window_t* window);
     static int setSwapInterval(android_native_window_t* window, int interval);
     static int dequeueBuffer(android_native_window_t* window, android_native_buffer_t** buffer);
     static int lockBuffer(android_native_window_t* window, android_native_buffer_t* buffer);
@@ -94,8 +90,6 @@
     sp<NativeBuffer> buffers[2];
     sp<NativeBuffer> front;
     
-    Rect mDirty;
-
     mutable Mutex mutex;
     Condition mCondition;
     int32_t mNumBuffers;
diff --git a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp b/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp
index 83ebd7a..ca96e14 100644
--- a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp
+++ b/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp
@@ -305,16 +305,13 @@
     EGLDisplay dpy = mDisplay;
     EGLSurface surface = mSurface;
 
-    Region newDirty(dirty);
-    newDirty.andSelf(Rect(mWidth, mHeight));
-
     if (mFlags & BUFFER_PRESERVED) {
-        mDirty = newDirty;
+        Region newDirty(dirty);
+        newDirty.andSelf(Rect(mWidth, mHeight));
+        const Rect& b(newDirty.bounds());
+        //mNativeWindow->setSwapRectangle(b);
     } 
 
-    const Rect& b(newDirty.bounds());
-    mNativeWindow->setSwapRectangle(b);
-
     mPageFlipCount++;
     eglSwapBuffers(dpy, surface);
     checkEGLErrors("eglSwapBuffers");
diff --git a/libs/surfaceflinger/DisplayHardware/DisplayHardware.h b/libs/surfaceflinger/DisplayHardware/DisplayHardware.h
index 97a68a5..c9c75e2 100644
--- a/libs/surfaceflinger/DisplayHardware/DisplayHardware.h
+++ b/libs/surfaceflinger/DisplayHardware/DisplayHardware.h
@@ -102,7 +102,6 @@
     int             mHeight;
     PixelFormat     mFormat;
     uint32_t        mFlags;
-    mutable Region  mDirty;
     mutable uint32_t mPageFlipCount;
     
     sp<FramebufferNativeWindow> mNativeWindow;
diff --git a/libs/ui/FramebufferNativeWindow.cpp b/libs/ui/FramebufferNativeWindow.cpp
index 407d6f4..f235cb4 100644
--- a/libs/ui/FramebufferNativeWindow.cpp
+++ b/libs/ui/FramebufferNativeWindow.cpp
@@ -131,14 +131,6 @@
     framebuffer_close(fbDev);
 }
 
-void FramebufferNativeWindow::connect(android_native_window_t* window) 
-{
-}
-
-void FramebufferNativeWindow::disconnect(android_native_window_t* window) 
-{
-}
-
 int FramebufferNativeWindow::setSwapInterval(
         android_native_window_t* window, int interval) 
 {
@@ -146,12 +138,6 @@
     return fb->setSwapInterval(fb, interval);
 }
 
-void FramebufferNativeWindow::setSwapRectangle(const Rect& dirty)
-{
-    Mutex::Autolock _l(mutex);
-    mDirty = dirty; 
-}
-
 int FramebufferNativeWindow::dequeueBuffer(android_native_window_t* window, 
         android_native_buffer_t** buffer)
 {
