diff --git a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp
index f4c7455e017365d2dd3989b94e794443555876ed..31cc36ee97670b5a54f073c6306e6cc374c6c620 100644
--- a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp
@@ -40,123 +40,47 @@
 #include <QtGui/QCheckBox>
 #include <QtGui/QPushButton>
 
+Q_DECLARE_METATYPE(Core::IFile*);
+
 using namespace Core;
 using namespace Core::Internal;
 
-FileItem::FileItem(QTreeWidget *tree, bool supportOpen, bool open, const QString &text)
-    : QTreeWidgetItem(tree)
-{
-    m_saveCheckBox = createCheckBox(tree, 0);
-    m_saveCheckBox->setChecked(true);
-
-    QFileInfo fi(text);
-    QString name = fi.fileName();
-    if (open)
-        name.append(tr(" [ReadOnly]"));
-
-    if (supportOpen) {
-        m_sccCheckBox = createCheckBox(tree, 1);
-        m_sccCheckBox->setEnabled(open);
-        m_sccCheckBox->setChecked(open);
-        connect(m_saveCheckBox, SIGNAL(stateChanged(int)),
-            this, SLOT(updateSCCCheckBox()));
-        setText(2, name);
-        setToolTip(2, text);
-    } else {
-        m_sccCheckBox = 0;
-        setText(2, name);
-        setToolTip(2, text);
-    }
-}
-
-QCheckBox *FileItem::createCheckBox(QTreeWidget *tree, int column)
-{
-    QWidget *w = new QWidget();
-    QHBoxLayout *l = new QHBoxLayout(w);
-    l->setMargin(0);
-    l->setSpacing(0);
-    QCheckBox *box = new QCheckBox(w);
-    l->addWidget(box);
-    l->setAlignment(box, Qt::AlignCenter);
-    w->setLayout(l);
-    tree->setItemWidget(this, column, w);
-    return box;
-}
-
-void FileItem::updateSCCCheckBox()
-{
-    if (!m_saveCheckBox->isChecked()) {
-        m_sccCheckBox->setEnabled(false);
-        m_sccCheckBox->setChecked(false);
-    } else {
-        m_sccCheckBox->setEnabled(true);
-    }
-}
-
-bool FileItem::shouldBeSaved() const
-{
-    return m_saveCheckBox->isChecked();
-}
-
-void FileItem::setShouldBeSaved(bool s)
-{
-    m_saveCheckBox->setChecked(s);
-}
-
-bool FileItem::shouldBeOpened() const
-{
-    if (m_sccCheckBox)
-        return m_sccCheckBox->isChecked();
-    return false;
-}
-
-
-
-SaveItemsDialog::SaveItemsDialog(MainWindow *mainWindow,
+SaveItemsDialog::SaveItemsDialog(QWidget *parent,
                                  QMap<IFile*, QString> items)
-    : QDialog(mainWindow)
+    : QDialog(parent)
 {
     m_ui.setupUi(this);
-    QPushButton *uncheckButton = m_ui.buttonBox->addButton(tr("Uncheck All"),
-                                                           QDialogButtonBox::ActionRole);
-    QPushButton *discardButton = m_ui.buttonBox->addButton(tr("Discard All"),
-                                                           QDialogButtonBox::DestructiveRole);
-    m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
-    m_ui.buttonBox->button(QDialogButtonBox::Ok)->setFocus(Qt::TabFocusReason);
-
-    m_ui.treeWidget->header()->setMovable(false);
-    m_ui.treeWidget->setRootIsDecorated(false);
-    m_ui.treeWidget->setColumnCount(2);
-
-    QStringList headers;
-    headers << tr("Save") << tr("File Name");
-
-    const bool hasVersionControl = true;
-    if (hasVersionControl) {
-        m_ui.treeWidget->setColumnCount(3);
-        headers.insert(1, tr("Open with SCC"));
-    }
-    m_ui.treeWidget->setHeaderLabels(headers);
+    QPushButton *discardButton = m_ui.buttonBox->addButton(tr("Don't Save"), QDialogButtonBox::DestructiveRole);
+    m_ui.buttonBox->button(QDialogButtonBox::Save)->setDefault(true);
+    m_ui.buttonBox->button(QDialogButtonBox::Save)->setFocus(Qt::TabFocusReason);
+    m_ui.buttonBox->button(QDialogButtonBox::Save)->setMinimumWidth(130); // bad magic number to avoid resizing of button
 
-    FileItem *itm;
     QMap<IFile*, QString>::const_iterator it = items.constBegin();
     while (it != items.constEnd()) {
-        QString directory = QFileInfo(it.key()->fileName()).absolutePath();
-        bool fileHasVersionControl = mainWindow->vcsManager()->findVersionControlForDirectory(directory) != 0;
-        itm = new FileItem(m_ui.treeWidget, fileHasVersionControl,
-            it.key()->isReadOnly(), it.value());
-        m_itemMap.insert(itm, it.key());
+        QString visibleName;
+        QString directory;
+        QString fileName = it.key()->fileName();
+        if (fileName.isEmpty()) {
+            visibleName = it.key()->suggestedFileName();
+        } else {
+            QFileInfo info = QFileInfo(fileName);
+            directory = info.absolutePath();
+            visibleName = info.fileName();
+        }
+        QTreeWidgetItem *item = new QTreeWidgetItem(m_ui.treeWidget, QStringList()
+                                                    << visibleName << directory);
+        item->setData(0, Qt::UserRole, qVariantFromValue(it.key()));
         ++it;
     }
 
     m_ui.treeWidget->resizeColumnToContents(0);
-    if (hasVersionControl)
-        m_ui.treeWidget->resizeColumnToContents(1);
+    m_ui.treeWidget->selectAll();
+    updateSaveButton();
 
-    connect(m_ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()),
+    connect(m_ui.buttonBox->button(QDialogButtonBox::Save), SIGNAL(clicked()),
             this, SLOT(collectItemsToSave()));
-    connect(uncheckButton, SIGNAL(clicked()), this, SLOT(uncheckAll()));
     connect(discardButton, SIGNAL(clicked()), this, SLOT(discardAll()));
+    connect(m_ui.treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(updateSaveButton()));
 }
 
 void SaveItemsDialog::setMessage(const QString &msg)
@@ -164,24 +88,34 @@ void SaveItemsDialog::setMessage(const QString &msg)
     m_ui.msgLabel->setText(msg);
 }
 
+void SaveItemsDialog::updateSaveButton()
+{
+    int count = m_ui.treeWidget->selectedItems().count();
+    QPushButton *button = m_ui.buttonBox->button(QDialogButtonBox::Save);
+    if (count == m_ui.treeWidget->topLevelItemCount()) {
+        button->setEnabled(true);
+        button->setText(tr("Save All"));
+    } else if (count == 0) {
+        button->setEnabled(false);
+        button->setText(tr("Save"));
+    } else {
+        button->setEnabled(true);
+        button->setText(tr("Save Selected"));
+    }
+}
+
 void SaveItemsDialog::collectItemsToSave()
 {
     m_itemsToSave.clear();
-    m_itemsToOpen.clear();
-    QMap<FileItem*, IFile*>::const_iterator it = m_itemMap.constBegin();
-    while (it != m_itemMap.constEnd()) {
-        if (it.key()->shouldBeSaved())
-            m_itemsToSave << it.value();
-        if (it.key()->shouldBeOpened())
-            m_itemsToOpen.insert(it.value());
-        ++it;
+    foreach (QTreeWidgetItem *item, m_ui.treeWidget->selectedItems()) {
+        m_itemsToSave.append(item->data(0, Qt::UserRole).value<IFile*>());
     }
     accept();
 }
 
 void SaveItemsDialog::discardAll()
 {
-    uncheckAll();
+    m_ui.treeWidget->clearSelection();
     collectItemsToSave();
 }
 
@@ -190,15 +124,7 @@ QList<IFile*> SaveItemsDialog::itemsToSave() const
     return m_itemsToSave;
 }
 
-QSet<IFile*> SaveItemsDialog::itemsToOpen() const
+QSet<IFile*> SaveItemsDialog::itemsToOpenWithVCS() const
 {
-    return m_itemsToOpen;
-}
-
-void SaveItemsDialog::uncheckAll()
-{
-    for (int i=0; i<m_ui.treeWidget->topLevelItemCount(); ++i) {
-        FileItem *item = static_cast<FileItem*>(m_ui.treeWidget->topLevelItem(i));
-        item->setShouldBeSaved(false);
-    }
+    return m_itemsToSave.toSet();
 }
diff --git a/src/plugins/coreplugin/dialogs/saveitemsdialog.h b/src/plugins/coreplugin/dialogs/saveitemsdialog.h
index d6ceb414a8b068504daac06a60245ae54982b7c0..7c41f2efedd8f2f3c2558a5d88c71ef26ebb5181 100644
--- a/src/plugins/coreplugin/dialogs/saveitemsdialog.h
+++ b/src/plugins/coreplugin/dialogs/saveitemsdialog.h
@@ -48,47 +48,26 @@ namespace Internal {
 
 class MainWindow;
 
-class FileItem : public QObject, public QTreeWidgetItem
-{
-    Q_OBJECT
-
-public:
-    FileItem(QTreeWidget *tree, bool supportOpen,
-             bool open, const QString &text);
-    bool shouldBeSaved() const;
-    void setShouldBeSaved(bool s);
-    bool shouldBeOpened() const;
-
-private slots:
-    void updateSCCCheckBox();
-
-private:
-    QCheckBox *createCheckBox(QTreeWidget *tree, int column);
-    QCheckBox *m_saveCheckBox;
-    QCheckBox *m_sccCheckBox;
-};
-
 class SaveItemsDialog : public QDialog
 {
     Q_OBJECT
 
 public:
-    SaveItemsDialog(MainWindow *mainWindow,
+    SaveItemsDialog(QWidget *parent,
         QMap<Core::IFile*, QString> items);
 
     void setMessage(const QString &msg);
 
     QList<Core::IFile*> itemsToSave() const;
-    QSet<Core::IFile*> itemsToOpen() const;
+    QSet<Core::IFile*> itemsToOpenWithVCS() const;
 
 private slots:
     void collectItemsToSave();
-    void uncheckAll();
     void discardAll();
+    void updateSaveButton();
 
 private:
     Ui::SaveItemsDialog m_ui;
-    QMap<FileItem*, Core::IFile*> m_itemMap;
     QList<Core::IFile*> m_itemsToSave;
     QSet<Core::IFile*> m_itemsToOpen;
 };
diff --git a/src/plugins/coreplugin/dialogs/saveitemsdialog.ui b/src/plugins/coreplugin/dialogs/saveitemsdialog.ui
index 85931a1daba3bd4154675b9eab98fba472c21f44..966be8f4f303261e840bec53bf4dbf44c8e49c7c 100644
--- a/src/plugins/coreplugin/dialogs/saveitemsdialog.ui
+++ b/src/plugins/coreplugin/dialogs/saveitemsdialog.ui
@@ -1,41 +1,68 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>SaveItemsDialog</class>
- <widget class="QDialog" name="SaveItemsDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="SaveItemsDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
+    <width>457</width>
     <height>200</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Save Changes</string>
   </property>
-  <layout class="QVBoxLayout" >
-   <property name="margin" >
-    <number>9</number>
-   </property>
-   <property name="spacing" >
-    <number>6</number>
-   </property>
+  <layout class="QVBoxLayout">
    <item>
-    <widget class="QLabel" name="msgLabel" >
-     <property name="text" >
-      <string>Save the changes of the following items:</string>
+    <widget class="QLabel" name="msgLabel">
+     <property name="text">
+      <string>The following files have unsaved changes:</string>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="QTreeWidget" name="treeWidget" />
+    <widget class="QTreeWidget" name="treeWidget">
+     <property name="selectionMode">
+      <enum>QAbstractItemView::ExtendedSelection</enum>
+     </property>
+     <property name="textElideMode">
+      <enum>Qt::ElideLeft</enum>
+     </property>
+     <property name="indentation">
+      <number>0</number>
+     </property>
+     <property name="rootIsDecorated">
+      <bool>false</bool>
+     </property>
+     <property name="uniformRowHeights">
+      <bool>true</bool>
+     </property>
+     <property name="headerHidden">
+      <bool>true</bool>
+     </property>
+     <property name="columnCount">
+      <number>2</number>
+     </property>
+     <column>
+      <property name="text">
+       <string notr="true">1</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string notr="true">2</string>
+      </property>
+     </column>
+    </widget>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
      </property>
     </widget>
    </item>
@@ -52,11 +79,11 @@
    <receiver>SaveItemsDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>199</x>
      <y>174</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>199</x>
      <y>99</y>
     </hint>
diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp
index 5fd9fe3fdd52de79c0dc30d488236813fab904f1..e5c33c18dd0a01c60c13fb672dcdae5d41d92a26 100644
--- a/src/plugins/coreplugin/filemanager.cpp
+++ b/src/plugins/coreplugin/filemanager.cpp
@@ -346,7 +346,7 @@ QList<IFile *> FileManager::saveModifiedFiles(const QList<IFile *> &files,
                 return notSaved;
             }
             filesToSave = dia.itemsToSave();
-            filesToOpen = dia.itemsToOpen();
+            filesToOpen = dia.itemsToOpenWithVCS();
         }
 
         bool yestoall = false;
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index b4481b7773d2ab4ed050c42b2ee5b5660ef859df..a975c2bcecdded14a9f7bd319f867472df1be2b1 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1273,8 +1273,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles(const QList<Project *> & projects)
 
     if (!filesToSave.isEmpty()) {
         bool cancelled;
-        Core::ICore::instance()->fileManager()->saveModifiedFiles(filesToSave, &cancelled,
-            tr("The following dependencies are modified, do you want to save them?"));
+        Core::ICore::instance()->fileManager()->saveModifiedFiles(filesToSave, &cancelled);
         if (cancelled) {
             return false;
         }