diff --git a/src/plugins/qnx/bardescriptoreditor.cpp b/src/plugins/qnx/bardescriptoreditor.cpp
index 548129ff3b3bd1f33c075e610c3cceb53a97fbf6..159e074a7f930b18672f1b8562fa759a53ac7821 100644
--- a/src/plugins/qnx/bardescriptoreditor.cpp
+++ b/src/plugins/qnx/bardescriptoreditor.cpp
@@ -39,6 +39,8 @@
 #include <projectexplorer/task.h>
 #include <projectexplorer/taskhub.h>
 #include <utils/qtcassert.h>
+#include <texteditor/texteditorconstants.h>
+#include <texteditor/basetexteditor.h>
 
 #include <QAction>
 #include <QToolBar>
@@ -80,6 +82,9 @@ BarDescriptorEditor::BarDescriptorEditor(BarDescriptorEditorWidget *editorWidget
     m_actionGroup->addAction(sourceAction);
 
     generalAction->setChecked(true);
+
+    setContext(Core::Context(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT,
+            TextEditor::Constants::C_TEXTEDITOR));
 }
 
 bool BarDescriptorEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
diff --git a/src/plugins/qnx/bardescriptoreditorfactory.cpp b/src/plugins/qnx/bardescriptoreditorfactory.cpp
index 27a97a3482fcec7b34dd8b7ca66d7f4088bd2879..5d9a6cdbef43f0071b67502337d5667cae8b59fb 100644
--- a/src/plugins/qnx/bardescriptoreditorfactory.cpp
+++ b/src/plugins/qnx/bardescriptoreditorfactory.cpp
@@ -36,20 +36,42 @@
 
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/ieditor.h>
+#include <texteditor/texteditoractionhandler.h>
 
 using namespace Qnx;
 using namespace Qnx::Internal;
 
+class BarDescriptorActionHandler : public TextEditor::TextEditorActionHandler
+{
+public:
+    BarDescriptorActionHandler()
+        : TextEditor::TextEditorActionHandler(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT)
+    {
+    }
+protected:
+    TextEditor::BaseTextEditorWidget *resolveTextEditorWidget(Core::IEditor *editor) const
+    {
+        BarDescriptorEditorWidget *w = qobject_cast<BarDescriptorEditorWidget *>(editor->widget());
+        return w ? w->sourceWidget() : 0;
+    }
+};
+
 BarDescriptorEditorFactory::BarDescriptorEditorFactory(QObject *parent)
     : Core::IEditorFactory(parent)
+    , m_actionHandler(new BarDescriptorActionHandler)
 {
     setId(Constants::QNX_BAR_DESCRIPTOR_EDITOR_ID);
     setDisplayName(tr("Bar descriptor editor"));
     addMimeType(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE);
 }
 
+BarDescriptorEditorFactory::~BarDescriptorEditorFactory()
+{
+    delete m_actionHandler;
+}
+
 Core::IEditor *BarDescriptorEditorFactory::createEditor(QWidget *parent)
 {
-    BarDescriptorEditorWidget *editorWidget = new BarDescriptorEditorWidget(parent);
+    BarDescriptorEditorWidget *editorWidget = new BarDescriptorEditorWidget(parent, m_actionHandler);
     return editorWidget->editor();
 }
diff --git a/src/plugins/qnx/bardescriptoreditorfactory.h b/src/plugins/qnx/bardescriptoreditorfactory.h
index fac30e792089a09f625e179a73712c103a39386c..ed5a012d6a31cd6503cf8fc502ec0884f098f1b5 100644
--- a/src/plugins/qnx/bardescriptoreditorfactory.h
+++ b/src/plugins/qnx/bardescriptoreditorfactory.h
@@ -34,6 +34,10 @@
 
 #include <coreplugin/editormanager/ieditorfactory.h>
 
+namespace TextEditor {
+class TextEditorActionHandler;
+}
+
 namespace Qnx {
 namespace Internal {
 
@@ -43,8 +47,12 @@ class BarDescriptorEditorFactory : public Core::IEditorFactory
 
 public:
     explicit BarDescriptorEditorFactory(QObject *parent = 0);
+    ~BarDescriptorEditorFactory();
 
     Core::IEditor *createEditor(QWidget *parent);
+
+private:
+    TextEditor::TextEditorActionHandler *m_actionHandler;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qnx/bardescriptoreditorwidget.cpp b/src/plugins/qnx/bardescriptoreditorwidget.cpp
index 604523437b887d80a2bfc9f941a3e1d36cbd9256..5d069112a85a50bff6cb9d001f930a2615e581b6 100644
--- a/src/plugins/qnx/bardescriptoreditorwidget.cpp
+++ b/src/plugins/qnx/bardescriptoreditorwidget.cpp
@@ -41,18 +41,29 @@
 #include "bardescriptoreditorpackageinformationwidget.h"
 #include "bardescriptoreditorpermissionswidget.h"
 
+#include <coreplugin/icore.h>
 #include <projectexplorer/iprojectproperties.h>
 #include <projectexplorer/projectwindow.h>
 #include <texteditor/plaintexteditor.h>
+#include <texteditor/texteditoractionhandler.h>
+#include <texteditor/texteditorsettings.h>
+#include <texteditor/texteditorconstants.h>
 
 using namespace Qnx;
 using namespace Qnx::Internal;
 
-BarDescriptorEditorWidget::BarDescriptorEditorWidget(QWidget *parent)
+BarDescriptorEditorWidget::BarDescriptorEditorWidget(
+        QWidget *parent, TextEditor::TextEditorActionHandler *handler)
     : QStackedWidget(parent)
     , m_editor(0)
+    , m_handler(handler)
     , m_dirty(false)
 {
+    Core::IContext *myContext = new Core::IContext(this);
+    myContext->setWidget(this);
+    myContext->setContext(Core::Context(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT, TextEditor::Constants::C_TEXTEDITOR));
+    Core::ICore::addContextObject(myContext);
+
     initGeneralPage();
     initApplicationPage();
     initAssetsPage();
@@ -149,6 +160,8 @@ void BarDescriptorEditorWidget::initSourcePage()
     m_xmlSourceWidget = new TextEditor::PlainTextEditorWidget(this);
     addWidget(m_xmlSourceWidget);
 
+    TextEditor::TextEditorSettings::initializeEditor(m_xmlSourceWidget);
+    m_handler->setupActions(m_xmlSourceWidget);
     m_xmlSourceWidget->configure(QLatin1String(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE));
     connect(m_xmlSourceWidget, SIGNAL(textChanged()), this, SLOT(setDirty()));
 }
@@ -204,6 +217,11 @@ BarDescriptorEditorAssetsWidget *BarDescriptorEditorWidget::assetsWidget() const
     return m_assetsWidget;
 }
 
+TextEditor::BaseTextEditorWidget *BarDescriptorEditorWidget::sourceWidget() const
+{
+    return m_xmlSourceWidget;
+}
+
 void BarDescriptorEditorWidget::setFilePath(const QString &filePath)
 {
     Core::IDocument *doc = m_xmlSourceWidget->editorDocument();
diff --git a/src/plugins/qnx/bardescriptoreditorwidget.h b/src/plugins/qnx/bardescriptoreditorwidget.h
index bb2480cabb9bd3dcc190f22f8e4dc01f1ca2cb34..8e5edc69e608ab55425587a2ac5946fbf33760f5 100644
--- a/src/plugins/qnx/bardescriptoreditorwidget.h
+++ b/src/plugins/qnx/bardescriptoreditorwidget.h
@@ -46,6 +46,8 @@ class PanelsWidget;
 
 namespace TextEditor {
 class PlainTextEditorWidget;
+class TextEditorActionHandler;
+class BaseTextEditorWidget;
 }
 
 namespace Qnx {
@@ -65,7 +67,7 @@ class BarDescriptorEditorWidget : public QStackedWidget
     Q_OBJECT
 
 public:
-    explicit BarDescriptorEditorWidget(QWidget *parent = 0);
+    explicit BarDescriptorEditorWidget(QWidget *parent, TextEditor::TextEditorActionHandler *handler);
 
     Core::IEditor *editor() const;
 
@@ -79,6 +81,8 @@ public:
 
     BarDescriptorEditorAssetsWidget *assetsWidget() const;
 
+    TextEditor::BaseTextEditorWidget *sourceWidget() const;
+
     void setFilePath(const QString &filePath);
     QString xmlSource() const;
     void setXmlSource(const QString &xmlSource);
@@ -103,6 +107,7 @@ private:
 
     mutable Core::IEditor *m_editor;
 
+    TextEditor::TextEditorActionHandler *m_handler;
     bool m_dirty;
 
     // New UI
diff --git a/src/plugins/qnx/qnxconstants.h b/src/plugins/qnx/qnxconstants.h
index 728403dc61f878d08e2a5c014584bb2190cc0abb..c0d5d1762d645c6a3c074f0ffbd22b6699a46e46 100644
--- a/src/plugins/qnx/qnxconstants.h
+++ b/src/plugins/qnx/qnxconstants.h
@@ -99,6 +99,7 @@ const char QNX_BB_SIGNING_ID[] = "ZZ.BlackBerry Signing Infrastructure Configura
 
 const char QNX_BAR_DESCRIPTOR_MIME_TYPE[] = "application/vnd.rim.qnx.bar_descriptor";
 const char QNX_BAR_DESCRIPTOR_EDITOR_ID[] = "Qnx.BarDescriptorEditor";
+const char QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT[] = "Qnx.BarDescriptorEditor";
 
 const char QNX_TASK_CATEGORY_BARDESCRIPTOR[] = "Task.Category.BarDescriptor";
 
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index 7c492a44b05a162c5020f96fbbc072286f1246cc..15cd1c82c4d907e2827ed0dab721eb5f7a1956ae 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -560,6 +560,11 @@ FUNCTION(gotoNextWordCamelCase)
 FUNCTION(gotoNextWordCamelCaseWithSelection)
 
 
+BaseTextEditorWidget *TextEditorActionHandler::resolveTextEditorWidget(Core::IEditor *editor) const
+{
+    return qobject_cast<BaseTextEditorWidget *>(editor->widget());
+}
+
 void TextEditorActionHandler::updateCurrentEditor(Core::IEditor *editor)
 {
     m_currentEditor = 0;
@@ -567,7 +572,7 @@ void TextEditorActionHandler::updateCurrentEditor(Core::IEditor *editor)
     if (!editor)
         return;
 
-    BaseTextEditorWidget *baseEditor = qobject_cast<BaseTextEditorWidget *>(editor->widget());
+    BaseTextEditorWidget *baseEditor = resolveTextEditorWidget(editor);
 
     if (baseEditor && baseEditor->actionHack() == this) {
         m_currentEditor = baseEditor;
diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h
index 2e768b4b4e4ff907f2f333f290bc225dcce6d666..a09e6a3a84ec3f811080645e0170b323dde5ef47 100644
--- a/src/plugins/texteditor/texteditoractionhandler.h
+++ b/src/plugins/texteditor/texteditoractionhandler.h
@@ -79,6 +79,7 @@ public slots:
     void updateCopyAction();
 
 protected:
+    virtual BaseTextEditorWidget *resolveTextEditorWidget(Core::IEditor *editor) const;
     const QPointer<BaseTextEditorWidget> &currentEditor() const;
 
     QAction *registerAction(const Core::Id &id,