diff --git a/src/imports/imports.pro b/src/imports/imports.pro
index b62275b009df4f500d68a2ba24860e201c046aff..f7861ac00971ff03c3251d281be2b2439a285c3c 100644
--- a/src/imports/imports.pro
+++ b/src/imports/imports.pro
@@ -1,5 +1,5 @@
 TEMPLATE = subdirs
 
-SUBDIRS += qtquick2 folderlistmodel localstorage
+SUBDIRS += qtquick2 particles window folderlistmodel localstorage
 contains(QT_CONFIG, qmltest): SUBDIRS += testlib
 contains(QT_CONFIG, xmlpatterns) : SUBDIRS += xmllistmodel
diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro
new file mode 100644
index 0000000000000000000000000000000000000000..dc3198d124da431c69a481f9efefdb0bf51f69b5
--- /dev/null
+++ b/src/imports/particles/particles.pro
@@ -0,0 +1,19 @@
+TARGET  = particlesplugin
+TARGETPATH = QtQuick/Particles.2
+include(../qimportbase.pri)
+
+SOURCES += \
+    plugin.cpp
+
+QT += quick-private qml-private
+
+OTHER_FILES += \
+    qmldir
+
+DESTDIR = $$QT.qml.imports/$$TARGETPATH
+target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
+
+qmldir.files += $$PWD/qmldir
+qmldir.path +=  $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
+
+INSTALLS += target qmldir
diff --git a/src/imports/particles/plugin.cpp b/src/imports/particles/plugin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b5680b5ed1894df406d1c1c711c2f26c4e73d603
--- /dev/null
+++ b/src/imports/particles/plugin.cpp
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins 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$
+**
+****************************************************************************/
+
+#include <QtQml/qqmlextensionplugin.h>
+
+#include <private/qquickparticlesmodule_p.h>
+
+QT_BEGIN_NAMESPACE
+
+//![class decl]
+class QtQuick2ParticlesPlugin : public QQmlExtensionPlugin
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0")
+public:
+    virtual void registerTypes(const char *uri)
+    {
+        Q_ASSERT(QLatin1String(uri) == QLatin1String("QtQuick.Particles"));
+        Q_UNUSED(uri);
+        QQuickParticlesModule::defineModule();
+    }
+};
+//![class decl]
+
+QT_END_NAMESPACE
+
+#include "plugin.moc"
diff --git a/src/imports/particles/qmldir b/src/imports/particles/qmldir
new file mode 100644
index 0000000000000000000000000000000000000000..593915f83f261127696491b0b9712ffa15ae74c4
--- /dev/null
+++ b/src/imports/particles/qmldir
@@ -0,0 +1 @@
+plugin particlesplugin
diff --git a/src/imports/window/plugin.cpp b/src/imports/window/plugin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b0c8c90890992c7f2021de6d7db33be371def18e
--- /dev/null
+++ b/src/imports/window/plugin.cpp
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins 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$
+**
+****************************************************************************/
+
+#include <QtQml/qqmlextensionplugin.h>
+
+#include <private/qquickwindowmodule_p.h>
+
+QT_BEGIN_NAMESPACE
+
+//![class decl]
+class QtQuick2WindowPlugin : public QQmlExtensionPlugin
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0")
+public:
+    virtual void registerTypes(const char *uri)
+    {
+        Q_ASSERT(QLatin1String(uri) == QLatin1String("QtQuick.Window"));
+        Q_UNUSED(uri);
+        QQuickWindowModule::defineModule();
+    }
+};
+//![class decl]
+
+QT_END_NAMESPACE
+
+#include "plugin.moc"
diff --git a/src/imports/window/qmldir b/src/imports/window/qmldir
new file mode 100644
index 0000000000000000000000000000000000000000..32844a6ed660cde67f01e294186a93792caedefe
--- /dev/null
+++ b/src/imports/window/qmldir
@@ -0,0 +1 @@
+plugin windowplugin
diff --git a/src/imports/window/window.pro b/src/imports/window/window.pro
new file mode 100644
index 0000000000000000000000000000000000000000..42b6f5911dc189c30f2ef5275a622c5d94583e5b
--- /dev/null
+++ b/src/imports/window/window.pro
@@ -0,0 +1,19 @@
+TARGET  = windowplugin
+TARGETPATH = QtQuick/Window.2
+include(../qimportbase.pri)
+
+SOURCES += \
+    plugin.cpp
+
+QT += quick-private qml-private
+
+OTHER_FILES += \
+    qmldir
+
+DESTDIR = $$QT.qml.imports/$$TARGETPATH
+target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
+
+qmldir.files += $$PWD/qmldir
+qmldir.path +=  $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
+
+INSTALLS += target qmldir
diff --git a/src/qml/qml/qqmlscript.cpp b/src/qml/qml/qqmlscript.cpp
index 5104ba897946aeca1f5927294913d71f9aaab914..900dd04863b742800bef15edfa02cc5e5c314207 100644
--- a/src/qml/qml/qqmlscript.cpp
+++ b/src/qml/qml/qqmlscript.cpp
@@ -1345,11 +1345,6 @@ bool QQmlScript::Parser::parse(const QByteArray &qmldata, const QUrl &url,
             _errors[ii].setUrl(url);
     }
 
-    if (_errors.isEmpty()) {
-        // Sort the imports into desired order
-        qStableSort(_imports.begin(), _imports.end());
-    }
-
     return _errors.isEmpty();
 }
 
diff --git a/src/qml/qml/qqmlscript_p.h b/src/qml/qml/qqmlscript_p.h
index debe89437624a276d0f3b3821f2b993b6cc3a199..ddf4c9a3921c0cc1f775922eb0ede2a3d1277524 100644
--- a/src/qml/qml/qqmlscript_p.h
+++ b/src/qml/qml/qqmlscript_p.h
@@ -121,11 +121,6 @@ public:
     void extractVersion(int *maj, int *min) const;
 
     QQmlScript::LocationSpan location;
-
-    bool operator<(const Import& other) const {
-        // Shorter URIs first, so 'import X' is before 'import X.Y'
-        return (uri.length() < other.uri.length());
-    }
 };
 
 class Object;
diff --git a/src/quick/items/qquickwindowmodule_p.h b/src/quick/items/qquickwindowmodule_p.h
index 72fd2b32bdd395afcc330ccea5758a181438468e..156ccec127d2b1bc84a6ba44769f4f920529fae2 100644
--- a/src/quick/items/qquickwindowmodule_p.h
+++ b/src/quick/items/qquickwindowmodule_p.h
@@ -42,14 +42,14 @@
 #ifndef QQUICKWINDOWMODULE_H
 #define QQUICKWINDOWMODULE_H
 
-#include <qqml.h>
+#include <private/qtquickglobal_p.h>
 
 QT_BEGIN_HEADER
 
 QT_BEGIN_NAMESPACE
 
 
-class QQuickWindowModule
+class Q_QUICK_PRIVATE_EXPORT QQuickWindowModule
 {
 public:
     static void defineModule();
diff --git a/src/quick/particles/qquickparticlesmodule_p.h b/src/quick/particles/qquickparticlesmodule_p.h
index b7cf09919e7cffff4319c51795882865a3e1ef93..23a40488cfbaaf448da87aa31a498051eb96c2c7 100644
--- a/src/quick/particles/qquickparticlesmodule_p.h
+++ b/src/quick/particles/qquickparticlesmodule_p.h
@@ -39,16 +39,16 @@
 **
 ****************************************************************************/
 
-#ifndef QQuickPARTICLESMODULE_H
-#define QQuickPARTICLESMODULE_H
+#ifndef QQUICKPARTICLESMODULE_H
+#define QQUICKPARTICLESMODULE_H
 
-#include <qqml.h>
+#include <private/qtquickglobal_p.h>
 
 QT_BEGIN_HEADER
 
 QT_BEGIN_NAMESPACE
 
-class QQuickParticlesModule
+class Q_QUICK_PRIVATE_EXPORT QQuickParticlesModule
 {
 public:
     static void defineModule();
@@ -58,4 +58,4 @@ QT_END_NAMESPACE
 
 QT_END_HEADER
 
-#endif // QQuickPARTICLESMODULE_H
+#endif // QQUICKPARTICLESMODULE_H
diff --git a/src/quick/qtquick2.cpp b/src/quick/qtquick2.cpp
index a97dade10699523d0ad5d22ffbb2a50b1edb2275..3e04a12d58b10b9654873524230f6a13e4911ac5 100644
--- a/src/quick/qtquick2.cpp
+++ b/src/quick/qtquick2.cpp
@@ -44,8 +44,6 @@
 #include <private/qquickutilmodule_p.h>
 #include <private/qqmlvaluetype_p.h>
 #include <private/qquickitemsmodule_p.h>
-#include <private/qquickparticlesmodule_p.h>
-#include <private/qquickwindowmodule_p.h>
 
 #include <private/qqmlenginedebugservice_p.h>
 #include <private/qqmldebugstatesdelegate_p.h>
@@ -175,8 +173,6 @@ void QQmlQtQuick2Module::defineModule()
     QQuickUtilModule::defineModule();
     QQmlEnginePrivate::defineModule();
     QQuickItemsModule::defineModule();
-    QQuickParticlesModule::defineModule();
-    QQuickWindowModule::defineModule();
     QQmlValueTypeFactory::registerValueTypes();
 
     if (QQmlEngineDebugService::isDebuggingEnabled()) {
diff --git a/tests/auto/qml/qqmllanguage/data/lib/com/nokia/installedtest0/InstalledTest3.qml b/tests/auto/qml/qqmllanguage/data/lib/com/nokia/installedtest0/InstalledTest3.qml
deleted file mode 100644
index 26a5d6bba9626cc8dc08f65ba5d8d972ae593923..0000000000000000000000000000000000000000
--- a/tests/auto/qml/qqmllanguage/data/lib/com/nokia/installedtest0/InstalledTest3.qml
+++ /dev/null
@@ -1,2 +0,0 @@
-import QtQuick 2.0
-Rectangle {}
diff --git a/tests/auto/qml/qqmllanguage/data/lib/com/nokia/installedtest0/qmldir b/tests/auto/qml/qqmllanguage/data/lib/com/nokia/installedtest0/qmldir
index ce51ecae1a7d10a11667bb971d966d8dc4688a37..b30122609929191885f9caf748917ac6e6519eb8 100644
--- a/tests/auto/qml/qqmllanguage/data/lib/com/nokia/installedtest0/qmldir
+++ b/tests/auto/qml/qqmllanguage/data/lib/com/nokia/installedtest0/qmldir
@@ -1,3 +1,2 @@
 InstalledTest 1.4 InstalledTest2.qml
 InstalledTestTP 0.0 InstalledTest.qml
-Rectangle 1.5 InstalledTest3.qml
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index f70b212231e63b1d79106a7b02fea41f4489c83d..47202693131693b9805958b4326f044a4abaae43 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -1881,21 +1881,19 @@ void tst_qqmllanguage::importsOrder_data()
            << (!qmlCheckTypes()?"QQuickRectangle":"")
            << (!qmlCheckTypes()?"":"InstalledTest is ambiguous. Found in lib/com/nokia/installedtest/ in version 1.0 and 1.4")
            << false;
-
-    // Note: imports are now reordered by increasing order of URI length
     QTest::newRow("installed import versus builtin 1") <<
-           "import com.nokia.installedtest0 1.5\n"
            "import com.nokia.installedtest 1.5\n"
+           "import QtQuick 2.0\n"
            "Rectangle {}"
            << (!qmlCheckTypes()?"QQuickRectangle":"")
-           << (!qmlCheckTypes()?"":"Rectangle is ambiguous. Found in lib/com/nokia/installedtest0/ and in ")
+           << (!qmlCheckTypes()?"":"Rectangle is ambiguous. Found in file://")
            << true;
     QTest::newRow("installed import versus builtin 2") <<
            "import QtQuick 2.0\n"
            "import com.nokia.installedtest 1.5\n"
            "Rectangle {}"
            << (!qmlCheckTypes()?"QQuickText":"")
-           << (!qmlCheckTypes()?"":"Rectangle is ambiguous. Found in lib/com/nokia/installedtest/ and in ")
+           << (!qmlCheckTypes()?"":"Rectangle is ambiguous. Found in lib/com/nokia/installedtest/ and in file://")
            << true;
     QTest::newRow("namespaces cannot be overridden by types 1") <<
            "import QtQuick 2.0 as Rectangle\n"
diff --git a/tests/auto/qml/qqmlmoduleplugin/data/importsNested.1.errors.txt b/tests/auto/qml/qqmlmoduleplugin/data/importsNested.1.errors.txt
new file mode 100644
index 0000000000000000000000000000000000000000..262193788b1f2aced50b90911f2925fa8b813c55
--- /dev/null
+++ b/tests/auto/qml/qqmlmoduleplugin/data/importsNested.1.errors.txt
@@ -0,0 +1 @@
+1:1:module "com.nokia.AutoTestQmlNestedPluginType.Nested" is not installed
diff --git a/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp b/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp
index c110ce71d39e67920c04a0ff2796351833e16f86..f6c165840d7ae28445abc331e12e264d75c0ebc6 100644
--- a/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp
+++ b/tests/auto/qml/qqmlmoduleplugin/tst_qqmlmoduleplugin.cpp
@@ -354,12 +354,12 @@ void tst_qqmlmoduleplugin::importsNested_data()
     QTest::addColumn<QString>("file");
     QTest::addColumn<QString>("errorFile");
 
-    // Note: specific order required to induce failure (no other test case should import the
-    // plugin used for this test, or the alternate order test will pass spuriously)
-    QTest::newRow("alternateOrder") << "importsNested.1.qml" << QString();
-    QTest::newRow("expectedOrder") << "importsNested.2.qml" << QString();
+    // Note: no other test case should import the plugin used for this test, or the
+    // wrong order test will pass spuriously
+    QTest::newRow("wrongOrder") << "importsNested.1.qml" << "importsNested.1.errors.txt";
     QTest::newRow("missingImport") << "importsNested.3.qml" << "importsNested.3.errors.txt";
     QTest::newRow("invalidVersion") << "importsNested.4.qml" << "importsNested.4.errors.txt";
+    QTest::newRow("correctOrder") << "importsNested.2.qml" << QString();
 }
 void tst_qqmlmoduleplugin::importsNested()
 {