diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp
index e196a8116260aa26be2dfab5350b8d17750dfb64..14a5c6a1adebaea3fdf1b7fdd4b72c7efa4387cf 100644
--- a/src/plugins/coreplugin/generalsettings.cpp
+++ b/src/plugins/coreplugin/generalsettings.cpp
@@ -45,6 +45,7 @@
 #include <QtCore/QDir>
 #include <QtCore/QLibraryInfo>
 #include <QtCore/QSettings>
+#include <QtCore/QTextCodec>
 
 #include "ui_generalsettings.h"
 
@@ -125,8 +126,37 @@ QWidget *GeneralSettings::createPage(QWidget *parent)
     m_page->setupUi(w);
 
     QSettings* settings = Core::ICore::instance()->settings();
-    Q_UNUSED(settings)
     fillLanguageBox();
+
+    QTextCodec *defaultTextCodec = QTextCodec::codecForLocale();
+    if (QTextCodec *candidate = QTextCodec::codecForName(
+            settings->value(QLatin1String("General/DefaultFileEncoding")).toByteArray()))
+        defaultTextCodec = candidate;
+
+    QList<int> mibs = QTextCodec::availableMibs();
+    qSort(mibs);
+    QList<int> sortedMibs;
+    foreach (int mib, mibs)
+        if (mib >= 0)
+            sortedMibs += mib;
+    foreach (int mib, mibs)
+        if (mib < 0)
+            sortedMibs += mib;
+    int i = 0;
+    foreach (int mib, sortedMibs) {
+        QTextCodec *codec = QTextCodec::codecForMib(mib);
+        m_codecs += codec;
+        QString name = codec->name();
+        foreach (const QByteArray &alias, codec->aliases()) {
+            name += QLatin1String(" / ");
+            name += QString::fromLatin1(alias);
+        }
+        m_page->encodingBox->addItem(name);
+        if (defaultTextCodec == codec)
+            m_page->encodingBox->setCurrentIndex(i);
+        i++;
+    }
+
     m_page->colorButton->setColor(StyleHelper::requestedBaseColor());
     m_page->externalEditorEdit->setText(EditorManager::instance()->externalEditor());
     m_page->reloadBehavior->setCurrentIndex(EditorManager::instance()->reloadSetting());
@@ -187,12 +217,17 @@ void GeneralSettings::apply()
     EditorManager::instance()->setExternalEditor(m_page->externalEditorEdit->text());
     EditorManager::instance()->setReloadSetting(IFile::ReloadSetting(m_page->reloadBehavior->currentIndex()));
 #ifdef Q_OS_UNIX
-	ConsoleProcess::setTerminalEmulator(Core::ICore::instance()->settings(),
+    ConsoleProcess::setTerminalEmulator(Core::ICore::instance()->settings(),
                                         m_page->terminalEdit->text());
 #ifndef Q_OS_MAC
-        Utils::UnixUtils::setFileBrowser(Core::ICore::instance()->settings(), m_page->externalFileBrowserEdit->text());
+    Utils::UnixUtils::setFileBrowser(Core::ICore::instance()->settings(), m_page->externalFileBrowserEdit->text());
 #endif
 #endif
+
+    QSettings* settings = Core::ICore::instance()->settings();
+    return settings->setValue(QLatin1String("General/DefaultFileEncoding"),
+                              m_codecs.at(m_page->encodingBox->currentIndex())->name());
+
 }
 
 void GeneralSettings::finish()
diff --git a/src/plugins/coreplugin/generalsettings.h b/src/plugins/coreplugin/generalsettings.h
index 62b478ec8237dfb755293cf9c042325855767ace..89ea18061423dd24dc81b9e42e4e540774574ea8 100644
--- a/src/plugins/coreplugin/generalsettings.h
+++ b/src/plugins/coreplugin/generalsettings.h
@@ -82,6 +82,7 @@ private:
     Ui::GeneralSettings *m_page;
     QString m_searchKeywords;
     QPointer<QMessageBox> m_dialog;
+    QList<QTextCodec *> m_codecs;
 };
 
 } // namespace Internal
diff --git a/src/plugins/coreplugin/generalsettings.ui b/src/plugins/coreplugin/generalsettings.ui
index d14d007740d871b74e93f94808800475b0175b03..0365ae1a66f25eb77e6492f209db77c269edfc6e 100644
--- a/src/plugins/coreplugin/generalsettings.ui
+++ b/src/plugins/coreplugin/generalsettings.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>492</width>
-    <height>339</height>
+    <width>487</width>
+    <height>343</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
@@ -84,10 +84,17 @@
         </property>
        </widget>
       </item>
-      <item row="1" column="1">
+      <item row="1" column="1" rowspan="2">
        <layout class="QHBoxLayout" name="horizontalLayout_3">
         <item>
-         <widget class="QComboBox" name="languageBox"/>
+         <widget class="QComboBox" name="languageBox">
+          <property name="sizeAdjustPolicy">
+           <enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum>
+          </property>
+          <property name="minimumContentsLength">
+           <number>20</number>
+          </property>
+         </widget>
         </item>
         <item>
          <spacer name="horizontalSpacer_2">
@@ -104,6 +111,46 @@
         </item>
        </layout>
       </item>
+      <item row="2" column="0" rowspan="2">
+       <widget class="QLabel" name="encodingLabel">
+        <property name="text">
+         <string>Default File Encoding: </string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <layout class="QHBoxLayout" name="horizontalLayout_6">
+        <item>
+         <widget class="QComboBox" name="encodingBox">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="sizeAdjustPolicy">
+           <enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum>
+          </property>
+          <property name="minimumContentsLength">
+           <number>20</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_6">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>285</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/projectexplorer/editorconfiguration.cpp b/src/plugins/projectexplorer/editorconfiguration.cpp
index 2892df169992165970581a8c63fde3489df27736..c67bb0a37905b66689ba3cfca3943c6fbb84625a 100644
--- a/src/plugins/projectexplorer/editorconfiguration.cpp
+++ b/src/plugins/projectexplorer/editorconfiguration.cpp
@@ -28,7 +28,7 @@
 **************************************************************************/
 
 #include "editorconfiguration.h"
-
+#include <coreplugin/icore.h>
 #include <QtCore/QTextCodec>
 
 using namespace ProjectExplorer;
@@ -40,6 +40,10 @@ const char * const CODEC("EditorConfiguration.Codec");
 EditorConfiguration::EditorConfiguration()
     : m_defaultTextCodec(QTextCodec::codecForLocale())
 {
+    QSettings* settings = Core::ICore::instance()->settings();
+    if (QTextCodec *candidate = QTextCodec::codecForName(
+            settings->value(QLatin1String("General/DefaultFileEncoding")).toByteArray()))
+        m_defaultTextCodec = candidate;
 }
 
 QTextCodec *EditorConfiguration::defaultTextCodec() const
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
index aa341aeb92073d702dbd684787bbaee7a7b23c4e..2c5e5f135c46ff98fcd05120b715009e8195c1a8 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
@@ -121,7 +121,6 @@ EditorSettingsWidget::EditorSettingsWidget(Project *project)
 
 void EditorSettingsWidget::currentEncodingChanged(int index)
 {
-    QList<int> codecs = QTextCodec::availableMibs();
     m_project->editorConfiguration()->setDefaultTextCodec(m_codecs.at(index));
 }
 
diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index d47e1a24415a9e8bd073f6092e637514517559b4..f1bf0e0f1307d5edabe34da7aa715ec5c66222d6 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -61,6 +61,11 @@ BaseTextDocument::BaseTextDocument()
     m_fileIsReadOnly = false;
     m_isBinaryData = false;
     m_codec = QTextCodec::codecForLocale();
+    QSettings* settings = Core::ICore::instance()->settings();
+    if (QTextCodec *candidate = QTextCodec::codecForName(
+            settings->value(QLatin1String("General/DefaultFileEncoding")).toByteArray()))
+        m_codec = candidate;
+
     m_hasDecodingError = false;
 }