diff --git a/src/libs/utils/htmldocextractor.cpp b/src/libs/utils/htmldocextractor.cpp
index 7690dae79d2e4db63666bd7872e8aac73ae4027b..2edb4c8385043d46d713cee39e0b1538999d5dd8 100644
--- a/src/libs/utils/htmldocextractor.cpp
+++ b/src/libs/utils/htmldocextractor.cpp
@@ -266,6 +266,7 @@ void HtmlDocExtractor::formatContents(QString *html) const
         return;
 
     if (m_formatContents) {
+        stripBold(html);
         replaceNonStyledHeadingsForBold(html);
         replaceTablesForSimpleLines(html);
         replaceListsForSimpleLines(html);
@@ -274,6 +275,7 @@ void HtmlDocExtractor::formatContents(QString *html) const
         stripDivs(html);
         stripTagsStyles(html);
         stripHeadings(html);
+        stripImagens(html);
     }
 
     if (m_lengthReference > -1 && html->length() > m_lengthReference) {
@@ -288,9 +290,11 @@ void HtmlDocExtractor::formatContents(QString *html) const
         } else {
             html->truncate(m_lengthReference);
         }
-        html->append(QLatin1String("..."));
-        if (m_formatContents)
-            html->append(QLatin1String("<br />"));
+        if (m_formatContents) {
+            if (html->endsWith(QLatin1String("<br />")))
+                html->chop(6);
+            html->append(QLatin1String("<p>...</p>"));
+        }
     }
 }
 
@@ -327,7 +331,19 @@ void HtmlDocExtractor::stripTagsStyles(QString *html)
 
 void HtmlDocExtractor::stripTeletypes(QString *html)
 {
-    html->remove(createMinimalExp(QLatin1String("<tt>|</tt>")));
+    html->remove(QLatin1String("<tt>"));
+    html->remove(QLatin1String("</tt>"));
+}
+
+void HtmlDocExtractor::stripImagens(QString *html)
+{
+    html->remove(createMinimalExp(QLatin1String("<img.*>")));
+}
+
+void HtmlDocExtractor::stripBold(QString *html)
+{
+    html->remove(QLatin1String("<b>"));
+    html->remove(QLatin1String("</b>"));
 }
 
 void HtmlDocExtractor::replaceNonStyledHeadingsForBold(QString *html)
@@ -340,13 +356,19 @@ void HtmlDocExtractor::replaceNonStyledHeadingsForBold(QString *html)
 
 void HtmlDocExtractor::replaceTablesForSimpleLines(QString *html)
 {
-    html->remove(createMinimalExp(QLatin1String("<table.*>")));
-    html->remove(QLatin1String("</table>"));
+    html->replace(createMinimalExp(QLatin1String("(?:<p>)?<table.*>")), QLatin1String("<p>"));
+    html->replace(QLatin1String("</table>"), QLatin1String("</p>"));
+    html->remove(createMinimalExp(QLatin1String("<thead.*>")));
+    html->remove(QLatin1String("</thead>"));
+    html->remove(createMinimalExp(QLatin1String("<tfoot.*>")));
+    html->remove(QLatin1String("</tfoot>"));
     html->remove(createMinimalExp(QLatin1String("<tr.*><th.*>.*</th></tr>")));
     html->replace(QLatin1String("</td><td"), QLatin1String("</td>&nbsp;<td"));
+    html->remove(createMinimalExp(QLatin1String("<td.*><p>")));
     html->remove(createMinimalExp(QLatin1String("<td.*>")));
-    html->remove(QLatin1String("</td>"));
-    html->replace(QLatin1String("<tr>"), QLatin1String("&nbsp;&nbsp;-&nbsp;"));
+    html->remove(createMinimalExp(QLatin1String("(?:</p>)?</td>")));
+    html->replace(createMinimalExp(QLatin1String("<tr.*>")),
+                  QLatin1String("&nbsp;&nbsp;&nbsp;&nbsp;"));
     html->replace(QLatin1String("</tr>"), QLatin1String("<br />"));
 }
 
@@ -354,7 +376,7 @@ void HtmlDocExtractor::replaceListsForSimpleLines(QString *html)
 {
     html->remove(createMinimalExp(QLatin1String("<(?:ul|ol).*>")));
     html->remove(createMinimalExp(QLatin1String("</(?:ul|ol)>")));
-    html->replace(QLatin1String("<li>"), QLatin1String("&nbsp;&nbsp;-&nbsp;"));
+    html->replace(QLatin1String("<li>"), QLatin1String("&nbsp;&nbsp;&nbsp;&nbsp;"));
     html->replace(QLatin1String("</li>"), QLatin1String("<br />"));
 }
 
diff --git a/src/libs/utils/htmldocextractor.h b/src/libs/utils/htmldocextractor.h
index 86728d4788498c08fbb1d84acb3480e998df346c..819e7a5bc9c7ef1bf8657377d38efd3d5b1f6809 100644
--- a/src/libs/utils/htmldocextractor.h
+++ b/src/libs/utils/htmldocextractor.h
@@ -85,6 +85,8 @@ private:
     static void stripDivs(QString *html);
     static void stripTagsStyles(QString *html);
     static void stripTeletypes(QString *html);
+    static void stripImagens(QString *html);
+    static void stripBold(QString *html);
     static void replaceNonStyledHeadingsForBold(QString *html);
     static void replaceTablesForSimpleLines(QString *html);
     static void replaceListsForSimpleLines(QString *html);
diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp
index 5e46c19c9ea100b7fbf55cb1d77dd1647cc792e1..61d3f7a3f7aa250282c640cdf95af1a73fa9a043 100644
--- a/src/plugins/cppeditor/cpphoverhandler.cpp
+++ b/src/plugins/cppeditor/cpphoverhandler.cpp
@@ -70,20 +70,15 @@ namespace {
             return name.right(name.length() - index - 1);
     }
 
-    void moveCursorToEndOfQualifiedName(QTextCursor *tc) {
+    void moveCursorToEndOfName(QTextCursor *tc) {
         QTextDocument *doc = tc->document();
         if (!doc)
             return;
 
-        while (true) {
-            const QChar &ch = doc->characterAt(tc->position());
-            if (ch.isLetterOrNumber() || ch == QLatin1Char('_'))
-                tc->movePosition(QTextCursor::NextCharacter);
-            else if (ch == QLatin1Char(':') &&
-                     doc->characterAt(tc->position() + 1) == QLatin1Char(':'))
-                tc->movePosition(QTextCursor::NextCharacter, QTextCursor::MoveAnchor, 2);
-            else
-                break;
+        QChar ch = doc->characterAt(tc->position());
+        while (ch.isLetterOrNumber() || ch == QLatin1Char('_')) {
+            tc->movePosition(QTextCursor::NextCharacter);
+            ch = doc->characterAt(tc->position());
         }
     }
 }
@@ -211,7 +206,7 @@ void CppHoverHandler::identifyMatch(TextEditor::ITextEditor *editor, int pos)
 
         QTextCursor tc(baseEditor->document());
         tc.setPosition(pos);
-        moveCursorToEndOfQualifiedName(&tc);
+        moveCursorToEndOfName(&tc);
 
         // Fetch the expression's code
         ExpressionUnderCursor expressionUnderCursor;