diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt
index 37ef97d510a1a419c41114414cf55b991c25a845..ea801c0a0ae78e981d273a572b10d35290a9af34 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt
@@ -33,7 +33,7 @@ class ClientSettingsActivity : SettingsActivity(ClientSettingsFragment()),
     when (pref) {
       is ListPreference -> {
         val f = ListPreferenceDialogFragmentCompat.newInstance(pref.getKey())
-        f.setTargetFragment(fragment, 0)
+        f.setTargetFragment(actualFragment, 0)
         f.show(supportFragmentManager, DIALOG_FRAGMENT_TAG)
         true
       }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt
index 83ff2456d95e8b6ca0fd012d9b9b5661c9736f74..9c3d317cdbe6536ed98f815b4e2ad7512f720222 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt
@@ -35,6 +35,7 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu
   protected open fun fragment(): Fragment? = null
 
   private var changeable: Changeable? = null
+  protected var actualFragment: Fragment? = null
 
   @BindView(R.id.toolbar)
   lateinit var toolbar: Toolbar
@@ -48,19 +49,30 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu
     setSupportActionBar(toolbar)
     supportActionBar?.setDisplayHomeAsUpEnabled(true)
 
-    val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
-                   ?: this.fragment
-                   ?: this.fragment()
-    if (fragment != null) {
-      val transaction = supportFragmentManager.beginTransaction()
-      fragment.arguments = arguments
-      transaction.replace(R.id.fragment_container, fragment)
-      transaction.commit()
+    val existingFragment = savedInstanceState?.let {
+      supportFragmentManager.getFragment(it, "settings_content")
+    }
+
+    actualFragment = existingFragment ?: this.fragment ?: this.fragment()
+    if (existingFragment == null) {
+      actualFragment?.let {
+        val transaction = supportFragmentManager.beginTransaction()
+        it.arguments = arguments
+        transaction.replace(R.id.fragment_container, it)
+        transaction.commit()
+      }
     }
 
     this.changeable = fragment as? Changeable
   }
 
+  override fun onSaveInstanceState(outState: Bundle) {
+    super.onSaveInstanceState(outState)
+    actualFragment?.let {
+      supportFragmentManager.putFragment(outState, "settings_content", it)
+    }
+  }
+
   private fun shouldNavigateAway(callback: () -> Unit) {
     val changeable = this.changeable
     if (changeable?.hasChanged() == true) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt
index 8ed888d19a151ae4f53f686f1acdc1d5667092b7..8827671cf39a9a26cc5da3659f39277fef8c6e2e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt
@@ -34,6 +34,7 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them
   protected open fun fragment(): Fragment? = null
 
   private var changeable: Changeable? = null
+  protected var actualFragment: Fragment? = null
 
   @BindView(R.id.toolbar)
   lateinit var toolbar: Toolbar
@@ -47,19 +48,30 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them
     setSupportActionBar(toolbar)
     supportActionBar?.setDisplayHomeAsUpEnabled(true)
 
-    val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
-                   ?: this.fragment
-                   ?: this.fragment()
-    if (fragment != null) {
-      val transaction = supportFragmentManager.beginTransaction()
-      fragment.arguments = arguments
-      transaction.replace(R.id.fragment_container, fragment)
-      transaction.commit()
+    val existingFragment = savedInstanceState?.let {
+      supportFragmentManager.getFragment(it, "settings_content")
+    }
+
+    actualFragment = existingFragment ?: this.fragment ?: this.fragment()
+    if (existingFragment == null) {
+      actualFragment?.let {
+        val transaction = supportFragmentManager.beginTransaction()
+        it.arguments = arguments
+        transaction.replace(R.id.fragment_container, it)
+        transaction.commit()
+      }
     }
 
     this.changeable = fragment as? Changeable
   }
 
+  override fun onSaveInstanceState(outState: Bundle) {
+    super.onSaveInstanceState(outState)
+    actualFragment?.let {
+      supportFragmentManager.putFragment(outState, "settings_content", it)
+    }
+  }
+
   private fun shouldNavigateAway(callback: () -> Unit) {
     val changeable = this.changeable
     if (changeable?.hasChanged() == true) {