diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index 0354c9992acbf2133deba7f7581748abac8c3a83..56e78be2d2c3bbf59c7b936c771c6bf61e9bb490 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -35,7 +35,14 @@ using namespace QmlJS;
 using namespace QmlJS::AST;
 using namespace QmlJS::Interpreter;
 
-Bind::Bind()
+Bind::Bind(Interpreter::Engine *interp)
+    : _interp(interp),
+      _interestingMember(0),
+      _currentObjectValue(0),
+      _typeEnvironment(0),
+      _idEnvironment(0),
+      _interestingObjectValue(0),
+      _rootObjectValue(0)
 {
 }
 
@@ -43,20 +50,19 @@ Bind::~Bind()
 {
 }
 
-Interpreter::ObjectValue *Bind::operator()(Document::Ptr doc, Snapshot &snapshot, UiObjectMember *member, Interpreter::Engine &interp)
+Interpreter::ObjectValue *Bind::operator()(Document::Ptr doc, const Snapshot &snapshot, UiObjectMember *member)
 {
     UiProgram *program = doc->qmlProgram();
     if (!program)
         return 0;
 
     _doc = doc;
-    _snapshot = &snapshot;
+    _snapshot = snapshot;
     _interestingMember = member;
-    _interp = &interp;
 
     _currentObjectValue = 0;
-    _typeEnvironment = _interp->newObject(0);
-    _idEnvironment = _interp->newObject(0);
+    _typeEnvironment = _interp->newObject(/*prototype =*/ 0);
+    _idEnvironment = _interp->newObject(/*prototype =*/ 0);
     _interestingObjectValue = 0;
     _rootObjectValue = 0;
 
diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h
index cb89e2634f2b687c8c1d01765574919da19c8bc0..df59c45d5fc2dfb55e24abda6d6e7ebb07cbd6e8 100644
--- a/src/libs/qmljs/qmljsbind.h
+++ b/src/libs/qmljs/qmljsbind.h
@@ -39,10 +39,10 @@ namespace QmlJS {
 class QMLJS_EXPORT Bind: protected AST::Visitor
 {
 public:
-    Bind();
+    Bind(Interpreter::Engine *interp);
     virtual ~Bind();
 
-    Interpreter::ObjectValue* operator()(Document::Ptr doc, Snapshot &snapshot, AST::UiObjectMember *member, Interpreter::Engine &interp);
+    Interpreter::ObjectValue* operator()(Document::Ptr doc, const Snapshot &snapshot, AST::UiObjectMember *member);
 
 protected:
     void accept(AST::Node *node);
@@ -148,9 +148,9 @@ protected:
 
 private:
     Document::Ptr _doc;
-    Snapshot *_snapshot;
-    AST::UiObjectMember *_interestingMember;
+    Snapshot _snapshot;
     Interpreter::Engine *_interp;
+    AST::UiObjectMember *_interestingMember;
 
     Interpreter::ObjectValue *_currentObjectValue;
 
diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp
index 35a0046018432d01312cf77ea0174a17833b732d..dfd8f3adabdb722212d0a63610220824a182cbb2 100644
--- a/src/plugins/qmljseditor/qmlcodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp
@@ -96,6 +96,7 @@ static QIcon iconForColor(const QColor &color)
 }
 
 
+#if 0
 static QString qualifiedNameId(AST::UiQualifiedId *it)
 {
     QString text;
@@ -113,7 +114,6 @@ static QString qualifiedNameId(AST::UiQualifiedId *it)
     return text;
 }
 
-#if 0
 static Interpreter::ObjectValue *newComponent(Interpreter::Engine *engine, const QString &name,
                                               const QHash<QString, Document::Ptr> &userComponents,
                                               QSet<QString> *processed)
@@ -821,8 +821,8 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
             scope->setProperty(QLatin1String("parent"), parentItem);
 #endif
 
-        Bind bind;
-        scope = bind(qmlDocument, snapshot, declaringMember, interp);
+        Bind bind(&interp);
+        scope = bind(qmlDocument, snapshot, declaringMember);
     }
 
     // Search for the operator that triggered the completion.