diff --git a/src/AndroidDesktop.cpp b/src/AndroidDesktop.cpp
index 253eefe..0234d0a 100644
--- a/src/AndroidDesktop.cpp
+++ b/src/AndroidDesktop.cpp
@@ -7,8 +7,6 @@
 #include <gui/ISurfaceComposer.h>
 #include <gui/SurfaceComposerClient.h>
 
-#include <ui/DisplayInfo.h>
-
 #include <rfb/PixelFormat.h>
 #include <rfb/Rect.h>
 #include <rfb/ScreenSet.h>
@@ -163,18 +161,12 @@
         return -1;
     }
 
-    status_t err = SurfaceComposerClient::getDisplayInfo(displayToken, &mDisplayInfo);
-    if (err != NO_ERROR) {
-        ALOGE("Failed to get display characteristics\n");
-        return err;
-    }
-    
-    err = SurfaceComposerClient::getActiveDisplayConfig(displayToken, &mDisplayConfig);
+    status_t err = SurfaceComposerClient::getActiveDisplayMode(displayToken, &mDisplayMode);
     if (err != NO_ERROR) {
         ALOGE("Failed to get display configuration\n");
         return err;
     }
-    ALOGV("updateDisplayInfo: [%d:%d]", mDisplayConfig.resolution.width, mDisplayConfig.resolution.height);
+    ALOGV("updateDisplayInfo: [%d:%d]", mDisplayMode.resolution.width, mDisplayMode.resolution.height);
 
     err = SurfaceComposerClient::getDisplayState(displayToken, &mDisplayState);
     if (err != NO_ERROR) {
@@ -182,7 +174,7 @@
         return err;
     }
 
-    mPixels->setDisplayInfo(&mDisplayConfig, &mDisplayState);
+    mPixels->setDisplayInfo(&mDisplayMode, &mDisplayState);
 
     return NO_ERROR;
 }
@@ -199,7 +191,7 @@
           mDisplayRect.getHeight(), width, height);
 
     mVirtualDisplay.clear();
-    mVirtualDisplay = new VirtualDisplay(&mDisplayConfig,  &mDisplayState,
+    mVirtualDisplay = new VirtualDisplay(&mDisplayMode,  &mDisplayState,
                                          mPixels->width(), mPixels->height(), this);
 
     mDisplayRect = mVirtualDisplay->getDisplayRect();
diff --git a/src/AndroidDesktop.h b/src/AndroidDesktop.h
index 993f466..41a8543 100644
--- a/src/AndroidDesktop.h
+++ b/src/AndroidDesktop.h
@@ -10,8 +10,7 @@
 
 #include <gui/CpuConsumer.h>
 
-#include <ui/DisplayInfo.h>
-#include <ui/DisplayConfig.h>
+#include <ui/DisplayMode.h>
 #include <ui/DisplayState.h>
 
 #include <rfb/PixelBuffer.h>
@@ -80,8 +79,7 @@
     sp<VirtualDisplay> mVirtualDisplay;
 
     // Primary display
-    DisplayInfo mDisplayInfo;
-    DisplayConfig mDisplayConfig = {};
+    ui::DisplayMode mDisplayMode = {};
     ui::DisplayState mDisplayState = {};
 
     // Virtual input device
diff --git a/src/AndroidPixelBuffer.cpp b/src/AndroidPixelBuffer.cpp
index b6ab0cb..ba7349a 100644
--- a/src/AndroidPixelBuffer.cpp
+++ b/src/AndroidPixelBuffer.cpp
@@ -18,8 +18,6 @@
 #define LOG_TAG "VNCFlinger:AndroidPixelBuffer"
 #include <utils/Log.h>
 
-#include <ui/DisplayInfo.h>
-
 #include "AndroidPixelBuffer.h"
 
 using namespace vncflinger;
@@ -98,12 +96,12 @@
     }
 }
 
-void AndroidPixelBuffer::setDisplayInfo(DisplayConfig* config, ui::DisplayState* state) {
+void AndroidPixelBuffer::setDisplayInfo(ui::DisplayMode* mode, ui::DisplayState* state) {
     bool rotated = isDisplayRotated(state->orientation);
     setBufferRotation(rotated);
 
-    uint32_t w = rotated ? config->resolution.height : config->resolution.width;
-    uint32_t h = rotated ? config->resolution.width : config->resolution.height;
+    uint32_t w = rotated ? mode->resolution.height : mode->resolution.width;
+    uint32_t h = rotated ? mode->resolution.width : mode->resolution.height;
 
     if (w != mSourceWidth || h != mSourceHeight) {
         ALOGV("Display dimensions changed: old=(%dx%d) new=(%dx%d)", mSourceWidth, mSourceHeight, w,
diff --git a/src/AndroidPixelBuffer.h b/src/AndroidPixelBuffer.h
index 174665f..5d06d8e 100644
--- a/src/AndroidPixelBuffer.h
+++ b/src/AndroidPixelBuffer.h
@@ -21,8 +21,7 @@
 #include <utils/Mutex.h>
 #include <utils/RefBase.h>
 
-#include <ui/DisplayConfig.h>
-#include <ui/DisplayInfo.h>
+#include <ui/DisplayMode.h>
 #include <ui/DisplayState.h>
 #include <ui/Rect.h>
 
@@ -37,7 +36,7 @@
   public:
     AndroidPixelBuffer();
 
-    virtual void setDisplayInfo(DisplayConfig* config, ui::DisplayState* state);
+    virtual void setDisplayInfo(ui::DisplayMode* mode, ui::DisplayState* state);
 
     virtual void setWindowSize(uint32_t width, uint32_t height);
 
diff --git a/src/VirtualDisplay.cpp b/src/VirtualDisplay.cpp
index 1f616d1..3122ca8 100644
--- a/src/VirtualDisplay.cpp
+++ b/src/VirtualDisplay.cpp
@@ -27,16 +27,16 @@
 
 using namespace vncflinger;
 
-VirtualDisplay::VirtualDisplay(DisplayConfig* config, ui::DisplayState* state,
+VirtualDisplay::VirtualDisplay(ui::DisplayMode* mode, ui::DisplayState* state,
                                uint32_t width, uint32_t height,
                                sp<CpuConsumer::FrameAvailableListener> listener) {
     mWidth = width;
     mHeight = height;
 
     if (state->orientation == ui::ROTATION_0 || state->orientation == ui::ROTATION_180) {
-        mSourceRect = Rect(config->resolution.width, config->resolution.height);
+        mSourceRect = Rect(mode->resolution.width, mode->resolution.height);
     } else {
-        mSourceRect = Rect(config->resolution.height, config->resolution.width);
+        mSourceRect = Rect(mode->resolution.height, mode->resolution.width);
     }
 
     Rect displayRect = getDisplayRect();
diff --git a/src/VirtualDisplay.h b/src/VirtualDisplay.h
index cd2356e..55b2166 100644
--- a/src/VirtualDisplay.h
+++ b/src/VirtualDisplay.h
@@ -23,8 +23,7 @@
 #include <gui/CpuConsumer.h>
 #include <gui/IGraphicBufferProducer.h>
 
-#include <ui/DisplayConfig.h>
-#include <ui/DisplayInfo.h>
+#include <ui/DisplayMode.h>
 #include <ui/DisplayState.h>
 #include <ui/Rect.h>
 
@@ -34,7 +33,7 @@
 
 class VirtualDisplay : public RefBase {
   public:
-    VirtualDisplay(DisplayConfig *config, ui::DisplayState* state,
+    VirtualDisplay(ui::DisplayMode *mode, ui::DisplayState* state,
                    uint32_t width, uint32_t height,
                    sp<CpuConsumer::FrameAvailableListener> listener);
 
