diff --git a/src/plugins/help/centralwidget.cpp b/src/plugins/help/centralwidget.cpp
index f48c4eebe471cf155bc3c9a587aae224f140b222..0b4881f762bda2fcfd371fa6f464bac8ca86c5bc 100644
--- a/src/plugins/help/centralwidget.cpp
+++ b/src/plugins/help/centralwidget.cpp
@@ -31,7 +31,6 @@
 #include "helpviewer.h"
 #include "topicchooser.h"
 
-#include <QtCore/QDir>
 #include <QtCore/QEvent>
 #include <QtCore/QTimer>
 
@@ -62,7 +61,8 @@
 using namespace Help::Internal;
 
 namespace {
-    HelpViewer* helpViewerFromTabPosition(const QTabWidget *widget, const QPoint &point)
+    HelpViewer* helpViewerFromTabPosition(const QTabWidget *widget,
+        const QPoint &point)
     {
         QTabBar *tabBar = qFindChild<QTabBar*>(widget);
         for (int i = 0; i < tabBar->count(); ++i) {
@@ -85,22 +85,22 @@ CentralWidget::CentralWidget(QHelpEngine *engine, QWidget *parent)
     globalActionList.clear();
     collectionFile = helpEngine->collectionFile();
 
-#ifdef Q_OS_MAC
-#   define SYSTEM "mac"
-#else
-#   define SYSTEM "win"
-#endif
-
     tabWidget = new QTabWidget;
     tabWidget->setDocumentMode(true);
     tabWidget->setMovable(true);
     connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
-    connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentPageChanged(int)));
+    connect(tabWidget, SIGNAL(currentChanged(int)), this,
+        SLOT(currentPageChanged(int)));
 
     QToolButton *newTabButton = new QToolButton(this);
     newTabButton->setAutoRaise(true);
     newTabButton->setToolTip(tr("Add new page"));
-    newTabButton->setIcon(QIcon(QString::fromLatin1(":/trolltech/assistant/images/" SYSTEM "/addtab.png")));
+    newTabButton->setIcon(QIcon(
+#ifdef Q_OS_MAC
+        QLatin1String(":/trolltech/assistant/images/mac/addtab.png")));
+#else
+        QLatin1String(":/trolltech/assistant/images/win/addtab.png")));
+#endif
 
     tabWidget->setCornerWidget(newTabButton, Qt::TopLeftCorner);
     connect(newTabButton, SIGNAL(clicked()), this, SLOT(newTab()));
@@ -122,19 +122,23 @@ CentralWidget::CentralWidget(QHelpEngine *engine, QWidget *parent)
 
 CentralWidget::~CentralWidget()
 {
-    QDir dir;
-    QString currentPages;
+#ifndef QT_NO_PRINTER
+    delete printer;
+#endif
+
+
     QHelpEngineCore engine(collectionFile, 0);
+    if (!engine.setupData())
+        return;
 
-    if (engine.setupData()) {
-        for (int i = 0; i < tabWidget->count(); ++i) {
-            HelpViewer *viewer = qobject_cast<HelpViewer*>(tabWidget->widget(i));
-            if (viewer && viewer->source().isValid())
-                currentPages.append(viewer->source().toString()).append(QLatin1Char('|'));
-        }
-        engine.setCustomValue(QLatin1String("LastTabPage"), lastTabPage);
-        engine.setCustomValue(QLatin1String("LastShownPages"), currentPages);
+    QString currentPages;
+    for (int i = 0; i < tabWidget->count(); ++i) {
+        HelpViewer *viewer = qobject_cast<HelpViewer*>(tabWidget->widget(i));
+        if (viewer && viewer->source().isValid())
+            currentPages += (viewer->source().toString() + QLatin1Char('|'));
     }
+    engine.setCustomValue(QLatin1String("LastTabPage"), lastTabPage);
+    engine.setCustomValue(QLatin1String("LastShownPages"), currentPages);
 }
 
 CentralWidget *CentralWidget::instance()
@@ -165,10 +169,10 @@ void CentralWidget::zoomOut()
 
 void CentralWidget::nextPage()
 {
-    if (tabWidget->currentIndex() < tabWidget->count() -1)
-        tabWidget->setCurrentIndex(tabWidget->currentIndex() +1);
-    else
-        tabWidget->setCurrentIndex(0);
+    int index = tabWidget->currentIndex() + 1;
+    if (index >= tabWidget->count())
+        index = 0;
+    tabWidget->setCurrentIndex(index);
 }
 
 void CentralWidget::resetZoom()
@@ -181,10 +185,9 @@ void CentralWidget::resetZoom()
 void CentralWidget::previousPage()
 {
     int index = tabWidget->currentIndex() -1;
-    if (index >= 0)
-        tabWidget->setCurrentIndex(index);
-    else
-        tabWidget->setCurrentIndex(tabWidget->count() -1);
+    if (index < 0)
+        index = tabWidget->count() -1;
+    tabWidget->setCurrentIndex(index);
 }
 
 void CentralWidget::closeTab()
@@ -205,7 +208,8 @@ void CentralWidget::closeTab(int index)
 void CentralWidget::setSource(const QUrl &url)
 {
     HelpViewer* viewer = currentHelpViewer();
-    HelpViewer* lastViewer = qobject_cast<HelpViewer*>(tabWidget->widget(lastTabPage));
+    HelpViewer* lastViewer =
+        qobject_cast<HelpViewer*>(tabWidget->widget(lastTabPage));
 
     if (!viewer && !lastViewer) {
         viewer = new HelpViewer(helpEngine, this);
@@ -214,8 +218,9 @@ void CentralWidget::setSource(const QUrl &url)
         tabWidget->setCurrentIndex(lastTabPage);
         connectSignals();
         qApp->processEvents();
-    } else
+    } else {
         viewer = lastViewer;
+    }
 
     viewer->setSource(url);
     currentPageChanged(lastTabPage);
@@ -226,24 +231,28 @@ void CentralWidget::setSource(const QUrl &url)
 
 void CentralWidget::setLastShownPages()
 {
-    const QStringList lastShownPageList =
-        helpEngine->customValue(QLatin1String("LastShownPages")). toString().
-        split(QLatin1Char('|'), QString::SkipEmptyParts);
+    QString value = helpEngine->customValue(QLatin1String("LastShownPages"),
+        QString()).toString();
+    const QStringList lastShownPageList = value.split(QLatin1Char('|'),
+        QString::SkipEmptyParts);
 
-    if (!lastShownPageList.isEmpty()) {
-        foreach (const QString& page, lastShownPageList)
-            setSourceInNewTab(page);
-
-        tabWidget->setCurrentIndex(helpEngine->
-            customValue(QLatin1String("LastTabPage"), 0).toInt());
-    } else {
-        QUrl url(helpEngine->findFile(QUrl("qthelp://com.trolltech.qt.440/qdoc/index.html")));
+    const int pageCount = lastShownPageList.count();
+    if (pageCount <= 0) {
+        QUrl url = helpEngine->findFile(QString::fromLatin1("qthelp://com."
+            "trolltech.qt.440/qdoc/index.html"));
         if (!url.isValid()) {
             url.setUrl(QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").
                 arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
+            url.setUrl(QString::fromLatin1("qthelp://com.nokia.qtcreator.%1%2/"
+                "doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
         }
         setSource(url);
+        return;
     }
+
+    QStringList::const_iterator it = lastShownPageList.constBegin();
+    for (; it != lastShownPageList.constEnd(); ++it)
+        setSourceInNewTab((*it));
 }
 
 bool CentralWidget::hasSelection() const
@@ -326,6 +335,8 @@ void CentralWidget::printPreview(QPrinter *p)
     HelpViewer *viewer = currentHelpViewer();
     if (viewer)
         viewer->print(p);
+#else
+    Q_UNUSED(p);
 #endif
 }
 
@@ -475,6 +486,8 @@ void CentralWidget::setTabTitle(const QUrl& url)
                 break;
         }
     }
+#else
+    Q_UNUSED(url);
 #endif
 
     if (viewer) {
@@ -485,16 +498,9 @@ void CentralWidget::setTabTitle(const QUrl& url)
 
 void CentralWidget::currentPageChanged(int index)
 {
-    const HelpViewer *viewer = currentHelpViewer();
-
-    if (viewer || tabWidget->count() == 1)
-        lastTabPage = index;
+    lastTabPage = index;
 
-    bool enabled = false;
-    if (viewer)
-        enabled = tabWidget->count() > 1;
-
-    tabWidget->setTabsClosable(enabled);
+    tabWidget->setTabsClosable(tabWidget->count() > 1);
     tabWidget->cornerWidget(Qt::TopLeftCorner)->setEnabled(true);
 
      emit currentViewerChanged();
@@ -509,34 +515,32 @@ void CentralWidget::showTabBarContextMenu(const QPoint &point)
     QTabBar *tabBar = qFindChild<QTabBar*>(tabWidget);
 
     QMenu menu(QLatin1String(""), tabBar);
-    QAction *new_page = menu.addAction(tr("Add New Page"));
-    QAction *close_page = menu.addAction(tr("Close This Page"));
-    QAction *close_pages = menu.addAction(tr("Close Other Pages"));
-    menu.addSeparator();
-    QAction *newBookmark = menu.addAction(tr("Add Bookmark for this Page..."));
+    QAction *newPage = menu.addAction(tr("Add New Page"));
 
-    if (tabBar->count() == 1) {
-        close_page->setEnabled(false);
-        close_pages->setEnabled(false);
-    }
+    bool enableAction = tabBar->count() > 1;
+    QAction *closePage = menu.addAction(tr("Close This Page"));
+    closePage->setEnabled(enableAction);
 
+    QAction *closePages = menu.addAction(tr("Close Other Pages"));
+    closePages->setEnabled(enableAction);
+
+    menu.addSeparator();
+    
+    QAction *newBookmark = menu.addAction(tr("Add Bookmark for this Page..."));
     const QString &url = viewer->source().toString();
     if (url.isEmpty() || url == QLatin1String("about:blank"))
         newBookmark->setEnabled(false);
 
-    QAction *picked_action = menu.exec(tabBar->mapToGlobal(point));
-    if (!picked_action)
-        return;
-
-    if (picked_action == new_page)
+    QAction *pickedAction = menu.exec(tabBar->mapToGlobal(point));
+    if (pickedAction == newPage)
         setSourceInNewTab(viewer->source());
 
-    if (picked_action == close_page) {
+    if (pickedAction == closePage) {
         tabWidget->removeTab(tabWidget->indexOf(viewer));
         QTimer::singleShot(0, viewer, SLOT(deleteLater()));
     }
 
-    if (picked_action == close_pages) {
+    if (pickedAction == closePages) {
         int currentPage = tabWidget->indexOf(viewer);
         for (int i = tabBar->count() -1; i >= 0; --i) {
             viewer = qobject_cast<HelpViewer*>(tabWidget->widget(i));
@@ -550,7 +554,7 @@ void CentralWidget::showTabBarContextMenu(const QPoint &point)
         }
     }
 
-    if (picked_action == newBookmark)
+    if (pickedAction == newBookmark)
         emit addNewBookmark(viewer->documentTitle(), url);
 }
 
@@ -568,31 +572,40 @@ void CentralWidget::focusInEvent(QFocusEvent * /* event */)
 
 bool CentralWidget::eventFilter(QObject *object, QEvent *e)
 {
-    if (currentHelpViewer() == object && e->type() == QEvent::KeyPress){
-        QKeyEvent *ke = static_cast<QKeyEvent*>(e);
-        if (ke->key() == Qt::Key_Backspace) {
+    if (e->type() == QEvent::KeyPress){
+        if ((static_cast<QKeyEvent*>(e))->key() == Qt::Key_Backspace) {
             HelpViewer *viewer = currentHelpViewer();
-            if (viewer && viewer->isBackwardAvailable())
-                viewer->backward();
-            return true;
+            if (viewer == object) {
+                if (viewer->isBackwardAvailable()) {
+#if !defined(QT_NO_WEBKIT)
+                    // this helps in case there is an html <input> field
+                    if (!viewer->hasFocus())
+#endif
+                        viewer->backward();
+                }
+                return true;
+            }
         }
     }
 
-    QTabBar *tabBar = qobject_cast<QTabBar*>(object);
-    bool mousRel = e->type() == QEvent::MouseButtonRelease;
-    bool dblClick = e->type() == QEvent::MouseButtonDblClick;
-
-    if (tabBar && (mousRel || dblClick)) {
-        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e);
-        HelpViewer *viewer = helpViewerFromTabPosition(tabWidget, mouseEvent->pos());
-        if (tabWidget->count() <= 1)
-            return QWidget::eventFilter(object, e);
-
-        if (viewer && (mouseEvent->button() == Qt::MidButton || dblClick)) {
-            tabWidget->removeTab(tabWidget->indexOf(viewer));
-            QTimer::singleShot(0, viewer, SLOT(deleteLater()));
-            currentPageChanged(tabWidget->currentIndex());
-            return true;
+    if (qobject_cast<QTabBar*>(object)) {
+        bool dblClick = e->type() == QEvent::MouseButtonDblClick;
+        if((e->type() == QEvent::MouseButtonRelease) || dblClick) {
+            if (tabWidget->count() <= 1)
+                return QWidget::eventFilter(object, e);
+
+            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e);
+            HelpViewer *viewer = helpViewerFromTabPosition(tabWidget,
+                mouseEvent->pos());
+
+            if (viewer) {
+                if ((mouseEvent->button() == Qt::MidButton) || dblClick) {
+                    tabWidget->removeTab(tabWidget->indexOf(viewer));
+                    QTimer::singleShot(0, viewer, SLOT(deleteLater()));
+                    currentPageChanged(tabWidget->currentIndex());
+                    return true;
+                }
+            }
         }
     }
     return QWidget::eventFilter(object, e);