diff --git a/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt b/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt
index a729a2fa8295b4186046e7ee1bb85862fe176af6..183d0aa31dc91867029a4d922f024ac406662965 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt
@@ -85,7 +85,8 @@ class Quasseldroid : DaggerApplication() {
               user = it.user,
               pass = it.pass,
               name = it.name,
-              lastUsed = 0
+              lastUsed = 0,
+              acceptedMissingFeatures = false
             )
           }.toTypedArray())
           Thread(Runnable {
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 61887c1157e06645e4f7ab895815fd853eceb59e..dd2581c387c26ad8f3cdb251eea6fc6dfa41e6e4 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
@@ -124,7 +124,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
 
   private var chatlineFragment: ChatlineFragment? = null
 
-  private var isInitialConnect = true
+  private var connectedAccount = -1L
 
   override fun onNewIntent(intent: Intent?) {
     super.onNewIntent(intent)
@@ -458,12 +458,12 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       .firstElement()
       .toLiveData()
       .observe(this, Observer {
-        if (isInitialConnect) {
+        if (connectedAccount != accountId) {
           if (resources.getBoolean(R.bool.buffer_drawer_exists) &&
               viewModel.buffer.value == Int.MAX_VALUE) {
             drawerLayout.openDrawer(Gravity.START)
           }
-          isInitialConnect = false
+          connectedAccount = accountId
           viewModel.session.value?.orNull()?.let {
             if (it.identities.isEmpty()) {
               UserSetupActivity.launch(this)
@@ -486,33 +486,46 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
               ExtendedFeature.BacklogFilterType
             ) - it.features.core.enabledFeatures
             if (missingFeatures.isNotEmpty()) {
-              MissingFeaturesDialog.Builder(this)
-                .missingFeatures(missingFeatures.mapNotNull { feature ->
-                  when (feature) {
-                    ExtendedFeature.SynchronizedMarkerLine -> R.string.label_feature_synchronizedmarkerline
-                    ExtendedFeature.SaslAuthentication     -> R.string.label_feature_saslauthentication
-                    ExtendedFeature.SaslExternal           -> R.string.label_feature_saslexternal
-                    ExtendedFeature.HideInactiveNetworks   -> R.string.label_feature_hideinactivenetworks
-                    ExtendedFeature.PasswordChange         -> R.string.label_feature_passwordchange
-                    ExtendedFeature.CapNegotiation         -> R.string.label_feature_capnegotiation
-                    ExtendedFeature.VerifyServerSSL        -> R.string.label_feature_verifyserverssl
-                    ExtendedFeature.CustomRateLimits       -> R.string.label_feature_customratelimits
-                    ExtendedFeature.AwayFormatTimestamp    -> R.string.label_feature_awayformattimestamp
-                    ExtendedFeature.BufferActivitySync     -> R.string.label_feature_bufferactivitysync
-                    ExtendedFeature.CoreSideHighlights     -> R.string.label_feature_coresidehighlights
-                    ExtendedFeature.SenderPrefixes         -> R.string.label_feature_senderprefixes
-                    ExtendedFeature.RemoteDisconnect       -> R.string.label_feature_remotedisconnect
-                    ExtendedFeature.RichMessages           -> R.string.label_feature_richmessages
-                    ExtendedFeature.BacklogFilterType      -> R.string.label_feature_backlogfiltertype
-                    else                                   -> null
-                  }?.let {
-                    MissingFeature(
-                      feature = feature,
-                      description = it
-                    )
+              runInBackground {
+                val accounts = accountDatabase.accounts()
+                val account = accounts.findById(accountId)
+                if (account?.acceptedMissingFeatures == false) {
+                  val dialog = MissingFeaturesDialog.Builder(this)
+                    .missingFeatures(missingFeatures.mapNotNull { feature ->
+                      when (feature) {
+                        ExtendedFeature.SynchronizedMarkerLine -> R.string.label_feature_synchronizedmarkerline
+                        ExtendedFeature.SaslAuthentication     -> R.string.label_feature_saslauthentication
+                        ExtendedFeature.SaslExternal           -> R.string.label_feature_saslexternal
+                        ExtendedFeature.HideInactiveNetworks   -> R.string.label_feature_hideinactivenetworks
+                        ExtendedFeature.PasswordChange         -> R.string.label_feature_passwordchange
+                        ExtendedFeature.CapNegotiation         -> R.string.label_feature_capnegotiation
+                        ExtendedFeature.VerifyServerSSL        -> R.string.label_feature_verifyserverssl
+                        ExtendedFeature.CustomRateLimits       -> R.string.label_feature_customratelimits
+                        ExtendedFeature.AwayFormatTimestamp    -> R.string.label_feature_awayformattimestamp
+                        ExtendedFeature.BufferActivitySync     -> R.string.label_feature_bufferactivitysync
+                        ExtendedFeature.CoreSideHighlights     -> R.string.label_feature_coresidehighlights
+                        ExtendedFeature.SenderPrefixes         -> R.string.label_feature_senderprefixes
+                        ExtendedFeature.RemoteDisconnect       -> R.string.label_feature_remotedisconnect
+                        ExtendedFeature.RichMessages           -> R.string.label_feature_richmessages
+                        ExtendedFeature.BacklogFilterType      -> R.string.label_feature_backlogfiltertype
+                        else                                   -> null
+                      }?.let {
+                        MissingFeature(
+                          feature = feature,
+                          description = it
+                        )
+                      }
+                    })
+                    .positiveListener(MaterialDialog.SingleButtonCallback { _, _ ->
+                      runInBackground {
+                        accounts.save(account.copy(acceptedMissingFeatures = true))
+                      }
+                    })
+                  runOnUiThread {
+                    dialog.show()
                   }
-                })
-                .show()
+                }
+              }
             }
           }
         }
@@ -606,18 +619,18 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
     super.onSaveInstanceState(outState)
     outState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1)
     outState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1)
-    outState?.putBoolean("HAS_BEEN_CONNECTED", isInitialConnect)
+    outState?.putLong("CONNECTED_ACCOUNT", connectedAccount)
   }
 
   override fun onSaveInstanceState(outState: Bundle?, outPersistentState: PersistableBundle?) {
     super.onSaveInstanceState(outState, outPersistentState)
     outState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1)
     outState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1)
-    outState?.putBoolean("HAS_BEEN_CONNECTED", isInitialConnect)
+    outState?.putLong("CONNECTED_ACCOUNT", connectedAccount)
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
       outPersistentState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1)
       outPersistentState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1)
-      outPersistentState?.putBoolean("HAS_BEEN_CONNECTED", isInitialConnect)
+      outPersistentState?.putLong("CONNECTED_ACCOUNT", connectedAccount)
     }
   }
 
@@ -626,7 +639,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
     viewModel.buffer.onNext(savedInstanceState?.getInt("OPEN_BUFFER", -1) ?: -1)
     viewModel.bufferViewConfigId.onNext(savedInstanceState?.getInt("OPEN_BUFFERVIEWCONFIG", -1)
                                         ?: -1)
-    isInitialConnect = savedInstanceState?.getBoolean("HAS_BEEN_CONNECTED", true) ?: true
+    connectedAccount = savedInstanceState?.getLong("CONNECTED_ACCOUNT", -1L) ?: -1L
   }
 
   @TargetApi(Build.VERSION_CODES.LOLLIPOP)
@@ -644,10 +657,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
         savedInstanceState?.getInt("OPEN_BUFFERVIEWCONFIG", fallbackBufferViewConfigId)
         ?: fallbackBufferViewConfigId
       )
-      val fallbackIsInitialConnect = persistentState?.getBoolean("HAS_BEEN_CONNECTED", true) ?: true
-      isInitialConnect = savedInstanceState?.getBoolean(
-        "HAS_BEEN_CONNECTED", fallbackIsInitialConnect
-      ) ?: fallbackIsInitialConnect
+      val fallbackConnectedAccount = persistentState?.getLong("CONNECTED_ACCOUNT", -1L) ?: -1L
+      connectedAccount = savedInstanceState?.getLong(
+        "CONNECTED_ACCOUNT", fallbackConnectedAccount
+      ) ?: fallbackConnectedAccount
     }
   }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt
index cce8865b3a14dec82e8deb044d9d5d282e926283..25156ece6aa2d9c4bb72b17a8265a1e599961c87 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt
@@ -43,7 +43,8 @@ class AccountSetupActivity : SetupActivity() {
       user = data.getString("user"),
       pass = data.getString("pass"),
       name = data.getString("name"),
-      lastUsed = Instant.now().epochSecond
+      lastUsed = Instant.now().epochSecond,
+      acceptedMissingFeatures = false
     )
     handler.post {
       database.accounts().create(account)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/missingfeatures/MissingFeaturesDialog.kt b/app/src/main/java/de/kuschku/quasseldroid/util/missingfeatures/MissingFeaturesDialog.kt
index 174c445e0f06db36d549b03315072d879d6bf35d..58b3cf2df946d664bf82c201544457c5c717f761 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/missingfeatures/MissingFeaturesDialog.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/missingfeatures/MissingFeaturesDialog.kt
@@ -45,6 +45,9 @@ class MissingFeaturesDialog : DialogFragment() {
       .customView(R.layout.dialog_missing_features, true)
       .title(R.string.label_missing_features)
       .positiveText(R.string.label_accept)
+      .also { dialog ->
+        builder?.positiveListener?.let(dialog::onPositive)
+      }
       .build()
     ButterKnife.bind(this, dialog.customView!!)
     list.layoutManager = LinearLayoutManager(list.context)
@@ -57,7 +60,7 @@ class MissingFeaturesDialog : DialogFragment() {
 
   override fun onDismiss(dialog: DialogInterface?) {
     super.onDismiss(dialog)
-    builder?.dismissListener?.onDismiss(this)
+    builder?.dismissListener?.onDismiss(this.dialog)
   }
 
   fun show(context: FragmentActivity) = show(context.supportFragmentManager)
@@ -73,15 +76,11 @@ class MissingFeaturesDialog : DialogFragment() {
     }
   }
 
-  @FunctionalInterface
-  interface OnDismissListener {
-    fun onDismiss(dialog: MissingFeaturesDialog)
-  }
-
   class Builder(private val fragmentManager: FragmentManager) : Serializable {
     constructor(context: FragmentActivity) : this(context.supportFragmentManager)
 
-    var dismissListener: OnDismissListener? = null
+    var dismissListener: DialogInterface.OnDismissListener? = null
+    var positiveListener: MaterialDialog.SingleButtonCallback? = null
     var missingFeatures: List<MissingFeature>? = null
 
     fun missingFeatures(missingFeatures: List<MissingFeature>): Builder {
@@ -89,11 +88,16 @@ class MissingFeaturesDialog : DialogFragment() {
       return this
     }
 
-    fun dismissListener(dismissListener: OnDismissListener): Builder {
+    fun dismissListener(dismissListener: DialogInterface.OnDismissListener): Builder {
       this.dismissListener = dismissListener
       return this
     }
 
+    fun positiveListener(positiveListener: MaterialDialog.SingleButtonCallback): Builder {
+      this.positiveListener = positiveListener
+      return this
+    }
+
     fun build() = MissingFeaturesDialog().apply {
       arguments = Bundle().apply {
         putSerializable("builder", this@Builder)
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/AccountDatabase.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/AccountDatabase.kt
index ae7e85f7c8649d322de3b2fccbad93eaee896656..9b9819bc3c3b18cf80ad9768fa10e1d9dab5f8d0 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/AccountDatabase.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/AccountDatabase.kt
@@ -20,10 +20,12 @@
 package de.kuschku.quasseldroid.persistence
 
 import android.arch.lifecycle.LiveData
+import android.arch.persistence.db.SupportSQLiteDatabase
 import android.arch.persistence.room.*
+import android.arch.persistence.room.migration.Migration
 import android.content.Context
 
-@Database(entities = [(AccountDatabase.Account::class)], version = 1)
+@Database(entities = [(AccountDatabase.Account::class)], version = 2)
 abstract class AccountDatabase : RoomDatabase() {
   abstract fun accounts(): AccountDao
 
@@ -36,7 +38,8 @@ abstract class AccountDatabase : RoomDatabase() {
     var user: String,
     var pass: String,
     var name: String,
-    var lastUsed: Long
+    var lastUsed: Long,
+    var acceptedMissingFeatures: Boolean
   )
 
   @Dao
@@ -73,6 +76,12 @@ abstract class AccountDatabase : RoomDatabase() {
             database = Room.databaseBuilder(
               context.applicationContext,
               AccountDatabase::class.java, DATABASE_NAME
+            ).addMigrations(
+              object : Migration(1, 2) {
+                override fun migrate(database: SupportSQLiteDatabase) {
+                  database.execSQL("ALTER TABLE account ADD COLUMN acceptedMissingFeatures INTEGER NOT NULL DEFAULT 0;")
+                }
+              }
             ).allowMainThreadQueries().build()
           }
         }