diff --git a/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java b/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
index 56e7543415a518a1c6b1b8cee938c02ae855c44e..6f9567559759c19e290ee78d0084f95984de695d 100644
--- a/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
+++ b/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
@@ -107,10 +107,6 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
             if (m_manager.isEnabled())
                 accServiceListener.onAccessibilityStateChanged(true);
         }
-
-
-        // Enable Qt Accessibility so that notifications are enabled
-        QtNativeAccessibility.setActive(true);
     }
 
     private class AccessibilityManagerListener implements AccessibilityManager.AccessibilityStateChangeListener
@@ -119,8 +115,6 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
         public void onAccessibilityStateChanged(boolean enabled)
         {
             if (enabled) {
-                // The accessibility code depends on android API level 16, so dynamically resolve it
-                if (android.os.Build.VERSION.SDK_INT >= 16) {
                     try {
                         View view = m_view;
                         if (view == null) {
@@ -147,13 +141,14 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
                         // Unknown exception means something went wrong.
                         Log.w("Qt A11y", "Unknown exception: " + e.toString());
                     }
-                }
             } else {
                 if (m_view != null) {
                     m_layout.removeView(m_view);
                     m_view = null;
                 }
             }
+
+            QtNativeAccessibility.setActive(enabled);
         }
     }
 
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index d6cd49f44c40a555751e94c1a5bbd3163c8b395d..f4d2645e9a76e295352afb59fd338c38cc9a2d19 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -794,7 +794,25 @@ public class QtActivityDelegate
         m_surfaces =  new HashMap<Integer, QtSurface>();
         m_nativeViews = new HashMap<Integer, View>();
         m_activity.registerForContextMenu(m_layout);
+        m_activity.setContentView(m_layout,
+                                  new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+                                                             ViewGroup.LayoutParams.MATCH_PARENT));
 
+        int orientation = m_activity.getResources().getConfiguration().orientation;
+        int rotation = m_activity.getWindowManager().getDefaultDisplay().getRotation();
+        boolean rot90 = (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270);
+        boolean currentlyLandscape = (orientation == Configuration.ORIENTATION_LANDSCAPE);
+        if ((currentlyLandscape && !rot90) || (!currentlyLandscape && rot90))
+            m_nativeOrientation = Configuration.ORIENTATION_LANDSCAPE;
+        else
+            m_nativeOrientation = Configuration.ORIENTATION_PORTRAIT;
+
+        QtNative.handleOrientationChanged(rotation, m_nativeOrientation);
+        m_currentRotation = rotation;
+    }
+
+    public void initializeAccessibility()
+    {
         // Initialize accessibility
         try {
             final String a11yDelegateClassName = "org.qtproject.qt5.android.accessibility.QtAccessibilityDelegate";
@@ -810,22 +828,6 @@ public class QtActivityDelegate
             // Unknown exception means something went wrong.
             Log.w("Qt A11y", "Unknown exception: " + e.toString());
         }
-
-        m_activity.setContentView(m_layout,
-                                  new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
-                                                             ViewGroup.LayoutParams.MATCH_PARENT));
-
-        int orientation = m_activity.getResources().getConfiguration().orientation;
-        int rotation = m_activity.getWindowManager().getDefaultDisplay().getRotation();
-        boolean rot90 = (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270);
-        boolean currentlyLandscape = (orientation == Configuration.ORIENTATION_LANDSCAPE);
-        if ((currentlyLandscape && !rot90) || (!currentlyLandscape && rot90))
-            m_nativeOrientation = Configuration.ORIENTATION_LANDSCAPE;
-        else
-            m_nativeOrientation = Configuration.ORIENTATION_PORTRAIT;
-
-        QtNative.handleOrientationChanged(rotation, m_nativeOrientation);
-        m_currentRotation = rotation;
     }
 
     public void onConfigurationChanged(Configuration configuration)
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index b2480618f803dcf59ce7de1367dfdaa106f20fda..040eba5e422d529d54b52f495a2f41cfed50d0f0 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -571,6 +571,16 @@ public class QtNative
         });
     }
 
+    private static void initializeAccessibility()
+    {
+        runAction(new Runnable() {
+            @Override
+            public void run() {
+                m_activityDelegate.initializeAccessibility();
+            }
+        });
+    }
+
     // screen methods
     public static native void setDisplayMetrics(int screenWidthPixels,
                                                 int screenHeightPixels,
diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp
index f8c3e262296dc3865b003115a79dcafb361f5afc..69f8bdbad75489eb60e56b8f707034266e265504 100644
--- a/src/plugins/platforms/android/androidjniaccessibility.cpp
+++ b/src/plugins/platforms/android/androidjniaccessibility.cpp
@@ -42,6 +42,7 @@
 #include "QtGui/qaccessible.h"
 #include <QtCore/qmath.h>
 #include <QtCore/private/qjnihelpers_p.h>
+#include <QtCore/private/qjni_p.h>
 
 #include "qdebug.h"
 
@@ -65,6 +66,15 @@ namespace QtAndroidAccessibility
     static jmethodID m_setTextSelectionMethodID = 0;
     static jmethodID m_setVisibleToUserMethodID = 0;
 
+    void initialize()
+    {
+        // API level > 16 is required.
+        if (QtAndroidPrivate::androidSdkVersion() < 16)
+            return;
+
+        QJNIObjectPrivate::callStaticMethod<void>(QtAndroid::applicationClass(),
+                                                  "initializeAccessibility");
+    }
 
     static void setActive(JNIEnv */*env*/, jobject /*thiz*/, jboolean active)
     {
diff --git a/src/plugins/platforms/android/androidjniaccessibility.h b/src/plugins/platforms/android/androidjniaccessibility.h
index 92013531189bd4cb0c468256153dc8a9931326a5..a4cbab7834b0171b6e8f4a1cfc16cc3a30bab6e9 100644
--- a/src/plugins/platforms/android/androidjniaccessibility.h
+++ b/src/plugins/platforms/android/androidjniaccessibility.h
@@ -40,6 +40,7 @@ QT_BEGIN_NAMESPACE
 
 namespace QtAndroidAccessibility
 {
+    void initialize();
     bool registerNatives(JNIEnv *env);
 }
 
diff --git a/src/plugins/platforms/android/qandroidplatformaccessibility.cpp b/src/plugins/platforms/android/qandroidplatformaccessibility.cpp
index e3a8b1a8f44154807a8d4e2c56f2d26769a4213c..339023bd9f17ae6a62758cd11f5571818a844faa 100644
--- a/src/plugins/platforms/android/qandroidplatformaccessibility.cpp
+++ b/src/plugins/platforms/android/qandroidplatformaccessibility.cpp
@@ -33,11 +33,14 @@
 
 
 #include "qandroidplatformaccessibility.h"
+#include "androidjniaccessibility.h"
 
 QT_BEGIN_NAMESPACE
 
 QAndroidPlatformAccessibility::QAndroidPlatformAccessibility()
-{}
+{
+    QtAndroidAccessibility::initialize();
+}
 
 QAndroidPlatformAccessibility::~QAndroidPlatformAccessibility()
 {}
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp
index eb96bf11f06b902720515036d3e5df47bddf7d33..2a127f5c3cd30165d506ec4778f0f717f1f4fb65 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.cpp
+++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp
@@ -148,6 +148,10 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList &para
 
     m_androidSystemLocale = new QAndroidSystemLocale;
 
+#ifndef QT_NO_ACCESSIBILITY
+        m_accessibility = new QAndroidPlatformAccessibility();
+#endif // QT_NO_ACCESSIBILITY
+
     QJNIObjectPrivate javaActivity(QtAndroid::activity());
     if (javaActivity.isValid()) {
         QJNIObjectPrivate resources = javaActivity.callObjectMethod("getResources", "()Landroid/content/res/Resources;");
@@ -348,8 +352,6 @@ void QAndroidPlatformIntegration::setScreenOrientation(Qt::ScreenOrientation cur
 #ifndef QT_NO_ACCESSIBILITY
 QPlatformAccessibility *QAndroidPlatformIntegration::accessibility() const
 {
-    if (!m_accessibility)
-        m_accessibility = new QAndroidPlatformAccessibility();
     return m_accessibility;
 }
 #endif