diff --git a/src/libs/qmljs/qmljsicontextpane.h b/src/libs/qmljs/qmljsicontextpane.h
index 759af9a2f52f2bb086fbb36ee96f00fa9213f268..5cb4b5a9f13b48648010c264d2495cb9f4868249 100644
--- a/src/libs/qmljs/qmljsicontextpane.h
+++ b/src/libs/qmljs/qmljsicontextpane.h
@@ -52,9 +52,9 @@ class QMLJS_EXPORT IContextPane : public QObject
 public:
     IContextPane(QObject *parent = 0) : QObject(parent) {}
     virtual ~IContextPane() {}
-    virtual void apply(TextEditor::BaseTextEditorEditable *editor, LookupContext::Ptr lookupContext, AST::Node *node, bool update, bool force = false) = 0;
+    virtual void apply(TextEditor::BaseTextEditorEditable *editor, Document::Ptr document, LookupContext::Ptr lookupContext, AST::Node *node, bool update, bool force = false) = 0;
     virtual void setEnabled(bool) = 0;
-    virtual bool isAvailable(TextEditor::BaseTextEditorEditable *editor, LookupContext::Ptr lookupContext, AST::Node *node) = 0;
+    virtual bool isAvailable(TextEditor::BaseTextEditorEditable *editor, Document::Ptr document, AST::Node *node) = 0;
     virtual QWidget* widget() = 0;
 signals:
     void closed();
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index d6684315d4f8883b96af0cffb1a47de6a67aaa08..52cd9de1c200ef2d23a2de564a6858bcfbcc691c 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -985,8 +985,8 @@ void QmlJSTextEditor::updateCursorPositionNow()
         Node *oldNode = m_semanticInfo.declaringMemberNoProperties(m_oldCursorPosition);
         Node *newNode = m_semanticInfo.declaringMemberNoProperties(position());
         if (oldNode != newNode && m_oldCursorPosition != -1)
-            m_contextPane->apply(editableInterface(), m_semanticInfo.lookupContext(), newNode, false);
-        if (m_contextPane->isAvailable(editableInterface(), m_semanticInfo.lookupContext(), newNode) &&
+            m_contextPane->apply(editableInterface(), semanticInfo().document, LookupContext::Ptr(),newNode, false);
+        if (m_contextPane->isAvailable(editableInterface(), semanticInfo().document, newNode) &&
             !m_contextPane->widget()->isVisible()) {
             QList<TextEditor::Internal::RefactorMarker> markers;
             if (UiObjectMember *m = newNode->uiObjectMemberCast()) {
@@ -1456,7 +1456,7 @@ void QmlJSTextEditor::showContextPane()
 {
     if (m_contextPane && m_semanticInfo.isValid()) {
         Node *newNode = m_semanticInfo.declaringMemberNoProperties(position());
-        m_contextPane->apply(editableInterface(), m_semanticInfo.lookupContext(), newNode, false, true);
+        m_contextPane->apply(editableInterface(), m_semanticInfo.document, m_semanticInfo.lookupContext(), newNode, false, true);
         m_oldCursorPosition = position();
         QList<TextEditor::Internal::RefactorMarker> markers;
         setRefactorMarkers(markers);
@@ -1551,7 +1551,7 @@ void QmlJSTextEditor::wheelEvent(QWheelEvent *event)
         LookupContext::Ptr lookupContext;
         if (m_semanticInfo.isValid())
             lookupContext = m_semanticInfo.lookupContext();
-        m_contextPane->apply(editableInterface(),  lookupContext, m_semanticInfo.declaringMemberNoProperties(m_oldCursorPosition), false, true);
+        m_contextPane->apply(editableInterface(), semanticInfo().document, QmlJS::LookupContext::Ptr(), m_semanticInfo.declaringMemberNoProperties(m_oldCursorPosition), false, true);
     }
 }
 
@@ -1801,7 +1801,7 @@ void QmlJSTextEditor::updateSemanticInfo(const SemanticInfo &semanticInfo)
     if (m_contextPane) {
         Node *newNode = m_semanticInfo.declaringMemberNoProperties(position());
         if (newNode) {
-            m_contextPane->apply(editableInterface(), m_semanticInfo.lookupContext(), newNode, true);
+            m_contextPane->apply(editableInterface(), semanticInfo.document, LookupContext::Ptr(), newNode, true);
             m_cursorPositionTimer->start(); //update text marker
         }
     }
@@ -1854,10 +1854,7 @@ bool QmlJSTextEditor::hideContextPane()
 {
     bool b = (m_contextPane) && m_contextPane->widget()->isVisible();
     if (b) {
-        LookupContext::Ptr lookupContext;
-        if (m_semanticInfo.isValid())
-            lookupContext = m_semanticInfo.lookupContext();
-        m_contextPane->apply(editableInterface(), lookupContext, 0, false);
+        m_contextPane->apply(editableInterface(), semanticInfo().document, LookupContext::Ptr(), 0, false);
     }
     return b;
 }
diff --git a/src/plugins/qmljseditor/quicktoolbar.cpp b/src/plugins/qmljseditor/quicktoolbar.cpp
index ec072767c68a381eaff6a219135e08d8201165e7..e27855ff0a775d444ef5765712cc09e762113e7a 100644
--- a/src/plugins/qmljseditor/quicktoolbar.cpp
+++ b/src/plugins/qmljseditor/quicktoolbar.cpp
@@ -98,17 +98,14 @@ QuickToolBar::~QuickToolBar()
         m_widget.clear();
 }
 
-void QuickToolBar::apply(TextEditor::BaseTextEditorEditable *editor, LookupContext::Ptr lookupContext, AST::Node *node, bool update, bool force)
+void QuickToolBar::apply(TextEditor::BaseTextEditorEditable *editor, Document::Ptr document, LookupContext::Ptr lookupContext, AST::Node *node, bool update, bool force)
 {
     if (!QuickToolBarSettings::get().enableContextPane && !force && !update) {
         contextWidget()->hide();
         return;
     }
 
-    if (lookupContext.isNull())
-        return;
-    Document::Ptr doc = lookupContext->document();
-    if (doc.isNull())
+    if (document.isNull())
         return;
 
     if (update && editor != m_editor)
@@ -116,24 +113,26 @@ void QuickToolBar::apply(TextEditor::BaseTextEditorEditable *editor, LookupConte
 
     m_blockWriting = true;
 
-    const Interpreter::ObjectValue *scopeObject = doc->bind()->findQmlObject(node);
+    const Interpreter::ObjectValue *scopeObject = document->bind()->findQmlObject(node);
 
-    QStringList prototypes;
-    while (scopeObject) {
-        prototypes.append(scopeObject->className());
-        scopeObject =  scopeObject->prototype(lookupContext->context());
-    }
+    if (!lookupContext.isNull()) {
+        m_prototypes.clear();
+        while (scopeObject) {
+            m_prototypes.append(scopeObject->className());
+            scopeObject =  scopeObject->prototype(lookupContext->context());
+        }
 
-    if (prototypes.contains("PropertyChanges")) {
-        const Interpreter::ObjectValue *targetObject = getPropertyChangesTarget(node, lookupContext);
-        prototypes.clear();
-        while (targetObject) {
-            prototypes.append(targetObject->className());
-            targetObject =  targetObject->prototype(lookupContext->context());
+        if (m_prototypes.contains("PropertyChanges")) {
+            const Interpreter::ObjectValue *targetObject = getPropertyChangesTarget(node, lookupContext);
+            m_prototypes.clear();
+            while (targetObject) {
+                m_prototypes.append(targetObject->className());
+                targetObject =  targetObject->prototype(lookupContext->context());
+            }
         }
     }
 
-    setEnabled(doc->isParsedCorrectly());
+    setEnabled(document->isParsedCorrectly());
     m_editor = editor;
     contextWidget()->setParent(editor->widget()->parentWidget());
     contextWidget()->colorDialog()->setParent(editor->widget()->parentWidget());
@@ -158,6 +157,8 @@ void QuickToolBar::apply(TextEditor::BaseTextEditorEditable *editor, LookupConte
             end = objectBinding->lastSourceLocation().end();
         }
 
+        m_prototypes.append(name);
+
         int line1;
         int column1;
         int line2;
@@ -175,9 +176,9 @@ void QuickToolBar::apply(TextEditor::BaseTextEditorEditable *editor, LookupConte
         rect.moveTo(reg.boundingRect().topLeft());
         reg = reg.intersect(rect);
 
-        if (contextWidget()->acceptsType(prototypes)) {
+        if (contextWidget()->acceptsType(m_prototypes)) {
             m_node = 0;
-            PropertyReader propertyReader(doc, initializer);
+            PropertyReader propertyReader(document, initializer);
             QTextCursor tc(editor->editor()->document());
             tc.setPosition(offset); 
             QPoint p1 = editor->editor()->mapToParent(editor->editor()->viewport()->mapToParent(editor->editor()->cursorRect(tc).topLeft()) - QPoint(0, contextWidget()->height() + 10));
@@ -188,15 +189,15 @@ void QuickToolBar::apply(TextEditor::BaseTextEditorEditable *editor, LookupConte
                 offset = QPoint(400 - reg.boundingRect().width() + 10 ,0);
             QPoint p3 = editor->editor()->mapToParent(editor->editor()->viewport()->mapToParent(reg.boundingRect().topRight()) + offset);
             p2.setX(p1.x());
-            contextWidget()->setType(prototypes);
+            contextWidget()->setType(m_prototypes);
             if (!update)
                 contextWidget()->activate(p3 , p1, p2, QuickToolBarSettings::get().pinContextPane);
             else
                 contextWidget()->rePosition(p3 , p1, p2, QuickToolBarSettings::get().pinContextPane);
             contextWidget()->setOptions(QuickToolBarSettings::get().enableContextPane, QuickToolBarSettings::get().pinContextPane);
-            contextWidget()->setPath(doc->path());
+            contextWidget()->setPath(document->path());
             contextWidget()->setProperties(&propertyReader); 
-            m_doc = doc;
+            m_doc = document;
             m_node = node;
         } else {
             contextWidget()->setParent(0);
@@ -213,34 +214,27 @@ void QuickToolBar::apply(TextEditor::BaseTextEditorEditable *editor, LookupConte
 
 }
 
-bool QuickToolBar::isAvailable(TextEditor::BaseTextEditorEditable *, LookupContext::Ptr lookupContext, AST::Node *node)
+bool QuickToolBar::isAvailable(TextEditor::BaseTextEditorEditable *editor, Document::Ptr document, AST::Node *node)
 {
-    if (lookupContext.isNull())
-        return false;
-    Document::Ptr doc = lookupContext->document();
-    if (doc.isNull())
+    if (document.isNull())
         return false;
 
     if (!node)
         return false;
 
-    const Interpreter::ObjectValue *scopeObject = doc->bind()->findQmlObject(node);
+    QString name;
 
-    QStringList prototypes;
+    UiObjectDefinition *objectDefinition = cast<UiObjectDefinition*>(node);
+    UiObjectBinding *objectBinding = cast<UiObjectBinding*>(node);
+    if (objectDefinition) {
+        name = objectDefinition->qualifiedTypeNameId->name->asString();
 
-    while (scopeObject) {
-        prototypes.append(scopeObject->className());
-        scopeObject =  scopeObject->prototype(lookupContext->context());
+    } else if (objectBinding) {
+        name = objectBinding->qualifiedTypeNameId->name->asString();
     }
 
-    if (prototypes.contains("PropertyChanges")) {
-        const Interpreter::ObjectValue *targetObject = getPropertyChangesTarget(node, lookupContext);
-        prototypes.clear();
-        while (targetObject) {
-            prototypes.append(targetObject->className());
-            targetObject =  targetObject->prototype(lookupContext->context());
-        }
-    }
+    QStringList prototypes;
+    prototypes.append(name);
 
     if (prototypes.contains("Rectangle") ||
             prototypes.contains("Image") ||
@@ -248,7 +242,9 @@ bool QuickToolBar::isAvailable(TextEditor::BaseTextEditorEditable *, LookupConte
             prototypes.contains("TextEdit") ||
             prototypes.contains("TextInput") ||
             prototypes.contains("PropertyAnimation") ||
-            prototypes.contains("Text"))
+            prototypes.contains("NumberAnimation") ||
+            prototypes.contains("Text") ||
+            prototypes.contains("PropertyChanges"))
         return true;
 
     return false;
diff --git a/src/plugins/qmljseditor/quicktoolbar.h b/src/plugins/qmljseditor/quicktoolbar.h
index 79c57165546db09e5655b309ab4f0c27957242f5..dd0023135b19cdbee58a9395c89e6b59a848b470 100644
--- a/src/plugins/qmljseditor/quicktoolbar.h
+++ b/src/plugins/qmljseditor/quicktoolbar.h
@@ -30,8 +30,8 @@ class QuickToolBar : public QmlJS::IContextPane
 public:
    QuickToolBar(QObject *parent = 0);
    ~QuickToolBar();
-   void apply(TextEditor::BaseTextEditorEditable *editor, QmlJS::LookupContext::Ptr lookupContext, QmlJS::AST::Node *node, bool update, bool force = 0);
-   bool isAvailable(TextEditor::BaseTextEditorEditable *editor, QmlJS::LookupContext::Ptr lookupContext, QmlJS::AST::Node *node);
+   void apply(TextEditor::BaseTextEditorEditable *editor, QmlJS::Document::Ptr document, QmlJS::LookupContext::Ptr lookupContext, QmlJS::AST::Node *node, bool update, bool force = false);
+   bool isAvailable(TextEditor::BaseTextEditorEditable *editor, QmlJS::Document::Ptr document, QmlJS::AST::Node *node);
    void setProperty(const QString &propertyName, const QVariant &value);
    void removeProperty(const QString &propertyName);
    void setEnabled(bool);
@@ -52,6 +52,7 @@ private:
     TextEditor::BaseTextEditorEditable *m_editor;
     bool m_blockWriting;
     QStringList m_propertyOrder;
+    QStringList m_prototypes;
 };
 
 } //QmlDesigner