diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 0a633f0..b8506ee 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -39,8 +39,6 @@
 #include <cutils/log.h>
 #include <cutils/properties.h>
 
-#include <EGL/egl.h>
-
 #include "Layer.h"           // needed only for debugging
 #include "LayerBase.h"
 #include "HWComposer.h"
@@ -108,7 +106,6 @@
     : mFlinger(flinger),
       mModule(0), mHwc(0), mList(0), mCapacity(0),
       mNumOVLayers(0), mNumFBLayers(0),
-      mDpy(EGL_NO_DISPLAY), mSur(EGL_NO_SURFACE),
       mCBContext(new cb_context),
       mEventHandler(handler),
       mRefreshPeriod(refreshPeriod),
@@ -207,11 +204,6 @@
     }
 }
 
-void HWComposer::setFrameBuffer(EGLDisplay dpy, EGLSurface sur) {
-    mDpy = (hwc_display_t)dpy;
-    mSur = (hwc_surface_t)sur;
-}
-
 status_t HWComposer::createWorkList(size_t numLayers) {
     if (mHwc) {
         if (!mList || mCapacity < numLayers) {
@@ -270,15 +262,13 @@
     return 0;
 }
 
-status_t HWComposer::commit() const {
+status_t HWComposer::commit(void* fbDisplay, void* fbSurface) const {
     int err = NO_ERROR;
     if (mHwc) {
-        err = mHwc->set(mHwc, mDpy, mSur, mList);
+        err = mHwc->set(mHwc, fbDisplay, fbSurface, mList);
         if (mList) {
             mList->flags &= ~HWC_GEOMETRY_CHANGED;
         }
-    } else {
-        eglSwapBuffers(mDpy, mSur);
     }
     return (status_t)err;
 }
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index c2fff4f..ca41bd3 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -20,8 +20,6 @@
 #include <stdint.h>
 #include <sys/types.h>
 
-#include <EGL/egl.h>
-
 #include <hardware/hwcomposer_defs.h>
 
 #include <utils/Condition.h>
@@ -63,9 +61,6 @@
 
     status_t initCheck() const;
 
-    // tells the HAL what the framebuffer is
-    void setFrameBuffer(EGLDisplay dpy, EGLSurface sur);
-
     // Asks the HAL what it can do
     status_t prepare() const;
 
@@ -73,7 +68,7 @@
     status_t disable();
 
     // commits the list
-    status_t commit() const;
+    status_t commit(void* fbDisplay, void* fbSurface) const;
 
     // release hardware resources and blank screen
     status_t release() const;
@@ -234,8 +229,6 @@
     size_t                          mCapacity;
     mutable size_t                  mNumOVLayers;
     mutable size_t                  mNumFBLayers;
-    EGLDisplay                      mDpy;
-    EGLSurface                      mSur;
     cb_context*                     mCBContext;
     EventHandler&                   mEventHandler;
     nsecs_t                         mRefreshPeriod;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 192378f..6cf1128 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -363,8 +363,8 @@
             "Initializing graphics H/W...");
 
     // initialize EGL
-    EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-    eglInitialize(display, NULL, NULL);
+    mEGLDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+    eglInitialize(mEGLDisplay, NULL, NULL);
 
     // Initialize the main display
     // create native window to main display
@@ -378,8 +378,8 @@
     // initialize the config and context
     int format;
     window->query(window, NATIVE_WINDOW_FORMAT, &format);
-    mEGLConfig  = selectEGLConfig(display, format);
-    mEGLContext = createGLContext(display, mEGLConfig);
+    mEGLConfig  = selectEGLConfig(mEGLDisplay, format);
+    mEGLContext = createGLContext(mEGLDisplay, mEGLConfig);
 
     // initialize our main display hardware
     DisplayHardware* const hw = new DisplayHardware(this, 0, anw, mEGLConfig);
@@ -387,7 +387,7 @@
 
     //  initialize OpenGL ES
     EGLSurface surface = hw->getEGLSurface();
-    initializeGL(display, surface);
+    initializeGL(mEGLDisplay, surface);
 
     // start the EventThread
     mEventThread = new EventThread(this);
@@ -397,9 +397,6 @@
     mHwc = new HWComposer(this,
             *static_cast<HWComposer::EventHandler *>(this),
             hw->getRefreshPeriod());
-    if (mHwc->initCheck() == NO_ERROR) {
-        mHwc->setFrameBuffer(display, surface);
-    }
 
     // We're now ready to accept clients...
     mReadyToRunBarrier.open();
@@ -733,15 +730,16 @@
     }
 
     hw.flip(mSwapRegion);
-    hwc.commit();
 
     if (hwc.initCheck() == NO_ERROR) {
+        hwc.commit(mEGLDisplay, hw.getEGLSurface());
         HWComposer::LayerListIterator cur = hwc.begin();
         const HWComposer::LayerListIterator end = hwc.end();
         for (size_t i = 0; cur != end && i < numLayers; ++i, ++cur) {
             layers[i]->onLayerDisplayed(&*cur);
         }
     } else {
+        eglSwapBuffers(mEGLDisplay, hw.getEGLSurface());
         for (size_t i = 0; i < numLayers; i++) {
             layers[i]->onLayerDisplayed(NULL);
         }
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index c33f1a3..a3d8538 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -390,6 +390,7 @@
     GLint mMaxTextureSize;
     EGLContext mEGLContext;
     EGLConfig mEGLConfig;
+    EGLDisplay mEGLDisplay;
 
     // Can only accessed from the main thread, these members
     // don't need synchronization
