diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 7b426b435e23d3b9f5f74803822ac5128f78947b..fbcb8b236714ac4f0a07171afcd4bbfdbc7c9863 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -120,7 +120,8 @@ dependencies {
   // Utility
   implementation("io.reactivex.rxjava2", "rxjava", "2.1.9")
   implementation("org.threeten", "threetenbp", "1.3.6", classifier = "no-tzdb")
-  implementation("org.jetbrains", "annotations", "15.0")
+  implementation("org.jetbrains", "annotations", "16.0.1")
+  implementation("com.google.code.gson", "gson", "2.8.2")
   withVersion("8.8.1") {
     implementation("com.jakewharton", "butterknife", version)
     kapt("com.jakewharton", "butterknife-compiler", version)
@@ -136,7 +137,6 @@ dependencies {
   // UI
   implementation("me.zhanghai.android.materialprogressbar", "library", "1.4.2")
   implementation("com.afollestad.material-dialogs", "core", "0.9.6.0")
-  implementation("com.stepstone.stepper", "material-stepper", "4.3.1")
   implementation(project(":slidingpanel"))
 
   // Quality Assurance
diff --git a/app/sampledata/contributors.json b/app/sampledata/contributors.json
new file mode 100644
index 0000000000000000000000000000000000000000..8683df065a8b2b82aa38041d09c2243819c9e114
--- /dev/null
+++ b/app/sampledata/contributors.json
@@ -0,0 +1,29 @@
+{
+  "data": [
+    {
+      "name": "Frederik M. J. Vestre",
+      "nickname": "freqmod",
+      "description": "Initial qdatastream deserialization attempts"
+    },
+    {
+      "name": "Martin “Java Sucks” Sandsmark",
+      "nickname": "sandsmark",
+      "description": "Legacy protocol implementation, (de)serializers, project (de)moralizer"
+    },
+    {
+      "name": "Magnus Fjell",
+      "nickname": "magnuf",
+      "description": "Legacy UI"
+    },
+    {
+      "name": "Ken Børge Viktil",
+      "nickname": "Kenji",
+      "description": "Legacy UI"
+    },
+    {
+      "name": "Janne Koschinski",
+      "nickname": "justJanne",
+      "description": "Rewrite, UI, Annotation Processors, Backend"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/app/sampledata/libraries.json b/app/sampledata/libraries.json
new file mode 100644
index 0000000000000000000000000000000000000000..f460cb3b5e1c10e39622173701b20a928d60d8b3
--- /dev/null
+++ b/app/sampledata/libraries.json
@@ -0,0 +1,155 @@
+{
+  "data": [
+    {
+      "name": "Android Architecture Components: Lifecycle",
+      "version": "1.1.1",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://android.googlesource.com/platform/frameworks/support/+/master/lifecycle"
+    },
+    {
+      "name": "Android Architecture Components: Paging",
+      "version": "1.0.0-alpha7",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://android.googlesource.com/platform/frameworks/support/+/master/paging"
+    },
+    {
+      "name": "Android Architecture Components: Room",
+      "version": "1.1.0-beta1",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://android.googlesource.com/platform/frameworks/support/+/master/room"
+    },
+    {
+      "name": "Android Sliding Up Panel",
+      "version": "3.5.0",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      }
+    },
+    {
+      "name": "Android Support Library",
+      "version": "27.1.0",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://android.googlesource.com/platform/frameworks/support/+/master"
+    },
+    {
+      "name": "AutoService",
+      "version": "1.0-rc4",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://github.com/google/auto/tree/master/service"
+    },
+    {
+      "name": "Butter Knife",
+      "version": "8.8.1",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "http://jakewharton.github.io/butterknife/"
+    },
+    {
+      "name": "Dagger 2",
+      "version": "2.15",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://google.github.io/dagger/"
+    },
+    {
+      "name": "Gson",
+      "version": "2.8.2",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://github.com/google/gson"
+    },
+    {
+      "name": "JavaPoet",
+      "version": "1.10.0",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://github.com/square/javapoet"
+    },
+    {
+      "name": "JetBrains Java Annotations",
+      "version": "16.0.1",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://github.com/JetBrains/java-annotations"
+    },
+    {
+      "name": "Kotlin Standard Library",
+      "version": "1.2.31",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://kotlinlang.org/"
+    },
+    {
+      "name": "LeakCanary",
+      "version": "1.5.4",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://github.com/square/leakcanary"
+    },
+    {
+      "name": "Material Dialogs",
+      "version": "0.9.6.0",
+      "license": {
+        "shortName": "MIT",
+        "fullName": "The MIT License (MIT}"
+      },
+      "url": "https://github.com/afollestad/material-dialogs"
+    },
+    {
+      "name": "MaterialProgressBar",
+      "version": "1.4.2",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://github.com/DreaminginCodeZH/MaterialProgressBar"
+    },
+    {
+      "name": "RxJava",
+      "version": "2.1.9",
+      "license": {
+        "shortName": "Apache-2.0",
+        "fullName": "Apache License"
+      },
+      "url": "https://github.com/ReactiveX/RxJava"
+    },
+    {
+      "name": "ThreeTen backport project",
+      "version": "1.3.6",
+      "license": {
+        "shortName": "BSD 3-clause"
+      },
+      "url": "http://www.threeten.org/threetenbp/"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 22ee8f9414e2f0247046571a9acda962e5fdabf7..e32180e8c0e48e138e842faed7c5f12fae1c7e2b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,7 +10,7 @@
   <application
     android:name=".QuasselDroid"
     android:allowBackup="true"
-    android:icon="@mipmap/ic_launcher"
+    android:icon="@mipmap/ic_launcher_legacy"
     android:label="@string/app_name"
     android:supportsRtl="true"
     android:theme="@style/Theme.SplashTheme">
@@ -51,6 +51,25 @@
       android:label="@string/label_settings"
       android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
+    <activity
+      android:name=".ui.settings.crash.CrashSettingsActivity"
+      android:exported="false"
+      android:label="@string/label_crashes"
+      android:parentActivityName=".ui.settings.app.AppSettingsActivity"
+      android:windowSoftInputMode="adjustResize" />
+    <activity
+      android:name=".ui.settings.about.AboutSettingsActivity"
+      android:exported="false"
+      android:label="@string/label_about"
+      android:parentActivityName=".ui.settings.app.AppSettingsActivity"
+      android:windowSoftInputMode="adjustResize" />
+    <activity
+      android:name=".ui.settings.license.LicenseSettingsActivity"
+      android:exported="false"
+      android:label="@string/label_license"
+      android:parentActivityName=".ui.settings.about.AboutSettingsActivity"
+      android:windowSoftInputMode="adjustResize" />
+
     <activity
       android:name=".ui.setup.accounts.selection.AccountSelectionActivity"
       android:exported="false"
diff --git a/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt b/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt
index 32b549b60bfe69ab6459e2eb1e459bae60c9fd91..c3effe131c89abdaef2fc87e2e0291b2433ce13a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityModule.kt
@@ -6,8 +6,14 @@ import de.kuschku.quasseldroid.service.QuasselService
 import de.kuschku.quasseldroid.ui.chat.ChatActivity
 import de.kuschku.quasseldroid.ui.chat.ChatActivityModule
 import de.kuschku.quasseldroid.ui.chat.ChatFragmentProvider
+import de.kuschku.quasseldroid.ui.settings.about.AboutSettingsActivity
+import de.kuschku.quasseldroid.ui.settings.about.AboutSettingsFragmentProvider
 import de.kuschku.quasseldroid.ui.settings.app.AppSettingsActivity
 import de.kuschku.quasseldroid.ui.settings.app.AppSettingsFragmentProvider
+import de.kuschku.quasseldroid.ui.settings.crash.CrashSettingsActivity
+import de.kuschku.quasseldroid.ui.settings.crash.CrashSettingsFragmentProvider
+import de.kuschku.quasseldroid.ui.settings.license.LicenseSettingsActivity
+import de.kuschku.quasseldroid.ui.settings.license.LicenseSettingsFragmentProvider
 import de.kuschku.quasseldroid.ui.setup.accounts.edit.AccountEditActivity
 import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity
 import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionFragmentProvider
@@ -22,6 +28,15 @@ abstract class ActivityModule {
   @ContributesAndroidInjector(modules = [AppSettingsFragmentProvider::class])
   abstract fun bindAppSettingsActivity(): AppSettingsActivity
 
+  @ContributesAndroidInjector(modules = [CrashSettingsFragmentProvider::class])
+  abstract fun bindCrashSettingsActivity(): CrashSettingsActivity
+
+  @ContributesAndroidInjector(modules = [AboutSettingsFragmentProvider::class])
+  abstract fun bindAboutSettingsActivity(): AboutSettingsActivity
+
+  @ContributesAndroidInjector(modules = [LicenseSettingsFragmentProvider::class])
+  abstract fun bindLicenseSettingsActivity(): LicenseSettingsActivity
+
   @ContributesAndroidInjector(modules = [AccountSetupFragmentProvider::class])
   abstract fun bindAccountSetupActivity(): AccountSetupActivity
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
index 5365c3e4002659076f827a8d52342975e8c06899..cf6d3b697d776995505610b31cc8bd27e5d9d060 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
@@ -294,11 +294,11 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
   }
 
   override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) {
-    android.R.id.home    -> {
+    android.R.id.home           -> {
       drawerToggle.onOptionsItemSelected(item)
     }
 
-    R.id.filter_messages -> {
+    R.id.action_filter_messages -> {
       runInBackground {
         viewModel.buffer { buffer ->
           val filtered = Message_Type.of(database.filtered().get(accountId, buffer) ?: 0)
@@ -345,15 +345,15 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       }
       true
     }
-    R.id.settings        -> {
+    R.id.action_settings        -> {
       startActivity(Intent(applicationContext, AppSettingsActivity::class.java))
       true
     }
-    R.id.disconnect      -> {
+    R.id.action_disconnect      -> {
       disconnect()
       true
     }
-    else                 -> super.onOptionsItemSelected(item)
+    else                        -> super.onOptionsItemSelected(item)
   }
 
   private fun disconnect() {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
index ab3ceea63e448fd933f653552b1961f1d1aad7e5..96884a00436a1fb27f2b18f534ae0f50cdbff106 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
@@ -39,11 +39,11 @@ class Editor(
   private val panelStateCallback: (Boolean) -> Unit
 ) : ActionMenuView.OnMenuItemClickListener, Toolbar.OnMenuItemClickListener {
   override fun onMenuItemClick(item: MenuItem?) = when (item?.itemId) {
-    R.id.input_history -> {
+    R.id.action_input_history -> {
       panelStateCallback(true)
       true
     }
-    else               -> formatHandler.onMenuItemClick(item)
+    else                      -> formatHandler.onMenuItemClick(item)
   }
 
   private val lastWord = BehaviorSubject.createDefault(Pair("", IntRange.EMPTY))
@@ -143,7 +143,7 @@ class Editor(
     formattingMenu.menu.retint(activity)
     formattingMenu.setOnMenuItemClickListener(this)
 
-    activity.menuInflater.inflate(R.menu.input_panel, formattingToolbar.menu)
+    activity.menuInflater.inflate(R.menu.editor, formattingToolbar.menu)
     formattingToolbar.menu.retint(activity)
     formattingToolbar.setOnMenuItemClickListener(this)
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt
index 2fcff65f9a489765c3e7314e4d157f827cb39846..e1656a01e3534fc4d7b97d22da29f67191b0ff53 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt
@@ -41,7 +41,7 @@ class FormatHandler(private val editText: EditText) {
     }
 
   @MenuRes
-  val menu: Int = R.menu.editor
+  val menu: Int = R.menu.formatting
 
   fun toggleBold(range: IntRange, createNew: Boolean = true) {
     if (range.isEmpty())
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt
index 99f2657f894f1bd7ac35fa9b86e546558885ce92..6f26b2b2740ad2fd6b3b1d7b83b581e369f06463 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/SettingsActivity.kt
@@ -8,8 +8,8 @@ import butterknife.ButterKnife
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.util.service.ServiceBoundActivity
 
-abstract class SettingsActivity : ServiceBoundActivity() {
-  protected abstract val fragment: Fragment
+abstract class SettingsActivity(private val fragment: Fragment? = null) : ServiceBoundActivity() {
+  protected open fun fragment(): Fragment? = null
 
   @BindView(R.id.toolbar)
   lateinit var toolbar: Toolbar
@@ -22,8 +22,12 @@ abstract class SettingsActivity : ServiceBoundActivity() {
     setSupportActionBar(toolbar)
     supportActionBar?.setDisplayHomeAsUpEnabled(true)
 
-    val transaction = supportFragmentManager.beginTransaction()
-    transaction.add(R.id.fragment_container, fragment)
-    transaction.commit()
+    val fragment = this.fragment ?: this.fragment()
+
+    if (fragment != null) {
+      val transaction = supportFragmentManager.beginTransaction()
+      transaction.replace(R.id.fragment_container, fragment)
+      transaction.commit()
+    }
   }
 }
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5f6d1701ffae3e14f8ff28baf0ce63e740208682
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsActivity.kt
@@ -0,0 +1,5 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+import de.kuschku.quasseldroid.ui.settings.SettingsActivity
+
+class AboutSettingsActivity : SettingsActivity(AboutSettingsFragment())
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..9de5af5a606b7e630c51156d6b9944214733a972
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsFragment.kt
@@ -0,0 +1,210 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+import android.content.Intent
+import android.net.Uri
+import android.os.Bundle
+import android.support.v4.view.ViewCompat
+import android.support.v7.widget.DividerItemDecoration
+import android.support.v7.widget.LinearLayoutManager
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.TextView
+import butterknife.BindView
+import butterknife.ButterKnife
+import dagger.android.support.DaggerFragment
+import de.kuschku.quasseldroid.BuildConfig
+import de.kuschku.quasseldroid.R
+
+class AboutSettingsFragment : DaggerFragment() {
+
+  @BindView(R.id.version)
+  lateinit var version: TextView
+
+  @BindView(R.id.action_website)
+  lateinit var website: Button
+
+  @BindView(R.id.action_github)
+  lateinit var github: Button
+
+  @BindView(R.id.contributors)
+  lateinit var contributors: RecyclerView
+
+  @BindView(R.id.libraries)
+  lateinit var libraries: RecyclerView
+
+  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                            savedInstanceState: Bundle?): View? {
+    val view = inflater.inflate(R.layout.fragment_about, container, false)
+    ButterKnife.bind(this, view)
+
+    version.text = BuildConfig.VERSION_NAME
+
+    website.setOnClickListener {
+      val intent = Intent(Intent.ACTION_VIEW)
+      intent.data = Uri.parse("https://quasseldroid.info/")
+      context?.startActivity(intent)
+    }
+
+    github.setOnClickListener {
+      val intent = Intent(Intent.ACTION_VIEW)
+      intent.data = Uri.parse("https://github.com/justjanne/quasseldroid-ng")
+      context?.startActivity(intent)
+    }
+
+    val apache2 = License(
+      shortName = "Apache-2.0",
+      fullName = "Apache License",
+      text = R.string.license_apache_2
+    )
+
+    libraries.layoutManager = LinearLayoutManager(context)
+    libraries.adapter = LibraryAdapter(listOf(
+      Library(
+        name = "Android Architecture Components: Lifecycle",
+        version = "1.1.1",
+        license = apache2,
+        url = "https://android.googlesource.com/platform/frameworks/support/+/master/lifecycle"
+      ),
+      Library(
+        name = "Android Architecture Components: Paging",
+        version = "1.0.0-alpha7",
+        license = apache2,
+        url = "https://android.googlesource.com/platform/frameworks/support/+/master/paging"
+      ),
+      Library(
+        name = "Android Architecture Components: Room",
+        version = "1.1.0-beta1",
+        license = apache2,
+        url = "https://android.googlesource.com/platform/frameworks/support/+/master/room"
+      ),
+      Library(
+        name = "Android Sliding Up Panel",
+        version = "3.5.0",
+        license = apache2
+      ),
+      Library(
+        name = "Android Support Library",
+        version = "27.1.0",
+        license = apache2,
+        url = "https://android.googlesource.com/platform/frameworks/support/+/master"
+      ),
+      Library(
+        name = "AutoService",
+        version = "1.0-rc4",
+        license = apache2,
+        url = "https://github.com/google/auto/tree/master/service"
+      ),
+      Library(
+        name = "Butter Knife",
+        version = "8.8.1",
+        license = apache2,
+        url = "http://jakewharton.github.io/butterknife/"
+      ),
+      Library(
+        name = "Dagger 2",
+        version = "2.15",
+        license = apache2,
+        url = "https://google.github.io/dagger/"
+      ),
+      Library(
+        name = "Gson",
+        version = "2.8.2",
+        license = apache2,
+        url = "https://github.com/google/gson"
+      ),
+      Library(
+        name = "JavaPoet",
+        version = "1.10.0",
+        license = apache2,
+        url = "https://github.com/square/javapoet"
+      ),
+      Library(
+        name = "JetBrains Java Annotations",
+        version = "16.0.1",
+        license = apache2,
+        url = "https://github.com/JetBrains/java-annotations"
+      ),
+      Library(
+        name = "Kotlin Standard Library",
+        version = "1.2.31",
+        license = apache2,
+        url = "https://kotlinlang.org/"
+      ),
+      Library(
+        name = "LeakCanary",
+        version = "1.5.4",
+        license = apache2,
+        url = "https://github.com/square/leakcanary"
+      ),
+      Library(
+        name = "Material Dialogs",
+        version = "0.9.6.0",
+        license = License(
+          shortName = "MIT",
+          fullName = "The MIT License (MIT)",
+          text = R.string.license_materialdialogs
+        ),
+        url = "https://github.com/afollestad/material-dialogs"
+      ),
+      Library(
+        name = "MaterialProgressBar",
+        version = "1.4.2",
+        license = apache2,
+        url = "https://github.com/DreaminginCodeZH/MaterialProgressBar"
+      ),
+      Library(
+        name = "RxJava",
+        version = "2.1.9",
+        license = apache2,
+        url = "https://github.com/ReactiveX/RxJava"
+      ),
+      Library(
+        name = "ThreeTen backport project",
+        version = "1.3.6",
+        license = License(
+          shortName = "BSD 3-clause",
+          text = R.string.license_threetenbp
+        ),
+        url = "http://www.threeten.org/threetenbp/"
+      )
+    ))
+    libraries.addItemDecoration(DividerItemDecoration(context, LinearLayoutManager.VERTICAL))
+    ViewCompat.setNestedScrollingEnabled(libraries, false)
+
+    contributors.layoutManager = LinearLayoutManager(context)
+    contributors.adapter = ContributorAdapter(listOf(
+      Contributor(
+        name = "Frederik M. J. Vestre",
+        nickName = "freqmod",
+        description = "Initial qdatastream deserialization attempts"
+      ),
+      Contributor(
+        name = "Martin “Java Sucks” Sandsmark",
+        nickName = "sandsmark",
+        description = "Legacy protocol implementation, (de)serializers, project (de)moralizer"
+      ),
+      Contributor(
+        name = "Magnus Fjell",
+        nickName = "magnuf",
+        description = "Legacy UI"
+      ),
+      Contributor(
+        name = "Ken Børge Viktil",
+        nickName = "Kenji",
+        description = "Legacy UI"
+      ),
+      Contributor(
+        name = "Janne Koschinski",
+        nickName = "justJanne",
+        description = "Rewrite, UI, Annotation Processors, Backend"
+      )
+    ))
+    contributors.addItemDecoration(DividerItemDecoration(context, LinearLayoutManager.VERTICAL))
+    ViewCompat.setNestedScrollingEnabled(contributors, false)
+
+    return view
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsFragmentProvider.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsFragmentProvider.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e12cd9aef80451c27f39cf33e3b631b8bac55e66
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/AboutSettingsFragmentProvider.kt
@@ -0,0 +1,10 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+
+@Module
+abstract class AboutSettingsFragmentProvider {
+  @ContributesAndroidInjector
+  abstract fun bindAboutSettingsFragment(): AboutSettingsFragment
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/Contributor.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/Contributor.kt
new file mode 100644
index 0000000000000000000000000000000000000000..30ba46c4bcc0544582e3c3368075b28029d577a4
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/Contributor.kt
@@ -0,0 +1,7 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+data class Contributor(
+  val name: String,
+  val nickName: String,
+  val description: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/ContributorAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/ContributorAdapter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..91ed4cdb322f83658c41c09f83c67b60ea323f62
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/ContributorAdapter.kt
@@ -0,0 +1,44 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import butterknife.BindView
+import butterknife.ButterKnife
+import de.kuschku.quasseldroid.R
+
+class ContributorAdapter(private val contributors: List<Contributor>) :
+  RecyclerView.Adapter<ContributorAdapter.ContributorViewHolder>() {
+  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ContributorViewHolder(
+    LayoutInflater.from(parent.context).inflate(R.layout.widget_contributor, parent, false)
+  )
+
+  override fun getItemCount() = contributors.size
+
+  override fun onBindViewHolder(holder: ContributorViewHolder, position: Int) {
+    holder.bind(contributors[position])
+  }
+
+  class ContributorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+    @BindView(R.id.name)
+    lateinit var name: TextView
+
+    @BindView(R.id.nickname)
+    lateinit var nickName: TextView
+
+    @BindView(R.id.description)
+    lateinit var description: TextView
+
+    init {
+      ButterKnife.bind(this, itemView)
+    }
+
+    fun bind(item: Contributor) {
+      this.name.text = item.name
+      this.nickName.text = item.nickName
+      this.description.text = item.description
+    }
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/Library.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/Library.kt
new file mode 100644
index 0000000000000000000000000000000000000000..2621adf0921c08907e664c5ab246b6b5ec4eda56
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/Library.kt
@@ -0,0 +1,8 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+data class Library(
+  val name: String,
+  val version: String,
+  val license: License,
+  val url: String? = null
+)
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/LibraryAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/LibraryAdapter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..f2cfb94bff18f2b1d89fb07c30950b03621df109
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/LibraryAdapter.kt
@@ -0,0 +1,58 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+import android.content.Intent
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import butterknife.BindView
+import butterknife.ButterKnife
+import de.kuschku.quasseldroid.R
+import de.kuschku.quasseldroid.ui.settings.license.LicenseSettingsActivity
+
+class LibraryAdapter(private val libraries: List<Library>) :
+  RecyclerView.Adapter<LibraryAdapter.LibraryViewHolder>() {
+  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = LibraryViewHolder(
+    LayoutInflater.from(parent.context).inflate(R.layout.widget_library, parent, false)
+  )
+
+  override fun getItemCount() = libraries.size
+
+  override fun onBindViewHolder(holder: LibraryViewHolder, position: Int) {
+    holder.bind(libraries[position])
+  }
+
+  class LibraryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+    @BindView(R.id.name)
+    lateinit var name: TextView
+
+    @BindView(R.id.version)
+    lateinit var version: TextView
+
+    @BindView(R.id.license)
+    lateinit var license: TextView
+
+    private var item: Library? = null
+
+    init {
+      ButterKnife.bind(this, itemView)
+      itemView.setOnClickListener {
+        this.item?.run {
+          val intent = Intent(itemView.context,
+                              LicenseSettingsActivity::class.java)
+          intent.putExtra("license_name", license.fullName)
+          intent.putExtra("license_text", license.text)
+          itemView.context.startActivity(intent)
+        }
+      }
+    }
+
+    fun bind(item: Library) {
+      this.item = item
+      this.name.text = item.name
+      this.version.text = item.version
+      this.license.text = item.license.shortName
+    }
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/License.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/License.kt
new file mode 100644
index 0000000000000000000000000000000000000000..08e21f53b05644aedcfad004be798ec0c7614cc3
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/about/License.kt
@@ -0,0 +1,9 @@
+package de.kuschku.quasseldroid.ui.settings.about
+
+import android.support.annotation.StringRes
+
+data class License(
+  val shortName: String,
+  val fullName: String = shortName,
+  @StringRes val text: Int
+)
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt
index d1127016e14080268158ef26c78e03567e59bfd8..7dcbb7f02931096d10e1a04ed83077009891b924 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/app/AppSettingsActivity.kt
@@ -1,7 +1,28 @@
 package de.kuschku.quasseldroid.ui.settings.app
 
+import android.content.Intent
+import android.view.Menu
+import android.view.MenuItem
+import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.ui.settings.SettingsActivity
+import de.kuschku.quasseldroid.ui.settings.about.AboutSettingsActivity
+import de.kuschku.quasseldroid.ui.settings.crash.CrashSettingsActivity
 
-class AppSettingsActivity : SettingsActivity() {
-  override val fragment = AppSettingsFragment()
+class AppSettingsActivity : SettingsActivity(AppSettingsFragment()) {
+  override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+    menuInflater.inflate(R.menu.activity_settings, menu)
+    return super.onCreateOptionsMenu(menu)
+  }
+
+  override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) {
+    R.id.action_about   -> {
+      startActivity(Intent(applicationContext, AboutSettingsActivity::class.java))
+      true
+    }
+    R.id.action_crashes -> {
+      startActivity(Intent(applicationContext, CrashSettingsActivity::class.java))
+      true
+    }
+    else                -> super.onOptionsItemSelected(item)
+  }
 }
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5d21e0bc9cd57b6ece0408a3af5970ff04445184
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsActivity.kt
@@ -0,0 +1,5 @@
+package de.kuschku.quasseldroid.ui.settings.crash
+
+import de.kuschku.quasseldroid.ui.settings.SettingsActivity
+
+class CrashSettingsActivity : SettingsActivity(CrashSettingsFragment())
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..fb2f414733cf7f39039ad51f1ef097d3f4442f10
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsFragment.kt
@@ -0,0 +1,169 @@
+package de.kuschku.quasseldroid.ui.settings.crash
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.os.Handler
+import android.os.HandlerThread
+import android.support.v4.view.ViewCompat
+import android.support.v7.recyclerview.extensions.ListAdapter
+import android.support.v7.util.DiffUtil
+import android.support.v7.widget.DividerItemDecoration
+import android.support.v7.widget.LinearLayoutManager
+import android.support.v7.widget.RecyclerView
+import android.view.*
+import android.widget.TextView
+import butterknife.BindView
+import butterknife.ButterKnife
+import com.google.gson.Gson
+import com.google.gson.GsonBuilder
+import de.kuschku.malheur.data.Report
+import de.kuschku.quasseldroid.R
+import de.kuschku.quasseldroid.util.helper.fromJson
+import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
+import org.threeten.bp.Instant
+import org.threeten.bp.ZoneId
+import org.threeten.bp.format.DateTimeFormatter
+import java.io.File
+
+class CrashSettingsFragment : ServiceBoundFragment() {
+  @BindView(R.id.list)
+  lateinit var list: RecyclerView
+
+  private lateinit var handlerThread: HandlerThread
+  private lateinit var handler: Handler
+
+  private var gson: Gson? = null
+  private var crashDir: File? = null
+  private var adapter: CrashAdapter? = null
+
+  override fun onAttach(context: Context?) {
+    super.onAttach(context)
+    handlerThread = HandlerThread("CrashSettings")
+    handlerThread.start()
+    handler = Handler(handlerThread.looper)
+  }
+
+  override fun onDetach() {
+    super.onDetach()
+    handlerThread.quit()
+  }
+
+  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                            savedInstanceState: Bundle?): View? {
+    val view = inflater.inflate(R.layout.fragment_crash, container, false)
+    ButterKnife.bind(this, view)
+
+    setHasOptionsMenu(true)
+
+    this.adapter = CrashAdapter()
+    this.crashDir = File(requireContext().cacheDir, "crashes")
+    this.gson = GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create()
+
+    list.layoutManager = LinearLayoutManager(context)
+    list.adapter = adapter
+    list.addItemDecoration(DividerItemDecoration(context, LinearLayoutManager.VERTICAL))
+    ViewCompat.setNestedScrollingEnabled(list, false)
+
+    handler.post {
+      val crashDir = this.crashDir
+      val gson = this.gson
+
+      if (crashDir != null && gson != null) {
+        val list: List<Pair<Report, String>> = crashDir.listFiles()
+          .map { it.readText() }
+          .map { Pair<Report, String>(gson.fromJson(it), it) }
+          .sortedByDescending { it.first.environment?.crashTime }
+
+        requireActivity().runOnUiThread {
+          this.adapter?.submitList(list)
+        }
+      }
+    }
+    return view
+  }
+
+  class CrashAdapter : ListAdapter<Pair<Report, String>, CrashAdapter.CrashViewHolder>(
+    object : DiffUtil.ItemCallback<Pair<Report, String>>() {
+      override fun areItemsTheSame(oldItem: Pair<Report, String>?, newItem: Pair<Report, String>?) =
+        oldItem?.second == newItem?.second
+
+      override fun areContentsTheSame(oldItem: Pair<Report, String>?,
+                                      newItem: Pair<Report, String>?) =
+        oldItem == newItem
+    }
+  ) {
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = CrashViewHolder(
+      LayoutInflater.from(parent.context).inflate(R.layout.widget_crash, parent, false)
+    )
+
+    override fun onBindViewHolder(holder: CrashViewHolder, position: Int) {
+      val (report, data) = getItem(position)
+      holder.bind(report, data)
+    }
+
+    class CrashViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+      @BindView(R.id.crash_time)
+      lateinit var crashTime: TextView
+
+      @BindView(R.id.version_name)
+      lateinit var versionName: TextView
+
+      @BindView(R.id.error)
+      lateinit var error: TextView
+
+      var item: Report? = null
+      var data: String? = null
+
+      private val dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")
+
+      init {
+        ButterKnife.bind(this, itemView)
+        itemView.setOnClickListener {
+          data?.let {
+            val intent = Intent(Intent.ACTION_SEND)
+            intent.type = "application/json"
+            intent.putExtra(Intent.EXTRA_TEXT, it)
+            itemView.context.startActivity(
+              Intent.createChooser(
+                intent,
+                itemView.context.getString(R.string.label_share_crashreport)
+              )
+            )
+          }
+        }
+      }
+
+      fun bind(item: Report, data: String) {
+        this.item = item
+        this.data = data
+
+        this.crashTime.text = item.environment?.crashTime?.let {
+          dateTimeFormatter.format(Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault()))
+        }
+        this.versionName.text = "${item.application?.versionName}"
+        this.error.text = "${item.crash?.exception?.lines()?.firstOrNull()}"
+      }
+    }
+  }
+
+  override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
+    inflater?.inflate(R.menu.activity_crashes, menu)
+    super.onCreateOptionsMenu(menu, inflater)
+  }
+
+  override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) {
+    R.id.action_delete_all -> {
+      runInBackground {
+        File(requireContext().cacheDir, "crashes").listFiles().forEach {
+          it.delete()
+        }
+        requireActivity().runOnUiThread {
+          this.adapter?.submitList(emptyList())
+        }
+      }
+      true
+    }
+    else                   -> super.onOptionsItemSelected(item)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsFragmentProvider.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsFragmentProvider.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3cb243e5f8695de64838b5828b1b0f7ce7a2f0b9
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/crash/CrashSettingsFragmentProvider.kt
@@ -0,0 +1,10 @@
+package de.kuschku.quasseldroid.ui.settings.crash
+
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+
+@Module
+abstract class CrashSettingsFragmentProvider {
+  @ContributesAndroidInjector
+  abstract fun bindAppSettingsFragment(): CrashSettingsFragment
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..aa455d51104a9688e4edf641f33988f7c09d0026
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsActivity.kt
@@ -0,0 +1,19 @@
+package de.kuschku.quasseldroid.ui.settings.license
+
+import android.os.Bundle
+import de.kuschku.quasseldroid.ui.settings.SettingsActivity
+
+class LicenseSettingsActivity : SettingsActivity() {
+  private lateinit var arguments: Bundle
+
+  override fun onCreate(savedInstanceState: Bundle?) {
+    arguments = intent.extras
+    super.onCreate(savedInstanceState)
+  }
+
+  override fun fragment(): LicenseSettingsFragment {
+    val fragment = LicenseSettingsFragment()
+    fragment.arguments = arguments
+    return fragment
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5e5fe63c9d1fafee264fe645d07f7f0748880dc5
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsFragment.kt
@@ -0,0 +1,35 @@
+package de.kuschku.quasseldroid.ui.settings.license
+
+import android.os.Bundle
+import android.text.Html
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import butterknife.BindView
+import butterknife.ButterKnife
+import dagger.android.support.DaggerFragment
+import de.kuschku.quasseldroid.R
+
+class LicenseSettingsFragment : DaggerFragment() {
+  @BindView(R.id.name)
+  lateinit var name: TextView
+
+  @BindView(R.id.text)
+  lateinit var text: TextView
+
+  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                            savedInstanceState: Bundle?): View? {
+    val view = inflater.inflate(R.layout.fragment_license, container, false)
+    ButterKnife.bind(this, view)
+
+    name.text = arguments?.getString("license_name")
+
+    val textResource = arguments?.getInt("license_text", 0) ?: 0
+    if (textResource != 0) {
+      text.text = Html.fromHtml(getString(textResource))
+    }
+
+    return view
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsFragmentProvider.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsFragmentProvider.kt
new file mode 100644
index 0000000000000000000000000000000000000000..03c5df1fe9dc9b9160166f9128641ceee7ddbde2
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/settings/license/LicenseSettingsFragmentProvider.kt
@@ -0,0 +1,10 @@
+package de.kuschku.quasseldroid.ui.settings.license
+
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+
+@Module
+abstract class LicenseSettingsFragmentProvider {
+  @ContributesAndroidInjector
+  abstract fun bindLicenseSettingsFragment(): LicenseSettingsFragment
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt
index b5677d0163238cdeb71470216ed52e9deaea1d15..2246096288c215d06527eb98d21af2213e5aaaa2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt
@@ -136,7 +136,7 @@ class AccountEditActivity : AppCompatActivity() {
   }
 
   override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) {
-    R.id.delete -> {
+    R.id.action_delete -> {
       AlertDialog.Builder(this)
         .setTitle("Delete?")
         .setMessage("Are you sure?")
@@ -161,7 +161,7 @@ class AccountEditActivity : AppCompatActivity() {
         .show()
       true
     }
-    R.id.save   -> {
+    R.id.action_save   -> {
       if (isValid) {
         val it = account
         if (it != null) {
@@ -179,6 +179,6 @@ class AccountEditActivity : AppCompatActivity() {
       }
       true
     }
-    else        -> super.onOptionsItemSelected(item)
+    else               -> super.onOptionsItemSelected(item)
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c760c8a60e4694b663f56751f63ce197696748a4
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt
@@ -0,0 +1,7 @@
+package de.kuschku.quasseldroid.util.helper
+
+import com.google.gson.Gson
+import java.io.File
+
+inline fun <reified T> Gson.fromJson(file: File) = this.fromJson(file.reader(), T::class.java)
+inline fun <reified T> Gson.fromJson(text: String) = this.fromJson(text, T::class.java)
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw720dp/activity_settings.xml b/app/src/main/res/layout-sw720dp/activity_settings.xml
index 42e160571376ea10847cbee6408e3b96dbdf87e6..9ddcca6501850130e86a239153e01c27ff092353 100644
--- a/app/src/main/res/layout-sw720dp/activity_settings.xml
+++ b/app/src/main/res/layout-sw720dp/activity_settings.xml
@@ -1,8 +1,9 @@
 <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:background="#eeeeee"
+  android:background="?attr/colorBackgroundSecondary"
   android:fitsSystemWindows="true"
   android:orientation="vertical">
 
@@ -22,7 +23,7 @@
         android:layout_width="match_parent"
         android:layout_height="?attr/actionBarSize"
         app:contentInsetStartWithNavigation="0dp"
-        app:popupTheme="@style/Widget.PopupOverlay" />
+        app:popupTheme="?attr/actionBarPopupTheme" />
 
     </android.support.design.widget.AppBarLayout>
 
@@ -32,6 +33,7 @@
       android:layout_gravity="center_horizontal"
       android:layout_marginBottom="32dp"
       android:layout_marginTop="-64dp"
+      android:background="?attr/colorBackgroundCard"
       android:clipToPadding="false"
       app:cardElevation="4dp">
 
@@ -43,7 +45,8 @@
         <FrameLayout
           android:id="@+id/fragment_container"
           android:layout_width="match_parent"
-          android:layout_height="wrap_content" />
+          android:layout_height="wrap_content"
+          tools:layout="@layout/fragment_about" />
       </android.support.v4.widget.NestedScrollView>
     </android.support.v7.widget.CardView>
 
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index a42c0cb50936a04d4c3d4471cfc45f195073e601..8ed200484e6b8198498f08675f047daf9f57519c 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -21,14 +21,20 @@
         android:layout_width="match_parent"
         android:layout_height="?attr/actionBarSize"
         app:contentInsetStartWithNavigation="0dp"
-        app:popupTheme="@style/Widget.PopupOverlay" />
+        app:popupTheme="?attr/actionBarPopupTheme" />
 
     </android.support.design.widget.AppBarLayout>
 
-    <FrameLayout
-      android:id="@+id/fragment_container"
-      android:layout_width="fill_parent"
-      android:layout_height="fill_parent" />
+    <android.support.v4.widget.NestedScrollView
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:scrollbars="vertical">
+
+      <FrameLayout
+        android:id="@+id/fragment_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+    </android.support.v4.widget.NestedScrollView>
   </LinearLayout>
 
 </android.support.v4.widget.DrawerLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f7a76b384fa5b39301d97543b4fc112ae2d2533e
--- /dev/null
+++ b/app/src/main/res/layout/fragment_about.xml
@@ -0,0 +1,71 @@
+<?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="match_parent"
+  android:orientation="vertical">
+
+  <include layout="@layout/layout_about_header" />
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="?listPreferredItemHeight"
+    android:orientation="vertical">
+
+    <TextView
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:gravity="center_vertical"
+      android:minHeight="?android:attr/listPreferredItemHeightSmall"
+      android:paddingBottom="8dp"
+      android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
+      android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
+      android:paddingRight="?android:attr/listPreferredItemPaddingRight"
+      android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+      android:paddingTop="8dp"
+      android:text="@string/label_contributors"
+      android:textColor="?colorAccent"
+      android:textSize="16sp"
+      android:textStyle="bold" />
+
+    <android.support.v7.widget.RecyclerView
+      android:id="@+id/contributors"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      tools:itemCount="5"
+      tools:listitem="@layout/widget_contributor" />
+
+  </LinearLayout>
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="?listPreferredItemHeight"
+    android:orientation="vertical">
+
+    <TextView
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:gravity="center_vertical"
+      android:minHeight="?android:attr/listPreferredItemHeightSmall"
+      android:paddingBottom="8dp"
+      android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
+      android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
+      android:paddingRight="?android:attr/listPreferredItemPaddingRight"
+      android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+      android:paddingTop="8dp"
+      android:text="@string/label_libraries"
+      android:textColor="?colorAccent"
+      android:textSize="16sp"
+      android:textStyle="bold" />
+
+    <android.support.v7.widget.RecyclerView
+      android:id="@+id/libraries"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      tools:listitem="@layout/widget_library" />
+
+  </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_crash.xml b/app/src/main/res/layout/fragment_crash.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d84e8ff1d1a6320ca5470f1df23866b6a0e5792b
--- /dev/null
+++ b/app/src/main/res/layout/fragment_crash.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
+  android:id="@+id/list"
+  android:layout_width="match_parent"
+  android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_license.xml b/app/src/main/res/layout/fragment_license.xml
new file mode 100644
index 0000000000000000000000000000000000000000..26a12b053b5a4e6323460339feeb9ef8adedaa21
--- /dev/null
+++ b/app/src/main/res/layout/fragment_license.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:tools="http://schemas.android.com/tools"
+  android:layout_width="match_parent"
+  android:layout_height="match_parent"
+  android:scrollbars="vertical">
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:padding="16dp">
+
+    <TextView
+      android:id="@+id/name"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_marginBottom="8dp"
+      android:textAppearance="@style/TextAppearance.AppCompat.Title"
+      tools:text="Apache-2.0" />
+
+    <TextView
+      android:id="@+id/text"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      tools:text="@string/license_apache_2" />
+  </LinearLayout>
+</android.support.v4.widget.NestedScrollView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_about_header.xml b/app/src/main/res/layout/layout_about_header.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eb6fcbdecbafb410f4c5f5b3cbecbbd8e1c8b79a
--- /dev/null
+++ b/app/src/main/res/layout/layout_about_header.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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="wrap_content"
+  android:orientation="vertical"
+  android:paddingEnd="?listPreferredItemPaddingRight"
+  android:paddingLeft="?listPreferredItemPaddingLeft"
+  android:paddingRight="?listPreferredItemPaddingRight"
+  android:paddingStart="?listPreferredItemPaddingLeft"
+  android:paddingTop="?listPreferredItemHeight">
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal">
+
+    <android.support.v7.widget.AppCompatImageView
+      android:layout_width="?actionBarSize"
+      android:layout_height="?actionBarSize"
+      android:layout_gravity="center"
+      android:layout_marginEnd="?listPreferredItemPaddingRight"
+      android:layout_marginRight="?listPreferredItemPaddingRight"
+      app:srcCompat="@mipmap/ic_launcher_legacy" />
+
+    <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_gravity="center"
+      android:orientation="vertical">
+
+      <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/app_name"
+        android:textAppearance="@style/TextAppearance.AppCompat.Title" />
+
+      <TextView
+        android:id="@+id/version"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="@style/TextAppearance.AppCompat.Small"
+        tools:text="v0.3.0-310-ge2d1d05" />
+    </LinearLayout>
+  </LinearLayout>
+
+  <android.support.v7.widget.ButtonBarLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginBottom="8dp"
+    android:layout_marginTop="8dp"
+    android:orientation="horizontal">
+
+    <Button
+      android:id="@+id/action_website"
+      style="@style/Widget.Button.Colored"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="@string/label_website" />
+
+    <Button
+      android:id="@+id/action_github"
+      style="@style/Widget.Button"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="@string/label_github" />
+
+  </android.support.v7.widget.ButtonBarLayout>
+
+  <TextView
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginLeft="4dp"
+    android:layout_marginRight="4dp"
+    android:text="@string/app_description_long" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_vertical.xml b/app/src/main/res/layout/preference_vertical.xml
index 0d382f7c3cf092db228727294b060198e1004669..f2bd7b80d016f31ed020460b79ae9505519110cf 100644
--- a/app/src/main/res/layout/preference_vertical.xml
+++ b/app/src/main/res/layout/preference_vertical.xml
@@ -64,7 +64,7 @@
       android:layout_height="wrap_content"
       android:ellipsize="marquee"
       android:singleLine="true"
-      android:textColor="?android:attr/textColorPrimary"
+      android:textColor="?colorTextPrimary"
       android:textSize="16sp"
       tools:text="Font Size" />
 
@@ -74,7 +74,7 @@
       android:layout_height="wrap_content"
       android:maxLines="10"
       android:textAppearance="?android:attr/textAppearanceSmall"
-      android:textColor="?android:attr/textColorSecondary" />
+      android:textColor="?colorTextSecondary" />
 
     <LinearLayout
       android:id="@android:id/widget_frame"
diff --git a/app/src/main/res/layout/widget_contributor.xml b/app/src/main/res/layout/widget_contributor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dd0b1b87aad4bba3cdcb61e7ed1a6474b6f1a194
--- /dev/null
+++ b/app/src/main/res/layout/widget_contributor.xml
@@ -0,0 +1,49 @@
+<?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="wrap_content"
+  android:background="?android:attr/selectableItemBackground"
+  android:focusable="true"
+  android:gravity="center_vertical"
+  android:minHeight="?android:attr/listPreferredItemHeightSmall"
+  android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
+  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
+  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
+  android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+  tools:showIn="@layout/fragment_about">
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingBottom="16dp"
+    android:paddingTop="16dp">
+
+    <TextView
+      android:id="@+id/name"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:ellipsize="marquee"
+      android:singleLine="true"
+      android:textColor="?colorTextPrimary"
+      android:textSize="16sp"
+      tools:text="@sample/contributors.json/data/name" />
+
+    <TextView
+      android:id="@+id/nickname"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:textAppearance="?android:attr/textAppearanceSmall"
+      android:textColor="?colorTextSecondary"
+      tools:text="@sample/contributors.json/data/nickname" />
+
+    <TextView
+      android:id="@+id/description"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:textAppearance="?android:attr/textAppearanceSmall"
+      android:textColor="?colorTextSecondary"
+      tools:text="@sample/contributors.json/data/description" />
+  </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/widget_crash.xml b/app/src/main/res/layout/widget_crash.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3bc5b9d83cfa8105b2723c0d15fd647d8bfe1fed
--- /dev/null
+++ b/app/src/main/res/layout/widget_crash.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="match_parent"
+  android:layout_height="wrap_content"
+  android:background="?android:attr/selectableItemBackground"
+  android:focusable="true"
+  android:gravity="center_vertical"
+  android:minHeight="?android:attr/listPreferredItemHeightSmall"
+  android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
+  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
+  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
+  android:paddingStart="?android:attr/listPreferredItemPaddingLeft">
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingBottom="16dp"
+    android:paddingTop="16dp">
+
+    <TextView
+      android:id="@+id/crash_time"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:ellipsize="marquee"
+      android:singleLine="true"
+      android:textColor="?colorTextPrimary"
+      android:textSize="16sp" />
+
+    <TextView
+      android:id="@+id/version_name"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:textAppearance="?android:attr/textAppearanceSmall"
+      android:textColor="?colorTextPrimary" />
+
+    <TextView
+      android:id="@+id/error"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:textAppearance="?android:attr/textAppearanceSmall"
+      android:textColor="?colorTextSecondary" />
+  </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/widget_library.xml b/app/src/main/res/layout/widget_library.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3aef66275a09eb8e405e609cfea753eda8a9254a
--- /dev/null
+++ b/app/src/main/res/layout/widget_library.xml
@@ -0,0 +1,49 @@
+<?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="wrap_content"
+  android:background="?android:attr/selectableItemBackground"
+  android:focusable="true"
+  android:gravity="center_vertical"
+  android:minHeight="?android:attr/listPreferredItemHeightSmall"
+  android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
+  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
+  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
+  android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+  tools:showIn="@layout/fragment_about">
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingBottom="16dp"
+    android:paddingTop="16dp">
+
+    <TextView
+      android:id="@+id/name"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:ellipsize="marquee"
+      android:singleLine="true"
+      android:textColor="?colorTextPrimary"
+      android:textSize="16sp"
+      tools:text="@sample/libraries.json/data/name" />
+
+    <TextView
+      android:id="@+id/version"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:textAppearance="?android:attr/textAppearanceSmall"
+      android:textColor="?colorTextSecondary"
+      tools:text="@sample/libraries.json/data/version" />
+
+    <TextView
+      android:id="@+id/license"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:textAppearance="?android:attr/textAppearanceSmall"
+      android:textColor="?colorTextSecondary"
+      tools:text="@sample/libraries.json/data/license/shortName" />
+  </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/menu/activity_crashes.xml b/app/src/main/res/menu/activity_crashes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6191d5b8030872a16c9f73e248c1d39904590d9b
--- /dev/null
+++ b/app/src/main/res/menu/activity_crashes.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+  <item
+    android:id="@+id/action_delete_all"
+    android:title="@string/label_delete_all" />
+</menu>
diff --git a/app/src/main/res/menu/activity_main.xml b/app/src/main/res/menu/activity_main.xml
index 5d9cfcb50948f03ed64fec7b3ad47fbb00d6b709..214b44fcddda89fd7f2f49353fbbbb8599b642f3 100644
--- a/app/src/main/res/menu/activity_main.xml
+++ b/app/src/main/res/menu/activity_main.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
   <item
-    android:id="@+id/filter_messages"
+    android:id="@+id/action_filter_messages"
     android:title="@string/label_filter_messages" />
   <item
-    android:id="@+id/settings"
+    android:id="@+id/action_settings"
     android:title="@string/label_settings" />
   <item
-    android:id="@+id/disconnect"
+    android:id="@+id/action_disconnect"
     android:title="@string/label_disconnect" />
 </menu>
diff --git a/app/src/main/res/menu/activity_settings.xml b/app/src/main/res/menu/activity_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..391c758fa03954d5545efdad17b706afa259a955
--- /dev/null
+++ b/app/src/main/res/menu/activity_settings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+  <item
+    android:id="@+id/action_crashes"
+    android:title="@string/label_crashes" />
+  <item
+    android:id="@+id/action_about"
+    android:title="@string/label_about" />
+</menu>
diff --git a/app/src/main/res/menu/editor.xml b/app/src/main/res/menu/editor.xml
index 3add5e54ebb575acc1bd45651ab500e74edca737..a5e677112cd676c7e03dee1d973b15ecfce115ca 100644
--- a/app/src/main/res/menu/editor.xml
+++ b/app/src/main/res/menu/editor.xml
@@ -2,43 +2,8 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto">
   <item
-    android:id="@+id/format_bold"
-    android:icon="@drawable/ic_format_bold"
-    android:title="@string/label_bold"
-    app:showAsAction="always" />
-  <item
-    android:id="@+id/format_italic"
-    android:icon="@drawable/ic_format_italic"
-    android:title="@string/label_italic"
-    app:showAsAction="always" />
-  <item
-    android:id="@+id/format_underline"
-    android:icon="@drawable/ic_format_underline"
-    android:title="@string/label_underline"
-    app:showAsAction="always" />
-  <item
-    android:id="@+id/format_strikethrough"
-    android:icon="@drawable/ic_format_strikethrough"
-    android:title="@string/label_strikethrough"
-    app:showAsAction="always" />
-  <item
-    android:id="@+id/format_monospace"
-    android:icon="@drawable/ic_format_monospace"
-    android:title="@string/label_monospace"
-    app:showAsAction="always" />
-  <item
-    android:id="@+id/format_foreground"
-    android:icon="@drawable/ic_format_foreground"
-    android:title="@string/label_foreground"
-    app:showAsAction="always" />
-  <item
-    android:id="@+id/format_background"
-    android:icon="@drawable/ic_format_background"
-    android:title="@string/label_background"
-    app:showAsAction="always" />
-  <item
-    android:id="@+id/format_clear"
-    android:icon="@drawable/ic_format_clear"
-    android:title="@string/label_clear_formatting"
+    android:id="@+id/action_input_history"
+    android:icon="@drawable/ic_history"
+    android:title="@string/label_input_history"
     app:showAsAction="always" />
 </menu>
\ No newline at end of file
diff --git a/app/src/main/res/menu/formatting.xml b/app/src/main/res/menu/formatting.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3add5e54ebb575acc1bd45651ab500e74edca737
--- /dev/null
+++ b/app/src/main/res/menu/formatting.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:app="http://schemas.android.com/apk/res-auto">
+  <item
+    android:id="@+id/format_bold"
+    android:icon="@drawable/ic_format_bold"
+    android:title="@string/label_bold"
+    app:showAsAction="always" />
+  <item
+    android:id="@+id/format_italic"
+    android:icon="@drawable/ic_format_italic"
+    android:title="@string/label_italic"
+    app:showAsAction="always" />
+  <item
+    android:id="@+id/format_underline"
+    android:icon="@drawable/ic_format_underline"
+    android:title="@string/label_underline"
+    app:showAsAction="always" />
+  <item
+    android:id="@+id/format_strikethrough"
+    android:icon="@drawable/ic_format_strikethrough"
+    android:title="@string/label_strikethrough"
+    app:showAsAction="always" />
+  <item
+    android:id="@+id/format_monospace"
+    android:icon="@drawable/ic_format_monospace"
+    android:title="@string/label_monospace"
+    app:showAsAction="always" />
+  <item
+    android:id="@+id/format_foreground"
+    android:icon="@drawable/ic_format_foreground"
+    android:title="@string/label_foreground"
+    app:showAsAction="always" />
+  <item
+    android:id="@+id/format_background"
+    android:icon="@drawable/ic_format_background"
+    android:title="@string/label_background"
+    app:showAsAction="always" />
+  <item
+    android:id="@+id/format_clear"
+    android:icon="@drawable/ic_format_clear"
+    android:title="@string/label_clear_formatting"
+    app:showAsAction="always" />
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/menu/input_panel.xml b/app/src/main/res/menu/input_panel.xml
deleted file mode 100644
index af252a3562cddc7f70a3c1db87f1091482200961..0000000000000000000000000000000000000000
--- a/app/src/main/res/menu/input_panel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-  xmlns:app="http://schemas.android.com/apk/res-auto">
-  <item
-    android:id="@+id/input_history"
-    android:icon="@drawable/ic_history"
-    android:title="@string/label_input_history"
-    app:showAsAction="always" />
-</menu>
\ No newline at end of file
diff --git a/app/src/main/res/menu/setup_edit_account.xml b/app/src/main/res/menu/setup_edit_account.xml
index 06155b5aad0c1e33d59510bf87a87ee68e60cf71..93611a841d2ce71690f961335c381ec857683057 100644
--- a/app/src/main/res/menu/setup_edit_account.xml
+++ b/app/src/main/res/menu/setup_edit_account.xml
@@ -2,11 +2,11 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto">
   <item
-    android:id="@+id/save"
+    android:id="@+id/action_save"
     android:title="@string/label_save"
     app:showAsAction="ifRoom" />
   <item
-    android:id="@+id/delete"
+    android:id="@+id/action_delete"
     android:icon="@drawable/ic_delete"
     android:title="@string/label_delete"
     app:iconTint="#fff"
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_legacy.png b/app/src/main/res/mipmap-hdpi/ic_launcher_legacy.png
new file mode 100644
index 0000000000000000000000000000000000000000..f38fcf4b41832598338e5c4a1dda5d484be62199
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_legacy.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_legacy.png b/app/src/main/res/mipmap-mdpi/ic_launcher_legacy.png
new file mode 100644
index 0000000000000000000000000000000000000000..bfbb5bec79527a8a12b22b711e3b77a098987359
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_legacy.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_legacy.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_legacy.png
new file mode 100644
index 0000000000000000000000000000000000000000..c467548ffc085b72f2514bea9989ec554dcc80b0
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_legacy.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_legacy.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_legacy.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d6d70aaa5c29bf01c84ba9da62de289341a933e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_legacy.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_legacy.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_legacy.png
new file mode 100644
index 0000000000000000000000000000000000000000..366142e9b7b379249e49bb3184429fad132a89fb
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_legacy.png differ
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 2dce73ad1aaefdc731e5f287f49a40f50cbf6df2..88e9d923e936ea9aac89b5980b60a3aae6dd1d3c 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -5,17 +5,21 @@
   <string name="connection_service_title">Verbindungsdienst</string>
   <string name="connection_service_description">Hält eine Verbindung zum Core, um Benachrichtigungen und die Übertragung von Nachrichten zu ermöglichen</string>
 
+  <string name="label_about">Über</string>
   <string name="label_buffer_name">Chatname</string>
   <string name="label_cancel">Abbrechen</string>
   <string name="label_close">Schließen</string>
   <string name="label_connect">Verbinden</string>
+  <string name="label_crashes">Absturzberichte</string>
   <string name="label_delete">Löschen</string>
+  <string name="label_delete_all">Alle Löschen</string>
   <string name="label_disconnect">Verbindung trennen</string>
   <string name="label_filter_messages">Nachrichten filtern</string>
   <string name="label_hide_perm">Permanent ausblenden</string>
   <string name="label_hide_temp">Temporär ausblenden</string>
   <string name="label_input_history">Eingabeverlauf</string>
   <string name="label_join">Verbinden</string>
+  <string name="label_license">Lizenz</string>
   <string name="label_no">Nein</string>
   <string name="label_open">Öffnen</string>
   <string name="label_part">Verlassen</string>
@@ -24,8 +28,10 @@
   <string name="label_save">Speichern</string>
   <string name="label_select_multiple">Auswählen</string>
   <string name="label_settings">Einstellungen</string>
+  <string name="label_share_crashreport">Absturzbericht Teilen</string>
   <string name="label_show_hidden">Alle anzeigen</string>
   <string name="label_unhide">Nicht mehr ausblenden</string>
+  <string name="label_website">Webseite</string>
   <string name="label_yes">Ja</string>
 
   <string name="notification_channel_connection_title">Verbindung</string>
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 0af8785e49e3aa158306bedd202c2a3ab1e84eac..b31f5bb0b4657a49efc3d2288f9161ec38cffdf8 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -129,6 +129,7 @@
   <attr name="colorForegroundMirc" format="integer" />
 
   <attr name="colorTextPrimary" format="color" />
+  <attr name="colorTextPrimaryInverse" format="color" />
   <attr name="colorTextSecondary" format="color" />
   <attr name="colorDivider" format="color" />
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b6e4470b9187c78d75ed203eac7d1a4f02e75e2c..139ae476d2f90d5cad07a04c8efaa13094a835a2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4,17 +4,21 @@
   <string name="connection_service_title">Connection Service</string>
   <string name="connection_service_description">Keeps a connection to your core to allow for notifications, and to transmit messages.</string>
 
+  <string name="label_about">About</string>
   <string name="label_buffer_name">Buffer Name</string>
   <string name="label_cancel">Cancel</string>
   <string name="label_close">Close</string>
   <string name="label_connect">Connect</string>
+  <string name="label_crashes">Crashes</string>
   <string name="label_delete">Delete</string>
+  <string name="label_delete_all">Delete All</string>
   <string name="label_disconnect">Disconnect</string>
   <string name="label_filter_messages">Filter Messages</string>
   <string name="label_hide_perm">Hide Permanently</string>
   <string name="label_hide_temp">Hide Temporarily</string>
   <string name="label_input_history">Input History</string>
   <string name="label_join">Join</string>
+  <string name="label_license">License</string>
   <string name="label_no">No</string>
   <string name="label_open">Open</string>
   <string name="label_part">Part</string>
@@ -23,8 +27,10 @@
   <string name="label_save">Save</string>
   <string name="label_select_multiple">Select</string>
   <string name="label_settings">Settings</string>
+  <string name="label_share_crashreport">Share Crashreport</string>
   <string name="label_show_hidden">Show Hidden</string>
   <string name="label_unhide">Make Visible</string>
+  <string name="label_website">Website</string>
   <string name="label_yes">Yes</string>
 
   <string name="notification_channel_background" translatable="false">background</string>
@@ -33,4 +39,8 @@
   <string name="notification_channel_highlight_title">Highlight</string>
 
   <string name="buffer_delete_confirmation">Do you want to delete this buffer permanently?</string>
+  <string name="app_description_long">Quassel is a distributed, decentralized IRC client, written using C++ and Qt. QuasselDroid is a pure-java client for the Quassel core, allowing you to connect to your Quassel core using your Android (TM) phone.</string>
+  <string name="label_github">GitHub</string>
+  <string name="label_libraries">Libraries</string>
+  <string name="label_contributors">Contributors</string>
 </resources>
diff --git a/app/src/main/res/values/strings_licenses.xml b/app/src/main/res/values/strings_licenses.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d688ab36fd7969afb90e64b415a3927e1db38348
--- /dev/null
+++ b/app/src/main/res/values/strings_licenses.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools">
+  <string name="license_apache_2"><![CDATA[
+    <p>Version 2.0, January 2004<br /><br /><a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a></p>
+    <p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
+    <p><strong>1. Definitions</strong>.</p>
+    <p>"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.</p>
+    <p>"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.</p>
+    <p>"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.</p>
+    <p>"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.</p>
+    <p>"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.</p>
+    <p>"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.</p>
+    <p>"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).</p>
+    <p>"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.</p>
+    <p>"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."</p>
+    <p>"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.</p>
+    <p><strong>2. Grant of Copyright License</strong>. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.</p>
+    <p><strong>3. Grant of Patent License</strong>. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.</p>
+    <p><strong>4. Redistribution</strong>. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:</p>
+    <p>a. You must give any other recipients of the Work or Derivative Works a copy of this License; and</p>
+    <p>b. You must cause any modified files to carry prominent notices stating that You changed the files; and</p>
+    <p>c. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and</p>
+    <p>d. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.<br /><br /> You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.</p>
+    <p><strong>5. Submission of Contributions</strong>. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.</p>
+    <p><strong>6. Trademarks</strong>. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.</p>
+    <p><strong>7. Disclaimer of Warranty</strong>. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.</p>
+    <p><strong>8. Limitation of Liability</strong>. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.</p>
+    <p><strong>9. Accepting Warranty or Additional Liability</strong>. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.</p>
+  ]]></string>
+  <string name="license_materialdialogs" tools:ignore="TypographyOther"><![CDATA[
+    <p>Copyright (c) 2014-2016 Aidan Michael Follestad</p>
+    <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
+    <p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
+    <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
+  ]]></string>
+  <string name="license_threetenbp" tools:ignore="TypographyOther"><![CDATA[
+    <p>Copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos</p>
+    <p>All rights reserved.</p>
+    <p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p>
+    <ol>
+      <li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li>
+      <li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li>
+      <li>Neither the name of JSR-310 nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission..</li>
+    </ol>
+    <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+    ]]></string>
+
+</resources>
diff --git a/app/src/main/res/values/styles_widgets.xml b/app/src/main/res/values/styles_widgets.xml
index e9c9428f522229c37801d7d2697510eb5fc68a7f..6fbeebcf0032e13d09f5ae5f1d47ad4d85667f74 100644
--- a/app/src/main/res/values/styles_widgets.xml
+++ b/app/src/main/res/values/styles_widgets.xml
@@ -4,9 +4,12 @@
 
   <style name="Widget.Button" parent="Widget.AppCompat.Button">
     <item name="backgroundTint">?attr/colorBackgroundCard</item>
+    <item name="android:textColor">?attr/colorTextPrimary</item>
   </style>
 
-  <style name="Widget.Button.Colored" parent="Widget.AppCompat.Button.Colored" />
+  <style name="Widget.Button.Colored" parent="Widget.AppCompat.Button.Colored">
+    <item name="android:textColor">?attr/colorTextPrimaryInverse</item>
+  </style>
 
   <style name="Widget.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
     <item name="drawerArrowStyle">@style/Widget.DrawerArrowToggle</item>
diff --git a/app/src/main/res/values/themes_base.xml b/app/src/main/res/values/themes_base.xml
index 5f41e0ace8edddde35e988dfc7b79678d7001e17..a05ed7a5447e1c991b788e8ceb4e72d82462ee2b 100644
--- a/app/src/main/res/values/themes_base.xml
+++ b/app/src/main/res/values/themes_base.xml
@@ -51,6 +51,7 @@
     <item name="windowActionModeOverlay">true</item>
 
     <item name="colorTextPrimary">#dedede</item>
+    <item name="colorTextPrimaryInverse">?colorBackground</item>
     <item name="colorTextSecondary">#8a8a8a</item>
     <item name="colorDivider">#1FFFFFFF</item>
     <item name="android:textColorHint">?colorTextSecondary</item>
@@ -183,6 +184,7 @@
     <item name="windowActionModeOverlay">true</item>
 
     <item name="colorTextPrimary">#212121</item>
+    <item name="colorTextPrimaryInverse">?colorBackground</item>
     <item name="colorTextSecondary">#757575</item>
     <item name="colorDivider">#1F000000</item>
     <item name="android:textColorHint">?colorTextSecondary</item>
diff --git a/app/src/main/res/values/themes_gruvbox.xml b/app/src/main/res/values/themes_gruvbox.xml
index f42712844eab650bd4ee09d5ffbc54bdcabc932a..d9fc8ffb3b63a18084d0e19a6da51d21795d0af8 100644
--- a/app/src/main/res/values/themes_gruvbox.xml
+++ b/app/src/main/res/values/themes_gruvbox.xml
@@ -33,6 +33,7 @@
     <item name="colorForegroundError">#9d0006</item>
 
     <item name="colorTextPrimary">#3c3836</item>
+    <item name="colorTextPrimaryInverse">#fbf1c7</item>
     <item name="colorTextSecondary">#665c54</item>
     <item name="colorDivider">#2d928374</item>
 
@@ -87,6 +88,7 @@
     <item name="colorForegroundError">#cc241d</item>
 
     <item name="colorTextPrimary">#dbdbb2</item>
+    <item name="colorTextPrimaryInverse">#282828</item>
     <item name="colorTextSecondary">#bdae93</item>
     <item name="colorDivider">#33928374</item>
 
diff --git a/app/src/main/res/values/themes_solarized.xml b/app/src/main/res/values/themes_solarized.xml
index 69aed4a2351bcfbcdd9a5ae6369d80405ce7ebf2..2a10005900774983d27c3c41c74b1c2dd3a18d06 100644
--- a/app/src/main/res/values/themes_solarized.xml
+++ b/app/src/main/res/values/themes_solarized.xml
@@ -33,6 +33,7 @@
     <item name="colorForegroundError">#B00000</item>
 
     <item name="colorTextPrimary">#586e75</item>
+    <item name="colorTextPrimaryInverse">#FDF6E3</item>
     <item name="colorTextSecondary">#657b83</item>
     <item name="colorDivider">#19586e75</item>
 
@@ -87,6 +88,7 @@
     <item name="colorForegroundError">#B00000</item>
 
     <item name="colorTextPrimary">#93a1a1</item>
+    <item name="colorTextPrimaryInverse">#002B36</item>
     <item name="colorTextSecondary">#839496</item>
     <item name="colorDivider">#1993a1a1</item>
 
diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts
index 53138ef030003af6f550d44f322607d07d42c4f7..6216e76980fcf6f95da83ad37c1a19dcf943179f 100644
--- a/lib/build.gradle.kts
+++ b/lib/build.gradle.kts
@@ -17,7 +17,7 @@ dependencies {
   }
 
   implementation("org.threeten", "threetenbp", "1.3.6")
-  implementation("io.reactivex.rxjava2:rxjava:2.1.9")
+  implementation("io.reactivex.rxjava2", "rxjava", "2.1.9")
 
   implementation(project(":invokerannotations"))
   kapt(project(":invokergenerator"))
diff --git a/persistence/build.gradle.kts b/persistence/build.gradle.kts
index 8613c62d8ece9fd0b338b739d6544be9a9aca1cd..9674a5c209c7ce7f4c4b518ae9d3da96ff3f3098 100644
--- a/persistence/build.gradle.kts
+++ b/persistence/build.gradle.kts
@@ -45,7 +45,7 @@ dependencies {
 
   // Utility
   implementation("org.threeten", "threetenbp", "1.3.6", classifier = "no-tzdb")
-  implementation("org.jetbrains", "annotations", "15.0")
+  implementation("org.jetbrains", "annotations", "16.0.1")
 
   // Quassel
   implementation(project(":lib")) {
diff --git a/viewmodel/build.gradle.kts b/viewmodel/build.gradle.kts
index 1b1afedb6578471f16ba94606c6b7f3cf806e743..28548b70aa1e2433a102cac5d4e339714f67fbc1 100644
--- a/viewmodel/build.gradle.kts
+++ b/viewmodel/build.gradle.kts
@@ -34,7 +34,7 @@ dependencies {
   // Utility
   implementation("io.reactivex.rxjava2", "rxjava", "2.1.9")
   implementation("org.threeten", "threetenbp", "1.3.6", classifier = "no-tzdb")
-  implementation("org.jetbrains", "annotations", "15.0")
+  implementation("org.jetbrains", "annotations", "16.0.1")
 
   // Quassel
   implementation(project(":lib")) {