diff --git a/languages/cpp/codegen/codeassistant.cpp b/languages/cpp/codegen/codeassistant.cpp
index be227a8..c9a3673 100644
--- a/languages/cpp/codegen/codeassistant.cpp
+++ b/languages/cpp/codegen/codeassistant.cpp
@@ -129,8 +129,7 @@ void StaticCodeAssistant::deleteRenameAssistantsForDocument(KTextEditor::Documen
   }
 }
 
-void StaticCodeAssistant::startAssistant(KSharedPtr< KDevelop::IAssistant > assistant, bool manage) {
-  Q_UNUSED(manage);
+void StaticCodeAssistant::startAssistant(KSharedPtr< KDevelop::IAssistant > assistant) {
   if(m_activeAssistant)
     m_activeAssistant->doHide();
   
@@ -139,7 +138,7 @@ void StaticCodeAssistant::startAssistant(KSharedPtr< KDevelop::IAssistant > assi
   
   m_activeAssistant = assistant;
   if(m_activeAssistant) {
-    connect(m_activeAssistant.data(), SIGNAL(hide()), SLOT(assistantHide()));
+    connect(m_activeAssistant.data(), SIGNAL(hide()), SLOT(assistantHide()), Qt::DirectConnection);
     ICore::self()->uiController()->popUpAssistant(IAssistant::Ptr(m_activeAssistant.data()));
     
     m_assistantStartedAt =  m_currentView->cursorPosition();
diff --git a/languages/cpp/codegen/codeassistant.h b/languages/cpp/codegen/codeassistant.h
index cd72b2f..a5cbeb8 100644
--- a/languages/cpp/codegen/codeassistant.h
+++ b/languages/cpp/codegen/codeassistant.h
@@ -61,9 +61,7 @@ class StaticCodeAssistant : public QObject {
     void deleteRenameAssistantsForDocument(KTextEditor::Document*);
   private:
     void checkAssistantForProblems(KDevelop::TopDUContext* top);
-    ///@param manage If this is true, the static code-assistant manages the hiding of the assistant
-    ///                           (It is hidden as soon as the line is left)
-    void startAssistant(KSharedPtr< KDevelop::IAssistant > assistant, bool manage = true);
+    void startAssistant(KSharedPtr< KDevelop::IAssistant > assistant);
     QPointer<KTextEditor::View> m_currentView;
     KTextEditor::Cursor m_assistantStartedAt;
     KDevelop::IndexedString m_currentDocument;
diff --git a/languages/cpp/codegen/renameassistant.cpp b/languages/cpp/codegen/renameassistant.cpp
index 58884be..04e8571 100644
--- a/languages/cpp/codegen/renameassistant.cpp
+++ b/languages/cpp/codegen/renameassistant.cpp
@@ -79,9 +79,9 @@ private:
 };
 
 RenameAssistant::RenameAssistant(KTextEditor::View *view) :
-ITextAssistant(view),
 m_documentUrl(IndexedString(view->document()->url())),
-m_isUseful(false)
+m_isUseful(false),
+m_view(view)
 {}
 
 void RenameAssistant::reset() {
@@ -128,12 +128,12 @@ Declaration* RenameAssistant::getValidDeclarationForChangedRange(KTextEditor::Ra
 void RenameAssistant::textChanged(KTextEditor::Range invocationRange, QString removedText) {
   clearActions();
 
-  if (!view())
+  if (!m_view)
     return;
 
   //If the inserted text isn't valid for a variable name, consider the editing ended
   QRegExp validDeclName("^[0-9a-zA-Z_]*$");
-  if (removedText.isEmpty() && !validDeclName.exactMatch(view()->document()->text(invocationRange))) {
+  if (removedText.isEmpty() && !validDeclName.exactMatch(m_view->document()->text(invocationRange))) {
     reset();
     return;
   }
@@ -166,7 +166,7 @@ void RenameAssistant::textChanged(KTextEditor::Range invocationRange, QString re
     m_newDeclarationRange.attach( new PersistentMovingRange(
         m_newDeclarationRange->range().textRange().encompass(invocationRange), m_documentUrl, true) );
 
-  m_newDeclarationName = view()->document()->text(m_newDeclarationRange->range().textRange());
+  m_newDeclarationName = m_view->document()->text(m_newDeclarationRange->range().textRange());
 
   if (m_newDeclarationName == m_oldDeclarationName.toString())
     return;
diff --git a/languages/cpp/codegen/renameassistant.h b/languages/cpp/codegen/renameassistant.h
index b8326a2..ac5b37c 100644
--- a/languages/cpp/codegen/renameassistant.h
+++ b/languages/cpp/codegen/renameassistant.h
@@ -23,6 +23,7 @@
 #include <language/duchain/identifier.h>
 #include <language/duchain/indexedstring.h>
 #include <language/duchain/declaration.h>
+#include <ktexteditor/view.h>
 
 
 namespace KDevelop {
@@ -30,7 +31,7 @@ class ParseJob;
 }
 namespace Cpp {
 
-class RenameAssistant : public KDevelop::ITextAssistant {
+class RenameAssistant : public KDevelop::IAssistant {
 Q_OBJECT
 public:
   RenameAssistant(KTextEditor::View *view);
@@ -47,6 +48,7 @@ private:
   QMap <KDevelop::IndexedString, QList <KDevelop::RangeInRevision > > m_oldDeclarationUses;
   KDevelop::IndexedString m_documentUrl;
   bool m_isUseful;
+  KTextEditor::View *m_view;
 };
 
 }
diff --git a/languages/cpp/codegen/signatureassistant.cpp b/languages/cpp/codegen/signatureassistant.cpp
index 605f694..abffc70 100644
--- a/languages/cpp/codegen/signatureassistant.cpp
+++ b/languages/cpp/codegen/signatureassistant.cpp
@@ -47,7 +47,8 @@ bool AdaptDefinitionSignatureAssistant::isUseful() {
   return !m_declarationName.isEmpty() && m_definitionId.isValid();
 }
 
-AdaptDefinitionSignatureAssistant::AdaptDefinitionSignatureAssistant(KTextEditor::View* view, KTextEditor::Range inserted) : ITextAssistant(view) {
+AdaptDefinitionSignatureAssistant::AdaptDefinitionSignatureAssistant(KTextEditor::View* view, KTextEditor::Range inserted)
+:m_view(view) {
   connect(KDevelop::ICore::self()->languageController()->backgroundParser(), SIGNAL(parseJobFinished(KDevelop::ParseJob*)), SLOT(parseJobFinished(KDevelop::ParseJob*)));
   m_document = KDevelop::IndexedString(view->document()->url());
   
@@ -186,25 +187,30 @@ QString makeSignatureString(Signature signature, DUContext* visibilityFrom) {
 
 class AdaptSignatureAction : public KDevelop::IAssistantAction {
   public:
-    AdaptSignatureAction(KDevelop::DeclarationId definitionId, KDevelop::ReferencedTopDUContext definitionContext, Signature oldSignature, Signature newSignature) : 
+    AdaptSignatureAction(KDevelop::DeclarationId definitionId, KDevelop::ReferencedTopDUContext definitionContext, Signature oldSignature, Signature newSignature, bool editingDefinition) :
     m_otherSideId(definitionId), 
     m_otherSideContext(definitionContext), 
     m_oldSignature(oldSignature),
-    m_newSignature(newSignature) {
+    m_newSignature(newSignature),
+    m_editingDefinition(editingDefinition) {
     }
     
     virtual QString description() const {
+      return i18n("Update %1 signature", m_editingDefinition ? i18n("declaration") : i18n("definition"));
+    }
+
+    virtual QString toolTip() const {
       KDevelop::DUChainReadLocker lock(KDevelop::DUChain::lock());
-      return i18n("Update Definition from %1(%2)%3 to (%4)%5",
+      return i18n("Update %1\nfrom: %2(%3)%4\nto: %2(%5)%6",
+                  m_editingDefinition ? i18n("declaration") : i18n("definition"),
                   m_otherSideId.qualifiedIdentifier().toString(),
                   makeSignatureString(m_oldSignature, m_otherSideContext.data()),
                   m_oldSignature.isConst ? " const" : "",
                   makeSignatureString(m_newSignature, m_otherSideContext.data()),
                   m_newSignature.isConst ? " const" : "");
     }
-    
+
     virtual void execute() {
-      
       KDevelop::DUChainReadLocker lock(KDevelop::DUChain::lock());
       IndexedString url = m_otherSideContext->url();
       lock.unlock();
@@ -282,6 +288,7 @@ class AdaptSignatureAction : public KDevelop::IAssistantAction {
     KDevelop::ReferencedTopDUContext m_otherSideContext;
     Signature m_oldSignature;
     Signature m_newSignature;
+    bool m_editingDefinition;
 };
 
 /* -- only needed for return type updating, which isn't supported yet
@@ -297,13 +304,11 @@ void AdaptDefinitionSignatureAssistant::parseJobFinished(KDevelop::ParseJob* job
   if(job->document() == m_document) {
     kDebug() << "parse job finshed for current document";
     clearActions();
-    KTextEditor::View* v = view();
-    if(!v) {
+    if(!m_view) {
       kDebug() << "breaking";
       return;
     }
-    
-    SimpleCursor currentPos(v->cursorPosition());
+    SimpleCursor currentPos(m_view->cursorPosition());
     KDevelop::DUChainReadLocker lock(KDevelop::DUChain::lock());
     KDevelop::ReferencedTopDUContext top(DUChainUtils::standardContextForUrl(m_document.toUrl()));
     if(!top)
@@ -382,7 +387,7 @@ void AdaptDefinitionSignatureAssistant::parseJobFinished(KDevelop::ParseJob* job
 
         if(changed) {
           kDebug() << "signature changed";
-          addAction(IAssistantAction::Ptr(new AdaptSignatureAction(m_definitionId, m_definitionContext, m_oldSignature, newSignature)));
+          addAction(IAssistantAction::Ptr(new AdaptSignatureAction(m_definitionId, m_definitionContext, m_oldSignature, newSignature, m_editingDefinition)));
         }else{
           kDebug() << "signature stayed equal";
         }
@@ -390,7 +395,6 @@ void AdaptDefinitionSignatureAssistant::parseJobFinished(KDevelop::ParseJob* job
     }else{
       kDebug() << "found no declaration in line" << currentPos.textCursor() << "in document" << job->duChain();
     }
-    
     emit actionsChanged();
   }
 }
diff --git a/languages/cpp/codegen/signatureassistant.h b/languages/cpp/codegen/signatureassistant.h
index 0c76e1b..69b414b 100644
--- a/languages/cpp/codegen/signatureassistant.h
+++ b/languages/cpp/codegen/signatureassistant.h
@@ -24,6 +24,7 @@
 #include <language/duchain/topducontext.h>
 #include <language/duchain/types/indexedtype.h>
 #include <language/duchain/indexedstring.h>
+#include <ktexteditor/view.h>
 
 
 namespace KDevelop {
@@ -39,7 +40,7 @@ struct Signature
   bool isConst;
 };
 
-class AdaptDefinitionSignatureAssistant : public KDevelop::ITextAssistant {
+class AdaptDefinitionSignatureAssistant : public KDevelop::IAssistant {
   Q_OBJECT
   public:
     AdaptDefinitionSignatureAssistant(KTextEditor::View* view, KTextEditor::Range inserted);
@@ -57,6 +58,7 @@ class AdaptDefinitionSignatureAssistant : public KDevelop::ITextAssistant {
     KDevelop::SimpleRange m_invocationRange;
     
     KDevelop::DUContext* findFunctionContext(KUrl url, KDevelop::SimpleRange position) const;
+    KTextEditor::View *m_view;
   private slots:
     void parseJobFinished(KDevelop::ParseJob*);
 };
diff --git a/languages/cpp/codegen/unresolvedincludeassistant.cpp b/languages/cpp/codegen/unresolvedincludeassistant.cpp
index f93cf2e..0ff068b 100644
--- a/languages/cpp/codegen/unresolvedincludeassistant.cpp
+++ b/languages/cpp/codegen/unresolvedincludeassistant.cpp
@@ -123,7 +123,7 @@ QString Cpp::OpenProjectForFileAssistant::description() const {
 }
 
 QString MissingIncludePathAssistant::title() const {
-  return i18n("Not Found: %1", m_directive);
+  return i18n("Include file \"%1\" not found", m_directive);
 }
 
 Cpp::MissingIncludePathAssistant::MissingIncludePathAssistant(KDevelop::IndexedString url, QString directive) {
diff --git a/languages/cpp/cppduchain/missingdeclarationassistant.cpp b/languages/cpp/cppduchain/missingdeclarationassistant.cpp
index c86b2e4..3fe5fa2 100644
--- a/languages/cpp/cppduchain/missingdeclarationassistant.cpp
+++ b/languages/cpp/cppduchain/missingdeclarationassistant.cpp
@@ -51,6 +51,9 @@ class CreateLocalDeclarationAction : public IAssistantAction {
           }
         }
         virtual QString description() const {
+          return i18n("local %1", typeString(20));
+        }
+        virtual QString toolTip() const {
           return i18n("Create local declaration %1 %2", typeString(20), problem->type->identifier().toString());
         }
     private:
@@ -115,6 +118,9 @@ class CreateMemberDeclarationAction : public IAssistantAction {
           }
         }
         virtual QString description() const {
+          return accessString() + " " + returnString();
+        }
+        virtual QString toolTip() const {
           DUChainReadLocker lock(DUChain::lock());
           DUContext* container = useContainer();
           if(container)
@@ -129,6 +135,8 @@ class CreateMemberDeclarationAction : public IAssistantAction {
               return "protected";
             case Declaration::Private:
               return "private";
+            case Declaration::Public:
+              return "public";
             default:
               return QString();
           }      
@@ -239,4 +247,9 @@ MissingDeclarationAssistant::MissingDeclarationAssistant(KSharedPtr< Cpp::Missin
         addAction(KDevelop::IAssistantAction::Ptr(new CreateMemberDeclarationAction(problem)));
     }
   }
+
+  if (p->type->isFunction)
+    m_title = i18n("Declare function \"%1\" as", type->identifier().toString());
+  else
+    m_title = i18n("Declare \"%1\" as", type->identifier().toString());
 }
diff --git a/languages/cpp/cppduchain/missingdeclarationassistant.h b/languages/cpp/cppduchain/missingdeclarationassistant.h
index 16ee03f..494575c 100644
--- a/languages/cpp/cppduchain/missingdeclarationassistant.h
+++ b/languages/cpp/cppduchain/missingdeclarationassistant.h
@@ -33,6 +33,9 @@ public:
   MissingDeclarationAssistant(KSharedPtr<MissingDeclarationProblem> p);
   KSharedPtr<MissingDeclarationProblem> problem;
   MissingDeclarationType::Ptr type;
+  QString title() const { return m_title; }
+private:
+  QString m_title;
 };
 
 }
