diff --git a/android/android-emu/android/opengles.cpp b/android/android-emu/android/opengles.cpp
index fcc0070..8271400 100644
--- a/android/android-emu/android/opengles.cpp
+++ b/android/android-emu/android/opengles.cpp
@@ -119,7 +119,7 @@
 }
 
 int
-android_startOpenglesRenderer(int width, int height)
+android_startOpenglesRenderer(int width, int height, int guestApiLevel)
 {
     if (!sRenderLib) {
         D("Can't start OpenGLES renderer without support libraries");
@@ -132,6 +132,7 @@
 
     android_init_opengl_logger();
 
+    sRenderLib->setApiLevel(guestApiLevel);
     sRenderLib->setCrashReporter(&crashhandler_die_format);
     sRenderLib->setFeatureController(&android::featurecontrol::isEnabled);
     sRenderLib->setSyncDevice(goldfish_sync_create_timeline,
diff --git a/android/android-emu/android/opengles.h b/android/android-emu/android/opengles.h
index 82d1b24..1be404d 100644
--- a/android/android-emu/android/opengles.h
+++ b/android/android-emu/android/opengles.h
@@ -31,8 +31,12 @@
 /* Tries to start the renderer process. Returns 0 on success, -1 on error.
  * At the moment, this must be done before the VM starts. The onPost callback
  * may be NULL.
+ *
+ * width and height: the framebuffer dimensions that will be reported
+ *                   to the guest display driver.
+ * guestApiLevel: API level of guest image (23 for mnc, 24 for nyc, etc)
  */
-int android_startOpenglesRenderer(int width, int height);
+int android_startOpenglesRenderer(int width, int height, int guestApiLevel);
 
 /* See the description in render_api.h. */
 typedef void (*OnPostFunc)(void* context, int width, int height, int ydir,
diff --git a/android/android-emugl/host/include/OpenglRender/RenderLib.h b/android/android-emugl/host/include/OpenglRender/RenderLib.h
index 48094b2..9201931 100644
--- a/android/android-emugl/host/include/OpenglRender/RenderLib.h
+++ b/android/android-emugl/host/include/OpenglRender/RenderLib.h
@@ -27,6 +27,9 @@
 public:
     virtual ~RenderLib() = default;
 
+    // Tell emugl the API version of the system image
+    // Please extend it to setAvd, if more avd info is needed in future.
+    virtual void setApiLevel(int api) = 0;
     virtual void setLogger(emugl_logger_struct logger) = 0;
     virtual void setCrashReporter(emugl_crash_reporter_t reporter) = 0;
     virtual void setFeatureController(emugl_feature_is_enabled_t featureController) = 0;
diff --git a/android/android-emugl/host/libs/libOpenglRender/FbConfig.cpp b/android/android-emugl/host/libs/libOpenglRender/FbConfig.cpp
index 5035c53..c5c09b8 100644
--- a/android/android-emugl/host/libs/libOpenglRender/FbConfig.cpp
+++ b/android/android-emugl/host/libs/libOpenglRender/FbConfig.cpp
@@ -14,6 +14,7 @@
 
 #include "FbConfig.h"
 
+#include "emugl/common/misc.h"
 #include "OpenGLESDispatch/EGLDispatch.h"
 
 #include <stdio.h>
@@ -163,10 +164,16 @@
     // what it used by the current implementation, exclusively. This forces
     // the rewrite of |attribs| into a new array.
     bool hasSurfaceType = false;
+    bool wantSwapPreserved = false;
+    int surfaceTypeIdx = 0;
     int numAttribs = 0;
     while (attribs[numAttribs] != EGL_NONE) {
         if (attribs[numAttribs] == EGL_SURFACE_TYPE) {
             hasSurfaceType = true;
+            surfaceTypeIdx = numAttribs;
+            if (attribs[numAttribs+1] & EGL_SWAP_BEHAVIOR_PRESERVED_BIT) {
+                wantSwapPreserved = true;
+            }
         }
         numAttribs += 2;
     }
@@ -180,6 +187,15 @@
         newAttribs[numAttribs] = EGL_SURFACE_TYPE;
         newAttribs[numAttribs + 1] = 0;
         newAttribs[numAttribs + 2] = EGL_NONE;
+    } else if (wantSwapPreserved && emugl::getApiLevel() <= 19) {
+        // For api <= 19, there is a bug in some public system images
+        // that causes UI issue if the host rejects
+        // EGL_SWAP_BEHAVIOR_PRESERVED_BIT, while they are not using
+        // this feature.
+        // So we wipe it out.
+        newAttribs = new GLint[numAttribs+1];
+        memcpy(newAttribs, attribs, (numAttribs+1) * sizeof(GLint));
+        newAttribs[surfaceTypeIdx+1] &= ~(EGLint)EGL_SWAP_BEHAVIOR_PRESERVED_BIT;
     }
 
     if (s_egl.eglChooseConfig(mDisplay,
diff --git a/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.cpp b/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.cpp
index cd892b3..f2ab4aa 100644
--- a/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.cpp
+++ b/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.cpp
@@ -18,10 +18,15 @@
 #include "emugl/common/crash_reporter.h"
 #include "emugl/common/feature_control.h"
 #include "emugl/common/logging.h"
+#include "emugl/common/misc.h"
 #include "emugl/common/sync_device.h"
 
 namespace emugl {
 
+void RenderLibImpl::setApiLevel(int api) {
+    emugl::setApiLevel(api);
+}
+
 void RenderLibImpl::setLogger(emugl_logger_struct logger) {
     set_emugl_logger(logger.coarse);
     set_emugl_cxt_logger(logger.fine);
diff --git a/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.h b/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.h
index a83227a..0a17fed 100644
--- a/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.h
+++ b/android/android-emugl/host/libs/libOpenglRender/RenderLibImpl.h
@@ -25,6 +25,7 @@
 public:
     RenderLibImpl() = default;
 
+    virtual void setApiLevel(int api) override;
     virtual void setLogger(emugl_logger_struct logger) override;
     virtual void setCrashReporter(emugl_crash_reporter_t reporter) override;
     virtual void setFeatureController(emugl_feature_is_enabled_t featureController) override;
diff --git a/android/android-emugl/shared/emugl/common/Android.mk b/android/android-emugl/shared/emugl/common/Android.mk
index c458731..19d72bd 100644
--- a/android/android-emugl/shared/emugl/common/Android.mk
+++ b/android/android-emugl/shared/emugl/common/Android.mk
@@ -9,6 +9,7 @@
         crash_reporter.cpp \
         feature_control.cpp \
         logging.cpp \
+        misc.cpp \
         shared_library.cpp \
         stringparsing.cpp \
         sockets.cpp \
diff --git a/android/qemu1/vl-android.c b/android/qemu1/vl-android.c
index 0bc55c9..beab7bc 100644
--- a/android/qemu1/vl-android.c
+++ b/android/qemu1/vl-android.c
@@ -3033,7 +3033,9 @@
         // the error in |opengl_broken| instead.
         if (android_initOpenglesEmulation() != 0 ||
             android_startOpenglesRenderer(android_hw->hw_lcd_width,
-                                          android_hw->hw_lcd_height) != 0)
+                                          android_hw->hw_lcd_height,
+                                          avdInfo_getApiLevel(android_avdInfo))
+                != 0)
         {
             opengl_broken = true;
         }
diff --git a/distrib/android-emugl/shared/emugl/common/misc.cpp b/distrib/android-emugl/shared/emugl/common/misc.cpp
new file mode 100644
index 0000000..05e0bb3
--- /dev/null
+++ b/distrib/android-emugl/shared/emugl/common/misc.cpp
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "emugl/common/misc.h"
+
+static int s_api = -1;
+
+void emugl::setApiLevel(int api) {
+    s_api = api;
+}
+
+int emugl::getApiLevel() {
+    return s_api;
+}
diff --git a/distrib/android-emugl/shared/emugl/common/misc.h b/distrib/android-emugl/shared/emugl/common/misc.h
new file mode 100644
index 0000000..7e07a76
--- /dev/null
+++ b/distrib/android-emugl/shared/emugl/common/misc.h
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+namespace emugl {
+    // Set and get API version of system image.
+    // setApiVersion should only be called once when initializing RenderLib
+    void setApiLevel(int api);
+    int getApiLevel();
+}
\ No newline at end of file
