diff --git a/dist/changes-1.3.0 b/dist/changes-1.3.0
new file mode 100644
index 0000000000000000000000000000000000000000..60379adf56ebec18c21027940f0c3eef8e684f72
--- /dev/null
+++ b/dist/changes-1.3.0
@@ -0,0 +1,21 @@
+The QtCreator 1.3 release contains bug fixes and new features.
+
+Below is a list of relevant changes. You can find a complete list of changes
+within the logs of QtCreator's sources. Simply check it out from the public git
+repository e.g.,
+
+git clone git://gitorious.org/qt-creator/qt-creator.git
+git log --pretty=oneline v1.2.0..master
+
+This release introduces source and binary incompatible changes to the plugin
+API, so if you have created your own custom plugins, they will need to be
+adapted accordingly.
+
+General:
+
+
+Project support:
+   * Added support for adding and removing files from a generic Makefile-based
+     project (contributed by Kevin Michel)
+
+...
diff --git a/doc/addressbook-sdk.qdoc b/doc/addressbook-sdk.qdoc
index 3194ad70b2f3d60e55b4519f993f496c763ce77d..6e457d41816508a1a10ed5f835720f2316bda70c 100644
--- a/doc/addressbook-sdk.qdoc
+++ b/doc/addressbook-sdk.qdoc
@@ -734,7 +734,7 @@
     which we subclass in this chapter, to implement a FindDialog class.
 
 
-    \section1 Designing \c FindDialog
+    \section1 Designing The FindDialog
 
     #image
 
@@ -751,7 +751,7 @@
     vertical.
 
 
-    \section1 Implementing \c FindDialog
+    \section1 Implementing The FindDialog Class
 
     Let's look at \c{FindDialog}'s header file. Here, we need to provide
     private members for the class so that we can access the widgets freely
@@ -791,6 +791,34 @@
     we clear the contents of \c lineEdit and hide the dialog.
 
     \snippet examples/addressbook-sdk/part5/finddialog.cpp findClicked
+
+    The \c findText variable has a public getter function, \c getFindText(),
+    associated with it. Since we only ever set \c findText directly in both
+    the constructor and in hte \c findClicked() function, we do not create a
+    setter function to accompany \c getFindText(). Because \c getFindText() is
+    public, classes instantiating and using \c FindDialog can always access the
+    search string that the user has entered and accepted.
+
+    \snippet examples/addressbook-sdk/part5/finddialog.cpp getFindText
+
+
+    \section1 The AddressBook Class
+
+
+    To ensure that we can use \c FindDialog from within our \c AddressBook
+    class, we include \c finddialog.h in the \c addressbook.h file.
+
+    \snippet examples/addressbook-sdk/part5/addressbook.cpp include
+
+    So far, all our address book features have a QPushButton and a
+    corresponding slot. Similarly, for the \gui Find feature, we have
+    \c findButton and \c findContact().
+
+    Within the \c AddressBook class's constructor, we instantiate our private
+    objects, \c findButton and \c findDialog:
+
+    \snippet examples/addressbook-sdk/part5/addressbook.cpp
+
 */
 
 
diff --git a/doc/examples/addressbook-sdk/part5/addressbook.cpp b/doc/examples/addressbook-sdk/part5/addressbook.cpp
index e14d95026fd8c889d5a04486b95f1c02ad3e6b8b..0e7b361ddcc48b4675570160c6f42f95e1f47ebe 100644
--- a/doc/examples/addressbook-sdk/part5/addressbook.cpp
+++ b/doc/examples/addressbook-sdk/part5/addressbook.cpp
@@ -243,6 +243,7 @@ void AddressBook::updateInterface(Mode mode)
     }
 }
 
+//! [findContact]
 void AddressBook::findContact()
 {
     dialog->show();
@@ -262,3 +263,4 @@ void AddressBook::findContact()
 
     updateInterface(NavigationMode);
 }
+//! [findContact]
diff --git a/doc/examples/addressbook-sdk/part5/addressbook.h b/doc/examples/addressbook-sdk/part5/addressbook.h
index 9bc1f75ba38ae82feb74558bb330039f5d475849..c6f9f607283d3963354f64e0a3a2ce52fc65f53a 100644
--- a/doc/examples/addressbook-sdk/part5/addressbook.h
+++ b/doc/examples/addressbook-sdk/part5/addressbook.h
@@ -6,8 +6,9 @@
 #include <QtGui/QLineEdit>
 #include <QtGui/QTextEdit>
 #include <QtGui/QMessageBox>
+//! [include]
 #include "finddialog.h"
-
+//! [include]
 
 namespace Ui
 {
diff --git a/doc/examples/addressbook-sdk/part5/finddialog.cpp b/doc/examples/addressbook-sdk/part5/finddialog.cpp
index 1a464b70903511d3680df80657f1cdc42a30d8d1..63e04a5103978344cd2d599a0898b784655cd6b6 100644
--- a/doc/examples/addressbook-sdk/part5/finddialog.cpp
+++ b/doc/examples/addressbook-sdk/part5/finddialog.cpp
@@ -43,7 +43,9 @@ void FindDialog::findClicked()
 }
 //! [findClicked]
 
+//! [getFindText]
 QString FindDialog::getFindText()
 {
     return findText;
 }
+//! [getFindText]
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.cpp b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.cpp
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.cpp
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.cpp
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.h b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.h
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.h
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.h
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_plugin.pro b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_plugin.pro
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_plugin.pro
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_plugin.pro
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_resources.qrc b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_resources.qrc
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_resources.qrc
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_resources.qrc
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.cpp b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.cpp
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.cpp
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.cpp
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.h b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.h
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.h
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.h
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.cpp b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.cpp
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.cpp
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.cpp
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.h b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.h
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.h
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.h
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_include.pri b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_include.pri
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_include.pri
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_include.pri
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_lib.pro b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_lib.pro
similarity index 100%
rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_lib.pro
rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_lib.pro
diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp
index e1e0bd8c50923a318b4f18568f4f26fc7bd962bd..00b6f8eedabbba680f0dba4900d9d0fe004a7e77 100644
--- a/src/libs/cplusplus/FastPreprocessor.cpp
+++ b/src/libs/cplusplus/FastPreprocessor.cpp
@@ -38,10 +38,22 @@ FastPreprocessor::FastPreprocessor(const Snapshot &snapshot)
 
 QByteArray FastPreprocessor::run(QString fileName, const QString &source)
 {
+#ifdef QTCREATOR_WITH_MERGED_ENVIRONMENT
+    if (Document::Ptr doc = _snapshot.value(fileName)) {
+        _merged.insert(fileName);
+
+        foreach (const Document::Include &i, doc->includes())
+            mergeEnvironment(i.fileName());
+    }
+#endif
+
     const QByteArray preprocessed = _preproc(fileName, source);
     return preprocessed;
 }
 
+void FastPreprocessor::sourceNeeded(QString &fileName, IncludeType, unsigned)
+{ mergeEnvironment(fileName); }
+
 void FastPreprocessor::mergeEnvironment(const QString &fileName)
 {
     if (! _merged.contains(fileName)) {
diff --git a/src/libs/cplusplus/FastPreprocessor.h b/src/libs/cplusplus/FastPreprocessor.h
index bbdbd535ba010ca5834c4a3494ba7b31df99a614..c7e6e2f8b1c8c2032c31174dfe3d4a44b0b73d19 100644
--- a/src/libs/cplusplus/FastPreprocessor.h
+++ b/src/libs/cplusplus/FastPreprocessor.h
@@ -54,8 +54,7 @@ public:
     QByteArray run(QString fileName, const QString &source);
 
     // CPlusPlus::Client
-    virtual void sourceNeeded(QString &fileName, IncludeType, unsigned)
-    { mergeEnvironment(fileName); }
+    virtual void sourceNeeded(QString &fileName, IncludeType, unsigned);
 
     virtual void macroAdded(const Macro &) {}
 
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index 80832275804719a750f472fa9564e4380f319654..372926f59755cb51d82c8bca939498362830d22a 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -771,7 +771,11 @@ void Preprocessor::preprocess(const QString &fileName, const QByteArray &source,
         } else {
 
             if (_dot->whitespace) {
-                const unsigned endOfPreviousToken = (_dot - 1)->end();
+                unsigned endOfPreviousToken = 0;
+
+                if (_dot != _tokens.constBegin())
+                    endOfPreviousToken = (_dot - 1)->end();
+
                 const unsigned beginOfToken = _dot->begin();
 
                 const char *start = _source.constBegin() + endOfPreviousToken;
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index e91c661bff8d840d0d9087eda30865ae165d35ab..9ecdd0fece2b055cd675c42f166a8bbca87487e7 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3143,7 +3143,8 @@ void GdbEngine::handleQueryDebuggingHelper(const GdbResultRecord &record, const
     m_dumperHelper.parseQueryTypes(availableSimpleDebuggingHelpers, QtDumperHelper::GdbDebugger);
 
     if (availableSimpleDebuggingHelpers.isEmpty()) {
-        m_debuggingHelperState = DebuggingHelperUnavailable;
+        if (!m_dumperInjectionLoad) // Retry if thread has not terminated yet.
+            m_debuggingHelperState = DebuggingHelperUnavailable;
         q->showStatusMessage(tr("Debugging helpers not found."));
         //QMessageBox::warning(q->mainWindow(),
         //    tr("Cannot find special data dumpers"),
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
index 0617d1451238d2ff3aa6832b658163ad04c68eae..83042b443b5f9f0920fa6a1e3ff4be6534b81e8d 100644
--- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
+++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
@@ -65,6 +65,8 @@ Core::GeneratedFiles CustomWidgetWizard::generateFiles(const QWizard *w,
     p.name = cw->name();
     p.path = cw->path();
     p.license = CppTools::AbstractEditorSupport::licenseTemplate();
+    p.templatePath = QtWizard::templateDir();
+    p.templatePath += QLatin1String("/customwidgetwizard");
     return PluginGenerator::generatePlugin(p, *(cw->pluginOptions()), errorMessage);
 }
 
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri
index a52a62848a3644f11c3f2eb12a1877ac795172ea..4547080e9611cba10199ee844f038c50e64f5e16 100644
--- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri
+++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri
@@ -22,4 +22,4 @@ FORMS += \
  $$PWD/classdefinition.ui \
  $$PWD/customwidgetwidgetswizardpage.ui \
  $$PWD/customwidgetpluginwizardpage.ui
-RESOURCES +=  $$PWD/templates/templates.qrc
+ 
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp
index b2b67808921f511f56558839cac8b0cfc394b6b7..fdb712892e4506f0cbdae6f51761fbfb660ae2af 100644
--- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp
+++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp
@@ -97,7 +97,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
         sm.clear();
         sm.insert(QLatin1String("SINGLE_INCLUDE_GUARD"), headerGuard(wo.pluginHeaderFile));
         sm.insert(QLatin1String("PLUGIN_CLASS"), wo.pluginClassName);
-        const QString pluginHeaderContents = processTemplate(QLatin1String(":/tpl_single.h"), sm, errorMessage);
+        const QString pluginHeaderContents = processTemplate(p.templatePath + QLatin1String("/tpl_single.h"), sm, errorMessage);
         if (pluginHeaderContents.isEmpty())
             return QList<Core::GeneratedFile>();
         Core::GeneratedFile pluginHeader(baseDir + wo.pluginHeaderFile);
@@ -128,7 +128,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
                     wo.pluginClassName +
                     QLatin1Char(')') :
                 QLatin1String(""));
-        const QString pluginSourceContents = processTemplate(QLatin1String(":/tpl_single.cpp"), sm, errorMessage);
+        const QString pluginSourceContents = processTemplate(p.templatePath + QLatin1String("/tpl_single.cpp"), sm, errorMessage);
         if (pluginSourceContents.isEmpty())
             return QList<Core::GeneratedFile>();
         Core::GeneratedFile pluginSource(baseDir + wo.pluginSourceFile);
@@ -152,9 +152,9 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
             if (pc.headers.isEmpty()) {
                 if (wo.sourceType == PluginOptions::WidgetOptions::LinkLibrary) {
                     pc.library = wo.widgetLibrary;
-                    pc.tmpl = QLatin1String(":/tpl_widget_lib.pro");
+                    pc.tmpl = p.templatePath + QLatin1String("/tpl_widget_lib.pro");
                 } else {
-                    pc.tmpl = QLatin1String(":/tpl_widget_include.pri");
+                    pc.tmpl = p.templatePath + QLatin1String("/tpl_widget_include.pri");
                 }
                 widgetProjectContents.insert(wo.widgetProjectFile, pc);
             } else {
@@ -171,7 +171,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
             sm.insert(QLatin1String("WIDGET_INCLUDE_GUARD"), headerGuard(wo.widgetHeaderFile));
             sm.insert(QLatin1String("WIDGET_BASE_CLASS"), wo.widgetBaseClassName);
             sm.insert(QLatin1String("WIDGET_CLASS"), wo.widgetClassName);
-            const QString widgetHeaderContents = processTemplate(QLatin1String(":/tpl_widget.h"), sm, errorMessage);
+            const QString widgetHeaderContents = processTemplate(p.templatePath + QLatin1String("/tpl_widget.h"), sm, errorMessage);
             if (widgetHeaderContents.isEmpty())
                 return QList<Core::GeneratedFile>();
             Core::GeneratedFile widgetHeader(baseDir + wo.widgetHeaderFile);
@@ -180,7 +180,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
 
             sm.remove(QLatin1String("WIDGET_INCLUDE_GUARD"));
             sm.insert(QLatin1String("WIDGET_HEADER"), wo.widgetHeaderFile);
-            const QString widgetSourceContents = processTemplate(QLatin1String(":/tpl_widget.cpp"), sm, errorMessage);
+            const QString widgetSourceContents = processTemplate(p.templatePath + QLatin1String("/tpl_widget.cpp"), sm, errorMessage);
             if (widgetSourceContents.isEmpty())
                 return QList<Core::GeneratedFile>();
             Core::GeneratedFile widgetSource(baseDir + wo.widgetSourceFile);
@@ -213,7 +213,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
         sm.clear();
         sm.insert(QLatin1String("COLLECTION_INCLUDE_GUARD"), headerGuard(options.collectionHeaderFile));
         sm.insert(QLatin1String("COLLECTION_PLUGIN_CLASS"), options.collectionClassName);
-        const QString collectionHeaderContents = processTemplate(QLatin1String(":/tpl_collection.h"), sm, errorMessage);
+        const QString collectionHeaderContents = processTemplate(p.templatePath + QLatin1String("/tpl_collection.h"), sm, errorMessage);
         if (collectionHeaderContents.isEmpty())
             return QList<Core::GeneratedFile>();
         Core::GeneratedFile collectionHeader(baseDir + options.collectionHeaderFile);
@@ -233,7 +233,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
                 QLatin1String(", ") +
                 options.collectionClassName +
                 QLatin1Char(')'));
-        const QString collectionSourceFileContents = processTemplate(QLatin1String(":/tpl_collection.cpp"), sm, errorMessage);
+        const QString collectionSourceFileContents = processTemplate(p.templatePath + QLatin1String("/tpl_collection.cpp"), sm, errorMessage);
         if (collectionSourceFileContents.isEmpty())
             return QList<Core::GeneratedFile>();
         Core::GeneratedFile collectionSource(baseDir + options.collectionSourceFile);
@@ -262,7 +262,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
     // Create the resource file with the icons.
     sm.clear();
     sm.insert(QLatin1String("ICON_FILES"), iconFiles);
-    const QString resourceFileContents = processTemplate(QLatin1String(":/tpl_resources.qrc"), sm, errorMessage);
+    const QString resourceFileContents = processTemplate(p.templatePath + QLatin1String("/tpl_resources.qrc"), sm, errorMessage);
     if (resourceFileContents.isEmpty())
         return QList<Core::GeneratedFile>();
     Core::GeneratedFile resourceFile(baseDir + options.resourceFile);
@@ -277,7 +277,7 @@ QList<Core::GeneratedFile>  PluginGenerator::generatePlugin(const GenerationPara
     sm.insert(QLatin1String("PLUGIN_RESOURCES"), options.resourceFile);
     sm.insert(QLatin1String("WIDGET_LIBS"), QStringList(widgetLibraries.toList()).join(QString(blank)));
     sm.insert(QLatin1String("INCLUSIONS"), QStringList(widgetProjects.toList()).join(QLatin1String("\n")));
-    const QString proFileContents = processTemplate(QLatin1String(":/tpl_plugin.pro"), sm, errorMessage);
+    const QString proFileContents = processTemplate(p.templatePath + QLatin1String("/tpl_plugin.pro"), sm, errorMessage);
     if (proFileContents.isEmpty())
         return QList<Core::GeneratedFile>();
     Core::GeneratedFile proFile(baseDir + p.name + QLatin1String(".pro"));
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h
index 5d89ca648b7b1d878b3bb5d3790a84ad4e22f5cf..6bc653143b0fb675600362188742d98a44c17e14 100644
--- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h
+++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h
@@ -52,6 +52,7 @@ struct GenerationParameters {
     QString path;
     QString name;
     QString license;
+    QString templatePath;
 };
 
 class PluginGenerator : public QObject
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/templates.qrc b/src/plugins/qt4projectmanager/customwidgetwizard/templates/templates.qrc
deleted file mode 100644
index 804d271dae41eb97653df93939ab3ca4f21e3bc3..0000000000000000000000000000000000000000
--- a/src/plugins/qt4projectmanager/customwidgetwizard/templates/templates.qrc
+++ /dev/null
@@ -1,14 +0,0 @@
-<RCC>
-    <qresource prefix="/" >
-        <file>tpl_widget.h</file>
-        <file>tpl_widget.cpp</file>
-        <file>tpl_widget_include.pri</file>
-        <file>tpl_widget_lib.pro</file>
-        <file>tpl_single.h</file>
-        <file>tpl_single.cpp</file>
-        <file>tpl_collection.h</file>
-        <file>tpl_collection.cpp</file>
-        <file>tpl_plugin.pro</file>
-        <file>tpl_resources.qrc</file>
-    </qresource>
-</RCC>