diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index c25613d7c184ec90bd6c8317bc0a51291b6aab7f..daeceb903696718ef3a9e77e63ab3147ccc7905c 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -359,23 +359,26 @@ HelpViewer *HelpPlugin::createHelpViewer(qreal zoom)
     const QString backend = QLatin1String(qgetenv("QTC_HELPVIEWER_BACKEND"));
     if (backend.compare(QLatin1String("native"), Qt::CaseInsensitive) == 0) {
 #ifdef QTC_MAC_NATIVE_HELPVIEWER
-        viewer = new MacWebKitHelpViewer(zoom);
+        viewer = new MacWebKitHelpViewer();
 #else
         qWarning() << "native help viewer is requested, but was not enabled during compilation";
 #endif
     } else if (backend.compare(QLatin1String("textbrowser"), Qt::CaseInsensitive) != 0) {
 #ifndef QT_NO_WEBKIT
-        viewer = new QtWebKitHelpViewer(zoom);
+        viewer = new QtWebKitHelpViewer();
 #endif
     }
     if (!viewer)
-        viewer = new TextBrowserHelpViewer(zoom);
+        viewer = new TextBrowserHelpViewer();
 
     // initialize font
     QVariant fontSetting = LocalHelpManager::engineFontSettings();
     if (fontSetting.isValid())
         viewer->setViewerFont(fontSetting.value<QFont>());
 
+    // initialize zoom
+    viewer->setScale(zoom);
+
     // add find support
     Aggregation::Aggregate *agg = new Aggregation::Aggregate();
     agg->add(viewer);
diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h
index 8672f53f88cf00fc9f6993ff554efa8fd276d88c..d001f7010d150d6b62b4257bac613c201538fe46 100644
--- a/src/plugins/help/helpviewer.h
+++ b/src/plugins/help/helpviewer.h
@@ -55,6 +55,7 @@ public:
     virtual void setViewerFont(const QFont &font) = 0;
 
     virtual qreal scale() const = 0;
+    virtual void setScale(qreal scale) = 0;
 
     virtual QString title() const = 0;
 
diff --git a/src/plugins/help/macwebkithelpviewer.h b/src/plugins/help/macwebkithelpviewer.h
index 2ce62da0c0e7f01f1b069f8c206bc1bb986f7ca1..ab2481b8c5c5b9e72a4fac61192afb933524a4db 100644
--- a/src/plugins/help/macwebkithelpviewer.h
+++ b/src/plugins/help/macwebkithelpviewer.h
@@ -82,13 +82,14 @@ class MacWebKitHelpViewer : public HelpViewer
     Q_OBJECT
 
 public:
-    explicit MacWebKitHelpViewer(qreal zoom, QWidget *parent = 0);
+    explicit MacWebKitHelpViewer(QWidget *parent = 0);
     ~MacWebKitHelpViewer();
 
     QFont viewerFont() const;
     void setViewerFont(const QFont &font);
 
     qreal scale() const;
+    void setScale(qreal scale);
 
     QString title() const;
 
diff --git a/src/plugins/help/macwebkithelpviewer.mm b/src/plugins/help/macwebkithelpviewer.mm
index 7f583f145d240c7108e26bd7fe12504a5c004aae..3c35e49b3a2192fcee0efca30e5cd714443f587c 100644
--- a/src/plugins/help/macwebkithelpviewer.mm
+++ b/src/plugins/help/macwebkithelpviewer.mm
@@ -454,7 +454,7 @@ void MacWebKitHelpWidget::showEvent(QShowEvent *)
 
 // #pragma mark -- MacWebKitHelpViewer
 
-MacWebKitHelpViewer::MacWebKitHelpViewer(qreal zoom, QWidget *parent)
+MacWebKitHelpViewer::MacWebKitHelpViewer(QWidget *parent)
     : HelpViewer(parent),
       m_widget(new MacWebKitHelpWidget(this))
 {
@@ -469,7 +469,6 @@ MacWebKitHelpViewer::MacWebKitHelpViewer(qreal zoom, QWidget *parent)
     setLayout(layout);
     layout->setContentsMargins(0, 0, 0, 0);
     layout->addWidget(m_widget, 10);
-    m_widget->webView().textSizeMultiplier = (zoom == 0.0 ? 1.0 : zoom);
 }
 
 MacWebKitHelpViewer::~MacWebKitHelpViewer()
@@ -515,7 +514,12 @@ void MacWebKitHelpViewer::resetScale()
 qreal MacWebKitHelpViewer::scale() const
 {
     AutoreleasePool pool; Q_UNUSED(pool)
-    return m_widget->webView().textSizeMultiplier;
+            return m_widget->webView().textSizeMultiplier;
+}
+
+void MacWebKitHelpViewer::setScale(qreal scale)
+{
+    m_widget->webView().textSizeMultiplier = (scale <= 0.0 ? 1.0 : scale);
 }
 
 QString MacWebKitHelpViewer::title() const
diff --git a/src/plugins/help/qtwebkithelpviewer.cpp b/src/plugins/help/qtwebkithelpviewer.cpp
index 3ae31b5715d73f53bcd99e5b18d1f0824965c024..c1e5aa5870a0df218f956682a85e61692c8b2e10 100644
--- a/src/plugins/help/qtwebkithelpviewer.cpp
+++ b/src/plugins/help/qtwebkithelpviewer.cpp
@@ -250,7 +250,7 @@ void HelpPage::onHandleUnsupportedContent(QNetworkReply *reply)
 
 // -- HelpViewer
 
-QtWebKitHelpWidget::QtWebKitHelpWidget(qreal zoom, QtWebKitHelpViewer *parent)
+QtWebKitHelpWidget::QtWebKitHelpWidget(QtWebKitHelpViewer *parent)
     : QWebView(parent),
       m_parent(parent)
 {
@@ -278,8 +278,6 @@ QtWebKitHelpWidget::QtWebKitHelpWidget(qreal zoom, QtWebKitHelpViewer *parent)
         SLOT(actionChanged()));
     connect(pageAction(QWebPage::Forward), SIGNAL(changed()), this,
         SLOT(actionChanged()));
-
-    setZoomFactor(zoom == 0.0 ? 1.0 : zoom);
 }
 
 QtWebKitHelpWidget::~QtWebKitHelpWidget()
@@ -393,9 +391,9 @@ bool QtWebKitHelpWidget::eventFilter(QObject *obj, QEvent *event)
     return QWebView::eventFilter(obj, event);
 }
 
-QtWebKitHelpViewer::QtWebKitHelpViewer(qreal zoom, QWidget *parent)
+QtWebKitHelpViewer::QtWebKitHelpViewer(QWidget *parent)
     : HelpViewer(parent),
-      m_webView(new QtWebKitHelpWidget(zoom, this))
+      m_webView(new QtWebKitHelpWidget(this))
 {
     QVBoxLayout *layout = new QVBoxLayout;
     setLayout(layout);
@@ -449,6 +447,11 @@ qreal QtWebKitHelpViewer::scale() const
     return m_webView->zoomFactor();
 }
 
+void QtWebKitHelpViewer::setScale(qreal scale)
+{
+    m_webView->setZoomFactor(scale <= 0.0 ? 1.0 : scale);
+}
+
 QString QtWebKitHelpViewer::title() const
 {
     return m_webView->title();
diff --git a/src/plugins/help/qtwebkithelpviewer.h b/src/plugins/help/qtwebkithelpviewer.h
index 79ee30f0e9c3dc9b9e4b9a0462a291c3f4a64909..a8fe8f5bd7a5ef6ffdbe146fadb0f67a3dccb78e 100644
--- a/src/plugins/help/qtwebkithelpviewer.h
+++ b/src/plugins/help/qtwebkithelpviewer.h
@@ -48,13 +48,14 @@ class QtWebKitHelpViewer : public HelpViewer
 {
     Q_OBJECT
 public:
-    explicit QtWebKitHelpViewer(qreal zoom, QWidget *parent = 0);
+    explicit QtWebKitHelpViewer(QWidget *parent = 0);
     ~QtWebKitHelpViewer() { }
 
     QFont viewerFont() const;
     void setViewerFont(const QFont &font);
 
     qreal scale() const;
+    void setScale(qreal scale);
 
     QString title() const;
 
@@ -103,7 +104,7 @@ class QtWebKitHelpWidget : public QWebView
     Q_OBJECT
 
 public:
-    explicit QtWebKitHelpWidget(qreal zoom, QtWebKitHelpViewer *parent = 0);
+    explicit QtWebKitHelpWidget(QtWebKitHelpViewer *parent = 0);
     ~QtWebKitHelpWidget();
 
     void scaleUp();
diff --git a/src/plugins/help/textbrowserhelpviewer.cpp b/src/plugins/help/textbrowserhelpviewer.cpp
index 281efd9aa49e3ecd60a1ee7604bf9436c0d208d0..b1e4b1154e11464fb1024e9f5beaf01a1542e672 100644
--- a/src/plugins/help/textbrowserhelpviewer.cpp
+++ b/src/plugins/help/textbrowserhelpviewer.cpp
@@ -50,9 +50,9 @@ using namespace Help::Internal;
 
 // -- HelpViewer
 
-TextBrowserHelpViewer::TextBrowserHelpViewer(qreal zoom, QWidget *parent)
+TextBrowserHelpViewer::TextBrowserHelpViewer(QWidget *parent)
     : HelpViewer(parent)
-    , m_textBrowser(new TextBrowserHelpWidget(zoom, this))
+    , m_textBrowser(new TextBrowserHelpWidget(this))
 {
     QVBoxLayout *layout = new QVBoxLayout;
     setLayout(layout);
@@ -112,6 +112,22 @@ qreal TextBrowserHelpViewer::scale() const
     return m_textBrowser->zoomCount;
 }
 
+void TextBrowserHelpViewer::setScale(qreal scale)
+{
+    m_textBrowser->forceFont = true;
+    if (scale > 10)
+        scale = 10;
+    else if (scale < -5)
+        scale = -5;
+    int diff = (int)scale - m_textBrowser->zoomCount;
+    if (diff > 0)
+        m_textBrowser->zoomIn(diff);
+    else if (diff < 0)
+        m_textBrowser->zoomOut(-diff);
+    m_textBrowser->zoomCount = (int)scale;
+    m_textBrowser->forceFont = false;
+}
+
 QString TextBrowserHelpViewer::title() const
 {
     return m_textBrowser->documentTitle();
@@ -284,9 +300,9 @@ void TextBrowserHelpViewer::goToHistoryItem()
 
 // -- private
 
-TextBrowserHelpWidget::TextBrowserHelpWidget(int zoom, TextBrowserHelpViewer *parent)
+TextBrowserHelpWidget::TextBrowserHelpWidget(TextBrowserHelpViewer *parent)
     : QTextBrowser(parent)
-    , zoomCount(zoom)
+    , zoomCount(0)
     , forceFont(false)
     , m_openInNewPageActionVisible(true)
     , m_parent(parent)
diff --git a/src/plugins/help/textbrowserhelpviewer.h b/src/plugins/help/textbrowserhelpviewer.h
index 0f859da198f52b8bada1474c734f03963bad90a5..4ad8e6d0a7f0258be29dac3b44b5260df093df46 100644
--- a/src/plugins/help/textbrowserhelpviewer.h
+++ b/src/plugins/help/textbrowserhelpviewer.h
@@ -47,13 +47,14 @@ class TextBrowserHelpViewer : public HelpViewer
     Q_OBJECT
 
 public:
-    explicit TextBrowserHelpViewer(qreal zoom, QWidget *parent = 0);
+    explicit TextBrowserHelpViewer(QWidget *parent = 0);
     ~TextBrowserHelpViewer();
 
     QFont viewerFont() const;
     void setViewerFont(const QFont &font);
 
     qreal scale() const;
+    void setScale(qreal scale);
 
     QString title() const;
 
@@ -97,7 +98,7 @@ class TextBrowserHelpWidget : public QTextBrowser
     Q_OBJECT
 
 public:
-    TextBrowserHelpWidget(int zoom, TextBrowserHelpViewer *parent);
+    TextBrowserHelpWidget(TextBrowserHelpViewer *parent);
 
     QVariant loadResource(int type, const QUrl &name);