diff --git a/configure b/configure
index 12b08aa9c856133cc92d98561e8652bc4758f8d9..74fa27352bf7d46890041d1d41e9481da580d178 100755
--- a/configure
+++ b/configure
@@ -6293,6 +6293,11 @@ if [ "$PLATFORM_QPA" = "yes" ]; then
         QMAKE_LIBDIR_WAYLAND=`$PKG_CONFIG --variable=libdir wayland-client 2>/dev/null`
     fi
 
+    # Check we actually have X11 :-)
+    if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/xlib "XLib" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then
+        QT_CONFIG="$QT_CONFIG xlib"
+    fi
+
     # Detect libxkbcommon
     if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists xkbcommon 2>/dev/null; then
         QMAKE_CFLAGS_XKBCOMMON="`$PKG_CONFIG --cflags xkbcommon 2>/dev/null`"
diff --git a/mkspecs/features/qpa/basicunixfontdatabase.prf b/mkspecs/features/qpa/basicunixfontdatabase.prf
new file mode 100644
index 0000000000000000000000000000000000000000..261eadb5d02ecb29cfe6b87fb930e2daa9efa180
--- /dev/null
+++ b/mkspecs/features/qpa/basicunixfontdatabase.prf
@@ -0,0 +1,3 @@
+contains(QT_CONFIG, system-freetype) {
+    LIBS += -lfreetype
+}
diff --git a/mkspecs/features/qpa/dnd/simple.prf b/mkspecs/features/qpa/dnd/simple.prf
deleted file mode 100644
index 9333110faeaadfdafe2d4a22136e3fe274fc0c36..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/dnd/simple.prf
+++ /dev/null
@@ -1,5 +0,0 @@
-load(qpa/platforms_dir)
-INCLUDEPATH += $$QT_PLATFORMS_DIR/dnd
-HEADERS += $$QT_PLATFORMS_DIR/dnd/qsimpledrag.h
-SOURCES += $$QT_PLATFORMS_DIR/dnd/qsimpledrag.cpp
-QT += gui-private
diff --git a/mkspecs/features/qpa/egl/context.prf b/mkspecs/features/qpa/egl/context.prf
deleted file mode 100644
index 0689a3e71e2c513729197acf5985f2a7bdc706b4..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/egl/context.prf
+++ /dev/null
@@ -1,9 +0,0 @@
-load(qpa/platforms_dir)
-
-INCLUDEPATH += $$QT_PLATFORMS_DIR/eglconvenience
-
-SOURCES += \
-    $$QT_PLATFORMS_DIR/eglconvenience/qeglplatformcontext.cpp
-
-HEADERS += \
-    $$QT_PLATFORMS_DIR/eglconvenience/qeglplatformcontext.h
diff --git a/mkspecs/features/qpa/egl/convenience.prf b/mkspecs/features/qpa/egl/convenience.prf
deleted file mode 100644
index e1449cb5e59be57de2d828f9124e3efe005c97ca..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/egl/convenience.prf
+++ /dev/null
@@ -1,9 +0,0 @@
-load(qpa/platforms_dir)
-
-INCLUDEPATH += $$QT_PLATFORMS_DIR/eglconvenience
-
-SOURCES += \
-    $$QT_PLATFORMS_DIR/eglconvenience/qeglconvenience.cpp
-
-HEADERS += \
-    $$QT_PLATFORMS_DIR/eglconvenience/qeglconvenience.h
diff --git a/mkspecs/features/qpa/egl/xlibintegration.prf b/mkspecs/features/qpa/egl/xlibintegration.prf
deleted file mode 100644
index ad267f17b75329ea2c26676f1b5478601e08561a..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/egl/xlibintegration.prf
+++ /dev/null
@@ -1,9 +0,0 @@
-load(qpa/platforms_dir)
-
-INCLUDEPATH += $$QT_PLATFORMS_DIR/eglconvenience
-
-HEADERS += \
-    $$QT_PLATFORMS_DIR/eglconvenience/qxlibeglintegration.h
-
-SOURCES += \
-    $$QT_PLATFORMS_DIR/eglconvenience/qxlibeglintegration.cpp
diff --git a/mkspecs/features/qpa/fontdatabases/fontconfig.prf b/mkspecs/features/qpa/fontdatabases/fontconfig.prf
deleted file mode 100644
index 7091aeaf2de005f61435b5a83d25e9f234946520..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/fontdatabases/fontconfig.prf
+++ /dev/null
@@ -1,12 +0,0 @@
-load(qpa/fontdatabases/basicunix)
-
-HEADERS += \
-        $$QT_PLATFORMS_DIR/fontdatabases/fontconfig/qfontconfigdatabase.h
-
-SOURCES += \
-        $$QT_PLATFORMS_DIR/fontdatabases/fontconfig/qfontconfigdatabase.cpp
-
-INCLUDEPATH += $$QT_PLATFORMS_DIR/fontdatabases/fontconfig
-LIBS_PRIVATE += -lfontconfig
-
-
diff --git a/mkspecs/features/qpa/fontdatabases/genericunix.prf b/mkspecs/features/qpa/fontdatabases/genericunix.prf
deleted file mode 100644
index 014bdd372605b3fef175c375dab40c9396b35a3a..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/fontdatabases/genericunix.prf
+++ /dev/null
@@ -1,9 +0,0 @@
-contains(QT_CONFIG, fontconfig) {
-    load(qpa/fontdatabases/fontconfig)
-    DEFINES += Q_FONTCONFIGDATABASE
-} else {
-    load(qpa/fontdatabases/basicunix.prf)
-}
-
-INCLUDEPATH += $$QT_PLATFORMS_DIR/fontdatabases/genericunix
-HEADERS += $$QT_PLATFORMS_DIR/fontdatabases/genericunix/qgenericunixfontdatabase.h
diff --git a/mkspecs/features/qpa/fontengine_dir.prf b/mkspecs/features/qpa/fontengine_dir.prf
deleted file mode 100644
index ac88e03110cbac45c07461871949f113d33930db..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/fontengine_dir.prf
+++ /dev/null
@@ -1,9 +0,0 @@
-load(qpa/platforms_dir)
-
-QT_FONTENGINE_DIR = ""
-
-isEmpty(QT_SOURCE_TREE) {
-    QT_FONTENGINE_DIR = $$QT_PLATFORMS_DIR/fontdatabases/fontengines
-} else {
-    QT_FONTENGINE_DIR = $$QT_SOURCE_TREE/src/gui/text
-}
diff --git a/mkspecs/features/qpa/freetype_dir.prf b/mkspecs/features/qpa/freetype_dir.prf
deleted file mode 100644
index b3591f2a88aba5488e406aa2f9cff9a276bba407..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/freetype_dir.prf
+++ /dev/null
@@ -1,8 +0,0 @@
-load(qpa/platforms_dir)
-
-QT_FREETYPE_DIR = ""
-isEmpty(QT_SOURCE_TREE) {
-    QT_FREETYPE_DIR = $$QT_PLATFORMS_DIR/fontdatabases/freetype
-} else {
-    QT_FREETYPE_DIR = $$QT_SOURCE_TREE/src/3rdparty/freetype
-}
diff --git a/mkspecs/features/qpa/genericunixfontdatabase.prf b/mkspecs/features/qpa/genericunixfontdatabase.prf
new file mode 100644
index 0000000000000000000000000000000000000000..20b31a7e67d72c027236bb1832def8bdfba63bd2
--- /dev/null
+++ b/mkspecs/features/qpa/genericunixfontdatabase.prf
@@ -0,0 +1,5 @@
+CONFIG += qpa/basicunixfontdatabase
+contains(QT_CONFIG, fontconfig) {
+    DEFINES += Q_FONTCONFIGDATABASE
+    LIBS += -lfontconfig
+}
diff --git a/mkspecs/features/qpa/glx/convenience.prf b/mkspecs/features/qpa/glx/convenience.prf
deleted file mode 100644
index 41ef193a992165401ba875fe25fb3c1068939972..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/glx/convenience.prf
+++ /dev/null
@@ -1,16 +0,0 @@
-load(qpa/platforms_dir)
-INCLUDEPATH += $$QT_PLATFORMS_DIR/glxconvenience
-
-HEADERS += \
-    $$QT_PLATFORMS_DIR/glxconvenience/qglxconvenience.h
-
-SOURCES += \
-    $$QT_PLATFORMS_DIR/glxconvenience/qglxconvenience.cpp
-
-CONFIG += xrender
-
-xrender {
-	LIBS += -lXrender
-} else {
-	DEFINES += QT_NO_XRENDER
-}
diff --git a/mkspecs/features/qpa/harfbuzz_dir.prf b/mkspecs/features/qpa/harfbuzz_dir.prf
deleted file mode 100644
index b0a368f031aeca574ede89eb56ba2c8ed6ec1383..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/harfbuzz_dir.prf
+++ /dev/null
@@ -1,9 +0,0 @@
-load(qpa/platforms_dir)
-
-QT_HARFBUZZ_DIR = ""
-isEmpty(QT_SOURCE_TREE) {
-    QT_HARFBUZZ_DIR = $$QT_PLATFORMS_DIR/fontdatabases/harfbuzz
-} else {
-    QT_HARFBUZZ_DIR = $$QT_SOURCE_TREE/src/3rdparty/harfbuzz
-}
-
diff --git a/mkspecs/features/qpa/platforms_dir.prf b/mkspecs/features/qpa/platforms_dir.prf
deleted file mode 100644
index edb313c84f81ca3befbf1540217df17b5932a816..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/platforms_dir.prf
+++ /dev/null
@@ -1,7 +0,0 @@
-QT_PLATFORMS_DIR = ""
-
-isEmpty(QT_SOURCE_TREE) {
-    QT_PLATFORMS_DIR = $$[QT_INSTALL_DATA]/platforms
-} else {
-    QT_PLATFORMS_DIR = $$QT_SOURCE_TREE/src/plugins/platforms
-}
diff --git a/mkspecs/features/qpa/plugin.prf b/mkspecs/features/qpa/plugin.prf
deleted file mode 100644
index d2ee6a2a55c1e783a0ad59b22570b2a7c106c4de..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/plugin.prf
+++ /dev/null
@@ -1,5 +0,0 @@
-TEMPLATE = lib
-
-CONFIG += qt plugin
-
-TARGET = $$qtLibraryTarget($$TARGET)
diff --git a/mkspecs/features/qpa/printersupport/genericunix.prf b/mkspecs/features/qpa/printersupport/genericunix.prf
deleted file mode 100644
index c5af64681561c9cf8e22b7f5ce7c13c6ae86d03f..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/printersupport/genericunix.prf
+++ /dev/null
@@ -1,6 +0,0 @@
-load(qpa/platforms_dir)
-
-INCLUDEPATH += $$QT_PLATFORMS_DIR/printersupport/genericunix
-HEADERS += $$QT_PLATFORMS_DIR/printersupport/genericunix/qgenericunixprintersupport.h
-SOURCES += $$QT_PLATFORMS_DIR/printersupport/genericunix/qgenericunixprintersupport.cpp
-QT += gui-private
diff --git a/mkspecs/features/qpa/printersupport/windows.prf b/mkspecs/features/qpa/printersupport/windows.prf
deleted file mode 100644
index 40043259ddf19efefce8a4d2b963e6d69f14abdb..0000000000000000000000000000000000000000
--- a/mkspecs/features/qpa/printersupport/windows.prf
+++ /dev/null
@@ -1,13 +0,0 @@
-load(qpa/platforms_dir)
-load(qpa/harfbuzz_dir)
-
-INCLUDEPATH += $$QT_PLATFORMS_DIR/printersupport/windows
-INCLUDEPATH += $$QT_HARFBUZZ_DIR/src
-
-HEADERS += \
-    $$QT_PLATFORMS_DIR/printersupport/windows/qwindowsprintersupport.h \
-    $$QT_PLATFORMS_DIR/printersupport/windows/qprintengine_win_p.h
-SOURCES += \
-    $$QT_PLATFORMS_DIR/printersupport/windows/qwindowsprintersupport.cpp \
-    $$QT_PLATFORMS_DIR/printersupport/windows/qprintengine_win.cpp
-QT += core-private widgets-private
diff --git a/src/modules/qt_platformsupport.pri b/src/modules/qt_platformsupport.pri
new file mode 100644
index 0000000000000000000000000000000000000000..199beaf56311468fdd0b406e8a9982abb551e792
--- /dev/null
+++ b/src/modules/qt_platformsupport.pri
@@ -0,0 +1,14 @@
+QT.platformsupport.VERSION = 5.0.0
+QT.platformsupport.MAJOR_VERSION = 5
+QT.platformsupport.MINOR_VERSION = 0
+QT.platformsupport.PATCH_VERSION = 0
+
+QT.platformsupport.name = QtPlatformSupport
+QT.platformsupport.includes = $$QT_MODULE_INCLUDE_BASE/QtPlatformSupport
+QT.platformsupport.private_includes = $$QT_MODULE_INCLUDE_BASE/QtPlatformSupport/$$QT.platformsupport.VERSION
+QT.platformsupport.sources = $$QT_MODULE_BASE/src/platformsupport
+QT.platformsupport.libs = $$QT_MODULE_LIB_BASE
+QT.platformsupport.plugins = $$QT_MODULE_PLUGIN_BASE
+QT.platformsupport.imports = $$QT_MODULE_IMPORT_BASE
+QT.platformsupport.depends = core gui
+QT.platformsupport.DEFINES =
diff --git a/src/platformsupport/dnd/dnd.pri b/src/platformsupport/dnd/dnd.pri
new file mode 100644
index 0000000000000000000000000000000000000000..e100dd10cbf616d42cbb4dab086e4d5b3746e3ed
--- /dev/null
+++ b/src/platformsupport/dnd/dnd.pri
@@ -0,0 +1,4 @@
+HEADERS += \
+    $$PWD/qsimpledrag_p.h
+SOURCES += \
+    $$PWD/qsimpledrag.cpp
diff --git a/src/plugins/platforms/dnd/qsimpledrag.cpp b/src/platformsupport/dnd/qsimpledrag.cpp
similarity index 99%
rename from src/plugins/platforms/dnd/qsimpledrag.cpp
rename to src/platformsupport/dnd/qsimpledrag.cpp
index 8032149875b77035d0aa6018a628cbc968a1cfa8..72da29c063d39f9e8de96465f19723de6f4e95dd 100644
--- a/src/plugins/platforms/dnd/qsimpledrag.cpp
+++ b/src/platformsupport/dnd/qsimpledrag.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include "qsimpledrag.h"
+#include "qsimpledrag_p.h"
 
 #include "qbitmap.h"
 #include "qdrag.h"
diff --git a/src/plugins/platforms/dnd/qsimpledrag.h b/src/platformsupport/dnd/qsimpledrag_p.h
similarity index 100%
rename from src/plugins/platforms/dnd/qsimpledrag.h
rename to src/platformsupport/dnd/qsimpledrag_p.h
diff --git a/src/platformsupport/eglconvenience/eglconvenience.pri b/src/platformsupport/eglconvenience/eglconvenience.pri
new file mode 100644
index 0000000000000000000000000000000000000000..f8500e2de0a54bf9f39862af5810d7478cb309db
--- /dev/null
+++ b/src/platformsupport/eglconvenience/eglconvenience.pri
@@ -0,0 +1,15 @@
+contains(QT_CONFIG,opengles2) {
+    HEADERS += \
+        $$PWD/qeglconvenience_p.h \
+        $$PWD/qeglplatformcontext_p.h
+    SOURCES += \
+        $$PWD/qeglconvenience.cpp \
+        $$PWD/qeglplatformcontext.cpp
+
+    contains(QT_CONFIG,xlib) {
+        HEADERS += \
+            $$PWD/qxlibeglintegration_p.h
+        SOURCES += \
+            $$PWD/qxlibeglintegration.cpp
+    }
+}
diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/platformsupport/eglconvenience/qeglconvenience.cpp
similarity index 99%
rename from src/plugins/platforms/eglconvenience/qeglconvenience.cpp
rename to src/platformsupport/eglconvenience/qeglconvenience.cpp
index 2f686d6f766d70b894a6e99b8d404bcc4fe5af76..a9973b642acf8582a04eb19596a592933b1f4d5a 100644
--- a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp
+++ b/src/platformsupport/eglconvenience/qeglconvenience.cpp
@@ -41,7 +41,7 @@
 
 #include <QByteArray>
 
-#include "qeglconvenience.h"
+#include "qeglconvenience_p.h"
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/platformsupport/eglconvenience/qeglconvenience_p.h
similarity index 100%
rename from src/plugins/platforms/eglconvenience/qeglconvenience.h
rename to src/platformsupport/eglconvenience/qeglconvenience_p.h
diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/platformsupport/eglconvenience/qeglplatformcontext.cpp
similarity index 98%
rename from src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
rename to src/platformsupport/eglconvenience/qeglplatformcontext.cpp
index c96e8ed67a82d161c3663210fe3ffd81dca2889b..bb2d167c817f6eaf002f215ec42da8dd8ffcc3e4 100644
--- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
+++ b/src/platformsupport/eglconvenience/qeglplatformcontext.cpp
@@ -39,13 +39,12 @@
 **
 ****************************************************************************/
 
-#include "qeglplatformcontext.h"
+#include "qeglplatformcontext_p.h"
 
+#include "qeglconvenience_p.h"
 
 #include <QtGui/QPlatformWindow>
 
-#include "qeglconvenience.h"
-
 #include <EGL/egl.h>
 
 QEGLSurface::QEGLSurface(EGLSurface surface, const QGuiGLFormat &format)
diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
similarity index 100%
rename from src/plugins/platforms/eglconvenience/qeglplatformcontext.h
rename to src/platformsupport/eglconvenience/qeglplatformcontext_p.h
diff --git a/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp b/src/platformsupport/eglconvenience/qxlibeglintegration.cpp
similarity index 99%
rename from src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp
rename to src/platformsupport/eglconvenience/qxlibeglintegration.cpp
index cbd8f7d7c6f890e3ecd7f960970211627c620c5b..aeebd35d21bb5f6f4cecef3c654dda6b3de8818c 100644
--- a/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp
+++ b/src/platformsupport/eglconvenience/qxlibeglintegration.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include "qxlibeglintegration.h"
+#include "qxlibeglintegration_p.h"
 
 static int countBits(unsigned long mask)
 {
diff --git a/src/plugins/platforms/eglconvenience/qxlibeglintegration.h b/src/platformsupport/eglconvenience/qxlibeglintegration_p.h
similarity index 98%
rename from src/plugins/platforms/eglconvenience/qxlibeglintegration.h
rename to src/platformsupport/eglconvenience/qxlibeglintegration_p.h
index 1d02ab86770857f71d78b4052f81a5914de77c70..cce394758d0052971c3ab7f254e6e488f020ba81 100644
--- a/src/plugins/platforms/eglconvenience/qxlibeglintegration.h
+++ b/src/platformsupport/eglconvenience/qxlibeglintegration_p.h
@@ -42,7 +42,7 @@
 #ifndef QTESTLITEEGLINTEGRATION_H
 #define QTESTLITEEGLINTEGRATION_H
 
-#include "qeglconvenience.h"
+#include "qeglconvenience_p.h"
 
 class QXlibEglIntegration
 {
diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/platformsupport/fb_base/fb_base.cpp
similarity index 99%
rename from src/plugins/platforms/fb_base/fb_base.cpp
rename to src/platformsupport/fb_base/fb_base.cpp
index a83d739083bb2814b5119435f3221785b6f30c86..aa395fec292837cc2725916c776c688ac25916b4 100644
--- a/src/plugins/platforms/fb_base/fb_base.cpp
+++ b/src/platformsupport/fb_base/fb_base.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include "fb_base.h"
+#include "fb_base_p.h"
 #include <qpainter.h>
 #include <qdebug.h>
 #include <qbitmap.h>
diff --git a/src/platformsupport/fb_base/fb_base.pri b/src/platformsupport/fb_base/fb_base.pri
new file mode 100644
index 0000000000000000000000000000000000000000..e80125d54ec104b493cfc867e222a45006da7aaa
--- /dev/null
+++ b/src/platformsupport/fb_base/fb_base.pri
@@ -0,0 +1,4 @@
+do_not_compile_untill_ported_to_qt5 {
+    SOURCES += $$PWD/fb_base.cpp
+    HEADERS += $$PWD/fb_base_p.h
+}
diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/platformsupport/fb_base/fb_base_p.h
similarity index 100%
rename from src/plugins/platforms/fb_base/fb_base.h
rename to src/platformsupport/fb_base/fb_base_p.h
diff --git a/mkspecs/features/qpa/fontdatabases/basicunix.prf b/src/platformsupport/fontdatabases/basicunix/basicunix.pri
similarity index 58%
rename from mkspecs/features/qpa/fontdatabases/basicunix.prf
rename to src/platformsupport/fontdatabases/basicunix/basicunix.pri
index d31b89e07445f0e73d932055e376e0e475b5ae32..bd57b384b30c6fafd593cf081c5b5ea62126885f 100644
--- a/mkspecs/features/qpa/fontdatabases/basicunix.prf
+++ b/src/platformsupport/fontdatabases/basicunix/basicunix.pri
@@ -1,29 +1,22 @@
-#### Remove this define
 DEFINES += QT_NO_FONTCONFIG
-
 QT += gui-private core-private
 
-load(qpa/platforms_dir)
-load(qpa/harfbuzz_dir)
-load(qpa/freetype_dir)
-load(qpa/fontengine_dir)
-
-
 HEADERS += \
-        $$QT_PLATFORMS_DIR/fontdatabases/basicunix/qbasicunixfontdatabase.h \
-        $$QT_FONTENGINE_DIR/qfontengine_ft_p.h
+        $$PWD/qbasicunixfontdatabase_p.h \
+        $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft_p.h
 
 SOURCES += \
-        $$QT_PLATFORMS_DIR/fontdatabases/basicunix/qbasicunixfontdatabase.cpp \
-        $$QT_FONTENGINE_DIR/qfontengine_ft.cpp
+        $$PWD/qbasicunixfontdatabase.cpp \
+        $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp
 
-INCLUDEPATH += $$QT_HARFBUZZ_DIR/src
+INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/harfbuzz/src
 
-INCLUDEPATH += $$QT_PLATFORMS_DIR/fontdatabases/basicunix
+INCLUDEPATH += $$PWD
 
 CONFIG += opentype
 
 contains(QT_CONFIG, freetype) {
+    QT_FREETYPE_DIR = $$QT_SOURCE_TREE/src/3rdparty/freetype
     SOURCES += \
                $$QT_FREETYPE_DIR/src/base/ftbase.c \
                $$QT_FREETYPE_DIR/src/base/ftbbox.c \
@@ -69,37 +62,27 @@ contains(QT_CONFIG, freetype) {
                $$QT_FREETYPE_DIR/src/autofit/afloader.c\
                $$QT_FREETYPE_DIR/src/autofit/autofit.c
 
-               symbian {
-                   SOURCES += \
-                              $$QT_FREETYPE_DIR/src/base/ftsystem.c
-               } else {
-                   SOURCES += \
-                              $$QT_FREETYPE_DIR/builds/unix/ftsystem.c
-                  INCLUDEPATH += \
-                              $$QT_FREETYPE_DIR/builds/unix
-               }
+   symbian {
+       SOURCES += \
+                  $$QT_FREETYPE_DIR/src/base/ftsystem.c
+   } else {
+       SOURCES += \
+                  $$QT_FREETYPE_DIR/builds/unix/ftsystem.c
+      INCLUDEPATH += \
+                  $$QT_FREETYPE_DIR/builds/unix
+   }
 
-               INCLUDEPATH += \
-                   $$QT_FREETYPE_DIR/src \
-                   $$QT_FREETYPE_DIR/include
+   INCLUDEPATH += \
+       $$QT_FREETYPE_DIR/src \
+       $$QT_FREETYPE_DIR/include
 
-               DEFINES += FT2_BUILD_LIBRARY
-               contains(QT_CONFIG, system-zlib) {
-                    DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
-               }
+   DEFINES += FT2_BUILD_LIBRARY
+   contains(QT_CONFIG, system-zlib) {
+        DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
+   }
 
-    } else:contains(QT_CONFIG, system-freetype) {
-        # pull in the proper freetype2 include directory
-        #include($$QT_SOURCE_TREE/config.tests/unix/freetype/freetype.pri)
-        !cross_compile {
-            TRY_INCLUDEPATHS = /include /usr/include $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
-            # LSB doesn't allow using headers from /include or /usr/include
-            linux-lsb-g++:TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
-            for(p, TRY_INCLUDEPATHS) {
-                p = $$join(p, "", "", "/freetype2")
-                exists($$p):INCLUDEPATH *= $$p
-            }
-        }
-        LIBS_PRIVATE += -lfreetype
-    }
+} else:contains(QT_CONFIG, system-freetype) {
+    # pull in the proper freetype2 include directory
+    include($$QT_SOURCE_TREE/config.tests/unix/freetype/freetype.pri)
+}
 
diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp b/src/platformsupport/fontdatabases/basicunix/qbasicunixfontdatabase.cpp
similarity index 98%
rename from src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp
rename to src/platformsupport/fontdatabases/basicunix/qbasicunixfontdatabase.cpp
index 38cbe2cbf61f101a07cdd16c26c95659edbec18e..1b0966d4b8b97d0a7514126ba4d04b5fbc38969a 100644
--- a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp
+++ b/src/platformsupport/fontdatabases/basicunix/qbasicunixfontdatabase.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include "qbasicunixfontdatabase.h"
+#include "qbasicunixfontdatabase_p.h"
 
 #include <QtGui/private/qguiapplication_p.h>
 #include <QtGui/QPlatformScreen>
@@ -312,12 +312,12 @@ QStringList QBasicUnixFontDatabase::addTTFile(const QByteArray &fontData, const
 
         QString family = QString::fromAscii(face->family_name);
         FontFile *fontFile = new FontFile;
-        fontFile->fileName = file;
+        fontFile->fileName = QString::fromAscii(file);
         fontFile->indexValue = index;
 
         QFont::Stretch stretch = QFont::Unstretched;
 
-        registerFont(family,"",weight,style,stretch,true,true,0,writingSystems,fontFile);
+        registerFont(family,QString(),weight,style,stretch,true,true,0,writingSystems,fontFile);
 
         families.append(family);
 
diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h b/src/platformsupport/fontdatabases/basicunix/qbasicunixfontdatabase_p.h
similarity index 100%
rename from src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h
rename to src/platformsupport/fontdatabases/basicunix/qbasicunixfontdatabase_p.h
diff --git a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri
new file mode 100644
index 0000000000000000000000000000000000000000..2efcb4d4dcc2ce602444d31f8a6593d1143a0254
--- /dev/null
+++ b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri
@@ -0,0 +1,2 @@
+HEADERS += $$PWD/qfontconfigdatabase_p.h
+SOURCES += $$PWD/qfontconfigdatabase.cpp
diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
similarity index 97%
rename from src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp
rename to src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index aeb0c761350a8af19c986a9ded3abd4fa5f2dcc1..d506d7c0f84531a368b45f3267347ec67ed50bbe 100644
--- a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include "qfontconfigdatabase.h"
+#include "qfontconfigdatabase_p.h"
 
 #include <QtCore/QList>
 #include <QtGui/private/qfont_p.h>
@@ -446,10 +446,11 @@ void QFontconfigDatabase::populateFontDatabase()
     ws.setSupported(QFontDatabase::Latin);
 
 
+    QString familyQtName = QString::fromLatin1(f->qtname);
     while (f->qtname) {
-        registerFont(f->qtname,QLatin1String(""),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,0,ws,0);
-        registerFont(f->qtname,QLatin1String(""),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,0,ws,0);
-        registerFont(f->qtname,QLatin1String(""),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,0,ws,0);
+        registerFont(familyQtName,QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,0,ws,0);
+        registerFont(familyQtName,QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,0,ws,0);
+        registerFont(familyQtName,QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,0,ws,0);
         ++f;
     }
 
diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
similarity index 97%
rename from src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h
rename to src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
index 61700e391a0962d5c6af6baaefac36e0b1cc6f27..5a5e4b670f78ce865c5367bc108c7abce80e7479 100644
--- a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
@@ -43,7 +43,7 @@
 #define QFONTCONFIGDATABASE_H
 
 #include <QPlatformFontDatabase>
-#include "qbasicunixfontdatabase.h"
+#include <QtPlatformSupport/private/qbasicunixfontdatabase_p.h>
 
 class QFontconfigDatabase : public QBasicUnixFontDatabase
 {
diff --git a/src/platformsupport/fontdatabases/fontdatabases.pri b/src/platformsupport/fontdatabases/fontdatabases.pri
new file mode 100644
index 0000000000000000000000000000000000000000..609a548ad1050ec7a842c523e21d6cfcd43badae
--- /dev/null
+++ b/src/platformsupport/fontdatabases/fontdatabases.pri
@@ -0,0 +1,7 @@
+unix {
+    include($$PWD/basicunix/basicunix.pri)
+    include($$PWD/genericunix/genericunix.pri)
+    contains(QT_CONFIG,fontconfig) {
+        include($$PWD/fontconfig/fontconfig.pri)
+    }
+}
diff --git a/src/platformsupport/fontdatabases/genericunix/genericunix.pri b/src/platformsupport/fontdatabases/genericunix/genericunix.pri
new file mode 100644
index 0000000000000000000000000000000000000000..e9db6c07e2cf632d1ca002af69700f1604021f96
--- /dev/null
+++ b/src/platformsupport/fontdatabases/genericunix/genericunix.pri
@@ -0,0 +1 @@
+HEADERS += $$PWD/qgenericunixfontdatabase_p.h
diff --git a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h
similarity index 94%
rename from src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h
rename to src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h
index 8bf542a215cec9c42ae1323d650935961f326457..721bccd585e80da189af6758ee241cca52e2d201 100644
--- a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h
+++ b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h
@@ -43,10 +43,10 @@
 #define QGENERICUNIXFONTDATABASE_H
 
 #ifdef Q_FONTCONFIGDATABASE
-#include "qfontconfigdatabase.h"
+#include "QtPlatformSupport/private/qfontconfigdatabase_p.h"
 typedef QFontconfigDatabase QGenericUnixFontDatabase;
 #else
-#include "qbasicunixfontdatabase.h"
+#include "QtPlatformSupport/private/qbasicunixfontdatabase_p.h"
 typedef QBasicUnixFontDatabase QGenericUnixFontDatabase;
 #endif //Q_FONTCONFIGDATABASE
 
diff --git a/src/platformsupport/glxconvenience/glxconvenience.pri b/src/platformsupport/glxconvenience/glxconvenience.pri
new file mode 100644
index 0000000000000000000000000000000000000000..5b65e13306f54dfbce28b61089fa914dc6315b1e
--- /dev/null
+++ b/src/platformsupport/glxconvenience/glxconvenience.pri
@@ -0,0 +1,6 @@
+contains(QT_CONFIG,xlib) {
+    contains(QT_CONFIG,opengl):!contains(QT_CONFIG,opengles2) {
+        HEADERS += $$PWD/qglxconvenience_p.h
+        SOURCES += $$PWD/qglxconvenience.cpp
+    }
+}
diff --git a/src/plugins/platforms/glxconvenience/qglxconvenience.cpp b/src/platformsupport/glxconvenience/qglxconvenience.cpp
similarity index 99%
rename from src/plugins/platforms/glxconvenience/qglxconvenience.cpp
rename to src/platformsupport/glxconvenience/qglxconvenience.cpp
index 189ab397d22b544c2c9e8745746a6f5023e004c3..fc506df3bda0d0a6d442e4a5dd4f5c016e78539c 100644
--- a/src/plugins/platforms/glxconvenience/qglxconvenience.cpp
+++ b/src/platformsupport/glxconvenience/qglxconvenience.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include "qglxconvenience.h"
+#include "qglxconvenience_p.h"
 
 #include <QtCore/QVector>
 
diff --git a/src/plugins/platforms/glxconvenience/qglxconvenience.h b/src/platformsupport/glxconvenience/qglxconvenience_p.h
similarity index 100%
rename from src/plugins/platforms/glxconvenience/qglxconvenience.h
rename to src/platformsupport/glxconvenience/qglxconvenience_p.h
diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro
new file mode 100644
index 0000000000000000000000000000000000000000..33b651a73f3a52d8e6a3343e8d8c47b78f31a7b6
--- /dev/null
+++ b/src/platformsupport/platformsupport.pro
@@ -0,0 +1,23 @@
+TARGET	   = QtPlatformSupport
+QPRO_PWD   = $$PWD
+QT         += core-private gui-private
+
+CONFIG += module staticlib
+MODULE_PRI = ../modules/qt_platformssupport.pri
+
+unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui
+
+include(../qbase.pri)
+
+HEADERS += $$QT_SOURCE_TREE/src/platforms_libs/qtplatformslibsversion.h
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
+
+include(dnd/dnd.pri)
+include(eglconvenience/eglconvenience.pri)
+include(fb_base/fb_base.pri)
+include(fontdatabases/fontdatabases.pri)
+include(glxconvenience/glxconvenience.pri)
+include(printersupport/printersupport.pri)
+
diff --git a/src/platformsupport/printersupport/genericunix/genericunix.pri b/src/platformsupport/printersupport/genericunix/genericunix.pri
new file mode 100644
index 0000000000000000000000000000000000000000..06bd1b6d21f243721b5abf7268ad484760ef4048
--- /dev/null
+++ b/src/platformsupport/printersupport/genericunix/genericunix.pri
@@ -0,0 +1,2 @@
+HEADERS += $$PWD/qgenericunixprintersupport_p.h
+SOURCES += $$PWD/qgenericunixprintersupport.cpp
diff --git a/src/plugins/platforms/printersupport/genericunix/qgenericunixprintersupport.cpp b/src/platformsupport/printersupport/genericunix/qgenericunixprintersupport.cpp
similarity index 98%
rename from src/plugins/platforms/printersupport/genericunix/qgenericunixprintersupport.cpp
rename to src/platformsupport/printersupport/genericunix/qgenericunixprintersupport.cpp
index 61caa8705aade0e22e8182f5ae6715ffd3a8dd28..ae66ce859fd7c0d30ea2edb3890ee29f0988693a 100644
--- a/src/plugins/platforms/printersupport/genericunix/qgenericunixprintersupport.cpp
+++ b/src/platformsupport/printersupport/genericunix/qgenericunixprintersupport.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <qgenericunixprintersupport.h>
+#include "qgenericunixprintersupport_p.h"
 
 #include <QtGui/QPrinterInfo>
 #include <private/qcups_p.h>
diff --git a/src/plugins/platforms/printersupport/genericunix/qgenericunixprintersupport.h b/src/platformsupport/printersupport/genericunix/qgenericunixprintersupport_p.h
similarity index 100%
rename from src/plugins/platforms/printersupport/genericunix/qgenericunixprintersupport.h
rename to src/platformsupport/printersupport/genericunix/qgenericunixprintersupport_p.h
diff --git a/src/platformsupport/printersupport/printersupport.pri b/src/platformsupport/printersupport/printersupport.pri
new file mode 100644
index 0000000000000000000000000000000000000000..1eca1e2d89b27c813f28f198278e94b82a920abc
--- /dev/null
+++ b/src/platformsupport/printersupport/printersupport.pri
@@ -0,0 +1,7 @@
+unix {
+    include($$PWD/genericunix/genericunix.pri)
+}
+
+win {
+    include($$PWD/windows/windows.pri)
+}
diff --git a/src/plugins/platforms/printersupport/windows/qwindowsprintersupport.cpp b/src/platformsupport/printersupport/windows/qwindowsprintersupport.cpp
similarity index 99%
rename from src/plugins/platforms/printersupport/windows/qwindowsprintersupport.cpp
rename to src/platformsupport/printersupport/windows/qwindowsprintersupport.cpp
index d5c185fee39c43764f97420b8041ccb5c2a7a8f1..62449295bbe9769e36a5d10a871294bc5e72ecad 100644
--- a/src/plugins/platforms/printersupport/windows/qwindowsprintersupport.cpp
+++ b/src/platformsupport/printersupport/windows/qwindowsprintersupport.cpp
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <qwindowsprintersupport.h>
+#include <qwindowsprintersupport_p.h>
 #include <qprintengine_win_p.h>
 
 #include <QtGui/QPrinterInfo>
diff --git a/src/plugins/platforms/printersupport/windows/qwindowsprintersupport.h b/src/platformsupport/printersupport/windows/qwindowsprintersupport_p.h
similarity index 100%
rename from src/plugins/platforms/printersupport/windows/qwindowsprintersupport.h
rename to src/platformsupport/printersupport/windows/qwindowsprintersupport_p.h
diff --git a/src/platformsupport/printersupport/windows/windows.pri b/src/platformsupport/printersupport/windows/windows.pri
new file mode 100644
index 0000000000000000000000000000000000000000..69a8c474433a5406d88a04832634ee8e2260b001
--- /dev/null
+++ b/src/platformsupport/printersupport/windows/windows.pri
@@ -0,0 +1,2 @@
+HEADERS += $$PWD/qwindowsprintersupport_p.h
+SOURCES += $$PWD/qwindowsprintersupport.cpp
diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro
index 9ad91975f3699c7590d3eb62ff45e318fd2a7545..5573b19fcd5f2ca5fbc2a24007c5450b2ebb0744 100644
--- a/src/plugins/platforms/cocoa/cocoa.pro
+++ b/src/plugins/platforms/cocoa/cocoa.pro
@@ -1,5 +1,5 @@
 TARGET = qcocoa
-load(qpa/plugin)
+load(qt_plugin)
 DESTDIR = $$QT.gui.plugins/platforms
 
 OBJECTIVE_SOURCES = main.mm \
@@ -28,8 +28,8 @@ DEFINES += QT_BUILD_COCOA_LIB
 LIBS += -lz
 LIBS += -framework cocoa
 
-QT += core-private gui-private
+QT += core-private gui-private platformsupport-private
 
-load(qpa/fontdatabases/basicunix)
+CONFIG += qpa/basicunixfontdatabase
 target.path += $$[QT_INSTALL_PLUGINS]/platforms
 INSTALLS += target
diff --git a/src/plugins/platforms/fb_base/fb_base.pri b/src/plugins/platforms/fb_base/fb_base.pri
deleted file mode 100644
index 41bd87fbcaf6199b4b45223dcc3162ecdc784b98..0000000000000000000000000000000000000000
--- a/src/plugins/platforms/fb_base/fb_base.pri
+++ /dev/null
@@ -1,2 +0,0 @@
-SOURCES += ../fb_base/fb_base.cpp
-HEADERS += ../fb_base/fb_base.h
diff --git a/src/plugins/platforms/fb_base/fb_base.pro b/src/plugins/platforms/fb_base/fb_base.pro
deleted file mode 100644
index 4ebd53b407c495c349d5367d5768af87b328bf3b..0000000000000000000000000000000000000000
--- a/src/plugins/platforms/fb_base/fb_base.pro
+++ /dev/null
@@ -1,23 +0,0 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2009-11-05T13:22:31
-#
-#-------------------------------------------------
-
-#QT       -= core gui
-TARGET = fb_base
-#load(qt_plugin)
-
-DESTDIR = $$QT.gui.plugins/graphicssystems
-
-TEMPLATE = lib
-
-#DEFINES += STATIC_LIBRARY
-CONFIG += staticlib
-
-SOURCES += fb_base.cpp
-
-HEADERS += fb_base.h
-
-target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems
-INSTALLS += target
diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro
index b8c65a3e3b84c8aa934062a3539308c54f398d64..d51b6b2ed0c6314c4bad9d5a2841f894c3a22200 100644
--- a/src/plugins/platforms/minimal/minimal.pro
+++ b/src/plugins/platforms/minimal/minimal.pro
@@ -1,5 +1,5 @@
 TARGET = qminimal
-load(qpa/plugin)
+load(qt_plugin)
 
 QT = core-private gui-private
 DESTDIR = $$QT.gui.plugins/platforms
diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglcontext.cpp b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglcontext.cpp
index 08b6f76daf9c811f71cb7a8a498ad2cf3cd5a888..c5db44da4b2f35b331814d4b3a9d924707afd176 100644
--- a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglcontext.cpp
+++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglcontext.cpp
@@ -46,7 +46,7 @@
 #include <QtCore/QDebug>
 #include <QtGui/QRegion>
 
-#include "qeglconvenience.h"
+#include "QtPlatformSupport/private/qeglconvenience_p.h"
 
 QWaylandXCompositeEGLSurface::QWaylandXCompositeEGLSurface(QWaylandXCompositeEGLWindow *window)
     : QEGLSurface(window->eglSurface(), window->window()->glFormat())
diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp
index 226bfd44d5691acb1eb2feefc6ca32eac79dffd4..4c2eaa631c11b4eebffc5b8ba446086d0d7e860e 100644
--- a/src/plugins/platforms/wayland/qwaylandintegration.cpp
+++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp
@@ -47,7 +47,7 @@
 #include "qwaylandnativeinterface.h"
 #include "qwaylandclipboard.h"
 
-#include "qgenericunixfontdatabase.h"
+#include "QtPlatformSupport/private/qgenericunixfontdatabase_p.h"
 
 #include <QtGui/QWindowSystemInterface>
 #include <QtGui/QPlatformCursor>
diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro
index b37bfbbb3b8bd08d8d2d40d1a38086dff9a4cbbf..6a6ffdffc013fda5adb4a48cb190af04f03caa9b 100644
--- a/src/plugins/platforms/wayland/wayland.pro
+++ b/src/plugins/platforms/wayland/wayland.pro
@@ -1,14 +1,14 @@
 TARGET = qwayland
-load(qpa/plugin)
+load(qt_plugin)
 
-QT+=gui-private core-private opengl-private
+CONFIG += qpa/genericunixfontdatabase
 
 DESTDIR = $$QT.gui.plugins/platforms
 
 DEFINES += Q_PLATFORM_WAYLAND
 DEFINES += $$QMAKE_DEFINES_WAYLAND
 
-QT += core-private gui-private opengl-private
+QT += core-private gui-private opengl-private platformsupport-private
 
 SOURCES =   main.cpp \
             qwaylandintegration.cpp \
@@ -37,19 +37,6 @@ INCLUDEPATH += $$QMAKE_INCDIR_WAYLAND
 LIBS += $$QMAKE_LIBS_WAYLAND
 QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_WAYLAND
 
-INCLUDEPATH += $$PWD
-
-QT += gui-private
-QT += opengl-private
-QT += core-private
-QT += widgets-private
-
-include ($$PWD/gl_integration/gl_integration.pri)
-
-include ($$PWD/windowmanager_integration/windowmanager_integration.pri)
-
-load(qpa/fontdatabases/genericunix)
-
 target.path += $$[QT_INSTALL_PLUGINS]/platforms
 INSTALLS += target
 
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index bd1924def998daf43a3c918609749364f04ef776..45d9d6919931a932b7ef6bcca850bd1fa6aa4f36 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -49,13 +49,13 @@
 #include "qxcbdrag.h"
 #include "qxcbimage.h"
 
-#include <qgenericunixprintersupport.h>
+#include <QtPlatformSupport/private/qgenericunixprintersupport_p.h>
 
 #include <xcb/xcb.h>
 
 #include <private/qpixmap_raster_p.h>
 
-#include "qgenericunixfontdatabase.h"
+#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
 
 #include <stdio.h>
 
diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
index bf8ca2a5842a8723b437ba4e0f60247d3af38884..45823fcc57c87d31442836e926ff05e55f44ed64 100644
--- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
+++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
@@ -51,7 +51,7 @@
 #include <QtGui/qguiglcontext_qpa.h>
 
 #if defined(XCB_USE_EGL)
-#include "../eglconvenience/qeglplatformcontext.h"
+#include "QtPlatformSupport/private/qeglplatformcontext_p.h"
 #elif defined (XCB_USE_DRI2)
 #include "qdri2context.h"
 #endif
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 22a476b690d00ac79450abb62b19495ac24985cb..e6bea81c30b36caf851d1573c2d6ab45e0ee8ef7 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -68,12 +68,12 @@
 #endif
 
 #if defined(XCB_USE_GLX)
-#include "qglxintegration.h"
-#include "qglxconvenience.h"
+#include <QtPlatformSupport/private/glxintegration_p.h>
+#include <QtPlatformSupport/private/glxconvenience_p.h>
 #elif defined(XCB_USE_EGL)
-#include "../eglconvenience/qeglplatformcontext.h"
-#include "../eglconvenience/qeglconvenience.h"
-#include "../eglconvenience/qxlibeglintegration.h"
+#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
+#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtPlatformSupport/private/qxlibeglintegration_p.h>
 #endif
 
 #define XCOORD_MAX 16383
diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro
index 2b545f9b1db53299b84f3f38b164b8d634592160..c8814b04f642cd4697af0d3ef307500e5fe2b141 100644
--- a/src/plugins/platforms/xcb/xcb.pro
+++ b/src/plugins/platforms/xcb/xcb.pro
@@ -1,9 +1,9 @@
 TARGET = xcb
 
-load(qpa/plugin)
+load(qt_plugin)
 QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
 
-QT += core-private gui-private
+QT += core-private gui-private platformsupport-private
 
 SOURCES = \
         qxcbclipboard.cpp \
@@ -61,14 +61,9 @@ contains(QT_CONFIG, opengl) {
     } else {
         contains(QT_CONFIG, opengles2) {
             DEFINES += XCB_USE_EGL
-            load(qpa/egl/convenience)
-            load(qpa/egl/context)
-            load(qpa/egl/xlibintegration)
-
             LIBS += -lEGL
         } else {
             DEFINES += XCB_USE_GLX
-            load(qpa/glx/convenience)
             HEADERS += qglxintegration.h
             SOURCES += qglxintegration.cpp
         }
@@ -83,8 +78,7 @@ DEFINES += $$QMAKE_DEFINES_XCB
 LIBS += $$QMAKE_LIBS_XCB
 QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XCB
 
-load(qpa/fontdatabases/genericunix)
-load(qpa/printersupport/genericunix)
+CONFIG += qpa/genericunixfontdatabase
 
 target.path += $$[QT_INSTALL_PLUGINS]/platforms
 INSTALLS += target
diff --git a/src/src.pro b/src/src.pro
index d9997421ce263f41b6543c15f3f6fd55501490fd..e9e32db91504d5f2201b3e89b2e557a735bfbc93 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -10,7 +10,7 @@ SRC_SUBDIRS += src_corelib
 !cross_compile {
     win32:!wince*: SRC_SUBDIRS += src_tools_idc
 }
-SRC_SUBDIRS += src_network src_sql src_gui src_xml src_uitools src_widgets src_testlib
+SRC_SUBDIRS += src_network src_sql src_gui src_xml src_uitools src_widgets src_testlib src_platformsupport
 nacl: SRC_SUBDIRS -= src_network src_testlib
 !symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus
 contains(QT_CONFIG, no-gui): SRC_SUBDIRS -= src_gui
@@ -50,6 +50,9 @@ src_widgets.subdir = $$QT_SOURCE_TREE/src/widgets
 src_widgets.target = sub-widgets
 src_testlib.subdir = $$QT_SOURCE_TREE/src/testlib
 src_testlib.target = sub-testlib
+src_platformsupport.subdir = $$QT_SOURCE_TREE/src/platformsupport
+src_platformsupport.target = sub-platformsupport
+
 
 #CONFIG += ordered
 !wince*:!ordered:!symbian-abld:!symbian-sbsv2 {
@@ -66,6 +69,7 @@ src_testlib.target = sub-testlib
    src_testlib.depends = src_corelib src_gui src_widgets
    src_tools_idc.depends = src_corelib             # target defined in tools.pro
    src_plugins.depends = src_gui src_sql src_xml
+   qpa: src_plugins.depends = src_platformsupport
    src_s60installs.depends = $$TOOLS_SUBDIRS $$SRC_SUBDIRS
    src_s60installs.depends -= src_s60installs
    contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2) {
diff --git a/sync.profile b/sync.profile
index 321c7f95b03c2f51a6e944c6e0091d8b0a4ed88b..db108cb833fcd624442df7b1daeddfa4c7781882 100644
--- a/sync.profile
+++ b/sync.profile
@@ -10,6 +10,7 @@
     "QtDBus" => "$basedir/src/dbus",
     "QtUiTools" => "$basedir/src/uitools",
     "QtDesigner" => "$basedir/tools/uilib",
+    "QtPlatformSupport" => "$basedir/src/platformsupport",
 );
 %moduleheaders = ( # restrict the module headers to those found in relative path
 );
@@ -60,6 +61,7 @@
     "QtXml" => "$basedir/src/modules/qt_xml.pri",
     "QtUiTools" => "$basedir/src/modules/qt_uitools.pri",
     "QtDesigner" => "$basedir/src/modules/qt_uilib.pri",
+    "QtPlatformSupport" => "$basedir/src/modules/qt_platformsupport.pri",
 );
 
 @ignore_for_master_contents = ( "qt.h", "qpaintdevicedefs.h" );
@@ -109,4 +111,8 @@
         "QtGui" => "THIS_REPOSITORY",
         "QtWidgets" => "THIS_REPOSITORY",
     },
+    "QtPlatformSupport" => {
+        "QtCore" => "THIS_REPOSITORY",
+        "QtGui" => "THIS_REPOSITORY",
+    },
 );