diff --git a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h
index b3d2093a0116ccf8c35ddd05141850f963ee57bf..7f5cea64238e027a681b23ba025730f6f96e753c 100644
--- a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h
+++ b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h
@@ -36,8 +36,6 @@
 #include <QSet>
 #include <QTimer>
 
-#include <qdeclarative.h>
-
 QT_FORWARD_DECLARE_CLASS(QDir)
 
 namespace Utils {
@@ -181,10 +179,4 @@ public:
 
 } // namespace QmlProjectManager
 
-QML_DECLARE_TYPE(QmlProjectManager::QmlFileFilterItem)
-QML_DECLARE_TYPE(QmlProjectManager::JsFileFilterItem)
-QML_DECLARE_TYPE(QmlProjectManager::ImageFileFilterItem)
-QML_DECLARE_TYPE(QmlProjectManager::CssFileFilterItem)
-QML_DECLARE_TYPE(QmlProjectManager::OtherFileFilterItem)
-
 #endif // FILEFILTERITEMS_HPROJECTITEM_H
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp
index a78b35cf65291c34970acf6f7214ba0a80d55739..b23f090e8bb7137ead46e8db5c8312d031ca7bb1 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp
@@ -30,26 +30,102 @@
 #include "qmlprojectfileformat.h"
 #include "qmlprojectitem.h"
 #include "filefilteritems.h"
+#include <qmljs/qmljssimplereader.h>
 
-#include <qdeclarative.h>
+enum {
+    debug = false
+};
+
+namespace   {
+
+void setupFileFilterItem(QmlProjectManager::FileFilterBaseItem *fileFilterItem, const QmlJS::SimpleReaderNode::Ptr &node)
+{
+    const QVariant directoryProperty = node->property(QLatin1String("directory"));
+    if (directoryProperty.isValid())
+        fileFilterItem->setDirectory(directoryProperty.toString());
+
+    const QVariant recursiveProperty = node->property(QLatin1String("recursive"));
+    if (recursiveProperty.isValid())
+        fileFilterItem->setRecursive(recursiveProperty.toBool());
+
+    const QVariant pathsProperty = node->property(QLatin1String("paths"));
+    if (pathsProperty.isValid())
+        fileFilterItem->setPathsProperty(pathsProperty.toStringList());
+
+    if (debug)
+        qDebug() << "directory:" << directoryProperty << "recursive" << recursiveProperty << "paths" << pathsProperty;
+}
+
+} //namespace
 
 namespace QmlProjectManager {
 
-void QmlProjectFileFormat::registerDeclarativeTypes()
+QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const QString &fileName, QString *errorMessage)
 {
-    qmlRegisterType<QmlProjectManager::QmlProjectContentItem>();
-    qmlRegisterType<QmlProjectManager::QmlProjectItem>("QmlProject",1,0,"Project");
-    qmlRegisterType<QmlProjectManager::QmlProjectItem>("QmlProject",1,1,"Project");
-
-    qmlRegisterType<QmlProjectManager::QmlFileFilterItem>("QmlProject",1,0,"QmlFiles");
-    qmlRegisterType<QmlProjectManager::QmlFileFilterItem>("QmlProject",1,1,"QmlFiles");
-    qmlRegisterType<QmlProjectManager::JsFileFilterItem>("QmlProject",1,0,"JavaScriptFiles");
-    qmlRegisterType<QmlProjectManager::JsFileFilterItem>("QmlProject",1,1,"JavaScriptFiles");
-    qmlRegisterType<QmlProjectManager::ImageFileFilterItem>("QmlProject",1,0,"ImageFiles");
-    qmlRegisterType<QmlProjectManager::ImageFileFilterItem>("QmlProject",1,1,"ImageFiles");
-    qmlRegisterType<QmlProjectManager::CssFileFilterItem>("QmlProject",1,0,"CssFiles");
-    qmlRegisterType<QmlProjectManager::CssFileFilterItem>("QmlProject",1,1,"CssFiles");
-    qmlRegisterType<QmlProjectManager::OtherFileFilterItem>("QmlProject",1,1,"Files");
+    QmlJS::SimpleReader simpleQmlJSReader;
+
+    const QmlJS::SimpleReaderNode::Ptr rootNode = simpleQmlJSReader.readFile(fileName);
+
+    if (!simpleQmlJSReader.errors().isEmpty() || !rootNode->isValid()) {
+        qWarning() << "unable to parse:" << fileName;
+        qWarning() << simpleQmlJSReader.errors();
+        if (errorMessage)
+            *errorMessage = simpleQmlJSReader.errors().join(QLatin1String(", "));
+        return 0;
+    }
+
+    if (rootNode->name() == QLatin1String("Project")) {
+        QmlProjectItem *projectItem = new QmlProjectItem();
+
+        const QVariant mainFileProperty = rootNode->property(QLatin1String("mainFile"));
+        if (mainFileProperty.isValid())
+            projectItem->setMainFile(mainFileProperty.toString());
+
+        const QVariant importPathsProperty = rootNode->property(QLatin1String("importPaths"));
+        if (importPathsProperty.isValid())
+            projectItem->setImportPaths(importPathsProperty.toStringList());
+
+        if (debug) {
+            qDebug() << "importPath:" << importPathsProperty << "mainFile:" << mainFileProperty;
+        }
+
+        foreach (const QmlJS::SimpleReaderNode::Ptr &childNode, rootNode->children()) {
+            if (childNode->name() == QLatin1String("QmlFiles")) {
+                if (debug)
+                    qDebug() << "QmlFiles";
+                QmlFileFilterItem *qmlFileFilterItem = new QmlFileFilterItem(projectItem);
+                setupFileFilterItem(qmlFileFilterItem, childNode);
+                projectItem->appendContent(qmlFileFilterItem);
+            } else if (childNode->name() == QLatin1String("JavaScriptFiles")) {
+                if (debug)
+                    qDebug() << "JavaScriptFiles";
+                JsFileFilterItem *jsFileFilterItem = new JsFileFilterItem(projectItem);
+                setupFileFilterItem(jsFileFilterItem, childNode);
+                projectItem->appendContent(jsFileFilterItem);
+            } else if (childNode->name() == QLatin1String("ImageFiles")) {
+                if (debug)
+                    qDebug() << "ImageFiles";
+                ImageFileFilterItem *imageFileFilterItem = new ImageFileFilterItem(projectItem);
+                setupFileFilterItem(imageFileFilterItem, childNode);
+                projectItem->appendContent(imageFileFilterItem);
+
+            } else if (childNode->name() == QLatin1String("CssFiles")) {
+                if (debug)
+                    qDebug() << "CssFiles";
+                CssFileFilterItem *cssFileFilterItem = new CssFileFilterItem(projectItem);
+                setupFileFilterItem(cssFileFilterItem, childNode);
+                projectItem->appendContent(cssFileFilterItem);
+            } else {
+                qWarning() << "Unkwown type:" << childNode->name();
+            }
+        }
+        return projectItem;
+    }
+
+    if (errorMessage)
+        *errorMessage = tr("Invalid root element: %1").arg(rootNode->name());
+
+    return 0;
 }
 
 } // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.h
index 89f8cc1e98fcfaa9479dea759738d6ac800d0610..782239b6822de2abb8de873f2cc959ddfe5b2ac8 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.h
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.h
@@ -32,9 +32,14 @@
 
 namespace QmlProjectManager {
 
-class QmlProjectFileFormat {
+class QmlProjectItem;
+
+class QmlProjectFileFormat
+{
+    Q_DECLARE_TR_FUNCTIONS(QmlProjectManager::QmlProjectFileFormat);
+
 public:
-    static void registerDeclarativeTypes();
+    static QmlProjectItem *parseProjectFile(const QString &fileName, QString *errorMessage = 0);
 };
 
 } // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
index 7b6eef9e2abc4797089c78b2334f7333c022aa12..8ac084271e9dca838a36ffe20cd2f7570eb1780a 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
@@ -77,12 +77,6 @@ QmlProjectItem::~QmlProjectItem()
     delete d_ptr;
 }
 
-QDeclarativeListProperty<QmlProjectContentItem> QmlProjectItem::content()
-{
-    Q_D(QmlProjectItem);
-    return QDeclarativeListProperty<QmlProjectContentItem>(this, d->content);
-}
-
 QString QmlProjectItem::sourceDirectory() const
 {
     Q_D(const QmlProjectItem);
@@ -194,6 +188,12 @@ void QmlProjectItem::setMainFile(const QString &mainFilePath)
     emit mainFileChanged();
 }
 
+void QmlProjectItem::appendContent(QmlProjectContentItem *contentItem)
+{
+    Q_D(QmlProjectItem);
+    d->content.append(contentItem);
+}
+
 } // namespace QmlProjectManager
 
 #include "qmlprojectitem.moc"
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h
index e4b78ffe2269fee11155b1ba856dc450445028bd..af73e0b17ae139c6fdfb34c63487bae6d325acff 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h
@@ -33,7 +33,6 @@
 #include <QObject>
 #include <QSet>
 #include <QStringList>
-#include <qdeclarative.h>
 
 namespace QmlProjectManager {
 
@@ -52,19 +51,14 @@ class QmlProjectItem : public QObject
     Q_OBJECT
     Q_DECLARE_PRIVATE(QmlProjectItem)
 
-    Q_PROPERTY(QDeclarativeListProperty<QmlProjectManager::QmlProjectContentItem> content READ content DESIGNABLE false)
     Q_PROPERTY(QString sourceDirectory READ sourceDirectory NOTIFY sourceDirectoryChanged)
     Q_PROPERTY(QStringList importPaths READ importPaths WRITE setImportPaths NOTIFY importPathsChanged)
     Q_PROPERTY(QString mainFile READ mainFile WRITE setMainFile NOTIFY mainFileChanged)
 
-    Q_CLASSINFO("DefaultProperty", "content")
-
 public:
     QmlProjectItem(QObject *parent = 0);
     ~QmlProjectItem();
 
-    QDeclarativeListProperty<QmlProjectContentItem> content();
-
     QString sourceDirectory() const;
     void setSourceDirectory(const QString &directoryPath);
 
@@ -77,6 +71,7 @@ public:
     QString mainFile() const;
     void setMainFile(const QString &mainFilePath);
 
+    void appendContent(QmlProjectContentItem* contentItem);
 
 signals:
     void qmlFilesChanged(const QSet<QString> &, const QSet<QString> &);
@@ -90,8 +85,4 @@ protected:
 
 } // namespace QmlProjectManager
 
-QML_DECLARE_TYPE(QmlProjectManager::QmlProjectItem)
-QML_DECLARE_TYPE(QmlProjectManager::QmlProjectContentItem)
-Q_DECLARE_METATYPE(QList<QmlProjectManager::QmlProjectContentItem *>)
-
 #endif // QMLPROJECTITEM_H
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index 6c791b5c4588831e16992abfe7c9b47e24f7c15f..afdf42aeacdf4cf18e5eb98922e2e4479838a11b 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -29,6 +29,7 @@
 
 #include "qmlproject.h"
 #include "qmlprojectfile.h"
+#include "fileformat/qmlprojectfileformat.h"
 #include "fileformat/qmlprojectitem.h"
 #include "qmlprojectrunconfiguration.h"
 #include "qmlprojectconstants.h"
@@ -46,13 +47,14 @@
 #include <projectexplorer/target.h>
 #include <qtsupport/qtsupportconstants.h>
 
-#include <QDeclarativeComponent>
 #include <QDebug>
 
 namespace QmlProjectManager {
 
 namespace Internal {
 
+
+
 class QmlProjectKitMatcher : public ProjectExplorer::KitMatcher
 {
 public:
@@ -182,22 +184,16 @@ void QmlProject::parseProject(RefreshOptions options)
         if (options & ProjectFile)
             delete m_projectItem.data();
         if (!m_projectItem) {
-            Utils::FileReader reader;
-            if (reader.fetch(m_fileName)) {
-                QDeclarativeComponent *component = new QDeclarativeComponent(&m_engine, this);
-                component->setData(reader.data(), QUrl::fromLocalFile(m_fileName));
-                if (component->isReady()
-                    && qobject_cast<QmlProjectItem*>(component->create())) {
-                    m_projectItem = qobject_cast<QmlProjectItem*>(component->create());
-                    connect(m_projectItem.data(), SIGNAL(qmlFilesChanged(QSet<QString>,QSet<QString>)),
-                            this, SLOT(refreshFiles(QSet<QString>,QSet<QString>)));
-                } else {
-                    messageManager->printToOutputPane(tr("Error while loading project file %1.").arg(m_fileName), Core::MessageManager::NoModeSwitch);
-                    messageManager->printToOutputPane(component->errorString(), Core::MessageManager::NoModeSwitch);
-                }
-            } else {
-                messageManager->printToOutputPane(tr("QML project: %1").arg(reader.errorString()), Core::MessageManager::NoModeSwitch);
-            }
+              QString errorMessage;
+              m_projectItem = QmlProjectFileFormat::parseProjectFile(m_fileName, &errorMessage);
+              if (m_projectItem) {
+                  connect(m_projectItem.data(), SIGNAL(qmlFilesChanged(QSet<QString>,QSet<QString>)),
+                          this, SLOT(refreshFiles(QSet<QString>,QSet<QString>)));
+
+              } else {
+                  messageManager->printToOutputPane(tr("Error while loading project file %1.").arg(m_fileName), Core::MessageManager::NoModeSwitch);
+                  messageManager->printToOutputPane(errorMessage, Core::MessageManager::NoModeSwitch);
+              }
         }
         if (m_projectItem) {
             m_projectItem.data()->setSourceDirectory(projectDir().path());
diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h
index cc34f18f65edbe85ba8cbcef319ec612dfe92a84..01b6ccb58964f1099ee2323d4c0dca5293e9cece 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.h
+++ b/src/plugins/qmlprojectmanager/qmlproject.h
@@ -34,7 +34,6 @@
 
 #include <projectexplorer/project.h>
 
-#include <QDeclarativeEngine>
 #include <QPointer>
 
 namespace ProjectExplorer { class RunConfiguration; }
@@ -119,8 +118,6 @@ private:
     // plain format
     QStringList m_files;
 
-    // qml based, new format
-    QDeclarativeEngine m_engine;
     QPointer<QmlProjectItem> m_projectItem;
 
     Internal::QmlProjectNode *m_rootNode;
diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro
index 28888a726b0105440d21d7448e683598700bab6f..cd42fc753f56e18711307c3f30e5710d7adc2d2f 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro
+++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro
@@ -1,4 +1,4 @@
-QT += network declarative
+QT += network
 
 include(../../qtcreatorplugin.pri)
 include(fileformat/fileformat.pri)
diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
index fa4d7cb8e6a6ddf13c1051e2496c6edab95d3b50..00470d2c223109d1e8c602cbd4479b86c7298be6 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
@@ -76,8 +76,6 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage)
 
     Internal::QmlApplicationWizard::createInstances(this);
 
-    QmlProjectFileFormat::registerDeclarativeTypes();
-
     Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance();
     iconProvider->registerIconOverlayForSuffix(QIcon(QLatin1String(":/qmlproject/images/qmlproject.png")),
                                                QLatin1String("qmlproject"));