diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index 9f94dd0381f9f615adbbb8a6b22929efeb727caa..5a24ef84e5e0811886e06288b474d7322b7200f9 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -49,8 +49,7 @@ using namespace QmlJS::Interpreter;
     information that goes beyond that, you need to create a
     \l{QmlJS::Interpreter::Context} using \l{QmlJS::Link}.
 
-    The document's imports are classified and available through fileImports(),
-    directoryImports() and libraryImports().
+    The document's imports are classified and available through imports().
 
     It allows AST to code model lookup through findQmlObject() and findFunctionScope().
 */
@@ -69,19 +68,9 @@ Bind::~Bind()
 {
 }
 
-QList<Bind::ImportInfo> Bind::fileImports() const
+QList<Bind::ImportInfo> Bind::imports() const
 {
-    return _fileImports;
-}
-
-QList<Bind::ImportInfo> Bind::directoryImports() const
-{
-    return _directoryImports;
-}
-
-QList<Bind::ImportInfo> Bind::libraryImports() const
-{
-    return _libraryImports;
+    return _imports;
 }
 
 Interpreter::ObjectValue *Bind::idEnvironment() const
@@ -209,18 +198,19 @@ bool Bind::visit(UiImport *ast)
     }
 
     if (ast->importUri) {
+        info.type = ImportInfo::LibraryImport;
         info.name = toString(ast->importUri, QLatin1Char('/'));
-        _libraryImports += info;
     } else if (ast->fileName) {
         const QFileInfo importFileInfo(_doc->path() + QLatin1Char('/') + ast->fileName->asString());
         info.name = importFileInfo.absoluteFilePath();
         if (importFileInfo.isFile())
-            _fileImports += info;
+            info.type = ImportInfo::FileImport;
         else if (importFileInfo.isDir())
-            _directoryImports += info;
-        //else
-        //    error: file or directory does not exist
+            info.type = ImportInfo::DirectoryImport;
+        else
+            info.type = ImportInfo::InvalidFileImport;
     }
+    _imports += info;
 
     return false;
 }
diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h
index 9d5f7e76f185a7d7d0dc50f0a53d59c758cc5444..ddbfa5b1df3697c87febeadf46b8457f0aae3ef1 100644
--- a/src/libs/qmljs/qmljsbind.h
+++ b/src/libs/qmljs/qmljsbind.h
@@ -52,14 +52,22 @@ public:
     virtual ~Bind();
 
     struct ImportInfo {
+        enum Type {
+            LibraryImport,
+            FileImport,
+            DirectoryImport,
+            InvalidFileImport // refers a file/directoy that wasn't found
+        };
+
+        Type type;
+        // LibraryImport: uri with '/' separator
+        // Other: absoluteFilePath
         QString name;
         ComponentVersion version;
         AST::UiImport *ast;
     };
 
-    QList<ImportInfo> fileImports() const;
-    QList<ImportInfo> directoryImports() const;
-    QList<ImportInfo> libraryImports() const;
+    QList<ImportInfo> imports() const;
 
     Interpreter::ObjectValue *idEnvironment() const;
     Interpreter::ObjectValue *rootObjectValue() const;
@@ -111,9 +119,7 @@ private:
     QHash<AST::FunctionDeclaration *, Interpreter::ObjectValue *> _functionScopes;
     QStringList _includedScripts;
 
-    QList<ImportInfo> _fileImports;
-    QList<ImportInfo> _directoryImports;
-    QList<ImportInfo> _libraryImports;
+    QList<ImportInfo> _imports;
 };
 
 } // end of namespace Qml
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 63822c0b4e3446905f40b8596eb7b33499987cba..ddfd9cfa5ac9e257f9d7b675a426c158988b77d7 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -579,15 +579,7 @@ AST::Node *SemanticInfo::nodeUnderCursor(int pos) const
 
     const unsigned cursorPosition = pos;
 
-    foreach (const Bind::ImportInfo &import, document->bind()->fileImports()) {
-        if (importContainsCursor(import.ast, cursorPosition))
-            return import.ast;
-    }
-    foreach (const Bind::ImportInfo &import, document->bind()->directoryImports()) {
-        if (importContainsCursor(import.ast, cursorPosition))
-            return import.ast;
-    }
-    foreach (const Bind::ImportInfo &import, document->bind()->libraryImports()) {
+    foreach (const Bind::ImportInfo &import, document->bind()->imports()) {
         if (importContainsCursor(import.ast, cursorPosition))
             return import.ast;
     }
@@ -1389,8 +1381,8 @@ TextEditor::BaseTextEditor::Link QmlJSTextEditor::findLinkAt(const QTextCursor &
 
     if (AST::UiImport *importAst = cast<AST::UiImport *>(node)) {
         // if it's a file import, link to the file
-        foreach (const Bind::ImportInfo &import, semanticInfo.document->bind()->fileImports()) {
-            if (import.ast == importAst) {
+        foreach (const Bind::ImportInfo &import, semanticInfo.document->bind()->imports()) {
+            if (import.ast == importAst && import.type == Bind::ImportInfo::FileImport) {
                 BaseTextEditor::Link link(import.name);
                 link.begin = importAst->firstSourceLocation().begin();
                 link.end = importAst->lastSourceLocation().end();
diff --git a/src/plugins/qmljseditor/qmljsmodelmanager.cpp b/src/plugins/qmljseditor/qmljsmodelmanager.cpp
index d758216fb111339098692333cf8e0b3293a805e4..ae8e9752416d5e170e1487365e380db79f14f1e1 100644
--- a/src/plugins/qmljseditor/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljseditor/qmljsmodelmanager.cpp
@@ -276,15 +276,16 @@ static void findNewFileImports(const Document::Ptr &doc, const Snapshot &snapsho
                         QStringList *importedFiles, QSet<QString> *scannedPaths)
 {
     // scan files and directories that are explicitly imported
-    foreach (const Bind::ImportInfo &fileImport, doc->bind()->fileImports()) {
-        if (! snapshot.document(fileImport.name))
-            *importedFiles += fileImport.name;
-    }
-    foreach (const Bind::ImportInfo &directoryImport, doc->bind()->directoryImports()) {
-        if (snapshot.documentsInDirectory(directoryImport.name).isEmpty()) {
-            if (! scannedPaths->contains(directoryImport.name)) {
-                *importedFiles += qmlFilesInDirectory(directoryImport.name);
-                scannedPaths->insert(directoryImport.name);
+    foreach (const Bind::ImportInfo &import, doc->bind()->imports()) {
+        if (import.type == Bind::ImportInfo::FileImport) {
+            if (! snapshot.document(import.name))
+                *importedFiles += import.name;
+        } else if (import.type == Bind::ImportInfo::DirectoryImport) {
+            if (snapshot.documentsInDirectory(import.name).isEmpty()) {
+                if (! scannedPaths->contains(import.name)) {
+                    *importedFiles += qmlFilesInDirectory(import.name);
+                    scannedPaths->insert(import.name);
+                }
             }
         }
     }
@@ -296,10 +297,12 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap
 {
     // scan library imports
     const QStringList importPaths = modelManager->importPaths();
-    foreach (const Bind::ImportInfo &libraryImport, doc->bind()->libraryImports()) {
+    foreach (const Bind::ImportInfo &import, doc->bind()->imports()) {
+        if (import.type != Bind::ImportInfo::LibraryImport)
+            continue;
         foreach (const QString &importPath, importPaths) {
             QDir dir(importPath);
-            dir.cd(libraryImport.name);
+            dir.cd(import.name);
             const QString targetPath = dir.absolutePath();
 
             // if we know there is a library, done