diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index c19ec0e774fe46e7d49437fc5fb5ac0a655637d1..ada6f42557d3598086076defc958b3568f11ad47 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -72,7 +72,7 @@ android {
     minSdkVersion(16)
     targetSdkVersion(27)
 
-    applicationId = "de.kuschku.quasseldroid"
+    applicationId = "com.iskrembilen.quasseldroid"
     versionCode = cmd("git", "rev-list", "--count", "HEAD")?.toIntOrNull() ?: 1
     versionName = cmd("git", "describe", "--always", "--tags", "HEAD") ?: "1.0.0"
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt b/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt
index c6631ecd837c20c98edc0bc48c4827b3c095e20d..ffb178515e8d5ecbca236704ffb7e034dc49b3ff 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt
@@ -27,13 +27,18 @@ import dagger.android.AndroidInjector
 import dagger.android.support.DaggerApplication
 import de.kuschku.malheur.CrashHandler
 import de.kuschku.quasseldroid.dagger.DaggerAppComponent
+import de.kuschku.quasseldroid.persistence.AccountDatabase
+import de.kuschku.quasseldroid.persistence.LegacyAccountDatabase
+import de.kuschku.quasseldroid.settings.AppearanceSettings
+import de.kuschku.quasseldroid.settings.SettingsMigration
+import de.kuschku.quasseldroid.settings.SettingsMigrationManager
 import de.kuschku.quasseldroid.util.backport.AndroidThreeTenBackport
 import de.kuschku.quasseldroid.util.compatibility.AndroidCompatibilityUtils
 import de.kuschku.quasseldroid.util.compatibility.AndroidLoggingHandler
 import de.kuschku.quasseldroid.util.compatibility.AndroidStreamChannelFactory
 
 class Quasseldroid : DaggerApplication() {
-  override fun applicationInjector(): AndroidInjector<out Quasseldroid> =
+  override fun applicationInjector(): AndroidInjector<Quasseldroid> =
     DaggerAppComponent.builder().create(this)
 
   override fun onCreate() {
@@ -58,6 +63,94 @@ class Quasseldroid : DaggerApplication() {
 
     AndroidThreeTenBackport.init(this)
 
+    applicationInjector().inject(this)
+
+    // Migrate preferences
+    SettingsMigrationManager(listOf(
+      SettingsMigration.migrationOf(0, 1) { prefs, edit ->
+        // Migrating database
+        val database = LegacyAccountDatabase.Creator.init(this)
+        val accounts = database.accounts().all()
+        database.close()
+
+        val accountDatabase = AccountDatabase.Creator.init(this)
+        accountDatabase.accounts().create(*accounts.map {
+          AccountDatabase.Account(
+            id = it.id,
+            host = it.host,
+            port = it.port,
+            user = it.user,
+            pass = it.pass,
+            name = it.name,
+            lastUsed = 0
+          )
+        }.toTypedArray())
+        accountDatabase.close()
+        Thread(Runnable {
+          deleteDatabase("data")
+        }).start()
+
+        // Migrating actual settings
+        if (prefs.contains("selectedtheme")) {
+          prefs.getString("selectedtheme", "").let { theme ->
+            when (theme) {
+              "light" -> AppearanceSettings.Theme.MATERIAL_LIGHT
+              "dark"  -> AppearanceSettings.Theme.MATERIAL_DARK
+              else    -> null
+            }?.let {
+              edit.putString(getString(R.string.preference_theme_key), it.name)
+            }
+          }
+          edit.remove("selectedtheme")
+        }
+
+        if (prefs.contains("timestamp")) {
+          prefs.getString("timestamp", "").let { timestamp ->
+            edit.putBoolean(getString(R.string.preference_show_seconds_key),
+                            timestamp.contains("ss"))
+            edit.putBoolean(getString(R.string.preference_show_seconds_key),
+                            timestamp.contains("hh") || timestamp.contains("a"))
+          }
+          edit.remove("timestamp")
+        }
+
+        if (prefs.contains("fontsizeChannelList")) {
+          prefs.getString("fontsizeChannelList", "").toIntOrNull()?.let { fontSize ->
+            edit.putInt(getString(R.string.preference_textsize_key), fontSize)
+          }
+          edit.remove("fontsizeChannelList")
+        }
+
+        if (prefs.contains("allowcoloredtext")) {
+          prefs.getBoolean("allowcoloredtext", false).let {
+            edit.putBoolean(getString(R.string.preference_colorize_mirc_key), it)
+          }
+          edit.remove("allowcoloredtext")
+        }
+
+        if (prefs.contains("monospace")) {
+          prefs.getBoolean("monospace", false).let {
+            edit.putBoolean(getString(R.string.preference_monospace_key), it)
+          }
+          edit.remove("monospace")
+        }
+
+        if (prefs.contains("detailed_actions")) {
+          prefs.getBoolean("detailed_actions", false).let {
+            edit.putBoolean(getString(R.string.preference_hostmask_actions_key), it)
+          }
+          edit.remove("detailed_actions")
+        }
+
+        if (prefs.contains("showlag")) {
+          prefs.getBoolean("showlag", false).let {
+            edit.putBoolean(getString(R.string.preference_show_lag_key), it)
+          }
+          edit.remove("showlag")
+        }
+      }
+    )).migrate(PreferenceManager.getDefaultSharedPreferences(this))
+
     // Initialize preferences unless already set
     PreferenceManager.setDefaultValues(this, R.xml.preferences, false)
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt
index d45d4883de96f4900a8d509deeab77d57681052c..407d3e594aa35bf75374625074d782176278f13b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt
@@ -29,6 +29,7 @@ import android.content.Intent
 import android.graphics.Bitmap
 import android.graphics.Canvas
 import android.graphics.drawable.Drawable
+import android.net.Uri
 import android.os.Build
 import android.support.v4.app.NotificationCompat
 import android.support.v4.app.NotificationManagerCompat
@@ -148,12 +149,8 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C
       .apply {
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
           var defaults = 0
-          if (notificationSettings.notificationSoundEnabled) {
-            if (notificationSettings.notificationSound != null) {
-              setSound(notificationSettings.notificationSound)
-            } else {
-              defaults = defaults or NotificationCompat.DEFAULT_SOUND
-            }
+          if (!notificationSettings.sound.isNullOrEmpty()) {
+            setSound(Uri.parse(notificationSettings.sound))
           }
           if (notificationSettings.vibrate) {
             defaults = defaults or NotificationCompat.DEFAULT_VIBRATE
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
index 958981f6e3d0aed8825f291d4ed50c202ba36902..15aae626cb8409fd026c09302026019f3a91fffe 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
@@ -28,7 +28,6 @@ data class MessageSettings(
   val showSeconds: Boolean = false,
   val use24hClock: Boolean = true,
   val showHostmaskActions: Boolean = false,
-  val showHostmaskPlain: Boolean = false,
   val nicksOnNewLine: Boolean = false,
   val timeAtEnd: Boolean = false,
   val showRealNames: Boolean = false,
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt
index ca9f720e6651a40ebb41e1fec88dafb2ccb4f1a3..71cc7334718c7a3bea76471cf1d453d3c9395976 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt
@@ -19,14 +19,11 @@
 
 package de.kuschku.quasseldroid.settings
 
-import android.net.Uri
-
 data class NotificationSettings(
   val query: Level = Level.ALL,
   val channel: Level = Level.HIGHLIGHT,
   val other: Level = Level.NONE,
-  val notificationSoundEnabled: Boolean = false,
-  val notificationSound: Uri? = null,
+  val sound: String? = null,
   val vibrate: Boolean = true
 ) {
   enum class Level {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
index 057b7c0357698cdd5b47a4f8c371b6577f9d34d0..9a1730e64b3c743d85a0b3830a4546bb48453a78 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
@@ -85,10 +85,6 @@ object Settings {
         context.getString(R.string.preference_hostmask_actions_key),
         MessageSettings.DEFAULT.showHostmaskActions
       ),
-      showHostmaskPlain = getBoolean(
-        context.getString(R.string.preference_hostmask_plain_key),
-        MessageSettings.DEFAULT.showHostmaskPlain
-      ),
       nicksOnNewLine = getBoolean(
         context.getString(R.string.preference_nicks_on_new_line_key),
         MessageSettings.DEFAULT.nicksOnNewLine
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigration.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigration.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7b5514957ef052f4b0b85842a562218321ea9244
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigration.kt
@@ -0,0 +1,41 @@
+/*
+ * Quasseldroid - Quassel client for Android
+ *
+ * Copyright (c) 2018 Janne Koschinski
+ * Copyright (c) 2018 The Quassel Project
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3 as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid.settings
+
+import android.content.SharedPreferences
+
+interface SettingsMigration {
+  val from: Int
+  val to: Int
+
+  fun migrate(preferences: SharedPreferences, editor: SharedPreferences.Editor)
+
+  companion object {
+    fun migrationOf(from: Int, to: Int,
+                    migrationFunction: (SharedPreferences, SharedPreferences.Editor) -> Unit): SettingsMigration {
+      return object : SettingsMigration {
+        override val from = from
+        override val to = to
+        override fun migrate(preferences: SharedPreferences, editor: SharedPreferences.Editor) =
+          migrationFunction(preferences, editor)
+      }
+    }
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigrationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigrationManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b8c5c2990cc8f5094a403c730b6163a02fd20e37
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigrationManager.kt
@@ -0,0 +1,46 @@
+/*
+ * Quasseldroid - Quassel client for Android
+ *
+ * Copyright (c) 2018 Janne Koschinski
+ * Copyright (c) 2018 The Quassel Project
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3 as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid.settings
+
+import android.content.SharedPreferences
+
+class SettingsMigrationManager(
+  migrations: List<SettingsMigration>
+) {
+  private val migrationMap = migrations.associateBy(SettingsMigration::from)
+  private val currentVersion = migrations.map(SettingsMigration::to).max()
+
+  fun migrate(preferences: SharedPreferences) {
+    var version = preferences.getInt(SETTINGS_VERSION, 0)
+    while (version != currentVersion) {
+      val migration = migrationMap[version]
+                      ?: throw IllegalArgumentException("Migration not available")
+      val editor = preferences.edit()
+      migration.migrate(preferences, editor)
+      version = migration.to
+      editor.putInt(SETTINGS_VERSION, version)
+      editor.commit()
+    }
+  }
+
+  companion object {
+    private const val SETTINGS_VERSION = "settings_version"
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
index 87d23eed9d057948f3bed1f8de0a0c601b08aab4..bbe2414d1ef274eab22437ef7df69af9f4c7b855 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
@@ -205,7 +205,7 @@ class QuasselMessageRenderer @Inject constructor(
             message.content.sender,
             self,
             highlight,
-            messageSettings.showHostmaskPlain && messageSettings.nicksOnNewLine
+            false
           ))
         }
         val content = contentFormatter.formatContent(message.content.content, highlight)
diff --git a/app/src/main/res/values-de/strings_preferences.xml b/app/src/main/res/values-de/strings_preferences.xml
index 91a1876c8f7d10c540264340de0d593a22ea8e95..3295059cb8fc54c6f16f084c120f551cdb7b99e3 100644
--- a/app/src/main/res/values-de/strings_preferences.xml
+++ b/app/src/main/res/values-de/strings_preferences.xml
@@ -80,9 +80,6 @@
   <string name="preference_hostmask_actions_title">Hostmaske in Aktionen</string>
   <string name="preference_hostmask_actions_summary">Zeigt Ident und Host in Betreten/Verlassen-Nachrichten</string>
 
-  <string name="preference_hostmask_plain_title">Hostmaske in normalen Nachrichten</string>
-  <string name="preference_hostmask_plain_summary">Zeigt Ident und Host in normalen Nachrichten</string>
-
   <string name="preference_nicks_on_new_line_title">Separate Spitznamen</string>
   <string name="preference_nicks_on_new_line_summary">Zeigt Spitznamen in einer eigenen Zeile an</string>
 
diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml
index d59aa3e8fd488c144813f0baceb64bfcfdc6bd39..9ba628c8706d1ebc07ed247f91badcbef8434a5a 100644
--- a/app/src/main/res/values/strings_preferences.xml
+++ b/app/src/main/res/values/strings_preferences.xml
@@ -159,10 +159,6 @@
   <string name="preference_hostmask_actions_title">Show Hostmask in actions</string>
   <string name="preference_hostmask_actions_summary">Display the full nick!ident@host in join/part/quit messages</string>
 
-  <string name="preference_hostmask_plain_key" translatable="false">hostmask_plain</string>
-  <string name="preference_hostmask_plain_title">Show Hostmask in normal messages</string>
-  <string name="preference_hostmask_plain_summary">Display the full nick!ident@host in normal messages</string>
-
   <string name="preference_nicks_on_new_line_key" translatable="false">nicks_on_new_line</string>
   <string name="preference_nicks_on_new_line_title">Separate Nicknames</string>
   <string name="preference_nicks_on_new_line_summary">Shows nicknames on a separate line</string>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index d47e1523799b9fff6bbf570cb5fcad51629b05f1..a270c1f55307028ed70fb198cc28c2b4e08c9254 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -146,13 +146,6 @@
       android:summary="@string/preference_hostmask_actions_summary"
       android:title="@string/preference_hostmask_actions_title" />
 
-    <SwitchPreference
-      android:defaultValue="false"
-      android:dependency="@string/preference_nicks_on_new_line_key"
-      android:key="@string/preference_hostmask_plain_key"
-      android:summary="@string/preference_hostmask_plain_summary"
-      android:title="@string/preference_hostmask_plain_title" />
-
     <SwitchPreference
       android:defaultValue="true"
       android:key="@string/preference_time_at_end_key"