diff --git a/src/plugins/qmldesigner/core/core.pri b/src/plugins/qmldesigner/core/core.pri
index 128696b67462b7318d74795720c91c370a28b592..03ab20e205d8197a901a5c90261b27bbddfc0eaf 100644
--- a/src/plugins/qmldesigner/core/core.pri
+++ b/src/plugins/qmldesigner/core/core.pri
@@ -93,7 +93,8 @@ SOURCES += $$PWD/model/abstractview.cpp \
     $$PWD/model/modelmerger.cpp \
     $$PWD/instances/qmltransitionnodeinstance.cpp \
     $$PWD/exceptions/rewritingexception.cpp \
-    $$PWD/instances/nodeinstancemetaobject.cpp
+    $$PWD/instances/nodeinstancemetaobject.cpp \
+    core/instances/behaviornodeinstance.cpp
 HEADERS += $$PWD/include/corelib_global.h \
     $$PWD/include/abstractview.h \
     $$PWD/include/nodeinstanceview.h \
@@ -183,7 +184,8 @@ HEADERS += $$PWD/include/corelib_global.h \
     $$PWD/instances/qmltransitionnodeinstance.h \
     $$PWD/include/customnotifications.h \
     $$PWD/include/rewritingexception.h \
-    $$PWD/instances/nodeinstancemetaobject.h
+    $$PWD/instances/nodeinstancemetaobject.h \
+    core/instances/behaviornodeinstance.h
 DISTFILES += $$PWD/metafile/widget.metafile
 RESOURCES += $$PWD/core.qrc
 OTHER_FILES += $$PWD/metainfo/gui.metainfo
diff --git a/src/plugins/qmldesigner/core/instances/behaviornodeinstance.cpp b/src/plugins/qmldesigner/core/instances/behaviornodeinstance.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..766402e56233458db58eee32a3b5ed37fa471c77
--- /dev/null
+++ b/src/plugins/qmldesigner/core/instances/behaviornodeinstance.cpp
@@ -0,0 +1,74 @@
+#include "behaviornodeinstance.h"
+
+#include <private/qmlbehavior_p.h>
+
+#include "invalidnodeinstanceexception.h"
+
+namespace QmlDesigner {
+namespace Internal {
+
+BehaviorNodeInstance::BehaviorNodeInstance(QObject *object)
+    : ObjectNodeInstance(object),
+    m_isEnabled(true)
+{
+}
+
+BehaviorNodeInstance::Pointer BehaviorNodeInstance::create(const NodeMetaInfo &nodeMetaInfo, QmlContext *context, QObject *objectToBeWrapped)
+{
+    QObject *object = 0;
+    if (objectToBeWrapped)
+        object = objectToBeWrapped;
+    else
+        object = createObject(nodeMetaInfo, context);
+
+    QmlBehavior* behavior = qobject_cast<QmlBehavior*>(object);
+    if (behavior == 0)
+        throw InvalidNodeInstanceException(__LINE__, __FUNCTION__, __FILE__);
+
+    Pointer instance(new BehaviorNodeInstance(behavior));
+
+    if (objectToBeWrapped)
+        instance->setDeleteHeldInstance(false); // the object isn't owned
+
+    instance->populateResetValueHash();
+
+    behavior->setEnabled(false);
+
+    return instance;
+}
+
+void BehaviorNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+{
+    if (name == "enabled")
+        return;
+
+    ObjectNodeInstance::setPropertyVariant(name, value);
+}
+
+void BehaviorNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+{
+    if (name == "enabled")
+        return;
+
+    ObjectNodeInstance::setPropertyBinding(name, expression);
+}
+
+QVariant BehaviorNodeInstance::property(const QString &name) const
+{
+    if (name == "enabled")
+        return QVariant::fromValue(m_isEnabled);
+
+    return ObjectNodeInstance::property(name);
+}
+
+void BehaviorNodeInstance::resetProperty(const QString &name)
+{
+    if (name == "enabled")
+        m_isEnabled = true;
+
+    ObjectNodeInstance::resetProperty(name);
+}
+
+
+} // namespace Internal
+} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/core/instances/behaviornodeinstance.h b/src/plugins/qmldesigner/core/instances/behaviornodeinstance.h
new file mode 100644
index 0000000000000000000000000000000000000000..2546a309e3d85146f5501a410955db60f51b374e
--- /dev/null
+++ b/src/plugins/qmldesigner/core/instances/behaviornodeinstance.h
@@ -0,0 +1,33 @@
+#ifndef BEHAVIORNODEINSTANCE_H
+#define BEHAVIORNODEINSTANCE_H
+
+#include "objectnodeinstance.h"
+
+namespace QmlDesigner {
+namespace Internal {
+
+class BehaviorNodeInstance : public ObjectNodeInstance
+{
+public:
+    typedef QSharedPointer<BehaviorNodeInstance> Pointer;
+    typedef QWeakPointer<BehaviorNodeInstance> WeakPointer;
+
+    BehaviorNodeInstance(QObject *object);
+
+    static Pointer create(const NodeMetaInfo &metaInfo, QmlContext *context, QObject *objectToBeWrapped);
+
+    void setPropertyVariant(const QString &name, const QVariant &value);
+    void setPropertyBinding(const QString &name, const QString &expression);
+
+
+    QVariant property(const QString &name) const;
+    void resetProperty(const QString &name);
+
+private:
+    bool m_isEnabled;
+};
+
+} // namespace Internal
+} // namespace QmlDesigner
+
+#endif // BEHAVIORNODEINSTANCE_H
diff --git a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
index d1ada236e1c2ce4c132a32a63505cfacb56d0637..b3ebbfe7e95c5cc03d40e68002f430f57f09a827 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
@@ -42,6 +42,7 @@
 #include "componentnodeinstance.h"
 #include "qmltransitionnodeinstance.h"
 #include "qmlpropertychangesnodeinstance.h"
+#include "behaviornodeinstance.h"
 #include "qmlstatenodeinstance.h"
 #include "nodeabstractproperty.h"
 #include "variantproperty.h"
@@ -151,6 +152,8 @@ Internal::ObjectNodeInstance::Pointer NodeInstance::createInstance(const NodeMet
         instance = Internal::QmlStateNodeInstance::create(metaInfo, context, objectToBeWrapped);
     else if (metaInfo.isSubclassOf("Qt/Transition", 4, 6))
         instance = Internal::QmlTransitionNodeInstance::create(metaInfo, context, objectToBeWrapped);
+    else if (metaInfo.isSubclassOf("Qt/Behavior", 4, 6))
+        instance = Internal::BehaviorNodeInstance::create(metaInfo, context, objectToBeWrapped);
     else if (metaInfo.isSubclassOf("Qt/QtObject", 4, 6))
         instance = Internal::ObjectNodeInstance::create(metaInfo, context, objectToBeWrapped);
 
diff --git a/src/plugins/qmldesigner/core/model/modelmerger.cpp b/src/plugins/qmldesigner/core/model/modelmerger.cpp
index 4e1efabbc52adf39a59ca01b3e9dae71e845cdb9..42c6ebd669566b048d3925e3c0ed52ee5fa8cf59 100644
--- a/src/plugins/qmldesigner/core/model/modelmerger.cpp
+++ b/src/plugins/qmldesigner/core/model/modelmerger.cpp
@@ -42,6 +42,8 @@
 #include <QSet>
 #include <QStringList>
 
+#include <QtDebug>
+
 namespace QmlDesigner {
 
 static ModelNode createNodeFromNode(const ModelNode &modelNode,const QHash<QString, QString> &idRenamingHash, AbstractView *view);
@@ -77,6 +79,20 @@ static void syncId(ModelNode &outputNode, const ModelNode &inputNode, const QHas
     }
 }
 
+static void splitIdInBaseNameAndNumber(const QString &id, QString *baseId, int *number)
+{
+    QRegExp regularExpression("(.*)(\\d*)");
+//    regularExpression.setMinimal(true);
+    regularExpression.setPatternSyntax(QRegExp::RegExp2);
+    regularExpression.indexIn(id);
+    QStringList splitedList = regularExpression.capturedTexts();
+
+    *baseId = regularExpression.cap(1);
+
+
+    qDebug() <<splitedList;
+}
+
 static void setupIdRenamingHash(const ModelNode &modelNode, QHash<QString, QString> &idRenamingHash, AbstractView *view)
 {
     QList<ModelNode> allNodes(modelNode.allSubModelNodes());
@@ -84,10 +100,14 @@ static void setupIdRenamingHash(const ModelNode &modelNode, QHash<QString, QStri
     foreach (const ModelNode &node, allNodes) {
         if (!node.id().isEmpty()) {
             QString newId = node.id();
-            int i = 1;
+            QString baseId;
+            int number = 1;
+            splitIdInBaseNameAndNumber(newId, &baseId, &number);
+
             while (view->hasId(newId) || idRenamingHash.contains(newId)) {
-                newId = node.id() + QString::number(i).toLower();
-                i++;
+
+                newId = baseId + QString::number(number).toLower();
+                number++;
             }
             idRenamingHash.insert(node.id(), newId);
         }