diff --git a/doc/qt-defines.qdocconf b/doc/qt-defines.qdocconf
index 3a857bd28e8e41a2551ccc305302e254d498f010..a9e8bbd23f7bc18a6f74eb74d57768455d914f29 100644
--- a/doc/qt-defines.qdocconf
+++ b/doc/qt-defines.qdocconf
@@ -32,6 +32,7 @@ extraimages.HTML        = qt-logo \
                           bg_ll_blank.png \
                           bg_l_blank.png \
                           breadcrumb.png \
+                          bullet_up.png \
                           bullet_dn.png \
                           bullet_gt.png \
                           bullet_sq.png \
diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc
index 437710f230c8b1092ca598fe390f6cb01a7e1b8e..0e01f2caca7d1343826a3bf155feca28cf7fdb52 100644
--- a/doc/qtcreator.qdoc
+++ b/doc/qtcreator.qdoc
@@ -4570,12 +4570,14 @@
     In \gui Debug mode, you can use several views to interact with the
     program you are debugging. Frequently used views are shown by
     default and rarely used ones are hidden. To change the default settings,
-    select \gui Debug > \gui Views, and then select views to display
-    or hide. You can also lock views. The position of views is saved for future
-    sessions.
+    select \gui {Window > Views}, and then select views to display or hide.
 
     \image qtcreator-debugger-views.png "Debug mode views"
 
+    By default, the views are locked into place in the workspace. Select
+    \gui {Window > Views > Locked} to unlock the views. Drag and drop the
+    views into new positions on the screen. Drag view borders to resize the
+    views. The size and position of views are saved for future sessions.
 
     \section1 Starting the Debugger
 
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
index 05fc9dacd4769e126b7b92d527800636bc9c7d87..882a642ba50ac3f27421e4bbbf54ad481f8a192c 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
@@ -95,7 +95,7 @@ void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &
         font.setPointSize(font.pointSize()-2);
         p.setFont(font);
         p.drawText(QRect(QPoint(0,0), pix.size()), Qt::AlignHCenter|Qt::AlignCenter, text);
-        pITask->SetOverlayIcon(winId, pix.toWinHICON(), text.utf16());
+        pITask->SetOverlayIcon(winId, pix.toWinHICON(), (wchar_t*)text.utf16());
     }
 }
 
diff --git a/src/plugins/debugger/cdb/breakpoint.cpp b/src/plugins/debugger/cdb/breakpoint.cpp
index 49a6550990e95189df4b41a07a3f14f95c8d3454..3f2525920c74e6a973013304d55a7ba08d73fdc9 100644
--- a/src/plugins/debugger/cdb/breakpoint.cpp
+++ b/src/plugins/debugger/cdb/breakpoint.cpp
@@ -257,9 +257,9 @@ static bool mapDeviceToDriveLetter(QString *s)
     for (const TCHAR *driveLetter = driveLetters; *driveLetter; driveLetter++) {
         szDrive[0] = *driveLetter; // Look up each device name
         if (QueryDosDevice(szDrive, driveName, MAX_PATH)) {
-            const QString deviceName = QString::fromUtf16(driveName);
+            const QString deviceName = QString::fromWCharArray(driveName);
             if (s->startsWith(deviceName)) {
-                s->replace(0, deviceName.size(), QString::fromUtf16(szDrive));
+                s->replace(0, deviceName.size(), QString::fromWCharArray(szDrive));
                 return true;
             }
         }
@@ -275,7 +275,7 @@ static bool mapDeviceToDriveLetter(QString *s)
 
 static inline QString normalizeFileNameCaseHelper(const QString &f)
 {
-    HANDLE hFile = CreateFile(f.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
+    HANDLE hFile = CreateFile((const wchar_t*)f.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
     if(hFile == INVALID_HANDLE_VALUE)
         return f;
     // Get the file size. We need a non-empty file to map it.
@@ -305,7 +305,7 @@ static inline QString normalizeFileNameCaseHelper(const QString &f)
     pszFilename[0] = 0;
     // Get a file name of the form "/Device/HarddiskVolume1/file.cpp"
     if (GetMappedFileName (GetCurrentProcess(), pMem, pszFilename, MAX_PATH)) {
-        rc = QString::fromUtf16(pszFilename);
+        rc = QString::fromWCharArray(pszFilename);
         if (!mapDeviceToDriveLetter(&rc))
             rc.clear();
     }
diff --git a/src/plugins/debugger/cdb/coreengine.cpp b/src/plugins/debugger/cdb/coreengine.cpp
index f00c4bf317583361ee6efb1f7f1a97d4069df484..05859fd6979ac167ac6439d485e604ec8969892d 100644
--- a/src/plugins/debugger/cdb/coreengine.cpp
+++ b/src/plugins/debugger/cdb/coreengine.cpp
@@ -296,7 +296,7 @@ bool CoreEngine::init(const QString &dllEnginePath, QString *errorMessage)
         *errorMessage = msgComFailed("GetImagePathWide", hr);
         return false;
     }
-    m_baseImagePath = QString::fromUtf16(buf);
+    m_baseImagePath = QString::fromWCharArray(buf);
 
     hr = lib.debugCreate( __uuidof(IDebugRegisters2), reinterpret_cast<void**>(&m_cif.debugRegisters));
     if (FAILED(hr)) {
@@ -447,7 +447,7 @@ bool CoreEngine::startDebuggerWithExecutable(const QString &workingDirectory,
     PCWSTR workingDirC = 0;
     const QString workingDirN = workingDirectory.isEmpty() ? QString() : QDir::toNativeSeparators(workingDirectory);
     if (!workingDirN.isEmpty())
-        workingDirC = workingDirN.utf16();
+        workingDirC = (PCWSTR)workingDirN.utf16();
     hr = m_cif.debugClient->CreateProcess2Wide(NULL,
                                                reinterpret_cast<PWSTR>(const_cast<ushort *>(cmd.utf16())),
                                                &dbgopts, sizeof(dbgopts),
@@ -820,7 +820,7 @@ quint64 CoreEngine::getSourceLineAddress(const QString &file,
 {
     ULONG64 rc = 0;
     const HRESULT hr = m_cif.debugSymbols->GetOffsetByLineWide(line,
-                                                               const_cast<ushort*>(file.utf16()),
+                                                               (wchar_t*)(file.utf16()),
                                                                &rc);
     if (FAILED(hr)) {
         *errorMessage = QString::fromLatin1("Unable to determine address of %1:%2 : %3").
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index f5259658e61a23a6e6eec5e73162e049133008d3..e82b87ae695ea507d21827c5c4f5d76ccc7d767f 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -79,6 +79,12 @@
 
 #include <QtHelp/QHelpEngine>
 
+#if !defined(QT_NO_WEBKIT)
+#include <QtWebKit/QWebElement>
+#include <QtWebKit/QWebElementCollection>
+#include <QtWebKit/QWebFrame>
+#endif
+
 using namespace Core::Constants;
 using namespace Help::Internal;
 
@@ -688,13 +694,11 @@ void HelpPlugin::activateContext()
     } else if (m_core->modeManager()->currentMode() == m_mode)
         return;
 
-    QString id;
-    QMap<QString, QUrl> links;
-
     // Find out what to show
+    QMap<QString, QUrl> links;
     if (IContext *context = m_core->currentContextObject()) {
-        id = context->contextHelpId();
-        links = Core::HelpManager::instance()->linksForIdentifier(id);
+        m_idFromContext = context->contextHelpId();
+        links = Core::HelpManager::instance()->linksForIdentifier(m_idFromContext);
     }
 
     if (HelpViewer* viewer = viewerForContextMode()) {
@@ -702,16 +706,24 @@ void HelpPlugin::activateContext()
             // No link found or no context object
             viewer->setHtml(tr("<html><head><title>No Documentation</title>"
                 "</head><body><br/><center><b>%1</b><br/>No documentation "
-                "available.</center></body></html>").arg(id));
+                "available.</center></body></html>").arg(m_idFromContext));
             viewer->setSource(QUrl());
         } else {
             const QUrl &source = *links.begin();
-            if (viewer->source() != source)
+            const QUrl &oldSource = viewer->source();
+            if (source != oldSource) {
+                viewer->stop();
                 viewer->setSource(source);
+            }
             viewer->setFocus();
+            connect(viewer, SIGNAL(loadFinished(bool)), this,
+                SLOT(highlightSearchTerms()));
+
+            if (source.toString().remove(source.fragment())
+                == oldSource.toString().remove(oldSource.fragment())) {
+                    highlightSearchTerms();
+            }
         }
-        if (viewer != m_helpViewerForSideBar)
-            activateHelpMode();
     }
 }
 
@@ -819,6 +831,45 @@ void HelpPlugin::addBookmark()
     manager->showBookmarkDialog(m_centralWidget, viewer->title(), url);
 }
 
+void HelpPlugin::highlightSearchTerms()
+{
+    if (HelpViewer* viewer = viewerForContextMode()) {
+        disconnect(viewer, SIGNAL(loadFinished(bool)), this,
+            SLOT(highlightSearchTerms()));
+
+#if !defined(QT_NO_WEBKIT)
+        const QString &attrValue = m_idFromContext.mid(m_idFromContext
+            .lastIndexOf(QChar(':')) + 1);
+        if (attrValue.isEmpty())
+            return;
+
+        const QWebElement &document = viewer->page()->mainFrame()->documentElement();
+        const QWebElementCollection &collection = document.findAll(QLatin1String("h3.fn a"));
+
+        const QLatin1String property("background-color");
+        foreach (const QWebElement &element, collection) {
+            const QString &name = element.attribute(QLatin1String("name"));
+            if (name.isEmpty())
+                continue;
+
+            if (m_oldAttrValue == name) {
+                QWebElement parent = element.parent();
+                parent.setStyleProperty(property, m_styleProperty);
+            }
+
+            if (attrValue == name) {
+                QWebElement parent = element.parent();
+                m_styleProperty = parent.styleProperty(property,
+                    QWebElement::InlineStyle);
+                parent.setStyleProperty(property, QLatin1String("yellow"));
+            }
+        }
+        m_oldAttrValue = attrValue;
+#endif
+        viewer->findText(m_idFromContext, 0, false, true);
+    }
+}
+
 void HelpPlugin::handleHelpRequest(const QUrl &url)
 {
     if (HelpViewer::launchWithExternalApp(url))
diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h
index a5099db7f7d586e4394aa042ec80b2818e951541..d7927fc221ceedeb2dedd7861142f8ab3b19ad62 100644
--- a/src/plugins/help/helpplugin.h
+++ b/src/plugins/help/helpplugin.h
@@ -98,6 +98,7 @@ private slots:
     void updateCloseButton();
     void setupHelpEngineIfNeeded();
 
+    void highlightSearchTerms();
     void handleHelpRequest(const QUrl &url);
 
 private:
@@ -134,6 +135,10 @@ private:
     Core::MiniSplitter *m_splitter;
 
     QToolButton *m_closeButton;
+
+    QString m_oldAttrValue;
+    QString m_styleProperty;
+    QString m_idFromContext;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qmlinspector/QmlInspector.pluginspec b/src/plugins/qmlinspector/QmlInspector.pluginspec
index 5f217f9ed11b423f6858abdd1a33ce6245068526..618edc2a3bf05b4bcb6c4aee5a12bbfa3deceaa4 100644
--- a/src/plugins/qmlinspector/QmlInspector.pluginspec
+++ b/src/plugins/qmlinspector/QmlInspector.pluginspec
@@ -1,4 +1,4 @@
-<plugin name="QmlInspector" version="2.1.80" compatVersion="2.1.80">
+<plugin name="QmlInspector" version="2.1.80" compatVersion="2.1.80" experimental="true">
     <vendor>Nokia Corporation</vendor>
     <copyright>(C) 2010 Nokia Corporation</copyright>
     <license>