diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp
index 9c0890e6c98c95ec9453307c29a8d65ad704bf6f..6ccbf532d054524e52bfb938fb7aef12b270d915 100644
--- a/src/libs/qmljs/qmljsdocument.cpp
+++ b/src/libs/qmljs/qmljsdocument.cpp
@@ -250,8 +250,10 @@ Snapshot::~Snapshot()
 
 void Snapshot::insert(const Document::Ptr &document)
 {
-    if (document && (document->qmlProgram() || document->jsProgram()))
+    if (document && (document->qmlProgram() || document->jsProgram())) {
         _documents.insert(document->fileName(), document);
+        _documentsByPath.insert(document->path(), document);
+    }
 }
 
 void Snapshot::insertLibraryInfo(const QString &path, const LibraryInfo &info)
diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h
index e3cfa420d840153d87d4dd6f49f54feacb24e16c..2a1469c1dadf1c6433cdc8797c304c55c24dbd91 100644
--- a/src/libs/qmljs/qmljsdocument.h
+++ b/src/libs/qmljs/qmljsdocument.h
@@ -131,9 +131,10 @@ public:
 
 class QMLJS_EXPORT Snapshot
 {
-    typedef QMap<QString, Document::Ptr> _Base;
-    QMap<QString, Document::Ptr> _documents;
-    QMap<QString, LibraryInfo> _libraries;
+    typedef QHash<QString, Document::Ptr> _Base;
+    QHash<QString, Document::Ptr> _documents;
+    QMultiHash<QString, Document::Ptr> _documentsByPath;
+    QHash<QString, LibraryInfo> _libraries;
 
 public:
     Snapshot();
@@ -151,6 +152,9 @@ public:
     Document::Ptr document(const QString &fileName) const
     { return _documents.value(fileName); }
 
+    QList<Document::Ptr> documentsInDirectory(const QString &path) const
+    { return _documentsByPath.values(path); }
+
     LibraryInfo libraryInfo(const QString &path) const
     { return _libraries.value(path); }
 
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 57f3dd990768d5474cee21e745b6814d16580524..af248d9c4de646d08bc0e4b95d05af2088bb210a 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -21,8 +21,6 @@ Link::Link(Context *context, const Document::Ptr &doc, const Snapshot &snapshot,
     , _context(context)
     , _importPaths(importPaths)
 {
-    foreach (Document::Ptr doc, snapshot)
-        _documentByPath.insert(doc->path(), doc);
     linkImports();
 }
 
@@ -161,7 +159,7 @@ void Link::populateImportedTypes(Interpreter::ObjectValue *typeEnv, Document::Pt
 
     // implicit imports:
     // qml files in the same directory are available without explicit imports
-    foreach (Document::Ptr otherDoc, _documentByPath.values(doc->path())) {
+    foreach (Document::Ptr otherDoc, _snapshot.documentsInDirectory(doc->path())) {
         if (otherDoc == doc)
             continue;
 
@@ -206,13 +204,14 @@ void Link::importFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc,
     ObjectValue *importNamespace = typeEnv;
 
     // directory import
-    if (_documentByPath.contains(path)) {
+    QList<Document::Ptr> documentsInDirectory = _snapshot.documentsInDirectory(path);
+    if (! documentsInDirectory.isEmpty()) {
         if (import->importId) {
             importNamespace = engine()->newObject(/*prototype =*/0);
             typeEnv->setProperty(import->importId->asString(), importNamespace);
         }
 
-        foreach (Document::Ptr importedDoc, _documentByPath.values(path)) {
+        foreach (Document::Ptr importedDoc, documentsInDirectory) {
             const QString targetName = importedDoc->componentName();
             importNamespace->setProperty(targetName, importedDoc->bind()->rootObjectValue());
         }
diff --git a/src/libs/qmljs/qmljslink.h b/src/libs/qmljs/qmljslink.h
index 1f531379ee8d79d3302a9268535986d6905cdc87..9772f1dc570a0125d79448083cfed0a78c58a362 100644
--- a/src/libs/qmljs/qmljslink.h
+++ b/src/libs/qmljs/qmljslink.h
@@ -56,7 +56,6 @@ private:
     Document::Ptr _doc;
     Snapshot _snapshot;
     Interpreter::Context *_context;
-    QMultiHash<QString, Document::Ptr> _documentByPath;
     const QStringList _importPaths;
 
     QList<DiagnosticMessage> _diagnosticMessages;