diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index 3ee0fde7c6d9f80222d3c0521fbabd321e625245..48a6f3669a2db8ea6db33ef0ece302c2670f3d34 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -95,6 +95,21 @@ ObjectValue *Bind::scopeChainAt(Document::Ptr currentDocument, const Snapshot &s
     return scope;
 }
 
+QString Bind::toString(UiQualifiedId *qualifiedId, QChar delimiter)
+{
+    QString result;
+
+    for (UiQualifiedId *iter = qualifiedId; iter; iter = iter->next) {
+        if (iter != qualifiedId)
+            result += delimiter;
+
+        if (iter->name)
+            result += iter->name->asString();
+    }
+
+    return result;
+}
+
 void Bind::accept(Node *node)
 {
     Node::accept(node, this);
@@ -110,21 +125,6 @@ bool Bind::visit(UiImportList *)
     return true;
 }
 
-static QString serialize(UiQualifiedId *qualifiedId, QChar delimiter)
-{
-    QString result;
-
-    for (UiQualifiedId *iter = qualifiedId; iter; iter = iter->next) {
-        if (iter != qualifiedId)
-            result += delimiter;
-
-        if (iter->name)
-            result += iter->name->asString();
-    }
-
-    return result;
-}
-
 /*
   import Qt 4.6
   import Qt 4.6 as Xxx
@@ -161,7 +161,7 @@ bool Bind::visit(UiImport *ast)
 
     // else try the metaobject system
     if (ast->importUri) {
-        const QString package = serialize(ast->importUri, '/');
+        const QString package = toString(ast->importUri, '/');
         int majorVersion = -1; // ### TODO: Check these magic version numbers
         int minorVersion = -1; // ### TODO: Check these magic version numbers
 
@@ -208,9 +208,7 @@ ObjectValue *Bind::bindObject(UiQualifiedId *qualifiedTypeNameId, UiObjectInitia
 {
     ObjectValue *parentObjectValue;
 
-    if (qualifiedTypeNameId && !qualifiedTypeNameId->next
-        && qualifiedTypeNameId->name->asString() == QLatin1String("Script")
-    ) {
+    if (toString(qualifiedTypeNameId) == QLatin1String("Script")) {
         // Script blocks all contribute to the same scope
         parentObjectValue = switchObjectValue(_functionEnvironment);
     } else { // normal component instance
@@ -253,11 +251,12 @@ bool Bind::visit(UiObjectInitializer *)
 
 bool Bind::visit(UiScriptBinding *ast)
 {
-    if (!(ast->qualifiedId->next) && ast->qualifiedId->name->asString() == "id")
+    if (toString(ast->qualifiedId) == QLatin1String("id")) {
         if (ExpressionStatement *e = cast<ExpressionStatement*>(ast->statement))
             if (IdentifierExpression *i = cast<IdentifierExpression*>(e->expression))
                 if (i->name)
                     _idEnvironment->setProperty(i->name->asString(), _currentObjectValue);
+    }
 
     return false;
 }
diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h
index b128dc0d6e03c30cf6ff91c322253dfc3e1b9155..ebec86ba81203b4ad71cddea56d05c46b4435d23 100644
--- a/src/libs/qmljs/qmljsbind.h
+++ b/src/libs/qmljs/qmljsbind.h
@@ -56,6 +56,10 @@ public:
                                                   AST::UiObjectMember *currentObject);
 
 protected:
+    using AST::Visitor::visit;
+
+    QString toString(AST::UiQualifiedId *qualifiedId, QChar delimiter = QChar('.'));
+
     void accept(AST::Node *node);
 
     // Ui