diff --git a/src/libs/languageutils/fakemetaobject.cpp b/src/libs/languageutils/fakemetaobject.cpp
index 6f47fbc2f06e019115163d5d3fbd20bd00b5ddad..c7a9c6d01e588ac0ef293560f9b841505260f370 100644
--- a/src/libs/languageutils/fakemetaobject.cpp
+++ b/src/libs/languageutils/fakemetaobject.cpp
@@ -157,11 +157,14 @@ void FakeMetaObject::addExport(const QString &name, const QString &package, Comp
     exp.type = name;
     exp.package = package;
     exp.version = version;
-    exp.packageNameVersion = QString::fromLatin1("%1/%2 %3").arg(
-                package, name,
-                version.toString());
     m_exports.append(exp);
 }
+
+void FakeMetaObject::setExportMetaObjectRevision(int exportIndex, int metaObjectRevision)
+{
+    m_exports[exportIndex].metaObjectRevision = metaObjectRevision;
+}
+
 QList<FakeMetaObject::Export> FakeMetaObject::exports() const
 { return m_exports; }
 FakeMetaObject::Export FakeMetaObject::exportInPackage(const QString &package) const
@@ -219,5 +222,8 @@ QString FakeMetaObject::attachedTypeName() const
 void FakeMetaObject::setAttachedTypeName(const QString &name)
 { m_attachedTypeName = name; }
 
+FakeMetaObject::Export::Export()
+    : metaObjectRevision(0)
+{}
 bool FakeMetaObject::Export::isValid() const
-{ return !type.isEmpty(); }
+{ return version.isValid() || !package.isEmpty() || !type.isEmpty(); }
diff --git a/src/libs/languageutils/fakemetaobject.h b/src/libs/languageutils/fakemetaobject.h
index 1b67876e253610d81d726b040cb5f1a1b80be4d1..b5e8f2de37f116b80df8e32fa98eb96812e734dd 100644
--- a/src/libs/languageutils/fakemetaobject.h
+++ b/src/libs/languageutils/fakemetaobject.h
@@ -139,10 +139,12 @@ public:
 
     class LANGUAGEUTILS_EXPORT Export {
     public:
+        Export();
+
         QString package;
         QString type;
         ComponentVersion version;
-        QString packageNameVersion;
+        int metaObjectRevision;
 
         bool isValid() const;
     };
@@ -166,6 +168,7 @@ public:
     void setClassName(const QString &name);
 
     void addExport(const QString &name, const QString &package, ComponentVersion version);
+    void setExportMetaObjectRevision(int exportIndex, int metaObjectRevision);
     QList<Export> exports() const;
     Export exportInPackage(const QString &package) const;
 
diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index c0f5219576134f1965b13a3109c485c88c770d1d..ef0134ecdf27a9c1958e0024dca1730cf9b17fac 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -200,6 +200,7 @@ bool Bind::visit(UiImport *ast)
 {
     ComponentVersion version;
     ImportInfo::Type type = ImportInfo::InvalidImport;
+    QString path;
     QString name;
 
     if (ast->versionToken.isValid()) {
@@ -213,19 +214,27 @@ bool Bind::visit(UiImport *ast)
 
     if (ast->importUri) {
         type = ImportInfo::LibraryImport;
-        name = toString(ast->importUri, QDir::separator());
+        path = toString(ast->importUri, QDir::separator());
+        name = toString(ast->importUri, QLatin1Char(','));
+
+        // treat Qt 4.7 as QtQuick 1.0
+        if (path == QLatin1String("Qt") && version == ComponentVersion(4, 7)) {
+            path = QLatin1String("QtQuick");
+            name = path;
+            version = ComponentVersion(1, 0);
+        }
 
         if (!version.isValid()) {
             _diagnosticMessages->append(
                         errorMessage(ast, tr("package import requires a version number")));
         }
     } else if (!ast->fileName.isEmpty()) {
-        const QString &fileName = ast->fileName.toString();
-        QFileInfo importFileInfo(fileName);
+        name = ast->fileName.toString();
+        QFileInfo importFileInfo(name);
         if (!importFileInfo.isAbsolute()) {
-            importFileInfo=QFileInfo(_doc->path() + QDir::separator() + fileName);
+            importFileInfo = QFileInfo(_doc->path() + QDir::separator() + name);
         }
-        name = importFileInfo.absoluteFilePath();
+        path = importFileInfo.absoluteFilePath();
         if (importFileInfo.isFile())
             type = ImportInfo::FileImport;
         else if (importFileInfo.isDir())
@@ -234,7 +243,7 @@ bool Bind::visit(UiImport *ast)
             type = ImportInfo::UnknownFileImport;
         }
     }
-    _imports += ImportInfo(type, name, version, ast);
+    _imports += ImportInfo(type, path, name, version, ast);
 
     return false;
 }
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 257b58eb8f4490806c40fa8f819ca43c32efbc9d..94518dbde9908254e1496df6b9611c6320a2088e 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -161,13 +161,15 @@ public:
 
 QmlObjectValue::QmlObjectValue(FakeMetaObject::ConstPtr metaObject, const QString &className,
                                const QString &packageName, const ComponentVersion &componentVersion,
-                               const ComponentVersion &importVersion, ValueOwner *valueOwner)
+                               const ComponentVersion &importVersion, int metaObjectRevision,
+                               ValueOwner *valueOwner)
     : ObjectValue(valueOwner),
       _attachedType(0),
       _metaObject(metaObject),
       _moduleName(packageName),
       _componentVersion(componentVersion),
-      _importVersion(importVersion)
+      _importVersion(importVersion),
+      _metaObjectRevision(metaObjectRevision)
 {
     setClassName(className);
     int nEnums = metaObject->enumeratorCount();
@@ -208,7 +210,7 @@ void QmlObjectValue::processMembers(MemberProcessor *processor) const
     // process the meta methods
     for (int index = 0; index < _metaObject->methodCount(); ++index) {
         const FakeMetaMethod method = _metaObject->method(index);
-        if (_componentVersion.isValid() && _componentVersion.minorVersion() < method.revision())
+        if (_metaObjectRevision < method.revision())
             continue;
 
         QString methodName;
@@ -234,7 +236,7 @@ void QmlObjectValue::processMembers(MemberProcessor *processor) const
     // process the meta properties
     for (int index = 0; index < _metaObject->propertyCount(); ++index) {
         const FakeMetaProperty prop = _metaObject->property(index);
-        if (_componentVersion.isValid() && _componentVersion.minorVersion() < prop.revision())
+        if (_metaObjectRevision < prop.revision())
             continue;
 
         const QString propertyName = prop.name();
@@ -1262,8 +1264,9 @@ void CppQmlTypes::load(const T &fakeMetaObjects, const QString &overridePackage)
                 QTC_ASSERT(exp.version == ComponentVersion(), continue);
                 QTC_ASSERT(exp.type == fmo->className(), continue);
                 QmlObjectValue *cppValue = new QmlObjectValue(
-                            fmo, fmo->className(), cppPackage, ComponentVersion(), ComponentVersion(), _valueOwner);
-                _objectsByQualifiedName[exp.packageNameVersion] = cppValue;
+                            fmo, fmo->className(), cppPackage, ComponentVersion(), ComponentVersion(),
+                            ComponentVersion::MaxVersion, _valueOwner);
+                _objectsByQualifiedName[qualifiedName(cppPackage, fmo->className(), ComponentVersion())] = cppValue;
                 newCppTypes += cppValue;
             }
         }
@@ -1284,6 +1287,7 @@ template void CppQmlTypes::load< QHash<QString, FakeMetaObject::ConstPtr> >(cons
 QList<const QmlObjectValue *> CppQmlTypes::createObjectsForImport(const QString &package, ComponentVersion version)
 {
     QList<const QmlObjectValue *> exportedObjects;
+    QList<const QmlObjectValue *> newObjects;
 
     // make new exported objects
     foreach (const FakeMetaObject::ConstPtr &fmo, _fakeMetaObjectsByPackage.value(package)) {
@@ -1303,16 +1307,26 @@ QList<const QmlObjectValue *> CppQmlTypes::createObjectsForImport(const QString
         if (_objectsByQualifiedName.contains(key))
             continue;
 
+        QString name = bestExport.type;
+        bool exported = true;
+        if (name.isEmpty()) {
+            exported = false;
+            name = fmo->className();
+        }
+
         QmlObjectValue *newObject = new QmlObjectValue(
-                    fmo, bestExport.type, package, bestExport.version, version, _valueOwner);
+                    fmo, name, package, bestExport.version, version,
+                    bestExport.metaObjectRevision, _valueOwner);
 
         // use package.cppname importversion as key
         _objectsByQualifiedName.insert(key, newObject);
-        exportedObjects += newObject;
+        if (exported)
+            exportedObjects += newObject;
+        newObjects += newObject;
     }
 
     // set their prototypes, creating them if necessary
-    foreach (const QmlObjectValue *cobject, exportedObjects) {
+    foreach (const QmlObjectValue *cobject, newObjects) {
         QmlObjectValue *object = const_cast<QmlObjectValue *>(cobject);
         while (!object->prototype()) {
             const QString &protoCppName = object->metaObject()->superclassName();
@@ -1335,7 +1349,7 @@ QList<const QmlObjectValue *> CppQmlTypes::createObjectsForImport(const QString
             // make a new object
             QmlObjectValue *proto = new QmlObjectValue(
                         protoFmo, protoCppName, object->moduleName(), ComponentVersion(),
-                        object->importVersion(), _valueOwner);
+                        object->importVersion(), ComponentVersion::MaxVersion, _valueOwner);
             _objectsByQualifiedName.insert(key, proto);
             object->setPrototype(proto);
 
@@ -1916,10 +1930,11 @@ ImportInfo::ImportInfo()
 {
 }
 
-ImportInfo::ImportInfo(Type type, const QString &name,
+ImportInfo::ImportInfo(Type type, const QString &path, const QString &name,
                        ComponentVersion version, UiImport *ast)
     : _type(type)
     , _name(name)
+    , _path(path)
     , _version(version)
     , _ast(ast)
 {
@@ -1940,6 +1955,11 @@ QString ImportInfo::name() const
     return _name;
 }
 
+QString ImportInfo::path() const
+{
+    return _path;
+}
+
 QString ImportInfo::id() const
 {
     if (_ast)
@@ -2208,7 +2228,7 @@ void Imports::dump() const
         const ObjectValue *import = i.object;
         const ImportInfo &info = i.info;
 
-        qDebug() << "  " << info.name() << " " << info.version().toString() << " as " << info.id() << " : " << import;
+        qDebug() << "  " << info.path() << " " << info.version().toString() << " as " << info.id() << " : " << import;
         MemberDumper dumper;
         import->processMembers(&dumper);
     }
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index a96c9f4938d1d34029591d5634538ba6688ffc3a..804e52b03e33db9d1e5b63dc6c9d795d01cef7a8 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -419,7 +419,7 @@ class QMLJS_EXPORT QmlObjectValue: public ObjectValue
 public:
     QmlObjectValue(LanguageUtils::FakeMetaObject::ConstPtr metaObject, const QString &className,
                    const QString &moduleName, const LanguageUtils::ComponentVersion &componentVersion,
-                   const LanguageUtils::ComponentVersion &importVersion,
+                   const LanguageUtils::ComponentVersion &importVersion, int metaObjectRevision,
                    ValueOwner *valueOwner);
     virtual ~QmlObjectValue();
 
@@ -464,6 +464,7 @@ private:
     const LanguageUtils::ComponentVersion _importVersion;
     mutable QHash<int, const Value *> _metaSignature;
     QHash<QString, const QmlEnumValue * > _enums;
+    int _metaObjectRevision;
 };
 
 class QMLJS_EXPORT Activation
@@ -823,17 +824,21 @@ public:
     };
 
     ImportInfo();
-    ImportInfo(Type type, const QString &name,
+    ImportInfo(Type type, const QString &path, const QString &name = QString(),
                LanguageUtils::ComponentVersion version = LanguageUtils::ComponentVersion(),
                AST::UiImport *ast = 0);
 
     bool isValid() const;
     Type type() const;
 
-    // LibraryImport: uri with '/' separator
-    // Other: absoluteFilePath
+    // LibraryImport: uri with ',' separator
+    // Other: non-absolute path
     QString name() const;
 
+    // LibraryImport: uri with QDir::separator separator
+    // Other: absoluteFilePath
+    QString path() const;
+
     // null if the import has no 'as', otherwise the target id
     QString id() const;
 
@@ -843,6 +848,7 @@ public:
 private:
     Type _type;
     QString _name;
+    QString _path;
     LanguageUtils::ComponentVersion _version;
     AST::UiImport *_ast;
 };
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 92c17276b40738de9fa98c1b4c492827f99d327a..8c2cda456834167afcbc4fe2d160fadc4dbe895a 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -52,27 +52,27 @@ class ImportCacheKey
 public:
     explicit ImportCacheKey(const ImportInfo &info)
         : type(info.type())
-        , name(info.name())
+        , path(info.path())
         , majorVersion(info.version().majorVersion())
         , minorVersion(info.version().minorVersion())
     {}
 
     int type;
-    QString name;
+    QString path;
     int majorVersion;
     int minorVersion;
 };
 
 uint qHash(const ImportCacheKey &info)
 {
-    return ::qHash(info.type) ^ ::qHash(info.name) ^
+    return ::qHash(info.type) ^ ::qHash(info.path) ^
             ::qHash(info.majorVersion) ^ ::qHash(info.minorVersion);
 }
 
 bool operator==(const ImportCacheKey &i1, const ImportCacheKey &i2)
 {
     return i1.type == i2.type
-            && i1.name == i2.name
+            && i1.path == i2.path
             && i1.majorVersion == i2.majorVersion
             && i1.minorVersion == i2.minorVersion;
 }
@@ -291,7 +291,7 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i
     import.info = importInfo;
     import.object = 0;
 
-    const QString &path = importInfo.name();
+    const QString &path = importInfo.path();
 
     if (importInfo.type() == ImportInfo::DirectoryImport
             || importInfo.type() == ImportInfo::ImplicitDirectoryImport) {
@@ -326,12 +326,12 @@ Import LinkPrivate::importNonFile(Document::Ptr doc, const ImportInfo &importInf
     import.info = importInfo;
     import.object = new ObjectValue(valueOwner);
 
-    const QString packageName = Bind::toString(importInfo.ast()->importUri, '.');
+    const QString packageName = importInfo.name();
     const ComponentVersion version = importInfo.version();
 
     bool importFound = false;
 
-    const QString &packagePath = importInfo.name();
+    const QString &packagePath = importInfo.path();
     // check the filesystem with full version
     foreach (const QString &importPath, importPaths) {
         QString libraryPath = QString("%1/%2.%3").arg(importPath, packagePath, version.toString());
@@ -410,8 +410,8 @@ bool LinkPrivate::importLibrary(Document::Ptr doc,
             ModelManagerInterface *modelManager = ModelManagerInterface::instance();
             if (modelManager) {
                 if (importInfo.type() == ImportInfo::LibraryImport) {
-                    if (importInfo.version().isValid()) {
-                        const QString uri = importInfo.name().replace(QDir::separator(), QLatin1Char('.'));
+                    if (version.isValid()) {
+                        const QString uri = importInfo.name();
                         modelManager->loadPluginTypes(
                                     libraryPath, importPath,
                                     uri, version.toString());
@@ -429,14 +429,12 @@ bool LinkPrivate::importLibrary(Document::Ptr doc,
         } else if (libraryInfo.pluginTypeInfoStatus() == LibraryInfo::DumpError
                    || libraryInfo.pluginTypeInfoStatus() == LibraryInfo::TypeInfoFileError) {
             // Only underline import if package isn't described in .qmltypes anyway
-            QString packageName;
-            if (ast && ast->importUri)
-                packageName = Bind::toString(importInfo.ast()->importUri, '.');
+            QString packageName = importInfo.name();
             if (errorLoc.isValid() && (packageName.isEmpty() || !valueOwner->cppQmlTypes().hasModule(packageName))) {
                 error(doc, errorLoc, libraryInfo.pluginTypeInfoError());
             }
-        } else if (ast && ast->importUri) {
-            const QString packageName = Bind::toString(importInfo.ast()->importUri, '.');
+        } else {
+            const QString packageName = importInfo.name();
             valueOwner->cppQmlTypes().load(libraryInfo.metaObjects(), packageName);
             foreach (const QmlObjectValue *object, valueOwner->cppQmlTypes().createObjectsForImport(packageName, version)) {
                 import->object->setMember(object->className(), object);
diff --git a/src/libs/qmljs/qmljsscopechain.cpp b/src/libs/qmljs/qmljsscopechain.cpp
index 724f888c50749e28edf526cd71c4254a5dff52d0..d25ada859bef269368533de8f8147d2d7dcd236d 100644
--- a/src/libs/qmljs/qmljsscopechain.cpp
+++ b/src/libs/qmljs/qmljsscopechain.cpp
@@ -266,7 +266,7 @@ void ScopeChain::initializeRootScope()
         // add scope chains for all components that import this file
         foreach (Document::Ptr otherDoc, snapshot) {
             foreach (const ImportInfo &import, otherDoc->bind()->imports()) {
-                if (import.type() == ImportInfo::FileImport && m_document->fileName() == import.name()) {
+                if (import.type() == ImportInfo::FileImport && m_document->fileName() == import.path()) {
                     QmlComponentChain *component = new QmlComponentChain(otherDoc);
                     componentScopes.insert(otherDoc.data(), component);
                     chain->addInstantiatingComponent(component);
diff --git a/src/libs/qmljs/qmljstypedescriptionreader.cpp b/src/libs/qmljs/qmljstypedescriptionreader.cpp
index 7c2dc9d779f18fa008fbed865a6f69125eef5b07..318d98d75812f087e62d431028837513601678cd 100644
--- a/src/libs/qmljs/qmljstypedescriptionreader.cpp
+++ b/src/libs/qmljs/qmljstypedescriptionreader.cpp
@@ -199,10 +199,14 @@ void TypeDescriptionReader::readComponent(UiObjectDefinition *ast)
                 fmo->setDefaultPropertyName(readStringBinding(script));
             } else if (name == "exports") {
                 readExports(script, fmo);
+            } else if (name == "exportMetaObjectRevisions") {
+                readMetaObjectRevisions(script, fmo);
             } else if (name == "attachedType") {
                 fmo->setAttachedTypeName(readStringBinding(script));
             } else {
-                addWarning(script->firstSourceLocation(), "Expected only name, prototype, defaultProperty, attachedType and exports script bindings");
+                addWarning(script->firstSourceLocation(),
+                           "Expected only name, prototype, defaultProperty, attachedType, exports"
+                           "and exportMetaObjectRevisions script bindings");
             }
         } else {
             addWarning(member->firstSourceLocation(), "Expected only script bindings and object definitions");
@@ -488,6 +492,50 @@ void TypeDescriptionReader::readExports(UiScriptBinding *ast, FakeMetaObject::Pt
     }
 }
 
+void TypeDescriptionReader::readMetaObjectRevisions(UiScriptBinding *ast, FakeMetaObject::Ptr fmo)
+{
+    if (!ast || !ast->statement) {
+        addError(ast->colonToken, "Expected array of numbers after colon");
+        return;
+    }
+
+    ExpressionStatement *expStmt = dynamic_cast<ExpressionStatement *>(ast->statement);
+    if (!expStmt) {
+        addError(ast->statement->firstSourceLocation(), "Expected array of numbers after colon");
+        return;
+    }
+
+    ArrayLiteral *arrayLit = dynamic_cast<ArrayLiteral *>(expStmt->expression);
+    if (!arrayLit) {
+        addError(expStmt->firstSourceLocation(), "Expected array of numbers after colon");
+        return;
+    }
+
+    int exportIndex = 0;
+    const int exportCount = fmo->exports().size();
+    for (ElementList *it = arrayLit->elements; it; it = it->next, ++exportIndex) {
+        NumericLiteral *numberLit = cast<NumericLiteral *>(it->expression);
+        if (!numberLit) {
+            addError(arrayLit->firstSourceLocation(), "Expected array literal with only number literal members");
+            return;
+        }
+
+        if (exportIndex >= exportCount) {
+            addError(numberLit->firstSourceLocation(), "Meta object revision without matching export");
+            return;
+        }
+
+        const double v = numberLit->value;
+        const int metaObjectRevision = static_cast<int>(v);
+        if (metaObjectRevision != v) {
+            addError(numberLit->firstSourceLocation(), "Expected integer");
+            return;
+        }
+
+        fmo->setExportMetaObjectRevision(exportIndex, metaObjectRevision);
+    }
+}
+
 void TypeDescriptionReader::readEnumValues(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaEnum *fme)
 {
     if (!ast || !ast->statement) {
diff --git a/src/libs/qmljs/qmljstypedescriptionreader.h b/src/libs/qmljs/qmljstypedescriptionreader.h
index 2d33376d868ada9ce9582faa8466b8ca436cc059..f8e5366e9d210e01dd04af035e49da8884902275 100644
--- a/src/libs/qmljs/qmljstypedescriptionreader.h
+++ b/src/libs/qmljs/qmljstypedescriptionreader.h
@@ -78,6 +78,7 @@ private:
     double readNumericBinding(AST::UiScriptBinding *ast);
     int readIntBinding(AST::UiScriptBinding *ast);
     void readExports(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaObject::Ptr fmo);
+    void readMetaObjectRevisions(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaObject::Ptr fmo);
     void readEnumValues(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaEnum *fme);
 
     void addError(const AST::SourceLocation &loc, const QString &message);
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index da7d49dc816843170cce0a50a233811a7537052b..388de0c9b72ed61e0ee3e86ba443406ded7d20a5 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -473,7 +473,7 @@ const QmlJS::QmlObjectValue *NodeMetaInfoPrivate::getQmlObjectValue() const
 
     // otherwise get the qml object value that's available in the document
     foreach (const QmlJS::Import &import, context()->imports(document())->all()) {
-        if (import.info.name() != module)
+        if (import.info.path() != module)
             continue;
         const Value *lookupResult = import.object->lookupMember(type, context());
         if ((value = dynamic_cast<const QmlObjectValue *>(lookupResult)))
@@ -692,7 +692,9 @@ bool NodeMetaInfoPrivate::cleverCheckType(const QString &otherType) const
 
     const LanguageUtils::FakeMetaObject::Export exp =
             qmlObjectValue->metaObject()->exportInPackage(package);
-    const QString convertedName = exp.type;
+    QString convertedName = exp.type;
+    if (convertedName.isEmpty())
+        convertedName = qmlObjectValue->className();
 
     return typeName == convertedName;
 }
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index bab7cf2acfcfcebf6bc8ea0622000455817e9b08..58ceb3e2da8f439f1f3e16deab0c58f2e75e0432 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -386,12 +386,12 @@ public:
             const Imports *imports = m_context->imports(m_doc.data());
             ImportInfo importInfo = imports->info(fullTypeName, m_context.data());
             if (importInfo.isValid() && importInfo.type() == ImportInfo::LibraryImport) {
-                QString name = importInfo.name().replace("\\", ".");
+                QString name = importInfo.name();
                 majorVersion = importInfo.version().majorVersion();
                 minorVersion = importInfo.version().minorVersion();
                 typeName.prepend(name + ".");
             } else if (importInfo.isValid() && importInfo.type() == ImportInfo::DirectoryImport) {
-                QString path = importInfo.name();
+                QString path = importInfo.path();
                 QDir dir(m_doc->path());
                 QString relativeDir = dir.relativeFilePath(path);
                 QString name = relativeDir.replace("/", ".");               
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 69b83809c5bd0524f07f9df7b0590047b6059f9e..0205faeb429296fd78c0a7d2d148fee530da59a2 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1302,7 +1302,7 @@ TextEditor::BaseTextEditorWidget::Link QmlJSTextEditorWidget::findLinkAt(const Q
         // if it's a file import, link to the file
         foreach (const ImportInfo &import, semanticInfo.document->bind()->imports()) {
             if (import.ast() == importAst && import.type() == ImportInfo::FileImport) {
-                BaseTextEditorWidget::Link link(import.name());
+                BaseTextEditorWidget::Link link(import.path());
                 link.begin = importAst->firstSourceLocation().begin();
                 link.end = importAst->lastSourceLocation().end();
                 return link;
diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp
index 93f3fd87d3245aa92fb80e03e2409b8dd288dd85..0edf04767e01ddec166c054485ff45f50808e543 100644
--- a/src/plugins/qmljseditor/qmljshoverhandler.cpp
+++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp
@@ -253,7 +253,7 @@ void HoverHandler::handleImport(const ScopeChain &scopeChain, AST::UiImport *nod
                 }
                 setToolTip(msg);
             } else {
-                setToolTip(import.info.name());
+                setToolTip(import.info.path());
             }
             break;
         }
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index 590467a09f6752a192101b7d27be24c7b93d3521..1912f6bc99842315e2a641d27fee79964df436c6 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -418,7 +418,7 @@ static void findNewFileImports(const Document::Ptr &doc, const Snapshot &snapsho
 {
     // scan files and directories that are explicitly imported
     foreach (const ImportInfo &import, doc->bind()->imports()) {
-        const QString &importName = import.name();
+        const QString &importName = import.path();
         if (import.type() == ImportInfo::FileImport) {
             if (! snapshot.document(importName))
                 *importedFiles += importName;
@@ -530,7 +530,7 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap
     const QStringList importPaths = modelManager->importPaths();
     foreach (const ImportInfo &import, doc->bind()->imports()) {
         if (import.type() == ImportInfo::DirectoryImport) {
-            const QString targetPath = import.name();
+            const QString targetPath = import.path();
             findNewQmlLibraryInPath(targetPath, snapshot, modelManager,
                                     importedFiles, scannedPaths, newLibraries);
         }
@@ -539,7 +539,7 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap
             if (!import.version().isValid())
                 continue;
             foreach (const QString &importPath, importPaths) {
-                const QString targetPath = QDir(importPath).filePath(import.name());
+                const QString targetPath = QDir(importPath).filePath(import.path());
                 findNewQmlLibrary(targetPath, import.version(), snapshot, modelManager,
                                   importedFiles, scannedPaths, newLibraries);
             }