diff --git a/share/qtcreator/templates/wizards/plaincapp-cmake/wizard.xml b/share/qtcreator/templates/wizards/plaincapp-cmake/wizard.xml
index d97b6ef5b617027213df5a2d56318da0deca911b..4751aa86d7701b7937d068da062f5fe4c99006b8 100644
--- a/share/qtcreator/templates/wizards/plaincapp-cmake/wizard.xml
+++ b/share/qtcreator/templates/wizards/plaincapp-cmake/wizard.xml
@@ -37,7 +37,7 @@ the project file goes last.
 The "class" and "firstpage" attributes specify that it is a Qt 4 wizard and
 leave room for the Qt 4 target page.
 -->
-<wizard version="1" kind="project" firstpage="10" id="S.Plain C (CMake)" category="I.Projects">
+<wizard version="1" kind="project" firstpage="10" id="S.Plain C (CMake)" category="I.Projects" featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
     <icon>console.png</icon>
     <description>Creates a plain C project using CMake, not using the Qt library.</description>
     <displayname>Plain C Project (CMake Build)</displayname>;
diff --git a/share/qtcreator/templates/wizards/plaincapp/wizard.xml b/share/qtcreator/templates/wizards/plaincapp/wizard.xml
index a5b860245ec8de7e7d84b266b9442bfed8d3ec11..057f84e7708a30acc5f97e393754d4ad122fb667 100644
--- a/share/qtcreator/templates/wizards/plaincapp/wizard.xml
+++ b/share/qtcreator/templates/wizards/plaincapp/wizard.xml
@@ -39,7 +39,8 @@ leave room for the Qt 4 target page.
 -->
 <wizard version="1" kind="project"
         class="qt4project" firstpage="10"
-        id="R.Plain C" category="I.Projects">
+        id="R.Plain C" category="I.Projects"
+        featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
     <icon>console.png</icon>
     <description>Creates a plain C project using qmake, not using the Qt library.</description>
     <displayname>Plain C Project</displayname>;
diff --git a/share/qtcreator/templates/wizards/plaincppapp-cmake/wizard.xml b/share/qtcreator/templates/wizards/plaincppapp-cmake/wizard.xml
index 7cfd1d5a3beaff19d50c88e882704baf1eb5103f..3c00bc218d316f7473a9bf2fc800bd0d1d56eae1 100644
--- a/share/qtcreator/templates/wizards/plaincppapp-cmake/wizard.xml
+++ b/share/qtcreator/templates/wizards/plaincppapp-cmake/wizard.xml
@@ -37,7 +37,7 @@ the project file goes last.
 The "class" and "firstpage" attributes specify that it is a Qt 4 wizard and
 leave room for the Qt 4 target page.
 -->
-<wizard version="1" kind="project" firstpage="10" id="S.Plain C++ (CMake)" category="I.Projects">
+<wizard version="1" kind="project" firstpage="10" id="S.Plain C++ (CMake)" category="I.Projects" featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
     <icon>console.png</icon>
     <description>Creates a plain C++ project using CMake, not using the Qt library.</description>
     <displayname>Plain C++ Project (CMake Build)</displayname>;
diff --git a/share/qtcreator/templates/wizards/plaincppapp/wizard.xml b/share/qtcreator/templates/wizards/plaincppapp/wizard.xml
index 44cf3016facb78806cc333a9f94d4fa9df91cf0b..ba6168f5beb619c1d734144ce249a58e3ed303a2 100644
--- a/share/qtcreator/templates/wizards/plaincppapp/wizard.xml
+++ b/share/qtcreator/templates/wizards/plaincppapp/wizard.xml
@@ -39,7 +39,8 @@ leave room for the Qt 4 target page.
 -->
 <wizard version="1" kind="project"
         class="qt4project" firstpage="10"
-        id="R.Plain C++" category="I.Projects">
+        id="R.Plain C++" category="I.Projects"
+        featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
     <icon>console.png</icon>
     <description>Creates a plain C++ project using qmake, not using the Qt library.</description>
     <displayname>Plain C++ Project</displayname>;
diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml
index ee16a8de346e59422957b518c7d15aa4f8e0e8da..e08c559c82fa818cf2b749435e8f9a316bf1588c 100644
--- a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml
+++ b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml
@@ -39,7 +39,8 @@ leave room for the Qt 4 target page.
 -->
 <wizard version="1" kind="project"
         class="qt4project" firstpage="10"
-        id="R.QtCreatorPlugin" category="F.QtProjects">
+        id="R.QtCreatorPlugin" category="F.QtProjects"
+        featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint,QtSupport.Wizards.FeatureQt">
     <icon>qtcreator_logo_24.png</icon>
     <description>Creates a custom Qt Creator plugin.</description>
     <displayname>Qt Creator Plugin</displayname>;
diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp
index 8f91bc9c84c77a71757113b4d661260ea460cfb1..9f35f5c09fb0a38d800cae5c037294dba5960be9 100644
--- a/src/plugins/coreplugin/basefilewizard.cpp
+++ b/src/plugins/coreplugin/basefilewizard.cpp
@@ -86,6 +86,7 @@ public:
     QString id;
     QString category;
     QString displayCategory;
+    Core::FeatureSet requiredFeatures;
 };
 
 BaseFileWizardParameterData::BaseFileWizardParameterData(IWizard::WizardKind k) :
@@ -145,7 +146,8 @@ CORE_EXPORT QDebug operator<<(QDebug d, const BaseFileWizardParameters &p)
                 << " Category: " << p.category()
                 << " DisplayName: " << p.displayName()
                 << " Description: " << p.description()
-                << " DisplayCategory: " << p.displayCategory();
+                << " DisplayCategory: " << p.displayCategory()
+                << " Required Features: " << p.requiredFeatures().toStringList();
     return d;
 }
 
@@ -214,6 +216,17 @@ QString BaseFileWizardParameters::displayCategory() const
     return m_d->displayCategory;
 }
 
+Core::FeatureSet BaseFileWizardParameters::requiredFeatures() const
+{
+    return m_d->requiredFeatures;
+}
+
+void BaseFileWizardParameters::setRequiredFeatures(Core::FeatureSet features)
+{
+
+    m_d->requiredFeatures = features;
+}
+
 void BaseFileWizardParameters::setDisplayCategory(const QString &v)
 {
     m_d->displayCategory = v;
@@ -349,6 +362,11 @@ BaseFileWizard::BaseFileWizard(const BaseFileWizardParameters &parameters,
 {
 }
 
+BaseFileWizardParameters BaseFileWizard::baseFileWizardParameters() const
+{
+    return d->m_parameters;
+}
+
 BaseFileWizard::~BaseFileWizard()
 {
     delete d;
@@ -497,6 +515,12 @@ void BaseFileWizard::runWizard(const QString &path, QWidget *parent)
         QMessageBox::critical(0, tr("File Generation Failure"), errorMessage);
 }
 
+
+Core::FeatureSet BaseFileWizard::requiredFeatures() const
+{
+    return d->m_parameters.requiredFeatures();
+}
+
 /*!
     \fn virtual QWizard *Core::BaseFileWizard::createWizardDialog(QWidget *parent,
                                                                   const QString &defaultPath,
diff --git a/src/plugins/coreplugin/basefilewizard.h b/src/plugins/coreplugin/basefilewizard.h
index 1539a90e1e39443eff17a3e1d6dc5396d929a487..80e353b16145c49eea0f8b3daae3078155ed90a3 100644
--- a/src/plugins/coreplugin/basefilewizard.h
+++ b/src/plugins/coreplugin/basefilewizard.h
@@ -91,6 +91,9 @@ public:
     QString displayCategory() const;
     void setDisplayCategory(const QString &trCategory);
 
+    Core::FeatureSet requiredFeatures() const;
+    void setRequiredFeatures(Core::FeatureSet features);
+
 private:
     QSharedDataPointer<BaseFileWizardParameterData> m_d;
 };
@@ -115,6 +118,7 @@ public:
     virtual QString displayCategory() const;
 
     virtual void runWizard(const QString &path, QWidget *parent);
+    virtual Core::FeatureSet requiredFeatures() const;
 
     static QString buildFileName(const QString &path, const QString &baseName, const QString &extension);
     static void setupWizard(QWizard *);
@@ -125,6 +129,8 @@ protected:
 
     explicit BaseFileWizard(const BaseFileWizardParameters &parameters, QObject *parent = 0);
 
+    BaseFileWizardParameters baseFileWizardParameters() const;
+
     virtual QWizard *createWizardDialog(QWidget *parent,
                                         const QString &defaultPath,
                                         const WizardPageList &extensionPages) const = 0;
diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro
index c65054df867b6cbf93c1ab19da3c42e3e45ba896..d2cc2b02b3e086e0bb6b196dbeb2e00b1d2631dc 100644
--- a/src/plugins/coreplugin/coreplugin.pro
+++ b/src/plugins/coreplugin/coreplugin.pro
@@ -95,7 +95,8 @@ SOURCES += mainwindow.cpp \
     mimetypesettings.cpp \
     dialogs/promptoverwritedialog.cpp \
     fileutils.cpp \
-    textfile.cpp
+    textfile.cpp \
+    featureprovider.cpp
 
 HEADERS += mainwindow.h \
     editmode.h \
@@ -192,7 +193,8 @@ HEADERS += mainwindow.h \
     fileutils.h \
     externaltoolmanager.h \
     textfile.h \
-    generatedfile.h
+    generatedfile.h \
+    featureprovider.h
 
 FORMS += dialogs/newdialog.ui \
     actionmanager/commandmappings.ui \
diff --git a/src/plugins/coreplugin/dialogs/iwizard.cpp b/src/plugins/coreplugin/dialogs/iwizard.cpp
index ec8c203d8f98a09013c776ff23cfc72beae8e290..3dec333a5b95e3edbd6fa6120a765b1953cf958c 100644
--- a/src/plugins/coreplugin/dialogs/iwizard.cpp
+++ b/src/plugins/coreplugin/dialogs/iwizard.cpp
@@ -35,6 +35,8 @@
 
 #include <extensionsystem/pluginmanager.h>
 
+#include <QtCore/QStringList>
+
 /*!
     \class Core::IWizard
     \mainclass
@@ -178,3 +180,14 @@ QList<IWizard*> IWizard::wizardsOfKind(WizardKind kind)
     return findWizards(WizardKindPredicate(kind));
 }
 
+bool IWizard::isAvailable() const
+{
+    FeatureSet availableFeatures;
+
+    const QList<Core::IFeatureProvider*> featureManagers = ExtensionSystem::PluginManager::instance()->getObjects<Core::IFeatureProvider>();
+
+    foreach (const Core::IFeatureProvider *featureManager, featureManagers)
+        availableFeatures |= featureManager->availableFeatures();
+
+    return availableFeatures.contains(requiredFeatures());
+}
diff --git a/src/plugins/coreplugin/dialogs/iwizard.h b/src/plugins/coreplugin/dialogs/iwizard.h
index 1996642747476d18c3fd9d14f0a731211f9da9fc..991df2b820ad726f25350c48530b7d3352ab9db7 100644
--- a/src/plugins/coreplugin/dialogs/iwizard.h
+++ b/src/plugins/coreplugin/dialogs/iwizard.h
@@ -34,6 +34,8 @@
 #define IWIZARD_H
 
 #include <coreplugin/core_global.h>
+#include <coreplugin/featureprovider.h>
+
 #include <QtCore/QObject>
 
 QT_BEGIN_NAMESPACE
@@ -66,8 +68,12 @@ public:
     virtual QString category() const = 0;
     virtual QString displayCategory() const = 0;
 
+    virtual FeatureSet requiredFeatures() const = 0;
+
     virtual void runWizard(const QString &path, QWidget *parent) = 0;
 
+    bool isAvailable() const;
+
     // Utility to find all registered wizards
     static QList<IWizard*> allWizards();
     // Utility to find all registered wizards of a certain kind
diff --git a/src/plugins/coreplugin/dialogs/newdialog.cpp b/src/plugins/coreplugin/dialogs/newdialog.cpp
index e07a20be6403b1d43c471bf3e74b333e7a57d339..fc6cd2fe32b3e36494984c4fab2c5c95340425bc 100644
--- a/src/plugins/coreplugin/dialogs/newdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/newdialog.cpp
@@ -37,7 +37,7 @@
 #include <utils/stylehelper.h>
 
 #include <coreplugin/coreconstants.h>
-#include <coreplugin/dialogs/iwizard.h>
+#include <coreplugin/featureprovider.h>
 
 #include <QtGui/QAbstractProxyModel>
 #include <QtGui/QItemSelectionModel>
@@ -249,19 +249,21 @@ void NewDialog::setWizards(QList<IWizard*> wizards)
             cit = categories.insert(categoryName, categoryItem);
         }
         // add item
-        QStandardItem *wizardItem = new QStandardItem(wizard->displayName());
-        QIcon wizardIcon;
-
-        // spacing hack. Add proper icons instead
-        if (wizard->icon().isNull()) {
-            wizardIcon = m_dummyIcon;
-        } else {
-            wizardIcon = wizard->icon();
+        if (wizard->isAvailable()) {
+            QStandardItem *wizardItem = new QStandardItem(wizard->displayName());
+            QIcon wizardIcon;
+
+            // spacing hack. Add proper icons instead
+            if (wizard->icon().isNull()) {
+                wizardIcon = m_dummyIcon;
+            } else {
+                wizardIcon = wizard->icon();
+            }
+            wizardItem->setIcon(wizardIcon);
+            wizardItem->setData(QVariant::fromValue(wizard), Qt::UserRole);
+            wizardItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
+            cit.value()->appendRow(wizardItem);
         }
-        wizardItem->setIcon(wizardIcon);
-        wizardItem->setData(QVariant::fromValue(wizard), Qt::UserRole);
-        wizardItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
-        cit.value()->appendRow(wizardItem);
     }
 
 
diff --git a/src/plugins/coreplugin/featureprovider.cpp b/src/plugins/coreplugin/featureprovider.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..520b2e48210d647189fdc4e2b62932111d1666e8
--- /dev/null
+++ b/src/plugins/coreplugin/featureprovider.cpp
@@ -0,0 +1,111 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "featureprovider.h"
+
+/*!
+    \class Core::IFeatureProvider
+    \mainclass
+
+    \brief The class IFeatureProvider defines an interface to manage features for wizards
+
+    The features provided by an object in the object pool implementing IFeatureProvider
+    will be respected by wizards implementing IWizard.
+
+    This feature set, provided by all instances of IFeatureProvider in the object pool, is checked against IWizard::requiredFeatures()
+    and only if all required features are available the wizard is displayed when creating a new file or project.
+
+    Qt4VersionManager creates an instance of IFeatureProvider and provides Qt specific features for the available
+    versions of Qt.
+
+    \sa Core::IWizard
+    \sa QtSupport::QtVersionManager
+*/
+
+
+/*!
+    \fn IFeatureProvider::IFeatureProvider()
+    \internal
+*/
+
+/*!
+    \fn IFeatureProvider::~IFeatureProvider()
+    \internal
+*/
+
+/*!
+    \fn FeatureProvider::Features availableFeatures() const;
+    Returns available features provided by this manager.
+    \sa FeatureProvider::Features
+*/
+
+/*!
+    \class Core::FeatureProvider::Feature
+
+    \brief This class describes a single Feature
+
+    This class describes a single Feature to be used
+    in Core::FeatureProvider::Features.
+
+    \sa Core::FeatureProvider::Features
+    \sa Core::IWizard
+    \sa QtSupport::QtVersionManager
+*/
+
+/*!
+    \class Core::FeatureProvider::Features
+
+    \brief This class is a set of features
+
+    Features is used to describe available or
+    required feature sets and behaves similar to QFlags.
+
+    But instead of enums Features relies on string ids
+    and is therefore extendable.
+
+    \sa Core::FeatureProvider::Feature
+    \sa Core::IWizard
+    \sa QtSupport::QtVersionManager
+*/
+
+
+/*!
+    \fn bool Features::~contains(const Feature &feature)()
+
+    \returns true if the \param features is available.
+*/
+
+/*!
+    \fn bool Features::~contains(const Features &features)()
+
+    \returns true if all \param features are available.
+*/
diff --git a/src/plugins/coreplugin/featureprovider.h b/src/plugins/coreplugin/featureprovider.h
new file mode 100644
index 0000000000000000000000000000000000000000..fcb481565494370ffb5c06acbe5c345ab7894e0f
--- /dev/null
+++ b/src/plugins/coreplugin/featureprovider.h
@@ -0,0 +1,161 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#ifndef FEATUREMANAGER_H
+#define FEATUREMANAGER_H
+
+#include "core_global.h"
+
+#include <coreplugin/id.h>
+
+#include <QtCore/QObject>
+#include <QtCore/QSet>
+#include <QtCore/QStringList>
+
+
+namespace Utils {
+class AbstractMacroExpander;
+}
+
+namespace Core {
+
+class CORE_EXPORT FeatureSet;
+
+class CORE_EXPORT IFeatureProvider : public QObject
+{
+    Q_OBJECT
+
+public:
+    IFeatureProvider() {}
+    virtual ~IFeatureProvider() {}
+    virtual FeatureSet availableFeatures() const = 0;
+};
+
+class CORE_EXPORT Feature : public Id
+{
+friend class FeatureSet;
+public:
+    Feature(const char *name) : Id(name) {}
+    explicit Feature(const QString &name) : Id(name) {}
+};
+
+class CORE_EXPORT FeatureSet : private QSet<Feature>
+{
+public:
+    FeatureSet() {}
+
+    FeatureSet(const Feature &feature)
+    {
+        if (feature.toString().isEmpty())
+            return;
+
+        insert(feature);
+    }
+
+    FeatureSet(const FeatureSet &other) : QSet<Feature>(other) {}
+
+    FeatureSet &operator=(const FeatureSet &other)
+    {
+       QSet<Feature>::operator=(other);
+       return *this;
+    }
+
+    bool contains(const Feature &feature) const
+    {
+        return QSet<Feature>::contains(feature);
+    }
+
+    bool contains(const FeatureSet &features) const
+    {
+        return QSet<Feature>::contains(features);
+    }
+
+    void remove(const Feature &feature)
+    {
+        QSet<Feature>::remove(feature);
+    }
+
+    FeatureSet operator|(const Feature &feature) const
+    {
+        FeatureSet copy = *this;
+        if (feature.isValid())
+            copy.insert(feature);
+        return copy;
+    }
+
+    FeatureSet operator|(const FeatureSet &features) const
+    {
+        FeatureSet copy = *this;
+        if (!features.isEmpty())
+            copy.unite(features);
+        return copy;
+    }
+
+    FeatureSet &operator|=(const Feature &feature)
+    {
+        if (feature.isValid())
+           insert(feature);
+        return *this;
+    }
+
+    FeatureSet &operator|=(const FeatureSet &features)
+    {
+        if (!features.isEmpty())
+            unite(features);
+        return *this;
+    }
+
+    QStringList toStringList() const
+    {
+        QStringList stringList;
+        foreach (const Feature &feature, QSet<Feature>(*this))
+            stringList.append(feature.toString());
+        return stringList;
+    }
+};
+
+} // namespace Core
+
+/*
+The following operators have to be defined in the global namespace!
+Otherwise "using namespace Core" would hide other | operators
+defined in the global namespace (e. g. QFlags).
+*/
+
+inline Core::FeatureSet operator |(Core::Feature feature1, Core::Feature feature2)
+{ return Core::FeatureSet(feature1) | feature2; }
+
+inline Core::FeatureSet operator|(Core::Feature feature1, Core::FeatureSet feature2)
+{ return feature2 | feature1; }
+
+
+#endif // FEATUREANAGER_H
diff --git a/src/plugins/cppeditor/cppclasswizard.cpp b/src/plugins/cppeditor/cppclasswizard.cpp
index 4563376fe3d74c05df1a496b34dd34f7b216e44b..3bdc3a1f6a908fb900fbd4c5da6ff926f28bbacc 100644
--- a/src/plugins/cppeditor/cppclasswizard.cpp
+++ b/src/plugins/cppeditor/cppclasswizard.cpp
@@ -155,6 +155,11 @@ CppClassWizard::CppClassWizard(const Core::BaseFileWizardParameters &parameters,
 {
 }
 
+Core::FeatureSet CppClassWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 QString CppClassWizard::sourceSuffix() const
 {
     return preferredSuffix(QLatin1String(Constants::CPP_SOURCE_MIMETYPE));
diff --git a/src/plugins/cppeditor/cppclasswizard.h b/src/plugins/cppeditor/cppclasswizard.h
index 4531c10dce5e2ec662fca01007f3fb59ad080a5a..9d6f1efa4cf6d77ff686931c3ca6e0a780461117 100644
--- a/src/plugins/cppeditor/cppclasswizard.h
+++ b/src/plugins/cppeditor/cppclasswizard.h
@@ -102,6 +102,8 @@ public:
     explicit CppClassWizard(const Core::BaseFileWizardParameters &parameters,
                             QObject *parent = 0);
 
+    virtual Core::FeatureSet requiredFeatures() const;
+
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
                                         const QString &defaultPath,
diff --git a/src/plugins/designer/cpp/formclasswizard.cpp b/src/plugins/designer/cpp/formclasswizard.cpp
index d8bd28f99a3a087325bcb56fe58b2c84d3a7b617..f3a69e83ae40bd10b127596f1cd53bffa4fd87fe 100644
--- a/src/plugins/designer/cpp/formclasswizard.cpp
+++ b/src/plugins/designer/cpp/formclasswizard.cpp
@@ -35,6 +35,7 @@
 #include "designerconstants.h"
 #include "formwindoweditor.h"
 #include "qtdesignerformclasscodegenerator.h"
+#include <qtsupport/qtsupportconstants.h>
 
 #include <coreplugin/icore.h>
 #include <cppeditor/cppeditorconstants.h>
@@ -65,6 +66,11 @@ QString FormClassWizard::formSuffix() const
     return preferredSuffix(QLatin1String(Constants::FORM_MIMETYPE));
 }
 
+Core::FeatureSet FormClassWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_QWIDGETS);
+}
+
 QWizard *FormClassWizard::createWizardDialog(QWidget *parent,
                                              const QString &defaultPath,
                                              const WizardPageList &extensionPages) const
diff --git a/src/plugins/designer/cpp/formclasswizard.h b/src/plugins/designer/cpp/formclasswizard.h
index 2b9202ffc97162fb620b957fe701f215aeb25748..e6c8047dc13c362447f1044db51899733c05383b 100644
--- a/src/plugins/designer/cpp/formclasswizard.h
+++ b/src/plugins/designer/cpp/formclasswizard.h
@@ -55,6 +55,8 @@ public:
     QString sourceSuffix() const;
     QString formSuffix() const;
 
+    virtual Core::FeatureSet requiredFeatures() const;
+
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
                                         const QString &defaultPath,
diff --git a/src/plugins/designer/formwizard.cpp b/src/plugins/designer/formwizard.cpp
index 3f8c190e71079d94931585c8eea34339332c4dfc..9b44526ec4c811a3a5630448f939556c7eba0c10 100644
--- a/src/plugins/designer/formwizard.cpp
+++ b/src/plugins/designer/formwizard.cpp
@@ -34,6 +34,7 @@
 #include "formwizarddialog.h"
 #include "formwindoweditor.h"
 #include "designerconstants.h"
+#include <qtsupport/qtsupportconstants.h>
 
 #include <QtCore/QDebug>
 
@@ -45,6 +46,11 @@ FormWizard::FormWizard(const BaseFileWizardParameters &parameters, QObject *pare
 {
 }
 
+Core::FeatureSet FormWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_QWIDGETS);
+}
+
 QWizard *FormWizard::createWizardDialog(QWidget *parent,
                                         const QString &defaultPath,
                                         const WizardPageList &extensionPages) const
diff --git a/src/plugins/designer/formwizard.h b/src/plugins/designer/formwizard.h
index 6ea6f76ed9bdef860e8bf9530b155b0e3bf83cf4..ff14971fbf6500ba3ffce1c6653e1116d6aab97f 100644
--- a/src/plugins/designer/formwizard.h
+++ b/src/plugins/designer/formwizard.h
@@ -47,6 +47,8 @@ public:
 
     FormWizard(const BaseFileWizardParameters &parameters, QObject *parent);
 
+    virtual Core::FeatureSet requiredFeatures() const;
+
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
                                         const QString &defaultPath,
diff --git a/src/plugins/genericprojectmanager/genericprojectwizard.cpp b/src/plugins/genericprojectmanager/genericprojectwizard.cpp
index 1749122bc6b7f398dafb8853f75161d484e8d9f8..e1afafb78aedc476f1a3d617b14e44e5f1a38ca2 100644
--- a/src/plugins/genericprojectmanager/genericprojectwizard.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectwizard.cpp
@@ -116,6 +116,11 @@ GenericProjectWizard::GenericProjectWizard()
 GenericProjectWizard::~GenericProjectWizard()
 { }
 
+Core::FeatureSet GenericProjectWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 Core::BaseFileWizardParameters GenericProjectWizard::parameters()
 {
     Core::BaseFileWizardParameters parameters(ProjectWizard);
diff --git a/src/plugins/genericprojectmanager/genericprojectwizard.h b/src/plugins/genericprojectmanager/genericprojectwizard.h
index 1b2ec40d0ac80fd19264ccd35069c6ae78d20ef4..1cbc8cd391c97eecfde8dbde115e74b78143d80d 100644
--- a/src/plugins/genericprojectmanager/genericprojectwizard.h
+++ b/src/plugins/genericprojectmanager/genericprojectwizard.h
@@ -78,6 +78,7 @@ class GenericProjectWizard : public Core::BaseFileWizard
 public:
     GenericProjectWizard();
     virtual ~GenericProjectWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
     static Core::BaseFileWizardParameters parameters();
 
diff --git a/src/plugins/glsleditor/glslfilewizard.cpp b/src/plugins/glsleditor/glslfilewizard.cpp
index eb5786a1e557899640e1d424e584de5fd5524f91..12fb4cdc0e46b9ebed9618ce0341337067932a17 100644
--- a/src/plugins/glsleditor/glslfilewizard.cpp
+++ b/src/plugins/glsleditor/glslfilewizard.cpp
@@ -63,6 +63,11 @@ GLSLFileWizard::GLSLFileWizard(const BaseFileWizardParameters &parameters,
 {
 }
 
+Core::FeatureSet GLSLFileWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 Core::GeneratedFiles GLSLFileWizard::generateFiles(const QWizard *w,
                                                  QString * /*errorMessage*/) const
 {
diff --git a/src/plugins/glsleditor/glslfilewizard.h b/src/plugins/glsleditor/glslfilewizard.h
index 26c4ff6f304265c8aa157d382615b43893b667f3..fc02ba9559d68e2fd4ee939a5f6a8e258bb92db1 100644
--- a/src/plugins/glsleditor/glslfilewizard.h
+++ b/src/plugins/glsleditor/glslfilewizard.h
@@ -55,6 +55,8 @@ public:
     explicit GLSLFileWizard(const BaseFileWizardParameters &parameters,
                             ShaderType shaderType, QObject *parent = 0);
 
+    virtual Core::FeatureSet requiredFeatures() const;
+
 protected:
     QString fileContents(const QString &baseName, ShaderType shaderType) const;
 
diff --git a/src/plugins/madde/maemoqtversion.cpp b/src/plugins/madde/maemoqtversion.cpp
index 4ab595d11e03979074bd80b8614fd4918e891f87..d33eb35b32203aa69645dd454c363119e6f8d527 100644
--- a/src/plugins/madde/maemoqtversion.cpp
+++ b/src/plugins/madde/maemoqtversion.cpp
@@ -176,6 +176,15 @@ QString MaemoQtVersion::osType() const
     return m_osType;
 }
 
+Core::FeatureSet MaemoQtVersion::availableFeatures() const
+{
+    Core::FeatureSet features = QtSupport::BaseQtVersion::availableFeatures();
+    if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 4)) //no reliable test for components, yet.
+        features |= Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_MEEGO);
+    return features;
+}
+
+
 void MaemoQtVersion::addToEnvironment(Utils::Environment &env) const
 {
     const QString maddeRoot = MaemoGlobal::maddeRoot(qmakeCommand().toString());
diff --git a/src/plugins/madde/maemoqtversion.h b/src/plugins/madde/maemoqtversion.h
index b5b06206082ebe345dcd5cf18f21657fb42bcb42..5f2f7ad30a38f1b11bf6f3afe0611488d1065a5d 100644
--- a/src/plugins/madde/maemoqtversion.h
+++ b/src/plugins/madde/maemoqtversion.h
@@ -60,6 +60,8 @@ public:
 
     bool supportsShadowBuilds() const;
     QString osType() const;
+    Core::FeatureSet availableFeatures() const;
+
 private:
     mutable QString m_systemRoot;
     mutable QString m_osType;
diff --git a/src/plugins/madde/qt4maemotargetfactory.cpp b/src/plugins/madde/qt4maemotargetfactory.cpp
index 4851677891d030adcc57cacc800f2d9e0384a907..e2eb6b1d6816ea27b9a35161fe5657357fe42fc4 100644
--- a/src/plugins/madde/qt4maemotargetfactory.cpp
+++ b/src/plugins/madde/qt4maemotargetfactory.cpp
@@ -165,8 +165,6 @@ QSet<QString> Qt4MaemoTargetFactory::targetFeatures(const QString & /*id*/) cons
 #ifndef Q_OS_WIN
     features << Qt4ProjectManager::Constants::SHADOWBUILD_TARGETFEATURE_ID;
 #endif
-    // how to check check whether the component set is really installed?
-    features << Qt4ProjectManager::Constants::QTQUICKCOMPONENTS_MEEGO_TARGETFEATURE_ID;
     return features;
 }
 
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.cpp b/src/plugins/projectexplorer/customwizard/customwizard.cpp
index d93a7c986f3d49c1ede432a6ec6b089156fdc7a4..5183cc7d338e085b05cc95fc31d44b1d504ec783 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizard.cpp
@@ -252,6 +252,10 @@ Core::GeneratedFiles CustomWizard::generateFiles(const QWizard *dialog, QString
     return generateWizardFiles(errorMessage);
 }
 
+Core::FeatureSet CustomWizard::requiredFeatures() const
+{
+    return baseFileWizardParameters().requiredFeatures();
+}
 
 bool CustomWizard::writeFiles(const Core::GeneratedFiles &files, QString *errorMessage)
 {
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.h b/src/plugins/projectexplorer/customwizard/customwizard.h
index 932dd7ed9472ffe0f8e20eddf09bb150ac000976..3462143ad89741702d8a1436b66b5cd4d19da4bd 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.h
+++ b/src/plugins/projectexplorer/customwizard/customwizard.h
@@ -94,6 +94,8 @@ public:
 
     virtual Core::GeneratedFiles generateFiles(const QWizard *w, QString *errorMessage) const;
 
+    virtual Core::FeatureSet requiredFeatures() const;
+
 
     // Register a factory for a derived custom widget
     static void registerFactory(const QString &name, const ICustomWizardFactoryPtr &f);
diff --git a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
index 951815a7113cc9928e11fcd39bd0fa79536052b4..265c38c08448f80e7f14f309af5612c954e9d833 100644
--- a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
@@ -67,6 +67,7 @@ static const char firstPageAttributeC[] = "firstpage";
 static const char langAttributeC[] = "xml:lang";
 static const char categoryAttributeC[] = "category";
 static const char displayCategoryElementC[] = "displaycategory";
+static const char featuresRequiredC[] = "featuresRequired";
 static const char fieldPageTitleElementC[] = "fieldpagetitle";
 static const char fieldsElementC[] = "fields";
 static const char fieldElementC[] = "field";
@@ -486,6 +487,19 @@ static inline Core::IWizard::WizardKind kindAttribute(const QXmlStreamReader &r)
     return Core::IWizard::ProjectWizard;
 }
 
+static inline Core::FeatureSet requiredFeatures(const QXmlStreamReader &reader)
+{
+    Core::FeatureSet r;
+    QString value = reader.attributes().value(QLatin1String(featuresRequiredC)).toString();
+    QStringList stringList = value.split(QLatin1Char(','), QString::SkipEmptyParts);
+    Core::FeatureSet features;
+    foreach (const QString &string, stringList) {
+        Core::Feature feature(string);
+        features |= feature;
+    }
+    return features;
+}
+
 static inline QString msgError(const QXmlStreamReader &reader,
                                const QString &fileName,
                                const QString &what)
@@ -591,6 +605,7 @@ CustomWizardParameters::ParseResult
                     bp->setId(attributeValue(reader, idAttributeC));
                     bp->setCategory(attributeValue(reader, categoryAttributeC));
                     bp->setKind(kindAttribute(reader));
+                    bp->setRequiredFeatures(requiredFeatures(reader));
                     klass = attributeValue(reader, klassAttributeC);
                     firstPageId = integerAttributeValue(reader, firstPageAttributeC, -1);
                     break;
diff --git a/src/plugins/qmljseditor/jsfilewizard.cpp b/src/plugins/qmljseditor/jsfilewizard.cpp
index c6f56caf40011524e8cc4b5b8102815bfddccf7a..03db41910e41feadef3e6b8567f2971844056db0 100644
--- a/src/plugins/qmljseditor/jsfilewizard.cpp
+++ b/src/plugins/qmljseditor/jsfilewizard.cpp
@@ -98,6 +98,11 @@ JsFileWizard::JsFileWizard(const BaseFileWizardParameters &parameters,
 {
 }
 
+Core::FeatureSet JsFileWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 Core::GeneratedFiles JsFileWizard::generateFiles(const QWizard *w,
                                                  QString * /*errorMessage*/) const
 {
diff --git a/src/plugins/qmljseditor/jsfilewizard.h b/src/plugins/qmljseditor/jsfilewizard.h
index 44c69a912e5ed40e49b1937824c9cdc3a709a6ab..6deca081adede1c81c700075b76141a8053e05c7 100644
--- a/src/plugins/qmljseditor/jsfilewizard.h
+++ b/src/plugins/qmljseditor/jsfilewizard.h
@@ -47,6 +47,8 @@ public:
     explicit JsFileWizard(const BaseFileWizardParameters &parameters,
                           QObject *parent = 0);
 
+    virtual Core::FeatureSet requiredFeatures() const;
+
 protected:
     QString fileContents(const QString &baseName, bool statelessLibrary) const;
 
diff --git a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp
index 7ca639f2fbd134310bd849c1172f83cb3298d357..da222d03f308db2782183da9ee18c37f9f7a9338 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp
@@ -64,6 +64,11 @@ QmlProjectApplicationWizard::QmlProjectApplicationWizard()
 QmlProjectApplicationWizard::~QmlProjectApplicationWizard()
 { }
 
+Core::FeatureSet QmlProjectApplicationWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK);
+}
+
 Core::BaseFileWizardParameters QmlProjectApplicationWizard::parameters()
 {
     Core::BaseFileWizardParameters parameters(ProjectWizard);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.h b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.h
index c50532226edc9f16e03c4583bab80b74f18b28a1..ea542094577d1ef9da96ca0c524f00905bea58ab 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.h
@@ -53,6 +53,7 @@ class QmlProjectApplicationWizard : public Core::BaseFileWizard
 public:
     QmlProjectApplicationWizard();
     virtual ~QmlProjectApplicationWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
     static Core::BaseFileWizardParameters parameters();
 
diff --git a/src/plugins/qt4projectmanager/buildconfigurationinfo.h b/src/plugins/qt4projectmanager/buildconfigurationinfo.h
index 6cf166c98b8d1b8f05079921d6a6e2dd497c3214..5ad180bb9cbc21d0c239329ec74f15ea47763bf4 100644
--- a/src/plugins/qt4projectmanager/buildconfigurationinfo.h
+++ b/src/plugins/qt4projectmanager/buildconfigurationinfo.h
@@ -34,6 +34,7 @@
 #define BUILDCONFIGURATIONINFO_H
 
 #include "qt4projectmanager_global.h"
+#include <coreplugin/featureprovider.h>
 #include <qtsupport/baseqtversion.h>
 
 namespace Qt4ProjectManager {
@@ -72,6 +73,7 @@ struct QT4PROJECTMANAGER_EXPORT BuildConfigurationInfo {
     static QList<BuildConfigurationInfo> importBuildConfigurations(const QString &proFilePath);
     static QList<BuildConfigurationInfo> checkForBuild(const QString &directory, const QString &proFilePath);
     static QList<BuildConfigurationInfo> filterBuildConfigurationInfos(const QList<BuildConfigurationInfo> &infos, const QString &id);
+    static QList<BuildConfigurationInfo> filterBuildConfigurationInfos(const QList<BuildConfigurationInfo> &infos, Core::FeatureSet features);
 };
 
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
index e3c88e276904fc5ec0c3caab7b5491f24b6239a5..1239ed144c3e146b2d2bbb63aaa2f60fb8eb64ff 100644
--- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
+++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp
@@ -38,6 +38,8 @@
 
 #include <projectexplorer/projectexplorerconstants.h>
 
+#include <qtsupport/qtsupportconstants.h>
+
 #include <QtGui/QIcon>
 
 namespace Qt4ProjectManager {
@@ -53,6 +55,11 @@ CustomWidgetWizard::CustomWidgetWizard() :
 {
 }
 
+Core::FeatureSet CustomWidgetWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_QWIDGETS);
+}
+
 QWizard *CustomWidgetWizard::createWizardDialog(QWidget *parent,
                                                 const QString &defaultPath,
                                                 const WizardPageList &extensionPages) const
diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.h b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.h
index a6e49c60e8270e4a856f375c233c79cf3ce25295..e056e7f56e86b17e06547b870eb2901b01295615 100644
--- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.h
+++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.h
@@ -44,6 +44,7 @@ class CustomWidgetWizard : public QtWizard
 
 public:
     CustomWidgetWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
index 4fe993ef1812f5728bf8b8fd01bff5d3a8e7929c..56bd7584c0b481c972ca2c9d644bb567bf740489 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
@@ -99,3 +99,12 @@ QString DesktopQtVersion::description() const
 {
     return QCoreApplication::translate("QtVersion", "Desktop", "Qt Version is meant for the desktop");
 }
+
+Core::FeatureSet DesktopQtVersion::availableFeatures() const
+{
+    Core::FeatureSet features = QtSupport::BaseQtVersion::availableFeatures();
+    if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 4)) //no reliable test for components, yet.
+        features |= Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_MEEGO)
+                | Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_SYMBIAN);
+    return features;
+}
diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h
index 3031f286a49e19f8e63b5bc9f619c8aca323c75d..edde9d93f2b8bc655306e7767fb8d0331e87f5f1 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.h
@@ -57,6 +57,8 @@ public:
     QSet<QString> supportedTargetIds() const;
 
     QString description() const;
+
+    Core::FeatureSet availableFeatures() const;
 };
 
 }
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
index 1b06c58e6653278c805e12b198bd8fd9843d04b2..952d32b7e2e41c0105f366aa8a45a3b355981092 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
@@ -164,11 +164,9 @@ ProjectExplorer::Target *Qt4DesktopTargetFactory::create(ProjectExplorer::Projec
 QSet<QString> Qt4DesktopTargetFactory::targetFeatures(const QString & /*id*/) const
 {
     QSet<QString> features;
-    features << QLatin1String(Constants::DESKTOP_TARGETFEATURE_ID)
-             << QLatin1String(Constants::SHADOWBUILD_TARGETFEATURE_ID)
-    // how to check check whether they component set is really installed?
-             << QLatin1String(Constants::QTQUICKCOMPONENTS_SYMBIAN_TARGETFEATURE_ID)
-             << QLatin1String(Constants::QTQUICKCOMPONENTS_MEEGO_TARGETFEATURE_ID);
+    features << QLatin1String(Constants::DESKTOP_TARGETFEATURE_ID);
+    features << QLatin1String(Constants::SHADOWBUILD_TARGETFEATURE_ID);
+
     return features;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
index 77e16c1f054d15ae95b1953359d014d2c0fb890d..aaa2b8cb8e7b066d0ebfaa21a7deb76f0d8a45bc 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
@@ -129,10 +129,8 @@ QSet<QString> Qt4SimulatorTargetFactory::targetFeatures(const QString & /*id*/)
     QSet<QString> features;
 
     features << QLatin1String(Constants::MOBILE_TARGETFEATURE_ID)
-             << QLatin1String(Constants::SHADOWBUILD_TARGETFEATURE_ID)
-    // how to check check whether the component set is really installed?
-             << QLatin1String(Constants::QTQUICKCOMPONENTS_SYMBIAN_TARGETFEATURE_ID)
-             << QLatin1String(Constants::QTQUICKCOMPONENTS_MEEGO_TARGETFEATURE_ID);
+             << QLatin1String(Constants::SHADOWBUILD_TARGETFEATURE_ID);
+
     return features;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
index 6a2e88d10bbe91fc79250d60c68b1e9d46e8aaed..1d63cec578da2456a87a6a3ae74d8a8e45c78b55 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
@@ -190,9 +190,8 @@ bool Qt4SymbianTargetFactory::selectByDefault(const QString &id) const
 QSet<QString> Qt4SymbianTargetFactory::targetFeatures(const QString & /*id*/) const
 {
     QSet<QString> features;
-    features << QLatin1String(Constants::MOBILE_TARGETFEATURE_ID)
-    // ideally we should check whether they're really installed
-             << QLatin1String(Constants::QTQUICKCOMPONENTS_SYMBIAN_TARGETFEATURE_ID);
+    features << QLatin1String(Constants::MOBILE_TARGETFEATURE_ID);
+
     return features;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp
index c90aadfd734f79526acd22074c83d5f249397e81..0a3b0e8d36511cb736f49c22553ac91db3000745 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.cpp
@@ -364,6 +364,16 @@ void SymbianQtVersion::setSystemRoot(const QString &root)
     }
 }
 
+Core::FeatureSet SymbianQtVersion::availableFeatures() const
+{
+    Core::FeatureSet features = QtSupport::BaseQtVersion::availableFeatures();
+    if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 4)) //no reliable test for components, yet.
+        features |= Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_SYMBIAN);
+    features.remove(Core::Feature(QtSupport::Constants::FEATURE_QT_CONSOLE));
+
+    return features;
+}
+
 QString SymbianQtVersion::systemRoot() const
 {
     return m_systemRoot;
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h
index c405d3845d277415ff47dada4f66b35a411298a8..fafecd9ed38cf97e9a972ae3c2db064bd75dfbaa 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianqtversion.h
@@ -83,6 +83,8 @@ public:
 
     QtSupport::QtConfigWidget *createConfigurationWidget() const;
 
+    Core::FeatureSet availableFeatures() const;
+
 protected:
     QList<ProjectExplorer::Task> reportIssuesImpl(const QString &proFile, const QString &buildDir);
     void parseMkSpec(ProFileEvaluator *) const;
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
index d1cccf292a512e912a23b5c6baaf941d3347efae..1b114fc233c0d6a264aa6aba1877a65de27c7504 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
@@ -85,11 +85,6 @@ const char QT_SIMULATOR_TARGET_ID[] = "Qt4ProjectManager.Target.QtSimulatorTarge
 const char MOBILE_TARGETFEATURE_ID[] = "Qt4ProjectManager.TargetFeature.Mobile";
 const char DESKTOP_TARGETFEATURE_ID[] = "Qt4ProjectManager.TargetFeature.Desktop";
 const char SHADOWBUILD_TARGETFEATURE_ID[] = "Qt4ProjectManager.TargetFeature.ShadowBuild";
-const char QTQUICKCOMPONENTS_SYMBIAN_TARGETFEATURE_ID[]
-                               = "Qt4ProjectManager.TargetFeature.QtQuickComponentsSymbian";
-const char QTQUICKCOMPONENTS_MEEGO_TARGETFEATURE_ID[]
-                               = "Qt4ProjectManager.TargetFeature.QtQuickComponentsMeego";
-
 
 // Tool chains:
 const char GCCE_TOOLCHAIN_ID[] = "Qt4ProjectManager.ToolChain.GCCE";
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index 79f38644b05ba2ca7492c7ab95491e58e900b76b..a206254ccc54a1347579cfe3f79a82e656bf781f 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -1176,6 +1176,15 @@ QList<BuildConfigurationInfo> BuildConfigurationInfo::filterBuildConfigurationIn
     return result;
 }
 
+QList<BuildConfigurationInfo> BuildConfigurationInfo::filterBuildConfigurationInfos(const QList<BuildConfigurationInfo> &infos, Core::FeatureSet features)
+{
+    QList<BuildConfigurationInfo> result;
+    foreach (const BuildConfigurationInfo &info, infos)
+        if (info.version->availableFeatures().contains(features))
+            result.append(info);
+    return result;
+}
+
 QList<BuildConfigurationInfo> BuildConfigurationInfo::importBuildConfigurations(const QString &proFilePath)
 {
     QList<BuildConfigurationInfo> result;
diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
index bd0a4da7fe1a0d1cb03bd00a8d375c36d901b644..7fca16190d24b255b4e6431976052e21934c58ca 100644
--- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp
@@ -37,6 +37,7 @@
 
 #include <projectexplorer/projectexplorerconstants.h>
 #include <cpptools/abstracteditorsupport.h>
+#include <qtsupport/qtsupportconstants.h>
 
 #include <QtGui/QIcon>
 #include <QtCore/QFileInfo>
@@ -107,5 +108,10 @@ Core::GeneratedFiles
     return Core::GeneratedFiles() <<  source << profile;
 }
 
+Core::FeatureSet ConsoleAppWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_GENERIC_CPP_ENTRY_POINT);
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.h b/src/plugins/qt4projectmanager/wizards/consoleappwizard.h
index 64674e785693b6578bfae58ab2d3e488bdef4f4e..91199489f25cb3e51bf6c6cae7dc611324111a8e 100644
--- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.h
@@ -54,6 +54,8 @@ protected:
 
     virtual Core::GeneratedFiles generateFiles(const QWizard *w,
                                                QString *errorMessage) const;
+
+    virtual Core::FeatureSet requiredFeatures() const;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp
index d30c6aeac6e69a8614ecf65b4871a7f1b1541ce0..d6be96c9d45589d19ded557b11d43d75622ed969 100644
--- a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp
@@ -52,6 +52,11 @@ EmptyProjectWizard::EmptyProjectWizard()
 {
 }
 
+Core::FeatureSet EmptyProjectWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 QWizard *EmptyProjectWizard::createWizardDialog(QWidget *parent,
                                               const QString &defaultPath,
                                               const WizardPageList &extensionPages) const
diff --git a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.h b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.h
index 37f04d47bb5e817be056a690652848fc66578e54..0adc2c253e218f4d72f36ddac850da4dc1d07abf 100644
--- a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.h
@@ -44,6 +44,7 @@ class EmptyProjectWizard : public QtWizard
 
 public:
     EmptyProjectWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
index f05fb63696ef1fadec0198b10c0bce4f82812ff2..0e89c521b07817d829d649cb539d3ce4e2acd59f 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
@@ -40,6 +40,7 @@
 #include <coreplugin/icore.h>
 #include <extensionsystem/pluginmanager.h>
 #include <extensionsystem/invoker.h>
+#include <qtsupport/qtsupportconstants.h>
 
 #include <utils/fileutils.h>
 
@@ -95,6 +96,11 @@ GuiAppWizard::GuiAppWizard()
 {
 }
 
+Core::FeatureSet GuiAppWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_QWIDGETS);
+}
+
 GuiAppWizard::GuiAppWizard(const QString &id,
                            const QString &category,
                            const QString &displayCategory,
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.h b/src/plugins/qt4projectmanager/wizards/guiappwizard.h
index 8cd7a27b03c45f05a4a43fa6107532bdac837c4d..893df770fd2a916609d55fe8aa1a20cce6ab7915 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.h
@@ -46,6 +46,7 @@ class GuiAppWizard : public QtWizard
 
 public:
     GuiAppWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
 protected:
     GuiAppWizard(const QString &id,
diff --git a/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp b/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp
index 7e031471947038d074486ed4a5f2bbb8350a91d6..4c218c6929a198ef4e12dfd1cc0a1fafb869c635 100644
--- a/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp
@@ -39,6 +39,7 @@
 #include "qt4projectmanagerconstants.h"
 
 #include <projectexplorer/projectexplorerconstants.h>
+#include <qtsupport/qtsupportconstants.h>
 #include <limits>
 
 #include <QtCore/QCoreApplication>
@@ -93,6 +94,11 @@ Html5AppWizard::~Html5AppWizard()
     delete d;
 }
 
+Core::FeatureSet Html5AppWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_GENERIC_CPP_ENTRY_POINT);
+}
+
 Core::BaseFileWizardParameters Html5AppWizard::parameters()
 {
     Core::BaseFileWizardParameters parameters(ProjectWizard);
diff --git a/src/plugins/qt4projectmanager/wizards/html5appwizard.h b/src/plugins/qt4projectmanager/wizards/html5appwizard.h
index 39168644c28f0ba185579b67e4aff174e43388f7..577b2c14fb24d1dca69e36cd07c331482adfc9ec 100644
--- a/src/plugins/qt4projectmanager/wizards/html5appwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/html5appwizard.h
@@ -45,6 +45,7 @@ class Html5AppWizard : public AbstractMobileAppWizard
 public:
     Html5AppWizard();
     virtual ~Html5AppWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
 protected:
     QString fileToOpenPostGeneration() const;
diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp
index 95dcf4dfa94abd7f06e543dd4626ae86c277fca0..6852f6677c0a989ee82aa827c3a506f0de908640 100644
--- a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp
@@ -143,5 +143,10 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w,
     return rc;
 }
 
+Core::FeatureSet LibraryWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.h b/src/plugins/qt4projectmanager/wizards/librarywizard.h
index 1c180befcd914f7bd46b173edbe8544a4f6fe790..a1183f092df9db78e51f12f28714741ebb58c5f3 100644
--- a/src/plugins/qt4projectmanager/wizards/librarywizard.h
+++ b/src/plugins/qt4projectmanager/wizards/librarywizard.h
@@ -56,6 +56,7 @@ protected:
 
     virtual Core::GeneratedFiles generateFiles(const QWizard *w,
                                                QString *errorMessage) const;
+    virtual Core::FeatureSet requiredFeatures() const;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
index 97d2aad14830f7e285722dfb67cbf30571aa10e4..5702cfc4fd41d9d36b4eb88010b3ca5cbb02736b 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
@@ -40,6 +40,8 @@
 #include <projectexplorer/projectexplorerconstants.h>
 #include <projectexplorer/task.h>
 
+#include <qtsupport/qtsupportconstants.h>
+
 #include <QtCore/QCoreApplication>
 #include <QtGui/QIcon>
 
@@ -89,6 +91,12 @@ MobileAppWizard::~MobileAppWizard()
     delete d;
 }
 
+Core::FeatureSet MobileAppWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_GENERIC_CPP_ENTRY_POINT)
+            | Core::Feature(QtSupport::Constants::FEATURE_QWIDGETS);
+}
+
 Core::BaseFileWizardParameters MobileAppWizard::parameters()
 {
     Core::BaseFileWizardParameters parameters(ProjectWizard);
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
index bbe56ddb83654e8354a29b05df89162249a89970..cbe4e7aecdf14d42ede3d424f2cb92312e4403c8 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
@@ -45,6 +45,7 @@ class MobileAppWizard : public AbstractMobileAppWizard
 public:
     MobileAppWizard();
     virtual ~MobileAppWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
 protected:
     QString fileToOpenPostGeneration() const;
diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp
index 8cf8bca90ab0bd87837fac93a7769d8be6e2b2b4..f2648a96abb65c08ae2f3dc60c9ca770789fb009 100644
--- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp
@@ -39,6 +39,7 @@
 #include "qt4projectmanagerconstants.h"
 
 #include <qtsupport/qtsupportconstants.h>
+#include <coreplugin/dialogs/iwizard.h>
 
 #include <QtCore/QCoreApplication>
 #include <QtGui/QIcon>
@@ -87,19 +88,12 @@ bool QtQuickAppWizardDialog::validateCurrentPage()
         setIgnoreGenericOptionsPage(false);
         if (m_componentOptionsPage->componentSet() == QtQuickApp::Symbian11Components) {
             setIgnoreGenericOptionsPage(true);
-            targetsPage()->setMinimumQtVersion(QtSupport::QtVersionNumber(4, 7, 4));
-            QSet<QString> requiredFeatures;
-            requiredFeatures << QLatin1String(Constants::QTQUICKCOMPONENTS_SYMBIAN_TARGETFEATURE_ID);
-            targetsPage()->setRequiredFeatures(requiredFeatures);
+            targetsPage()->setRequiredQtFeatures(Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_MEEGO));
         } else if (m_componentOptionsPage->componentSet() == QtQuickApp::Meego10Components) {
-            targetsPage()->setMinimumQtVersion(QtSupport::QtVersionNumber(4, 7, 4));
-            QSet<QString> requiredFeatures;
-            requiredFeatures << QLatin1String(Constants::QTQUICKCOMPONENTS_MEEGO_TARGETFEATURE_ID);
-            targetsPage()->setRequiredFeatures(requiredFeatures);
+            targetsPage()->setRequiredQtFeatures(Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_MEEGO));
         } else {
             targetsPage()->setMinimumQtVersion(QtSupport::QtVersionNumber(4, 7, 0));
-            QSet<QString> requiredFeatures;
-            targetsPage()->setRequiredFeatures(requiredFeatures);
+            targetsPage()->setRequiredQtFeatures(Core::FeatureSet());
         }
     }
     return AbstractMobileAppWizardDialog::validateCurrentPage();
@@ -126,6 +120,13 @@ QtQuickAppWizard::~QtQuickAppWizard()
     delete d;
 }
 
+Core::FeatureSet QtQuickAppWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_GENERIC_CPP_ENTRY_POINT) |
+            Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK);
+
+}
+
 Core::BaseFileWizardParameters QtQuickAppWizard::parameters()
 {
     Core::BaseFileWizardParameters parameters(ProjectWizard);
diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h
index e35ae7b4f95739cb604be8d6ba674a999c195974..60e7c595a9a2657237b174254167a628b8ec3c0e 100644
--- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h
@@ -45,6 +45,7 @@ class QtQuickAppWizard : public AbstractMobileAppWizard
 public:
     QtQuickAppWizard();
     virtual ~QtQuickAppWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
 protected:
     QString fileToOpenPostGeneration() const;
diff --git a/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.cpp b/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.cpp
index bdd887c7921733694ba21cf9aec52ac5d268d94c..c9da43c7178843454dc0faec2ad5638265048450 100644
--- a/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.cpp
@@ -93,5 +93,10 @@ bool SubdirsProjectWizard::postGenerateFiles(const QWizard *w, const Core::Gener
     return true;
 }
 
+Core::FeatureSet SubdirsProjectWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.h b/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.h
index ec8667ac8b4f3330eaac027a5683d144798e603e..42695f2905b11e990c1fdedb2fcd13fc94ee76c4 100644
--- a/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/subdirsprojectwizard.h
@@ -53,6 +53,7 @@ protected:
     virtual Core::GeneratedFiles generateFiles(const QWizard *w,
                                                QString *errorMessage) const;
     virtual bool postGenerateFiles(const QWizard *, const Core::GeneratedFiles &l, QString *errorMessage);
+    virtual Core::FeatureSet requiredFeatures() const;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index 27a4c227f7f266925c528be9c6997cd129d4232f..ba96396dfe5719ba74a4df5d3a818b394f104be7 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -103,9 +103,14 @@ void TargetSetupPage::setPreferredFeatures(const QSet<QString> &featureIds)
     m_preferredFeatures = featureIds;
 }
 
-void TargetSetupPage::setRequiredFeatures(const QSet<QString> &featureIds)
+void TargetSetupPage::setRequiredTargetFeatures(const QSet<QString> &featureIds)
 {
-    m_requiredFeatures = featureIds;
+    m_requiredTargetFeatures = featureIds;
+}
+
+void TargetSetupPage::setRequiredQtFeatures(const Core::FeatureSet &features)
+{
+    m_requiredQtFeatures = features;
 }
 
 void TargetSetupPage::setMinimumQtVersion(const QtSupport::QtVersionNumber &number)
@@ -130,10 +135,12 @@ void TargetSetupPage::setupWidgets()
     foreach (Qt4BaseTargetFactory *factory, factories) {
         QStringList ids = factory->supportedTargetIds(0);
         foreach (const QString &id, ids) {
-            if (!factory->targetFeatures(id).contains(m_requiredFeatures))
+            if (!factory->targetFeatures(id).contains(m_requiredTargetFeatures))
                 continue;
 
             QList<BuildConfigurationInfo> infos = BuildConfigurationInfo::filterBuildConfigurationInfos(m_importInfos, id);
+            infos = BuildConfigurationInfo::filterBuildConfigurationInfos(infos, m_requiredQtFeatures);
+
             Qt4TargetSetupWidget *widget =
                     factory->createTargetSetupWidget(id, m_proFilePath,
                                                      m_minimumQtVersionNumber, m_maximumQtVersionNumber,
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
index 357e29249d76dcfd9b2867562c231ca04f681db1..1ab03441bbf0aafeaea2ab368946c338a22fd9a9 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
@@ -36,6 +36,7 @@
 #include "../qt4target.h"
 #include "../qt4projectmanager_global.h"
 #include <qtsupport/qtversionmanager.h>
+#include <coreplugin/featureprovider.h>
 
 #include <QtCore/QString>
 #include <QtGui/QWizard>
@@ -77,7 +78,10 @@ public:
     void setPreferredFeatures(const QSet<QString> &featureIds);
     /// Sets the features a target must support
     /// call this before \sa initializePage()
-    void setRequiredFeatures(const QSet<QString> &featureIds);
+    void setRequiredTargetFeatures(const QSet<QString> &featureIds);
+    /// Sets the features a qt version must support
+    /// call this before \sa initializePage()
+    void setRequiredQtFeatures(const Core::FeatureSet &features);
     /// Sets the minimum qt version
     /// calls this before \sa initializePage()
     void setMinimumQtVersion(const QtSupport::QtVersionNumber &number);
@@ -102,7 +106,8 @@ private:
     void deleteWidgets();
 
     QSet<QString> m_preferredFeatures;
-    QSet<QString> m_requiredFeatures;
+    QSet<QString> m_requiredTargetFeatures;
+    Core::FeatureSet m_requiredQtFeatures;
     bool m_importSearch;
     QtSupport::QtVersionNumber m_minimumQtVersionNumber;
     QtSupport::QtVersionNumber m_maximumQtVersionNumber;
diff --git a/src/plugins/qt4projectmanager/wizards/testwizard.cpp b/src/plugins/qt4projectmanager/wizards/testwizard.cpp
index 0f63048772d97c72e7edd0091722de8201510fab..7c0383f18e91ec6fbb7906a0471c2e04005b04d2 100644
--- a/src/plugins/qt4projectmanager/wizards/testwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/testwizard.cpp
@@ -35,6 +35,7 @@
 
 #include <cpptools/abstracteditorsupport.h>
 #include <projectexplorer/projectexplorerconstants.h>
+#include <qtsupport/qtsupportconstants.h>
 
 #include <utils/qtcassert.h>
 
@@ -186,5 +187,11 @@ Core::GeneratedFiles TestWizard::generateFiles(const QWizard *w, QString *errorM
     return Core::GeneratedFiles() <<  source << profile;
 }
 
+Core::FeatureSet TestWizard::requiredFeatures() const
+{
+    return Core::Feature(QtSupport::Constants::FEATURE_GENERIC_CPP_ENTRY_POINT) |
+            Core::Feature(QtSupport::Constants::FEATURE_QT);
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/wizards/testwizard.h b/src/plugins/qt4projectmanager/wizards/testwizard.h
index 46a6d9c28e18b60de9f094cee10d340ed9669c64..f48aa43f2819a063de1c56e0336a3d6e8c3622ef 100644
--- a/src/plugins/qt4projectmanager/wizards/testwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/testwizard.h
@@ -44,6 +44,7 @@ class TestWizard : public QtWizard
 
 public:
     TestWizard();
+    virtual Core::FeatureSet requiredFeatures() const;
 
 protected:
     virtual QWizard *createWizardDialog(QWidget *parent,
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index 679316be962b21e4923bcf93576e033ae2d02bba..2ab646da99127122986435a28e5824f81c185f00 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -44,6 +44,7 @@
 #include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/projectexplorerconstants.h>
 #include <projectexplorer/toolchainmanager.h>
+#include <qtsupport/qtsupportconstants.h>
 
 #include <utils/persistentsettings.h>
 #include <utils/environment.h>
@@ -252,6 +253,20 @@ QString BaseQtVersion::defaultDisplayName(const QString &versionString, const Ut
         QCoreApplication::translate("QtVersion", "Qt %1 (%2)").arg(versionString, location);
 }
 
+Core::FeatureSet BaseQtVersion::availableFeatures() const
+{
+    Core::FeatureSet features = Core::FeatureSet(QtSupport::Constants::FEATURE_GENERIC_CPP_ENTRY_POINT) |
+            Core::FeatureSet(QtSupport::Constants::FEATURE_QWIDGETS)
+            | Core::FeatureSet(QtSupport::Constants::FEATURE_QT)
+            | Core::FeatureSet(QtSupport::Constants::FEATURE_QT_WEBKIT)
+            | Core::FeatureSet(QtSupport::Constants::FEATURE_QT_CONSOLE);
+
+     if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 0))
+         features |= Core::FeatureSet(QtSupport::Constants::FEATURE_QT_QUICK);
+
+     return features;
+}
+
 void BaseQtVersion::setId(int id)
 {
     m_id = id;
diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h
index 91bc7b24a74bed1f29aa8350179d3046fdcbdd37..2cd871bb321ab211ab2a3646728a99fcc4250845 100644
--- a/src/plugins/qtsupport/baseqtversion.h
+++ b/src/plugins/qtsupport/baseqtversion.h
@@ -40,6 +40,7 @@
 #include <projectexplorer/abi.h>
 #include <projectexplorer/headerpath.h>
 #include <projectexplorer/task.h>
+#include <coreplugin/featureprovider.h>
 
 #include <QtCore/QVariantMap>
 #include <QtGui/QWidget>
@@ -214,6 +215,8 @@ public:
                                       const Utils::FileName &qmakePath,
                                       bool fromPath = false);
 
+    virtual Core::FeatureSet availableFeatures() const;
+
 protected:
     BaseQtVersion();
     BaseQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
diff --git a/src/plugins/qtsupport/qtsupportconstants.h b/src/plugins/qtsupport/qtsupportconstants.h
index ed6b0bd5a9c917d5d7529e0e4c9b24f3bc9ab84e..696ef55f301a15223405c8f13a88fc82ffd7b556 100644
--- a/src/plugins/qtsupport/qtsupportconstants.h
+++ b/src/plugins/qtsupport/qtsupportconstants.h
@@ -47,6 +47,17 @@ const char DESKTOPQT[]   = "Qt4ProjectManager.QtVersion.Desktop";
 const char SIMULATORQT[] = "Qt4ProjectManager.QtVersion.Simulator";
 const char WINCEQT[]     = "Qt4ProjectManager.QtVersion.WinCE";
 
+//Qt Features
+const char FEATURE_QT[] = "QtSupport.Wizards.FeatureQt";
+const char FEATURE_QWIDGETS[] = "QtSupport.Wizards.FeatureQWidgets";
+const char FEATURE_QT_QUICK[] = "QtSupport.Wizards.FeatureQtQuick";
+const char FEATURE_QT_WEBKIT[] = "QtSupport.Wizards.FeatureQtWebkit";
+const char FEATURE_QT_CONSOLE[] = "QtSupport.Wizards.FeatureQtConsole";
+const char FEATURE_GENERIC_CPP_ENTRY_POINT[] ="QtSupport.Wizards.FeatureGenericCppEntryPoint";
+const char FEATURE_QTQUICK_COMPONENTS_SYMBIAN[] = "QtSupport.Wizards.FeatureQtQuickComponentsSymbian";
+const char FEATURE_QTQUICK_COMPONENTS_MEEGO[] = "QtSupport.Wizards.FeatureQtQuickComponentsMeego";
+
+
 // QML wizard categories
 // both the qt4projectmanager and the qmlprojectmanager do have qt quick wizards
 // so we define the category here
diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp
index fe634b47d098213742c2efa6ad0b530f4df426ab..5ebf76147bbbac6d685f900e2a5f0f4b418befc9 100644
--- a/src/plugins/qtsupport/qtsupportplugin.cpp
+++ b/src/plugins/qtsupport/qtsupportplugin.cpp
@@ -57,6 +57,10 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes
 
     QtVersionManager *mgr = new QtVersionManager;
     addAutoReleasedObject(mgr);
+
+    QtFeatureProvider *featureMgr = new QtFeatureProvider;
+    addAutoReleasedObject(featureMgr);
+
     addAutoReleasedObject(new QtOptionsPage);
 
     ExamplesWelcomePage *welcomePage;
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index 31516ad01337291070ad5f24d43011af5086dba5..8e9e4bfacee6ebb5472787a832a14ef8a9be4c71 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -34,6 +34,8 @@
 
 #include "qtversionfactory.h"
 
+#include "qtsupportconstants.h"
+
 #include <projectexplorer/debugginghelper.h>
 // only for legay restore
 #include <projectexplorer/projectexplorerconstants.h>
@@ -600,6 +602,18 @@ QString QtVersionManager::popPendingGcceUpdate()
     return m_pendingGcceUpdates.takeFirst();
 }
 
+Core::FeatureSet QtVersionManager::availableFeatures() const
+{
+    Core::FeatureSet features;
+    foreach (BaseQtVersion *const qtVersion, validVersions()) {
+        if (qtVersion->isValid())
+            features |= qtVersion->availableFeatures();
+    }
+    if (validVersions().empty())
+        features |= Constants::FEATURE_GENERIC_CPP_ENTRY_POINT;
+    return features;
+}
+
 BaseQtVersion *QtVersionManager::version(int id) const
 {
     QMap<int, BaseQtVersion *>::const_iterator it = m_versions.find(id);
@@ -919,3 +933,8 @@ BaseQtVersion::QmakeBuildConfigs QtVersionManager::qmakeBuildConfigFromCmdArgs(Q
     }
     return result;
 }
+
+Core::FeatureSet QtFeatureProvider::availableFeatures() const
+{
+     return QtVersionManager::instance()->availableFeatures();
+}
diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h
index fb46fcf31c0a16f22891f0446791431934cec618..8b0071d9113766b34bbe785ed271291dd450444a 100644
--- a/src/plugins/qtsupport/qtversionmanager.h
+++ b/src/plugins/qtsupport/qtversionmanager.h
@@ -111,6 +111,9 @@ public:
     // Compatibility with pre-2.2:
     QString popPendingMwcUpdate();
     QString popPendingGcceUpdate();
+
+    Core::FeatureSet availableFeatures() const;
+
 signals:
     // content of BaseQtVersion objects with qmake path might have changed
     void dumpUpdatedFor(const Utils::FileName &qmakeCommand);
@@ -159,6 +162,19 @@ private:
     QStringList m_pendingGcceUpdates;
 };
 
+namespace Internal {
+
+class QTSUPPORT_EXPORT QtFeatureProvider : public Core::IFeatureProvider
+{
+    Q_OBJECT
+
+public:
+    QtFeatureProvider() {}
+    virtual Core::FeatureSet availableFeatures() const;
+};
+
+}
+
 } // namespace Qt4ProjectManager
 
 #endif // QTVERSIONMANAGER_H
diff --git a/src/plugins/vcsbase/basecheckoutwizard.cpp b/src/plugins/vcsbase/basecheckoutwizard.cpp
index 3514613a173bfe901cfaa6dcec03b1c2fffab28d..e8f96224e2b4df8d9e1fc6f2314bc12821080fbd 100644
--- a/src/plugins/vcsbase/basecheckoutwizard.cpp
+++ b/src/plugins/vcsbase/basecheckoutwizard.cpp
@@ -147,6 +147,11 @@ void BaseCheckoutWizard::runWizard(const QString &path, QWidget *parent)
     }
 }
 
+Core::FeatureSet BaseCheckoutWizard::requiredFeatures() const
+{
+    return Core::FeatureSet();
+}
+
 static inline QString msgNoProjectFiles(const QDir &dir, const QStringList &patterns)
 {
     return BaseCheckoutWizard::tr("Could not find any project files matching (%1) in the directory '%2'.").arg(patterns.join(QLatin1String(", ")), QDir::toNativeSeparators(dir.absolutePath()));
diff --git a/src/plugins/vcsbase/basecheckoutwizard.h b/src/plugins/vcsbase/basecheckoutwizard.h
index 57a0388781feefb26022a17494a483de54f18fd4..08e68a808f395b94dc39f5649f70c540c792af85 100644
--- a/src/plugins/vcsbase/basecheckoutwizard.h
+++ b/src/plugins/vcsbase/basecheckoutwizard.h
@@ -66,6 +66,8 @@ public:
 
     virtual void runWizard(const QString &path, QWidget *parent);
 
+    virtual Core::FeatureSet requiredFeatures() const;
+
     static QString openProject(const QString &path, QString *errorMessage);
 
 protected: