diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index a5a88f521f2288c470b364a147790609ec854607..16103cc43fc4aebc3705431b1db5037351ee606c 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -98,6 +98,8 @@ dependencies {
     implementation("com.android.support", "customtabs", version)
     implementation("com.android.support", "cardview-v7", version)
     implementation("com.android.support", "recyclerview-v7", version)
+    implementation("com.android.support", "preference-v7", version)
+    implementation("com.android.support", "preference-v14", version)
   }
   implementation("com.android.support.constraint", "constraint-layout", "1.0.2")
 
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4e3e33c813a0b2af20545db59ba0b19a585cd643..b1135242e292019ef715e70701cee3402160e80a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,12 @@
       android:label="@string/app_name"
       android:parentActivityName=".ui.setup.accounts.AccountSelectionActivity"
       android:windowSoftInputMode="adjustResize" />
+    <activity
+      android:name=".ui.settings.SettingsActivity"
+      android:exported="false"
+      android:label="@string/app_name"
+      android:parentActivityName=".ui.chat.ChatActivity"
+      android:windowSoftInputMode="adjustResize" />
     <activity
       android:name=".ui.setup.accounts.AccountSelectionActivity"
       android:exported="true"
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt
index 16c3177cf8eea0c51e9c9365baed107c3d07c389..47dbac27c84cc912f7b7d2c85a50d697919c95e9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt
@@ -27,6 +27,9 @@ class QuasseldroidNG : Application() {
 
     AndroidThreeTenBackport.init(this)
 
+    // Initialize preferences unless already set
+    android.support.v7.preference.PreferenceManager.setDefaultValues(this, R.xml.preferences, false)
+
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
       systemService<ShortcutManager>().dynamicShortcuts = listOf(
         ShortcutInfo.Builder(this, "id1")
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
index 6d22c4ca94af489a36c3887220a3d704369f7c2d..0f7582815c4ea428ccfa2d65faa54dedf29c54d2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
@@ -4,6 +4,7 @@ import android.app.Activity
 import android.arch.lifecycle.Observer
 import android.arch.lifecycle.ViewModelProviders
 import android.content.Context
+import android.content.Intent
 import android.os.Bundle
 import android.support.design.widget.Snackbar
 import android.support.v4.widget.DrawerLayout
@@ -22,6 +23,7 @@ import de.kuschku.quasseldroid_ng.Keys
 import de.kuschku.quasseldroid_ng.R
 import de.kuschku.quasseldroid_ng.persistence.AccountDatabase
 import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
+import de.kuschku.quasseldroid_ng.ui.settings.SettingsActivity
 import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
@@ -195,6 +197,10 @@ class ChatActivity : ServiceBoundActivity() {
       }
       true
     }
+    R.id.settings     -> {
+      startActivity(Intent(applicationContext, SettingsActivity::class.java))
+      true
+    }
     R.id.disconnect   -> {
       handler.post {
         getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE).editApply {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt
index 4888f685780605ca04f42dceaedc2daa8998aaf7..9f169131840c4d45388c15e1f27ee9b83ad8d9aa 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt
@@ -11,6 +11,7 @@ import android.view.ViewGroup
 import butterknife.BindView
 import butterknife.ButterKnife
 import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.ui.settings.Settings
 import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
@@ -27,18 +28,14 @@ class NickListFragment : ServiceBoundFragment() {
   lateinit var nickList: RecyclerView
 
   private var ircFormatDeserializer: IrcFormatDeserializer? = null
-  private val renderingSettings = AppearanceSettings(
-    showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
-    colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
-    colorizeMirc = true,
-    timeFormat = ""
-  )
+  private lateinit var appearanceSettings: AppearanceSettings
 
   override fun onCreate(savedInstanceState: Bundle?) {
     handlerThread.onCreate()
     super.onCreate(savedInstanceState)
 
     viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
+    appearanceSettings = Settings.appearance(activity!!)
 
     if (ircFormatDeserializer == null) {
       ircFormatDeserializer = IrcFormatDeserializer(context!!)
@@ -56,7 +53,7 @@ class NickListFragment : ServiceBoundFragment() {
         it.map {
           it.copy(
             realname = ircFormatDeserializer?.formatString(
-              it.realname.toString(), renderingSettings.colorizeMirc
+              it.realname.toString(), appearanceSettings.colorizeMirc
             ) ?: it.realname
           )
         }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt
index 999c4121d22194669b11c835bf1f36d0893f0d7e..28725d2a3bf19d207fc0e3799683d0c959f741a6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ToolbarFragment.kt
@@ -14,6 +14,7 @@ import de.kuschku.libquassel.quassel.BufferInfo
 import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork
 import de.kuschku.libquassel.util.hasFlag
 import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.ui.settings.Settings
 import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid_ng.util.helper.visibleIf
@@ -32,12 +33,7 @@ class ToolbarFragment : ServiceBoundFragment() {
   private lateinit var viewModel: QuasselViewModel
 
   private var ircFormatDeserializer: IrcFormatDeserializer? = null
-  private val appearanceSettings = AppearanceSettings(
-    showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
-    colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
-    colorizeMirc = true,
-    timeFormat = ""
-  )
+  private lateinit var appearanceSettings: AppearanceSettings
 
   var title: CharSequence?
     get() = toolbarTitle.text
@@ -59,6 +55,7 @@ class ToolbarFragment : ServiceBoundFragment() {
     super.onCreate(savedInstanceState)
 
     viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
+    appearanceSettings = Settings.appearance(activity!!)
 
     if (ircFormatDeserializer == null) {
       ircFormatDeserializer = IrcFormatDeserializer(context!!)
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigFragment.kt
index 5b2aa53e9617f2543ab120461ad1dda03411efe1..d2e8bfb0dc65a1d334591afa1012aeb4aeec532c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigFragment.kt
@@ -11,6 +11,7 @@ import butterknife.BindView
 import butterknife.ButterKnife
 import de.kuschku.libquassel.protocol.BufferId
 import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.ui.settings.Settings
 import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
@@ -33,18 +34,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
   private lateinit var viewModel: QuasselViewModel
 
   private var ircFormatDeserializer: IrcFormatDeserializer? = null
-  private val renderingSettings = AppearanceSettings(
-    showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
-    colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
-    colorizeMirc = true,
-    timeFormat = ""
-  )
+  private lateinit var appearanceSettings: AppearanceSettings
 
   override fun onCreate(savedInstanceState: Bundle?) {
     handlerThread.onCreate()
     super.onCreate(savedInstanceState)
 
     viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
+    appearanceSettings = Settings.appearance(activity!!)
 
     if (ircFormatDeserializer == null) {
       ircFormatDeserializer = IrcFormatDeserializer(context!!)
@@ -77,7 +74,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
         it.map {
           it.copy(
             description = ircFormatDeserializer?.formatString(
-              it.description.toString(), renderingSettings.colorizeMirc
+              it.description.toString(), appearanceSettings.colorizeMirc
             ) ?: it.description
           )
         }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageAdapter.kt
index 41d648d42164a19c805c15e40ffac2163247e2fc..0d9ea45bbced1de8d9cc3fa368b21fcf6a255548 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageAdapter.kt
@@ -15,6 +15,7 @@ import de.kuschku.quasseldroid_ng.util.helper.getOrPut
 
 class MessageAdapter(
   context: Context,
+  appearanceSettings: AppearanceSettings,
   var markerLinePosition: Pair<MsgId, MsgId>? = null
 ) : PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>(
   object : DiffCallback<QuasselDatabase.DatabaseMessage>() {
@@ -31,12 +32,7 @@ class MessageAdapter(
 ) {
   private val messageRenderer: MessageRenderer = QuasselMessageRenderer(
     context,
-    AppearanceSettings(
-      showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
-      colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
-      colorizeMirc = true,
-      timeFormat = ""
-    )
+    appearanceSettings
   )
 
   private val messageCache = LruCache<Int, FormattedMessage>(512)
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt
index 3494f74def587dbdaeba6331b6da61159a9defa3..1b5a929789e6d29695ef0113069f429319a25a94 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt
@@ -18,6 +18,8 @@ import de.kuschku.libquassel.protocol.MsgId
 import de.kuschku.libquassel.quassel.syncables.BufferSyncer
 import de.kuschku.quasseldroid_ng.R
 import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
+import de.kuschku.quasseldroid_ng.ui.settings.Settings
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
 import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
@@ -32,6 +34,7 @@ class MessageListFragment : ServiceBoundFragment() {
   lateinit var scrollDown: FloatingActionButton
 
   private lateinit var viewModel: QuasselViewModel
+  private lateinit var appearanceSettings: AppearanceSettings
 
   private val handler = AndroidHandlerThread("Chat")
 
@@ -48,6 +51,7 @@ class MessageListFragment : ServiceBoundFragment() {
     handler.onCreate()
     super.onCreate(savedInstanceState)
     viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
+    appearanceSettings = Settings.appearance(activity!!)
     setHasOptionsMenu(true)
   }
 
@@ -65,7 +69,7 @@ class MessageListFragment : ServiceBoundFragment() {
     linearLayoutManager = LinearLayoutManager(context)
     linearLayoutManager.reverseLayout = true
 
-    adapter = MessageAdapter(context!!)
+    adapter = MessageAdapter(context!!, appearanceSettings)
     messageList.adapter = adapter
     messageList.layoutManager = linearLayoutManager
     messageList.itemAnimator = null
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
index 3f250853e4d5927c25e590cc2b51d8ef92628260..c797b728a3b0c822f21ff78c2c7f8131d94e3b14 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
@@ -4,7 +4,6 @@ import android.content.Context
 import android.graphics.Typeface
 import android.text.SpannableString
 import android.text.Spanned
-import android.text.format.DateFormat
 import android.text.style.ForegroundColorSpan
 import android.text.style.StyleSpan
 import android.text.style.URLSpan
@@ -26,19 +25,24 @@ import de.kuschku.quasseldroid_ng.util.ui.SpanFormatter
 import org.intellij.lang.annotations.Language
 import org.threeten.bp.ZoneId
 import org.threeten.bp.format.DateTimeFormatter
-import java.text.SimpleDateFormat
 
 class QuasselMessageRenderer(
   private val context: Context,
   private val appearanceSettings: AppearanceSettings
 ) : MessageRenderer {
   private val timeFormatter = DateTimeFormatter.ofPattern(
-    if (appearanceSettings.timeFormat.isNotBlank()) {
-      appearanceSettings.timeFormat
-    } else {
-      (DateFormat.getTimeFormat(context) as SimpleDateFormat).toLocalizedPattern()
-    }
+    timePattern(appearanceSettings.showSeconds, appearanceSettings.use24hClock)
   )
+
+  private fun timePattern(showSeconds: Boolean,
+                          use24hClock: Boolean) = when (use24hClock to showSeconds) {
+    false to true  -> "hh:mm:ss a"
+    false to false -> "hh:mm a"
+
+    true to true   -> "HH:mm:ss"
+    else           -> "HH:mm"
+  }
+
   private lateinit var senderColors: IntArray
 
   private val zoneId = ZoneId.systemDefault()
@@ -324,8 +328,8 @@ class QuasselMessageRenderer(
 
   private fun formatPrefix(prefix: String,
                            highlight: Boolean) = when (appearanceSettings.showPrefix) {
-    ShowPrefixMode.ALL   -> prefix
-    ShowPrefixMode.FIRST -> prefix.substring(0, Math.min(prefix.length, 1))
-    ShowPrefixMode.NONE  -> ""
+    ShowPrefixMode.ALL     -> prefix
+    ShowPrefixMode.HIGHEST -> prefix.substring(0, Math.min(prefix.length, 1))
+    ShowPrefixMode.NONE    -> ""
   }
 }
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.kt
index 91a4ab81801e1e5d16c6da6783d040fa6a66b806..402daaf10441bb60695037988afd03ee7595cc4d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.kt
@@ -1,10 +1,61 @@
 package de.kuschku.quasseldroid_ng.ui.settings
 
 import android.content.Context
+import android.content.SharedPreferences
+import android.preference.PreferenceManager
+import de.kuschku.quasseldroid_ng.R
 import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings.*
 import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings
 
 object Settings {
-  fun appearance(context: Context) = AppearanceSettings()
-  fun backlog(context: Context) = BacklogSettings()
+  private fun <T> settings(context: Context,
+                           f: SharedPreferences.() -> T) = PreferenceManager.getDefaultSharedPreferences(
+    context
+  ).f()
+
+  fun appearance(context: Context) = settings(context) {
+    AppearanceSettings(
+      theme = Theme.valueOf(
+        getString(
+          context.getString(R.string.preference_theme_key),
+          AppearanceSettings.DEFAULT.theme.name
+        )
+      ),
+      showPrefix = ShowPrefixMode.valueOf(
+        getString(
+          context.getString(R.string.preference_show_prefix_key),
+          AppearanceSettings.DEFAULT.showPrefix.name
+        )
+      ),
+      colorizeNicknames = ColorizeNicknamesMode.valueOf(
+        getString(
+          context.getString(R.string.preference_colorize_nicknames_key),
+          AppearanceSettings.DEFAULT.colorizeNicknames.name
+        )
+      ),
+      colorizeMirc = getBoolean(
+        context.getString(R.string.preference_colorize_mirc_key),
+        AppearanceSettings.DEFAULT.colorizeMirc
+      ),
+      showSeconds = getBoolean(
+        context.getString(R.string.preference_show_seconds_key),
+        AppearanceSettings.DEFAULT.showSeconds
+      ),
+      use24hClock = getBoolean(
+        context.getString(R.string.preference_use_24h_clock_key),
+        AppearanceSettings.DEFAULT.use24hClock
+      ),
+      showLag = getBoolean(
+        context.getString(R.string.preference_show_lag_key),
+        AppearanceSettings.DEFAULT.showLag
+      )
+    )
+  }
+
+  fun backlog(context: Context) = settings(context) {
+    BacklogSettings(
+
+    )
+  }
 }
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c5515e7109d8908e8eef61040fe4f6ff5130b7cc
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsActivity.kt
@@ -0,0 +1,22 @@
+package de.kuschku.quasseldroid_ng.ui.settings
+
+import android.os.Bundle
+import android.support.v7.widget.Toolbar
+import butterknife.BindView
+import butterknife.ButterKnife
+import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.util.service.ServiceBoundActivity
+
+class SettingsActivity : ServiceBoundActivity() {
+  @BindView(R.id.toolbar)
+  lateinit var toolbar: Toolbar
+
+  override fun onCreate(savedInstanceState: Bundle?) {
+    super.onCreate(savedInstanceState)
+    setContentView(R.layout.activity_settings)
+    ButterKnife.bind(this)
+
+    setSupportActionBar(toolbar)
+    supportActionBar?.setDisplayHomeAsUpEnabled(true)
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7c6442061668417a3f0156120429b224983f8167
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsFragment.kt
@@ -0,0 +1,57 @@
+package de.kuschku.quasseldroid_ng.ui.settings
+
+import android.content.SharedPreferences
+import android.os.Bundle
+import android.support.v7.preference.ListPreference
+import android.support.v7.preference.Preference
+import android.support.v7.preference.PreferenceFragmentCompat
+import android.support.v7.preference.PreferenceGroup
+import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
+
+class SettingsFragment : PreferenceFragmentCompat(),
+                         SharedPreferences.OnSharedPreferenceChangeListener {
+  var appearanceSettings: AppearanceSettings? = null
+
+  override fun onCreate(savedInstanceState: Bundle?) {
+    super.onCreate(savedInstanceState)
+    appearanceSettings = Settings.appearance(context!!)
+  }
+
+  override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+    setPreferencesFromResource(R.xml.preferences, rootKey)
+  }
+
+  override fun onStart() {
+    super.onStart()
+    preferenceScreen.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
+    initSummary(preferenceScreen)
+  }
+
+  override fun onStop() {
+    preferenceScreen.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
+    super.onStop()
+  }
+
+  override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
+    updateSummary(findPreference(key))
+    if (appearanceSettings?.theme != null &&
+        appearanceSettings?.theme != Settings.appearance(context!!).theme) {
+      activity?.recreate()
+    }
+  }
+
+  fun updateSummary(preference: Preference) {
+    if (preference is ListPreference) {
+      preference.summary = preference.entry
+    }
+  }
+
+  fun initSummary(preference: Preference) {
+    if (preference is PreferenceGroup) {
+      (0 until preference.preferenceCount).map(preference::getPreference).forEach(::initSummary)
+    } else {
+      updateSummary(preference)
+    }
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt
index 0051ebaebbcf57879697222ceea303bf256befef..fa9d8f49a594d5ebb027fe5a3bb8d57f21a045a6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt
@@ -4,10 +4,11 @@ import android.support.annotation.StyleRes
 import de.kuschku.quasseldroid_ng.R
 
 data class AppearanceSettings(
-  val showPrefix: ShowPrefixMode = ShowPrefixMode.FIRST,
+  val showPrefix: ShowPrefixMode = ShowPrefixMode.HIGHEST,
   val colorizeNicknames: ColorizeNicknamesMode = ColorizeNicknamesMode.ALL_BUT_MINE,
   val colorizeMirc: Boolean = true,
-  val timeFormat: String = "",
+  val showSeconds: Boolean = false,
+  val use24hClock: Boolean = true,
   val showLag: Boolean = true,
   val theme: Theme = Theme.QUASSEL_LIGHT
 ) {
@@ -19,15 +20,19 @@ data class AppearanceSettings(
 
   enum class ShowPrefixMode {
     ALL,
-    FIRST,
+    HIGHEST,
     NONE
   }
 
   enum class Theme(@StyleRes val style: Int) {
     QUASSEL_LIGHT(R.style.Theme_ChatTheme_Quassel_Light),
     QUASSEL_DARK(R.style.Theme_ChatTheme_Quassel_Dark),
+    AMOLED(R.style.Theme_ChatTheme_Amoled),
     SOLARIZED_LIGHT(R.style.Theme_ChatTheme_Solarized_Light),
-    SOLARIZED_DARK(R.style.Theme_ChatTheme_Solarized_Dark),
-    AMOLED(R.style.Theme_ChatTheme_Amoled)
+    SOLARIZED_DARK(R.style.Theme_ChatTheme_Solarized_Dark)
+  }
+
+  companion object {
+    val DEFAULT = AppearanceSettings()
   }
 }
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/BacklogSettings.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/BacklogSettings.kt
index f72172969267f4fc249b5f10398dec2e626db9b5..f432c9262a628fc0923a4d226b6c4d45dd61fd01 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/BacklogSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/BacklogSettings.kt
@@ -2,4 +2,8 @@ package de.kuschku.quasseldroid_ng.ui.settings.data
 
 data class BacklogSettings(
   val dynamicAmount: Int = 20
-)
\ No newline at end of file
+) {
+  companion object {
+    val DEFAULT = BacklogSettings()
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt
index cbee7923d676562964e11aec724af13b0153db99..8ff4782130e2cf162e5752af6694eeab6f4367d6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt
@@ -60,6 +60,7 @@ abstract class SetupActivity : AppCompatActivity() {
     else
       R.drawable.ic_arrow_right
     button.setImageResource(drawable)
+    currentPage.value?.requestFocus()
   }
 
   fun updateRecentsHeader()
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt
index b06899e1aa18be27c87eebc5db1f532bff9cd9be..c12ea229705da9ef48a0db7d21f2824998a55409 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt
@@ -69,6 +69,10 @@ abstract class SlideFragment : Fragment() {
   abstract fun getData(data: Bundle)
   var initData: Bundle? = null
 
+  fun requestFocus() {
+    this.view?.requestFocus()
+  }
+
   protected abstract fun onCreateContent(inflater: LayoutInflater, container: ViewGroup?,
                                          savedInstanceState: Bundle?): View
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt
index b2367185da0446939567b18fd6ff0ec22fb0b369..a64921334a1d183457d7e4512689446bd747db67 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt
@@ -24,6 +24,7 @@ abstract class ServiceBoundActivity : AppCompatActivity() {
   protected lateinit var appearanceSettings: AppearanceSettings
 
   override fun onCreate(savedInstanceState: Bundle?) {
+
     connection.context = this
     appearanceSettings = Settings.appearance(this)
     setTheme(appearanceSettings.theme.style)
@@ -41,6 +42,9 @@ abstract class ServiceBoundActivity : AppCompatActivity() {
   }
 
   override fun onStart() {
+    if (Settings.appearance(this) != appearanceSettings) {
+      recreate()
+    }
     connection.bind()
     super.onStart()
   }
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 4361f9d801378105f163e11c864b1d99afebffaf..076e9706c5fe5d02e1f76218a4eef174a8ad151f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,8 +4,7 @@
   android:id="@+id/drawerLayout"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
-  android:fitsSystemWindows="true"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:fitsSystemWindows="true">
 
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f9a771bbe46637ac6b2284845cc97b1b0cd773c3
--- /dev/null
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -0,0 +1,38 @@
+<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:app="http://schemas.android.com/apk/res-auto"
+  xmlns:tools="http://schemas.android.com/tools"
+  android:layout_width="match_parent"
+  android:layout_height="match_parent"
+  android:fitsSystemWindows="true">
+
+  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true"
+    android:orientation="vertical">
+
+    <android.support.design.widget.AppBarLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:theme="?attr/actionBarTheme">
+
+      <android.support.v7.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="?attr/actionBarSize"
+        app:contentInsetStartWithNavigation="0dp"
+        app:popupTheme="@style/Widget.PopupOverlay" />
+
+    </android.support.design.widget.AppBarLayout>
+
+    <fragment
+      android:id="@+id/settingsFragment"
+      android:name="de.kuschku.quasseldroid_ng.ui.settings.SettingsFragment"
+      android:layout_width="fill_parent"
+      android:layout_height="fill_parent"
+      tools:layout="@xml/preferences" />
+  </LinearLayout>
+
+</android.support.v4.widget.DrawerLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_setup.xml b/app/src/main/res/layout/activity_setup.xml
index 81175f0858495b6b50730a826bcc93c7773f14f2..a0a74dc86be303ce563739282ede233f79587ee3 100644
--- a/app/src/main/res/layout/activity_setup.xml
+++ b/app/src/main/res/layout/activity_setup.xml
@@ -2,8 +2,7 @@
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  tools:theme="@style/Theme.SetupTheme">
+  android:layout_height="match_parent">
 
   <android.support.v4.view.ViewPager
     android:id="@+id/view_pager"
diff --git a/app/src/main/res/layout/fragment_chat_list.xml b/app/src/main/res/layout/fragment_chat_list.xml
index 1dc6351ef4238da43b6c5155a0b9e161a55d59e3..58460b41ae84529c3c0440d6f78e1002b06d03cf 100644
--- a/app/src/main/res/layout/fragment_chat_list.xml
+++ b/app/src/main/res/layout/fragment_chat_list.xml
@@ -3,9 +3,7 @@
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
-  android:orientation="vertical"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:orientation="vertical">
 
   <android.support.design.widget.AppBarLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml
index e8323981d4ac003c92ac61fff54b2727255a973a..86ae1bcc52ac85d1f79cb8721aff7a4ecf60dcec 100644
--- a/app/src/main/res/layout/fragment_messages.xml
+++ b/app/src/main/res/layout/fragment_messages.xml
@@ -5,8 +5,7 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="?attr/colorBackground"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  tools:showIn="@layout/activity_main">
 
   <android.support.v7.widget.RecyclerView
     android:id="@+id/messages"
diff --git a/app/src/main/res/layout/fragment_toolbar.xml b/app/src/main/res/layout/fragment_toolbar.xml
index 6a2d724136b56e93bf09cff79b8275f274cd94c1..ee13a2287cf686b2c10a14933bb914dc009a7f6f 100644
--- a/app/src/main/res/layout/fragment_toolbar.xml
+++ b/app/src/main/res/layout/fragment_toolbar.xml
@@ -12,8 +12,7 @@
   android:minHeight="?attr/actionBarSize"
   android:orientation="vertical"
   android:theme="?attr/actionBarTheme"
-  tools:showIn="@layout/activity_main"
-  tools:theme="@style/Widget.AppBarOverlay">
+  tools:showIn="@layout/activity_main">
 
   <LinearLayout
     android:layout_width="wrap_content"
diff --git a/app/src/main/res/layout/setup_account_connection.xml b/app/src/main/res/layout/setup_account_connection.xml
index 162ac43213371937e15b09ad92ace3b9e260f9f8..499b64e16bb60a4abfd27541a86389de1490debb 100644
--- a/app/src/main/res/layout/setup_account_connection.xml
+++ b/app/src/main/res/layout/setup_account_connection.xml
@@ -2,13 +2,10 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
-  xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
-  android:padding="32dp"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.SetupTheme">
+  android:padding="32dp">
 
   <android.support.design.widget.TextInputLayout
     android:id="@+id/hostWrapper"
diff --git a/app/src/main/res/layout/setup_account_edit.xml b/app/src/main/res/layout/setup_account_edit.xml
index bfc7e62d96e36e2c5b9b82284df2bc032a5aa20d..715e30623c0fea8627fa90c4af2bb122f10bed2e 100644
--- a/app/src/main/res/layout/setup_account_edit.xml
+++ b/app/src/main/res/layout/setup_account_edit.xml
@@ -2,9 +2,7 @@
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.SetupTheme">
+  android:layout_height="match_parent">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/setup_account_name.xml b/app/src/main/res/layout/setup_account_name.xml
index 0bf1ecfcdeeaf9322f9ecf13f360f136a173b77e..591099361b76cb3175f4103e944b9ce1295ed465 100644
--- a/app/src/main/res/layout/setup_account_name.xml
+++ b/app/src/main/res/layout/setup_account_name.xml
@@ -1,12 +1,9 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
-  xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
-  android:padding="32dp"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.SetupTheme">
+  android:padding="32dp">
 
   <android.support.design.widget.TextInputLayout
     android:id="@+id/nameWrapper"
diff --git a/app/src/main/res/layout/setup_account_user.xml b/app/src/main/res/layout/setup_account_user.xml
index e75a654c6b53b5f8353ebaadceaf6e238e60a3d7..4468f2c97765ce2638a7e3fa30af1144cd47ea9a 100644
--- a/app/src/main/res/layout/setup_account_user.xml
+++ b/app/src/main/res/layout/setup_account_user.xml
@@ -1,12 +1,9 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
-  xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
-  android:padding="32dp"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.SetupTheme">
+  android:padding="32dp">
 
   <android.support.design.widget.TextInputLayout
     android:id="@+id/userWrapper"
diff --git a/app/src/main/res/layout/setup_select_account.xml b/app/src/main/res/layout/setup_select_account.xml
index b2e81ee8696bf6dd335f13139136d036d7cdc812..7961fd8dd0ef319afe62a4845749d9642e19615c 100644
--- a/app/src/main/res/layout/setup_select_account.xml
+++ b/app/src/main/res/layout/setup_select_account.xml
@@ -1,7 +1,4 @@
 <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
-  xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/account_list"
   android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.SetupTheme" />
+  android:layout_height="match_parent" />
diff --git a/app/src/main/res/layout/setup_slide.xml b/app/src/main/res/layout/setup_slide.xml
index 46f172494356c4b87a2d4ebabec78d8c9c227f1c..54045a751331f258934787416c9624d046f47ba1 100644
--- a/app/src/main/res/layout/setup_slide.xml
+++ b/app/src/main/res/layout/setup_slide.xml
@@ -2,9 +2,7 @@
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.SetupTheme">
+  android:layout_height="match_parent">
 
   <android.support.design.widget.AppBarLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_buffer.xml b/app/src/main/res/layout/widget_buffer.xml
index 12fdcea158a009b13a8f0c76df5e2ef3f6b7ec14..d181160f35ab0807698ebb607967154d133a5294 100644
--- a/app/src/main/res/layout/widget_buffer.xml
+++ b/app/src/main/res/layout/widget_buffer.xml
@@ -8,9 +8,7 @@
   android:paddingBottom="8dp"
   android:paddingLeft="16dp"
   android:paddingRight="16dp"
-  android:paddingTop="8dp"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:paddingTop="8dp">
 
   <ImageView
     android:id="@+id/status"
diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml
index b23606b69d52da75e35d8a0c2bf6241006157b2c..43dc3ce6c0c3bda44dba857ed6ac535b2bc9def2 100644
--- a/app/src/main/res/layout/widget_chatmessage_action.xml
+++ b/app/src/main/res/layout/widget_chatmessage_action.xml
@@ -26,9 +26,7 @@
   android:clickable="true"
   android:focusable="true"
   android:orientation="vertical"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml
index 1485a969af193deb83031debda53c1c9338ceea2..9b8eac026f9133171996190ef6e38b707fe341c5 100644
--- a/app/src/main/res/layout/widget_chatmessage_error.xml
+++ b/app/src/main/res/layout/widget_chatmessage_error.xml
@@ -6,9 +6,7 @@
   android:clickable="true"
   android:focusable="true"
   android:orientation="vertical"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_chatmessage_info.xml b/app/src/main/res/layout/widget_chatmessage_info.xml
index b6d1f048cf71aa700b0b50619f8fb86bfcf1b1c2..0748dd14c9a74f76a7f7ed3f44919772606f04b6 100644
--- a/app/src/main/res/layout/widget_chatmessage_info.xml
+++ b/app/src/main/res/layout/widget_chatmessage_info.xml
@@ -6,9 +6,7 @@
   android:clickable="true"
   android:focusable="true"
   android:orientation="vertical"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_chatmessage_notice.xml b/app/src/main/res/layout/widget_chatmessage_notice.xml
index 755a7d1009183e6a0f1db14538a4c104f9cee9e4..facbf98b298215e434b981ce39342d80292e5349 100644
--- a/app/src/main/res/layout/widget_chatmessage_notice.xml
+++ b/app/src/main/res/layout/widget_chatmessage_notice.xml
@@ -6,9 +6,7 @@
   android:clickable="true"
   android:focusable="true"
   android:orientation="vertical"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_chatmessage_placeholder.xml b/app/src/main/res/layout/widget_chatmessage_placeholder.xml
index 5021308b2aa74232060e1d5f153874017275b83f..bb9e5c8eb5c2f7713a24fea296ca64afe822f3b2 100644
--- a/app/src/main/res/layout/widget_chatmessage_placeholder.xml
+++ b/app/src/main/res/layout/widget_chatmessage_placeholder.xml
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-  xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
-  android:layout_height="48dp"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:layout_height="48dp">
 
   <TextView
     android:id="@+id/time"
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index 54b7db7320d4b5ccd225a3c5537e2bc93d805013..6828a4424a1e38d8324d098652e02176a5ec8061 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -6,9 +6,7 @@
   android:clickable="true"
   android:focusable="true"
   android:orientation="vertical"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml
index b9ba45aec48dfe43ce75bc1ee94207abec9bd7cd..7e5f7caf9918fa222f1e5489657dd71efd491537 100644
--- a/app/src/main/res/layout/widget_chatmessage_server.xml
+++ b/app/src/main/res/layout/widget_chatmessage_server.xml
@@ -6,9 +6,7 @@
   android:clickable="true"
   android:focusable="true"
   android:orientation="vertical"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_core_account.xml b/app/src/main/res/layout/widget_core_account.xml
index 041147810d3df2fa90cd0e5f81fd9e1552b392f4..0a8e02ba005d22125458cdbd53f529e53797e47a 100644
--- a/app/src/main/res/layout/widget_core_account.xml
+++ b/app/src/main/res/layout/widget_core_account.xml
@@ -9,8 +9,7 @@
   android:focusableInTouchMode="false"
   android:orientation="horizontal"
   android:paddingLeft="16dp"
-  android:paddingRight="16dp"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:paddingRight="16dp">
 
   <LinearLayout
     android:layout_width="48dp"
diff --git a/app/src/main/res/layout/widget_core_account_add.xml b/app/src/main/res/layout/widget_core_account_add.xml
index 464c45b4e06c2476f6d530314b308b3bbaa1f2b1..f6c839109aa5e42884d241cceb53dad7092f69d1 100644
--- a/app/src/main/res/layout/widget_core_account_add.xml
+++ b/app/src/main/res/layout/widget_core_account_add.xml
@@ -9,8 +9,7 @@
   android:focusableInTouchMode="false"
   android:orientation="horizontal"
   android:paddingLeft="16dp"
-  android:paddingRight="16dp"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:paddingRight="16dp">
 
   <ImageView
     android:layout_width="32dp"
diff --git a/app/src/main/res/layout/widget_network.xml b/app/src/main/res/layout/widget_network.xml
index 8d68d7c8e3f95f8a3391829603947a1dc80aec04..89af4b1c52a445d50db5290544a8f48f6b85554e 100644
--- a/app/src/main/res/layout/widget_network.xml
+++ b/app/src/main/res/layout/widget_network.xml
@@ -5,9 +5,7 @@
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="?attr/selectableItemBackground"
-  android:orientation="vertical"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:orientation="vertical">
 
   <View
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_nick.xml b/app/src/main/res/layout/widget_nick.xml
index 16673d31abc06a35d8416281e92252be682a5c7c..91a35f4a4011392f176da556fdf62473a385ad13 100644
--- a/app/src/main/res/layout/widget_nick.xml
+++ b/app/src/main/res/layout/widget_nick.xml
@@ -10,9 +10,7 @@
   android:paddingEnd="?listPreferredItemPaddingRight"
   android:paddingLeft="?listPreferredItemPaddingLeft"
   android:paddingRight="?listPreferredItemPaddingRight"
-  android:paddingStart="?listPreferredItemPaddingLeft"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:paddingStart="?listPreferredItemPaddingLeft">
 
   <FrameLayout
     android:id="@+id/modesContainer"
diff --git a/app/src/main/res/layout/widget_nick_away.xml b/app/src/main/res/layout/widget_nick_away.xml
index d97fe0069cca1ac730c3f1806fdd38814a875e61..29837a9bc98f54f398eaab81535d007cc54cf2a3 100644
--- a/app/src/main/res/layout/widget_nick_away.xml
+++ b/app/src/main/res/layout/widget_nick_away.xml
@@ -10,9 +10,7 @@
   android:paddingEnd="?listPreferredItemPaddingRight"
   android:paddingLeft="?listPreferredItemPaddingLeft"
   android:paddingRight="?listPreferredItemPaddingRight"
-  android:paddingStart="?listPreferredItemPaddingLeft"
-  tools:background="@android:color/background_light"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light">
+  android:paddingStart="?listPreferredItemPaddingLeft">
 
   <FrameLayout
     android:id="@+id/modesContainer"
diff --git a/app/src/main/res/layout/widget_spinner_item_inline.xml b/app/src/main/res/layout/widget_spinner_item_inline.xml
index bdbc09345fbc542033624b6800f2103c5f504507..b21fc81584630bf85d2771c9dd2c164f7013e61c 100644
--- a/app/src/main/res/layout/widget_spinner_item_inline.xml
+++ b/app/src/main/res/layout/widget_spinner_item_inline.xml
@@ -1,9 +1,7 @@
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-  xmlns:tools="http://schemas.android.com/tools"
   android:id="@android:id/text1"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:gravity="center_vertical"
   android:minHeight="48dp"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light" />
+  android:textAppearance="?android:attr/textAppearanceListItemSmall" />
diff --git a/app/src/main/res/layout/widget_spinner_item_toolbar.xml b/app/src/main/res/layout/widget_spinner_item_toolbar.xml
index 5c14c6cad6ed5af209553ebc36142ecfab1d4d1f..fa2ad16dc1baf60651bce7e96127b01ba6600e77 100644
--- a/app/src/main/res/layout/widget_spinner_item_toolbar.xml
+++ b/app/src/main/res/layout/widget_spinner_item_toolbar.xml
@@ -8,5 +8,4 @@
   android:paddingLeft="16dp"
   android:paddingRight="16dp"
   android:textAppearance="?android:attr/textAppearanceListItemSmall"
-  tools:text="All Chats"
-  tools:theme="@style/Theme.ChatTheme.Quassel_Light" />
+  tools:text="All Chats" />
diff --git a/app/src/main/res/values/preferences.xml b/app/src/main/res/values/preferences.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6af1e9c181ce0a20d51d166578ad447bbb541859
--- /dev/null
+++ b/app/src/main/res/values/preferences.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+  <string name="preference_appearance_title">Appearance</string>
+
+  <string name="preference_theme_key" translatable="false">theme</string>
+  <string name="preference_theme_title">Theme</string>
+  <string name="preference_theme_entry_quassel_light">Quassel (Light)</string>
+  <string name="preference_theme_entry_quassel_dark">Quassel (Dark)</string>
+  <string name="preference_theme_entry_amoled">AMOLED</string>
+  <string name="preference_theme_entry_solarized_light">Solarized (Light)</string>
+  <string name="preference_theme_entry_solarized_dark">Solarized (Dark)</string>
+  <string-array name="preference_theme_entries">
+    <item>@string/preference_theme_entry_quassel_light</item>
+    <item>@string/preference_theme_entry_quassel_dark</item>
+    <item>@string/preference_theme_entry_amoled</item>
+    <item>@string/preference_theme_entry_solarized_light</item>
+    <item>@string/preference_theme_entry_solarized_dark</item>
+  </string-array>
+  <string-array name="preference_theme_entryvalues">
+    <item>QUASSEL_LIGHT</item>
+    <item>QUASSEL_DARK</item>
+    <item>AMOLED</item>
+    <item>SOLARIZED_LIGHT</item>
+    <item>SOLARIZED_DARK</item>
+  </string-array>
+
+  <string name="preference_colorize_mirc_key" translatable="false">colorize_mirc</string>
+  <string name="preference_colorize_mirc_title">Use mIRC Colors</string>
+  <string name="preference_colorize_mirc_summaryon">Show mIRC colors in messages</string>
+  <string name="preference_colorize_mirc_summaryoff">Strip mIRC colors from messages</string>
+
+  <string name="preference_colorize_nicknames_key" translatable="false">colorize_nicknames</string>
+  <string name="preference_colorize_nicknames_title">Colorize nicknames</string>
+  <string name="preference_colorize_nicknames_entry_all">All nicks</string>
+  <string name="preference_colorize_nicknames_entry_all_but_mine">All but own nick</string>
+  <string name="preference_colorize_nicknames_entry_none">No nicks</string>
+  <string-array name="preference_colorize_nicknames_entries">
+    <item>@string/preference_colorize_nicknames_entry_all</item>
+    <item>@string/preference_colorize_nicknames_entry_all_but_mine</item>
+    <item>@string/preference_colorize_nicknames_entry_none</item>
+  </string-array>
+  <string-array name="preference_colorize_nicknames_entryvalues">
+    <item>ALL</item>
+    <item>ALL_BUT_MINE</item>
+    <item>NONE</item>
+  </string-array>
+
+  <string name="preference_show_prefix_key" translatable="false">show_prefix</string>
+  <string name="preference_show_prefix_title">Show sendermodes</string>
+  <string name="preference_show_prefix_entry_all">Allv modes</string>
+  <string name="preference_show_prefix_entry_highest">Highest mode</string>
+  <string name="preference_show_prefix_entry_none">No modes</string>
+  <string-array name="preference_show_prefix_entries">
+    <item>@string/preference_show_prefix_entry_all</item>
+    <item>@string/preference_show_prefix_entry_highest</item>
+    <item>@string/preference_show_prefix_entry_none</item>
+  </string-array>
+  <string-array name="preference_show_prefix_entryvalues">
+    <item>ALL</item>
+    <item>HIGHEST</item>
+    <item>NONE</item>
+  </string-array>
+
+  <string name="preference_show_seconds_key" translatable="false">show_seconds</string>
+  <string name="preference_show_seconds_title">Show Seconds</string>
+
+  <string name="preference_use_24h_clock_key" translatable="false">use_24h_clock</string>
+  <string name="preference_use_24h_clock_title">Use 24h Clock</string>
+
+  <string name="preference_show_lag_key" translatable="false">show_lag</string>
+  <string name="preference_show_lag_title">Show lag</string>
+  <string name="preference_show_lag_summary">Displays the lag between client and core in the action bar</string>
+
+
+  <string name="preference_backlog_title">Backlog</string>
+
+  <string name="preference_dynamic_fetch_key" translatable="false">dynamic_fetch</string>
+  <string name="preference_dynamic_fetch_title">Dynamic Fetch Amount</string>
+  <string name="preference_dynamic_fetch_summary">The number of backlog messages to fetch each time</string>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/themes_amoled.xml b/app/src/main/res/values/themes_amoled.xml
index 342af0aa28e27c0392b8c4f69a43110a01530f17..378dccbf5bc13c6936de26d49ee42ef9bda18adc 100644
--- a/app/src/main/res/values/themes_amoled.xml
+++ b/app/src/main/res/values/themes_amoled.xml
@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <resources>
-  <string name="themeAmoledkName">AMOLED (Black)</string>
-  <string name="themeAmoledId">AMOLED</string>
-
+  <color name="amoled_background">#000000</color>
   <style name="Theme.ChatTheme.Amoled" parent="Theme.ChatTheme">
     <item name="colorPrimary">#000</item>
     <item name="colorPrimaryDark">#000</item>
@@ -48,6 +46,4 @@
     <item name="colorTintMessage">#2277dd</item>
     <item name="colorTintHighlight">#ff8811</item>
   </style>
-
-  <color name="amoled_background">#000000</color>
 </resources>
diff --git a/app/src/main/res/values/themes_base.xml b/app/src/main/res/values/themes_base.xml
index 7557a2d36936e6d70d64d99774c67d13280c0a2b..a0d987b33571b22b6075cc78a7fc4da508b94394 100644
--- a/app/src/main/res/values/themes_base.xml
+++ b/app/src/main/res/values/themes_base.xml
@@ -35,8 +35,7 @@
   <style name="Theme.ChatTheme" parent="Base.ChatTheme">
     <item name="actionBarTheme">@style/Widget.AppBarOverlay</item>
     <item name="formatBarTheme">@style/Widget.AppBarOverlay</item>
-
-    <item name="android:windowBackground">@null</item>
+    <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
 
     <item name="windowActionModeOverlay">true</item>
 
@@ -71,8 +70,7 @@
   <style name="Theme.ChatTheme.Light" parent="Base.ChatTheme.Light">
     <item name="actionBarTheme">@style/Widget.AppBarOverlay</item>
     <item name="formatBarTheme">@style/Widget.AppBarOverlay.Light</item>
-
-    <item name="android:windowBackground">@null</item>
+    <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
 
     <item name="windowActionModeOverlay">true</item>
 
diff --git a/app/src/main/res/values/themes_quassel.xml b/app/src/main/res/values/themes_quassel.xml
index 918278e903c36915395890ca9f31c675143df6b8..aa5fab1c6367b353290dda0d95cd7a4cef3d250e 100644
--- a/app/src/main/res/values/themes_quassel.xml
+++ b/app/src/main/res/values/themes_quassel.xml
@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <resources>
-  <string name="themeQuasselLightName">Quasselâ„¢ (Light)</string>
-  <string name="themeQuasselLightId">QUASSEL_LIGHT</string>
-
+  <color name="quassel_light_background">#fafafa</color>
   <style name="Theme.ChatTheme.Quassel_Light" parent="Theme.ChatTheme.Light">
     <item name="senderColor0">#cc0000</item>
     <item name="senderColor1">#006cad</item>
@@ -31,6 +29,7 @@
 
     <item name="colorForegroundMirc">0x1</item>
 
+    <item name="android:windowBackground">@color/quassel_light_background</item>
     <item name="colorBackground">#FAFAFA</item>
     <item name="colorBackgroundHighlight">#FFA726</item>
     <item name="colorBackgroundSecondary">@null</item>
@@ -44,9 +43,7 @@
     <item name="colorTintHighlight">#ff8811</item>
   </style>
 
-  <string name="themeQuasselDarkName">Quasselâ„¢ (Dark)</string>
-  <string name="themeQuasselDarkId">QUASSEL_DARK</string>
-
+  <color name="quassel_dark_background">#303030</color>
   <style name="Theme.ChatTheme.Quassel_Dark" parent="Theme.ChatTheme">
     <item name="senderColor0">#cc0000</item>
     <item name="senderColor1">#006cad</item>
@@ -74,6 +71,7 @@
 
     <item name="colorForegroundMirc">0x0</item>
 
+    <item name="android:windowBackground">@color/quassel_dark_background</item>
     <item name="colorBackground">#303030</item>
     <item name="colorBackgroundHighlight">#FFA726</item>
     <item name="colorBackgroundSecondary">@null</item>
diff --git a/app/src/main/res/values/themes_solarized.xml b/app/src/main/res/values/themes_solarized.xml
index 926604c427c343b434fe8fcd278ead43a54238fa..38d84d9c7ba5de97e3765aa899ea544ed9dcfd37 100644
--- a/app/src/main/res/values/themes_solarized.xml
+++ b/app/src/main/res/values/themes_solarized.xml
@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <resources>
-  <string name="themeSolarizedLightName">Solarized (Light)</string>
-  <string name="themeSolarizedLightId">SOLARIZED_LIGHT</string>
-
+  <color name="solarized_light_background">#FDF6E3</color>
   <style name="Theme.ChatTheme.Solarized_Light" parent="Theme.ChatTheme.Light">
     <item name="colorPrimary">?attr/colorBackgroundCard</item>
     <item name="colorPrimaryDark">#b0ac9e</item>
@@ -35,8 +33,9 @@
     <item name="colorForegroundNotice">#B58900</item>
     <item name="colorForegroundError">#B00000</item>
 
-    <item name="colorForegroundMirc">0xF</item>
+    <item name="colorForegroundMirc">0x1</item>
 
+    <item name="android:windowBackground">@color/solarized_light_background</item>
     <item name="colorBackground">#FDF6E3</item>
     <item name="colorBackgroundHighlight">#D5A920</item>
     <item name="colorBackgroundSecondary">@null</item>
@@ -50,9 +49,7 @@
     <item name="colorTintHighlight">#EB6B36</item>
   </style>
 
-  <string name="themeSolarizedDarkName">Solarized (Dark)</string>
-  <string name="themeSolarizedDarkId">SOLARIZED_DARK</string>
-
+  <color name="solarized_dark_background">#002B36</color>
   <style name="Theme.ChatTheme.Solarized_Dark" parent="Theme.ChatTheme">
     <item name="colorPrimary">?attr/colorBackgroundCard</item>
     <item name="colorPrimaryDark">?attr/colorBackground</item>
@@ -82,8 +79,9 @@
     <item name="colorForegroundNotice">#B58900</item>
     <item name="colorForegroundError">#B00000</item>
 
-    <item name="colorForegroundMirc">0xF</item>
+    <item name="colorForegroundMirc">0x0</item>
 
+    <item name="android:windowBackground">@color/solarized_dark_background</item>
     <item name="colorBackground">#002B36</item>
     <item name="colorBackgroundHighlight">#D5A920</item>
     <item name="colorBackgroundSecondary">@null</item>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d6438d601958ca62e03ac9ff15379eee5a04a059
--- /dev/null
+++ b/app/src/main/res/xml/preferences.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+  <PreferenceCategory android:title="@string/preference_appearance_title">
+    <ListPreference
+      android:defaultValue="QUASSEL_LIGHT"
+      android:entries="@array/preference_theme_entries"
+      android:entryValues="@array/preference_theme_entryvalues"
+      android:key="@string/preference_theme_key"
+      android:title="@string/preference_theme_title" />
+
+    <SwitchPreference
+      android:defaultValue="true"
+      android:key="@string/preference_colorize_mirc_key"
+      android:summaryOff="@string/preference_colorize_mirc_summaryoff"
+      android:summaryOn="@string/preference_colorize_mirc_summaryon"
+      android:title="@string/preference_colorize_mirc_title" />
+
+    <DropDownPreference
+      android:defaultValue="ALL_BUT_MINE"
+      android:entries="@array/preference_colorize_nicknames_entries"
+      android:entryValues="@array/preference_colorize_nicknames_entryvalues"
+      android:key="@string/preference_colorize_nicknames_key"
+      android:title="@string/preference_colorize_nicknames_title" />
+
+    <DropDownPreference
+      android:defaultValue="HIGHEST"
+      android:entries="@array/preference_show_prefix_entries"
+      android:entryValues="@array/preference_show_prefix_entryvalues"
+      android:key="@string/preference_show_prefix_key"
+      android:title="@string/preference_show_prefix_title" />
+
+    <SwitchPreference
+      android:defaultValue="false"
+      android:key="@string/preference_show_seconds_key"
+      android:title="@string/preference_show_seconds_title" />
+
+    <SwitchPreference
+      android:defaultValue="true"
+      android:key="@string/preference_use_24h_clock_key"
+      android:title="@string/preference_use_24h_clock_title" />
+
+    <SwitchPreference
+      android:defaultValue="false"
+      android:key="@string/preference_show_lag_key"
+      android:summary="@string/preference_show_lag_summary"
+      android:title="@string/preference_show_lag_title" />
+  </PreferenceCategory>
+
+  <PreferenceCategory android:title="@string/preference_backlog_title">
+    <EditTextPreference
+      android:defaultValue="20"
+      android:inputType="number"
+      android:key="@string/preference_dynamic_fetch_key"
+      android:summary="@string/preference_dynamic_fetch_summary"
+      android:title="@string/preference_dynamic_fetch_title" />
+  </PreferenceCategory>
+</PreferenceScreen>
\ No newline at end of file
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt
index 7c0eb23e6e9908d3b2347504454b316b85883028..ef90a81de53cbf54e454667f1aca6e9908a801e2 100644
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt
@@ -16,7 +16,7 @@ class ReportCollector(application: Application) : Collector<Report, ReportConfig
   override fun collect(context: CrashContext, config: ReportConfig) = Report(
     crash = crashCollector.collectIf(context, config.crash),
     threads = threadCollector.collectIf(context, config.threads),
-    logcat = logcatCollector.collectIf(context, config.logcat),
+    /*logcat = logcatCollector.collectIf(context, config.logcat),*/
     application = applicationCollector.collectIf(context, config.application),
     device = deviceCollector.collectIf(context, config.device),
     environment = environmentCollector.collectIf(context, config.environment)
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/Report.kt b/malheur/src/main/java/de/kuschku/malheur/data/Report.kt
index 8cb399f449c99a4005cd1bbe472c668bca48a394..ad675f7520824ac75aebed562223c4c584ee4a64 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/Report.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/Report.kt
@@ -1,10 +1,10 @@
 package de.kuschku.malheur.data
 
 data class Report(
-  val crash: CrashInfo?,
-  val threads: ThreadsInfo?,
-  val logcat: Map<String, List<String>?>?,
-  val application: AppInfo?,
-  val device: DeviceInfo?,
-  val environment: EnvInfo?
+  val crash: CrashInfo? = null,
+  val threads: ThreadsInfo? = null,
+  val logcat: Map<String, List<String>?>? = null,
+  val application: AppInfo? = null,
+  val device: DeviceInfo? = null,
+  val environment: EnvInfo? = null
 )