diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp
index 072510e..24c08e5 100644
--- a/src/plugins/platforms/qnx/qqnxintegration.cpp
+++ b/src/plugins/platforms/qnx/qqnxintegration.cpp
@@ -77,6 +77,8 @@
 
 #include <qpa/qplatformwindow.h>
 #include <qpa/qwindowsysteminterface.h>
+#include <qpa/qplatforminputcontextfactory_p.h>
+#include <qpa/qplatforminputcontext.h>
 
 #include <QtGui/private/qguiapplication_p.h>
 
@@ -124,12 +126,11 @@ QQnxIntegration::QQnxIntegration(const QStringList &paramList)
     : QPlatformIntegration()
     , m_screenEventThread(0)
     , m_navigatorEventHandler(new QQnxNavigatorEventHandler())
-    , m_virtualKeyboard(0)
 #if QT_CONFIG(qqnx_pps)
     , m_navigatorEventNotifier(0)
-    , m_inputContext(0)
     , m_buttonsNotifier(new QQnxButtonEventNotifier())
 #endif
+    , m_inputContext(0)
     , m_services(0)
     , m_fontDatabase(new QGenericUnixFontDatabase())
     , m_eventDispatcher(createUnixEventDispatcher())
@@ -168,15 +169,6 @@ QQnxIntegration::QQnxIntegration(const QStringList &paramList)
     m_screenEventThread->start();
 
 #if QT_CONFIG(qqnx_pps)
-    // Create/start the keyboard class.
-    m_virtualKeyboard = new QQnxVirtualKeyboardPps();
-
-    // delay invocation of start() to the time the event loop is up and running
-    // needed to have the QThread internals of the main thread properly initialized
-    QMetaObject::invokeMethod(m_virtualKeyboard, "start", Qt::QueuedConnection);
-#endif
-
-#if QT_CONFIG(qqnx_pps)
     m_navigator = new QQnxNavigatorPps();
 #endif
 
@@ -186,19 +178,8 @@ QQnxIntegration::QQnxIntegration(const QStringList &paramList)
 
     createDisplays();
 
-    if (m_virtualKeyboard) {
-        // TODO check if we need to do this for all screens or only the primary one
-        QObject::connect(m_virtualKeyboard, SIGNAL(heightChanged(int)),
-                         primaryDisplay(), SLOT(keyboardHeightChanged(int)));
-
-#if QT_CONFIG(qqnx_pps)
-        // Set up the input context
-        m_inputContext = new QQnxInputContext(this, *m_virtualKeyboard);
-#if QT_CONFIG(qqnx_imf)
-        m_screenEventHandler->addScreenEventFilter(m_inputContext);
-#endif
-#endif
-    }
+    // Set up the input context
+    m_inputContext = QPlatformInputContextFactory::create();
 
 #if QT_CONFIG(qqnx_pps)
     // delay invocation of start() to the time the event loop is up and running
@@ -251,12 +232,9 @@ QQnxIntegration::~QQnxIntegration()
     // Destroy the hardware button notifier
     delete m_buttonsNotifier;
 
+#endif
     // Destroy input context
     delete m_inputContext;
-#endif
-
-    // Destroy the keyboard class.
-    delete m_virtualKeyboard;
 
     // Destroy services class
     delete m_services;
@@ -317,13 +295,11 @@ QPlatformOpenGLContext *QQnxIntegration::createPlatformOpenGLContext(QOpenGLCont
 }
 #endif
 
-#if QT_CONFIG(qqnx_pps)
 QPlatformInputContext *QQnxIntegration::inputContext() const
 {
     qIntegrationDebug();
     return m_inputContext;
 }
-#endif
 
 void QQnxIntegration::moveToScreen(QWindow *window, int screen)
 {
diff --git a/src/plugins/platforms/qnx/qqnxintegration.h b/src/plugins/platforms/qnx/qqnxintegration.h
index d1ebb1d..b29f761 100644
--- a/src/plugins/platforms/qnx/qqnxintegration.h
+++ b/src/plugins/platforms/qnx/qqnxintegration.h
@@ -96,9 +96,7 @@ public:
     QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override;
 #endif
 
-#if QT_CONFIG(qqnx_pps)
     QPlatformInputContext *inputContext() const override;
-#endif
 
     void moveToScreen(QWindow *window, int screen);
 
@@ -142,12 +140,11 @@ private:
     static screen_context_t ms_screenContext;
     QQnxScreenEventThread *m_screenEventThread;
     QQnxNavigatorEventHandler *m_navigatorEventHandler;
-    QQnxAbstractVirtualKeyboard *m_virtualKeyboard;
 #if QT_CONFIG(qqnx_pps)
     QQnxNavigatorEventNotifier *m_navigatorEventNotifier;
-    QQnxInputContext *m_inputContext;
     QQnxButtonEventNotifier *m_buttonsNotifier;
 #endif
+    QPlatformInputContext *m_inputContext;
     QQnxServices *m_services;
     QPlatformFontDatabase *m_fontDatabase;
     mutable QAbstractEventDispatcher *m_eventDispatcher;
