diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp
index b2a48ad379fe470a728f3f7c3d6b503ce0a656a4..1de07772c3cc4db3a8918fbb45ca3c4cb158314c 100644
--- a/src/plugins/projectexplorer/kit.cpp
+++ b/src/plugins/projectexplorer/kit.cpp
@@ -48,6 +48,7 @@ namespace {
 
 const char ID_KEY[] = "PE.Profile.Id";
 const char DISPLAYNAME_KEY[] = "PE.Profile.Name";
+const char FILESYSTEMFRIENDLYNAME_KEY[] = "PE.Profile.FileSystemFriendlyName";
 const char AUTODETECTED_KEY[] = "PE.Profile.AutoDetected";
 const char AUTODETECTIONSOURCE_KEY[] = "PE.Profile.AutoDetectionSource";
 const char SDK_PROVIDED_KEY[] = "PE.Profile.SDK";
@@ -89,6 +90,7 @@ public:
     }
 
     QString m_displayName;
+    QString m_fileSystemFriendlyName;
     Id m_id;
     int m_nestedBlockingLevel;
     bool m_autodetected;
@@ -139,6 +141,7 @@ Kit::Kit(const QVariantMap &data) :
 
     d->m_displayName = data.value(QLatin1String(DISPLAYNAME_KEY),
                                   d->m_displayName).toString();
+    d->m_fileSystemFriendlyName = data.value(QLatin1String(FILESYSTEMFRIENDLYNAME_KEY)).toString();
     d->m_iconPath = Utils::FileName::fromString(data.value(QLatin1String(ICON_KEY),
                                                            d->m_iconPath.toString()).toString());
     d->m_icon = icon(d->m_iconPath);
@@ -191,6 +194,7 @@ Kit *Kit::clone(bool keepName) const
                 .arg(d->m_displayName);
     k->d->m_autodetected = false;
     k->d->m_data = d->m_data;
+    // Do not clone m_fileSystemFriendlyName, needs to be unique
     k->d->m_isValid = d->m_isValid;
     k->d->m_icon = d->m_icon;
     k->d->m_iconPath = d->m_iconPath;
@@ -208,6 +212,7 @@ void Kit::copyFrom(const Kit *k)
     d->m_autodetected = k->d->m_autodetected;
     d->m_autoDetectionSource = k->d->m_autoDetectionSource;
     d->m_displayName = k->d->m_displayName;
+    d->m_fileSystemFriendlyName = k->d->m_fileSystemFriendlyName;
     d->m_mustNotify = true;
     d->m_mustNotifyAboutDisplayName = true;
     d->m_sticky = k->d->m_sticky;
@@ -310,9 +315,21 @@ QStringList Kit::candidateNameList(const QString &base) const
     return result;
 }
 
+void Kit::setCustomFileSystemFriendlyName(const QString &fileSystemFriendlyName)
+{
+    d->m_fileSystemFriendlyName = fileSystemFriendlyName;
+}
+
+QString Kit::customFileSystemFriendlyName() const
+{
+    return d->m_fileSystemFriendlyName;
+}
+
 QString Kit::fileSystemFriendlyName() const
 {
-    QString name = Utils::FileUtils::qmakeFriendlyName(displayName());
+    QString name = customFileSystemFriendlyName();
+    if (name.isEmpty())
+        name = Utils::FileUtils::qmakeFriendlyName(displayName());
     foreach (Kit *i, KitManager::kits()) {
         if (i == this)
             continue;
@@ -421,6 +438,7 @@ bool Kit::isEqual(const Kit *other) const
     return isDataEqual(other)
             && d->m_iconPath == other->d->m_iconPath
             && d->m_displayName == other->d->m_displayName
+            && d->m_fileSystemFriendlyName == other->d->m_fileSystemFriendlyName
             && d->m_mutable == other->d->m_mutable;
 
 }
@@ -433,6 +451,8 @@ QVariantMap Kit::toMap() const
     data.insert(QLatin1String(ID_KEY), QString::fromLatin1(d->m_id.name()));
     data.insert(QLatin1String(DISPLAYNAME_KEY), d->m_displayName);
     data.insert(QLatin1String(AUTODETECTED_KEY), d->m_autodetected);
+    if (!d->m_fileSystemFriendlyName.isEmpty())
+        data.insert(QLatin1String(FILESYSTEMFRIENDLYNAME_KEY), d->m_fileSystemFriendlyName);
     data.insert(QLatin1String(AUTODETECTIONSOURCE_KEY), d->m_autoDetectionSource);
     data.insert(QLatin1String(SDK_PROVIDED_KEY), d->m_sdkProvided);
     data.insert(QLatin1String(ICON_KEY), d->m_iconPath.toString());
diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h
index d8e3adc27ea6ddd5346c1548c2d5276abca66b34..8092f445e639bf5dc29699435bc74bc3478a7e92 100644
--- a/src/plugins/projectexplorer/kit.h
+++ b/src/plugins/projectexplorer/kit.h
@@ -74,6 +74,8 @@ public:
     QStringList candidateNameList(const QString &base) const;
 
     QString fileSystemFriendlyName() const;
+    QString customFileSystemFriendlyName() const;
+    void setCustomFileSystemFriendlyName(const QString &fileSystemFriendlyName);
 
     bool isAutoDetected() const;
     QString autoDetectionSource() const;
diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
index 584afb852f021aa5e8372d4df8a15317a0e4180b..90063092558f625904f755fe7834fee12743c9e1 100644
--- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
@@ -28,6 +28,7 @@
 ****************************************************************************/
 
 #include "kitmanagerconfigwidget.h"
+#include "projectexplorerconstants.h"
 
 #include "kit.h"
 #include "kitmanager.h"
@@ -36,6 +37,8 @@
 #include <utils/qtcassert.h>
 
 #include <QAction>
+#include <QRegExp>
+#include <QRegExpValidator>
 #include <QFileDialog>
 #include <QGridLayout>
 #include <QLabel>
@@ -55,14 +58,32 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
     m_layout(new QGridLayout),
     m_iconButton(new QToolButton),
     m_nameEdit(new QLineEdit),
+    m_fileSystemFriendlyNameLineEdit(new QLineEdit),
     m_kit(k),
     m_modifiedKit(new Kit(Core::Id(WORKING_COPY_KIT_ID))),
     m_fixingKit(false)
 {
+    static const Qt::Alignment alignment
+            = static_cast<Qt::Alignment>(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment));
+
     m_layout->addWidget(m_nameEdit, 0, WidgetColumn);
     m_layout->addWidget(m_iconButton, 0, ButtonColumn);
     setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
 
+    QString toolTip =
+        tr("<html><head/><body><p>The name of the kit suitable for generating "
+           "directory names. This value is used for the variable <i>%1</i>, "
+           "which for example determines the name of the shadow build directory."
+           "</p></body></html>").arg(QLatin1String(Constants::VAR_CURRENTKIT_FILESYSTEMNAME));
+    QLabel *label = createLabel(tr("File system name:"), toolTip);
+    m_layout->addWidget(label, 1, LabelColumn, alignment);
+    m_fileSystemFriendlyNameLineEdit->setToolTip(toolTip);
+    QRegExp fileSystemFriendlyNameRegexp(QLatin1String("^[A-Za-z0-9_-]*$"));
+    Q_ASSERT(fileSystemFriendlyNameRegexp.isValid());
+    m_fileSystemFriendlyNameLineEdit->setValidator(new QRegExpValidator(fileSystemFriendlyNameRegexp, m_fileSystemFriendlyNameLineEdit));
+    m_layout->addWidget(m_fileSystemFriendlyNameLineEdit, 1, WidgetColumn);
+    connect(m_fileSystemFriendlyNameLineEdit, SIGNAL(textChanged(QString)), this, SLOT(setFileSystemFriendlyName()));
+
     QWidget *inner = new QWidget;
     inner->setLayout(m_layout);
 
@@ -76,10 +97,8 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
     mainLayout->setMargin(1);
     mainLayout->addWidget(scroll, 0, 0);
 
-    static const Qt::Alignment alignment
-            = static_cast<Qt::Alignment>(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment));
-    QString toolTip = tr("Kit name and icon.");
-    QLabel *label = createLabel(tr("Name:"), toolTip);
+    toolTip = tr("Kit name and icon.");
+    label = createLabel(tr("Name:"), toolTip);
     m_layout->addWidget(label, 0, LabelColumn, alignment);
     m_iconButton->setToolTip(toolTip);
 
@@ -144,6 +163,7 @@ void KitManagerConfigWidget::discard()
     }
     m_iconButton->setIcon(m_modifiedKit->icon());
     m_nameEdit->setText(m_modifiedKit->displayName());
+    m_fileSystemFriendlyNameLineEdit->setText(m_modifiedKit->customFileSystemFriendlyName());
     emit dirty();
 }
 
@@ -276,6 +296,13 @@ void KitManagerConfigWidget::setDisplayName()
     m_nameEdit->setCursorPosition(pos);
 }
 
+void KitManagerConfigWidget::setFileSystemFriendlyName()
+{
+    const int pos = m_fileSystemFriendlyNameLineEdit->cursorPosition();
+    m_modifiedKit->setCustomFileSystemFriendlyName(m_fileSystemFriendlyNameLineEdit->text());
+    m_fileSystemFriendlyNameLineEdit->setCursorPosition(pos);
+}
+
 void KitManagerConfigWidget::workingCopyWasUpdated(Kit *k)
 {
     if (k != m_modifiedKit || m_fixingKit)
@@ -288,6 +315,7 @@ void KitManagerConfigWidget::workingCopyWasUpdated(Kit *k)
     foreach (KitConfigWidget *w, m_widgets)
         w->refresh();
     m_nameEdit->setText(k->displayName());
+    m_fileSystemFriendlyNameLineEdit->setText(k->customFileSystemFriendlyName());
     m_iconButton->setIcon(k->icon());
     updateVisibility();
     emit dirty();
diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.h b/src/plugins/projectexplorer/kitmanagerconfigwidget.h
index 13e79c8305a9545b4446426ee6f7c5b1588cf39d..0187b4362345885da2e3ee51855e21af476543bb 100644
--- a/src/plugins/projectexplorer/kitmanagerconfigwidget.h
+++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.h
@@ -78,6 +78,7 @@ signals:
 private slots:
     void setIcon();
     void setDisplayName();
+    void setFileSystemFriendlyName();
     void workingCopyWasUpdated(ProjectExplorer::Kit *k);
     void kitWasUpdated(ProjectExplorer::Kit *k);
     void updateMutableState();
@@ -95,6 +96,7 @@ private:
     QGridLayout *m_layout;
     QToolButton *m_iconButton;
     QLineEdit *m_nameEdit;
+    QLineEdit *m_fileSystemFriendlyNameLineEdit;
     QList<KitConfigWidget *> m_widgets;
     QList<QLabel *> m_labels;
     Kit *m_kit;