diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index db051d203a46d1273a192f633c3b8e82dbfc0632..b5316e355229429d6f63dff8868d20523be1d5df 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -90,6 +90,7 @@ FormEditorView::~FormEditorView()
     delete m_dragTool;
     m_dragTool = 0;
 
+    qDeleteAll(m_toolList);
 
     // delete scene after tools to prevent double deletion
     // of items
@@ -406,6 +407,11 @@ void FormEditorView::changeToTransformTools()
     changeToSelectionTool();
 }
 
+void FormEditorView::registerTool(AbstractFormEditorTool *tool)
+{
+    m_toolList.append(tool);
+}
+
 void FormEditorView::nodeSlidedToIndex(const NodeListProperty &listProperty, int /*newIndex*/, int /*oldIndex*/)
 {
     QList<ModelNode> newOrderModelNodeList = listProperty.toModelNodeList();
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index 09b7f6c789878ac59945f1c65729af84b1f035e7..63853dcef51679d6c8e219882c075c6c7c2494a1 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -98,6 +98,8 @@ public:
     void changeToResizeTool();
     void changeToTransformTools();
 
+    void registerTool(AbstractFormEditorTool *tool);
+
     void nodeSlidedToIndex(const NodeListProperty &listProperty, int newIndex, int oldIndex);
     void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data);
 
@@ -136,6 +138,7 @@ private: //functions
 private: //variables
     QWeakPointer<FormEditorWidget> m_formEditorWidget;
     QWeakPointer<FormEditorScene> m_scene;
+    QList<AbstractFormEditorTool*> m_toolList;
     MoveTool *m_moveTool;
     SelectionTool *m_selectionTool;
     ResizeTool *m_resizeTool;
diff --git a/src/plugins/qmldesigner/designercore/include/viewmanager.h b/src/plugins/qmldesigner/designercore/include/viewmanager.h
index b38b964ea4b6ba004577c2626d56a9283810b9d0..405e9a23861053bd16f54b0287b2ca447d697846 100644
--- a/src/plugins/qmldesigner/designercore/include/viewmanager.h
+++ b/src/plugins/qmldesigner/designercore/include/viewmanager.h
@@ -69,6 +69,7 @@ public:
     void setNodeInstanceViewQtPath(const QString & qtPath);
 
     void resetPropertyEditorView();
+    void resisterFormEditorTool(AbstractFormEditorTool *tool); // takes ownership
 
     QWidget *formEditorWidget();
     QWidget *propertyEditorWidget();
diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
index c65292dbf6f3d31c8b29ed59c5a5f9146c1518bc..d309ea79dea93bdea66cdeda939f528acea66dfc 100644
--- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
@@ -82,6 +82,11 @@ void ViewManager::resetPropertyEditorView()
     m_propertyEditorView.resetView();
 }
 
+void ViewManager::resisterFormEditorTool(AbstractFormEditorTool *tool)
+{
+    m_formEditorView.registerTool(tool);
+}
+
 void ViewManager::detachViewsExceptRewriterAndComponetView()
 {
     switchStateEditorViewToBaseState();