diff --git a/src/plugins/texteditor/colorscheme.cpp b/src/plugins/texteditor/colorscheme.cpp
index e937d15f0510a01acd4553689fe0e415c8c05491..cb298f102c1059edb9070deb1728f40309f29729 100644
--- a/src/plugins/texteditor/colorscheme.cpp
+++ b/src/plugins/texteditor/colorscheme.cpp
@@ -128,7 +128,7 @@ void ColorScheme::clear()
     m_formats.clear();
 }
 
-bool ColorScheme::save(const QString &fileName)
+bool ColorScheme::save(const QString &fileName) const
 {
     QFile file(fileName);
     if (!file.open(QIODevice::WriteOnly))
diff --git a/src/plugins/texteditor/colorscheme.h b/src/plugins/texteditor/colorscheme.h
index 692692c49932494616cf8b52b6299c9d4008219d..0b4e726d177bdc847c989864210508cff09201b5 100644
--- a/src/plugins/texteditor/colorscheme.h
+++ b/src/plugins/texteditor/colorscheme.h
@@ -99,7 +99,7 @@ public:
 
     void clear();
 
-    bool save(const QString &fileName);
+    bool save(const QString &fileName) const;
     bool load(const QString &fileName);
 
     inline bool equals(const ColorScheme &cs) const
diff --git a/src/plugins/texteditor/editcolorschemedialog.cpp b/src/plugins/texteditor/colorschemeedit.cpp
similarity index 69%
rename from src/plugins/texteditor/editcolorschemedialog.cpp
rename to src/plugins/texteditor/colorschemeedit.cpp
index 207cd50e43aa63b977bc702e11476a28118f786a..07b4020ef0c27d940fba32f8dd3c21609829d282 100644
--- a/src/plugins/texteditor/editcolorschemedialog.cpp
+++ b/src/plugins/texteditor/colorschemeedit.cpp
@@ -27,8 +27,8 @@
 **
 **************************************************************************/
 
-#include "editcolorschemedialog.h"
-#include "ui_editcolorschemedialog.h"
+#include "colorschemeedit.h"
+#include "ui_colorschemeedit.h"
 
 #include "texteditorconstants.h"
 
@@ -54,42 +54,64 @@ namespace Internal {
 class FormatsModel : public QAbstractListModel
 {
 public:
-    FormatsModel(const FormatDescriptions &fd,
-                 const FontSettings &fontSettings,
-                 const ColorScheme &scheme,
-                 QObject *parent = 0):
+    FormatsModel(QObject *parent = 0):
         QAbstractListModel(parent),
-        m_fd(fd),
-        m_scheme(scheme),
-        m_baseFont(fontSettings.family(), fontSettings.fontSize())
+        m_descriptions(0),
+        m_scheme(0)
     {
     }
 
+    void setFormatDescriptions(const FormatDescriptions *descriptions)
+    {
+        m_descriptions = descriptions;
+        reset();
+    }
+
+    void setBaseFont(const QFont &font)
+    {
+        emit layoutAboutToBeChanged(); // So the view adjust to new item height
+        m_baseFont = font;
+        emit layoutChanged();
+        emitDataChanged(index(0));
+    }
+
+    void setColorScheme(const ColorScheme *scheme)
+    {
+        m_scheme = scheme;
+        emitDataChanged(index(0));
+    }
+
     int rowCount(const QModelIndex &parent) const
-    { return parent.isValid() ? 0 : m_fd.size(); }
+    {
+        return (parent.isValid() || !m_descriptions) ? 0 : m_descriptions->size();
+    }
 
     QVariant data(const QModelIndex &index, int role) const
     {
-        const FormatDescription &description = m_fd.at(index.row());
+        if (!m_descriptions || !m_scheme)
+            return QVariant();
+
+        const FormatDescription &description = m_descriptions->at(index.row());
+
         switch (role) {
         case Qt::DisplayRole:
             return description.trName();
         case Qt::ForegroundRole: {
-            QColor foreground = m_scheme.formatFor(description.name()).foreground();
+            QColor foreground = m_scheme->formatFor(description.name()).foreground();
             if (foreground.isValid())
                 return foreground;
             else
-                return m_scheme.formatFor(QLatin1String(TextEditor::Constants::C_TEXT)).foreground();
+                return m_scheme->formatFor(QLatin1String(TextEditor::Constants::C_TEXT)).foreground();
         }
         case Qt::BackgroundRole: {
-            QColor background = m_scheme.formatFor(description.name()).background();
+            QColor background = m_scheme->formatFor(description.name()).background();
             if (background.isValid())
                 return background;
         }
         case Qt::FontRole: {
             QFont font = m_baseFont;
-            font.setBold(m_scheme.formatFor(description.name()).bold());
-            font.setItalic(m_scheme.formatFor(description.name()).italic());
+            font.setBold(m_scheme->formatFor(description.name()).bold());
+            font.setItalic(m_scheme->formatFor(description.name()).italic());
             return font;
         }
         }
@@ -98,69 +120,98 @@ public:
 
     void emitDataChanged(const QModelIndex &i)
     {
+        if (!m_descriptions)
+            return;
+
         // If the text category changes, all indexes might have changed
         if (i.row() == 0)
-            emit dataChanged(i, index(m_fd.size() - 1));
+            emit dataChanged(i, index(m_descriptions->size() - 1));
         else
             emit dataChanged(i, i);
     }
 
 private:
-    const FormatDescriptions &m_fd;
-    const ColorScheme &m_scheme;
-    const QFont m_baseFont;
+    const FormatDescriptions *m_descriptions;
+    const ColorScheme *m_scheme;
+    QFont m_baseFont;
 };
 
 } // namespace Internal
 } // namespace TextEditor
 
-EditColorSchemeDialog::EditColorSchemeDialog(const FormatDescriptions &fd,
-                                             const FontSettings &fontSettings,
-                                             QWidget *parent) :
-    QDialog(parent),
-    m_descriptions(fd),
-    m_fontSettings(fontSettings),
-    m_scheme(fontSettings.colorScheme()),
+ColorSchemeEdit::ColorSchemeEdit(QWidget *parent) :
+    QWidget(parent),
     m_curItem(-1),
-    m_ui(new Ui::EditColorSchemeDialog),
-    m_formatsModel(new FormatsModel(m_descriptions, m_fontSettings, m_scheme, this))
+    m_ui(new Ui::ColorSchemeEdit),
+    m_formatsModel(new FormatsModel(this))
 {
     m_ui->setupUi(this);
-    m_ui->nameEdit->setText(m_scheme.name());
     m_ui->itemList->setModel(m_formatsModel);
 
     connect(m_ui->itemList->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
-            SLOT(itemChanged(QModelIndex)));
+            SLOT(currentItemChanged(QModelIndex)));
     connect(m_ui->foregroundToolButton, SIGNAL(clicked()), SLOT(changeForeColor()));
     connect(m_ui->backgroundToolButton, SIGNAL(clicked()), SLOT(changeBackColor()));
     connect(m_ui->eraseBackgroundToolButton, SIGNAL(clicked()), SLOT(eraseBackColor()));
     connect(m_ui->boldCheckBox, SIGNAL(toggled(bool)), SLOT(checkCheckBoxes()));
     connect(m_ui->italicCheckBox, SIGNAL(toggled(bool)), SLOT(checkCheckBoxes()));
+}
+
+ColorSchemeEdit::~ColorSchemeEdit()
+{
+    delete m_ui;
+}
+
+void ColorSchemeEdit::setFormatDescriptions(const FormatDescriptions &descriptions)
+{
+    m_descriptions = descriptions;
+    m_formatsModel->setFormatDescriptions(&m_descriptions);
 
     if (!m_descriptions.empty())
         m_ui->itemList->setCurrentIndex(m_formatsModel->index(0));
+}
 
-    setItemListBackground(m_scheme.formatFor(QLatin1String(TextEditor::Constants::C_TEXT)).background());
+void ColorSchemeEdit::setBaseFont(const QFont &font)
+{
+    m_formatsModel->setBaseFont(font);
 }
 
-EditColorSchemeDialog::~EditColorSchemeDialog()
+void ColorSchemeEdit::setReadOnly(bool readOnly)
 {
-    delete m_ui;
+    const bool enabled = !readOnly;
+    m_ui->foregroundLabel->setEnabled(enabled);
+    m_ui->foregroundToolButton->setEnabled(enabled);
+    m_ui->backgroundLabel->setEnabled(enabled);
+    m_ui->backgroundToolButton->setEnabled(enabled);
+    m_ui->eraseBackgroundToolButton->setEnabled(enabled);
+    m_ui->boldCheckBox->setEnabled(enabled);
+    m_ui->italicCheckBox->setEnabled(enabled);
 }
 
-void EditColorSchemeDialog::accept()
+void ColorSchemeEdit::setColorScheme(const ColorScheme &colorScheme)
 {
-    m_scheme.setName(m_ui->nameEdit->text());
-    QDialog::accept();
+    m_scheme = colorScheme;
+    m_formatsModel->setColorScheme(&m_scheme);
+    setItemListBackground(m_scheme.formatFor(QLatin1String(TextEditor::Constants::C_TEXT)).background());
+    updateControls();
 }
 
-void EditColorSchemeDialog::itemChanged(const QModelIndex &index)
+const ColorScheme &ColorSchemeEdit::colorScheme() const
+{
+    return m_scheme;
+}
+
+void ColorSchemeEdit::currentItemChanged(const QModelIndex &index)
 {
     if (!index.isValid())
         return;
 
     m_curItem = index.row();
+    updateControls();
+}
 
+void ColorSchemeEdit::updateControls()
+{
     const Format &format = m_scheme.formatFor(m_descriptions[m_curItem].name());
     m_ui->foregroundToolButton->setStyleSheet(colorButtonStyleSheet(format.foreground()));
     m_ui->backgroundToolButton->setStyleSheet(colorButtonStyleSheet(format.background()));
@@ -175,7 +226,7 @@ void EditColorSchemeDialog::itemChanged(const QModelIndex &index)
     m_ui->italicCheckBox->blockSignals(italicBlocked);
 }
 
-void EditColorSchemeDialog::changeForeColor()
+void ColorSchemeEdit::changeForeColor()
 {
     if (m_curItem == -1)
         return;
@@ -194,7 +245,7 @@ void EditColorSchemeDialog::changeForeColor()
     }
 }
 
-void EditColorSchemeDialog::changeBackColor()
+void ColorSchemeEdit::changeBackColor()
 {
     if (m_curItem == -1)
         return;
@@ -215,7 +266,7 @@ void EditColorSchemeDialog::changeBackColor()
     }
 }
 
-void EditColorSchemeDialog::eraseBackColor()
+void ColorSchemeEdit::eraseBackColor()
 {
     if (m_curItem == -1)
         return;
@@ -230,7 +281,7 @@ void EditColorSchemeDialog::eraseBackColor()
     }
 }
 
-void EditColorSchemeDialog::checkCheckBoxes()
+void ColorSchemeEdit::checkCheckBoxes()
 {
     if (m_curItem == -1)
         return;
@@ -243,7 +294,7 @@ void EditColorSchemeDialog::checkCheckBoxes()
     }
 }
 
-void EditColorSchemeDialog::setItemListBackground(const QColor &color)
+void ColorSchemeEdit::setItemListBackground(const QColor &color)
 {
     QPalette pal = m_ui->itemList->palette();
     pal.setColor(QPalette::Base, color);
diff --git a/src/plugins/texteditor/editcolorschemedialog.h b/src/plugins/texteditor/colorschemeedit.h
similarity index 72%
rename from src/plugins/texteditor/editcolorschemedialog.h
rename to src/plugins/texteditor/colorschemeedit.h
index ef637aea541fc6ef6321057b6b110b7712f14edd..f3a89a3ada355807d0f937cd9f3f81eb2bc00e73 100644
--- a/src/plugins/texteditor/editcolorschemedialog.h
+++ b/src/plugins/texteditor/colorschemeedit.h
@@ -27,8 +27,8 @@
 **
 **************************************************************************/
 
-#ifndef EDITCOLORSCHEMEDIALOG_H
-#define EDITCOLORSCHEMEDIALOG_H
+#ifndef COLORSCHEMEEDIT_H
+#define COLORSCHEMEEDIT_H
 
 #include "colorscheme.h"
 #include "fontsettingspage.h"
@@ -43,43 +43,44 @@ namespace TextEditor {
 namespace Internal {
 
 namespace Ui {
-class EditColorSchemeDialog;
+class ColorSchemeEdit;
 }
 
 class FormatsModel;
 
-class EditColorSchemeDialog : public QDialog
+/*!
+  A widget for editing a color scheme. Used in the FontSettingsPage.
+  */
+class ColorSchemeEdit : public QWidget
 {
     Q_OBJECT
 
 public:
-    EditColorSchemeDialog(const FormatDescriptions &fd,
-                          const FontSettings &fontSettings,
-                          QWidget *parent = 0);
-    ~EditColorSchemeDialog();
+    ColorSchemeEdit(QWidget *parent = 0);
+    ~ColorSchemeEdit();
 
-    ColorScheme colorScheme() const
-    { return m_scheme; }
+    void setFormatDescriptions(const FormatDescriptions &descriptions);
+    void setBaseFont(const QFont &font);
+    void setReadOnly(bool readOnly);
 
-    void accept();
+    void setColorScheme(const ColorScheme &colorScheme);
+    const ColorScheme &colorScheme() const;
 
 private slots:
-    void itemChanged(const QModelIndex &index);
+    void currentItemChanged(const QModelIndex &index);
     void changeForeColor();
     void changeBackColor();
     void eraseBackColor();
     void checkCheckBoxes();
 
 private:
+    void updateControls();
     void setItemListBackground(const QColor &color);
 
-    const TextEditor::FormatDescriptions m_descriptions;
-    const FontSettings m_fontSettings;
-
+    TextEditor::FormatDescriptions m_descriptions;
     ColorScheme m_scheme;
     int m_curItem;
-
-    Ui::EditColorSchemeDialog *m_ui;
+    Ui::ColorSchemeEdit *m_ui;
     FormatsModel *m_formatsModel;
 };
 
@@ -87,4 +88,4 @@ private:
 } // namespace Internal
 } // namespace TextEditor
 
-#endif // EDITCOLORSCHEMEDIALOG_H
+#endif // COLORSCHEMEEDIT_H
diff --git a/src/plugins/texteditor/colorschemeedit.ui b/src/plugins/texteditor/colorschemeedit.ui
new file mode 100644
index 0000000000000000000000000000000000000000..d9f342d439c32e2141e2291d1a9abb7a9420e2ff
--- /dev/null
+++ b/src/plugins/texteditor/colorschemeedit.ui
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TextEditor::Internal::ColorSchemeEdit</class>
+ <widget class="QWidget" name="TextEditor::Internal::ColorSchemeEdit">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>435</width>
+    <height>210</height>
+   </rect>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <widget class="QListView" name="itemList">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>1</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::ExtendedSelection</enum>
+     </property>
+     <property name="uniformItemSizes">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="_2">
+     <item row="2" column="0">
+      <widget class="QCheckBox" name="boldCheckBox">
+       <property name="text">
+        <string>Bold</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QCheckBox" name="italicCheckBox">
+       <property name="text">
+        <string>Italic</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QToolButton" name="foregroundToolButton">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="backgroundLabel">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Background:</string>
+       </property>
+       <property name="buddy">
+        <cstring>backgroundToolButton</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="0">
+      <widget class="QLabel" name="foregroundLabel">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Foreground:</string>
+       </property>
+       <property name="buddy">
+        <cstring>foregroundToolButton</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="1" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QToolButton" name="backgroundToolButton">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QToolButton" name="eraseBackgroundToolButton">
+         <property name="toolTip">
+          <string>Erase background</string>
+         </property>
+         <property name="text">
+          <string>x</string>
+         </property>
+         <property name="arrowType">
+          <enum>Qt::LeftArrow</enum>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>itemList</tabstop>
+  <tabstop>foregroundToolButton</tabstop>
+  <tabstop>backgroundToolButton</tabstop>
+  <tabstop>eraseBackgroundToolButton</tabstop>
+  <tabstop>boldCheckBox</tabstop>
+  <tabstop>italicCheckBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/texteditor/editcolorschemedialog.ui b/src/plugins/texteditor/editcolorschemedialog.ui
deleted file mode 100644
index a23d8e2ca2db2c117bcc96616a072fe9a9005c0e..0000000000000000000000000000000000000000
--- a/src/plugins/texteditor/editcolorschemedialog.ui
+++ /dev/null
@@ -1,217 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>TextEditor::Internal::EditColorSchemeDialog</class>
- <widget class="QDialog" name="TextEditor::Internal::EditColorSchemeDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>461</width>
-    <height>352</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Edit Color Scheme</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_3">
-   <item>
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string>Name</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <widget class="QLineEdit" name="nameEdit"/>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="groupBox_2">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-       <horstretch>0</horstretch>
-       <verstretch>1</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="title">
-      <string>Text Categories</string>
-     </property>
-     <layout class="QHBoxLayout">
-      <item>
-       <widget class="QListView" name="itemList">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-          <horstretch>1</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="selectionMode">
-         <enum>QAbstractItemView::ExtendedSelection</enum>
-        </property>
-        <property name="uniformItemSizes">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <layout class="QGridLayout" name="_2">
-        <item row="2" column="0">
-         <widget class="QCheckBox" name="boldCheckBox">
-          <property name="text">
-           <string>Bold</string>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="1">
-         <widget class="QCheckBox" name="italicCheckBox">
-          <property name="text">
-           <string>Italic</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QToolButton" name="foregroundToolButton">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text">
-           <string/>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="label_2">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text">
-           <string>Background:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="0">
-         <widget class="QLabel" name="label">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="text">
-           <string>Foreground:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="1">
-         <spacer>
-          <property name="orientation">
-           <enum>Qt::Vertical</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>20</width>
-            <height>40</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item row="1" column="1">
-         <layout class="QHBoxLayout" name="horizontalLayout">
-          <item>
-           <widget class="QToolButton" name="backgroundToolButton">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="text">
-             <string/>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QToolButton" name="eraseBackgroundToolButton">
-            <property name="toolTip">
-             <string>Erase background</string>
-            </property>
-            <property name="text">
-             <string>x</string>
-            </property>
-            <property name="arrowType">
-             <enum>Qt::LeftArrow</enum>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <tabstops>
-  <tabstop>nameEdit</tabstop>
-  <tabstop>itemList</tabstop>
-  <tabstop>foregroundToolButton</tabstop>
-  <tabstop>backgroundToolButton</tabstop>
-  <tabstop>eraseBackgroundToolButton</tabstop>
-  <tabstop>boldCheckBox</tabstop>
-  <tabstop>italicCheckBox</tabstop>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>TextEditor::Internal::EditColorSchemeDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>TextEditor::Internal::EditColorSchemeDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp
index 5ad025d815df10d3c126184b125ae7b85c54047c..cc71afbbbaa8fa19a5c4196ed3a9e011b1e3ac4e 100644
--- a/src/plugins/texteditor/fontsettings.cpp
+++ b/src/plugins/texteditor/fontsettings.cpp
@@ -258,6 +258,7 @@ bool FontSettings::loadColorScheme(const QString &fileName,
 
     if (!m_scheme.load(m_schemeFileName)) {
         loaded = false;
+        m_schemeFileName.clear();
         qWarning() << "Failed to load color scheme:" << fileName;
     }
 
diff --git a/src/plugins/texteditor/fontsettings.h b/src/plugins/texteditor/fontsettings.h
index 9e55aed5b0e21ccddb11dac89a4bb723a8236740..c32fc78c9c619c510182f5ab13f6edd90431dc03 100644
--- a/src/plugins/texteditor/fontsettings.h
+++ b/src/plugins/texteditor/fontsettings.h
@@ -77,6 +77,9 @@ public:
     int fontSize() const;
     void setFontSize(int size);
 
+    QFont font() const
+    { return QFont(family(), fontSize()); }
+
     bool antialias() const;
     void setAntialias(bool antialias);
 
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index b6f371594e6336a1e72042bd18b10a31f42214f2..bbadbfacf38814d9bff5b7544d5958395093f8b5 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -29,7 +29,7 @@
 
 #include "fontsettingspage.h"
 
-#include "editcolorschemedialog.h"
+#include "colorschemeedit.h"
 #include "fontsettings.h"
 #include "texteditorconstants.h"
 #include "ui_fontsettingspage.h"
@@ -130,6 +130,7 @@ public:
     FontSettings m_lastValue;
     Ui::FontSettingsPage ui;
     SchemeListModel *m_schemeListModel;
+    bool m_refreshingSchemeList;
 };
 
 } // namespace Internal
@@ -178,7 +179,8 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip
     m_category(category),
     m_trCategory(trCategory),
     m_descriptions(fd),
-    m_schemeListModel(new SchemeListModel)
+    m_schemeListModel(new SchemeListModel),
+    m_refreshingSchemeList(false)
 {
     bool settingsFound = false;
     QSettings *settings = Core::ICore::instance()->settings();
@@ -346,10 +348,14 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
 
     d_ptr->ui.antialias->setChecked(d_ptr->m_value.antialias());
 
-    connect(d_ptr->ui.familyComboBox, SIGNAL(activated(int)), this, SLOT(updatePointSizes()));
+    d_ptr->ui.schemeEdit->setFormatDescriptions(d_ptr->m_descriptions);
+    d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font());
+    d_ptr->ui.schemeEdit->setColorScheme(d_ptr->m_value.colorScheme());
+
+    connect(d_ptr->ui.familyComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontFamilySelected(QString)));
+    connect(d_ptr->ui.sizeComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontSizeSelected(QString)));
     connect(d_ptr->ui.schemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(colorSchemeSelected(int)));
-    connect(d_ptr->ui.cloneButton, SIGNAL(clicked()), this, SLOT(cloneColorScheme()));
-    connect(d_ptr->ui.editButton, SIGNAL(clicked()), this, SLOT(editColorScheme()));
+    connect(d_ptr->ui.copyButton, SIGNAL(clicked()), this, SLOT(copyColorScheme()));
     connect(d_ptr->ui.deleteButton, SIGNAL(clicked()), this, SLOT(deleteColorScheme()));
 
     updatePointSizes();
@@ -358,8 +364,16 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
     return w;
 }
 
+void FontSettingsPage::fontFamilySelected(const QString &family)
+{
+    d_ptr->m_value.setFamily(d_ptr->ui.familyComboBox->currentText());
+    d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font());
+    updatePointSizes();
+}
+
 void FontSettingsPage::updatePointSizes()
 {
+    // Update point sizes
     const int oldSize = d_ptr->m_value.fontSize();
     if (d_ptr->ui.sizeComboBox->count()) {
         const QString curSize = d_ptr->ui.sizeComboBox->currentText();
@@ -382,19 +396,35 @@ void FontSettingsPage::updatePointSizes()
         d_ptr->ui.sizeComboBox->setCurrentIndex(idx);
 }
 
+void FontSettingsPage::fontSizeSelected(const QString &sizeString)
+{
+    bool ok = true;
+    const int size = sizeString.toInt(&ok);
+    if (ok) {
+        d_ptr->m_value.setFontSize(size);
+        d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font());
+    }
+}
+
 void FontSettingsPage::colorSchemeSelected(int index)
 {
-    bool modifiable = false;
+    bool readOnly = true;
     if (index != -1) {
+        // Check whether we're switching away from a changed color scheme
+        if (!d_ptr->m_refreshingSchemeList)
+            maybeSaveColorScheme();
+
         const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
-        modifiable = !entry.readOnly;
+        readOnly = entry.readOnly;
+        d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions);
+        d_ptr->ui.schemeEdit->setColorScheme(d_ptr->m_value.colorScheme());
     }
-    d_ptr->ui.cloneButton->setEnabled(index != -1);
-    d_ptr->ui.deleteButton->setEnabled(modifiable);
-    d_ptr->ui.editButton->setEnabled(modifiable);
+    d_ptr->ui.copyButton->setEnabled(index != -1);
+    d_ptr->ui.deleteButton->setEnabled(!readOnly);
+    d_ptr->ui.schemeEdit->setReadOnly(readOnly);
 }
 
-void FontSettingsPage::cloneColorScheme()
+void FontSettingsPage::copyColorScheme()
 {
     int index = d_ptr->ui.schemeComboBox->currentIndex();
     if (index == -1)
@@ -402,15 +432,17 @@ void FontSettingsPage::cloneColorScheme()
 
     const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
 
-    // Load the currently selected color scheme
-    if (!d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions))
-        return;
-
     QString baseFileName = QFileInfo(entry.fileName).completeBaseName();
     baseFileName += QLatin1String("_copy%1.xml");
     QString fileName = createColorSchemeFileName(baseFileName);
 
     if (!fileName.isEmpty()) {
+        // Ask about saving any existing modifactions
+        maybeSaveColorScheme();
+
+        // Make sure we're copying the current version
+        d_ptr->m_value.setColorScheme(d_ptr->ui.schemeEdit->colorScheme());
+
         ColorScheme scheme = d_ptr->m_value.colorScheme();
         scheme.setName(tr("%1 (copy)").arg(scheme.name()));
         scheme.save(fileName);
@@ -439,37 +471,19 @@ void FontSettingsPage::deleteColorScheme()
     }
 }
 
-void FontSettingsPage::editColorScheme()
+void FontSettingsPage::maybeSaveColorScheme()
 {
-    int index = d_ptr->ui.schemeComboBox->currentIndex();
-    if (index == -1)
+    if (d_ptr->m_value.colorScheme() == d_ptr->ui.schemeEdit->colorScheme())
         return;
 
-    const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
-
-    if (entry.readOnly)
-        return;
-
-    d_ptr->m_value.setFamily(d_ptr->ui.familyComboBox->currentText());
-    d_ptr->m_value.setAntialias(d_ptr->ui.antialias->isChecked());
-
-    bool ok = true;
-    const int size = d_ptr->ui.sizeComboBox->currentText().toInt(&ok);
-    if (ok)
-        d_ptr->m_value.setFontSize(size);
-
-    if (!d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions))
-        return;
-
-    EditColorSchemeDialog dialog(d_ptr->m_descriptions,
-                                 d_ptr->m_value,
-                                 d_ptr->ui.editButton->window());
-
-    if (dialog.exec() == QDialog::Accepted) {
-        ColorScheme newColorScheme = dialog.colorScheme();
-        newColorScheme.save(entry.fileName);
-        d_ptr->m_value.setColorScheme(newColorScheme);
-        refreshColorSchemeList();
+    int ret = QMessageBox::warning(d_ptr->ui.schemeComboBox->window(),
+                                   tr("Color Scheme Changed"),
+                                   tr("The color scheme \"%1\" was modified, do you want to save the changes?")
+                                           .arg(d_ptr->ui.schemeEdit->colorScheme().name()),
+                                   QMessageBox::Discard | QMessageBox::Save, QMessageBox::Save);
+    if (ret == QMessageBox::Save) {
+        const ColorScheme &scheme = d_ptr->ui.schemeEdit->colorScheme();
+        scheme.save(d_ptr->m_value.colorSchemeFileName());
     }
 }
 
@@ -500,8 +514,10 @@ void FontSettingsPage::refreshColorSchemeList()
         colorSchemes.append(ColorSchemeEntry(fileName, false));
     }
 
+    d_ptr->m_refreshingSchemeList = true;
     d_ptr->m_schemeListModel->setColorSchemes(colorSchemes);
     d_ptr->ui.schemeComboBox->setCurrentIndex(selected);
+    d_ptr->m_refreshingSchemeList = false;
 }
 
 void FontSettingsPage::delayedChange()
@@ -511,9 +527,15 @@ void FontSettingsPage::delayedChange()
 
 void FontSettingsPage::apply()
 {
-    d_ptr->m_value.setFamily(d_ptr->ui.familyComboBox->currentText());
     d_ptr->m_value.setAntialias(d_ptr->ui.antialias->isChecked());
 
+    if (d_ptr->m_value.colorScheme() != d_ptr->ui.schemeEdit->colorScheme()) {
+        // Update the scheme and save it under the name it already has
+        d_ptr->m_value.setColorScheme(d_ptr->ui.schemeEdit->colorScheme());
+        const ColorScheme &scheme = d_ptr->m_value.colorScheme();
+        scheme.save(d_ptr->m_value.colorSchemeFileName());
+    }
+
     int index = d_ptr->ui.schemeComboBox->currentIndex();
     if (index != -1) {
         const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
@@ -521,10 +543,6 @@ void FontSettingsPage::apply()
             d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions);
     }
 
-    bool ok = true;
-    const int size = d_ptr->ui.sizeComboBox->currentText().toInt(&ok);
-    if (ok)
-        d_ptr->m_value.setFontSize(size);
     saveSettings();
 }
 
diff --git a/src/plugins/texteditor/fontsettingspage.h b/src/plugins/texteditor/fontsettingspage.h
index 5ffc34218ce741e60103ecd8beb26f283e02e8ea..1d71c88b16959bdecb28898b7f3eb3649619269e 100644
--- a/src/plugins/texteditor/fontsettingspage.h
+++ b/src/plugins/texteditor/fontsettingspage.h
@@ -109,13 +109,15 @@ signals:
 
 private slots:
     void delayedChange();
-    void updatePointSizes();
+    void fontFamilySelected(const QString &family);
+    void fontSizeSelected(const QString &sizeString);
     void colorSchemeSelected(int index);
-    void cloneColorScheme();
+    void copyColorScheme();
     void deleteColorScheme();
-    void editColorScheme();
 
 private:
+    void maybeSaveColorScheme();
+    void updatePointSizes();
     void refreshColorSchemeList();
 
     Internal::FontSettingsPagePrivate *d_ptr;
diff --git a/src/plugins/texteditor/fontsettingspage.ui b/src/plugins/texteditor/fontsettingspage.ui
index 2ff5268962bc3f35a90fa788da61925c7996abca..3bf055ccfc90d7cb27965fb5de8607fcba04fbdd 100644
--- a/src/plugins/texteditor/fontsettingspage.ui
+++ b/src/plugins/texteditor/fontsettingspage.ui
@@ -121,9 +121,9 @@
          </widget>
         </item>
         <item>
-         <widget class="QPushButton" name="cloneButton">
+         <widget class="QPushButton" name="copyButton">
           <property name="text">
-           <string>Clone</string>
+           <string>Copy</string>
           </property>
          </widget>
         </item>
@@ -140,50 +140,28 @@
        </layout>
       </item>
       <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
-        <item>
-         <widget class="QPushButton" name="editButton">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="text">
-           <string>Edit</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <spacer name="verticalSpacer">
-        <property name="orientation">
-         <enum>Qt::Vertical</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>20</width>
-          <height>87</height>
-         </size>
+       <widget class="TextEditor::Internal::ColorSchemeEdit" name="schemeEdit" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+          <horstretch>0</horstretch>
+          <verstretch>1</verstretch>
+         </sizepolicy>
         </property>
-       </spacer>
+       </widget>
       </item>
      </layout>
     </widget>
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>TextEditor::Internal::ColorSchemeEdit</class>
+   <extends>QWidget</extends>
+   <header>colorschemeedit.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>
diff --git a/src/plugins/texteditor/texteditor.pro b/src/plugins/texteditor/texteditor.pro
index 2a97349b7564f6a83518a868fd2c18306eb9f0bc..38c5861d0b40c2f066bc793828c5217cd5bb36ff 100644
--- a/src/plugins/texteditor/texteditor.pro
+++ b/src/plugins/texteditor/texteditor.pro
@@ -28,7 +28,7 @@ SOURCES += texteditorplugin.cpp \
     codecselector.cpp \
     findincurrentfile.cpp \
     colorscheme.cpp \
-    editcolorschemedialog.cpp
+    colorschemeedit.cpp
 HEADERS += texteditorplugin.h \
     textfilewizard.h \
     plaintexteditor.h \
@@ -60,10 +60,10 @@ HEADERS += texteditorplugin.h \
     codecselector.h \
     findincurrentfile.h \
     colorscheme.h \
-    editcolorschemedialog.h
+    colorschemeedit.h
 FORMS += behaviorsettingspage.ui \
     displaysettingspage.ui \
     fontsettingspage.ui \
-    editcolorschemedialog.ui
+    colorschemeedit.ui
 RESOURCES += texteditor.qrc
 OTHER_FILES += TextEditor.pluginspec