diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2bdd8b21c..574ff555b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@ include (OpenMWMacros)
 # Version
 
 set (OPENMW_VERSION_MAJOR 0)
-set (OPENMW_VERSION_MINOR 21)
+set (OPENMW_VERSION_MINOR 22)
 set (OPENMW_VERSION_RELEASE 0)
 
 set (OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VERSION_RELEASE}")
@@ -257,10 +257,10 @@ set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_DEBUG DEBUG=1)
 
 # Set up Ogre plugin folder & debug suffix
 if (APPLE)
-	# Ogre on OS X doesn't use "_d" suffix (see Ogre's CMakeLists.txt)
-	add_definitions(-DOGRE_PLUGIN_DEBUG_SUFFIX="")
+    # Ogre on OS X doesn't use "_d" suffix (see Ogre's CMakeLists.txt)
+    add_definitions(-DOGRE_PLUGIN_DEBUG_SUFFIX="")
 else ()
-	add_definitions(-DOGRE_PLUGIN_DEBUG_SUFFIX="_d")
+    add_definitions(-DOGRE_PLUGIN_DEBUG_SUFFIX="_d")
 endif()
 
 add_definitions(-DOGRE_PLUGIN_DIR_REL="${OGRE_PLUGIN_DIR_REL}")
@@ -278,9 +278,9 @@ add_subdirectory(files/mygui)
 # Specify build paths
 
 if (APPLE)
-	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${APP_BUNDLE_DIR}/Contents/MacOS")
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${APP_BUNDLE_DIR}/Contents/MacOS")
 else (APPLE)
-	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OpenMW_BINARY_DIR}")
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OpenMW_BINARY_DIR}")
 endif (APPLE)
 
 # Other files
@@ -334,7 +334,7 @@ if(DPKG_PROGRAM)
 
     #Install icon and desktop file
     INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.desktop" DESTINATION "share/applications/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
-    INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "share/pixmaps/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
+    INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/launcher/images/openmw.png" DESTINATION "share/pixmaps/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
 
     #Install global configuration files
     INSTALL(FILES "${OpenMW_BINARY_DIR}/settings-default.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
@@ -355,7 +355,7 @@ if(DPKG_PROGRAM)
  Data files from the original game is required to run it.")
     SET(CPACK_DEBIAN_PACKAGE_NAME "openmw")
     SET(CPACK_DEBIAN_PACKAGE_VERSION "${VERSION_STRING}")
-		SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW bsatool;Bsatool esmtool;Esmtool omwlauncher;OMWLauncher mwiniimporter;MWiniImporter")
+        SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW bsatool;Bsatool esmtool;Esmtool omwlauncher;OMWLauncher mwiniimporter;MWiniImporter")
     SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.11.2), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libmpg123-0 (>= 1.12.1), libois-1.3.0 (>= 1.3.0), libopenal1 (>= 1:1.12.854), libsndfile1 (>= 1.0.23), libstdc++6 (>= 4.4.5), libuuid1 (>= 2.17.2), libqtgui4 (>= 4.7.0)")
 
     SET(CPACK_DEBIAN_PACKAGE_SECTION "Games")
@@ -409,8 +409,8 @@ if(WIN32)
     SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.openmw.org")
     SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.openmw.org")
     SET(CPACK_NSIS_INSTALLED_ICON_NAME "omwlauncher.exe")
-    SET(CPACK_NSIS_MUI_ICON "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.ico")
-    SET(CPACK_NSIS_MUI_UNIICON "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.ico")
+    SET(CPACK_NSIS_MUI_ICON "${OpenMW_SOURCE_DIR}/files/launcher/images/openmw.ico")
+    SET(CPACK_NSIS_MUI_UNIICON "${OpenMW_SOURCE_DIR}/files/launcher/images/openmw.ico")
     SET(CPACK_PACKAGE_ICON "${OpenMW_SOURCE_DIR}\\\\files\\\\openmw.bmp")
 
     SET(VCREDIST32 "${OpenMW_BINARY_DIR}/vcredist_x86.exe")
@@ -510,10 +510,10 @@ if (WIN32)
         4986 # Undocumented warning that occurs in the crtdbg.h file
         4996 # Function was declared deprecated
 
-		# cause by ogre extensivly
-		4193 # #pragma warning(pop) : no matching '#pragma warning(push)'
-		4251 # class 'XXXX' needs to have dll-interface to be used by clients of class 'YYYY'
-		4275 # non dll-interface struct 'XXXX' used as base for dll-interface class 'YYYY'
+        # cause by ogre extensivly
+        4193 # #pragma warning(pop) : no matching '#pragma warning(push)'
+        4251 # class 'XXXX' needs to have dll-interface to be used by clients of class 'YYYY'
+        4275 # non dll-interface struct 'XXXX' used as base for dll-interface class 'YYYY'
 
         # OpenMW specific warnings
         4099 # Type mismatch, declared class or struct is defined with other type
@@ -525,7 +525,7 @@ if (WIN32)
         4309 # Variable overflow, trying to store 128 in a signed char for example
         4355 # Using 'this' in member initialization list
         4701 # Potentially uninitialized local variable used
-		4800 # Boolean optimization warning, e.g. myBool = (myInt != 0) instead of myBool = myInt
+        4800 # Boolean optimization warning, e.g. myBool = (myInt != 0) instead of myBool = myInt
         )
 
     foreach(d ${WARNINGS_DISABLE})
@@ -536,12 +536,12 @@ if (WIN32)
     set_target_properties(shiny.OgrePlatform PROPERTIES COMPILE_FLAGS ${WARNINGS})
     set_target_properties(components PROPERTIES COMPILE_FLAGS ${WARNINGS})
     if (BUILD_LAUNCHER)
-		set_target_properties(omwlauncher PROPERTIES COMPILE_FLAGS ${WARNINGS})
-	endif (BUILD_LAUNCHER)
+        set_target_properties(omwlauncher PROPERTIES COMPILE_FLAGS ${WARNINGS})
+    endif (BUILD_LAUNCHER)
     set_target_properties(openmw PROPERTIES COMPILE_FLAGS ${WARNINGS})
-		if (BUILD_BSATOOL)
+        if (BUILD_BSATOOL)
         set_target_properties(bsatool PROPERTIES COMPILE_FLAGS ${WARNINGS})
-			endif (BUILD_BSATOOL)
+            endif (BUILD_BSATOOL)
     if (BUILD_ESMTOOL)
         set_target_properties(esmtool PROPERTIES COMPILE_FLAGS ${WARNINGS})
     endif (BUILD_ESMTOOL)
@@ -666,9 +666,9 @@ if (NOT WIN32 AND NOT DPKG_PROGRAM AND NOT APPLE)
     IF(BUILD_LAUNCHER)
         INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/omwlauncher" DESTINATION "${BINDIR}" )
     ENDIF(BUILD_LAUNCHER)
-		IF(BUILD_BSATOOL)
+        IF(BUILD_BSATOOL)
         INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/bsatool" DESTINATION "${BINDIR}" )
-			ENDIF(BUILD_BSATOOL)
+            ENDIF(BUILD_BSATOOL)
     IF(BUILD_ESMTOOL)
         INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/esmtool" DESTINATION "${BINDIR}" )
     ENDIF(BUILD_ESMTOOL)
@@ -680,7 +680,7 @@ if (NOT WIN32 AND NOT DPKG_PROGRAM AND NOT APPLE)
     ENDIF(BUILD_OPENCS)
 
     # Install icon and .desktop
-    INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "${ICONDIR}")
+    INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/launcher/images/openmw.png" DESTINATION "${ICONDIR}")
     INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.desktop" DESTINATION "${DATAROOTDIR}/applications")
 
     # Install global configuration files
diff --git a/apps/launcher/CMakeLists.txt b/apps/launcher/CMakeLists.txt
index a63898c0e..eb93d71e7 100644
--- a/apps/launcher/CMakeLists.txt
+++ b/apps/launcher/CMakeLists.txt
@@ -12,7 +12,7 @@ set(LAUNCHER
     utils/checkablemessagebox.cpp
     utils/textinputdialog.cpp
 
-    launcher.rc
+    ${CMAKE_SOURCE_DIR}/files/launcher/launcher.rc
 )
 
 set(LAUNCHER_HEADER
@@ -43,10 +43,10 @@ set(LAUNCHER_HEADER_MOC
 )
 
 set(LAUNCHER_UI
-    ../../files/ui/datafilespage.ui
-    ../../files/ui/graphicspage.ui
-    ../../files/ui/mainwindow.ui
-    ../../files/ui/playpage.ui
+    ${CMAKE_SOURCE_DIR}/files/ui/datafilespage.ui
+    ${CMAKE_SOURCE_DIR}/files/ui/graphicspage.ui
+    ${CMAKE_SOURCE_DIR}/files/ui/mainwindow.ui
+    ${CMAKE_SOURCE_DIR}/files/ui/playpage.ui
 )
 
 source_group(launcher FILES ${LAUNCHER} ${LAUNCHER_HEADER})
diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp
index 444d05b2a..512c4b2f8 100644
--- a/apps/launcher/datafilespage.cpp
+++ b/apps/launcher/datafilespage.cpp
@@ -1,6 +1,9 @@
 #include "datafilespage.hpp"
 
-#include <QtGui>
+#include <QPushButton>
+#include <QMessageBox>
+#include <QCheckBox>
+#include <QMenu>
 
 #include <components/files/configurationmanager.hpp>
 
@@ -97,7 +100,7 @@ DataFilesPage::DataFilesPage(Files::ConfigurationManager &cfg, GameSettings &gam
     connect(mastersTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showContextMenu(QPoint)));
 
     connect(mDataFilesModel, SIGNAL(layoutChanged()), this, SLOT(updateViews()));
-    
+
     connect(filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString)));
 
     connect(splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(updateSplitter()));
diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp
index 3caae2c36..8d09cf3c0 100644
--- a/apps/launcher/graphicspage.cpp
+++ b/apps/launcher/graphicspage.cpp
@@ -1,6 +1,8 @@
 #include "graphicspage.hpp"
 
-#include <QtGui>
+#include <QDesktopWidget>
+#include <QMessageBox>
+#include <QDir>
 
 #include <cstdlib>
 
diff --git a/apps/launcher/launcher.rc b/apps/launcher/launcher.rc
deleted file mode 100644
index efe86e4da..000000000
--- a/apps/launcher/launcher.rc
+++ /dev/null
@@ -1 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "resources/images/openmw.ico"
diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp
index 5d11421d0..e435bd391 100644
--- a/apps/launcher/maindialog.cpp
+++ b/apps/launcher/maindialog.cpp
@@ -1,6 +1,15 @@
 #include "maindialog.hpp"
 
-#include <QtGui>
+#include <QFontDatabase>
+#include <QInputDialog>
+#include <QFileDialog>
+#include <QCloseEvent>
+#include <QTextCodec>
+#include <QProcess>
+#include <QFile>
+#include <QDir>
+
+#include <QDebug>
 
 #include "utils/checkablemessagebox.hpp"
 
@@ -203,10 +212,15 @@ bool MainDialog::showFirstRunDialog()
         // Construct the arguments to run the importer
         QStringList arguments;
 
-        if (msgBox.isChecked())
-            arguments.append(QString("-g"));
 
+        if (msgBox.isChecked())
+            arguments.append(QString("--game-files"));
+
+        arguments.append(QString("--encoding"));
+        arguments.append(mGameSettings.value(QString("encoding"), QString("win1252")));
+        arguments.append(QString("--ini"));
         arguments.append(iniPaths.first());
+        arguments.append(QString("--cfg"));
         arguments.append(path);
 
         if (!startProgram(QString("mwiniimport"), arguments, false))
@@ -659,7 +673,7 @@ bool MainDialog::startProgram(const QString &name, const QStringList &arguments,
             return false;
         }
 
-        if (process.exitCode() != 0) {
+        if (process.exitCode() != 0 || process.exitStatus() == QProcess::CrashExit) {
             QString error(process.readAllStandardError());
             error.append(tr("\nArguments:\n"));
             error.append(arguments.join(" "));
diff --git a/apps/launcher/playpage.cpp b/apps/launcher/playpage.cpp
index d6d25d71d..46900c595 100644
--- a/apps/launcher/playpage.cpp
+++ b/apps/launcher/playpage.cpp
@@ -1,6 +1,10 @@
 #include "playpage.hpp"
 
-#include <QtGui>
+#include <QListView>
+
+#ifdef Q_OS_MAC
+#include <QPlastiqueStyle>
+#endif
 
 PlayPage::PlayPage(QWidget *parent) : QWidget(parent)
 {
diff --git a/components/fileorderlist/model/datafilesmodel.cpp b/components/fileorderlist/model/datafilesmodel.cpp
index b33e2e12a..316534124 100644
--- a/components/fileorderlist/model/datafilesmodel.cpp
+++ b/components/fileorderlist/model/datafilesmodel.cpp
@@ -1,4 +1,6 @@
 #include <QDebug>
+#include <QTextDecoder>
+#include <QTextCodec>
 #include <QFileInfo>
 #include <QDir>
 
@@ -157,7 +159,7 @@ Qt::ItemFlags DataFilesModel::flags(const QModelIndex &index) const
     if (!file)
         return Qt::NoItemFlags;
 
-    if (canBeChecked(file)) {    
+    if (canBeChecked(file)) {
         if (index.column() == 0) {
             return Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
         } else {
@@ -226,7 +228,7 @@ bool lessThanEsmFile(const EsmFile *e1, const EsmFile *e2)
         return true;
     if (!e1->fileName().endsWith(".esm") && e2->fileName().endsWith(".esm"))
         return false;
-    
+
     return e1->fileName().toLower() < e2->fileName().toLower();
 }
 
@@ -237,10 +239,6 @@ bool lessThanDate(const EsmFile *e1, const EsmFile *e2)
     } else {
         return false;
     }
-//    if (!e1->fileName().endsWith(".esm") && e2->fileName().endsWith(".esm"))
-//        return false;
-
-//    return e1->fileName().toLower() < e2->fileName().toLower();
 }
 
 void DataFilesModel::sort(int column, Qt::SortOrder order)
@@ -270,17 +268,32 @@ void DataFilesModel::addFiles(const QString &path)
     filters << "*.esp" << "*.esm";
     dir.setNameFilters(filters);
 
+    // Create a decoder for non-latin characters in esx metadata
+    QTextCodec *codec;
+
+    if (mEncoding == QLatin1String("win1252")) {
+        codec = QTextCodec::codecForName("windows-1252");
+    } else if (mEncoding == QLatin1String("win1251")) {
+        codec = QTextCodec::codecForName("windows-1251");
+    } else if (mEncoding == QLatin1String("win1250")) {
+        codec = QTextCodec::codecForName("windows-1250");
+    } else {
+        return; // This should never happen;
+    }
+
+    QTextDecoder *decoder = codec->makeDecoder();
+
     foreach (const QString &path, dir.entryList()) {
         QFileInfo info(dir.absoluteFilePath(path));
         EsmFile *file = new EsmFile(path);
 
-
         try {
             ESM::ESMReader fileReader;
-            ToUTF8::Utf8Encoder encoder (ToUTF8::calculateEncoding(mEncoding.toStdString()));
+            ToUTF8::Utf8Encoder encoder(ToUTF8::calculateEncoding(mEncoding.toStdString()));
             fileReader.setEncoder(&encoder);
             fileReader.open(dir.absoluteFilePath(path).toStdString());
 
+
             ESM::ESMReader::MasterList mlist = fileReader.getMasters();
             QStringList masters;
 
@@ -289,13 +302,13 @@ void DataFilesModel::addFiles(const QString &path)
                 masters.append(master);
             }
 
-            file->setAuthor(QString::fromStdString(fileReader.getAuthor()));
+            file->setAuthor(decoder->toUnicode(fileReader.getAuthor().c_str()));
             file->setSize(info.size());
             file->setDates(info.lastModified(), info.lastRead());
             file->setVersion(fileReader.getFVer());
             file->setPath(info.absoluteFilePath());
             file->setMasters(masters);
-            file->setDescription(QString::fromStdString(fileReader.getDesc()));
+            file->setDescription(decoder->toUnicode(fileReader.getDesc().c_str()));
 
 
             // Put the file in the table
@@ -308,6 +321,8 @@ void DataFilesModel::addFiles(const QString &path)
         }
 
     }
+
+    delete decoder;
 }
 
 QModelIndex DataFilesModel::indexFromItem(EsmFile *item) const
@@ -369,10 +384,10 @@ QStringList DataFilesModel::checkedItems()
 QStringList DataFilesModel::checkedItemsPaths()
 {
     QStringList list;
-    
+
     QList<EsmFile *>::ConstIterator it;
     QList<EsmFile *>::ConstIterator itEnd = mFiles.constEnd();
-    
+
     int i = 0;
     for (it = mFiles.constBegin(); it != itEnd; ++it) {
         EsmFile *file = item(i);
@@ -381,7 +396,7 @@ QStringList DataFilesModel::checkedItemsPaths()
         if (mCheckStates[file->fileName()] == Qt::Checked && canBeChecked(file))
             list << file->path();
     }
-    
+
     return list;
 }
 
diff --git a/files/launcher/launcher.rc b/files/launcher/launcher.rc
new file mode 100644
index 000000000..df2121f46
--- /dev/null
+++ b/files/launcher/launcher.rc
@@ -0,0 +1 @@
+IDI_ICON1               ICON    DISCARDABLE     "images/openmw.ico"
diff --git a/files/ui/mainwindow.ui b/files/ui/mainwindow.ui
index 8143fa24d..a1dfb172b 100644
--- a/files/ui/mainwindow.ui
+++ b/files/ui/mainwindow.ui
@@ -5,7 +5,7 @@
   <property name="minimumSize">
    <size>
     <width>575</width>
-    <height>525</height>
+    <height>535</height>
    </size>
   </property>
   <property name="windowTitle">
diff --git a/files/ui/playpage.ui b/files/ui/playpage.ui
index 6b8b66b20..c0320de1e 100644
--- a/files/ui/playpage.ui
+++ b/files/ui/playpage.ui
@@ -19,6 +19,9 @@
      <property name="frameShadow">
       <enum>QFrame::Plain</enum>
      </property>
+     <property name="lineWidth">
+      <number>0</number>
+     </property>
      <layout class="QGridLayout" name="gridLayout">
       <property name="leftMargin">
        <number>30</number>
@@ -40,10 +43,14 @@
     border-color: rgba(0, 0, 0, 125);
     border-style: solid;
     border-radius: 2px;
+
+    font-size: 12pt;
+    font-family: &quot;EB Garamond&quot;, &quot;EB Garamond 08&quot;;
+	color: black;
 }
 
 /*QComboBox gets the &quot;on&quot; state when the popup is open */
-#profilesComboBox:!editable:on, #ProfilesComboBox::drop-down:editable:on {
+#profilesComboBox:!editable:on {
     background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
         stop:0 rgba(0, 0, 0, 75),
         stop:0.1 rgba(0, 0, 0, 15),
@@ -52,13 +59,9 @@
     border: 1px solid rgba(0, 0, 0, 55);
 }
 
-#profilesComboBox { /* shift the text when the popup opens */
+#profilesComboBox:on { /* shift the text when the popup opens */
     padding-top: 3px;
     padding-left: 4px;
-
-    font-size: 12pt;
-    font-family: &quot;EB Garamond&quot;, &quot;EB Garamond 08&quot;;
-	color: black;
 }
 
 #profilesComboBox::drop-down {
@@ -82,7 +85,6 @@
     left: 1px;
 }
 
-
 #profilesComboBox QAbstractItemView {
     border: 0px;
 }</string>
diff --git a/readme.txt b/readme.txt
index 228278a91..f5997cd25 100644
--- a/readme.txt
+++ b/readme.txt
@@ -3,7 +3,7 @@ OpenMW: A reimplementation of The Elder Scrolls III: Morrowind
 OpenMW is an attempt at recreating the engine for the popular role-playing game
 Morrowind by Bethesda Softworks. You need to own and install the original game for OpenMW to work.
 
-Version: 0.21.0
+Version: 0.22.0
 License: GPL (see GPL3.txt for more information)
 Website: http://www.openmw.org