diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 8bff055b2372691929cdcd57f268883e791636e7..18eaada0766017151f5f4f2e20e72ba8a4343abe 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -43,19 +43,22 @@ android {
 
     signingConfig = signingConfigs.getByName("default")
 
+    resConfigs("en")
+
+    vectorDrawables.useSupportLibrary = true
+
     setProperty("archivesBaseName", "QuasselDroidNG-$versionName")
 
     javaCompileOptions {
       annotationProcessorOptions {
-        arguments = mapOf(
-          "room.schemaLocation" to "$projectDir/schemas"
-        )
+        arguments = mapOf("room.schemaLocation" to "$projectDir/schemas")
       }
     }
 
-    vectorDrawables.useSupportLibrary = true
-
-    resConfigs("en")
+    // Disable test runner analytics
+    testInstrumentationRunnerArguments = mapOf(
+      "disableAnalytics" to "true"
+    )
   }
 
   buildTypes {
@@ -86,9 +89,9 @@ android {
 }
 
 val appCompatVersion = "26.1.0"
-val appArchVersion = "1.0.0-alpha9-1"
+val appArchVersion = "1.0.0-rc1"
 dependencies {
-  implementation(kotlin("stdlib"))
+  implementation(kotlin("stdlib", "1.1.51"))
 
   implementation(appCompat("design"))
   implementation(appCompat("customtabs"))
@@ -100,7 +103,6 @@ dependencies {
 
   implementation("io.reactivex.rxjava2:rxjava:2.1.3")
 
-  implementation(appArch("lifecycle", "runtime", version = "1.0.0"))
   implementation(appArch("lifecycle", "extensions"))
   implementation(appArch("lifecycle", "reactivestreams"))
   kapt(appArch("lifecycle", "compiler"))
@@ -108,23 +110,25 @@ dependencies {
   implementation(appArch("persistence.room", "runtime"))
   kapt(appArch("persistence.room", "compiler"))
 
-  implementation(appArch("paging", "runtime", version = "1.0.0-alpha1")) {
+  implementation(appArch("paging", "runtime", version = "1.0.0-alpha3")) {
     exclude(group = "junit", module = "junit")
   }
 
   implementation("org.threeten:threetenbp:1.3.6")
 
-  implementation("com.jakewharton:butterknife:8.7.0")
-  kapt("com.jakewharton:butterknife-compiler:8.7.0")
+  implementation("com.jakewharton:butterknife:8.8.1")
+  kapt("com.jakewharton:butterknife-compiler:8.8.1")
 
   implementation(project(":lib"))
   implementation(project(":malheur"))
 
-  testImplementation("android.arch.persistence.room:testing:1.0.0-alpha9")
+  testImplementation(appArch("persistence.room", "testing"))
   testImplementation("junit:junit:4.12")
 
-  androidTestImplementation("com.android.support.test:runner:0.5")
-  androidTestImplementation("com.android.support.test:rules:0.5")
+  androidTestImplementation("com.android.support.test:runner:1.0.1")
+  androidTestImplementation("com.android.support.test:rules:1.0.1")
+
+  androidTestImplementation("com.android.support.test.espresso:espresso-core:3.0.1")
 }
 
 tasks.withType(KotlinCompile::class.java) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt
index 5e06a2866bb7acb02e85b97df8f48a4496eafe07..b06899e1aa18be27c87eebc5db1f532bff9cd9be 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SlideFragment.kt
@@ -22,14 +22,14 @@ abstract class SlideFragment : Fragment() {
   protected abstract fun isValid(): Boolean
 
   val valid = object : MutableLiveData<Boolean>() {
-    override fun observe(owner: LifecycleOwner?, observer: Observer<Boolean>?) {
+    override fun observe(owner: LifecycleOwner, observer: Observer<Boolean>) {
       super.observe(owner, observer)
-      observer?.onChanged(value)
+      observer.onChanged(value)
     }
 
-    override fun observeForever(observer: Observer<Boolean>?) {
+    override fun observeForever(observer: Observer<Boolean>) {
       super.observeForever(observer)
-      observer?.onChanged(value)
+      observer.onChanged(value)
     }
   }
 
@@ -44,15 +44,12 @@ abstract class SlideFragment : Fragment() {
     viewGroup.addView(onCreateContent(inflater, viewGroup, savedInstanceState))
 
     view.findViewById<TextView>(R.id.title)?.setText(title)
-    view.findViewById<CollapsingToolbarLayout>(R.id.collapsingToolbar)?.title = resources.getString(
-      title)
+    view.findViewById<CollapsingToolbarLayout>(R.id.collapsingToolbar)?.title =
+      resources.getString(title)
     view.findViewById<TextView>(R.id.description).setText(description)
 
-    val data = initData
-    if (data != null)
-      setData(data)
-    if (savedInstanceState != null)
-      setData(savedInstanceState)
+    initData?.let(this::setData)
+    savedInstanceState?.let(this::setData)
     updateValidity()
 
     return view
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt
index 8b0f9998205dfe8c2285b74dcb1ed6b44ab1002e..78f083ab279e9fd7e2c7c19a83b426a454d95334 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt
@@ -18,12 +18,10 @@ inline fun <X, Y> LiveData<X?>.switchMap(
       if (mSource === newLiveData) {
         return
       }
-      if (mSource != null) {
-        result.removeSource(mSource)
-      }
+      mSource?.let(result::removeSource)
       mSource = newLiveData
-      if (mSource != null) {
-        result.addSource(mSource) { y -> result.value = y }
+      if (newLiveData != null) {
+        result.addSource(newLiveData) { y -> result.value = y }
       } else {
         result.value = null
       }
@@ -46,12 +44,10 @@ inline fun <X, Y> LiveData<X?>.switchMapRx(
       if (mSource === newLiveData) {
         return
       }
-      if (mSource != null) {
-        result.removeSource(mSource)
-      }
+      mSource?.let(result::removeSource)
       mSource = newLiveData
-      if (mSource != null) {
-        result.addSource(mSource) { y -> result.value = y }
+      if (newLiveData != null) {
+        result.addSource(newLiveData) { y -> result.value = y }
       } else {
         result.value = null
       }
diff --git a/build.gradle.kts b/build.gradle.kts
index a62c67371a84496d1370a5f7790df81e51440cca..d954400396d4ba1901186dc9258e6917213ee3bb 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -4,7 +4,7 @@ buildscript {
     jcenter()
   }
   dependencies {
-    classpath("com.android.tools.build:gradle:3.0.0-rc1")
+    classpath("com.android.tools.build:gradle:3.0.0-rc2")
     classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.51")
     classpath("org.jetbrains.kotlin:kotlin-android-extensions:1.1.51")
   }
diff --git a/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt b/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt
index d37c19ae5bc6e9170f4650af1c3e913dff1cd8b3..1612ef25c1861e0cfbd98578c8b7feda06e11c46 100644
--- a/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt
@@ -1,6 +1,9 @@
 package de.kuschku.libquassel
 
-import de.kuschku.libquassel.protocol.*
+import de.kuschku.libquassel.protocol.ClientData
+import de.kuschku.libquassel.protocol.Protocol
+import de.kuschku.libquassel.protocol.Protocol_Feature
+import de.kuschku.libquassel.protocol.Quassel_Feature
 import de.kuschku.libquassel.quassel.ProtocolFeature
 import de.kuschku.libquassel.quassel.QuasselFeature
 import de.kuschku.libquassel.session.Session
@@ -28,7 +31,7 @@ class ConnectionUnitTest {
     runTest("localhost", 4242, "user", "pass")
   }
 
-  private fun runTest(host: String, port: UShort, user: String, pass: String) {
+  private fun runTest(host: String, port: Int, user: String, pass: String) {
     val session = Session(ClientData(
       identifier = "libquassel test",
       buildDate = Instant.EPOCH,