diff --git a/modules/qt_quickparticles.pri b/modules/qt_quickparticles.pri
new file mode 100644
index 0000000000000000000000000000000000000000..ae1064aca86cc1168ef967bae1092f2ab61b9edd
--- /dev/null
+++ b/modules/qt_quickparticles.pri
@@ -0,0 +1,17 @@
+QT.quickparticles.VERSION = 5.0.0
+QT.quickparticles.MAJOR_VERSION = 5
+QT.quickparticles.MINOR_VERSION = 0
+QT.quickparticles.PATCH_VERSION = 0
+
+QT.quickparticles.name = QtQuickParticles
+QT.quickparticles.bins = $$QT_MODULE_BIN_BASE
+QT.quickparticles.includes = $$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/QtQuickParticles
+QT.quickparticles.private_includes = $$QT_MODULE_INCLUDE_BASE/QtQuickParticles/$$QT.quickparticles.VERSION
+QT.quickparticles.sources = $$QT_MODULE_BASE/src/particles
+QT.quickparticles.libs = $$QT_MODULE_LIB_BASE
+QT.quickparticles.plugins = $$QT_MODULE_PLUGIN_BASE
+QT.quickparticles.imports = $$QT_MODULE_IMPORT_BASE
+QT.quickparticles.depends = qml quick
+QT.quickparticles.DEFINES = QT_QUICKPARTICLES_LIB
+
+QT_CONFIG += quickparticles
diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro
index dc3198d124da431c69a481f9efefdb0bf51f69b5..a9d0ece4482c1309fa393ee853ce18aa12898f61 100644
--- a/src/imports/particles/particles.pro
+++ b/src/imports/particles/particles.pro
@@ -5,7 +5,7 @@ include(../qimportbase.pri)
 SOURCES += \
     plugin.cpp
 
-QT += quick-private qml-private
+QT += quick-private quickparticles-private qml-private
 
 OTHER_FILES += \
     qmldir
diff --git a/src/quick/particles/particleresources/noise.png b/src/particles/particleresources/noise.png
similarity index 100%
rename from src/quick/particles/particleresources/noise.png
rename to src/particles/particleresources/noise.png
diff --git a/src/quick/particles/particles.pri b/src/particles/particles.pri
similarity index 96%
rename from src/quick/particles/particles.pri
rename to src/particles/particles.pri
index 3a40a3b91181df9064d25c100c9d72a76c02631b..3e083ab291b43f8b8365f6605ac9ec19601e4aec 100644
--- a/src/quick/particles/particles.pri
+++ b/src/particles/particles.pri
@@ -28,7 +28,8 @@ HEADERS += \
     $$PWD/qquickv8particledata_p.h \
     $$PWD/qquickrectangleextruder_p.h \
     $$PWD/qquickparticlegroup_p.h \
-    $$PWD/qquickgroupgoal_p.h
+    $$PWD/qquickgroupgoal_p.h \
+    $$PWD/qtquickparticlesglobal_p.h
 
 SOURCES += \
     $$PWD/qquickangledirection.cpp \
diff --git a/src/particles/particles.pro b/src/particles/particles.pro
new file mode 100644
index 0000000000000000000000000000000000000000..3aff6bbcc0bfe0290edbc41d669b14e44d3323fd
--- /dev/null
+++ b/src/particles/particles.pro
@@ -0,0 +1,40 @@
+load(qt_module)
+
+TARGET = QtQuickParticles
+
+CONFIG += module
+CONFIG += dll warn_on
+MODULE_PRI = ../../modules/qt_quickparticles.pri
+
+QT = core-private gui-private v8-private qml-private quick-private
+
+DEFINES   += QT_BUILD_QUICKPARTICLES_LIB QT_NO_URL_CAST_FROM_STRING QT_NO_INTEGER_EVENT_COORDINATES
+win32-msvc*:DEFINES *= _CRT_SECURE_NO_WARNINGS
+solaris-cc*:QMAKE_CXXFLAGS_RELEASE -= -O2
+
+exists("qqml_enable_gcov") {
+    QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage -fno-elide-constructors
+    LIBS += -lgcov
+}
+
+MODULE = quickparticles
+load(qt_module_config)
+
+include(particles.pri)
+
+mac {
+    # FIXME: this is a workaround for broken qmake logic in qtAddModule()
+    # This function refuses to use frameworks unless the framework exists on
+    # the filesystem at the time qmake is run, resulting in a build failure
+    # if QtQuick is qmaked before QtQml is built and frameworks are
+    # in use. qtAddLibrary() contains correct logic to deal with this, so
+    # we'll explicitly call that for now.
+    load(qt)
+    LIBS -= -lQtQml        # in non-framework builds, these should be re-added
+    LIBS -= -lQtQml_debug  # within the qtAddLibrary if appropriate, so no
+    qtAddLibrary(QtQml)    # harm done :)
+    LIBS -= -lQtQuick
+    LIBS -= -lQtQuick_debug
+    qtAddLibrary(QtQuick)
+}
+
diff --git a/src/quick/particles/particles.qrc b/src/particles/particles.qrc
similarity index 100%
rename from src/quick/particles/particles.qrc
rename to src/particles/particles.qrc
diff --git a/src/quick/particles/qquickage.cpp b/src/particles/qquickage.cpp
similarity index 100%
rename from src/quick/particles/qquickage.cpp
rename to src/particles/qquickage.cpp
diff --git a/src/quick/particles/qquickage_p.h b/src/particles/qquickage_p.h
similarity index 100%
rename from src/quick/particles/qquickage_p.h
rename to src/particles/qquickage_p.h
diff --git a/src/quick/particles/qquickangledirection.cpp b/src/particles/qquickangledirection.cpp
similarity index 100%
rename from src/quick/particles/qquickangledirection.cpp
rename to src/particles/qquickangledirection.cpp
diff --git a/src/quick/particles/qquickangledirection_p.h b/src/particles/qquickangledirection_p.h
similarity index 100%
rename from src/quick/particles/qquickangledirection_p.h
rename to src/particles/qquickangledirection_p.h
diff --git a/src/quick/particles/qquickcumulativedirection.cpp b/src/particles/qquickcumulativedirection.cpp
similarity index 100%
rename from src/quick/particles/qquickcumulativedirection.cpp
rename to src/particles/qquickcumulativedirection.cpp
diff --git a/src/quick/particles/qquickcumulativedirection_p.h b/src/particles/qquickcumulativedirection_p.h
similarity index 100%
rename from src/quick/particles/qquickcumulativedirection_p.h
rename to src/particles/qquickcumulativedirection_p.h
diff --git a/src/quick/particles/qquickcustomaffector.cpp b/src/particles/qquickcustomaffector.cpp
similarity index 100%
rename from src/quick/particles/qquickcustomaffector.cpp
rename to src/particles/qquickcustomaffector.cpp
diff --git a/src/quick/particles/qquickcustomaffector_p.h b/src/particles/qquickcustomaffector_p.h
similarity index 100%
rename from src/quick/particles/qquickcustomaffector_p.h
rename to src/particles/qquickcustomaffector_p.h
diff --git a/src/quick/particles/qquickcustomparticle.cpp b/src/particles/qquickcustomparticle.cpp
similarity index 100%
rename from src/quick/particles/qquickcustomparticle.cpp
rename to src/particles/qquickcustomparticle.cpp
diff --git a/src/quick/particles/qquickcustomparticle_p.h b/src/particles/qquickcustomparticle_p.h
similarity index 100%
rename from src/quick/particles/qquickcustomparticle_p.h
rename to src/particles/qquickcustomparticle_p.h
diff --git a/src/quick/particles/qquickdirection.cpp b/src/particles/qquickdirection.cpp
similarity index 100%
rename from src/quick/particles/qquickdirection.cpp
rename to src/particles/qquickdirection.cpp
diff --git a/src/quick/particles/qquickdirection_p.h b/src/particles/qquickdirection_p.h
similarity index 100%
rename from src/quick/particles/qquickdirection_p.h
rename to src/particles/qquickdirection_p.h
diff --git a/src/quick/particles/qquickellipseextruder.cpp b/src/particles/qquickellipseextruder.cpp
similarity index 100%
rename from src/quick/particles/qquickellipseextruder.cpp
rename to src/particles/qquickellipseextruder.cpp
diff --git a/src/quick/particles/qquickellipseextruder_p.h b/src/particles/qquickellipseextruder_p.h
similarity index 100%
rename from src/quick/particles/qquickellipseextruder_p.h
rename to src/particles/qquickellipseextruder_p.h
diff --git a/src/quick/particles/qquickfriction.cpp b/src/particles/qquickfriction.cpp
similarity index 100%
rename from src/quick/particles/qquickfriction.cpp
rename to src/particles/qquickfriction.cpp
diff --git a/src/quick/particles/qquickfriction_p.h b/src/particles/qquickfriction_p.h
similarity index 100%
rename from src/quick/particles/qquickfriction_p.h
rename to src/particles/qquickfriction_p.h
diff --git a/src/quick/particles/qquickgravity.cpp b/src/particles/qquickgravity.cpp
similarity index 100%
rename from src/quick/particles/qquickgravity.cpp
rename to src/particles/qquickgravity.cpp
diff --git a/src/quick/particles/qquickgravity_p.h b/src/particles/qquickgravity_p.h
similarity index 100%
rename from src/quick/particles/qquickgravity_p.h
rename to src/particles/qquickgravity_p.h
diff --git a/src/quick/particles/qquickgroupgoal.cpp b/src/particles/qquickgroupgoal.cpp
similarity index 100%
rename from src/quick/particles/qquickgroupgoal.cpp
rename to src/particles/qquickgroupgoal.cpp
diff --git a/src/quick/particles/qquickgroupgoal_p.h b/src/particles/qquickgroupgoal_p.h
similarity index 100%
rename from src/quick/particles/qquickgroupgoal_p.h
rename to src/particles/qquickgroupgoal_p.h
diff --git a/src/quick/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
similarity index 100%
rename from src/quick/particles/qquickimageparticle.cpp
rename to src/particles/qquickimageparticle.cpp
diff --git a/src/quick/particles/qquickimageparticle_p.h b/src/particles/qquickimageparticle_p.h
similarity index 100%
rename from src/quick/particles/qquickimageparticle_p.h
rename to src/particles/qquickimageparticle_p.h
diff --git a/src/quick/particles/qquickitemparticle.cpp b/src/particles/qquickitemparticle.cpp
similarity index 100%
rename from src/quick/particles/qquickitemparticle.cpp
rename to src/particles/qquickitemparticle.cpp
diff --git a/src/quick/particles/qquickitemparticle_p.h b/src/particles/qquickitemparticle_p.h
similarity index 100%
rename from src/quick/particles/qquickitemparticle_p.h
rename to src/particles/qquickitemparticle_p.h
diff --git a/src/quick/particles/qquicklineextruder.cpp b/src/particles/qquicklineextruder.cpp
similarity index 100%
rename from src/quick/particles/qquicklineextruder.cpp
rename to src/particles/qquicklineextruder.cpp
diff --git a/src/quick/particles/qquicklineextruder_p.h b/src/particles/qquicklineextruder_p.h
similarity index 100%
rename from src/quick/particles/qquicklineextruder_p.h
rename to src/particles/qquicklineextruder_p.h
diff --git a/src/quick/particles/qquickmaskextruder.cpp b/src/particles/qquickmaskextruder.cpp
similarity index 100%
rename from src/quick/particles/qquickmaskextruder.cpp
rename to src/particles/qquickmaskextruder.cpp
diff --git a/src/quick/particles/qquickmaskextruder_p.h b/src/particles/qquickmaskextruder_p.h
similarity index 100%
rename from src/quick/particles/qquickmaskextruder_p.h
rename to src/particles/qquickmaskextruder_p.h
diff --git a/src/quick/particles/qquickparticleaffector.cpp b/src/particles/qquickparticleaffector.cpp
similarity index 100%
rename from src/quick/particles/qquickparticleaffector.cpp
rename to src/particles/qquickparticleaffector.cpp
diff --git a/src/quick/particles/qquickparticleaffector_p.h b/src/particles/qquickparticleaffector_p.h
similarity index 100%
rename from src/quick/particles/qquickparticleaffector_p.h
rename to src/particles/qquickparticleaffector_p.h
diff --git a/src/quick/particles/qquickparticleemitter.cpp b/src/particles/qquickparticleemitter.cpp
similarity index 100%
rename from src/quick/particles/qquickparticleemitter.cpp
rename to src/particles/qquickparticleemitter.cpp
diff --git a/src/quick/particles/qquickparticleemitter_p.h b/src/particles/qquickparticleemitter_p.h
similarity index 100%
rename from src/quick/particles/qquickparticleemitter_p.h
rename to src/particles/qquickparticleemitter_p.h
diff --git a/src/quick/particles/qquickparticleextruder.cpp b/src/particles/qquickparticleextruder.cpp
similarity index 100%
rename from src/quick/particles/qquickparticleextruder.cpp
rename to src/particles/qquickparticleextruder.cpp
diff --git a/src/quick/particles/qquickparticleextruder_p.h b/src/particles/qquickparticleextruder_p.h
similarity index 100%
rename from src/quick/particles/qquickparticleextruder_p.h
rename to src/particles/qquickparticleextruder_p.h
diff --git a/src/quick/particles/qquickparticlegroup.cpp b/src/particles/qquickparticlegroup.cpp
similarity index 100%
rename from src/quick/particles/qquickparticlegroup.cpp
rename to src/particles/qquickparticlegroup.cpp
diff --git a/src/quick/particles/qquickparticlegroup_p.h b/src/particles/qquickparticlegroup_p.h
similarity index 100%
rename from src/quick/particles/qquickparticlegroup_p.h
rename to src/particles/qquickparticlegroup_p.h
diff --git a/src/quick/particles/qquickparticlepainter.cpp b/src/particles/qquickparticlepainter.cpp
similarity index 100%
rename from src/quick/particles/qquickparticlepainter.cpp
rename to src/particles/qquickparticlepainter.cpp
diff --git a/src/quick/particles/qquickparticlepainter_p.h b/src/particles/qquickparticlepainter_p.h
similarity index 100%
rename from src/quick/particles/qquickparticlepainter_p.h
rename to src/particles/qquickparticlepainter_p.h
diff --git a/src/quick/particles/qquickparticlesmodule.cpp b/src/particles/qquickparticlesmodule.cpp
similarity index 100%
rename from src/quick/particles/qquickparticlesmodule.cpp
rename to src/particles/qquickparticlesmodule.cpp
diff --git a/src/quick/particles/qquickparticlesmodule_p.h b/src/particles/qquickparticlesmodule_p.h
similarity index 94%
rename from src/quick/particles/qquickparticlesmodule_p.h
rename to src/particles/qquickparticlesmodule_p.h
index 23a40488cfbaaf448da87aa31a498051eb96c2c7..87e99fa6bbc3f504ae40de524d17291480ff0586 100644
--- a/src/quick/particles/qquickparticlesmodule_p.h
+++ b/src/particles/qquickparticlesmodule_p.h
@@ -42,13 +42,13 @@
 #ifndef QQUICKPARTICLESMODULE_H
 #define QQUICKPARTICLESMODULE_H
 
-#include <private/qtquickglobal_p.h>
+#include <private/qtquickparticlesglobal_p.h>
 
 QT_BEGIN_HEADER
 
 QT_BEGIN_NAMESPACE
 
-class Q_QUICK_PRIVATE_EXPORT QQuickParticlesModule
+class Q_QUICKPARTICLES_PRIVATE_EXPORT QQuickParticlesModule
 {
 public:
     static void defineModule();
diff --git a/src/quick/particles/qquickparticlesystem.cpp b/src/particles/qquickparticlesystem.cpp
similarity index 100%
rename from src/quick/particles/qquickparticlesystem.cpp
rename to src/particles/qquickparticlesystem.cpp
diff --git a/src/quick/particles/qquickparticlesystem_p.h b/src/particles/qquickparticlesystem_p.h
similarity index 100%
rename from src/quick/particles/qquickparticlesystem_p.h
rename to src/particles/qquickparticlesystem_p.h
diff --git a/src/quick/particles/qquickpointattractor.cpp b/src/particles/qquickpointattractor.cpp
similarity index 100%
rename from src/quick/particles/qquickpointattractor.cpp
rename to src/particles/qquickpointattractor.cpp
diff --git a/src/quick/particles/qquickpointattractor_p.h b/src/particles/qquickpointattractor_p.h
similarity index 100%
rename from src/quick/particles/qquickpointattractor_p.h
rename to src/particles/qquickpointattractor_p.h
diff --git a/src/quick/particles/qquickpointdirection.cpp b/src/particles/qquickpointdirection.cpp
similarity index 100%
rename from src/quick/particles/qquickpointdirection.cpp
rename to src/particles/qquickpointdirection.cpp
diff --git a/src/quick/particles/qquickpointdirection_p.h b/src/particles/qquickpointdirection_p.h
similarity index 100%
rename from src/quick/particles/qquickpointdirection_p.h
rename to src/particles/qquickpointdirection_p.h
diff --git a/src/quick/particles/qquickrectangleextruder.cpp b/src/particles/qquickrectangleextruder.cpp
similarity index 100%
rename from src/quick/particles/qquickrectangleextruder.cpp
rename to src/particles/qquickrectangleextruder.cpp
diff --git a/src/quick/particles/qquickrectangleextruder_p.h b/src/particles/qquickrectangleextruder_p.h
similarity index 100%
rename from src/quick/particles/qquickrectangleextruder_p.h
rename to src/particles/qquickrectangleextruder_p.h
diff --git a/src/quick/particles/qquickspritegoal.cpp b/src/particles/qquickspritegoal.cpp
similarity index 100%
rename from src/quick/particles/qquickspritegoal.cpp
rename to src/particles/qquickspritegoal.cpp
diff --git a/src/quick/particles/qquickspritegoal_p.h b/src/particles/qquickspritegoal_p.h
similarity index 100%
rename from src/quick/particles/qquickspritegoal_p.h
rename to src/particles/qquickspritegoal_p.h
diff --git a/src/quick/particles/qquicktargetdirection.cpp b/src/particles/qquicktargetdirection.cpp
similarity index 100%
rename from src/quick/particles/qquicktargetdirection.cpp
rename to src/particles/qquicktargetdirection.cpp
diff --git a/src/quick/particles/qquicktargetdirection_p.h b/src/particles/qquicktargetdirection_p.h
similarity index 100%
rename from src/quick/particles/qquicktargetdirection_p.h
rename to src/particles/qquicktargetdirection_p.h
diff --git a/src/quick/particles/qquicktrailemitter.cpp b/src/particles/qquicktrailemitter.cpp
similarity index 100%
rename from src/quick/particles/qquicktrailemitter.cpp
rename to src/particles/qquicktrailemitter.cpp
diff --git a/src/quick/particles/qquicktrailemitter_p.h b/src/particles/qquicktrailemitter_p.h
similarity index 100%
rename from src/quick/particles/qquicktrailemitter_p.h
rename to src/particles/qquicktrailemitter_p.h
diff --git a/src/quick/particles/qquickturbulence.cpp b/src/particles/qquickturbulence.cpp
similarity index 100%
rename from src/quick/particles/qquickturbulence.cpp
rename to src/particles/qquickturbulence.cpp
diff --git a/src/quick/particles/qquickturbulence_p.h b/src/particles/qquickturbulence_p.h
similarity index 100%
rename from src/quick/particles/qquickturbulence_p.h
rename to src/particles/qquickturbulence_p.h
diff --git a/src/quick/particles/qquickv8particledata.cpp b/src/particles/qquickv8particledata.cpp
similarity index 100%
rename from src/quick/particles/qquickv8particledata.cpp
rename to src/particles/qquickv8particledata.cpp
diff --git a/src/quick/particles/qquickv8particledata_p.h b/src/particles/qquickv8particledata_p.h
similarity index 100%
rename from src/quick/particles/qquickv8particledata_p.h
rename to src/particles/qquickv8particledata_p.h
diff --git a/src/quick/particles/qquickwander.cpp b/src/particles/qquickwander.cpp
similarity index 100%
rename from src/quick/particles/qquickwander.cpp
rename to src/particles/qquickwander.cpp
diff --git a/src/quick/particles/qquickwander_p.h b/src/particles/qquickwander_p.h
similarity index 100%
rename from src/quick/particles/qquickwander_p.h
rename to src/particles/qquickwander_p.h
diff --git a/src/particles/qtquickparticlesglobal_p.h b/src/particles/qtquickparticlesglobal_p.h
new file mode 100644
index 0000000000000000000000000000000000000000..d7814f759de4d82a6c2ba46c371ed8673af83b09
--- /dev/null
+++ b/src/particles/qtquickparticlesglobal_p.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQuickParticles module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTQUICKPARTICLESGLOBAL_P_H
+#define QTQUICKPARTICLESGLOBAL_P_H
+
+#include <QtCore/qglobal.h>
+
+// We only have private exports from this library
+
+#if defined(Q_OS_WIN)
+#  if defined(QT_MAKEDLL) /* create a Qt DLL library */
+#    if defined(QT_BUILD_QUICKPARTICLES_LIB)
+#      define Q_QUICKPARTICLES_PRIVATE_EXPORT Q_DECL_EXPORT
+#    else
+#      define Q_QUICKPARTICLES_PRIVATE_EXPORT Q_DECL_IMPORT
+#    endif
+#  elif defined(QT_DLL) /* use a Qt DLL library */
+#    define Q_QUICKPARTICLES_PRIVATE_EXPORT Q_DECL_IMPORT
+#  endif
+#endif
+
+#if !defined(Q_QUICKPARTICLES_PRIVATE_EXPORT)
+#  if defined(QT_SHARED)
+#    define Q_QUICKPARTICLES_PRIVATE_EXPORT Q_DECL_EXPORT
+#  else
+#    define Q_QUICKPARTICLES_PRIVATE_EXPORT
+#  endif
+#endif
+
+#endif // QTQUICKPARTICLESGLOBAL_P_H
diff --git a/src/quick/items/qquickshadereffect_p.h b/src/quick/items/qquickshadereffect_p.h
index 32f12fad30509a46e18e4c78a225f2235e0f0e90..9734c3bf4602ed9c0a9f6e76b400b0c993443503 100644
--- a/src/quick/items/qquickshadereffect_p.h
+++ b/src/quick/items/qquickshadereffect_p.h
@@ -45,6 +45,7 @@
 #include <QtQuick/qquickitem.h>
 
 #include <QtQuick/qsgmaterial.h>
+#include <private/qtquickglobal_p.h>
 #include <private/qsgadaptationlayer_p.h>
 #include <private/qquickshadereffectnode_p.h>
 #include "qquickshadereffectmesh_p.h"
@@ -63,7 +64,7 @@ class QSignalMapper;
 class QQuickCustomMaterialShader;
 
 // Common class for QQuickShaderEffect and QQuickCustomParticle.
-struct QQuickShaderEffectCommon
+struct Q_QUICK_PRIVATE_EXPORT QQuickShaderEffectCommon
 {
     typedef QQuickShaderEffectMaterialKey Key;
     typedef QQuickShaderEffectMaterial::UniformData UniformData;
diff --git a/src/quick/items/qquickshadereffectnode_p.h b/src/quick/items/qquickshadereffectnode_p.h
index 1bbce8642619013d9d9ea84b231aa9edc7db1a84..2b2aab53652c0b958b807fd9edceaf9150fa5918 100644
--- a/src/quick/items/qquickshadereffectnode_p.h
+++ b/src/quick/items/qquickshadereffectnode_p.h
@@ -46,6 +46,7 @@
 #include <QtQuick/qsgmaterial.h>
 #include <QtQuick/qsgtextureprovider.h>
 #include <QtQuick/qquickitem.h>
+#include <private/qtquickglobal_p.h>
 
 #include <QtCore/qsharedpointer.h>
 #include <QtCore/qpointer.h>
@@ -73,7 +74,7 @@ uint qHash(const QQuickShaderEffectMaterialKey &key);
 
 class QQuickCustomMaterialShader;
 class QQuickShaderEffectNode;
-class QQuickShaderEffectMaterial : public QSGMaterial
+class Q_QUICK_PRIVATE_EXPORT QQuickShaderEffectMaterial : public QSGMaterial
 {
 public:
     struct UniformData
@@ -127,7 +128,7 @@ protected:
 
 class QSGShaderEffectMesh;
 
-class QQuickShaderEffectNode : public QObject, public QSGGeometryNode
+class Q_QUICK_PRIVATE_EXPORT QQuickShaderEffectNode : public QObject, public QSGGeometryNode
 {
     Q_OBJECT
 public:
diff --git a/src/quick/items/qquickspriteengine_p.h b/src/quick/items/qquickspriteengine_p.h
index 00cefbfbc0765ff5ec08b3961d9c7793f6b0435b..f6ef79ca50982f111f486af42aca7b535a6aff1b 100644
--- a/src/quick/items/qquickspriteengine_p.h
+++ b/src/quick/items/qquickspriteengine_p.h
@@ -50,14 +50,15 @@
 #include <QQmlListProperty>
 #include <QImage>
 #include <QPair>
-#include <QtQuick/private/qquickpixmapcache_p.h>
+#include <private/qquickpixmapcache_p.h>
+#include <private/qtquickglobal_p.h>
 
 QT_BEGIN_HEADER
 
 QT_BEGIN_NAMESPACE
 
 class QQuickSprite;
-class Q_AUTOTEST_EXPORT QQuickStochasticState : public QObject //Currently for internal use only - Sprite and ParticleGroup
+class Q_QUICK_PRIVATE_EXPORT QQuickStochasticState : public QObject //Currently for internal use only - Sprite and ParticleGroup
 {
     Q_OBJECT
     Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged)
@@ -173,7 +174,7 @@ private:
     bool m_randomStart;
 };
 
-class Q_AUTOTEST_EXPORT QQuickStochasticEngine : public QObject
+class Q_QUICK_PRIVATE_EXPORT QQuickStochasticEngine : public QObject
 {
     Q_OBJECT
     //TODO: Optimize single state case?
@@ -252,7 +253,7 @@ protected:
     bool m_addAdvance;
 };
 
-class QQuickSpriteEngine : public QQuickStochasticEngine
+class Q_QUICK_PRIVATE_EXPORT QQuickSpriteEngine : public QQuickStochasticEngine
 {
     Q_OBJECT
     Q_PROPERTY(QQmlListProperty<QQuickSprite> sprites READ sprites)
diff --git a/src/quick/quick.pro b/src/quick/quick.pro
index 0f0120ee792a981f4ba576e6a32a6c34d0035a48..87d4c905094eebc3d30469e2ac23019509feb9cd 100644
--- a/src/quick/quick.pro
+++ b/src/quick/quick.pro
@@ -22,7 +22,6 @@ load(qt_module_config)
 include(util/util.pri)
 include(scenegraph/scenegraph.pri)
 include(items/items.pri)
-include(particles/particles.pri)
 include(designer/designer.pri)
 
 HEADERS += \
diff --git a/src/quick/scenegraph/coreapi/qsggeometry.h b/src/quick/scenegraph/coreapi/qsggeometry.h
index 3a3d87a23300a377eda81f650b940c7a6756954e..a11ec4297680f56256baf3834862144c56ba288a 100644
--- a/src/quick/scenegraph/coreapi/qsggeometry.h
+++ b/src/quick/scenegraph/coreapi/qsggeometry.h
@@ -56,7 +56,7 @@ class Q_QUICK_EXPORT QSGGeometry
 {
 public:
 
-    struct Attribute
+    struct Q_QUICK_EXPORT Attribute
     {
         int position;
         int tupleSize;
diff --git a/src/src.pro b/src/src.pro
index 0246eea409cecba38ac9c7503bade6ca98197c87..7631910c3c15a2280412d47e86101e458131c96f 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -1,6 +1,6 @@
 TEMPLATE = subdirs
 CONFIG += ordered
-SUBDIRS += qml quick plugins
+SUBDIRS += qml quick particles plugins
 
 contains(QT_CONFIG, qmltest): SUBDIRS += qmltest
 
diff --git a/sync.profile b/sync.profile
index 36b45b35d0c1e835926da566ce775fb0c14a728f..6fddaff53be0823593b70b14fa95198041d0ce98 100644
--- a/sync.profile
+++ b/sync.profile
@@ -1,6 +1,7 @@
 %modules = ( # path to module name map
     "QtQml" => "$basedir/src/qml",
     "QtQuick" => "$basedir/src/quick",
+    "QtQuickParticles" => "$basedir/src/particles",
     "QtQuickTest" => "$basedir/src/qmltest",
     "QtQmlDevTools" => "$basedir/src/qmldevtools",
     "QtDeclarative" => "$basedir/src/compatibility",
@@ -18,10 +19,12 @@
     "network" => "#include <QtNetwork/QtNetwork>\n",
     "testlib" => "#include <QtTest/QtTest>\n",
     "qml" => "#include <QtQml/QtQml>\n",
+    "quick" => "#include <QtQuick/QtQuick>\n",
 );
 %modulepris = (
     "QtQml" => "$basedir/modules/qt_qml.pri",
     "QtQuick" => "$basedir/modules/qt_quick.pri",
+    "QtQuickParticles" => "$basedir/modules/qt_quickparticles.pri",
     "QtQuickTest" => "$basedir/modules/qt_qmltest.pri",
     "QtQmlDevTools" => "$basedir/modules/qt_qmldevtools.pri",
     "QtDeclarative" => "$basedir/modules/qt_declarative.pri",
diff --git a/tests/auto/particles/qquickage/qquickage.pro b/tests/auto/particles/qquickage/qquickage.pro
index 8e5c2f0e33f70e1fbeca79486ef4ef54ab2e346d..71ea279ada740903f3e2c1862700d67f9cca8d92 100644
--- a/tests/auto/particles/qquickage/qquickage.pro
+++ b/tests/auto/particles/qquickage/qquickage.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickangleddirection/qquickangleddirection.pro b/tests/auto/particles/qquickangleddirection/qquickangleddirection.pro
index df8d460d3e02b31cb8d831c6fe560d2ad7bc1849..0462fff1bd7dc230166499cb705c72c0e29f35df 100644
--- a/tests/auto/particles/qquickangleddirection/qquickangleddirection.pro
+++ b/tests/auto/particles/qquickangleddirection/qquickangleddirection.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickcumulativedirection/qquickcumulativedirection.pro b/tests/auto/particles/qquickcumulativedirection/qquickcumulativedirection.pro
index 4ea8739c21d5cdd1da5e7dfaeb353df68d8f1536..e3f79d47fb795645a8627738bce192b5b286ab47 100644
--- a/tests/auto/particles/qquickcumulativedirection/qquickcumulativedirection.pro
+++ b/tests/auto/particles/qquickcumulativedirection/qquickcumulativedirection.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickcustomaffector/qquickcustomaffector.pro b/tests/auto/particles/qquickcustomaffector/qquickcustomaffector.pro
index 0855187d4707082b18bc1c17e6e41f04e4d4ec4f..41ceb8c1fc9a298a9720b2389586c51ac902b423 100644
--- a/tests/auto/particles/qquickcustomaffector/qquickcustomaffector.pro
+++ b/tests/auto/particles/qquickcustomaffector/qquickcustomaffector.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro b/tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro
index d5c21abef320e13e0f2fd5699f0985108dd97cbc..0ee7fc986306c6a3b9e1ac9edd47e10654be89a1 100644
--- a/tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro
+++ b/tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickellipseextruder/qquickellipseextruder.pro b/tests/auto/particles/qquickellipseextruder/qquickellipseextruder.pro
index 33241a4792989ac022a78a61e8396965576d4779..9e6b95339f1e8a188d5e465fb50dc914882c69bf 100644
--- a/tests/auto/particles/qquickellipseextruder/qquickellipseextruder.pro
+++ b/tests/auto/particles/qquickellipseextruder/qquickellipseextruder.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickfriction/qquickfriction.pro b/tests/auto/particles/qquickfriction/qquickfriction.pro
index 36cf9aaa606be83b9e0d5920294156307401c178..3bc61942d73992b55b3cdce1e7991d0958fb86a9 100644
--- a/tests/auto/particles/qquickfriction/qquickfriction.pro
+++ b/tests/auto/particles/qquickfriction/qquickfriction.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickgravity/qquickgravity.pro b/tests/auto/particles/qquickgravity/qquickgravity.pro
index 331def26b5a60f4d54f32e7303c7bf6b352289ee..03610742c0d961bf4b6fc2e6c3c23bb50fdaa91a 100644
--- a/tests/auto/particles/qquickgravity/qquickgravity.pro
+++ b/tests/auto/particles/qquickgravity/qquickgravity.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickgroupgoal/qquickgroupgoal.pro b/tests/auto/particles/qquickgroupgoal/qquickgroupgoal.pro
index 6b5660289e7a1c3da6e7244d5134eda97c3a5c28..9ae573fe137fe19a9a5dc98d67c00cc801aeca7c 100644
--- a/tests/auto/particles/qquickgroupgoal/qquickgroupgoal.pro
+++ b/tests/auto/particles/qquickgroupgoal/qquickgroupgoal.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private testlib quick-private
+QT += core-private gui-private v8-private qml-private testlib quick-private quickparticles-private
 
diff --git a/tests/auto/particles/qquickimageparticle/qquickimageparticle.pro b/tests/auto/particles/qquickimageparticle/qquickimageparticle.pro
index 226d8442639e4639c49e587ca46e46ff3d7a0b92..57909444af8fe31d445fb1f65c8213fcddeb696e 100644
--- a/tests/auto/particles/qquickimageparticle/qquickimageparticle.pro
+++ b/tests/auto/particles/qquickimageparticle/qquickimageparticle.pro
@@ -6,4 +6,4 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
diff --git a/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro b/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro
index ec7fa48e2653e3c91b6d436820a36995af36fb86..047af9faf8f71370d2d85313a3e347b570af9750 100644
--- a/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro
+++ b/tests/auto/particles/qquickitemparticle/qquickitemparticle.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquicklineextruder/qquicklineextruder.pro b/tests/auto/particles/qquicklineextruder/qquicklineextruder.pro
index a1297b1e264cbd3ac07f8ada19aa9969278379b6..83ff8eddcf527a9c23356130537321096684e44f 100644
--- a/tests/auto/particles/qquicklineextruder/qquicklineextruder.pro
+++ b/tests/auto/particles/qquicklineextruder/qquicklineextruder.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickmaskextruder/qquickmaskextruder.pro b/tests/auto/particles/qquickmaskextruder/qquickmaskextruder.pro
index 99f50a286d4c3c42ff0575e92eee672c08603171..90cf2da4a38849d169fb8882c8e05c4f6dc5af19 100644
--- a/tests/auto/particles/qquickmaskextruder/qquickmaskextruder.pro
+++ b/tests/auto/particles/qquickmaskextruder/qquickmaskextruder.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickparticlegroup/qquickparticlegroup.pro b/tests/auto/particles/qquickparticlegroup/qquickparticlegroup.pro
index c5c908e305610b79c957a0d9939d16a9931092de..4fa17e2ce0026d57580861111e5ccb8f992bfd87 100644
--- a/tests/auto/particles/qquickparticlegroup/qquickparticlegroup.pro
+++ b/tests/auto/particles/qquickparticlegroup/qquickparticlegroup.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickparticlesystem/qquickparticlesystem.pro b/tests/auto/particles/qquickparticlesystem/qquickparticlesystem.pro
index 2179ae3ae93e9dc9ee5195094b30c0ddbd54a26a..e8cc4f2cbd962220c8dcf4cffbeafcd698d8844f 100644
--- a/tests/auto/particles/qquickparticlesystem/qquickparticlesystem.pro
+++ b/tests/auto/particles/qquickparticlesystem/qquickparticlesystem.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickpointattractor/qquickpointattractor.pro b/tests/auto/particles/qquickpointattractor/qquickpointattractor.pro
index 43c8022b0adddc134e571cc50fe1acacedad3c98..07dd50369ec14593ff910d7522acd6f16d9edb9d 100644
--- a/tests/auto/particles/qquickpointattractor/qquickpointattractor.pro
+++ b/tests/auto/particles/qquickpointattractor/qquickpointattractor.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickpointdirection/qquickpointdirection.pro b/tests/auto/particles/qquickpointdirection/qquickpointdirection.pro
index 71b21e5f5622996c1f4f0ef9b020950e7c3b3e00..e9c73305e12e88ffc04f42eb188ac310918313f8 100644
--- a/tests/auto/particles/qquickpointdirection/qquickpointdirection.pro
+++ b/tests/auto/particles/qquickpointdirection/qquickpointdirection.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickrectangleextruder/qquickrectangleextruder.pro b/tests/auto/particles/qquickrectangleextruder/qquickrectangleextruder.pro
index 5e595204ccba28be7611dbbb41c048ec9c3dd88d..e968c4a1f755d3d94ed5b437d2701f2e1533c2a7 100644
--- a/tests/auto/particles/qquickrectangleextruder/qquickrectangleextruder.pro
+++ b/tests/auto/particles/qquickrectangleextruder/qquickrectangleextruder.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickspritegoal/qquickspritegoal.pro b/tests/auto/particles/qquickspritegoal/qquickspritegoal.pro
index dc94c601495dd03d6f8bb46f9f472b4c8a9fd533..a5f491aedc61b7d4e71cd1b762709e2e8ce62632 100644
--- a/tests/auto/particles/qquickspritegoal/qquickspritegoal.pro
+++ b/tests/auto/particles/qquickspritegoal/qquickspritegoal.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private testlib quick-private
+QT += core-private gui-private v8-private qml-private testlib quick-private quickparticles-private
 
diff --git a/tests/auto/particles/qquicktargetdirection/qquicktargetdirection.pro b/tests/auto/particles/qquicktargetdirection/qquicktargetdirection.pro
index b7ba905f2e468c902dbf03d786c58f1ae7a1ee10..2d2751e5abc488008822f077731f841812092288 100644
--- a/tests/auto/particles/qquicktargetdirection/qquicktargetdirection.pro
+++ b/tests/auto/particles/qquicktargetdirection/qquicktargetdirection.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquicktrailemitter/qquicktrailemitter.pro b/tests/auto/particles/qquicktrailemitter/qquicktrailemitter.pro
index 5a76e2fba43c8fa5ab245f4c7cf9130e865f08fc..a5d823911cd561ee595ab04381b10cc6917f07f6 100644
--- a/tests/auto/particles/qquicktrailemitter/qquicktrailemitter.pro
+++ b/tests/auto/particles/qquicktrailemitter/qquicktrailemitter.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickturbulence/qquickturbulence.pro b/tests/auto/particles/qquickturbulence/qquickturbulence.pro
index 3bfb94addfcdb94e8ae36b0be40aca93256ef00a..5ccf83b33781b81ba78eb98f07d8836cb9d9c549 100644
--- a/tests/auto/particles/qquickturbulence/qquickturbulence.pro
+++ b/tests/auto/particles/qquickturbulence/qquickturbulence.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib
 
diff --git a/tests/auto/particles/qquickwander/qquickwander.pro b/tests/auto/particles/qquickwander/qquickwander.pro
index 1cd42690747e35b4907cd560dcc4c49efcf49dda..65075e54177101f328f82403c4c6243d37cb3c52 100644
--- a/tests/auto/particles/qquickwander/qquickwander.pro
+++ b/tests/auto/particles/qquickwander/qquickwander.pro
@@ -6,5 +6,5 @@ macx:CONFIG -= app_bundle
 include (../../shared/util.pri)
 TESTDATA = data/*
 
-QT += core-private gui-private v8-private qml-private quick-private testlib
+QT += core-private gui-private v8-private qml-private quick-private quickparticles-private testlib