diff --git a/doc/api/coding-style.qdoc b/doc/api/coding-style.qdoc
index a8afd6a3988a304f89d64f496b901be1d1ddda95..7ea0f6eec3110167b262e43769f703e012058bbf 100644
--- a/doc/api/coding-style.qdoc
+++ b/doc/api/coding-style.qdoc
@@ -17,7 +17,6 @@
 ****************************************************************************/
 
 /*!
-    \contentspage{index.html}{Qt Creator}
     \previouspage qtcreator-ui-text.html
     \page coding-style.html
     \nextpage qtcreator-api.html
diff --git a/doc/api/external-tool-spec.qdoc b/doc/api/external-tool-spec.qdoc
index a87456d97d7b61b7d9a421a9fb740eba63aaca91..6dd114fad45f6c19645bd98c130b68371e6a8120 100644
--- a/doc/api/external-tool-spec.qdoc
+++ b/doc/api/external-tool-spec.qdoc
@@ -17,7 +17,6 @@
 ****************************************************************************/
 
 /*!
-    \contentspage{index.html}{Qt Creator}
     \page external-tool-spec.html
     \nextpage coding-style.html
 
diff --git a/doc/api/qtcreator-api.qdoc b/doc/api/qtcreator-api.qdoc
index 8dcd8967bd9ab52b18a456f53beeb8fde8383810..464e791c5b19828f076051be07fbcfbaba5a3489 100644
--- a/doc/api/qtcreator-api.qdoc
+++ b/doc/api/qtcreator-api.qdoc
@@ -17,7 +17,6 @@
 ****************************************************************************/
 
 /*!
-    \contentspage{index.html}{Extending Qt Creator Manual}
     \page qtcreator-api.html
 
     \title Qt Creator API Reference
diff --git a/doc/api/qtcreator-dev.qdoc b/doc/api/qtcreator-dev.qdoc
index 51eb4bac9bd7e319fb7657adead5a1a839b3ed6e..8a421f35b3c0666ec11839de45776612bd557e3d 100644
--- a/doc/api/qtcreator-dev.qdoc
+++ b/doc/api/qtcreator-dev.qdoc
@@ -17,7 +17,7 @@
 ****************************************************************************/
 
 /*!
-    \page index.html
+    \page extending-index.html
     \title Extending Qt Creator Manual
 
     Qt Creator is a cross-platform integrated development environment (IDE)
diff --git a/doc/api/qtcreator-documentation.qdoc b/doc/api/qtcreator-documentation.qdoc
index 90fdcda6b79547241ec9a19209a354d2256e73b3..d89329e2c2aa36142b8bbcd6aaaf9f493f860495 100644
--- a/doc/api/qtcreator-documentation.qdoc
+++ b/doc/api/qtcreator-documentation.qdoc
@@ -17,7 +17,6 @@
 ****************************************************************************/
 
 /*!
-    \contentspage{index.html}{Qt Creator}
     \previouspage external-tool-spec.html
     \page qtcreator-documentation.html
     \nextpage coding-style.html
diff --git a/doc/api/qtcreator-ui-text.qdoc b/doc/api/qtcreator-ui-text.qdoc
index a352af2bb77c6688c63b5ec3139e2e79dc30c513..4ca8091517144eddb12d56ed807b9b8a77c1b42c 100644
--- a/doc/api/qtcreator-ui-text.qdoc
+++ b/doc/api/qtcreator-ui-text.qdoc
@@ -17,7 +17,6 @@
 ****************************************************************************/
 
 /*!
-    \contentspage{index.html}{Qt Creator}
     \previouspage external-tool-spec.html
     \page qtcreator-ui-text.html
     \nextpage coding-style.html
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 800b43403dafdbecf0ca90f73127106d8fcd9da1..718d96061a26cbc9b7e67e21f926fb15c33ce189 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -779,6 +779,7 @@ AndroidConfigurations::AndroidConfigurations(QObject *parent)
 
 void AndroidConfigurations::load()
 {
+    bool saveSettings = false;
     QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup(SettingsGroup);
     m_config = AndroidConfig(*settings);
@@ -787,11 +788,61 @@ void AndroidConfigurations::load()
         Utils::Environment env = Utils::Environment::systemEnvironment();
         QString location = env.searchInPath(QLatin1String("ant"));
         QFileInfo fi(location);
-        if (fi.exists() && fi.isExecutable() && !fi.isDir())
+        if (fi.exists() && fi.isExecutable() && !fi.isDir()) {
             m_config.antLocation = Utils::FileName::fromString(location);
+            saveSettings = true;
+        }
+    }
+
+    if (m_config.openJDKLocation.isEmpty()) {
+        Utils::Environment env = Utils::Environment::systemEnvironment();
+        QString location = env.searchInPath(QLatin1String("javac"));
+        QFileInfo fi(location);
+        if (fi.exists() && fi.isExecutable() && !fi.isDir()) {
+            QDir parentDirectory = fi.canonicalPath();
+            parentDirectory.cdUp(); // one up from bin
+            m_config.openJDKLocation = Utils::FileName::fromString(parentDirectory.absolutePath());
+            saveSettings = true;
+        } else if (Utils::HostOsInfo::isWindowsHost()) {
+            QSettings settings(QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Javasoft\\Java Development Kit"), QSettings::NativeFormat);
+            QStringList allVersions = settings.childGroups();
+            QString javaHome;
+            int major = -1;
+            int minor = -1;
+            foreach (const QString &version, allVersions) {
+                QStringList parts = version.split(QLatin1String("."));
+                if (parts.size() != 2) // not interested in 1.7.0_u21
+                    continue;
+                bool okMajor, okMinor;
+                int tmpMajor = parts.at(0).toInt(&okMajor);
+                int tmpMinor = parts.at(1).toInt(&okMinor);
+                if (!okMajor || !okMinor)
+                    continue;
+                if (tmpMajor > major
+                        || (tmpMajor == major
+                            && tmpMinor > minor)) {
+                    settings.beginGroup(version);
+                    QString tmpJavaHome = settings.value(QLatin1String("JavaHome")).toString();
+                    settings.endGroup();
+                    if (!QFileInfo(tmpJavaHome).exists())
+                        continue;
+
+                    major = tmpMajor;
+                    minor = tmpMinor;
+                    javaHome = tmpJavaHome;
+                }
+            }
+            if (!javaHome.isEmpty()) {
+                m_config.openJDKLocation = Utils::FileName::fromString(javaHome);
+                saveSettings = true;
+            }
+        }
     }
 
     settings->endGroup();
+
+    if (saveSettings)
+        save();
 }
 
 void AndroidConfigurations::updateAndroidDevice()
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index a47e6fccb0d4fd910f029335ec99b47ab3fb1072..38cfe6eece2bc8e497be86b59649e57c943a998f 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -550,9 +550,14 @@ void AndroidManager::updateTarget(ProjectExplorer::Target *target, const QString
 {
     QString androidDir = dirPath(target).toString();
 
+    Utils::Environment env = Utils::Environment::systemEnvironment();
+    QString javaHome = AndroidConfigurations::instance().config().openJDKLocation.toString();
+    if (!javaHome.isEmpty())
+        env.set(QLatin1String("JAVA_HOME"), javaHome);
     // clean previous build
     QProcess androidProc;
     androidProc.setWorkingDirectory(androidDir);
+    androidProc.setProcessEnvironment(env.toProcessEnvironment());
     androidProc.start(AndroidConfigurations::instance().antToolPath().toString(),
                       QStringList() << QLatin1String("clean"));
     if (!androidProc.waitForFinished(-1))
diff --git a/src/plugins/android/androidpackagecreationstep.cpp b/src/plugins/android/androidpackagecreationstep.cpp
index 6dc511910303ceb8ba090b6d30c3b2950c731497..0030bb78b8786dc890578a55c43f15c727d5942f 100644
--- a/src/plugins/android/androidpackagecreationstep.cpp
+++ b/src/plugins/android/androidpackagecreationstep.cpp
@@ -169,6 +169,7 @@ bool AndroidPackageCreationStep::init()
     m_certificatePasswdForRun = m_certificatePasswd;
     m_jarSigner = AndroidConfigurations::instance().jarsignerPath();
     m_zipAligner = AndroidConfigurations::instance().zipalignPath();
+    m_environment = bc->environment();
 
     ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit());
     if (tc->type() != QLatin1String(Constants::ANDROID_TOOLCHAIN_TYPE))
@@ -686,6 +687,7 @@ bool AndroidPackageCreationStep::createPackage()
     emit addOutput(tr("Creating package file ..."), MessageOutput);
 
     QProcess *const buildProc = new QProcess;
+    buildProc->setProcessEnvironment(m_environment.toProcessEnvironment());
 
     connect(buildProc, SIGNAL(readyReadStandardOutput()), this,
         SLOT(handleBuildStdOutOutput()));
@@ -802,6 +804,10 @@ bool AndroidPackageCreationStep::runCommand(QProcess *buildProc
         return false;
     }
     buildProc->waitForFinished(-1);
+
+    handleProcessOutput(buildProc, false);
+    handleProcessOutput(buildProc, true);
+
     if (buildProc->error() != QProcess::UnknownError
         || buildProc->exitCode() != 0) {
         QString mainMessage = tr("Packaging Error: Command '%1 %2' failed.")
@@ -821,13 +827,7 @@ void AndroidPackageCreationStep::handleBuildStdOutOutput()
     QProcess *const process = qobject_cast<QProcess *>(sender());
     if (!process)
         return;
-
-    process->setReadChannel(QProcess::StandardOutput);
-    while (process->canReadLine()) {
-        QString line = QString::fromLocal8Bit(process->readLine());
-        m_outputParser.stdOutput(line);
-        emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
-    }
+    handleProcessOutput(process, false);
 }
 
 void AndroidPackageCreationStep::handleBuildStdErrOutput()
@@ -836,11 +836,21 @@ void AndroidPackageCreationStep::handleBuildStdErrOutput()
     if (!process)
         return;
 
-    process->setReadChannel(QProcess::StandardError);
+    handleProcessOutput(process, true);
+}
+
+void AndroidPackageCreationStep::handleProcessOutput(QProcess *process, bool stdErr)
+{
+    process->setReadChannel(stdErr ? QProcess::StandardError : QProcess::StandardOutput);
     while (process->canReadLine()) {
         QString line = QString::fromLocal8Bit(process->readLine());
-        m_outputParser.stdError(line);
-        emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline);
+        if (stdErr)
+            m_outputParser.stdError(line);
+        else
+            m_outputParser.stdOutput(line);
+        emit addOutput(line, stdErr ? BuildStep::ErrorOutput
+                                    : BuildStep::NormalOutput,
+                       BuildStep::DontAppendNewline);
     }
 }
 
diff --git a/src/plugins/android/androidpackagecreationstep.h b/src/plugins/android/androidpackagecreationstep.h
index 19c01682937ccdc8cd33edda2bb067a2f428c27e..bc7336cd2ad0885cc45f6d0aa27bcc0599d361f1 100644
--- a/src/plugins/android/androidpackagecreationstep.h
+++ b/src/plugins/android/androidpackagecreationstep.h
@@ -35,6 +35,7 @@
 
 #include <projectexplorer/abi.h>
 #include <projectexplorer/buildstep.h>
+#include <utils/environment.h>
 
 #include <QAbstractItemModel>
 
@@ -113,6 +114,7 @@ private:
     static const Core::Id CreatePackageId;
 
 private:
+    void handleProcessOutput(QProcess *process, bool stdErr);
     Utils::FileName m_keystorePath;
     QString m_keystorePasswd;
     QString m_certificateAlias;
@@ -139,10 +141,10 @@ private:
     QStringList m_qtLibsWithDependencies;
     QVector<AndroidManager::Library> m_availableQtLibs;
     QStringList m_prebundledLibs;
-
     QStringList m_bundledJars;
     QStringList m_otherBundledFiles;
     bool m_bundleQt;
+    Utils::Environment m_environment;
 };
 
 } // namespace Internal
diff --git a/src/plugins/android/androidpackageinstallationstep.cpp b/src/plugins/android/androidpackageinstallationstep.cpp
index 629c857a90e032818c3ea16e854e4d03aa509b9a..7b69ac34674c0b46b2c65be70406f0c5f5c9d7e7 100644
--- a/src/plugins/android/androidpackageinstallationstep.cpp
+++ b/src/plugins/android/androidpackageinstallationstep.cpp
@@ -31,6 +31,11 @@
 #include "androidmanager.h"
 
 #include <projectexplorer/buildsteplist.h>
+#include <projectexplorer/target.h>
+#include <projectexplorer/buildconfiguration.h>
+#include <utils/hostosinfo.h>
+
+#include <QDir>
 
 using namespace Android::Internal;
 
@@ -50,6 +55,14 @@ AndroidPackageInstallationStep::AndroidPackageInstallationStep(ProjectExplorer::
 
 bool AndroidPackageInstallationStep::init()
 {
-    setUserArguments(QString::fromLatin1("INSTALL_ROOT=\"%1\" install").arg(AndroidManager::dirPath(target()).toUserOutput()));
+    ProjectExplorer::BuildConfiguration *bc = buildConfiguration();
+    if (!bc)
+        bc = target()->activeBuildConfiguration();
+    QString dirPath = AndroidManager::dirPath(target()).toString();
+    if (Utils::HostOsInfo::isWindowsHost())
+        if (bc->environment().searchInPath(QLatin1String("sh.exe")).isEmpty())
+            dirPath = QDir::toNativeSeparators(dirPath);
+    setUserArguments(QString::fromLatin1("INSTALL_ROOT=\"%1\" install").arg(dirPath));
+
     return MakeStep::init();
 }
diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp
index 359b2ea2ed38f913bb250e9247c050ab407c1957..e88b2fa7ae7ac068cda75f44d5f5a7ccb9b7162a 100644
--- a/src/plugins/android/androidtoolchain.cpp
+++ b/src/plugins/android/androidtoolchain.cpp
@@ -113,6 +113,9 @@ void AndroidToolChain::addToEnvironment(Environment &env) const
     env.set(QLatin1String("ANDROID_NDK_TOOLCHAIN_PREFIX"), AndroidConfigurations::toolchainPrefix(targetAbi().architecture()));
     env.set(QLatin1String("ANDROID_NDK_TOOLS_PREFIX"), AndroidConfigurations::toolsPrefix(targetAbi().architecture()));
     env.set(QLatin1String("ANDROID_NDK_TOOLCHAIN_VERSION"), m_ndkToolChainVersion);
+    QString javaHome = AndroidConfigurations::instance().openJDKPath().toString();
+    if (!javaHome.isEmpty() && QFileInfo(javaHome).exists())
+        env.set(QLatin1String("JAVA_HOME"), javaHome);
 }
 
 bool AndroidToolChain::operator ==(const ToolChain &tc) const
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 89e63aceb798d0fb4547c3f6c2b17f2c18d2443d..52855dd790a71b1429dac621c6039af31029a7af 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -85,7 +85,7 @@ contains(QT_CONFIG, declarative)|!isEmpty(QT.declarative.name) {
         }
     }
 } else {
-    warning("QmlProjectManager, QmlProfiler and QmlDesigner plugins have been disabled: The plugins require QtDeclarative");
+    warning("QmlProjectManager, QmlProfiler and QmlDesigner plugins have been disabled: The plugins require QtDeclarative")
 }
 
 for(p, SUBDIRS) {
diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp
index d6b3dccf970052ac5bf0d84ed9c4775a53dab10c..a7883f506c823f8c7174d7f60ecb26a834578084 100644
--- a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp
+++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp
@@ -41,6 +41,11 @@ LocalQmlProfilerRunner::LocalQmlProfilerRunner(const Configuration &configuratio
             this, SIGNAL(appendMessage(QString,Utils::OutputFormat)));
 }
 
+LocalQmlProfilerRunner::~LocalQmlProfilerRunner()
+{
+    disconnect();
+}
+
 void LocalQmlProfilerRunner::start()
 {
     QString arguments = QString::fromLatin1("-qmljsdebugger=port:%1,block").arg(m_configuration.port);
diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.h b/src/plugins/qmlprofiler/localqmlprofilerrunner.h
index 042df146252aef04e76c0009816ed91226af5974..26a9b4516182c2172072169d4a2726e104fc180d 100644
--- a/src/plugins/qmlprofiler/localqmlprofilerrunner.h
+++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.h
@@ -52,6 +52,7 @@ public:
     };
 
     explicit LocalQmlProfilerRunner(const Configuration &configuration, QObject *parent = 0);
+    ~LocalQmlProfilerRunner();
 
     // AbstractQmlProfilerRunner
     virtual void start();
diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp
index ce65ee8e497cbb6ac68df0ff87ab2667c50a4b5f..02398eff93875da52203668bcb9a5f3b43c70fe1 100644
--- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp
@@ -65,7 +65,7 @@ class QmlProfilerEngine::QmlProfilerEnginePrivate
 {
 public:
     QmlProfilerEnginePrivate(QmlProfilerEngine *qq, const AnalyzerStartParameters &sp) : q(qq), m_runner(0), sp(sp) {}
-    ~QmlProfilerEnginePrivate() { m_runner->disconnect(); delete m_runner; }
+    ~QmlProfilerEnginePrivate() { delete m_runner; }
 
     bool attach(const QString &address, uint port);
     AbstractQmlProfilerRunner *createRunner(ProjectExplorer::RunConfiguration *runConfiguration,
@@ -161,7 +161,6 @@ bool QmlProfilerEngine::start()
     QTC_ASSERT(d->m_profilerState, return false);
 
     if (d->m_runner) {
-        d->m_runner->disconnect();
         delete d->m_runner;
         d->m_runner = 0;
     }
@@ -378,7 +377,6 @@ void QmlProfilerEngine::profilerStateChanged()
         // (a new one will be created at start)
         d->m_noDebugOutputTimer.stop();
         if (d->m_runner) {
-            d->m_runner->disconnect();
             delete d->m_runner;
             d->m_runner = 0;
         }