diff --git a/libs/ui/Surface.cpp b/libs/ui/Surface.cpp
index 5f2138e..782eac4 100644
--- a/libs/ui/Surface.cpp
+++ b/libs/ui/Surface.cpp
@@ -52,18 +52,18 @@
 ANDROID_SINGLETON_STATIC_INSTANCE( SurfaceBuffer )
 
 SurfaceBuffer::SurfaceBuffer() 
-    : BASE(), handle(0), mOwner(false), mBufferMapper(BufferMapper::get())
+    : BASE(), mOwner(false), mBufferMapper(BufferMapper::get())
 {
     width  = 
     height = 
     stride = 
     format = 
     usage  = 0;
-    android_native_buffer_t::getHandle = getHandle;
+    handle = NULL;
 }
 
 SurfaceBuffer::SurfaceBuffer(const Parcel& data) 
-    : BASE(), handle(0), mOwner(true), mBufferMapper(BufferMapper::get())
+    : BASE(), mOwner(true), mBufferMapper(BufferMapper::get())
 {
     // we own the handle in this case
     width  = data.readInt32();
@@ -72,7 +72,6 @@
     format = data.readInt32();
     usage  = data.readInt32();
     handle = data.readNativeHandle();
-    android_native_buffer_t::getHandle = getHandle;
 }
 
 SurfaceBuffer::~SurfaceBuffer()
@@ -83,13 +82,6 @@
     }
 }
 
-int SurfaceBuffer::getHandle(android_native_buffer_t const * base, 
-        buffer_handle_t* handle)
-{
-    *handle = getSelf(base)->handle;
-    return 0;
-}
-
 status_t SurfaceBuffer::lock(uint32_t usage, void** vaddr)
 {
     const Rect lockBounds(width, height);
@@ -112,17 +104,12 @@
 status_t SurfaceBuffer::writeToParcel(Parcel* reply, 
         android_native_buffer_t const* buffer)
 {
-    buffer_handle_t handle;
-    status_t err = buffer->getHandle(buffer, &handle);
-    if (err < 0) {
-        return err;
-    }
     reply->writeInt32(buffer->width);
     reply->writeInt32(buffer->height);
     reply->writeInt32(buffer->stride);
     reply->writeInt32(buffer->format);
     reply->writeInt32(buffer->usage);
-    reply->writeNativeHandle(handle);
+    reply->writeNativeHandle(buffer->handle);
     return NO_ERROR;
 }
 
@@ -419,7 +406,7 @@
     // its buffers in this process.
     for (int i=0 ; i<2 ; i++) {
         if (mBuffers[i] != 0) {
-            getBufferMapper().unregisterBuffer(mBuffers[i]->getHandle());
+            getBufferMapper().unregisterBuffer(mBuffers[i]->handle);
         }
     }
 
@@ -689,10 +676,10 @@
     if (buffer != 0) {
         sp<SurfaceBuffer>& currentBuffer(mBuffers[index]);
         if (currentBuffer != 0) {
-            getBufferMapper().unregisterBuffer(currentBuffer->getHandle());
+            getBufferMapper().unregisterBuffer(currentBuffer->handle);
             currentBuffer.clear();
         }
-        err = getBufferMapper().registerBuffer(buffer->getHandle());
+        err = getBufferMapper().registerBuffer(buffer->handle);
         LOGW_IF(err, "map(...) failed %d (%s)", err, strerror(-err));
         if (err == NO_ERROR) {
             currentBuffer = buffer;
