diff --git a/src/tools/qml/qmldump/main.cpp b/src/tools/qml/qmldump/main.cpp
index 8a452057164d1098eaa2cb572e1e710e8fa43fed..6bdcecf27048ec24caa03247a2cebf2be3cde201 100644
--- a/src/tools/qml/qmldump/main.cpp
+++ b/src/tools/qml/qmldump/main.cpp
@@ -14,6 +14,7 @@
 
 static QHash<QByteArray, const QDeclarativeType *> qmlTypeByCppName;
 static QHash<QByteArray, QByteArray> cppToQml;
+static QByteArray pluginPackage;
 
 QByteArray convertToQmlType(const QByteArray &cppName)
 {
@@ -178,10 +179,14 @@ public:
 
 void dump(const QMetaObject *meta, QXmlStreamWriter *xml)
 {
+    QByteArray qmlTypeName = convertToQmlType(meta->className());
+    if (!pluginPackage.isEmpty() && !qmlTypeName.startsWith(pluginPackage))
+        return;
+
     xml->writeStartElement("type");
 
     QXmlStreamAttributes attributes;
-    attributes.append(QXmlStreamAttribute("name", convertToQmlType(meta->className())));
+    attributes.append(QXmlStreamAttribute("name", qmlTypeName));
 
     if (const QDeclarativeType *qmlTy = qmlTypeByCppName.value(meta->className())) {
         attributes.append(QXmlStreamAttribute("version", QString("%1.%2").arg(qmlTy->majorVersion()).arg(qmlTy->minorVersion())));
@@ -234,20 +239,44 @@ int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
 
+    if (argc != 1 && argc != 2) {
+        qWarning() << "Usage: qmldump [path/to/plugin/directory]";
+        return 1;
+    }
+
+    QString pluginImportName;
+    QString pluginImportPath;
+    if (argc == 2) {
+        QFileInfo pluginPath(argv[1]);
+        if (pluginPath.exists() && pluginPath.isDir()) {
+            pluginImportPath = pluginPath.absolutePath();
+            pluginImportName = pluginPath.fileName();
+            pluginPackage = (pluginImportName + ".").toLatin1();
+        }
+    }
+
     QDeclarativeView view;
     QDeclarativeEngine *engine = view.engine();
+    if (!pluginImportPath.isEmpty())
+        engine->addImportPath(pluginImportPath);
+
+    QByteArray importCode;
+    importCode += "import Qt 4.7;\n";
+    importCode += "import Qt.labs.particles 4.7;\n";
+    importCode += "import Qt.labs.gestures 4.7;\n";
+    importCode += "import Qt.labs.folderlistmodel 4.7;\n";
+    importCode += "import org.webkit 1.0;\n";
+    if (!pluginImportName.isEmpty())
+        importCode += QString("import %0 1.0;\n").arg(pluginImportName);
 
     {
-        QByteArray code;
-        code += "import Qt 4.7;\n";
-        code += "import Qt.labs.particles 4.7;\n";
-        code += "import Qt.labs.gestures 4.7;\n";
-        code += "import Qt.labs.folderlistmodel 4.7;\n";
-        code += "import org.webkit 1.0;\n";
+        QByteArray code = importCode;
         code += "Item {}";
         QDeclarativeComponent c(engine);
         c.setData(code, QUrl("xxx"));
         c.create();
+        if (!c.errors().isEmpty())
+            qDebug() << c.errorString();
     }
 
     cppToQml.insert("QString", "string");
@@ -293,12 +322,7 @@ int main(int argc, char *argv[])
         QByteArray tyName = ty->qmlTypeName();
         tyName = tyName.mid(tyName.lastIndexOf('/') + 1);
 
-        QByteArray code;
-        code += "import Qt 4.7;\n";
-        code += "import Qt.labs.particles 4.7;\n";
-        code += "import Qt.labs.gestures 4.7;\n";
-        code += "import Qt.labs.folderlistmodel 4.7;\n";
-        code += "import org.webkit 1.0;\n";
+        QByteArray code = importCode;
         code += tyName;
         code += " {}\n";