diff --git a/doc/api/plugin-specifications.qdoc b/doc/api/plugin-specifications.qdoc
new file mode 100644
index 0000000000000000000000000000000000000000..6469dff998c80178c4d68499b174ddd01f109035
--- /dev/null
+++ b/doc/api/plugin-specifications.qdoc
@@ -0,0 +1,249 @@
+/****************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (info@qt.nokia.com)
+**
+**
+** GNU Free Documentation License
+**
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of this
+** file.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at info@qt.nokia.com.
+**
+****************************************************************************/
+
+/*!
+    \page plugin-specifications.html
+    \title Plugin Specifications
+
+    The specification of a plugin is an XML file that contains all
+    information that is necessary for loading the plugin's library,
+    determining whether plugins are to be loaded and in which order (depending
+    on e.g. dependencies). In addition, it contains textual descriptions of
+    who created the plugin, what it is for, and where to find more information about it.
+    The file must be located in (a subdir of) one of the plugin manager's
+    plugin search paths, and must have the \c .pluginspec extension.
+
+    \section2 Main Tag
+
+    The root tag is \c plugin. It has the mandatory attributes \c name
+    and \c version, and the optional attributes \c compatVersion and \c experimental.
+    \table
+        \header
+            \o Tag
+            \o Meaning
+        \row
+            \o plugin
+            \o Root element in a plugin's XML file.
+    \endtable
+    \table
+        \header
+            \o Attribute
+            \o Meaning
+        \row
+            \o name
+            \o This is used as an identifier for the plugin and can e.g.
+               be referenced in other plugin's dependencies. It is
+               also used to construct the name of the plugin library
+               as \c{lib[name].[dll|.so|.dylib]}. (Depending on platform.
+               If you use the same string as the \c TARGET in your plugin's
+               .pro-file, you are fine.)
+        \row
+            \o version
+            \o Version string in the form \c{x.y.z_n}, used for identifying
+               the plugin. Also see \l{A Note on Plugin Versions}.
+        \row
+            \o compatVersion
+            \o Optional. If not given, it is implicitly
+               set to the same value as \c version. The compatibility version
+               states which version of this plugin the current version is
+               binary backward compatible with and is used to resolve dependencies
+               on this plugin. I.e. a \c version of \c{2.1.1} and a
+               \c compatVersion of \c{2.0.0} means that this version \c{2.1.1} of the plugin
+               is binary backward compatible with all versions of the plugin down to \c{2.0.0}
+               (inclusive).
+        \row
+            \o experimental
+            \o Optional. Can be \c yes or \c no, defaults to \c no.
+               Experimental plugins are not loaded by default but must be explicitly
+               enabled by the user.
+    \endtable
+
+    \section2 Plugin-describing Tags
+
+    These are direct children of the \c plugin tag, and are solely used
+    for more detailed (user centric) description of the plugin. All of these
+    are optional.
+    \table
+        \header
+            \o Tag
+            \o Meaning
+        \row
+            \o category
+            \o Defaults to \c Utilities. Is used to put related plugins
+               under the same tree node in the plugin overview \gui{About Plugins...}.
+        \row
+            \o vendor
+            \o String that describes the plugin creator/vendor,
+               like \c{MyCompany}.
+        \row
+            \o copyright
+            \o A short copyright notice, like \c{(C) 2007-2008 MyCompany}.
+        \row
+            \o license
+            \o Possibly multi-line license information about the plugin.
+               Should still be kept relatively short, since the UI is not
+           designed for long texts.
+        \row
+            \o description
+            \o Possibly multi-line description of what the plugin is supposed
+               to provide.
+               Should still be kept relatively short, since the UI is not
+           designed for long texts.
+        \row
+            \o url
+            \o Link to further information about the plugin, like
+               \c{http://www.mycompany-online.com/products/greatplugin}.
+    \endtable
+
+    \section2 Dependencies
+
+    A plugin can have dependencies on other plugins. These are
+    specified in the plugin description, to ensure that
+    these other plugins are loaded before this plugin.
+
+    The XML element that describes a single dependency is the \c dependency tag,
+    with required attributes \c name and \c version. All \c dependency tags
+    must be enclosed in a single \c dependencyList tag, which is an optional
+    child of the \c plugin tag.
+
+    The following formulas illustrate how the dependency information is matched.
+    In the formulas the name of the required plugin (as defined in the attributes
+    of the \c dependency tag) is denoted as \c dependencyName
+    and the required version of the plugin is denoted as \c dependencyVersion.
+    A plugin with given \c name, \c version and \c compatVersion
+    (as defined in the attributes of the plugin's \c plugin tag) matches
+    the dependency if
+    \list
+        \o its \c name matches \c dependencyName, and
+        \o \c {compatVersion <= dependencyVersion <= version}.
+    \endlist
+    For example a dependency
+    \code
+        <dependency name="SomeOtherPlugin" version="2.3.0_2"/>
+    \endcode
+    would be matched by a plugin with
+    \code
+        <plugin name="SomeOtherPlugin" version="3.1.0" compatVersion="2.2.0">
+    \endcode
+    since the name matches, and the version \c{2.3.0_2} given in the dependency tag
+    lies in the range of \c{2.2.0} and \c{3.1.0}.
+
+    \table
+        \header
+            \o Tag
+            \o Meaning
+        \row
+            \o dependency
+            \o Describes a dependency on another plugin.
+    \endtable
+    \table
+        \header
+            \o Attribute
+            \o Meaning
+        \row
+            \o name
+            \o The name of the plugin, on which this plugin relies.
+        \row
+            \o version
+            \o The version to which the plugin must be compatible to
+               fill the dependency, in the form \c{x.y.z_n}.
+               Can be empty if the version does not matter.
+        \row
+            \o type
+        \o Optional. Value \c required or \c optional. Defines if the dependency is
+           a hard requirement or optional. Defaults to \c{required}.
+    \endtable
+
+    \section2 Command Line Arguments
+
+    Plugins can register command line arguments that the user can give
+    when starting the application. These command line arguments are shown
+    with a one-line description when the user runs the application with
+    the \c{-help} command line argument, and the plugin manager does its command
+    line parsing and sanity checks based on that information.
+    If the plugin manager finds matching command line arguments for a plugin,
+    it passes them on to the plugin's \l{IPlugin::initialize} method.
+
+    All command line argument definitions are enclosed by a single \c argumentList
+    tag. The individual command line arguments are defined by the \c argument tag,
+    with required attribute \c name and an optional attribute \c parameter if the
+    command line argument takes an additional parameter. The text that is enclosed
+    in the \c argument tag is used as a (one-line) description in the command line
+    argument help.
+
+    \table
+        \header
+            \o Tag
+            \o Meaning
+        \row
+            \o argument
+            \o Describes a command line argument that the plugin wants to handle.
+    \endtable
+    \table
+        \header
+            \o Attribute
+            \o Meaning
+        \row
+            \o name
+            \o The command line argument itself, including the \c - prefix, e.g.
+               \c{-my-parameter}.
+        \row
+            \o parameter
+            \o Optional. If this is given, the command line argument expects an
+               additional parameter, e.g. \c{-my-parameter somevalue}. The
+               value of this attribute is used as a very short description of the
+               parameter for the user.
+    \endtable
+
+    \section2 Example \c Test.pluginspec
+
+    \code
+    <plugin name="Test" version="1.0.1" compatVersion="1.0.0">
+            <vendor>MyCompany</vendor>
+            <copyright>(C) 2007 MyCompany</copyright>
+            <license>
+        This is a default license bla
+        blubbblubb
+        end of terms
+            </license>
+            <description>
+        This plugin is just a test.
+        it demonstrates the great use of the plugin spec.
+            </description>
+            <url>http://www.mycompany-online.com/products/greatplugin</url>
+            <dependencyList>
+                <dependency name="SomeOtherPlugin" version="2.3.0_2"/>
+                <dependency name="EvenOther" version="1.0.0"/>
+            </dependencyList>
+            <argumentList>
+                <argument name="-variant" parameter="fancy|boring">Brings up the fancy or boring user interface</argument>
+            </argumentList>
+        </plugin>
+    \endcode
+
+    \section2 A Note on Plugin Versions
+
+    Plugin versions are in the form \c{x.y.z_n} where, \c x, \c y, \c z and \c n are
+    non-negative integer numbers. You don't have to specify the version
+    in this full form - any left-out part will implicitly be set to zero.
+    So, \c{2.10_2} is equal to \c{2.10.0_2}, and \c 1 is the same as \c{1.0.0_0}.
+
+*/
diff --git a/doc/doc.pri b/doc/doc.pri
index 8b5995c105391b51d7fd463ecaff3c25cd8ea8f1..be1c1dcf0bbaa394ab68c8bf8361cb0607428f82 100644
--- a/doc/doc.pri
+++ b/doc/doc.pri
@@ -54,6 +54,7 @@ DEV_HELP_DEP_FILES = \
     $$PWD/api/creating-plugins.qdoc \
     $$PWD/api/getting-and-building.qdoc \
     $$PWD/api/first-plugin.qdoc \
+    $$PWD/api/plugin-specifications.qdoc \
     $$PWD/api/qtcreator-dev.qdocconf
 
 dev_html_docs.commands = $$qdoc($$OUT_PWD/doc/html-dev) $$PWD/api/qtcreator-dev.qdocconf
diff --git a/src/libs/extensionsystem/iplugin.cpp b/src/libs/extensionsystem/iplugin.cpp
index 8748d9ed0999b5e7f506d679589d4e75d5c1c595..ff2df1e11a2f763db6f5e3a1ce337015320c8061 100644
--- a/src/libs/extensionsystem/iplugin.cpp
+++ b/src/libs/extensionsystem/iplugin.cpp
@@ -48,167 +48,29 @@
     \tableofcontents
 
     \section1 Plugin Specification
-    The plugin specification file is an xml file that contains all
-    information that are necessary for loading the plugin's library,
-    plus some textual descriptions. The file must be located in
-    (a subdir of) one of the plugin manager's plugin search paths,
-    and must have the \c .xml extension.
 
-    \section2 Main Tag
-    The root tag is \c plugin. It has mandatory attributes \c name
-    and \c version, and an optional \c compatVersion.
-    \table
-    \header
-        \o Tag
-        \o Meaning
-    \row
-        \o plugin
-        \o Root element in a plugin's xml file.
-    \endtable
-    \table
-    \header
-        \o Attribute
-        \o Meaning
-    \row
-        \o name
-        \o This is used as an identifier for the plugin and can e.g.
-           be referenced in other plugin's dependencies. It is
-           also used to construct the name of the plugin library
-           as \c lib[name].[dll|.so|.dylib].
-    \row
-        \o version
-        \o Version string in the form \c {"x.y.z_n"}, used for identifying
-           the plugin.
-    \row
-        \o compatVersion
-        \o Compatibility version. Optional. If not given, it is implicitly
-           set to the same value as \c version. The compatibility version
-           is used to resolve dependencies on this plugin. See
-           \l {Dependencies}{Dependencies} for details.
-    \endtable
-
-    \section2 Plugin-describing Tags
-    These are direct children of the \c plugin tag, and are solely used
-    for more detailed (user centric) description of the plugin. All of these
-    are optional.
-    \table
-    \header
-        \o Tag
-        \o Meaning
-    \row
-        \o vendor
-        \o String that describes the plugin creator/vendor,
-           like \c {MyCompany}.
-    \row
-        \o copyright
-        \o A short copyright notice, like \c {(C) 2007-2008 MyCompany}.
-    \row
-        \o license
-        \o Possibly multi-line license information about the plugin.
-    \row
-        \o description
-        \o Possibly multi-line description of what the plugin is supposed
-           to provide.
-    \row
-        \o url
-        \o Link to further information about the plugin, like
-           \c {http://www.mycompany-online.com/products/greatplugin}.
-    \endtable
-
-    \section2 Dependencies
-    A plugin can have dependencies on other plugins. These are
-    specified in the plugin's xml file as well, to ensure that
-    these other plugins are loaded before this plugin.
-    Dependency information consists of the name of the required plugin
-    (lets denote that as \c {dependencyName}),
-    and the required version of the plugin (\c {dependencyVersion}).
-    A plugin with given \c name, \c version and \c compatVersion matches
-    the dependency if
-    \list
-        \o its \c name matches \c dependencyName, and
-        \o \c {compatVersion <= dependencyVersion <= version}.
-    \endlist
-
-    The xml element that describes dependencies is the \c dependency tag,
-    with required attributes \c name and \c version. It is an
-    optional direct child of the \c plugin tag and can appear multiple times.
-    \table
-    \header
-        \o Tag
-        \o Meaning
-    \row
-        \o dependency
-        \o Describes a dependency on another plugin.
-    \endtable
-    \table
-    \header
-        \o Attribute
-        \o Meaning
-    \row
-        \o name
-        \o The name of the plugin, on which this plugin relies.
-    \row
-        \o version
-        \o The version to which the plugin must be compatible to
-           fill the dependency, in the form \c {"x.y.z_n"}.
-           Can be empty if the version does not matter.
-    \row
-        \o type
-        \o Value 'required' or 'optional'. Defines if the dependency is
-           a hard requirement or optional. Defaults to 'required'.
-    \endtable
-
-    \section2 Example \c plugin.xml
-    \code
-        <plugin name="test" version="1.0.1" compatVersion="1.0.0">
-            <vendor>MyCompany</vendor>
-            <copyright>(C) 2007 MyCompany</copyright>
-            <license>
-        This is a default license bla
-        blubbblubb
-        end of terms
-            </license>
-            <description>
-        This plugin is just a test.
-            it demonstrates the great use of the plugin spec.
-            </description>
-            <url>http://www.mycompany-online.com/products/greatplugin</url>
-            <dependencyList>
-                <dependency name="SomeOtherPlugin" version="2.3.0_2"/>
-                <dependency name="EvenOther" version="1.0.0"/>
-            </dependencyList>
-        </plugin>
-    \endcode
-    The first dependency could for example be matched by a plugin with
-    \code
-        <plugin name="SomeOtherPlugin" version="3.1.0" compatVersion="2.2.0">
-        </plugin>
-    \endcode
-    since the name matches, and the version \c "2.3.0_2" given in the dependency tag
-    lies in the range of \c "2.2.0" and \c "3.1.0".
-
-    \section2 A Note on Plugin Versions
-    Plugin versions are in the form \c "x.y.z_n" where, x, y, z and n are
-    non-negative integer numbers. You don't have to specify the version
-    in this full form - any left-out part will implicitly be set to zero.
-    So, \c "2.10_2" is equal to \c "2.10.0_2", and "1" is the same as "1.0.0_0".
+    A plugin needs to provide a plugin specification file in addition
+    to the actual plugin library, so the plugin manager can find the plugin,
+    resolve its dependencies, and load it. For more information,
+    see \l{Plugin Specifications}.
 
     \section1 Plugin Implementation
     Plugins must provide one implementation of the IPlugin class, located
     in a library that matches the \c name attribute given in their
-    xml description. The IPlugin implementation must be exported and
-    made known to Qt's plugin system via the Q_EXPORT_PLUGIN macro, see the
-    Qt documentation for details on that.
+    XML description. The IPlugin implementation must be exported and
+    made known to Qt's plugin system, see the Qt Documentation on the
+    \l{http://doc.qt.nokia.com/4.7/qtplugin.html#Q_EXPORT_PLUGIN2}
+    {Q_EXPORT_PLUGIN2 macro}.
 
-    After the plugins' xml files have been read, and dependencies have been
+    After the plugins' XML files have been read, and dependencies have been
     found, the plugin loading is done in three phases:
     \list 1
-    \o All plugin libraries are loaded in 'root-to-leaf' order of the
+    \o All plugin libraries are loaded in \e{root-to-leaf} order of the
        dependency tree.
-    \o All plugins' initialize methods are called in 'root-to-leaf' order
+    \o All plugins' initialize methods are called in \e{root-to-leaf} order
        of the dependency tree. This is a good place to put
        objects in the plugin manager's object pool.
-    \o All plugins' extensionsInitialized methods are called in 'leaf-to-root'
+    \o All plugins' extensionsInitialized methods are called in \e{leaf-to-root}
        order of the dependency tree. At this point, plugins can
        be sure that all plugins that depend on this plugin have
        been initialized completely (implying that they have put