diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp
index 894e27a72ec32794b6403806f5c2b0239a1ca48e..4abc903ec1fbe86dd8caeba3a5dbd7eb65740bf6 100644
--- a/src/plugins/cppeditor/cpphoverhandler.cpp
+++ b/src/plugins/cppeditor/cpphoverhandler.cpp
@@ -61,6 +61,8 @@
 #include <QtGui/QToolTip>
 #include <QtGui/QTextCursor>
 #include <QtGui/QTextBlock>
+#include <QtGui/QApplication>
+#include <QtGui/QDesktopWidget>
 
 using namespace CppEditor::Internal;
 using namespace CPlusPlus;
@@ -105,7 +107,7 @@ void CppHoverHandler::showToolTip(TextEditor::ITextEditor *editor, const QPoint
     if (core->hasContext(dbgcontext))
         return;
 
-    updateHelpIdAndTooltip(editor, pos);
+    updateHelpIdAndTooltip(editor, pos, QApplication::desktop()->screenNumber(point));
 
     if (m_toolTip.isEmpty())
         QToolTip::hideText();
@@ -238,7 +240,9 @@ static FullySpecifiedType resolve(const FullySpecifiedType &ty,
     return ty;
 }
 
-void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos)
+void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor,
+                                             int pos,
+                                             const int screen)
 {
     m_helpId.clear();
     m_toolTip.clear();
@@ -395,16 +399,36 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in
     if (!formatTooltip.isEmpty())
         m_toolTip = formatTooltip;
 
+    const int tipWidth = QFontMetrics(QToolTip::font()).width(m_toolTip);
+    bool preventWrapping = true;
+
+    if (screen != -1) {
+#ifdef Q_WS_MAC
+        int screenWidth = QApplication::desktop()->availableGeometry(screen).width();
+#else
+        int screenWidth = QApplication::desktop()->screenGeometry(screen).width();
+#endif
+        if (tipWidth > screenWidth * .8)
+            preventWrapping = false;
+    }
+
     if (!m_helpId.isEmpty() && !helpLinks.isEmpty()) {
         if (showF1) {
-            // we need the original width without escape sequences
-            const int width = QFontMetrics(QToolTip::font()).width(m_toolTip);
-            m_toolTip = QString(QLatin1String("<table><tr><td valign=middle width=%2>%1</td>"
-                                              "<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
-                        .arg(Qt::escape(m_toolTip)).arg(width);
+            if (preventWrapping) {
+                m_toolTip = QString(QLatin1String("<table><tr><td valign=middle width=%2>%1</td>"
+                                                  "<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
+                            .arg(Qt::escape(m_toolTip)).arg(tipWidth);
+            } else {
+                m_toolTip = QString(QLatin1String("<table><tr><td valign=middle>%1</td>"
+                                                  "<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
+                            .arg(Qt::escape(m_toolTip));
+            }
         }
         editor->setContextHelpId(m_helpId);
-    } else if (!m_toolTip.isEmpty() && Qt::mightBeRichText(m_toolTip)) {
-        m_toolTip = QString(QLatin1String("<nobr>%1</nobr>")).arg(Qt::escape(m_toolTip));
+    } else if (!m_toolTip.isEmpty()) {
+        if (preventWrapping)
+            m_toolTip = QString(QLatin1String("<table><tr><td width=%2>%1</td></tr></table>")).arg(Qt::escape(m_toolTip)).arg(tipWidth);
+        else if (!Qt::mightBeRichText(m_toolTip))
+            m_toolTip = QString(QLatin1String("<p>%1</p>")).arg(Qt::escape(m_toolTip));
     }
 }
diff --git a/src/plugins/cppeditor/cpphoverhandler.h b/src/plugins/cppeditor/cpphoverhandler.h
index 311b82922361c0c7a6c4956d900ec40467f505c1..3e8fa960f1b3a3229f569b614a2a3c1789fc9e7e 100644
--- a/src/plugins/cppeditor/cpphoverhandler.h
+++ b/src/plugins/cppeditor/cpphoverhandler.h
@@ -66,7 +66,7 @@ private slots:
     void editorOpened(Core::IEditor *editor);
 
 private:
-    void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos);
+    void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos, const int screen = -1);
 
     CppTools::CppModelManagerInterface *m_modelManager;
     QString m_helpId;