diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
index 5f2448ab2ed29b84e6cbd2b6220ad66b28455ee0..5e316a810f15d195ce76c5a547be2d9755eea0ab 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
@@ -38,89 +38,6 @@
 
 namespace QmlDesigner {
 
-static inline DesignDocument* currentDesignDocument()
-{
-    return QmlDesignerPlugin::instance()->documentManager().currentDesignDocument();
-}
-
-static inline bool checkIfNodeIsAView(const ModelNode &node)
-{
-    return node.metaInfo().isValid() &&
-            (node.metaInfo().isSubclassOf("QtQuick.ListView", -1, -1) ||
-             node.metaInfo().isSubclassOf("QtQuick.GridView", -1, -1) ||
-             node.metaInfo().isSubclassOf("QtQuick.PathView", -1, -1));
-}
-
-static inline void getProperties(const ModelNode node, QHash<PropertyName, QVariant> &propertyHash)
-{
-    if (QmlObjectNode::isValidQmlObjectNode(node)) {
-        foreach (const PropertyName &propertyName, node.propertyNames()) {
-            if (node.property(propertyName).isVariantProperty() ||
-                    (node.property(propertyName).isBindingProperty() &&
-                     !propertyName.contains("anchors."))) {
-                propertyHash.insert(propertyName, QmlObjectNode(node).instanceValue(propertyName));
-            }
-        }
-
-        if (QmlItemNode::isValidQmlItemNode(node)) {
-            QmlItemNode itemNode(node);
-
-            propertyHash.insert("width", itemNode.instanceValue("width"));
-            propertyHash.insert("height", itemNode.instanceValue("height"));
-            propertyHash.remove("x");
-            propertyHash.remove("y");
-            propertyHash.remove("rotation");
-            propertyHash.remove("opacity");
-        }
-    }
-}
-
-static inline void applyProperties(ModelNode &node, const QHash<PropertyName, QVariant> &propertyHash)
-{
-    QHash<PropertyName, QVariant> auxiliaryData  = node.auxiliaryData();
-    foreach (const PropertyName &propertyName, auxiliaryData.keys()) {
-        node.setAuxiliaryData(propertyName, QVariant());
-    }
-
-    QHashIterator<PropertyName, QVariant> propertyIterator(propertyHash);
-    while (propertyIterator.hasNext()) {
-        propertyIterator.next();
-        const PropertyName propertyName = propertyIterator.key();
-        if (propertyName == "width" || propertyName == "height") {
-            node.setAuxiliaryData(propertyIterator.key(), propertyIterator.value());
-        } else if (node.property(propertyIterator.key()).isDynamic() &&
-                   node.property(propertyIterator.key()).dynamicTypeName() == "alias" &&
-                   node.property(propertyIterator.key()).isBindingProperty()) {
-            AbstractProperty targetProperty = node.bindingProperty(propertyIterator.key()).resolveToProperty();
-            if (targetProperty.isValid())
-                targetProperty.parentModelNode().setAuxiliaryData(targetProperty.name() + "@NodeInstance", propertyIterator.value());
-        } else {
-            node.setAuxiliaryData(propertyIterator.key() + "@NodeInstance", propertyIterator.value());
-        }
-    }
-}
-
-static inline bool modelNodeIsComponent(const ModelNode &node)
-{
-    if (!node.isValid() || !node.metaInfo().isValid())
-        return false;
-
-    if (node.metaInfo().isFileComponent())
-        return true;
-
-    if (node.nodeSourceType() == ModelNode::NodeWithComponentSource)
-        return true;
-    if (checkIfNodeIsAView(node) &&
-        node.hasNodeProperty("delegate")) {
-        if (node.nodeProperty("delegate").modelNode().metaInfo().isFileComponent())
-            return true;
-        if (node.nodeProperty("delegate").modelNode().nodeSourceType() == ModelNode::NodeWithComponentSource)
-            return true;
-    }
-
-    return false;
-}
-
 static inline bool itemsHaveSameParent(const QList<ModelNode> &siblingList)
 {
     if (siblingList.isEmpty())
@@ -153,91 +70,6 @@ static inline bool itemsHaveSameParent(const QList<ModelNode> &siblingList)
     return true;
 }
 
-static inline bool isFileComponent(const ModelNode &node)
-{
-    if (!node.isValid() || !node.metaInfo().isValid())
-        return false;
-
-    if (node.metaInfo().isFileComponent())
-        return true;
-
-    if (checkIfNodeIsAView(node) &&
-        node.hasNodeProperty("delegate")) {
-        if (node.nodeProperty("delegate").modelNode().metaInfo().isFileComponent())
-            return true;
-    }
-
-    return false;
-}
-
-static inline void openFileForComponent(const ModelNode &node)
-{
-    QmlDesignerPlugin::instance()->viewManager().nextFileIsCalledInternally();
-
-    //int width = 0;
-    //int height = 0;
-    QHash<PropertyName, QVariant> propertyHash;
-    if (node.metaInfo().isFileComponent()) {
-        //getWidthHeight(node, width, height);
-        getProperties(node, propertyHash);
-        currentDesignDocument()->changeToExternalSubComponent(node.metaInfo().componentFileName());
-    } else if (checkIfNodeIsAView(node) &&
-               node.hasNodeProperty("delegate") &&
-               node.nodeProperty("delegate").modelNode().metaInfo().isFileComponent()) {
-        //getWidthHeight(node, width, height);
-        getProperties(node, propertyHash);
-        currentDesignDocument()->changeToExternalSubComponent(node.nodeProperty("delegate").modelNode().metaInfo().componentFileName());
-    }
-    ModelNode rootModelNode = currentDesignDocument()->rewriterView()->rootModelNode();
-    applyProperties(rootModelNode, propertyHash);
-    //rootModelNode.setAuxiliaryData("width", width);
-    //rootModelNode.setAuxiliaryData("height", height);
-}
-
-static inline void openInlineComponent(const ModelNode &node)
-{
-
-    if (!node.isValid() || !node.metaInfo().isValid())
-        return;
-
-    if (!currentDesignDocument())
-        return;
-
-    QHash<PropertyName, QVariant> propertyHash;
-
-    if (node.nodeSourceType() == ModelNode::NodeWithComponentSource) {
-        //getWidthHeight(node, width, height);
-        getProperties(node, propertyHash);
-        currentDesignDocument()->changeToSubComponent(node);
-    } else if (checkIfNodeIsAView(node) &&
-               node.hasNodeProperty("delegate")) {
-        if (node.nodeProperty("delegate").modelNode().nodeSourceType() == ModelNode::NodeWithComponentSource) {
-            //getWidthHeight(node, width, height);
-            getProperties(node, propertyHash);
-            currentDesignDocument()->changeToSubComponent(node.nodeProperty("delegate").modelNode());
-        }
-    }
-
-    ModelNode rootModelNode = currentDesignDocument()->rewriterView()->rootModelNode();
-    applyProperties(rootModelNode, propertyHash);
-    //rootModelNode.setAuxiliaryData("width", width);
-    //rootModelNode.setAuxiliaryData("height", height);
-}
-
-namespace ComponentUtils {
-void goIntoComponent(const ModelNode &modelNode)
-{
-    if (modelNode.isValid() && modelNodeIsComponent(modelNode)) {
-        QmlDesignerPlugin::instance()->viewManager().setComponentNode(modelNode);
-        if (isFileComponent(modelNode))
-            openFileForComponent(modelNode);
-        else
-            openInlineComponent(modelNode);
-    }
-}
-
-} // namespace ComponentUtils
-
 namespace SelectionContextFunctors {
 
 bool singleSelectionItemIsAnchored(const SelectionContext &selectionState)
@@ -267,7 +99,7 @@ bool selectionHasSameParent(const SelectionContext &selectionState)
 
 bool selectionIsComponent(const SelectionContext &selectionState)
 {
-    return modelNodeIsComponent(selectionState.currentSingleSelectedNode());
+    return selectionState.currentSingleSelectedNode().isComponent();
 }
 
 } //SelectionStateFunctors
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
index d5e60975e33a37ee883b05b7a1e12b9118fce308..4fb8afde25c9311735098643f16ca04cf8005c61 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
@@ -96,11 +96,6 @@ bool singleSelectionItemIsNotAnchored(const SelectionContext &selectionState);
 
 } // namespace SelectionStateFunctors
 
-
-namespace ComponentUtils {
-    void goIntoComponent(const ModelNode &modelNode);
-}
-
 class ActionTemplate : public DefaultAction
 {
 
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index d006c196d27d32f23061eff053163a0fd5dcff56..ec64d6c9f0422973841d41cf09be8740c3f4f8b3 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -39,6 +39,7 @@
 #include <variantproperty.h>
 #include <rewritingexception.h>
 #include <rewritertransaction.h>
+#include <documentmanager.h>
 #include <qmlanchors.h>
 #include <limits>
 
@@ -158,7 +159,7 @@ namespace ModelNodeOperations {
 
 void goIntoComponent(const ModelNode &modelNode)
 {
-    ComponentUtils::goIntoComponent(modelNode);
+    DocumentManager::goIntoComponent(modelNode);
 }
 
 void select(const SelectionContext &selectionState)
diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp
index b69d9adafa68448bf6c867a14041020263311c86..a8f726c317b67ef7aea79ed10afa8907a751b1d3 100644
--- a/src/plugins/qmldesigner/documentmanager.cpp
+++ b/src/plugins/qmldesigner/documentmanager.cpp
@@ -28,9 +28,140 @@
 ****************************************************************************/
 
 #include "documentmanager.h"
+#include "qmldesignerplugin.h"
+
+#include <modelnode.h>
+#include <nodemetainfo.h>
+#include <nodeproperty.h>
+#include <bindingproperty.h>
 
 namespace QmlDesigner {
 
+static inline DesignDocument* currentDesignDocument()
+{
+    return QmlDesignerPlugin::instance()->documentManager().currentDesignDocument();
+}
+
+static inline void getProperties(const ModelNode node, QHash<PropertyName, QVariant> &propertyHash)
+{
+    if (QmlObjectNode::isValidQmlObjectNode(node)) {
+        foreach (const AbstractProperty &abstractProperty, node.properties()) {
+            if (abstractProperty.isVariantProperty()
+                    || (abstractProperty.isBindingProperty()
+                        && !abstractProperty.name().contains("anchors.")))
+                propertyHash.insert(abstractProperty.name(), QmlObjectNode(node).instanceValue(abstractProperty.name()));
+        }
+
+        if (QmlItemNode::isValidQmlItemNode(node)) {
+            QmlItemNode itemNode(node);
+
+            propertyHash.insert("width", itemNode.instanceValue("width"));
+            propertyHash.insert("height", itemNode.instanceValue("height"));
+            propertyHash.remove("x");
+            propertyHash.remove("y");
+            propertyHash.remove("rotation");
+            propertyHash.remove("opacity");
+        }
+    }
+}
+
+static inline void applyProperties(ModelNode &node, const QHash<PropertyName, QVariant> &propertyHash)
+{
+    QHash<PropertyName, QVariant> auxiliaryData  = node.auxiliaryData();
+
+    foreach (const PropertyName &propertyName, auxiliaryData.keys()) {
+        if (node.hasAuxiliaryData(propertyName))
+            node.setAuxiliaryData(propertyName, QVariant());
+    }
+
+    QHashIterator<PropertyName, QVariant> propertyIterator(propertyHash);
+    while (propertyIterator.hasNext()) {
+        propertyIterator.next();
+        const PropertyName propertyName = propertyIterator.key();
+        if (propertyName == "width" || propertyName == "height") {
+            node.setAuxiliaryData(propertyIterator.key(), propertyIterator.value());
+        } else if (node.property(propertyIterator.key()).isDynamic() &&
+                   node.property(propertyIterator.key()).dynamicTypeName() == "alias" &&
+                   node.property(propertyIterator.key()).isBindingProperty()) {
+            AbstractProperty targetProperty = node.bindingProperty(propertyIterator.key()).resolveToProperty();
+            if (targetProperty.isValid())
+                targetProperty.parentModelNode().setAuxiliaryData(targetProperty.name() + "@NodeInstance", propertyIterator.value());
+        } else {
+            node.setAuxiliaryData(propertyIterator.key() + "@NodeInstance", propertyIterator.value());
+        }
+    }
+}
+
+static inline void openFileForComponent(const ModelNode &node)
+{
+    QmlDesignerPlugin::instance()->viewManager().nextFileIsCalledInternally();
+
+    //int width = 0;
+    //int height = 0;
+    QHash<PropertyName, QVariant> propertyHash;
+    if (node.metaInfo().isFileComponent()) {
+        //getWidthHeight(node, width, height);
+        getProperties(node, propertyHash);
+        currentDesignDocument()->changeToExternalSubComponent(node.metaInfo().componentFileName());
+    } else if (node.metaInfo().isView() &&
+               node.hasNodeProperty("delegate") &&
+               node.nodeProperty("delegate").modelNode().metaInfo().isFileComponent()) {
+        //getWidthHeight(node, width, height);
+        getProperties(node, propertyHash);
+        currentDesignDocument()->changeToExternalSubComponent(node.nodeProperty("delegate").modelNode().metaInfo().componentFileName());
+    }
+    ModelNode rootModelNode = currentDesignDocument()->rewriterView()->rootModelNode();
+    applyProperties(rootModelNode, propertyHash);
+    //rootModelNode.setAuxiliaryData("width", width);
+    //rootModelNode.setAuxiliaryData("height", height);
+}
+
+static inline void openInlineComponent(const ModelNode &node)
+{
+
+    if (!node.isValid() || !node.metaInfo().isValid())
+        return;
+
+    if (!currentDesignDocument())
+        return;
+
+    QHash<PropertyName, QVariant> propertyHash;
+
+    if (node.nodeSourceType() == ModelNode::NodeWithComponentSource) {
+        //getWidthHeight(node, width, height);
+        getProperties(node, propertyHash);
+        currentDesignDocument()->changeToSubComponent(node);
+    } else if (node.metaInfo().isView()
+               && node.hasNodeProperty("delegate")
+               && node.nodeProperty("delegate").modelNode().nodeSourceType() == ModelNode::NodeWithComponentSource) {
+        //getWidthHeight(node, width, height);
+        getProperties(node, propertyHash);
+        currentDesignDocument()->changeToSubComponent(node.nodeProperty("delegate").modelNode());
+    }
+
+    ModelNode rootModelNode = currentDesignDocument()->rewriterView()->rootModelNode();
+    applyProperties(rootModelNode, propertyHash);
+    //rootModelNode.setAuxiliaryData("width", width);
+    //rootModelNode.setAuxiliaryData("height", height);
+}
+
+static inline bool isFileComponent(const ModelNode &node)
+{
+    if (!node.isValid() || !node.metaInfo().isValid())
+        return false;
+
+    if (node.metaInfo().isFileComponent())
+        return true;
+
+    if (node.metaInfo().isView() &&
+        node.hasNodeProperty("delegate")) {
+        if (node.nodeProperty("delegate").modelNode().metaInfo().isFileComponent())
+            return true;
+    }
+
+    return false;
+}
+
 DocumentManager::DocumentManager()
     : QObject()
 {
@@ -73,4 +204,16 @@ void DocumentManager::removeEditors(QList<Core::IEditor *> editors)
         delete m_designDocumentHash.take(editor).data();
 }
 
+void DocumentManager::goIntoComponent(const ModelNode &modelNode)
+{
+    if (modelNode.isValid() && modelNode.isComponent()) {
+        QmlDesignerPlugin::instance()->viewManager().setComponentNode(modelNode);
+        if (isFileComponent(modelNode))
+            openFileForComponent(modelNode);
+        else
+            openInlineComponent(modelNode);
+    }
+}
+
+
 } // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/documentmanager.h b/src/plugins/qmldesigner/documentmanager.h
index 81d081c2f9bf28b8d1f2dea19185289e77f2fd25..5c45d055230486219481760a62713f1a2640439f 100644
--- a/src/plugins/qmldesigner/documentmanager.h
+++ b/src/plugins/qmldesigner/documentmanager.h
@@ -55,6 +55,8 @@ public:
 
     void removeEditors(QList<Core::IEditor*> editors);
 
+    static void goIntoComponent(const ModelNode &modelNode);
+
 private:
     QHash<Core::IEditor *,QWeakPointer<DesignDocument> > m_designDocumentHash;
     QWeakPointer<DesignDocument> m_currentDesignDocument;