diff --git a/src/AndroidDesktop.cpp b/src/AndroidDesktop.cpp
index 90f1699..253eefe 100644
--- a/src/AndroidDesktop.cpp
+++ b/src/AndroidDesktop.cpp
@@ -168,9 +168,21 @@
         ALOGE("Failed to get display characteristics\n");
         return err;
     }
-    //ALOGV("updateDisplayInfo: [%d:%d]", mDisplayInfo.w, mDisplayInfo.h);
+    
+    err = SurfaceComposerClient::getActiveDisplayConfig(displayToken, &mDisplayConfig);
+    if (err != NO_ERROR) {
+        ALOGE("Failed to get display configuration\n");
+        return err;
+    }
+    ALOGV("updateDisplayInfo: [%d:%d]", mDisplayConfig.resolution.width, mDisplayConfig.resolution.height);
 
-    mPixels->setDisplayInfo(&mDisplayInfo);
+    err = SurfaceComposerClient::getDisplayState(displayToken, &mDisplayState);
+    if (err != NO_ERROR) {
+        ALOGE("Failed to get current display status");
+        return err;
+    }
+
+    mPixels->setDisplayInfo(&mDisplayConfig, &mDisplayState);
 
     return NO_ERROR;
 }
@@ -187,7 +199,8 @@
           mDisplayRect.getHeight(), width, height);
 
     mVirtualDisplay.clear();
-    mVirtualDisplay = new VirtualDisplay(&mDisplayInfo, mPixels->width(), mPixels->height(), this);
+    mVirtualDisplay = new VirtualDisplay(&mDisplayConfig,  &mDisplayState,
+                                         mPixels->width(), mPixels->height(), this);
 
     mDisplayRect = mVirtualDisplay->getDisplayRect();
 
diff --git a/src/AndroidDesktop.h b/src/AndroidDesktop.h
index 1ceecc2..993f466 100644
--- a/src/AndroidDesktop.h
+++ b/src/AndroidDesktop.h
@@ -11,6 +11,8 @@
 #include <gui/CpuConsumer.h>
 
 #include <ui/DisplayInfo.h>
+#include <ui/DisplayConfig.h>
+#include <ui/DisplayState.h>
 
 #include <rfb/PixelBuffer.h>
 #include <rfb/SDesktop.h>
@@ -79,6 +81,8 @@
 
     // Primary display
     DisplayInfo mDisplayInfo;
+    DisplayConfig mDisplayConfig = {};
+    ui::DisplayState mDisplayState = {};
 
     // Virtual input device
     sp<InputDevice> mInputDevice;
diff --git a/src/AndroidPixelBuffer.cpp b/src/AndroidPixelBuffer.cpp
index 8af6c39..b6ab0cb 100644
--- a/src/AndroidPixelBuffer.cpp
+++ b/src/AndroidPixelBuffer.cpp
@@ -37,8 +37,8 @@
     mListener = nullptr;
 }
 
-bool AndroidPixelBuffer::isDisplayRotated(uint8_t orientation) {
-    return orientation != DISPLAY_ORIENTATION_0 && orientation != DISPLAY_ORIENTATION_180;
+bool AndroidPixelBuffer::isDisplayRotated(ui::Rotation orientation) {
+    return orientation != ui::ROTATION_0 && orientation != ui::ROTATION_180;
 }
 
 void AndroidPixelBuffer::setBufferRotation(bool rotated) {
@@ -98,12 +98,12 @@
     }
 }
 
-void AndroidPixelBuffer::setDisplayInfo(DisplayInfo* info) {
-    bool rotated = isDisplayRotated(info->orientation);
+void AndroidPixelBuffer::setDisplayInfo(DisplayConfig* config, ui::DisplayState* state) {
+    bool rotated = isDisplayRotated(state->orientation);
     setBufferRotation(rotated);
 
-    uint32_t w = rotated ? info->h : info->w;
-    uint32_t h = rotated ? info->w : info->h;
+    uint32_t w = rotated ? config->resolution.height : config->resolution.width;
+    uint32_t h = rotated ? config->resolution.width : config->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 44e7dbd..174665f 100644
--- a/src/AndroidPixelBuffer.h
+++ b/src/AndroidPixelBuffer.h
@@ -21,7 +21,9 @@
 #include <utils/Mutex.h>
 #include <utils/RefBase.h>
 
+#include <ui/DisplayConfig.h>
 #include <ui/DisplayInfo.h>
+#include <ui/DisplayState.h>
 #include <ui/Rect.h>
 
 #include <rfb/PixelBuffer.h>
@@ -35,7 +37,7 @@
   public:
     AndroidPixelBuffer();
 
-    virtual void setDisplayInfo(DisplayInfo* info);
+    virtual void setDisplayInfo(DisplayConfig* config, ui::DisplayState* state);
 
     virtual void setWindowSize(uint32_t width, uint32_t height);
 
@@ -61,7 +63,7 @@
     void reset();
 
   private:
-    static bool isDisplayRotated(uint8_t orientation);
+    static bool isDisplayRotated(ui::Rotation orientation);
 
     virtual void setBufferRotation(bool rotated);
 
diff --git a/src/VirtualDisplay.cpp b/src/VirtualDisplay.cpp
index 1854a55..1f616d1 100644
--- a/src/VirtualDisplay.cpp
+++ b/src/VirtualDisplay.cpp
@@ -22,20 +22,21 @@
 #include <gui/CpuConsumer.h>
 #include <gui/IGraphicBufferConsumer.h>
 #include <gui/SurfaceComposerClient.h>
-
+#include <input/DisplayViewport.h>
 #include "VirtualDisplay.h"
 
 using namespace vncflinger;
 
-VirtualDisplay::VirtualDisplay(DisplayInfo* info, uint32_t width, uint32_t height,
+VirtualDisplay::VirtualDisplay(DisplayConfig* config, ui::DisplayState* state,
+                               uint32_t width, uint32_t height,
                                sp<CpuConsumer::FrameAvailableListener> listener) {
     mWidth = width;
     mHeight = height;
 
-    if (info->orientation == DISPLAY_ORIENTATION_0 || info->orientation == DISPLAY_ORIENTATION_180) {
-        mSourceRect = Rect(info->w, info->h);
+    if (state->orientation == ui::ROTATION_0 || state->orientation == ui::ROTATION_180) {
+        mSourceRect = Rect(config->resolution.width, config->resolution.height);
     } else {
-        mSourceRect = Rect(info->h, info->w);
+        mSourceRect = Rect(config->resolution.height, config->resolution.width);
     }
 
     Rect displayRect = getDisplayRect();
@@ -54,7 +55,7 @@
 
     SurfaceComposerClient::Transaction t;
     t.setDisplaySurface(mDisplayToken, mProducer);
-    t.setDisplayProjection(mDisplayToken, 0, mSourceRect, displayRect);
+    t.setDisplayProjection(mDisplayToken, state->orientation, mSourceRect, displayRect);
     t.setDisplayLayerStack(mDisplayToken, 0);  // default stack
     t.apply();
 
diff --git a/src/VirtualDisplay.h b/src/VirtualDisplay.h
index 02a85c7..cd2356e 100644
--- a/src/VirtualDisplay.h
+++ b/src/VirtualDisplay.h
@@ -23,7 +23,9 @@
 #include <gui/CpuConsumer.h>
 #include <gui/IGraphicBufferProducer.h>
 
+#include <ui/DisplayConfig.h>
 #include <ui/DisplayInfo.h>
+#include <ui/DisplayState.h>
 #include <ui/Rect.h>
 
 using namespace android;
@@ -32,7 +34,8 @@
 
 class VirtualDisplay : public RefBase {
   public:
-    VirtualDisplay(DisplayInfo* info, uint32_t width, uint32_t height,
+    VirtualDisplay(DisplayConfig *config, ui::DisplayState* state,
+                   uint32_t width, uint32_t height,
                    sp<CpuConsumer::FrameAvailableListener> listener);
 
     virtual ~VirtualDisplay();
