diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp
index 216fd7a738eb4e9d8d261dbe72f8f41431b40204..3cb6162d4fc052a39fdeec95b392f571306efdb8 100644
--- a/src/libs/qmljs/qmljsdocument.cpp
+++ b/src/libs/qmljs/qmljsdocument.cpp
@@ -251,8 +251,14 @@ Snapshot::~Snapshot()
 void Snapshot::insert(const Document::Ptr &document)
 {
     if (document && (document->qmlProgram() || document->jsProgram())) {
-        _documents.insert(document->fileName(), document);
-        _documentsByPath.insert(document->path(), document);
+        const QString fileName = document->fileName();
+        const QString path = document->path();
+
+        Document::Ptr old = _documents.value(fileName);
+        if (old)
+            _documentsByPath.remove(path, old);
+        _documentsByPath.insert(path, document);
+        _documents.insert(fileName, document);
     }
 }