diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index a24943e43b95c24f9758f4ff45f73cb428155128..a53f267fcbafc8aa9c17f611bcf5e244f9b19c79 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -71,6 +71,7 @@ android {
 
     getByName("debug") {
       applicationIdSuffix = "debug"
+      /*
 
       isZipAlignEnabled = true
       isMinifyEnabled = true
@@ -80,6 +81,7 @@ android {
         getDefaultProguardFile("proguard-android.txt"),
         "proguard-rules.pro"
       )
+      */
     }
   }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
index bb52a1a0881c5d7e4d55a0e7d1ef7cdd42a10c86..83a422ae5f49936e3eaa97d2ce1e78017d47c311 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
@@ -17,6 +17,7 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.ui.chat.topic.TopicActivity
 import de.kuschku.quasseldroid.util.helper.combineLatest
 import de.kuschku.quasseldroid.util.helper.retint
+import de.kuschku.quasseldroid.util.helper.setTooltip
 import de.kuschku.quasseldroid.util.helper.toLiveData
 import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
@@ -61,7 +62,7 @@ class ChannelInfoFragment : ServiceBoundFragment() {
       } ?: IrcChannel.NULL
     }.filter {
       it != IrcChannel.NULL
-    }.switchMap(IrcChannel::updates).firstElement().toLiveData().observe(this, Observer { channel ->
+    }.switchMap(IrcChannel::updates).toLiveData().observe(this, Observer { channel ->
       if (channel != null) {
         name.text = channel.name()
         topic.text = contentFormatter.format(requireContext(), channel.topic())
@@ -71,7 +72,6 @@ class ChannelInfoFragment : ServiceBoundFragment() {
           intent.putExtra("buffer", arguments?.getInt("bufferId") ?: -1)
           startActivity(intent)
         }
-        actionEditTopic.retint()
 
         actionPart.setOnClickListener {
           viewModel.session.value?.orNull()?.let { session ->
@@ -84,7 +84,6 @@ class ChannelInfoFragment : ServiceBoundFragment() {
             }
           }
         }
-        actionPart.retint()
       }
     })
 
@@ -92,6 +91,11 @@ class ChannelInfoFragment : ServiceBoundFragment() {
     movementMethod.setOnLinkLongClickListener(LinkLongClickMenuHelper())
     topic.movementMethod = movementMethod
 
+    actionEditTopic.setTooltip()
+    actionEditTopic.retint()
+    actionPart.setTooltip()
+    actionPart.retint()
+
     return view
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
index 62be6e45f00f491a20fe8c1ec9a337b3fccd18ba..58f5aec05dcb4be159b8bac34697e9404a94d174 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
@@ -19,11 +19,13 @@ import de.kuschku.quasseldroid.GlideApp
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.ui.chat.ChatActivity
 import de.kuschku.quasseldroid.ui.chat.input.AutoCompleteHelper.Companion.IGNORED_CHARS
+import de.kuschku.quasseldroid.util.AvatarHelper
 import de.kuschku.quasseldroid.util.helper.*
 import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
 import de.kuschku.quasseldroid.util.ui.LinkLongClickMenuHelper
 import de.kuschku.quasseldroid.util.ui.TextDrawable
+import io.reactivex.Observable
 import me.saket.bettermovementmethod.BetterLinkMovementMethod
 import javax.inject.Inject
 
@@ -43,6 +45,9 @@ class UserInfoFragment : ServiceBoundFragment() {
   @BindView(R.id.action_ignore)
   lateinit var actionIgnore: Button
 
+  @BindView(R.id.action_whois)
+  lateinit var actionWhois: Button
+
   @BindView(R.id.action_mention)
   lateinit var actionMention: Button
 
@@ -99,20 +104,20 @@ class UserInfoFragment : ServiceBoundFragment() {
 
     val networkId = arguments?.getInt("networkId")
     val nickName = arguments?.getString("nick")
-    combineLatest(viewModel.session, viewModel.networks).map { (sessionOptional, networks) ->
+    combineLatest(viewModel.session, viewModel.networks).switchMap { (sessionOptional, networks) ->
       if (openBuffer == true) {
         val session = sessionOptional?.orNull()
         val bufferSyncer = session?.bufferSyncer
         val bufferInfo = bufferSyncer?.bufferInfo(arguments?.getInt("bufferId") ?: -1)
         bufferInfo?.let {
-          networks[it.networkId]?.ircUser(it.bufferName)
+          networks[it.networkId]?.liveIrcUser(it.bufferName)
         }
       } else {
-        networks[networkId]?.ircUser(nickName)
-      } ?: IrcUser.NULL
+        networks[networkId]?.liveIrcUser(nickName)
+      } ?: Observable.just(IrcUser.NULL)
     }.filter {
       it != IrcUser.NULL
-    }.switchMap(IrcUser::updates).firstElement().toLiveData().observe(this, Observer { user ->
+    }.switchMap(IrcUser::updates).toLiveData().observe(this, Observer { user ->
       if (user != null) {
         val senderColorIndex = IrcUserUtils.senderColor(user.nick())
         val rawInitial = user.nick().trimStart(*IGNORED_CHARS).firstOrNull()
@@ -122,9 +127,7 @@ class UserInfoFragment : ServiceBoundFragment() {
 
         val fallbackDrawable = TextDrawable.builder().buildRect(initial, senderColor)
 
-        val avatarUrl = Regex("[us]id(\\d+)").matchEntire(user.user())?.groupValues?.lastOrNull()?.let {
-          "https://www.irccloud.com/avatar-redirect/$it"
-        }
+        val avatarUrl = AvatarHelper.avatar(user = user)
         if (avatarUrl != null) {
           GlideApp.with(avatar)
             .load(avatarUrl)
@@ -190,12 +193,23 @@ class UserInfoFragment : ServiceBoundFragment() {
             }
           }
         }
-        actionQuery.retint()
 
         actionIgnore.setOnClickListener {
           Toast.makeText(requireContext(), "Not Implemented", Toast.LENGTH_SHORT).show()
         }
-        actionIgnore.retint()
+
+        actionWhois.setOnClickListener {
+          viewModel.session {
+            it.orNull()?.let { session ->
+              session.bufferSyncer?.find(
+                networkId = networkId,
+                type = Buffer_Type.of(Buffer_Type.StatusBuffer)
+              )?.let { statusInfo ->
+                session.rpcHandler?.sendInput(statusInfo, "/whois ${user.nick()}")
+              }
+            }
+          }
+        }
 
         actionMention.setOnClickListener {
           val intent = Intent(requireContext(), ChatActivity::class.java)
@@ -204,7 +218,6 @@ class UserInfoFragment : ServiceBoundFragment() {
           startActivity(intent)
         }
         actionMention.visibleIf(arguments?.getBoolean("openBuffer") == false)
-        actionMention.retint()
       }
     })
 
@@ -212,6 +225,15 @@ class UserInfoFragment : ServiceBoundFragment() {
     movementMethod.setOnLinkLongClickListener(LinkLongClickMenuHelper())
     realName.movementMethod = movementMethod
 
+    actionQuery.setTooltip()
+    actionQuery.retint()
+    actionIgnore.setTooltip()
+    actionIgnore.retint()
+    actionWhois.setTooltip()
+    actionWhois.retint()
+    actionMention.setTooltip()
+    actionMention.retint()
+
     return view
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
index c0046653efaf642defef7ec31ef1d1521169ba26..1894073dc7e9cec6445600c030c95a7c48c67981 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
@@ -14,6 +14,7 @@ import de.kuschku.libquassel.util.helpers.value
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.settings.AutoCompleteSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
+import de.kuschku.quasseldroid.util.AvatarHelper
 import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.helper.toLiveData
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
@@ -147,9 +148,7 @@ class AutoCompleteHelper(
                   user.realName(),
                   user.isAway(),
                   network.support("CASEMAPPING"),
-                  Regex("[us]id(\\d+)").matchEntire(user.user())?.groupValues?.lastOrNull()?.let {
-                    "https://www.irccloud.com/avatar-redirect/$it"
-                  }
+                  AvatarHelper.avatar(user = user)
                 )
               }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichToolbar.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichToolbar.kt
index a952197a15ce7358ebab1ecb6c974fa1a8e37baa..a193c6b8230587b60ef82301d1c0aaef16fb776e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichToolbar.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichToolbar.kt
@@ -3,13 +3,13 @@ package de.kuschku.quasseldroid.ui.chat.input
 import android.content.Context
 import android.support.annotation.ColorInt
 import android.support.v7.widget.Toolbar
-import android.support.v7.widget.TooltipCompat
 import android.util.AttributeSet
 import android.view.LayoutInflater
 import android.view.View
 import butterknife.BindView
 import butterknife.ButterKnife
 import de.kuschku.quasseldroid.R
+import de.kuschku.quasseldroid.util.helper.setTooltip
 
 class RichToolbar : Toolbar {
   @BindView(R.id.action_format_bold)
@@ -53,14 +53,14 @@ class RichToolbar : Toolbar {
     LayoutInflater.from(context).inflate(R.layout.widget_formatting, this, true)
     ButterKnife.bind(this)
 
-    TooltipCompat.setTooltipText(boldButton, boldButton.contentDescription)
-    TooltipCompat.setTooltipText(italicButton, italicButton.contentDescription)
-    TooltipCompat.setTooltipText(underlineButton, underlineButton.contentDescription)
-    TooltipCompat.setTooltipText(strikethroughButton, strikethroughButton.contentDescription)
-    TooltipCompat.setTooltipText(monospaceButton, monospaceButton.contentDescription)
-    TooltipCompat.setTooltipText(foregroundButton, foregroundButton.contentDescription)
-    TooltipCompat.setTooltipText(backgroundButton, backgroundButton.contentDescription)
-    TooltipCompat.setTooltipText(clearButton, clearButton.contentDescription)
+    boldButton.setTooltip()
+    italicButton.setTooltip()
+    underlineButton.setTooltip()
+    strikethroughButton.setTooltip()
+    monospaceButton.setTooltip()
+    foregroundButton.setTooltip()
+    backgroundButton.setTooltip()
+    clearButton.setTooltip()
 
     boldButton.setOnClickListener { listener?.onBold() }
     italicButton.setOnClickListener { listener?.onItalic() }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt
index 444f3c0542b90828535a5db44e1fffe0590b2337..0a1872eadb6ad6d99016823f57b6b520707474f1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt
@@ -1,8 +1,8 @@
 package de.kuschku.quasseldroid.ui.chat.messages
 
 import de.kuschku.libquassel.protocol.MsgId
-import de.kuschku.libquassel.util.irc.HostmaskHelper
 import de.kuschku.quasseldroid.persistence.QuasselDatabase
+import de.kuschku.quasseldroid.util.AvatarHelper
 
 data class DisplayMessage(
   val content: QuasselDatabase.DatabaseMessage,
@@ -32,9 +32,5 @@ data class DisplayMessage(
     isMarkerLine,
     isEmoji
   )
-  val avatarUrl = content.sender.let {
-    Regex("[us]id(\\d+)").matchEntire(HostmaskHelper.user(it))?.groupValues?.lastOrNull()?.let {
-      "https://www.irccloud.com/avatar-redirect/$it"
-    }
-  }
+  val avatarUrl = AvatarHelper.avatar(message = content)
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/AvatarHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/AvatarHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..60a5af7308f1eb72d7a6ac9a19fd53c1a4b61a8f
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/AvatarHelper.kt
@@ -0,0 +1,18 @@
+package de.kuschku.quasseldroid.util
+
+import de.kuschku.libquassel.quassel.syncables.IrcUser
+import de.kuschku.libquassel.util.irc.HostmaskHelper
+import de.kuschku.quasseldroid.persistence.QuasselDatabase
+
+object AvatarHelper {
+  fun avatar(message: QuasselDatabase.DatabaseMessage? = null, user: IrcUser? = null): String? {
+    val ident = message?.sender?.let(HostmaskHelper::user)
+                ?: user?.user()
+                ?: return null
+
+    val userId = Regex("[us]id(\\d+)").matchEntire(ident)?.groupValues?.lastOrNull()
+                 ?: return null
+
+    return "https://static.irccloud-cdn.com/avatar-redirect/$userId"
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ViewHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ViewHelper.kt
index 61fb6f48d79e5d44c6ff557659d8474e0915dfaf..7d77efc6c63628fac1cfc7b590f5965b472bbc05 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ViewHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ViewHelper.kt
@@ -1,9 +1,13 @@
 package de.kuschku.quasseldroid.util.helper
 
+import android.support.v7.widget.TooltipCompat
 import android.view.View
 
 fun View.visibleIf(check: Boolean) = if (check) {
   this.visibility = View.VISIBLE
 } else {
   this.visibility = View.GONE
-}
\ No newline at end of file
+}
+
+fun View.setTooltip(tooltipText: CharSequence? = this.contentDescription) =
+  TooltipCompat.setTooltipText(this, tooltipText)
diff --git a/app/src/main/res/layout/fragment_info_channel.xml b/app/src/main/res/layout/fragment_info_channel.xml
index 31421a93c40b948dc2927d3ea758a37f92ecd325..a98e6d9d72f3ff8247d4b1975585824333e7949f 100644
--- a/app/src/main/res/layout/fragment_info_channel.xml
+++ b/app/src/main/res/layout/fragment_info_channel.xml
@@ -8,6 +8,7 @@
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:animateLayoutChanges="true"
     android:orientation="vertical">
 
     <LinearLayout style="@style/Widget.Info.Header">
@@ -43,14 +44,28 @@
         <android.support.v7.widget.AppCompatButton
           android:id="@+id/action_edit_topic"
           style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_edit_topic_long"
           android:drawableTop="@drawable/ic_pencil"
-          android:text="@string/label_edit_topic" />
+          android:text="@string/label_edit_topic"
+          tools:drawableTint="?colorTextSecondary" />
 
         <android.support.v7.widget.AppCompatButton
           android:id="@+id/action_part"
           style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_part_long"
           android:drawableTop="@drawable/ic_account_minus"
-          android:text="@string/label_part" />
+          android:text="@string/label_part"
+          tools:drawableTint="?colorTextSecondary" />
+
+        <android.support.v7.widget.AppCompatButton
+          android:id="@+id/action_join"
+          style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_join_long"
+          android:drawableTop="@drawable/ic_account_plus"
+          android:text="@string/label_join"
+          android:visibility="gone"
+          tools:drawableTint="?colorTextSecondary"
+          tools:visibility="visible" />
       </LinearLayout>
     </HorizontalScrollView>
 
diff --git a/app/src/main/res/layout/fragment_info_user.xml b/app/src/main/res/layout/fragment_info_user.xml
index 17879dfc885c73ebe7c2022f2996548cd66ebe17..dc3ea1234ee73ab713ed9c5b4e0ff9cb4c98ec99 100644
--- a/app/src/main/res/layout/fragment_info_user.xml
+++ b/app/src/main/res/layout/fragment_info_user.xml
@@ -9,6 +9,7 @@
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:animateLayoutChanges="true"
     android:orientation="vertical">
 
     <android.support.constraint.ConstraintLayout
@@ -59,33 +60,49 @@
         <android.support.v7.widget.AppCompatButton
           android:id="@+id/action_query"
           style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_query_long"
           android:drawableTop="@drawable/ic_message_bulleted"
-          android:text="@string/label_query" />
+          android:text="@string/label_query"
+          tools:drawableTint="?colorTextSecondary" />
 
         <android.support.v7.widget.AppCompatButton
           android:id="@+id/action_ignore"
           style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_ignore_long"
           android:drawableTop="@drawable/ic_eye_off"
-          android:text="@string/label_ignore" />
+          android:text="@string/label_ignore"
+          tools:drawableTint="?colorTextSecondary" />
+
+        <android.support.v7.widget.AppCompatButton
+          android:id="@+id/action_whois"
+          style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_whois_long"
+          android:drawableTop="@drawable/ic_info"
+          android:text="@string/label_whois"
+          tools:drawableTint="?colorTextSecondary" />
 
         <android.support.v7.widget.AppCompatButton
           android:id="@+id/action_mention"
           style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_mention_long"
           android:drawableTop="@drawable/ic_share_alternative"
-          android:text="@string/label_mention" />
+          android:text="@string/label_mention"
+          tools:drawableTint="?colorTextSecondary" />
       </LinearLayout>
     </HorizontalScrollView>
 
+    <View
+      android:layout_width="match_parent"
+      android:layout_height="1dp"
+      android:background="?colorDivider" />
+
     <LinearLayout
       android:id="@+id/away_container"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:orientation="vertical">
-
-      <View
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="?colorDivider" />
+      android:orientation="vertical"
+      android:visibility="gone"
+      tools:visibility="visible">
 
       <TextView
         style="@style/Widget.Info.Section"
@@ -102,12 +119,12 @@
           style="@style/Widget.Info.Item.Description"
           android:text="@string/label_user_away_reason" />
       </LinearLayout>
-    </LinearLayout>
 
-    <View
-      android:layout_width="match_parent"
-      android:layout_height="1dp"
-      android:background="?colorDivider" />
+      <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="?colorDivider" />
+    </LinearLayout>
 
     <TextView
       style="@style/Widget.Info.Section"
@@ -115,7 +132,9 @@
 
     <LinearLayout
       android:id="@+id/account_container"
-      style="@style/Widget.Info.Item">
+      style="@style/Widget.Info.Item"
+      android:visibility="gone"
+      tools:visibility="visible">
 
       <TextView
         android:id="@+id/account"
@@ -129,7 +148,9 @@
 
     <LinearLayout
       android:id="@+id/ident_container"
-      style="@style/Widget.Info.Item">
+      style="@style/Widget.Info.Item"
+      android:visibility="gone"
+      tools:visibility="visible">
 
       <TextView
         android:id="@+id/ident"
@@ -143,7 +164,9 @@
 
     <LinearLayout
       android:id="@+id/host_container"
-      style="@style/Widget.Info.Item">
+      style="@style/Widget.Info.Item"
+      android:visibility="gone"
+      tools:visibility="visible">
 
       <TextView
         android:id="@+id/host"
@@ -157,7 +180,9 @@
 
     <LinearLayout
       android:id="@+id/server_container"
-      style="@style/Widget.Info.Item">
+      style="@style/Widget.Info.Item"
+      android:visibility="gone"
+      tools:visibility="visible">
 
       <TextView
         android:id="@+id/server"
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index d854daeb27015bea26d9a2e4535f4b3fb751e5aa..976cd8600179bef5982dc715527f39ac60ac596c 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -24,18 +24,22 @@
   <string name="label_disconnect">Verbindung trennen</string>
   <string name="label_edit_nick">Spitznamen bearbeiten</string>
   <string name="label_edit_topic">Thema ändern</string>
+  <string name="label_edit_topic_long">Open dialog to change the channel topic</string>
   <string name="label_filter_messages">Nachrichten filtern</string>
   <string name="label_github">GitHub</string>
   <string name="label_hide_perm">Permanent ausblenden</string>
   <string name="label_hide_temp">Temporär ausblenden</string>
   <string name="label_ignore">Ignorieren</string>
+  <string name="label_ignore_long">Add/remove user to/from ignore list</string>
   <string name="label_info_channel">Kanalinformationen</string>
   <string name="label_info_user">Benutzerinformationen</string>
   <string name="label_input_history">Eingabeverlauf</string>
-  <string name="label_join">Verbinden</string>
+  <string name="label_join">Betreten</string>
+  <string name="label_join_long">Kanal Betreten</string>
   <string name="label_libraries">Bibliotheken</string>
   <string name="label_license">Lizenz</string>
   <string name="label_mention">Erwähnen</string>
+  <string name="label_mention_long">Kopiert den Nutzernamen in die Eingabezeile</string>
   <string name="label_new_account">Account hinzufügen</string>
   <string name="label_new_chatlist">Chatliste hinzufügen</string>
   <string name="label_new_identity">Identität hinzufügen</string>
@@ -46,9 +50,11 @@
   <string name="label_reset">Zurücksetzen</string>
   <string name="label_open">Öffnen</string>
   <string name="label_part">Verlassen</string>
+  <string name="label_part_long">Kanal verlassen</string>
   <string name="label_placeholder_message">Nachricht schreiben…</string>
   <string name="label_placeholder_topic">Beschreib das Thema des Kanals…</string>
   <string name="label_query">Dialog</string>
+  <string name="label_query_long">Öffnet einen privaten Chat</string>
   <string name="label_rename">Umbenennen</string>
   <string name="label_save">Speichern</string>
   <string name="label_select">Auswählen</string>
@@ -62,6 +68,7 @@
   <string name="label_unhide">Nicht mehr ausblenden</string>
   <string name="label_website">Webseite</string>
   <string name="label_whois">Whois</string>
+  <string name="label_whois_long">Nutzerinformationen aktualisieren</string>
   <string name="label_yes">Ja</string>
 
   <string name="notification_channel_connection_title">Verbindung</string>
diff --git a/app/src/main/res/values-v17/styles_widgets.xml b/app/src/main/res/values-v17/styles_widgets.xml
index 1f6cb50f418fe834ef5d3131ed3d33eeadb67aaf..b4027250ee4275949cdb18919f23dbe80e3625a9 100644
--- a/app/src/main/res/values-v17/styles_widgets.xml
+++ b/app/src/main/res/values-v17/styles_widgets.xml
@@ -60,24 +60,6 @@
     <item name="android:paddingTop">8dp</item>
   </style>
 
-  <style name="Widget.Info.ActionButton" parent="">
-    <item name="android:layout_width">wrap_content</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:background">?backgroundMenuItem</item>
-    <item name="android:drawablePadding">4dp</item>
-    <item name="android:fontFamily">sans-serif</item>
-    <item name="android:minWidth">96dp</item>
-    <item name="android:paddingBottom">12dp</item>
-    <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingStart">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingTop">12dp</item>
-    <item name="android:textAllCaps">false</item>
-    <item name="android:textColor">?colorTextPrimary</item>
-    <item name="android:textStyle">normal</item>
-  </style>
-
   <style name="Widget.Info.Section" parent="">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c5e98cd75a44563306ce7535d692a51b03e6d017..3eecd053a008e7d3809c1642be202cd2a196cfa9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -24,18 +24,22 @@
   <string name="label_disconnect">Disconnect</string>
   <string name="label_edit_nick">Edit nickname</string>
   <string name="label_edit_topic">Edit Topic</string>
+  <string name="label_edit_topic_long">Open dialog to change the channel topic</string>
   <string name="label_filter_messages">Filter Messages</string>
   <string name="label_github">GitHub</string>
   <string name="label_hide_perm">Hide Permanently</string>
   <string name="label_hide_temp">Hide Temporarily</string>
   <string name="label_ignore">Ignore</string>
+  <string name="label_ignore_long">Add/remove user to/from ignore list</string>
   <string name="label_info_channel">Channel Details</string>
   <string name="label_info_user">User Details</string>
   <string name="label_input_history">Input History</string>
   <string name="label_join">Join</string>
+  <string name="label_join_long">Join Channel</string>
   <string name="label_libraries">Libraries</string>
   <string name="label_license">License</string>
   <string name="label_mention">Mention</string>
+  <string name="label_mention_long">Copy username into input line</string>
   <string name="label_new_account">New Account</string>
   <string name="label_new_chatlist">New Chatlist</string>
   <string name="label_new_identity">New Identity</string>
@@ -46,9 +50,11 @@
   <string name="label_reset">Reset</string>
   <string name="label_open">Open</string>
   <string name="label_part">Leave</string>
+  <string name="label_part_long">Leave Channel</string>
   <string name="label_placeholder_message">Write a message…</string>
   <string name="label_placeholder_topic">Describe the channel topic…</string>
   <string name="label_query">Query</string>
+  <string name="label_query_long">Open private chat with user</string>
   <string name="label_rename">Rename</string>
   <string name="label_save">Save</string>
   <string name="label_select">Select</string>
@@ -62,6 +68,7 @@
   <string name="label_unhide">Make Visible</string>
   <string name="label_website">Website</string>
   <string name="label_whois">Whois</string>
+  <string name="label_whois_long">Update user information</string>
   <string name="label_yes">Yes</string>
 
   <string name="notification_channel_background" translatable="false">background</string>
diff --git a/app/src/main/res/values/styles_widgets.xml b/app/src/main/res/values/styles_widgets.xml
index 7014054a3f07d45374010bca285c9caf8ed1363c..c162deec9441981290b786012c08916059748602 100644
--- a/app/src/main/res/values/styles_widgets.xml
+++ b/app/src/main/res/values/styles_widgets.xml
@@ -145,18 +145,21 @@
     <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
     <item name="android:paddingTop">8dp</item>
+    <item name="android:animateLayoutChanges">true</item>
   </style>
 
   <style name="Widget.Info.Header.Name" parent="">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textAppearance">@style/TextAppearance.AppCompat.Headline</item>
+    <item name="android:animateLayoutChanges">true</item>
   </style>
 
   <style name="Widget.Info.Header.Description" parent="">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textAppearance">@style/TextAppearance.AppCompat.Medium</item>
+    <item name="android:animateLayoutChanges">true</item>
   </style>
 
   <style name="Widget.Info.ActionButton" parent="">
@@ -165,13 +168,13 @@
     <item name="android:background">?backgroundMenuItem</item>
     <item name="android:drawablePadding">4dp</item>
     <item name="android:fontFamily">sans-serif</item>
-    <item name="android:minWidth">96dp</item>
+    <item name="android:minWidth">80dp</item>
     <item name="android:paddingBottom">12dp</item>
-    <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
+    <item name="android:paddingLeft">10dp</item>
+    <item name="android:paddingRight">10dp</item>
     <item name="android:paddingTop">12dp</item>
     <item name="android:textAllCaps">false</item>
-    <item name="android:textColor">?colorTextPrimary</item>
+    <item name="android:textColor">?colorTextSecondary</item>
     <item name="android:textStyle">normal</item>
   </style>
 
@@ -198,6 +201,7 @@
     <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
     <item name="android:paddingTop">16dp</item>
+    <item name="android:animateLayoutChanges">true</item>
   </style>
 
   <style name="Widget.Info.Item.Content" parent="">