diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 3f7ec2d3babd5df70691db956bb3757077a62a5d..a5a88f521f2288c470b364a147790609ec854607 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -125,13 +125,6 @@ dependencies {
   implementation("io.reactivex.rxjava2", "rxjava", "2.1.9")
   implementation("org.threeten", "threetenbp", "1.3.6", classifier = "no-tzdb")
   implementation("org.jetbrains", "annotations", "15.0")
-  withVersion("2.14.1") {
-    implementation("com.google.dagger", "dagger-android", version)
-    implementation("com.google.dagger", "dagger-android-support", version)
-
-    kapt("com.google.dagger", "dagger-android-processor", version)
-    kapt("com.google.dagger", "dagger-compiler", version)
-  }
   withVersion("8.8.1") {
     implementation("com.jakewharton", "butterknife", version)
     kapt("com.jakewharton", "butterknife-compiler", version)
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 f532c38024ca3bbe6f0d3fc626902eb18abdf854..4888f685780605ca04f42dceaedc2daa8998aaf7 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,7 +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.data.RenderingSettings
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
 import de.kuschku.quasseldroid_ng.util.helper.map
@@ -27,9 +27,9 @@ class NickListFragment : ServiceBoundFragment() {
   lateinit var nickList: RecyclerView
 
   private var ircFormatDeserializer: IrcFormatDeserializer? = null
-  private val renderingSettings = RenderingSettings(
-    showPrefix = RenderingSettings.ShowPrefixMode.FIRST,
-    colorizeNicknames = RenderingSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
+  private val renderingSettings = AppearanceSettings(
+    showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
+    colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
     colorizeMirc = true,
     timeFormat = ""
   )
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 bd82faddf056a04190fb793b90f1cce8306aba81..999c4121d22194669b11c835bf1f36d0893f0d7e 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,8 +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.data.DisplaySettings
-import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
+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
 import de.kuschku.quasseldroid_ng.util.helper.zip
@@ -32,14 +31,10 @@ class ToolbarFragment : ServiceBoundFragment() {
 
   private lateinit var viewModel: QuasselViewModel
 
-  private val displaySettings = DisplaySettings(
-    showLag = true
-  )
-
   private var ircFormatDeserializer: IrcFormatDeserializer? = null
-  private val renderingSettings = RenderingSettings(
-    showPrefix = RenderingSettings.ShowPrefixMode.FIRST,
-    colorizeNicknames = RenderingSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
+  private val appearanceSettings = AppearanceSettings(
+    showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
+    colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
     colorizeMirc = true,
     timeFormat = ""
   )
@@ -86,7 +81,7 @@ class ToolbarFragment : ServiceBoundFragment() {
           this.title = data?.info?.bufferName
         }
 
-        if (lag == 0L || !displaySettings.showLag) {
+        if (lag == 0L || !appearanceSettings.showLag) {
           this.subtitle = colorizeDescription(data?.description)
         } else {
           val description = colorizeDescription(data?.description)
@@ -107,9 +102,10 @@ class ToolbarFragment : ServiceBoundFragment() {
     return view
   }
 
-  private fun colorizeDescription(description: String?)
-    = ircFormatDeserializer?.formatString(description, renderingSettings.colorizeMirc)
-      ?: description
+  private fun colorizeDescription(description: String?) = ircFormatDeserializer?.formatString(
+    description, appearanceSettings.colorizeMirc
+  )
+                                                          ?: description
 
   data class BufferData(
     val info: BufferInfo? = null,
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferListAdapter.kt
similarity index 98%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferListAdapter.kt
index 86133ccacb38ffec74bf20d4a856b7d9b20aac3e..b6c65343677854b9c6d4f8d84aae718b0aca3671 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferListAdapter.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.buffers
 
 import android.arch.lifecycle.LifecycleOwner
 import android.arch.lifecycle.LiveData
@@ -61,12 +61,12 @@ class BufferListAdapter(
         }.sortedBy { props ->
           props.network.networkName
         }.map { props ->
-          BufferListItem(
-            props,
-            BufferState(
-              networkExpanded = !collapsedNetworks.contains(props.network.networkId)
+            BufferListItem(
+              props,
+              BufferState(
+                networkExpanded = !collapsedNetworks.contains(props.network.networkId)
+              )
             )
-          )
         }.filter { (props, state) ->
           props.info.type.hasFlag(BufferInfo.Type.StatusBuffer) || state.networkExpanded
         }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigAdapter.kt
similarity index 95%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigAdapter.kt
index 33c4c36f1b0dfce61b71a762322f4cf3af669b98..53b3cc1edb1c5fd594d06798eb46b3e3f7c8dd8a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigAdapter.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.buffers
 
 import android.arch.lifecycle.LifecycleOwner
 import android.arch.lifecycle.LiveData
@@ -49,7 +49,9 @@ class BufferViewConfigAdapter(
         parent.context
     )
     val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
-    return BufferViewConfigViewHolder(view)
+    return BufferViewConfigViewHolder(
+      view
+    )
   }
 
   override fun getItem(position: Int): BufferViewConfig? = when (position) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigFragment.kt
similarity index 87%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigFragment.kt
index 6c5b6b382879dbd5c79a84a87a6a4733fee69fad..5b2aa53e9617f2543ab120461ad1dda03411efe1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/buffers/BufferViewConfigFragment.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.buffers
 
 import android.arch.lifecycle.ViewModelProviders
 import android.os.Bundle
@@ -11,7 +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.data.RenderingSettings
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
 import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
 import de.kuschku.quasseldroid_ng.util.helper.map
@@ -33,9 +33,9 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
   private lateinit var viewModel: QuasselViewModel
 
   private var ircFormatDeserializer: IrcFormatDeserializer? = null
-  private val renderingSettings = RenderingSettings(
-    showPrefix = RenderingSettings.ShowPrefixMode.FIRST,
-    colorizeNicknames = RenderingSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
+  private val renderingSettings = AppearanceSettings(
+    showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
+    colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
     colorizeMirc = true,
     timeFormat = ""
   )
@@ -56,7 +56,9 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
     val view = inflater.inflate(R.layout.fragment_chat_list, container, false)
     ButterKnife.bind(this, view)
 
-    val adapter = BufferViewConfigAdapter(this, viewModel.bufferViewConfigs)
+    val adapter = BufferViewConfigAdapter(
+      this, viewModel.bufferViewConfigs
+    )
 
     chatListSpinner.adapter = adapter
     chatListSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/FormattedMessage.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/FormattedMessage.kt
similarity index 70%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/FormattedMessage.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/FormattedMessage.kt
index 68f1c9748eca0fbe2395fa1d2deb4beb253158b4..3427ea19c5545003d179dac24057698b05c076af 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/FormattedMessage.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/FormattedMessage.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.messages
 
 class FormattedMessage(
   val id: Int,
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageAdapter.kt
similarity index 92%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageAdapter.kt
index 8499aaf8b94ebe3e4895c972a076ed775772e6bc..41d648d42164a19c805c15e40ffac2163247e2fc 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageAdapter.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.messages
 
 import android.arch.paging.PagedListAdapter
 import android.content.Context
@@ -10,7 +10,7 @@ import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.util.hasFlag
 import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
 import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase.DatabaseMessage
-import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
 import de.kuschku.quasseldroid_ng.util.helper.getOrPut
 
 class MessageAdapter(
@@ -31,9 +31,9 @@ class MessageAdapter(
 ) {
   private val messageRenderer: MessageRenderer = QuasselMessageRenderer(
     context,
-    RenderingSettings(
-      showPrefix = RenderingSettings.ShowPrefixMode.FIRST,
-      colorizeNicknames = RenderingSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
+    AppearanceSettings(
+      showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
+      colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
       colorizeMirc = true,
       timeFormat = ""
     )
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt
similarity index 99%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt
index 1861c7a248b08721a0d109fb2f166965207e1e89..3494f74def587dbdaeba6331b6da61159a9defa3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageListFragment.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.messages
 
 import android.arch.lifecycle.Observer
 import android.arch.lifecycle.ViewModelProviders
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageRenderer.kt
similarity index 92%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageRenderer.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageRenderer.kt
index 206b100ae194eb942c585cef30f864d2dbe4693b..9620645f6ee05993c7062c705267df3003f4692d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/MessageRenderer.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.messages
 
 import android.support.annotation.LayoutRes
 import de.kuschku.libquassel.protocol.Message_Type
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
similarity index 79%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
index 6b237e5900b8309a3d852a236482c5addd697447..3f250853e4d5927c25e590cc2b51d8ef92628260 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.messages
 
 import android.content.Context
 import android.graphics.Typeface
@@ -15,9 +15,9 @@ import de.kuschku.libquassel.protocol.MsgId
 import de.kuschku.libquassel.util.hasFlag
 import de.kuschku.quasseldroid_ng.R
 import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
-import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings
-import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings.ColorizeNicknamesMode
-import de.kuschku.quasseldroid_ng.ui.settings.data.RenderingSettings.ShowPrefixMode
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings.ColorizeNicknamesMode
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings.ShowPrefixMode
 import de.kuschku.quasseldroid_ng.util.helper.styledAttributes
 import de.kuschku.quasseldroid_ng.util.helper.visibleIf
 import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatDeserializer
@@ -30,11 +30,11 @@ import java.text.SimpleDateFormat
 
 class QuasselMessageRenderer(
   private val context: Context,
-  private val renderingSettings: RenderingSettings
+  private val appearanceSettings: AppearanceSettings
 ) : MessageRenderer {
   private val timeFormatter = DateTimeFormatter.ofPattern(
-    if (renderingSettings.timeFormat.isNotBlank()) {
-      renderingSettings.timeFormat
+    if (appearanceSettings.timeFormat.isNotBlank()) {
+      appearanceSettings.timeFormat
     } else {
       (DateFormat.getTimeFormat(context) as SimpleDateFormat).toLocalizedPattern()
     }
@@ -73,10 +73,13 @@ class QuasselMessageRenderer(
                     messageType: Message_Type?,
                     hasHighlight: Boolean) {
     if (hasHighlight) {
-      val attrs = intArrayOf(R.attr.colorBackgroundHighlight)
-      val colors = viewHolder.itemView.context.obtainStyledAttributes(attrs)
-      viewHolder.itemView.setBackgroundColor(colors.getColor(0, 0))
-      colors.recycle()
+      viewHolder.itemView.context.theme.styledAttributes(
+        R.attr.colorForegroundHighlight, R.attr.colorBackgroundHighlight
+      ) {
+        viewHolder.time.setTextColor(getColor(0, 0))
+        viewHolder.content.setTextColor(getColor(0, 0))
+        viewHolder.itemView.setBackgroundColor(getColor(1, 0))
+      }
     }
   }
 
@@ -88,14 +91,16 @@ class QuasselMessageRenderer(
 
   override fun render(message: QuasselDatabase.DatabaseMessage,
                       markerLine: MsgId): FormattedMessage {
+    val self = Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)
+    val highlight = Message_Flag.of(message.flag).hasFlag(Message_Flag.Highlight)
     return when (Message_Type.of(message.type).enabledValues().firstOrNull()) {
       Message_Type.Plain  -> FormattedMessage(
         message.messageId,
         timeFormatter.format(message.time.atZone(zoneId)),
         SpanFormatter.format(
           context.getString(R.string.message_format_plain),
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.sender, self, highlight),
           formatContent(message.content)
         ),
         message.messageId == markerLine
@@ -105,8 +110,8 @@ class QuasselMessageRenderer(
         timeFormatter.format(message.time.atZone(zoneId)),
         SpanFormatter.format(
           context.getString(R.string.message_format_action),
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.sender, self, highlight),
           formatContent(message.content)
         ),
         message.messageId == markerLine
@@ -116,8 +121,8 @@ class QuasselMessageRenderer(
         timeFormatter.format(message.time.atZone(zoneId)),
         SpanFormatter.format(
           context.getString(R.string.message_format_notice),
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.sender, self, highlight),
           formatContent(message.content)
         ),
         message.messageId == markerLine
@@ -127,10 +132,10 @@ class QuasselMessageRenderer(
         timeFormatter.format(message.time.atZone(zoneId)),
         SpanFormatter.format(
           context.getString(R.string.message_format_nick),
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.content, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.sender, self, highlight),
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.content, self, highlight)
         ),
         message.messageId == markerLine
       )
@@ -140,8 +145,8 @@ class QuasselMessageRenderer(
         SpanFormatter.format(
           context.getString(R.string.message_format_mode),
           message.content,
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.sender, self, highlight)
         ),
         message.messageId == markerLine
       )
@@ -150,8 +155,8 @@ class QuasselMessageRenderer(
         timeFormatter.format(message.time.atZone(zoneId)),
         SpanFormatter.format(
           context.getString(R.string.message_format_join),
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.sender, self, highlight)
         ),
         message.messageId == markerLine
       )
@@ -161,14 +166,14 @@ class QuasselMessageRenderer(
         if (message.content.isBlank()) {
           SpanFormatter.format(
             context.getString(R.string.message_format_part_1),
-            formatPrefix(message.senderPrefixes),
-            formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
+            formatPrefix(message.senderPrefixes, highlight),
+            formatNick(message.sender, self, highlight)
           )
         } else {
           SpanFormatter.format(
             context.getString(R.string.message_format_part_2),
-            formatPrefix(message.senderPrefixes),
-            formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
+            formatPrefix(message.senderPrefixes, highlight),
+            formatNick(message.sender, self, highlight),
             message.content
           )
         },
@@ -180,14 +185,14 @@ class QuasselMessageRenderer(
         if (message.content.isBlank()) {
           SpanFormatter.format(
             context.getString(R.string.message_format_quit_1),
-            formatPrefix(message.senderPrefixes),
-            formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self))
+            formatPrefix(message.senderPrefixes, highlight),
+            formatNick(message.sender, self, highlight)
           )
         } else {
           SpanFormatter.format(
             context.getString(R.string.message_format_quit_2),
-            formatPrefix(message.senderPrefixes),
-            formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
+            formatPrefix(message.senderPrefixes, highlight),
+            formatNick(message.sender, self, highlight),
             message.content
           )
         },
@@ -239,8 +244,8 @@ class QuasselMessageRenderer(
         SpanFormatter.format(
           "[%d] %s%s: %s",
           message.type,
-          formatPrefix(message.senderPrefixes),
-          formatNick(message.sender, Message_Flag.of(message.flag).hasFlag(Message_Flag.Self)),
+          formatPrefix(message.senderPrefixes, highlight),
+          formatNick(message.sender, self, highlight),
           message.content
         ),
         message.messageId == markerLine
@@ -268,7 +273,7 @@ class QuasselMessageRenderer(
   )
 
   private fun formatContent(content: String): CharSequence {
-    val formattedText = ircFormatDeserializer.formatString(content, renderingSettings.colorizeMirc)
+    val formattedText = ircFormatDeserializer.formatString(content, appearanceSettings.colorizeMirc)
     val text = SpannableString(formattedText)
 
     for (result in urlPattern.findAll(formattedText)) {
@@ -310,15 +315,15 @@ class QuasselMessageRenderer(
     return spannableString
   }
 
-  private fun formatNick(sender: String, self: Boolean)
-    = when (renderingSettings.colorizeNicknames) {
-    ColorizeNicknamesMode.ALL          -> formatNickImpl(sender, true)
-    ColorizeNicknamesMode.ALL_BUT_MINE -> formatNickImpl(sender, !self)
+  private fun formatNick(sender: String, self: Boolean,
+                         highlight: Boolean) = when (appearanceSettings.colorizeNicknames) {
+    ColorizeNicknamesMode.ALL          -> formatNickImpl(sender, !highlight)
+    ColorizeNicknamesMode.ALL_BUT_MINE -> formatNickImpl(sender, !self && !highlight)
     ColorizeNicknamesMode.NONE         -> formatNickImpl(sender, false)
   }
 
-  private fun formatPrefix(prefix: String)
-    = when (renderingSettings.showPrefix) {
+  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  -> ""
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageViewHolder.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageViewHolder.kt
similarity index 92%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageViewHolder.kt
rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageViewHolder.kt
index cfddcb3e5c8cf6d0f91eec76e3e3432b5a4d0f26..cea40729c09a2e7717342bc5550e6099b7b19ef3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageViewHolder.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageViewHolder.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid_ng.ui.chat
+package de.kuschku.quasseldroid_ng.ui.chat.messages
 
 import android.support.v7.widget.RecyclerView
 import android.text.method.LinkMovementMethod
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
new file mode 100644
index 0000000000000000000000000000000000000000..91a4ab81801e1e5d16c6da6783d040fa6a66b806
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.kt
@@ -0,0 +1,10 @@
+package de.kuschku.quasseldroid_ng.ui.settings
+
+import android.content.Context
+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()
+}
\ 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
new file mode 100644
index 0000000000000000000000000000000000000000..0051ebaebbcf57879697222ceea303bf256befef
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt
@@ -0,0 +1,33 @@
+package de.kuschku.quasseldroid_ng.ui.settings.data
+
+import android.support.annotation.StyleRes
+import de.kuschku.quasseldroid_ng.R
+
+data class AppearanceSettings(
+  val showPrefix: ShowPrefixMode = ShowPrefixMode.FIRST,
+  val colorizeNicknames: ColorizeNicknamesMode = ColorizeNicknamesMode.ALL_BUT_MINE,
+  val colorizeMirc: Boolean = true,
+  val timeFormat: String = "",
+  val showLag: Boolean = true,
+  val theme: Theme = Theme.QUASSEL_LIGHT
+) {
+  enum class ColorizeNicknamesMode {
+    ALL,
+    ALL_BUT_MINE,
+    NONE
+  }
+
+  enum class ShowPrefixMode {
+    ALL,
+    FIRST,
+    NONE
+  }
+
+  enum class Theme(@StyleRes val style: Int) {
+    QUASSEL_LIGHT(R.style.Theme_ChatTheme_Quassel_Light),
+    QUASSEL_DARK(R.style.Theme_ChatTheme_Quassel_Dark),
+    SOLARIZED_LIGHT(R.style.Theme_ChatTheme_Solarized_Light),
+    SOLARIZED_DARK(R.style.Theme_ChatTheme_Solarized_Dark),
+    AMOLED(R.style.Theme_ChatTheme_Amoled)
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/DisplaySettings.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/DisplaySettings.kt
deleted file mode 100644
index bfd333313d06b4c792d9560135b58038ed7e0b3d..0000000000000000000000000000000000000000
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/DisplaySettings.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package de.kuschku.quasseldroid_ng.ui.settings.data
-
-data class DisplaySettings(
-  val showLag: Boolean = true
-)
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/RenderingSettings.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/RenderingSettings.kt
deleted file mode 100644
index f1c6eea9290fc8fbefab043d8a81f5eb243886bf..0000000000000000000000000000000000000000
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/RenderingSettings.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package de.kuschku.quasseldroid_ng.ui.settings.data
-
-data class RenderingSettings(
-  val showPrefix: ShowPrefixMode = ShowPrefixMode.FIRST,
-  val colorizeNicknames: ColorizeNicknamesMode = ColorizeNicknamesMode.ALL_BUT_MINE,
-  val colorizeMirc: Boolean = true,
-  val timeFormat: String = ""
-) {
-  enum class ColorizeNicknamesMode(val value: Int) {
-    ALL(0),
-    ALL_BUT_MINE(1),
-    NONE(2);
-
-    companion object {
-      fun of(value: Int) = when (value) {
-        0    -> ALL
-        1    -> ALL_BUT_MINE
-        2    -> NONE
-        else -> ALL_BUT_MINE
-      }
-    }
-  }
-
-  enum class ShowPrefixMode(val value: Int) {
-    ALL(0),
-    FIRST(1),
-    NONE(2);
-
-    companion object {
-      fun of(value: Int) = when (value) {
-        0    -> ALL
-        1    -> FIRST
-        2    -> NONE
-        else -> FIRST
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
index c75f9879a3c01e5a4618fe690826ccf8f0acde20..5341b76c37572c3a711585e2bb4997b108141417 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
@@ -16,9 +16,9 @@ import de.kuschku.libquassel.session.ISession
 import de.kuschku.libquassel.session.SessionManager
 import de.kuschku.libquassel.util.and
 import de.kuschku.libquassel.util.hasFlag
-import de.kuschku.quasseldroid_ng.ui.chat.BufferListAdapter
 import de.kuschku.quasseldroid_ng.ui.chat.NickListAdapter
 import de.kuschku.quasseldroid_ng.ui.chat.ToolbarFragment
+import de.kuschku.quasseldroid_ng.ui.chat.buffers.BufferListAdapter
 import de.kuschku.quasseldroid_ng.util.helper.map
 import de.kuschku.quasseldroid_ng.util.helper.switchMap
 import de.kuschku.quasseldroid_ng.util.helper.switchMapRx
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 411cf406d0020f1ee0fd81df6e3862fc633ba78f..b2367185da0446939567b18fd6ff0ec22fb0b369 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
@@ -7,6 +7,8 @@ import android.support.annotation.DrawableRes
 import android.support.v7.app.AppCompatActivity
 import de.kuschku.libquassel.session.Backend
 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.util.helper.updateRecentsHeaderIfExisting
 
 abstract class ServiceBoundActivity : AppCompatActivity() {
@@ -16,13 +18,15 @@ abstract class ServiceBoundActivity : AppCompatActivity() {
   protected val recentsHeaderColor: Int = R.color.colorPrimary
 
   private val connection = BackendServiceConnection()
-
   val backend: LiveData<Backend?>
     get() = connection.backend
 
+  protected lateinit var appearanceSettings: AppearanceSettings
+
   override fun onCreate(savedInstanceState: Bundle?) {
     connection.context = this
-    setTheme(R.style.Theme_ChatTheme_Quassel_Light)
+    appearanceSettings = Settings.appearance(this)
+    setTheme(appearanceSettings.theme.style)
     super.onCreate(savedInstanceState)
     connection.start()
     updateRecentsHeader()
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 0d1864a8e0eba64a55ca92f6aa494794ba9b48e3..4361f9d801378105f163e11c864b1d99afebffaf 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -55,7 +55,7 @@
 
     <fragment
       android:id="@+id/contentMessages"
-      android:name="de.kuschku.quasseldroid_ng.ui.chat.MessageListFragment"
+      android:name="de.kuschku.quasseldroid_ng.ui.chat.messages.MessageListFragment"
       android:layout_width="match_parent"
       android:layout_height="0dip"
       android:layout_weight="1"
@@ -107,7 +107,7 @@
 
     <fragment
       android:id="@+id/chatListFragment"
-      android:name="de.kuschku.quasseldroid_ng.ui.chat.BufferViewConfigFragment"
+      android:name="de.kuschku.quasseldroid_ng.ui.chat.buffers.BufferViewConfigFragment"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:layout="@layout/fragment_chat_list" />
diff --git a/app/src/main/res/values/themes_amoled.xml b/app/src/main/res/values/themes_amoled.xml
index fe36b6143e69378f0b2f3385fe8d83ffc16efefb..342af0aa28e27c0392b8c4f69a43110a01530f17 100644
--- a/app/src/main/res/values/themes_amoled.xml
+++ b/app/src/main/res/values/themes_amoled.xml
@@ -37,11 +37,13 @@
 
     <item name="colorBackground">#000000</item>
     <item name="android:windowBackground">@color/amoled_background</item>
-    <item name="colorBackgroundHighlight">#ff8811</item>
+    <item name="colorBackgroundHighlight">#FFA726</item>
     <item name="colorBackgroundSecondary">@null</item>
     <item name="colorBackgroundCard">#303030</item>
     <item name="colorBackgroundDialog">#000000</item>
 
+    <item name="colorMarkerLine">#800000</item>
+
     <item name="colorTintActivity">#88cc33</item>
     <item name="colorTintMessage">#2277dd</item>
     <item name="colorTintHighlight">#ff8811</item>
diff --git a/app/src/main/res/values/themes_quassel.xml b/app/src/main/res/values/themes_quassel.xml
index 3d9c05174051a9ea9903397ecc8f457bc460dd22..918278e903c36915395890ca9f31c675143df6b8 100644
--- a/app/src/main/res/values/themes_quassel.xml
+++ b/app/src/main/res/values/themes_quassel.xml
@@ -32,12 +32,12 @@
     <item name="colorForegroundMirc">0x1</item>
 
     <item name="colorBackground">#FAFAFA</item>
-    <item name="colorBackgroundHighlight">#ff8811</item>
+    <item name="colorBackgroundHighlight">#FFA726</item>
     <item name="colorBackgroundSecondary">@null</item>
     <item name="colorBackgroundCard">#FFFFFF</item>
     <item name="colorBackgroundDialog">#FAFAFA</item>
 
-    <item name="colorMarkerLine">#ff0000</item>
+    <item name="colorMarkerLine">#800000</item>
 
     <item name="colorTintActivity">#88cc33</item>
     <item name="colorTintMessage">#2277dd</item>
@@ -75,11 +75,13 @@
     <item name="colorForegroundMirc">0x0</item>
 
     <item name="colorBackground">#303030</item>
-    <item name="colorBackgroundHighlight">#ff8811</item>
+    <item name="colorBackgroundHighlight">#FFA726</item>
     <item name="colorBackgroundSecondary">@null</item>
     <item name="colorBackgroundCard">#424242</item>
     <item name="colorBackgroundDialog">#303030</item>
 
+    <item name="colorMarkerLine">#800000</item>
+
     <item name="colorTintActivity">#88cc33</item>
     <item name="colorTintMessage">#2277dd</item>
     <item name="colorTintHighlight">#ff8811</item>
diff --git a/app/src/main/res/values/themes_solarized.xml b/app/src/main/res/values/themes_solarized.xml
index c1ece021531619e6f4a2121e9276a0680fe9dbc0..926604c427c343b434fe8fcd278ead43a54238fa 100644
--- a/app/src/main/res/values/themes_solarized.xml
+++ b/app/src/main/res/values/themes_solarized.xml
@@ -28,9 +28,9 @@
     <item name="senderColorE">#4AC1B8</item>
     <item name="senderColorF">#657900</item>
 
-    <item name="colorForeground">#839495</item>
-    <item name="colorForegroundHighlight">#839495</item>
-    <item name="colorForegroundSecondary">#576A66</item>
+    <item name="colorForeground">#586e75</item>
+    <item name="colorForegroundHighlight">#002B36</item>
+    <item name="colorForegroundSecondary">#657b83</item>
     <item name="colorForegroundAction">#268BD2</item>
     <item name="colorForegroundNotice">#B58900</item>
     <item name="colorForegroundError">#B00000</item>
@@ -38,14 +38,16 @@
     <item name="colorForegroundMirc">0xF</item>
 
     <item name="colorBackground">#FDF6E3</item>
-    <item name="colorBackgroundHighlight">#268bd2</item>
+    <item name="colorBackgroundHighlight">#D5A920</item>
     <item name="colorBackgroundSecondary">@null</item>
     <item name="colorBackgroundCard">#EEE8D5</item>
     <item name="colorBackgroundDialog">#FDF6E3</item>
 
-    <item name="colorTintActivity">#88cc33</item>
-    <item name="colorTintMessage">#2277dd</item>
-    <item name="colorTintHighlight">#ff8811</item>
+    <item name="colorMarkerLine">#CB4B16</item>
+
+    <item name="colorTintActivity">#859900</item>
+    <item name="colorTintMessage">#268BD2</item>
+    <item name="colorTintHighlight">#EB6B36</item>
   </style>
 
   <string name="themeSolarizedDarkName">Solarized (Dark)</string>
@@ -73,9 +75,9 @@
     <item name="senderColorE">#4AC1B8</item>
     <item name="senderColorF">#657900</item>
 
-    <item name="colorForeground">#839495</item>
-    <item name="colorForegroundHighlight">#839495</item>
-    <item name="colorForegroundSecondary">#576A66</item>
+    <item name="colorForeground">#93a1a1</item>
+    <item name="colorForegroundHighlight">#002B36</item>
+    <item name="colorForegroundSecondary">#839496</item>
     <item name="colorForegroundAction">#268BD2</item>
     <item name="colorForegroundNotice">#B58900</item>
     <item name="colorForegroundError">#B00000</item>
@@ -83,13 +85,15 @@
     <item name="colorForegroundMirc">0xF</item>
 
     <item name="colorBackground">#002B36</item>
-    <item name="colorBackgroundHighlight">#268bd2</item>
+    <item name="colorBackgroundHighlight">#D5A920</item>
     <item name="colorBackgroundSecondary">@null</item>
     <item name="colorBackgroundCard">#073642</item>
     <item name="colorBackgroundDialog">#002B36</item>
 
-    <item name="colorTintActivity">#88cc33</item>
-    <item name="colorTintMessage">#2277dd</item>
-    <item name="colorTintHighlight">#ff8811</item>
+    <item name="colorMarkerLine">#CB4B16</item>
+
+    <item name="colorTintActivity">#859900</item>
+    <item name="colorTintMessage">#268BD2</item>
+    <item name="colorTintHighlight">#EB6B36</item>
   </style>
 </resources>