diff --git a/src/plugins/texteditor/generichighlighter/highlightdefinition.cpp b/src/plugins/texteditor/generichighlighter/highlightdefinition.cpp
index 7c723229d95ad6343d209cbf249a5340bb3e8a7d..4d6d92c8974c1b1acce0f8d00d247b88c039b235 100644
--- a/src/plugins/texteditor/generichighlighter/highlightdefinition.cpp
+++ b/src/plugins/texteditor/generichighlighter/highlightdefinition.cpp
@@ -49,7 +49,7 @@ HighlightDefinition::~HighlightDefinition()
 {}
 
 template <class Element, class Container>
-const QSharedPointer<Element> &HighlightDefinition::
+QSharedPointer<Element> HighlightDefinition::
 GenericHelper::create(const QString &name, Container &container)
 {
     if (name.isEmpty())
@@ -58,12 +58,11 @@ GenericHelper::create(const QString &name, Container &container)
     if (container.contains(name))
         throw HighlighterException();
 
-    container.insert(name, QSharedPointer<Element>(new Element));
-    return *container.constFind(name);
+    return container.insert(name, QSharedPointer<Element>(new Element)).value();
 }
 
 template <class Element, class Container>
-const QSharedPointer<Element> &HighlightDefinition::
+QSharedPointer<Element> HighlightDefinition::
 GenericHelper::find(const QString &name, const Container &container) const
 {
     typename Container::const_iterator it = container.find(name);
@@ -73,34 +72,35 @@ GenericHelper::find(const QString &name, const Container &container) const
     return it.value();
 }
 
-const QSharedPointer<KeywordList> &HighlightDefinition::createKeywordList(const QString &list)
+QSharedPointer<KeywordList> HighlightDefinition::createKeywordList(const QString &list)
 { return m_helper.create<KeywordList>(list, m_lists); }
 
-const QSharedPointer<KeywordList> &HighlightDefinition::keywordList(const QString &list)
+QSharedPointer<KeywordList> HighlightDefinition::keywordList(const QString &list)
 { return m_helper.find<KeywordList>(list, m_lists); }
 
-const QSharedPointer<Context> &HighlightDefinition::createContext(const QString &context,
-                                                                  bool initial)
+QSharedPointer<Context> HighlightDefinition::createContext(const QString &context, bool initial)
 {
     if (initial)
         m_initialContext = context;
 
-    return m_helper.create<Context>(context, m_contexts);
+    QSharedPointer<Context> newContext = m_helper.create<Context>(context, m_contexts);
+    newContext->setName(context);
+    return newContext;
 }
 
-const QSharedPointer<Context> &HighlightDefinition::initialContext() const
+QSharedPointer<Context> HighlightDefinition::initialContext() const
 { return m_helper.find<Context>(m_initialContext, m_contexts); }
 
-const QSharedPointer<Context> &HighlightDefinition::context(const QString &context) const
+QSharedPointer<Context> HighlightDefinition::context(const QString &context) const
 { return m_helper.find<Context>(context, m_contexts); }
 
 const QHash<QString, QSharedPointer<Context> > &HighlightDefinition::contexts() const
 { return m_contexts; }
 
-const QSharedPointer<ItemData> &HighlightDefinition::createItemData(const QString &itemData)
+QSharedPointer<ItemData> HighlightDefinition::createItemData(const QString &itemData)
 { return m_helper.create<ItemData>(itemData, m_itemsData); }
 
-const QSharedPointer<ItemData> &HighlightDefinition::itemData(const QString &itemData) const
+QSharedPointer<ItemData> HighlightDefinition::itemData(const QString &itemData) const
 { return m_helper.find<ItemData>(itemData, m_itemsData); }
 
 void HighlightDefinition::setSingleLineComment(const QString &start)
diff --git a/src/plugins/texteditor/generichighlighter/highlightdefinition.h b/src/plugins/texteditor/generichighlighter/highlightdefinition.h
index 2f48bc24c8f7f251683f068e14f402be7d2fb252..dd94838d8704af8b9cbe63e3c907bd13102a33ba 100644
--- a/src/plugins/texteditor/generichighlighter/highlightdefinition.h
+++ b/src/plugins/texteditor/generichighlighter/highlightdefinition.h
@@ -47,16 +47,16 @@ public:
     HighlightDefinition();
     ~HighlightDefinition();
 
-    const QSharedPointer<KeywordList> &createKeywordList(const QString &list);
-    const QSharedPointer<KeywordList> &keywordList(const QString &list);
+    QSharedPointer<KeywordList> createKeywordList(const QString &list);
+    QSharedPointer<KeywordList> keywordList(const QString &list);
 
-    const QSharedPointer<Context> &createContext(const QString &context, bool initial);
-    const QSharedPointer<Context> &initialContext() const;
-    const QSharedPointer<Context> &context(const QString &context) const;
+    QSharedPointer<Context> createContext(const QString &context, bool initial);
+    QSharedPointer<Context> initialContext() const;
+    QSharedPointer<Context> context(const QString &context) const;
     const QHash<QString, QSharedPointer<Context> > &contexts() const;
 
-    const QSharedPointer<ItemData> &createItemData(const QString &itemData);
-    const QSharedPointer<ItemData> &itemData(const QString &itemData) const;
+    QSharedPointer<ItemData> createItemData(const QString &itemData);
+    QSharedPointer<ItemData> itemData(const QString &itemData) const;
 
     void setKeywordsSensitive(const QString &sensitivity);
     Qt::CaseSensitivity keywordsSensitive() const;
@@ -86,10 +86,10 @@ private:
     struct GenericHelper
     {
         template <class Element, class Container>
-        const QSharedPointer<Element> &create(const QString &name, Container &container);
+        QSharedPointer<Element> create(const QString &name, Container &container);
 
         template <class Element, class Container>
-        const QSharedPointer<Element> &find(const QString &name, const Container &container) const;
+        QSharedPointer<Element> find(const QString &name, const Container &container) const;
     };
     GenericHelper m_helper;
 
diff --git a/src/plugins/texteditor/generichighlighter/highlightdefinitionhandler.cpp b/src/plugins/texteditor/generichighlighter/highlightdefinitionhandler.cpp
index f18d3de8f2fdc3ce9e04c9938f52c74f599a4817..c6a023aaf8afc9d5e9774ae0f4ef0d49436275a7 100644
--- a/src/plugins/texteditor/generichighlighter/highlightdefinitionhandler.cpp
+++ b/src/plugins/texteditor/generichighlighter/highlightdefinitionhandler.cpp
@@ -224,7 +224,6 @@ void HighlightDefinitionHandler::contextElementStarted(const QXmlAttributes &att
 {
     m_currentContext = m_definition->createContext(atts.value(kName), m_initialContext);
     m_currentContext->setDefinition(m_definition);
-    m_currentContext->setName(atts.value(kName));
     m_currentContext->setItemData(atts.value(kAttribute));
     m_currentContext->setDynamic(atts.value(kDynamic));
     m_currentContext->setFallthrough(atts.value(kFallthrough));
diff --git a/src/plugins/texteditor/plaintexteditor.cpp b/src/plugins/texteditor/plaintexteditor.cpp
index 04034307070719d7e39813e5cd3ffbcde5952e7e..580d4a3ff2c1dbfa8dfa5ad079ab4769545c245d 100644
--- a/src/plugins/texteditor/plaintexteditor.cpp
+++ b/src/plugins/texteditor/plaintexteditor.cpp
@@ -37,6 +37,7 @@
 #include "highlighter.h"
 #include "highlighterexception.h"
 #include "manager.h"
+#include "context.h"
 #include "normalindenter.h"
 #include "fontsettings.h"