diff --git a/src/libs/qmljs/qmljscomponentversion.cpp b/src/libs/languageutils/componentversion.cpp
similarity index 96%
rename from src/libs/qmljs/qmljscomponentversion.cpp
rename to src/libs/languageutils/componentversion.cpp
index b74e2b9e3e83a6315f95392bcab4cb660a0ea546..5c874bfad0379cff43143f2c2cd0a32703f74d03 100644
--- a/src/libs/qmljs/qmljscomponentversion.cpp
+++ b/src/libs/languageutils/componentversion.cpp
@@ -31,9 +31,9 @@
 **
 **************************************************************************/
 
-#include "qmljscomponentversion.h"
+#include "componentversion.h"
 
-using namespace QmlJS;
+using namespace LanguageUtils;
 
 const int ComponentVersion::NoVersion = -1;
 
@@ -56,7 +56,7 @@ bool ComponentVersion::isValid() const
     return _major >= 0 && _minor >= 0;
 }
 
-namespace QmlJS {
+namespace LanguageUtils {
 
 bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs)
 {
diff --git a/src/libs/qmljs/qmljscomponentversion.h b/src/libs/languageutils/componentversion.h
similarity index 73%
rename from src/libs/qmljs/qmljscomponentversion.h
rename to src/libs/languageutils/componentversion.h
index f537fe60411fbd72230dfe7b1a1f1b7d024eae78..cf8d900ad8023d44ab5ac93d6df6cd0d5836b091 100644
--- a/src/libs/qmljs/qmljscomponentversion.h
+++ b/src/libs/languageutils/componentversion.h
@@ -31,14 +31,14 @@
 **
 **************************************************************************/
 
-#ifndef QMLJSCOMPONENTVERSION_H
-#define QMLJSCOMPONENTVERSION_H
+#ifndef COMPONENTVERSION_H
+#define COMPONENTVERSION_H
 
-#include "qmljs_global.h"
+#include "languageutils_global.h"
 
-namespace QmlJS {
+namespace LanguageUtils {
 
-class QMLJS_EXPORT ComponentVersion
+class LANGUAGEUTILS_EXPORT ComponentVersion
 {
     int _major;
     int _minor;
@@ -58,11 +58,11 @@ public:
     bool isValid() const;
 };
 
-bool operator<(const ComponentVersion &lhs, const ComponentVersion &rhs);
-bool operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs);
-bool operator==(const ComponentVersion &lhs, const ComponentVersion &rhs);
-bool operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs);
+bool LANGUAGEUTILS_EXPORT operator<(const ComponentVersion &lhs, const ComponentVersion &rhs);
+bool LANGUAGEUTILS_EXPORT operator<=(const ComponentVersion &lhs, const ComponentVersion &rhs);
+bool LANGUAGEUTILS_EXPORT operator==(const ComponentVersion &lhs, const ComponentVersion &rhs);
+bool LANGUAGEUTILS_EXPORT operator!=(const ComponentVersion &lhs, const ComponentVersion &rhs);
 
-} // namespace QmlJS
+} // namespace LanguageUtils
 
-#endif // QMLJSCOMPONENTVERSION_H
+#endif // COMPONENTVERSION_H
diff --git a/src/libs/languageutils/fakemetaobject.cpp b/src/libs/languageutils/fakemetaobject.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..115de65bb862782327654c0226fdd38429c4710b
--- /dev/null
+++ b/src/libs/languageutils/fakemetaobject.cpp
@@ -0,0 +1,171 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** No Commercial Usage
+**
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "fakemetaobject.h"
+
+using namespace LanguageUtils;
+
+FakeMetaEnum::FakeMetaEnum(const QString &name)
+    : m_name(name)
+{}
+
+QString FakeMetaEnum::name() const
+{ return m_name; }
+
+void FakeMetaEnum::addKey(const QString &key, int value)
+{ m_keys.append(key); m_values.append(value); }
+
+QString FakeMetaEnum::key(int index) const
+{ return m_keys.at(index); }
+
+int FakeMetaEnum::keyCount() const
+{ return m_keys.size(); }
+
+QStringList FakeMetaEnum::keys() const
+{ return m_keys; }
+
+FakeMetaMethod::FakeMetaMethod(const QString &name, const QString &returnType)
+    : m_name(name)
+    , m_returnType(returnType)
+    , m_methodTy(FakeMetaMethod::Method)
+    , m_methodAccess(FakeMetaMethod::Public)
+{}
+
+QString FakeMetaMethod::methodName() const
+{ return m_name; }
+
+QStringList FakeMetaMethod::parameterNames() const
+{ return m_paramNames; }
+
+QStringList FakeMetaMethod::parameterTypes() const
+{ return m_paramTypes; }
+
+void FakeMetaMethod::addParameter(const QString &name, const QString &type)
+{ m_paramNames.append(name); m_paramTypes.append(type); }
+
+int FakeMetaMethod::methodType() const
+{ return m_methodTy; }
+
+void FakeMetaMethod::FakeMetaMethod::setMethodType(int methodType)
+{ m_methodTy = methodType; }
+
+int FakeMetaMethod::access() const
+{ return m_methodAccess; }
+
+
+FakeMetaProperty::FakeMetaProperty(const QString &name, const QString &type, bool isList, bool isWritable, bool isPointer)
+    : m_propertyName(name), m_type(type), m_isList(isList), m_isWritable(isWritable), m_isPointer(isPointer)
+{}
+
+QString FakeMetaProperty::name() const
+{ return m_propertyName; }
+
+QString FakeMetaProperty::typeName() const
+{ return m_type; }
+
+bool FakeMetaProperty::isList() const
+{ return m_isList; }
+
+bool FakeMetaProperty::isWritable() const
+{ return m_isWritable; }
+
+bool FakeMetaProperty::isPointer() const
+{ return m_isPointer; }
+
+
+FakeMetaObject::FakeMetaObject()
+    : m_super(0)
+{
+}
+
+void FakeMetaObject::addExport(const QString &name, const QString &package, ComponentVersion version)
+{
+    Export exp;
+    exp.type = name;
+    exp.package = package;
+    exp.version = version;
+    exp.packageNameVersion = QString::fromLatin1("%1.%2 %3.%4").arg(
+                package, name,
+                QString::number(version.majorVersion()),
+                QString::number(version.minorVersion()));
+    m_exports.append(exp);
+}
+QList<FakeMetaObject::Export> FakeMetaObject::exports() const
+{ return m_exports; }
+
+void FakeMetaObject::setSuperclassName(const QString &superclass)
+{ m_superName = superclass; }
+QString FakeMetaObject::superclassName() const
+{ return m_superName; }
+
+void FakeMetaObject::setSuperclass(FakeMetaObject *superClass)
+{ m_super = superClass; }
+const FakeMetaObject *FakeMetaObject::superClass() const
+{ return m_super; }
+
+void FakeMetaObject::addEnum(const FakeMetaEnum &fakeEnum)
+{ m_enumNameToIndex.insert(fakeEnum.name(), m_enums.size()); m_enums.append(fakeEnum); }
+int FakeMetaObject::enumeratorCount() const
+{ return m_enums.size(); }
+int FakeMetaObject::enumeratorOffset() const
+{ return 0; }
+FakeMetaEnum FakeMetaObject::enumerator(int index) const
+{ return m_enums.at(index); }
+int FakeMetaObject::enumeratorIndex(const QString &name) const
+{ return m_enumNameToIndex.value(name, -1); }
+
+void FakeMetaObject::addProperty(const FakeMetaProperty &property)
+{ m_propNameToIdx.insert(property.name(), m_props.size()); m_props.append(property); }
+int FakeMetaObject::propertyCount() const
+{ return m_props.size(); }
+int FakeMetaObject::propertyOffset() const
+{ return 0; }
+FakeMetaProperty FakeMetaObject::property(int index) const
+{ return m_props.at(index); }
+int FakeMetaObject::propertyIndex(const QString &name) const
+{ return m_propNameToIdx.value(name, -1); }
+
+void FakeMetaObject::addMethod(const FakeMetaMethod &method)
+{ m_methods.append(method); }
+int FakeMetaObject::methodCount() const
+{ return m_methods.size(); }
+int FakeMetaObject::methodOffset() const
+{ return 0; }
+FakeMetaMethod FakeMetaObject::method(int index) const
+{ return m_methods.at(index); }
+
+QString FakeMetaObject::defaultPropertyName() const
+{ return m_defaultPropertyName; }
+
+void FakeMetaObject::setDefaultPropertyName(const QString defaultPropertyName)
+{ m_defaultPropertyName = defaultPropertyName; }
diff --git a/src/libs/languageutils/fakemetaobject.h b/src/libs/languageutils/fakemetaobject.h
new file mode 100644
index 0000000000000000000000000000000000000000..6fd032e5e59660f6065ff6f424b6206ed7800c6e
--- /dev/null
+++ b/src/libs/languageutils/fakemetaobject.h
@@ -0,0 +1,174 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** No Commercial Usage
+**
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#ifndef FAKEMETAOBJECT_H
+#define FAKEMETAOBJECT_H
+
+#include "languageutils_global.h"
+#include "componentversion.h"
+
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QList>
+#include <QtCore/QHash>
+
+namespace LanguageUtils {
+
+class LANGUAGEUTILS_EXPORT FakeMetaEnum {
+    QString m_name;
+    QStringList m_keys;
+    QList<int> m_values;
+
+public:
+    FakeMetaEnum(const QString &name);
+
+    QString name() const;
+
+    void addKey(const QString &key, int value);
+    QString key(int index) const;
+    int keyCount() const;
+    QStringList keys() const;
+};
+
+class LANGUAGEUTILS_EXPORT FakeMetaMethod {
+public:
+    enum {
+        Signal,
+        Slot,
+        Method
+    };
+
+    enum {
+        Private,
+        Protected,
+        Public
+    };
+
+public:
+    FakeMetaMethod(const QString &name, const QString &returnType = QString());
+
+    QString methodName() const;
+    QStringList parameterNames() const;
+    QStringList parameterTypes() const;
+    void addParameter(const QString &name, const QString &type);
+
+    int methodType() const;
+    void setMethodType(int methodType);
+
+    int access() const;
+
+private:
+    QString m_name;
+    QString m_returnType;
+    QStringList m_paramNames;
+    QStringList m_paramTypes;
+    int m_methodTy;
+    int m_methodAccess;
+};
+
+class LANGUAGEUTILS_EXPORT FakeMetaProperty {
+    QString m_propertyName;
+    QString m_type;
+    bool m_isList;
+    bool m_isWritable;
+    bool m_isPointer;
+
+public:
+    FakeMetaProperty(const QString &name, const QString &type, bool isList, bool isWritable, bool isPointer);
+
+    QString name() const;
+    QString typeName() const;
+
+    bool isList() const;
+    bool isWritable() const;
+    bool isPointer() const;
+};
+
+class LANGUAGEUTILS_EXPORT FakeMetaObject {
+    Q_DISABLE_COPY(FakeMetaObject);
+
+public:
+    class Export {
+    public:
+        QString package;
+        QString type;
+        ComponentVersion version;
+        QString packageNameVersion;
+    };
+
+private:
+    QList<Export> m_exports;
+    const FakeMetaObject *m_super;
+    QString m_superName;
+    QList<FakeMetaEnum> m_enums;
+    QHash<QString, int> m_enumNameToIndex;
+    QList<FakeMetaProperty> m_props;
+    QHash<QString, int> m_propNameToIdx;
+    QList<FakeMetaMethod> m_methods;
+    QString m_defaultPropertyName;
+
+public:
+    FakeMetaObject();
+
+    void addExport(const QString &name, const QString &package, ComponentVersion version);
+    QList<Export> exports() const;
+
+    void setSuperclassName(const QString &superclass);
+    QString superclassName() const;
+    void setSuperclass(FakeMetaObject *superClass);
+    const FakeMetaObject *superClass() const;
+
+    void addEnum(const FakeMetaEnum &fakeEnum);
+    int enumeratorCount() const;
+    int enumeratorOffset() const;
+    FakeMetaEnum enumerator(int index) const;
+    int enumeratorIndex(const QString &name) const;
+
+    void addProperty(const FakeMetaProperty &property);
+    int propertyCount() const;
+    int propertyOffset() const;
+    FakeMetaProperty property(int index) const;
+    int propertyIndex(const QString &name) const;
+
+    void addMethod(const FakeMetaMethod &method);
+    int methodCount() const;
+    int methodOffset() const;
+    FakeMetaMethod method(int index) const;
+
+    QString defaultPropertyName() const;
+    void setDefaultPropertyName(const QString defaultPropertyName);
+};
+
+} // namespace LanguageUtils
+
+#endif // FAKEMETAOBJECT_H
diff --git a/src/libs/languageutils/languageutils-lib.pri b/src/libs/languageutils/languageutils-lib.pri
index 4bf744b23767770d737a8c5193dda807ddc96c0d..59e3b6a42fc1b39879abd773a9110514f8d88389 100644
--- a/src/libs/languageutils/languageutils-lib.pri
+++ b/src/libs/languageutils/languageutils-lib.pri
@@ -8,4 +8,10 @@ DEPENDPATH += $$PWD
 INCLUDEPATH += $$PWD/..
 
 HEADERS += \
-    $$PWD/languageutils_global.h
+    $$PWD/languageutils_global.h \
+    $$PWD/fakemetaobject.h \
+    $$PWD/componentversion.h
+
+SOURCES += \
+    $$PWD/fakemetaobject.cpp \
+    $$PWD/componentversion.cpp
diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri
index fa9484182bfa58284b83236869c36ab0076db98f..b4e4b5810aa05a3248c6410987d3f40198d2568e 100644
--- a/src/libs/qmljs/qmljs-lib.pri
+++ b/src/libs/qmljs/qmljs-lib.pri
@@ -22,7 +22,6 @@ HEADERS += \
     $$PWD/qmljslookupcontext.h \
     $$PWD/qmljslineinfo.h \
     $$PWD/qmljscompletioncontextfinder.h \
-    $$PWD/qmljscomponentversion.h \
     $$PWD/qmljsmodelmanagerinterface.h \
     $$PWD/qmljsicontextpane.h \
     $$PWD/qmljspropertyreader.h \
@@ -42,7 +41,6 @@ SOURCES += \
     $$PWD/qmljslookupcontext.cpp \
     $$PWD/qmljslineinfo.cpp \
     $$PWD/qmljscompletioncontextfinder.cpp \
-    $$PWD/qmljscomponentversion.cpp \
     $$PWD/qmljsmodelmanagerinterface.cpp \
     $$PWD/qmljspropertyreader.cpp \
     $$PWD/qmljsrewriter.cpp \
diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index 4a9bbf252318f9c4b26d67a6e9f103f898afabb9..e29c6c965e0d086dbf7cfb89d54eaf479e37b364 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -36,10 +36,13 @@
 #include "qmljscheck.h"
 #include "qmljsdocument.h"
 
+#include <languageutils/componentversion.h>
+
 #include <QtCore/QDir>
 #include <QtCore/QFileInfo>
 #include <QtCore/QDebug>
 
+using namespace LanguageUtils;
 using namespace QmlJS;
 using namespace QmlJS::AST;
 using namespace QmlJS::Interpreter;
diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h
index bebc101e89ac7e4c33b61e96a95e0eca7de58b9c..a5dbee87d4ef7106ae2747319f2dbc336036ba92 100644
--- a/src/libs/qmljs/qmljsbind.h
+++ b/src/libs/qmljs/qmljsbind.h
@@ -36,7 +36,6 @@
 
 #include <qmljs/parser/qmljsastvisitor_p.h>
 #include <qmljs/qmljsinterpreter.h>
-#include <qmljs/qmljscomponentversion.h>
 
 #include <QtCore/QHash>
 #include <QtCore/QStringList>
diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h
index a67ebea8effe0dea1bd69464e69239d704d43e08..b9dc3ca5eb8cc603d66d7392fc5e72fa6aa85217 100644
--- a/src/libs/qmljs/qmljsdocument.h
+++ b/src/libs/qmljs/qmljsdocument.h
@@ -45,15 +45,15 @@
 
 QT_QML_BEGIN_NAMESPACE
 
+namespace LanguageUtils {
+    class FakeMetaObject;
+}
+
 namespace QmlJS {
 
 class Bind;
 class Snapshot;
 
-namespace Interpreter {
-    class FakeMetaObject;
-}
-
 class QMLJS_EXPORT Document
 {
 public:
@@ -134,7 +134,7 @@ private:
     bool _valid;
     QList<QmlDirParser::Component> _components;
     QList<QmlDirParser::Plugin> _plugins;
-    typedef QList<const Interpreter::FakeMetaObject *> FakeMetaObjectList;
+    typedef QList<const LanguageUtils::FakeMetaObject *> FakeMetaObjectList;
     FakeMetaObjectList _metaObjects;
 
     DumpStatus _dumpStatus;
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 1c1bb44255e40754a1076648b9886d34a4250d88..e4a0d785c2edc19c291b0461883a2a47dddf19f2 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -38,6 +38,8 @@
 #include "qmljsscopebuilder.h"
 #include "parser/qmljsast_p.h"
 
+#include <languageutils/fakemetaobject.h>
+
 #include <QtCore/QFile>
 #include <QtCore/QDir>
 #include <QtCore/QString>
@@ -48,6 +50,7 @@
 #include <QtCore/QProcess>
 #include <QtCore/QDebug>
 
+using namespace LanguageUtils;
 using namespace QmlJS::Interpreter;
 using namespace QmlJS::AST;
 
@@ -103,210 +106,6 @@ public:
     }
 };
 
-} // end of anonymous namespace
-
-namespace QmlJS {
-namespace Interpreter {
-
-class FakeMetaEnum {
-    QString m_name;
-    QStringList m_keys;
-    QList<int> m_values;
-
-public:
-    FakeMetaEnum(const QString &name)
-        : m_name(name)
-    {}
-
-    QString name() const
-    { return m_name; }
-
-    void addKey(const QString &key, int value)
-    { m_keys.append(key); m_values.append(value); }
-
-    QString key(int index) const
-    { return m_keys.at(index); }
-
-    int keyCount() const
-    { return m_keys.size(); }
-
-    QStringList keys() const
-    { return m_keys; }
-};
-
-class FakeMetaMethod {
-public:
-    enum {
-        Signal,
-        Slot,
-        Method
-    };
-
-    enum {
-        Private,
-        Protected,
-        Public
-    };
-
-public:
-    FakeMetaMethod(const QString &name, const QString &returnType = QString())
-        : m_name(name), m_returnType(returnType), m_methodTy(Method), m_methodAccess(Public)
-    {}
-
-    QString methodName() const
-    { return m_name; }
-
-    QStringList parameterNames() const
-    { return m_paramNames; }
-
-    QStringList parameterTypes() const
-    { return m_paramTypes; }
-
-    void addParameter(const QString &name, const QString &type)
-    { m_paramNames.append(name); m_paramTypes.append(type); }
-
-    int methodType() const
-    { return m_methodTy; }
-    void setMethodType(int methodType)
-    { m_methodTy = methodType; }
-
-    int access() const
-    { return m_methodAccess; }
-
-private:
-    QString m_name;
-    QString m_returnType;
-    QStringList m_paramNames;
-    QStringList m_paramTypes;
-    int m_methodTy;
-    int m_methodAccess;
-};
-
-class FakeMetaProperty {
-    QString m_propertyName;
-    QString m_type;
-    bool m_isList;
-    bool m_isWritable;
-    bool m_isPointer;
-
-public:
-    FakeMetaProperty(const QString &name, const QString &type, bool isList, bool isWritable, bool isPointer)
-        : m_propertyName(name), m_type(type), m_isList(isList), m_isWritable(isWritable), m_isPointer(isPointer)
-    {}
-
-    QString name() const
-    { return m_propertyName; }
-
-    QString typeName() const
-    { return m_type; }
-
-    bool isList() const
-    { return m_isList; }
-
-    bool isWritable() const
-    { return m_isWritable; }
-
-    bool isPointer() const
-    { return m_isPointer; }
-};
-
-class FakeMetaObject {
-    Q_DISABLE_COPY(FakeMetaObject)
-
-public:
-    class Export {
-    public:
-        QString package;
-        QString type;
-        QmlJS::ComponentVersion version;
-        QString packageNameVersion;
-    };
-
-private:
-    QList<Export> m_exports;
-    const FakeMetaObject *m_super;
-    QString m_superName;
-    QList<FakeMetaEnum> m_enums;
-    QHash<QString, int> m_enumNameToIndex;
-    QList<FakeMetaProperty> m_props;
-    QHash<QString, int> m_propNameToIdx;
-    QList<FakeMetaMethod> m_methods;
-    QString m_defaultPropertyName;
-
-public:
-    FakeMetaObject()
-        : m_super(0)
-    {
-    }
-
-    void addExport(const QString &name, const QString &package, QmlJS::ComponentVersion version)
-    {
-        Export exp;
-        exp.type = name;
-        exp.package = package;
-        exp.version = version;
-        exp.packageNameVersion = QString::fromLatin1("%1.%2 %3.%4").arg(
-                package, name,
-                QString::number(version.majorVersion()),
-                QString::number(version.minorVersion()));
-        m_exports.append(exp);
-    }
-    QList<Export> exports() const
-    { return m_exports; }
-
-    void setSuperclassName(const QString &superclass)
-    { m_superName = superclass; }
-    QString superclassName() const
-    { return m_superName; }
-
-    void setSuperclass(FakeMetaObject *superClass)
-    { m_super = superClass; }
-    const FakeMetaObject *superClass() const
-    { return m_super; }
-
-    void addEnum(const FakeMetaEnum &fakeEnum)
-    { m_enumNameToIndex.insert(fakeEnum.name(), m_enums.size()); m_enums.append(fakeEnum); }
-    int enumeratorCount() const
-    { return m_enums.size(); }
-    int enumeratorOffset() const
-    { return 0; }
-    FakeMetaEnum enumerator(int index) const
-    { return m_enums.at(index); }
-    int enumeratorIndex(const QString &name) const
-    { return m_enumNameToIndex.value(name, -1); }
-
-    void addProperty(const FakeMetaProperty &property)
-    { m_propNameToIdx.insert(property.name(), m_props.size()); m_props.append(property); }
-    int propertyCount() const
-    { return m_props.size(); }
-    int propertyOffset() const
-    { return 0; }
-    FakeMetaProperty property(int index) const
-    { return m_props.at(index); }
-    int propertyIndex(const QString &name) const
-    { return m_propNameToIdx.value(name, -1); }
-
-    void addMethod(const FakeMetaMethod &method)
-    { m_methods.append(method); }
-    int methodCount() const
-    { return m_methods.size(); }
-    int methodOffset() const
-    { return 0; }
-    FakeMetaMethod method(int index) const
-    { return m_methods.at(index); }
-
-    QString defaultPropertyName() const
-    { return m_defaultPropertyName; }
-
-    void setDefaultPropertyName(const QString defaultPropertyName)
-    { m_defaultPropertyName = defaultPropertyName; }
-};
-
-} // end of Interpreter namespace
-} // end of QmlJS namespace
-
-namespace {
-
 class MetaFunction: public FunctionValue
 {
     FakeMetaMethod _method;
@@ -423,7 +222,7 @@ private:
 
         bool doInsert = true;
         QString name, defaultPropertyName;
-        QmlJS::ComponentVersion version;
+        ComponentVersion version;
         QString extends;
         QString id;
         foreach (const QXmlStreamAttribute &attr, _xml.attributes()) {
@@ -469,7 +268,7 @@ private:
                 unexpectedElement(_xml.name(), tag);
         }
 
-        metaObject->addExport(id, QString(), QmlJS::ComponentVersion());
+        metaObject->addExport(id, QString(), ComponentVersion());
 
         if (doInsert) {
             _objects->insert(id, metaObject);
@@ -738,7 +537,7 @@ private:
             if (_xml.name() == childTag) {
                 QString type;
                 QString package;
-                QmlJS::ComponentVersion version;
+                ComponentVersion version;
                 foreach (const QXmlStreamAttribute &attr, _xml.attributes()) {
                     if (attr.name() == QLatin1String("module")) {
                         package = attr.value().toString();
@@ -754,7 +553,7 @@ private:
                                 invalidAttr(versionStr, QLatin1String("version"), childTag);
                                 continue;
                             }
-                            version = QmlJS::ComponentVersion(major, QmlJS::ComponentVersion::NoVersion);
+                            version = ComponentVersion(major, ComponentVersion::NoVersion);
                         } else {
                             bool ok = false;
                             const int major = versionStr.left(dotIdx).toInt(&ok);
@@ -767,7 +566,7 @@ private:
                                 invalidAttr(versionStr, QLatin1String("version"), childTag);
                                 continue;
                             }
-                            version = QmlJS::ComponentVersion(major, minor);
+                            version = ComponentVersion(major, minor);
                         }
                     } else {
                         ignoreAttr(attr);
@@ -789,7 +588,7 @@ private:
 } // end of anonymous namespace
 
 QmlObjectValue::QmlObjectValue(const FakeMetaObject *metaObject, const QString &className,
-                               const QString &packageName, const QmlJS::ComponentVersion version, Engine *engine)
+                               const QString &packageName, const ComponentVersion version, Engine *engine)
     : ObjectValue(engine),
       _metaObject(metaObject),
       _packageName(packageName),
@@ -927,7 +726,7 @@ QString QmlObjectValue::nameInPackage(const QString &packageName) const
     return QString();
 }
 
-QmlJS::ComponentVersion QmlObjectValue::version() const
+ComponentVersion QmlObjectValue::version() const
 { return _componentVersion; }
 
 QString QmlObjectValue::defaultPropertyName() const
@@ -2255,7 +2054,7 @@ void CppQmlTypes::load(Engine *engine, const QList<const FakeMetaObject *> &obje
     }
 }
 
-QList<QmlObjectValue *> CppQmlTypes::typesForImport(const QString &packageName, QmlJS::ComponentVersion version) const
+QList<QmlObjectValue *> CppQmlTypes::typesForImport(const QString &packageName, ComponentVersion version) const
 {
     QMap<QString, QmlObjectValue *> objectValuesByName;
 
@@ -2280,7 +2079,7 @@ QList<QmlObjectValue *> CppQmlTypes::typesForImport(const QString &packageName,
 }
 
 QmlObjectValue *CppQmlTypes::typeForImport(const QString &qualifiedName,
-                                           QmlJS::ComponentVersion version) const
+                                           ComponentVersion version) const
 {
     QString name = qualifiedName;
     QString packageName;
@@ -2317,7 +2116,7 @@ bool CppQmlTypes::hasPackage(const QString &package) const
     return _typesByPackage.contains(package);
 }
 
-QString CppQmlTypes::qualifiedName(const QString &package, const QString &type, QmlJS::ComponentVersion version)
+QString CppQmlTypes::qualifiedName(const QString &package, const QString &type, ComponentVersion version)
 {
     return QString("%1.%2 %3.%4").arg(
                 package, type,
@@ -2330,7 +2129,7 @@ QmlObjectValue *CppQmlTypes::typeByQualifiedName(const QString &name) const
     return _typesByFullyQualifiedName.value(name);
 }
 
-QmlObjectValue *CppQmlTypes::typeByQualifiedName(const QString &package, const QString &type, QmlJS::ComponentVersion version) const
+QmlObjectValue *CppQmlTypes::typeByQualifiedName(const QString &package, const QString &type, ComponentVersion version) const
 {
     return typeByQualifiedName(qualifiedName(package, type, version));
 }
@@ -2353,7 +2152,7 @@ QmlObjectValue *CppQmlTypes::getOrCreate(const QString &package, const QString &
     if (!value) {
         *created = true;
         value = new QmlObjectValue(
-                    metaObject, typeName, package, QmlJS::ComponentVersion(), engine);
+                    metaObject, typeName, package, ComponentVersion(), engine);
         _typesByFullyQualifiedName[qName] = value;
     } else {
         *created = false;
@@ -3484,7 +3283,7 @@ ImportInfo::ImportInfo()
 }
 
 ImportInfo::ImportInfo(Type type, const QString &name,
-                       QmlJS::ComponentVersion version, UiImport *ast)
+                       ComponentVersion version, UiImport *ast)
     : _type(type)
     , _name(name)
     , _version(version)
@@ -3514,7 +3313,7 @@ QString ImportInfo::id() const
     return QString();
 }
 
-QmlJS::ComponentVersion ImportInfo::version() const
+ComponentVersion ImportInfo::version() const
 {
     return _version;
 }
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index c1cff60d92c2620fdd8c363e3511c539320ff77b..60fbcababaa8d4418b6eba0540f82092996e1f4b 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -34,9 +34,9 @@
 #ifndef QMLJS_INTERPRETER_H
 #define QMLJS_INTERPRETER_H
 
+#include <languageutils/componentversion.h>
 #include <qmljs/qmljsdocument.h>
 #include <qmljs/qmljs_global.h>
-#include <qmljs/qmljscomponentversion.h>
 #include <qmljs/parser/qmljsastfwd_p.h>
 
 #include <QtCore/QFileInfoList>
@@ -46,6 +46,13 @@
 #include <QtCore/QSet>
 #include <QtCore/QMutex>
 
+namespace LanguageUtils {
+class FakeMetaObject;
+class FakeMetaMethod;
+class FakeMetaProperty;
+class FakeMetaEnum;
+}
+
 namespace QmlJS {
 
 class NameId;
@@ -75,11 +82,6 @@ class TypeEnvironment;
 
 typedef QList<const Value *> ValueList;
 
-class FakeMetaObject;
-class FakeMetaMethod;
-class FakeMetaProperty;
-class FakeMetaEnum;
-
 ////////////////////////////////////////////////////////////////////////////////
 // Value visitor
 ////////////////////////////////////////////////////////////////////////////////
@@ -450,16 +452,17 @@ private:
 class QMLJS_EXPORT QmlObjectValue: public ObjectValue
 {
 public:
-    QmlObjectValue(const FakeMetaObject *metaObject, const QString &className,
-                   const QString &packageName, const ComponentVersion version, Engine *engine);
+    QmlObjectValue(const LanguageUtils::FakeMetaObject *metaObject, const QString &className,
+                   const QString &packageName, const LanguageUtils::ComponentVersion version,
+                   Engine *engine);
     virtual ~QmlObjectValue();
 
     virtual void processMembers(MemberProcessor *processor) const;
-    const Value *propertyValue(const FakeMetaProperty &prop) const;
+    const Value *propertyValue(const LanguageUtils::FakeMetaProperty &prop) const;
 
     QString packageName() const;
     QString nameInPackage(const QString &packageName) const;
-    ComponentVersion version() const;
+    LanguageUtils::ComponentVersion version() const;
     QString defaultPropertyName() const;
     QString propertyType(const QString &propertyName) const;
     bool isListProperty(const QString &name) const;
@@ -473,27 +476,28 @@ public:
     bool hasChildInPackage() const;
 
 protected:
-    const Value *findOrCreateSignature(int index, const FakeMetaMethod &method, QString *methodName) const;
-    bool isDerivedFrom(const FakeMetaObject *base) const;
+    const Value *findOrCreateSignature(int index, const LanguageUtils::FakeMetaMethod &method,
+                                       QString *methodName) const;
+    bool isDerivedFrom(const LanguageUtils::FakeMetaObject *base) const;
 
 private:
-    const FakeMetaObject *_metaObject;
+    const LanguageUtils::FakeMetaObject *_metaObject;
     const QString _packageName;
-    const ComponentVersion _componentVersion;
+    const LanguageUtils::ComponentVersion _componentVersion;
     mutable QHash<int, const Value *> _metaSignature;
 };
 
 class QMLJS_EXPORT QmlEnumValue: public NumberValue
 {
 public:
-    QmlEnumValue(const FakeMetaEnum &metaEnum, Engine *engine);
+    QmlEnumValue(const LanguageUtils::FakeMetaEnum &metaEnum, Engine *engine);
     virtual ~QmlEnumValue();
 
     QString name() const;
     QStringList keys() const;
 
 private:
-    FakeMetaEnum *_metaEnum;
+    LanguageUtils::FakeMetaEnum *_metaEnum;
 };
 
 class QMLJS_EXPORT Activation
@@ -588,34 +592,38 @@ class QMLJS_EXPORT CppQmlTypesLoader
 public:
     /** \return an empty list when successful, error messages otherwise. */
     static QStringList load(const QFileInfoList &xmlFiles);
-    static QList<const FakeMetaObject *> builtinObjects;
+    static QList<const LanguageUtils::FakeMetaObject *> builtinObjects;
 
     // parses the xml string and fills the newObjects map
-    static QString parseQmlTypeXml(const QByteArray &xml, QMap<QString, FakeMetaObject *> *newObjects);
+    static QString parseQmlTypeXml(const QByteArray &xml,
+                                   QMap<QString, LanguageUtils::FakeMetaObject *> *newObjects);
 private:
-    static void setSuperClasses(QMap<QString, FakeMetaObject *> *newObjects);
+    static void setSuperClasses(QMap<QString, LanguageUtils::FakeMetaObject *> *newObjects);
 };
 
 class QMLJS_EXPORT CppQmlTypes
 {
 public:
-    void load(Interpreter::Engine *interpreter, const QList<const FakeMetaObject *> &objects);
+    void load(Interpreter::Engine *interpreter, const QList<const LanguageUtils::FakeMetaObject *> &objects);
 
-    QList<Interpreter::QmlObjectValue *> typesForImport(const QString &prefix, ComponentVersion version) const;
+    QList<Interpreter::QmlObjectValue *> typesForImport(const QString &prefix, LanguageUtils::ComponentVersion version) const;
     Interpreter::QmlObjectValue *typeForImport(const QString &qualifiedName,
-                                               ComponentVersion version = ComponentVersion()) const;
+                                               LanguageUtils::ComponentVersion version = LanguageUtils::ComponentVersion()) const;
 
     bool hasPackage(const QString &package) const;
 
     QHash<QString, QmlObjectValue *> types() const
     { return _typesByFullyQualifiedName; }
 
-    static QString qualifiedName(const QString &package, const QString &type, ComponentVersion version);
+    static QString qualifiedName(const QString &package, const QString &type, LanguageUtils::ComponentVersion version);
     QmlObjectValue *typeByQualifiedName(const QString &name) const;
-    QmlObjectValue *typeByQualifiedName(const QString &package, const QString &type, ComponentVersion version) const;
+    QmlObjectValue *typeByQualifiedName(const QString &package, const QString &type,
+                                        LanguageUtils::ComponentVersion version) const;
 
 private:
-    QmlObjectValue *getOrCreate(const QString &package, const QString &cppName, const FakeMetaObject *metaObject, Engine *engine, bool *created);
+    QmlObjectValue *getOrCreate(const QString &package, const QString &cppName,
+                                const LanguageUtils::FakeMetaObject *metaObject,
+                                Engine *engine, bool *created);
 
 
     QHash<QString, QList<QmlObjectValue *> > _typesByPackage;
@@ -969,7 +977,7 @@ public:
 
     ImportInfo();
     ImportInfo(Type type, const QString &name,
-               ComponentVersion version = ComponentVersion(),
+               LanguageUtils::ComponentVersion version = LanguageUtils::ComponentVersion(),
                AST::UiImport *ast = 0);
 
     bool isValid() const;
@@ -982,13 +990,13 @@ public:
     // null if the import has no 'as', otherwise the target id
     QString id() const;
 
-    ComponentVersion version() const;
+    LanguageUtils::ComponentVersion version() const;
     AST::UiImport *ast() const;
 
 private:
     Type _type;
     QString _name;
-    ComponentVersion _version;
+    LanguageUtils::ComponentVersion _version;
     AST::UiImport *_ast;
 };
 
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index f4d7cdf6e5d772945ca2dbe63be46cbe70498acd..d36dbbb0218feec1e1ec889754174e5775432f91 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -40,10 +40,13 @@
 #include "qmljsscopebuilder.h"
 #include "qmljsmodelmanagerinterface.h"
 
+#include <languageutils/componentversion.h>
+
 #include <QtCore/QFileInfo>
 #include <QtCore/QDir>
 #include <QtCore/QDebug>
 
+using namespace LanguageUtils;
 using namespace QmlJS;
 using namespace QmlJS::Interpreter;
 using namespace QmlJS::AST;
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index d5cc0e662ca28827b043c532a4fbb0082d4f11d1..7135b74a0c2c10a492252168b22a8ae5b27e46c4 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -44,6 +44,7 @@
 #include "rewriterview.h"
 #include "variantproperty.h"
 
+#include <languageutils/componentversion.h>
 #include <qmljs/qmljsevaluate.h>
 #include <qmljs/qmljsinterpreter.h>
 #include <qmljs/qmljslink.h>
@@ -54,6 +55,7 @@
 #include <QtCore/QSet>
 #include <QtGui/QMessageBox>
 
+using namespace LanguageUtils;
 using namespace QmlJS;
 using namespace QmlJS::AST;
 
diff --git a/src/plugins/qmljstools/qmljsplugindumper.cpp b/src/plugins/qmljstools/qmljsplugindumper.cpp
index 3f8eefc523eeac236da52ba32d8bde08a93689fb..56f9833381508425cb6e880cafdfa4e876943951 100644
--- a/src/plugins/qmljstools/qmljsplugindumper.cpp
+++ b/src/plugins/qmljstools/qmljsplugindumper.cpp
@@ -42,6 +42,7 @@
 
 #include <QtCore/QDir>
 
+using namespace LanguageUtils;
 using namespace QmlJS;
 using namespace QmlJSTools;
 using namespace QmlJSTools::Internal;
@@ -125,15 +126,15 @@ static QString qmldumpFailedMessage()
     return PluginDumper::tr("Type dump of C++ plugin failed.\nCheck 'General Messages' output pane for details.");
 }
 
-static QList<const Interpreter::FakeMetaObject *> parseHelper(const QByteArray &xml, QString *error)
+static QList<const FakeMetaObject *> parseHelper(const QByteArray &xml, QString *error)
 {
-    QList<const Interpreter::FakeMetaObject *> ret;
-    QMap<QString, Interpreter::FakeMetaObject *> newObjects;
+    QList<const FakeMetaObject *> ret;
+    QMap<QString, FakeMetaObject *> newObjects;
     *error = Interpreter::CppQmlTypesLoader::parseQmlTypeXml(xml, &newObjects);
 
     if (error->isEmpty()) {
         // convert from QList<T *> to QList<const T *>
-        QMapIterator<QString, Interpreter::FakeMetaObject *> it(newObjects);
+        QMapIterator<QString, FakeMetaObject *> it(newObjects);
         while (it.hasNext()) {
             it.next();
             ret.append(it.value());
@@ -161,7 +162,7 @@ void PluginDumper::qmlPluginTypeDumpDone(int exitCode)
 
     const QByteArray output = process->readAllStandardOutput();
     QString error;
-    QList<const Interpreter::FakeMetaObject *> objectsList = parseHelper(output, &error);
+    QList<const FakeMetaObject *> objectsList = parseHelper(output, &error);
     if (exitCode == 0 && !error.isEmpty()) {
         libraryInfo.setDumpStatus(LibraryInfo::DumpError, tr("Type dump of C++ plugin failed. Parse error:\n'%1'").arg(error));
     }
@@ -228,7 +229,7 @@ void PluginDumper::dump(const Plugin &plugin)
         libraryXmlFile.close();
 
         QString error;
-        const QList<const Interpreter::FakeMetaObject *> objectsList = parseHelper(xml, &error);
+        const QList<const FakeMetaObject *> objectsList = parseHelper(xml, &error);
 
         if (error.isEmpty()) {
             libraryInfo.setMetaObjects(objectsList);