- 
        
         
-         The number of recent commit logs to show, choose 0 to see all enteries
+         The number of recent commit logs to show, choose 0 to see all entries.
         
         
          100
diff --git a/src/plugins/projectexplorer/settingsaccessor.cpp b/src/plugins/projectexplorer/settingsaccessor.cpp
index 3c55621c712..cca43db8c81 100644
--- a/src/plugins/projectexplorer/settingsaccessor.cpp
+++ b/src/plugins/projectexplorer/settingsaccessor.cpp
@@ -540,7 +540,7 @@ QVariantMap SettingsAccessor::restoreSettings(Project *project) const
                 QApplication::translate("ProjectExplorer::SettingsAccessor",
                                         "Using Old Project Settings File"),
                 QApplication::translate("ProjectExplorer::SettingsAccessor",
-                                        "A versioned backup of the .user"
+                                        " A versioned backup of the .user "
                                         "settings file will be used, because the non-versioned "
                                         "file was created by an incompatible newer version of "
                                         "Qt Creator. Project settings changes made since "
diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index ebbe5e0728c..d024f32ec68 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -464,15 +464,17 @@ void TaskWindow::updateCategoriesMenu()
 
     const QStringList filteredCategories = d->m_filter->filteredCategories();
 
-    foreach (const QString &categoryId, d->m_model->categoryIds()) {
-        const QString categoryName = d->m_model->categoryDisplayName(categoryId);
+    QMap nameToIds;
+    foreach (const QString &categoryId, d->m_model->categoryIds())
+        nameToIds.insert(d->m_model->categoryDisplayName(categoryId), categoryId);
 
+    foreach (const QString &displayName, nameToIds.keys()) {
+        const QString categoryId = nameToIds.value(displayName);
         QAction *action = new QAction(d->m_categoriesMenu);
         action->setCheckable(true);
-        action->setText(categoryName);
+        action->setText(displayName);
         action->setData(categoryId);
         action->setChecked(!filteredCategories.contains(categoryId));
-
         d->m_categoriesMenu->addAction(action);
     }
 }
diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
index ad3d77bd896..dfc21c2ed18 100644
--- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
@@ -115,7 +115,7 @@ void MoveManipulator::synchronizeParent(const QList &itemList,
 
 void MoveManipulator::synchronizeInstanceParent(const QList &itemList)
 {
-    if (m_view->model() && !m_itemList.isEmpty())
+    if (m_view->model() && !m_itemList.isEmpty() && m_itemList.first()->qmlItemNode().instanceParent().isValid())
         synchronizeParent(itemList, m_itemList.first()->qmlItemNode().instanceParent());
 }
 
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
index f5d2690e800..a24210b0d15 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
@@ -576,6 +576,7 @@ void DesignDocumentController::loadCurrentModel()
         d->formEditorView->crumblePath()->pushElement(simplfiedDisplayName(), createCrumbleBarInfo());
 
     d->documentLoaded = true;
+    d->subComponentManager->update(d->searchPath, d->model->imports());
     Q_ASSERT(d->masterModel);
     QApplication::restoreOverrideCursor();
 }
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index a960d347547..fe118deebb9 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -631,6 +631,8 @@ QString templateGeneration(NodeMetaInfo type, NodeMetaInfo superType, const QmlO
     orderedList = type.propertyNames();
     qSort(orderedList);
 
+    bool emptyTemplate = true;
+
     foreach (const QString &name, orderedList) {
 
         if (name.startsWith(QLatin1String("__")))
@@ -649,32 +651,40 @@ QString templateGeneration(NodeMetaInfo type, NodeMetaInfo superType, const QmlO
                 qmlTemplate +=  QString(QLatin1String(
                 "IntEditor { backendValue: backendValues.%2\n caption: \"%1\"\nbaseStateFlag: isBaseState\nslider: false\n}"
                 )).arg(name).arg(properName);
+                emptyTemplate = false;
             }
             if (typeName == "real" || typeName == "double" || typeName == "qreal") {
                 qmlTemplate +=  QString(QLatin1String(
                 "DoubleSpinBoxAlternate {\ntext: \"%1\"\nbackendValue: backendValues.%2\nbaseStateFlag: isBaseState\n}\n"
                 )).arg(name).arg(properName);
+                emptyTemplate = false;
             }
             if (typeName == "string" || typeName == "QString" || typeName == "QUrl" || typeName == "url") {
                  qmlTemplate +=  QString(QLatin1String(
                 "QWidget {\nlayout: HorizontalLayout {\nLabel {\ntext: \"%1\"\ntoolTip: \"%1\"\n}\nLineEdit {\nbackendValue: backendValues.%2\nbaseStateFlag: isBaseState\n}\n}\n}\n"
                 )).arg(name).arg(properName);
+                 emptyTemplate = false;
             }
             if (typeName == "bool") {
                  qmlTemplate +=  QString(QLatin1String(
                  "QWidget {\nlayout: HorizontalLayout {\nLabel {\ntext: \"%1\"\ntoolTip: \"%1\"\n}\nCheckBox {text: backendValues.%2.value\nbackendValue: backendValues.%2\nbaseStateFlag: isBaseState\ncheckable: true\n}\n}\n}\n"
                  )).arg(name).arg(properName);
+                 emptyTemplate = false;
             }
             if (typeName == "color" || typeName == "QColor") {
                 qmlTemplate +=  QString(QLatin1String(
                 "ColorGroupBox {\ncaption: \"%1\"\nfinished: finishedNotify\nbackendColor: backendValues.%2\n}\n\n"
                 )).arg(name).arg(properName);
+                emptyTemplate = false;
             }
         }
     }
     qmlTemplate += QLatin1String("}\n"); //VerticalLayout
     qmlTemplate += QLatin1String("}\n"); //GroupBox
 
+    if (emptyTemplate)
+        return QString();
+
     return qmlTemplate;
 }
 
@@ -697,14 +707,30 @@ void PropertyEditor::resetView()
     QString specificsClassName;
     QUrl qmlFile(qmlForNode(m_selectedNode, specificsClassName));
     QUrl qmlSpecificsFile;
-    if (m_selectedNode.isValid())
-        qmlSpecificsFile = fileToUrl(locateQmlFile(fixTypeNameForPanes(m_selectedNode.type()) + "Specifics.qml"));
+
+    QString diffClassName;
+    if (m_selectedNode.isValid()) {
+        diffClassName = m_selectedNode.metaInfo().typeName();
+        QList hierarchy;
+        hierarchy << m_selectedNode.metaInfo();
+        hierarchy << m_selectedNode.metaInfo().superClasses();
+
+        foreach (const NodeMetaInfo &info, hierarchy) {
+            if (QFileInfo(qmlSpecificsFile.toLocalFile()).exists())
+                break;
+            qmlSpecificsFile = fileToUrl(locateQmlFile(fixTypeNameForPanes(info.typeName()) + "Specifics.qml"));
+            diffClassName = info.typeName();
+        }
+    }
+
+    if (!QFileInfo(qmlSpecificsFile.toLocalFile()).exists())
+        diffClassName = specificsClassName;
 
     QString specificQmlData;
 
-    if (m_selectedNode.isValid() && !QFileInfo(qmlSpecificsFile.toLocalFile()).exists() && m_selectedNode.metaInfo().isValid()) {
+    if (m_selectedNode.isValid() && m_selectedNode.metaInfo().isValid() && diffClassName != m_selectedNode.type()) {
         //do magic !!
-        specificQmlData = templateGeneration(m_selectedNode.metaInfo(), model()->metaInfo(specificsClassName), m_selectedNode);
+        specificQmlData = templateGeneration(m_selectedNode.metaInfo(), model()->metaInfo(diffClassName), m_selectedNode);
     }
 
     NodeType *type = m_typeHash.value(qmlFile.toString());
diff --git a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
index 7a5ee9f5800..3285cceb70c 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
@@ -406,7 +406,7 @@ void ModelNodeContextMenu::execute(const QPoint &pos, bool selectionMenuBool)
 
     if (!singleSelected && !selectionIsEmpty && layoutingIsPossible) {
 
-        ModelNodeAction *action = createModelNodeAction(tr("Layout in row"), layoutMenu, selectedModelNodes, ModelNodeAction::LayoutRow, true);
+        ModelNodeAction *action = createModelNodeAction(tr("Layout in Row"), layoutMenu, selectedModelNodes, ModelNodeAction::LayoutRow, true);
         layoutMenu->addAction(action);
         action = createModelNodeAction(tr("Layout in Column"), layoutMenu, selectedModelNodes, ModelNodeAction::LayoutColumn, true);
         layoutMenu->addAction(action);
@@ -757,6 +757,55 @@ static inline void reparentTo(const ModelNode &node, const QmlItemNode &parent)
     }
 }
 
+
+bool compareByX(const ModelNode &node1, const ModelNode &node2)
+{
+        QmlItemNode itemNode1 = QmlItemNode(node1);
+        QmlItemNode itemNode2 = QmlItemNode(node2);
+        if (itemNode1.isValid() && itemNode2.isValid())
+            return itemNode1.instancePosition().x() < itemNode2.instancePosition().x();
+        return false;
+}
+
+bool compareByY(const ModelNode &node1, const ModelNode &node2)
+{
+        QmlItemNode itemNode1 = QmlItemNode(node1);
+        QmlItemNode itemNode2 = QmlItemNode(node2);
+        if (itemNode1.isValid() && itemNode2.isValid())
+            return itemNode1.instancePosition().y() < itemNode2.instancePosition().y();
+        return false;
+}
+
+bool compareByGrid(const ModelNode &node1, const ModelNode &node2)
+{
+        QmlItemNode itemNode1 = QmlItemNode(node1);
+        QmlItemNode itemNode2 = QmlItemNode(node2);
+        if (itemNode1.isValid() && itemNode2.isValid()) {
+            if ((itemNode1.instancePosition().y() + itemNode1.instanceSize().height())  < itemNode2.instancePosition().y())
+                return true;
+            if ((itemNode2.instancePosition().y() + itemNode2.instanceSize().height())  < itemNode1.instancePosition().y())
+                return false; //first sort y (rows)
+            return itemNode1.instancePosition().x() < itemNode2.instancePosition().x();
+        }
+        return false;
+}
+
+static inline QPoint getUpperLeftPosition(const QList &modelNodeList)
+{
+    QPoint p(INT_MAX, INT_MAX);
+    foreach (ModelNode modelNode, modelNodeList) {
+        QmlItemNode itemNode = QmlItemNode(modelNode);
+        if (itemNode.isValid()) {
+            if (itemNode.instancePosition().x() < p.x())
+                p.setX(itemNode.instancePosition().x());
+            if (itemNode.instancePosition().y() < p.y())
+                p.setY(itemNode.instancePosition().y());
+        }
+
+    }
+    return p;
+}
+
 void ModelNodeAction::layoutRow()
 {
     if (!m_view)
@@ -777,7 +826,15 @@ void ModelNodeAction::layoutRow()
 
     {
         RewriterTransaction transaction(m_view);
-        foreach (ModelNode modelNode, m_modelNodeList) {
+
+        QPoint pos = getUpperLeftPosition(m_modelNodeList);
+        row.variantProperty(QLatin1String("x")) = pos.x();
+        row.variantProperty(QLatin1String("y")) = pos.y();
+
+        QList sortedList = m_modelNodeList;
+        qSort(sortedList.begin(), sortedList.end(), compareByX);
+
+        foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, row);
             modelNode.removeProperty(QLatin1String("x"));
             modelNode.removeProperty(QLatin1String("y"));
@@ -805,7 +862,15 @@ void ModelNodeAction::layoutColumn()
 
     {
         RewriterTransaction transaction(m_view);
-        foreach (ModelNode modelNode, m_modelNodeList) {
+
+        QPoint pos = getUpperLeftPosition(m_modelNodeList);
+        column.variantProperty(QLatin1String("x")) = pos.x();
+        column.variantProperty(QLatin1String("y")) = pos.y();
+
+        QList sortedList = m_modelNodeList;
+        qSort(sortedList.begin(), sortedList.end(), compareByY);
+
+        foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, column);
             modelNode.removeProperty(QLatin1String("x"));
             modelNode.removeProperty(QLatin1String("y"));
@@ -834,7 +899,15 @@ void ModelNodeAction::layoutGrid()
 
     {
         RewriterTransaction transaction(m_view);
-        foreach (ModelNode modelNode, m_modelNodeList) {
+
+        QPoint pos = getUpperLeftPosition(m_modelNodeList);
+        grid.variantProperty(QLatin1String("x")) = pos.x();
+        grid.variantProperty(QLatin1String("y")) = pos.y();
+
+        QList sortedList = m_modelNodeList;
+        qSort(sortedList.begin(), sortedList.end(), compareByGrid);
+
+        foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, grid);
             modelNode.removeProperty(QLatin1String("x"));
             modelNode.removeProperty(QLatin1String("y"));
@@ -862,7 +935,15 @@ void ModelNodeAction::layoutFlow()
 
     {
         RewriterTransaction transaction(m_view);
-        foreach (ModelNode modelNode, m_modelNodeList) {
+
+        QPoint pos = getUpperLeftPosition(m_modelNodeList);
+        flow.variantProperty(QLatin1String("x")) = pos.x();
+        flow.variantProperty(QLatin1String("y")) = pos.y();
+
+        QList sortedList = m_modelNodeList;
+        qSort(sortedList.begin(), sortedList.end(), compareByGrid);
+
+        foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, flow);
             modelNode.removeProperty(QLatin1String("x"));
             modelNode.removeProperty(QLatin1String("y"));
diff --git a/src/plugins/qmljseditor/qmljscompletionassist.cpp b/src/plugins/qmljseditor/qmljscompletionassist.cpp
index 1f448cca364..122f50eca5f 100644
--- a/src/plugins/qmljseditor/qmljscompletionassist.cpp
+++ b/src/plugins/qmljseditor/qmljscompletionassist.cpp
@@ -492,6 +492,7 @@ IAssistProposal *QmlJSCompletionAssistProcessor::perform(const IAssistInterface
     m_startPosition = assistInterface->position();
     while (isIdentifierChar(m_interface->document()->characterAt(m_startPosition - 1), false, false))
         --m_startPosition;
+    const bool onIdentifier = m_startPosition != assistInterface->position();
 
     m_completions.clear();
 
@@ -512,7 +513,11 @@ IAssistProposal *QmlJSCompletionAssistProcessor::perform(const IAssistInterface
     const ContextPtr &context = semanticInfo.context;
     const ScopeChain &scopeChain = semanticInfo.scopeChain(path);
 
-    // Search for the operator that triggered the completion.
+    // The completionOperator is the character under the cursor or directly before the
+    // identifier under cursor. Use in conjunction with onIdentifier. Examples:
+    // a + b -> ' '
+    // a + -> '+'
+    // a +b -> '+'
     QChar completionOperator;
     if (m_startPosition > 0)
         completionOperator = m_interface->document()->characterAt(m_startPosition - 1);
@@ -590,15 +595,62 @@ IAssistProposal *QmlJSCompletionAssistProcessor::perform(const IAssistInterface
 
         // ### enum completion?
 
-        // completion gets triggered for / in string literals, if we don't
-        // return here, this will mean the snippet completion pops up for
-        // each / in a string literal that is not triggering file completion
         return 0;
-    } else if (completionOperator.isSpace()
-               || completionOperator.isNull()
-               || isDelimiterChar(completionOperator)
-               || (completionOperator == QLatin1Char('(')
-                   && m_startPosition != m_interface->position())) {
+    }
+    // member "a.bc" or function "foo(" completion
+    else if (completionOperator == QLatin1Char('.')
+             || (completionOperator == QLatin1Char('(') && !onIdentifier)) {
+        // Look at the expression under cursor.
+        //QTextCursor tc = textWidget->textCursor();
+        QTextCursor tc(qmlInterface->document());
+        tc.setPosition(m_startPosition - 1);
+
+        QmlExpressionUnderCursor expressionUnderCursor;
+        QmlJS::AST::ExpressionNode *expression = expressionUnderCursor(tc);
+
+        if (expression != 0 && ! isLiteral(expression)) {
+            // Evaluate the expression under cursor.
+            ValueOwner *interp = context->valueOwner();
+            const Value *value =
+                    interp->convertToObject(scopeChain.evaluate(expression));
+            //qDebug() << "type:" << interp->typeId(value);
+
+            if (value && completionOperator == QLatin1Char('.')) { // member completion
+                ProcessProperties processProperties(&scopeChain);
+                if (contextFinder.isInLhsOfBinding() && qmlScopeType) {
+                    LhsCompletionAdder completionAdder(&m_completions, m_interface->symbolIcon(),
+                                                       PropertyOrder, contextFinder.isAfterOnInLhsOfBinding());
+                    processProperties.setEnumerateGeneratedSlots(true);
+                    processProperties(value, &completionAdder);
+                } else {
+                    CompletionAdder completionAdder(&m_completions, m_interface->symbolIcon(), SymbolOrder);
+                    processProperties(value, &completionAdder);
+                }
+            } else if (value
+                       && completionOperator == QLatin1Char('(')
+                       && m_startPosition == m_interface->position()) {
+                // function completion
+                if (const FunctionValue *f = value->asFunctionValue()) {
+                    QString functionName = expressionUnderCursor.text();
+                    int indexOfDot = functionName.lastIndexOf(QLatin1Char('.'));
+                    if (indexOfDot != -1)
+                        functionName = functionName.mid(indexOfDot + 1);
+
+                    QStringList signature;
+                    for (int i = 0; i < f->argumentCount(); ++i)
+                        signature.append(f->argumentName(i));
+
+                    return createHintProposal(functionName.trimmed(), signature);
+                }
+            }
+        }
+
+        if (! m_completions.isEmpty())
+            return createContentProposal();
+        return 0;
+    }
+    // global completion
+    else if (onIdentifier || assistInterface->reason() == ExplicitlyInvoked) {
 
         bool doGlobalCompletion = true;
         bool doQmlKeywordCompletion = true;
@@ -698,68 +750,14 @@ IAssistProposal *QmlJSCompletionAssistProcessor::perform(const IAssistInterface
             if (!doJsKeywordCompletion)
                 addCompletions(&m_completions, qmlWordsAlsoInJs, m_interface->keywordIcon(), KeywordOrder);
         }
-    }
 
-    else if (completionOperator == QLatin1Char('.') || completionOperator == QLatin1Char('(')) {
-        // Look at the expression under cursor.
-        //QTextCursor tc = textWidget->textCursor();
-        QTextCursor tc(qmlInterface->document());
-        tc.setPosition(m_startPosition - 1);
-
-        QmlExpressionUnderCursor expressionUnderCursor;
-        QmlJS::AST::ExpressionNode *expression = expressionUnderCursor(tc);
-
-        if (expression != 0 && ! isLiteral(expression)) {
-            // Evaluate the expression under cursor.
-            ValueOwner *interp = context->valueOwner();
-            const Value *value =
-                    interp->convertToObject(scopeChain.evaluate(expression));
-            //qDebug() << "type:" << interp->typeId(value);
-
-            if (value && completionOperator == QLatin1Char('.')) { // member completion
-                ProcessProperties processProperties(&scopeChain);
-                if (contextFinder.isInLhsOfBinding() && qmlScopeType) {
-                    LhsCompletionAdder completionAdder(&m_completions, m_interface->symbolIcon(),
-                                                       PropertyOrder, contextFinder.isAfterOnInLhsOfBinding());
-                    processProperties.setEnumerateGeneratedSlots(true);
-                    processProperties(value, &completionAdder);
-                } else {
-                    CompletionAdder completionAdder(&m_completions, m_interface->symbolIcon(), SymbolOrder);
-                    processProperties(value, &completionAdder);
-                }
-            } else if (value
-                       && completionOperator == QLatin1Char('(')
-                       && m_startPosition == m_interface->position()) {
-                // function completion
-                if (const FunctionValue *f = value->asFunctionValue()) {
-                    QString functionName = expressionUnderCursor.text();
-                    int indexOfDot = functionName.lastIndexOf(QLatin1Char('.'));
-                    if (indexOfDot != -1)
-                        functionName = functionName.mid(indexOfDot + 1);
-
-                    QStringList signature;
-                    for (int i = 0; i < f->argumentCount(); ++i)
-                        signature.append(f->argumentName(i));
-
-                    return createHintProposal(functionName.trimmed(), signature);
-                }
-            }
-        }
+        m_completions.append(m_snippetCollector.collect());
 
         if (! m_completions.isEmpty())
             return createContentProposal();
         return 0;
     }
 
-    if (isQmlFile
-            && (completionOperator.isNull()
-                || completionOperator.isSpace()
-                || isDelimiterChar(completionOperator))) {
-        m_completions.append(m_snippetCollector.collect());
-    }
-
-    if (! m_completions.isEmpty())
-        return createContentProposal();
     return 0;
 }
 
@@ -858,9 +856,20 @@ bool QmlJSCompletionAssistProcessor::completeFileName(const QString &relativeBas
 bool QmlJSCompletionAssistProcessor::completeUrl(const QString &relativeBasePath, const QString &urlString)
 {
     const QUrl url(urlString);
-    QString fileName = url.toLocalFile();
-    if (fileName.isEmpty())
+    QString fileName;
+    if (url.scheme().compare(QLatin1String("file"), Qt::CaseInsensitive) == 0) {
+        fileName = url.toLocalFile();
+        // should not trigger completion on 'file://'
+        if (fileName.isEmpty())
+            return false;
+    } else if (url.scheme().isEmpty()) {
+        // don't trigger completion while typing a scheme
+        if (urlString.endsWith(QLatin1String(":/")))
+            return false;
+        fileName = urlString;
+    } else {
         return false;
+    }
 
     return completeFileName(relativeBasePath, fileName);
 }
diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
index 8bd0b6fa773..78566b0bc12 100644
--- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
+++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
@@ -265,6 +265,12 @@ protected:
         addUse(fullLocationForQualifiedId(localId), SemanticHighlighter::BindingNameType);
     }
 
+    bool visit(UiImport *ast)
+    {
+        processName(ast->importId, ast->importIdToken);
+        return true;
+    }
+
     bool visit(UiObjectDefinition *ast)
     {
         if (m_scopeChain.document()->bind()->isGroupedPropertyBinding(ast)) {
diff --git a/src/plugins/qmljstools/qmljsqtstylecodeformatter.cpp b/src/plugins/qmljstools/qmljsqtstylecodeformatter.cpp
index 412c4c9d830..3961c880464 100644
--- a/src/plugins/qmljstools/qmljsqtstylecodeformatter.cpp
+++ b/src/plugins/qmljstools/qmljsqtstylecodeformatter.cpp
@@ -139,18 +139,15 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
         if (*indentDepth == tokenPosition) {
             // expression_or_objectdefinition doesn't want the indent
             // expression_or_label already has it
-            // ternary already adjusts indents nicely
             if (parentState.type != expression_or_objectdefinition
                     && parentState.type != expression_or_label
-                    && parentState.type != binding_assignment
-                    && parentState.type != ternary_op) {
+                    && parentState.type != binding_assignment) {
                 *indentDepth += 2*m_indentSize;
             }
         }
         // expression_or_objectdefinition and expression_or_label have already consumed the first token
         else if (parentState.type != expression_or_objectdefinition
-                 && parentState.type != expression_or_label
-                 && parentState.type != ternary_op) {
+                 && parentState.type != expression_or_label) {
             *indentDepth = tokenPosition;
         }
         break;
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index 9c8136f522a..9d172accd9a 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -551,6 +551,7 @@ bool Qt4BuildConfiguration::removeQMLInspectorFromArguments(QString *args)
         const QString arg = ait.value();
         if (arg.contains(QLatin1String(Constants::QMAKEVAR_QMLJSDEBUGGER_PATH))
                 || arg.contains(Constants::QMAKEVAR_DECLARATIVE_DEBUG)) {
+            ait.deleteArg();
             removedArgument = true;
         }
     }
diff --git a/src/plugins/texteditor/codestyleeditor.cpp b/src/plugins/texteditor/codestyleeditor.cpp
index af96c436fb2..bdad029b476 100644
--- a/src/plugins/texteditor/codestyleeditor.cpp
+++ b/src/plugins/texteditor/codestyleeditor.cpp
@@ -43,6 +43,7 @@
 #include "snippets/isnippetprovider.h"
 #include 
 #include 
+#include 
 
 using namespace TextEditor;
 
@@ -64,8 +65,14 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory,
     ISnippetProvider *provider = factory->snippetProvider();
     if (provider)
         provider->decorateEditor(m_preview);
+    QLabel *label = new QLabel(
+                tr("Edit preview contents to see how the current settings "
+                "are applied to custom code snippets. Changes in the preview "
+                "do not affect the current settings."), this);
+    label->setWordWrap(true);
     m_layout->addWidget(selector);
     m_layout->addWidget(m_preview);
+    m_layout->addWidget(label);
     connect(codeStyle, SIGNAL(currentTabSettingsChanged(TextEditor::TabSettings)),
             this, SLOT(updatePreview()));
     connect(codeStyle, SIGNAL(currentValueChanged(QVariant)),
diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp
deleted file mode 100644
index bb96a7dca87..00000000000
--- a/src/plugins/welcome/communitywelcomepagewidget.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#include "communitywelcomepagewidget.h"
-#include "ui_communitywelcomepagewidget.h"
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-
-struct Site {
-    const char *description;
-    const char *url;
-};
-
-static const Site supportSites[] = {
-    { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
-                        "Forum Nokia
 Mobile application support"),
-      "http://www.forum.nokia.com/Support/"},
-    { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
-                        "Qt LGPL Support
 Buy commercial Qt support"),
-      "http://shop.qt.nokia.com/en/support.html"},
-    { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
-                        "Qt DevNet
 Qt Developer Resources"),
-      "http://developer.qt.nokia.com" }
-};
-
-static const Site sites[] = {
-    { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
-                        "Qt Home
 Qt by Nokia on the web"),
-      "http://qt.nokia.com" },
-    { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
-                        "Qt Git Hosting
 Participate in Qt development"),
-      "http://qt.gitorious.org"},
-    { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
-                        "Qt Apps
 Find free Qt-based apps"),
-      "http://www.qt-apps.org"}
-};
-
-namespace Welcome {
-namespace Internal {
-
-static inline void populateWelcomeTreeWidget(const Site *sites, int count, Utils::WelcomeModeTreeWidget *wt)
-{
-    for (int s = 0; s < count; s++) {
-        const QString description = CommunityWelcomePageWidget::tr(sites[s].description);
-        const QString url = QLatin1String(sites[s].url);
-        wt->addItem(description, url, url);
-    }
-}
-
-CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) :
-    QWidget(parent),
-    m_rssFetcher(new Core::RssFetcher(7)),
-    ui(new Ui::CommunityWelcomePageWidget)
-{
-    ui->setupUi(this);
-
-    connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
-    connect(ui->miscSitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
-    connect(ui->supportSitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
-
-    connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
-            ui->newsTreeWidget, SLOT(addNewsItem(QString, QString, QString)), Qt::QueuedConnection);
-    connect(this, SIGNAL(startRssFetching(QUrl)), m_rssFetcher, SLOT(fetch(QUrl)), Qt::QueuedConnection);
-
-    m_rssFetcher->start(QThread::LowestPriority);
-    //: Add localized feed here only if one exists
-    emit startRssFetching(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
-
-    populateWelcomeTreeWidget(supportSites, sizeof(supportSites)/sizeof(Site), ui->supportSitesTreeWidget);
-    populateWelcomeTreeWidget(sites, sizeof(sites)/sizeof(Site), ui->miscSitesTreeWidget);
-}
-
-CommunityWelcomePageWidget::~CommunityWelcomePageWidget()
-{
-    m_rssFetcher->exit();
-    m_rssFetcher->wait();
-    delete m_rssFetcher;
-    delete ui;
-}
-
-void CommunityWelcomePageWidget::slotUrlClicked(const QString &data)
-{
-    QDesktopServices::openUrl(QUrl(data));
-}
-
-} // namespace Internal
-} // namespace Welcome
diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h
deleted file mode 100644
index fa016944911..00000000000
--- a/src/plugins/welcome/communitywelcomepagewidget.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#ifndef COMMUNITYWELCOMEPAGEWIDGET_H
-#define COMMUNITYWELCOMEPAGEWIDGET_H
-
-#include 
-
-QT_BEGIN_NAMESPACE
-class QUrl;
-QT_END_NAMESPACE
-
-namespace Core{
-class RssFetcher;
-}
-
-namespace Welcome {
-namespace Internal {
-
-namespace Ui {
-    class CommunityWelcomePageWidget;
-}
-
-class CommunityWelcomePageWidget : public QWidget
-{
-    Q_OBJECT
-
-public:
-    explicit CommunityWelcomePageWidget(QWidget *parent = 0);
-    ~CommunityWelcomePageWidget();
-
-signals:
-    void startRssFetching(const QUrl& url);
-
-private slots:
-    void slotUrlClicked(const QString &data);
-
-
-private:
-    Core::RssFetcher *m_rssFetcher;
-    Ui::CommunityWelcomePageWidget *ui;
-};
-
-
-} // namespace Internal
-} // namespace Welcome
-#endif // COMMUNITYWELCOMEPAGEWIDGET_H
diff --git a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp
index a35c03386d5..acfa4608b0c 100644
--- a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp
+++ b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp
@@ -95,6 +95,7 @@ private Q_SLOTS:
     void labelledStatements2();
     void labelledStatements3();
     void json1();
+    void multilineTernaryInProperty();
 };
 
 struct Line {
@@ -1226,6 +1227,29 @@ void tst_QMLCodeFormatter::json1()
     checkIndent(data);
 }
 
+void tst_QMLCodeFormatter::multilineTernaryInProperty()
+{
+    QList data;
+    data << Line("Item {")
+         << Line("    property int a: 1 ?")
+         << Line("                        2 :")
+         << Line("                        3 +")
+         << Line("                        4")
+         << Line("    property int a: 1 ? 2")
+         << Line("                      : 3 +")
+         << Line("                        4")
+         << Line("    a: 1 ?")
+         << Line("           2 :")
+         << Line("           3")
+         << Line("    a: 1 ? 2")
+         << Line("         : 3 +")
+         << Line("           4")
+         << Line("    ba: 1")
+         << Line("}")
+         ;
+    checkIndent(data);
+}
+
 QTEST_APPLESS_MAIN(tst_QMLCodeFormatter)
 #include "tst_qmlcodeformatter.moc"
 
diff --git a/tests/manual/debugger/simple/simple_test_app.cpp b/tests/manual/debugger/simple/simple_test_app.cpp
index 813435937eb..ac722f31061 100644
--- a/tests/manual/debugger/simple/simple_test_app.cpp
+++ b/tests/manual/debugger/simple/simple_test_app.cpp
@@ -2528,6 +2528,11 @@ void testMemoryView()
         a[i] = i;
 }
 
+void testNullPointerDeref()
+{
+    *(int *)0 = 0;
+}
+
 void testEndlessRecursion()
 {
     testEndlessRecursion();
@@ -3702,6 +3707,7 @@ int main(int argc, char *argv[])
     qregion::testQRegion();
     peekandpoke::testPeekAndPoke3();
     anon::testAnonymous();
+    //testNullPointerDeref();
     //testEndlessLoop();
     //testEndlessRecursion();
     testQStack();
diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py
index 4f1b41ed588..7d557360331 100644
--- a/tests/system/shared/project.py
+++ b/tests/system/shared/project.py
@@ -162,3 +162,55 @@ def createNewQtQuickApplication(workingDir, projectName = None, templateFile = N
     clickButton(nextButton)
     selectFromCombo(":addToVersionControlComboBox_QComboBox", "")
     clickButton(waitForObject("{type='QPushButton' text~='(Finish|Done)' visible='1'}", 20000))
+
+def createNewQtQuickUI(workingDir):
+    invokeMenuItem("File", "New File or Project...")
+    clickItem(waitForObject("{type='QTreeView' name='templateCategoryView'}", 20000), "Projects.Qt Quick Project", 5, 5, 0, Qt.LeftButton)
+    clickItem(waitForObject("{name='templatesView' type='QListView'}", 20000), "Qt Quick UI", 5, 5, 0, Qt.LeftButton)
+    clickButton(waitForObject("{text='Choose...' type='QPushButton' unnamed='1' visible='1'}", 20000))
+    baseLineEd = waitForObject("{type='Utils::BaseValidatingLineEdit' unnamed='1' visible='1'}", 20000)
+    if workingDir == None:
+        workingDir = tempDir()
+    replaceEditorContent(baseLineEd, workingDir)
+    stateLabel = findObject("{type='QLabel' name='stateLabel'}")
+    labelCheck = stateLabel.text=="" and stateLabel.styleSheet == ""
+    test.verify(labelCheck, "Project name and base directory without warning or error")
+    # make sure this is not set as default location
+    cbDefaultLocation = waitForObject("{type='QCheckBox' name='projectsDirectoryCheckBox' visible='1'}", 20000)
+    if cbDefaultLocation.checked:
+        clickButton(cbDefaultLocation)
+    # now there's the 'untitled' project inside a temporary directory - step forward...!
+    clickButton(waitForObject("{text~='(Next.*|Continue)' type='QPushButton' visible='1'}", 20000))
+    selectFromCombo(":addToVersionControlComboBox_QComboBox", "")
+    clickButton(waitForObject("{type='QPushButton' text~='(Finish|Done)' visible='1'}", 20000))
+
+def createNewQmlExtension(workingDir):
+    invokeMenuItem("File", "New File or Project...")
+    clickItem(waitForObject("{type='QTreeView' name='templateCategoryView'}", 20000), "Projects.Qt Quick Project", 5, 5, 0, Qt.LeftButton)
+    clickItem(waitForObject("{name='templatesView' type='QListView'}", 20000), "Custom QML Extension Plugin", 5, 5, 0, Qt.LeftButton)
+    clickButton(waitForObject("{text='Choose...' type='QPushButton' unnamed='1' visible='1'}", 20000))
+    baseLineEd = waitForObject("{type='Utils::BaseValidatingLineEdit' unnamed='1' visible='1'}", 20000)
+    if workingDir == None:
+        workingDir = tempDir()
+    replaceEditorContent(baseLineEd, workingDir)
+    stateLabel = findObject("{type='QLabel' name='stateLabel'}")
+    labelCheck = stateLabel.text=="" and stateLabel.styleSheet == ""
+    test.verify(labelCheck, "Project name and base directory without warning or error")
+    # make sure this is not set as default location
+    cbDefaultLocation = waitForObject("{type='QCheckBox' name='projectsDirectoryCheckBox' visible='1'}", 20000)
+    if cbDefaultLocation.checked:
+        clickButton(cbDefaultLocation)
+    # now there's the 'untitled' project inside a temporary directory - step forward...!
+    nextButton = waitForObject("{text~='(Next.*|Continue)' type='QPushButton' visible='1'}", 20000)
+    clickButton(nextButton)
+    chooseTargets()
+    clickButton(nextButton)
+    nameLineEd = waitForObject("{buddy={type='QLabel' text='Object Class-name:' unnamed='1' visible='1'} "
+                               "type='QLineEdit' unnamed='1' visible='1'}", 20000)
+    replaceEditorContent(nameLineEd, "TestItem")
+    uriLineEd = waitForObject("{buddy={type='QLabel' text='URI:' unnamed='1' visible='1'} "
+                              "type='QLineEdit' unnamed='1' visible='1'}", 20000)
+    replaceEditorContent(uriLineEd, "com.nokia.test.qmlcomponents")
+    clickButton(nextButton)
+    selectFromCombo(":addToVersionControlComboBox_QComboBox", "")
+    clickButton(waitForObject("{type='QPushButton' text~='(Finish|Done)' visible='1'}", 20000))
diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py
index 418f6967792..2aacbf68c15 100644
--- a/tests/system/shared/qtcreator.py
+++ b/tests/system/shared/qtcreator.py
@@ -21,11 +21,13 @@ source("../../shared/editor_utils.py")
 
 def waitForCleanShutdown(timeOut=10):
     appCtxt = currentApplicationContext()
-    shutdownDone = False
+    shutdownDone = (str(appCtxt)=="")
     if platform.system() in ('Windows','Microsoft'):
         endtime = datetime.utcnow() + timedelta(seconds=timeOut)
         while not shutdownDone:
             # following work-around because os.kill() works for win not until python 2.7
+            if appCtxt.pid==-1:
+                break
             tasks = subprocess.Popen("tasklist /FI \"PID eq %d\"" % appCtxt.pid, shell=True,stdout=subprocess.PIPE)
             output = tasks.communicate()[0]
             tasks.stdout.close()
@@ -47,7 +49,7 @@ def waitForCleanShutdown(timeOut=10):
 
 def __removeTmpSettingsDir__():
     waitForCleanShutdown()
-    deleteDirIfExists(os.path.dirname(tmpSettingsDir))
+    deleteDirIfExists(os.path.dirname(os.path.dirname(tmpSettingsDir)))
 
 if platform.system() in ('Windows', 'Microsoft'):
     sdkPath = "C:\\QtSDK"
@@ -67,5 +69,5 @@ tmpSettingsDir = os.path.abspath(tmpSettingsDir+"/settings")
 shutil.copytree(cwd, tmpSettingsDir)
 # the following only doesn't work if the test ends in an exception
 atexit.register(__removeTmpSettingsDir__)
-SettingsPath = " -settingspath %s" % tmpSettingsDir
+SettingsPath = ' -settingspath "%s"' % tmpSettingsDir
 
diff --git a/tests/system/shared/qtquick.py b/tests/system/shared/qtquick.py
index 98b664bf0b1..899bdeeda06 100644
--- a/tests/system/shared/qtquick.py
+++ b/tests/system/shared/qtquick.py
@@ -119,8 +119,11 @@ def runAndCloseQtQuickUI():
     # the following is currently a work-around for not using hooking into subprocesses
     if (waitForObject(":Qt Creator_Core::Internal::OutputPaneToggleButton").checked!=True):
         clickButton(":Qt Creator_Core::Internal::OutputPaneToggleButton")
-    clickButton(":Qt Creator.Stop_QToolButton")
+    stop = findObject(":Qt Creator.Stop_QToolButton")
+    waitFor("stop.enabled==True")
+    clickButton(stop)
     if platform.system()=="Darwin":
+        waitFor("stop.enabled==False")
         snooze(2)
         nativeType("")
     return True
diff --git a/tests/system/suite_qtquick/tst_qml_editor/test.py b/tests/system/suite_qtquick/tst_qml_editor/test.py
index 4c7edff0f0a..f2bf98e3c9b 100644
--- a/tests/system/suite_qtquick/tst_qml_editor/test.py
+++ b/tests/system/suite_qtquick/tst_qml_editor/test.py
@@ -32,11 +32,22 @@ def testRenameId():
     model = navTree.model()
     files = ["Core.ContextMenu\\.qml", "Core.GridMenu\\.qml", "Core.ListMenu\\.qml", "focus\\.qml"]
     originalTexts = {}
+    editor = waitForObject("{type='QmlJSEditor::QmlJSTextEditorWidget' unnamed='1' visible='1' "
+                           "window=':Qt Creator_Core::Internal::MainWindow'}", 20000)
+    # temporarily store editor content for synchronizing purpose
+    # usage of formerTxt is done because I couldn't get waitForSignal() to work
+    # it always stored a different object into the signalObjects map as it looked up afterwards
+    # although used objectMap.realName() for both
+    formerTxt = editor.plainText
     for file in files:
         doubleClickFile(navTree, file)
-        editor = waitForObject("{type='QmlJSEditor::QmlJSTextEditorWidget' unnamed='1' visible='1' "
-                               "window=':Qt Creator_Core::Internal::MainWindow'}", 20000)
-        originalTexts.setdefault(file, "%s" % editor.plainText)
+        # wait until editor content switched to the double-clicked file
+        while formerTxt==editor.plainText:
+            editor = waitForObject("{type='QmlJSEditor::QmlJSTextEditorWidget' unnamed='1' visible='1' "
+                                   "window=':Qt Creator_Core::Internal::MainWindow'}", 20000)
+        # store content for next round
+        formerTxt = editor.plainText
+        originalTexts.setdefault(file, "%s" % formerTxt)
         test.log("stored %s's content" % file.replace("Core.","").replace("\\",""))
     # last opened file is the main file focus.qml
     line = "FocusScope\s*\{"
@@ -52,21 +63,32 @@ def testRenameId():
                        "window=':Qt Creator_Core::Internal::MainWindow'}"), "renamedView")
     clickButton(waitForObject("{text='Replace' type='QToolButton' unnamed='1' visible='1' "
                               "window=':Qt Creator_Core::Internal::MainWindow'}"))
+    # store editor content for synchronizing purpose
+    formerTxt = editor.plainText
     for file in files:
         doubleClickFile(navTree, file)
-        editor = waitForObject("{type='QmlJSEditor::QmlJSTextEditorWidget' unnamed='1' visible='1' "
-                               "window=':Qt Creator_Core::Internal::MainWindow'}", 20000)
-        modifiedText = "%s" % editor.plainText
+        # wait until editor content switched to double-clicked file
+        while formerTxt==editor.plainText:
+            editor = waitForObject("{type='QmlJSEditor::QmlJSTextEditorWidget' unnamed='1' visible='1' "
+                                   "window=':Qt Creator_Core::Internal::MainWindow'}", 20000)
+        # store content for next round
+        formerTxt = editor.plainText
         originalText = originalTexts.get(file).replace("mainView", "renamedView")
-        test.compare(originalText,modifiedText)
+        test.compare(originalText,formerTxt, "Comparing %s" % file.replace("Core.","").replace("\\",""))
     invokeMenuItem("File","Save All")
 
 def doubleClickFile(navTree, file):
     treeElement = ("untitled.QML.%s/qml.%s" %
-                   (templateDir.replace("\\", "/").replace("_", "\\_").replace(".","\\."),file))
+                   (maskSpecialCharsForProjectTree(templateDir),file))
     waitForObjectItem(navTree, treeElement)
     doubleClickItem(navTree, treeElement, 5, 5, 0, Qt.LeftButton)
 
+def maskSpecialCharsForProjectTree(filename):
+    filename = filename.replace("\\", "/").replace("_", "\\_").replace(".","\\.")
+    # undoing mask operations on chars masked by mistake
+    filename = filename.replace("/?","\\?").replace("/*","\\*")
+    return filename
+
 def cleanup():
     global workingDir, templateDir
     waitForCleanShutdown()
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation3/test.py b/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
index e7c191f74c2..e5506016771 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
@@ -7,32 +7,12 @@ def main():
     startApplication("qtcreator" + SettingsPath)
     # using a temporary directory won't mess up an eventually exisiting
     workingDir = tempDir()
-    createNewQtQuickUI()
+    createNewQtQuickUI(workingDir)
     test.log("Running project")
     if runAndCloseQtQuickUI():
         logApplicationOutput()
     invokeMenuItem("File", "Exit")
 
-def createNewQtQuickUI():
-    global workingDir
-    invokeMenuItem("File", "New File or Project...")
-    clickItem(waitForObject("{type='QTreeView' name='templateCategoryView'}", 20000), "Projects.Qt Quick Project", 5, 5, 0, Qt.LeftButton)
-    clickItem(waitForObject("{name='templatesView' type='QListView'}", 20000), "Qt Quick UI", 5, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject("{text='Choose...' type='QPushButton' unnamed='1' visible='1'}", 20000))
-    baseLineEd = waitForObject("{type='Utils::BaseValidatingLineEdit' unnamed='1' visible='1'}", 20000)
-    replaceEditorContent(baseLineEd, workingDir)
-    stateLabel = findObject("{type='QLabel' name='stateLabel'}")
-    labelCheck = stateLabel.text=="" and stateLabel.styleSheet == ""
-    test.verify(labelCheck, "Project name and base directory without warning or error")
-    # make sure this is not set as default location
-    cbDefaultLocation = waitForObject("{type='QCheckBox' name='projectsDirectoryCheckBox' visible='1'}", 20000)
-    if cbDefaultLocation.checked:
-        clickButton(cbDefaultLocation)
-    # now there's the 'untitled' project inside a temporary directory - step forward...!
-    clickButton(waitForObject("{text~='(Next.*|Continue)' type='QPushButton' visible='1'}", 20000))
-    selectFromCombo(":addToVersionControlComboBox_QComboBox", "")
-    clickButton(waitForObject("{type='QPushButton' text~='(Finish|Done)' visible='1'}", 20000))
-
 def cleanup():
     global workingDir
     # waiting for a clean exit - for a full-remove of the temp directory
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
index f2cd06a675c..b3d45fd64d4 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
@@ -7,7 +7,7 @@ def main():
     startApplication("qtcreator" + SettingsPath)
     # using a temporary directory won't mess up an eventually exisiting
     workingDir = tempDir()
-    createNewQmlExtension()
+    createNewQmlExtension(workingDir)
     # wait for parsing to complete
     waitForSignal("{type='CppTools::Internal::CppModelManager' unnamed='1'}", "sourceFilesRefreshed(QStringList)", 30000)
     test.log("Building project")
@@ -17,36 +17,6 @@ def main():
     checkLastBuild()
     invokeMenuItem("File", "Exit")
 
-def createNewQmlExtension():
-    global workingDir
-    invokeMenuItem("File", "New File or Project...")
-    clickItem(waitForObject("{type='QTreeView' name='templateCategoryView'}", 20000), "Projects.Qt Quick Project", 5, 5, 0, Qt.LeftButton)
-    clickItem(waitForObject("{name='templatesView' type='QListView'}", 20000), "Custom QML Extension Plugin", 5, 5, 0, Qt.LeftButton)
-    clickButton(waitForObject("{text='Choose...' type='QPushButton' unnamed='1' visible='1'}", 20000))
-    baseLineEd = waitForObject("{type='Utils::BaseValidatingLineEdit' unnamed='1' visible='1'}", 20000)
-    replaceEditorContent(baseLineEd, workingDir)
-    stateLabel = findObject("{type='QLabel' name='stateLabel'}")
-    labelCheck = stateLabel.text=="" and stateLabel.styleSheet == ""
-    test.verify(labelCheck, "Project name and base directory without warning or error")
-    # make sure this is not set as default location
-    cbDefaultLocation = waitForObject("{type='QCheckBox' name='projectsDirectoryCheckBox' visible='1'}", 20000)
-    if cbDefaultLocation.checked:
-        clickButton(cbDefaultLocation)
-    # now there's the 'untitled' project inside a temporary directory - step forward...!
-    nextButton = waitForObject("{text~='(Next.*|Continue)' type='QPushButton' visible='1'}", 20000)
-    clickButton(nextButton)
-    chooseTargets()
-    clickButton(nextButton)
-    nameLineEd = waitForObject("{buddy={type='QLabel' text='Object Class-name:' unnamed='1' visible='1'} "
-                               "type='QLineEdit' unnamed='1' visible='1'}", 20000)
-    replaceEditorContent(nameLineEd, "TestItem")
-    uriLineEd = waitForObject("{buddy={type='QLabel' text='URI:' unnamed='1' visible='1'} "
-                              "type='QLineEdit' unnamed='1' visible='1'}", 20000)
-    replaceEditorContent(uriLineEd, "com.nokia.test.qmlcomponents")
-    clickButton(nextButton)
-    selectFromCombo(":addToVersionControlComboBox_QComboBox", "")
-    clickButton(waitForObject("{type='QPushButton' text~='(Finish|Done)' visible='1'}", 20000))
-
 def cleanup():
     global workingDir
     # waiting for a clean exit - for a full-remove of the temp directory