diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt
index 28b2e2093e1d2d8bb655b5f281c44c88814b6cfd..57ec8ac394d2636d96fd14002c89ad851dce77b9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt
@@ -28,16 +28,21 @@ class IgnoreItemActivity : ServiceBoundSettingsActivity(IgnoreItemFragment()) {
   companion object {
     fun launch(
       context: Context,
-      item: IgnoreListManager.IgnoreListItem? = null
+      item: IgnoreListManager.IgnoreListItem? = null,
+      addRule: String? = null
     ) = context.startActivity(intent(context, item))
 
     fun intent(
       context: Context,
-      item: IgnoreListManager.IgnoreListItem? = null
+      item: IgnoreListManager.IgnoreListItem? = null,
+      addRule: String? = null
     ) = Intent(context, IgnoreItemActivity::class.java).apply {
       if (item != null) {
         putExtra("item", item)
       }
+      if (addRule != null) {
+        putExtra("add_rule", addRule)
+      }
     }
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt
index 4c9bfda8ff482671e4ef9ec574db751e93e31566..dd347fa5f4c94b819a32c4c28a583fdddafa4d4d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt
@@ -119,7 +119,9 @@ class IgnoreItemFragment : ServiceBoundSettingsFragment(), Savable,
     ))
     scope.adapter = scopeAdapter
 
-    item?.let { data ->
+    val addRule = arguments?.getString("add_rule")
+    val data = item
+    if (data != null) {
       enabled.isChecked = data.isActive
       ignoreRule.setText(data.ignoreRule)
       isRegEx.isChecked = data.isRegEx
@@ -127,6 +129,8 @@ class IgnoreItemFragment : ServiceBoundSettingsFragment(), Savable,
       strictness.setSelection(strictnessAdapter.indexOf(data.strictness) ?: 0)
       scope.setSelection(scopeAdapter.indexOf(data.scope) ?: 0)
       scopeRule.setText(data.scopeRule)
+    } else if (addRule != null) {
+      ignoreRule.setText(addRule)
     }
 
     scope.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt
index 4b919d42afacec40d4aa7698d5309901d601b41d..d188afb67739a6ca246c3005ea2e38a81c2d5d3c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt
@@ -25,7 +25,18 @@ import de.kuschku.quasseldroid.util.ui.settings.ServiceBoundSettingsActivity
 
 class IgnoreListActivity : ServiceBoundSettingsActivity(IgnoreListFragment()) {
   companion object {
-    fun launch(context: Context) = context.startActivity(intent(context))
-    fun intent(context: Context) = Intent(context, IgnoreListActivity::class.java)
+    fun launch(
+      context: Context,
+      addRule: String? = null
+    ) = context.startActivity(intent(context, addRule))
+
+    fun intent(
+      context: Context,
+      addRule: String? = null
+    ) = Intent(context, IgnoreListActivity::class.java).apply {
+      if (addRule != null) {
+        putExtra("add_rule", addRule)
+      }
+    }
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
index 88632f9906a2aec4549663d0f7b355cbe906cbc4..904b79892ac3f7d5b1e009275b434b444040c581 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
@@ -69,10 +69,17 @@ class IgnoreListFragment : ServiceBoundSettingsFragment(), Savable,
     helper = ItemTouchHelper(callback)
     helper.attachToRecyclerView(list)
 
+    val addRule = arguments?.getString("add_rule")
+
     add.setOnClickListener {
       startActivityForResult(IgnoreItemActivity.intent(requireContext()), REQUEST_CREATE_RULE)
     }
 
+    if (addRule != null) {
+      startActivityForResult(IgnoreItemActivity.intent(requireContext(), addRule = addRule),
+                             REQUEST_CREATE_RULE)
+    }
+
     viewModel.ignoreListManager
       .filter(Optional<IgnoreListManager>::isPresent)
       .map(Optional<IgnoreListManager>::get)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
index 66ce0b3ee8a1570936f43b880651fc94400e9440..3d90879784c63cb27de774cc28ede449b20a49a0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
@@ -30,7 +30,6 @@ import android.view.ViewGroup
 import android.widget.Button
 import android.widget.ImageView
 import android.widget.TextView
-import android.widget.Toast
 import androidx.lifecycle.Observer
 import butterknife.BindView
 import butterknife.ButterKnife
@@ -42,9 +41,11 @@ import de.kuschku.libquassel.quassel.syncables.IrcUser
 import de.kuschku.libquassel.util.Optional
 import de.kuschku.libquassel.util.helpers.nullIf
 import de.kuschku.libquassel.util.helpers.value
+import de.kuschku.libquassel.util.irc.HostmaskHelper
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.settings.MessageSettings
 import de.kuschku.quasseldroid.ui.chat.ChatActivity
+import de.kuschku.quasseldroid.ui.coresettings.ignorelist.IgnoreListActivity
 import de.kuschku.quasseldroid.util.ShortcutCreationHelper
 import de.kuschku.quasseldroid.util.avatars.AvatarHelper
 import de.kuschku.quasseldroid.util.avatars.MatrixApi
@@ -225,7 +226,7 @@ class UserInfoFragment : ServiceBoundFragment() {
         }
 
         nick.text = user.nick
-        val (content, hasSpoilers) = contentFormatter.formatContent(
+        val (content, _) = contentFormatter.formatContent(
           user.realName ?: "",
           networkId = user.networkId
         )
@@ -253,7 +254,7 @@ class UserInfoFragment : ServiceBoundFragment() {
 
         actionWhois.visibleIf(user.knownToCore)
 
-        actionQuery.setOnClickListener {
+        actionQuery.setOnClickListener { view ->
           viewModel.session.value?.orNull()?.let { session ->
             val info = session.bufferSyncer.find(
               bufferName = user.nick,
@@ -262,8 +263,7 @@ class UserInfoFragment : ServiceBoundFragment() {
             )
 
             if (info != null) {
-              ChatActivity.launch(requireContext(),
-                                  bufferId = info.bufferId)
+              ChatActivity.launch(view.context, bufferId = info.bufferId)
             } else {
               viewModel.allBuffers.map {
                 listOfNotNull(it.find {
@@ -273,8 +273,7 @@ class UserInfoFragment : ServiceBoundFragment() {
                 it.isNotEmpty()
               }.firstElement().toLiveData().observe(this, Observer {
                 it?.firstOrNull()?.let { info ->
-                  ChatActivity.launch(requireContext(),
-                                      bufferId = info.bufferId)
+                  ChatActivity.launch(view.context, bufferId = info.bufferId)
                 }
               })
 
@@ -282,22 +281,22 @@ class UserInfoFragment : ServiceBoundFragment() {
                 networkId = user.networkId,
                 type = Buffer_Type.of(Buffer_Type.StatusBuffer)
               )?.let { statusInfo ->
-                session.rpcHandler.sendInput(statusInfo,
-                                             "/query ${user.nick}")
+                session.rpcHandler.sendInput(statusInfo, "/query ${user.nick}")
               }
             }
           }
         }
 
-        actionIgnore.setOnClickListener {
-          Toast.makeText(requireContext(), "Not Implemented", Toast.LENGTH_SHORT).show()
+        actionIgnore.setOnClickListener { view ->
+          IgnoreListActivity.launch(view.context,
+                                    addRule = HostmaskHelper.build(user.nick, user.user, user.host))
         }
 
-        actionMention.setOnClickListener {
-          ChatActivity.launch(requireContext(), sharedText = "${user.nick}: ")
+        actionMention.setOnClickListener { view ->
+          ChatActivity.launch(view.context, sharedText = "${user.nick}: ")
         }
 
-        actionWhois.setOnClickListener {
+        actionWhois.setOnClickListener { view ->
           viewModel.session {
             it.orNull()?.let { session ->
               session.bufferSyncer.find(
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt
index 09b536b35aca9960bb0d185f0eeba16fcdbd7e51..0e7bcc20f8242a96e85e7ec6f80ddfd970eb4d83 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt
@@ -77,7 +77,7 @@ object AvatarHelper {
     if (size != null) {
       return listOf(
         Avatar.IRCCloudAvatar(
-          "https://static.irccloud-cdn.com/avatar-redirect/s${truncateSize(size)}/$userId"
+          "https://static.irccloud-cdn.com/avatar-redirect/s$size/$userId"
         )
       )
     }
@@ -99,7 +99,7 @@ object AvatarHelper {
         if (size == null) {
           "https://www.gravatar.com/avatar/$hash?d=404"
         } else {
-          "https://www.gravatar.com/avatar/$hash?d=404&s=${truncateSize(size)}"
+          "https://www.gravatar.com/avatar/$hash?d=404&s=${size}"
         }
       }.map { Avatar.GravatarAvatar(it) }.toList()
   }
@@ -107,12 +107,10 @@ object AvatarHelper {
   private fun matrixFallback(realname: String, size: Int?): List<Avatar> {
     return if (Patterns.MATRIX_REALNAME.matches(realname)) {
       listOf(
-        Avatar.MatrixAvatar(realname, size?.let(this::truncateSize))
+        Avatar.MatrixAvatar(realname, size)
       )
     } else {
       emptyList()
     }
   }
-
-  private fun truncateSize(originalSize: Int) = originalSize //if (originalSize > 72) 512 else 72
 }
diff --git a/app/src/main/res/layout/info_user.xml b/app/src/main/res/layout/info_user.xml
index 18b446d118356f594f02d1bf863db8d411bcafb8..b33d185d3eb454ae40e2720826235e40d33c3bcc 100644
--- a/app/src/main/res/layout/info_user.xml
+++ b/app/src/main/res/layout/info_user.xml
@@ -115,10 +115,8 @@
             style="@style/Widget.Info.ActionButton"
             android:contentDescription="@string/label_ignore_long"
             android:text="@string/label_ignore"
-            android:visibility="gone"
             tools:drawableTint="?colorTextSecondary"
-            tools:drawableTop="@drawable/ic_eye_off"
-            tools:visibility="visible" />
+            tools:drawableTop="@drawable/ic_eye_off" />
 
           <androidx.appcompat.widget.AppCompatButton
             android:id="@+id/action_whois"
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt b/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt
index 5828730bae21d49e52e6bfc1f7406615f1cb191a..4edae3681d7ecc0614b0c617125a9e2920b80037 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt
@@ -40,4 +40,14 @@ object HostmaskHelper {
 
     return Triple(nick, user, host)
   }
+
+  fun build(nick: String, user: String?, host: String?) = buildString {
+    append(nick)
+    if (!user.isNullOrEmpty()) {
+      append("!$user")
+    }
+    if (!host.isNullOrEmpty()) {
+      append("@$host")
+    }
+  }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt
index e4fe918539107d0873ad199ba74930ac7d1b58f0..df2961ac9200786831235aaa691600f23ff0e880 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt
@@ -47,6 +47,7 @@ class MessageSerializerTest {
       "",
       "",
       "",
+      "",
       ""
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.empty())
@@ -74,6 +75,7 @@ class MessageSerializerTest {
       "",
       "",
       "",
+      "",
       "äẞ\u0000\uFFFF"
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.empty())
@@ -101,6 +103,7 @@ class MessageSerializerTest {
       "",
       "",
       "",
+      "",
       ""
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all())
@@ -128,6 +131,7 @@ class MessageSerializerTest {
       "äẞ\u0000\uFFFF",
       "äẞ\u0000\uFFFF",
       "äẞ\u0000\uFFFF",
+      "",
       "äẞ\u0000\uFFFF"
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all())
@@ -155,6 +159,7 @@ class MessageSerializerTest {
       "äẞ\u0000\uFFFF",
       "äẞ\u0000\uFFFF",
       "äẞ\u0000\uFFFF",
+      "",
       "äẞ\u0000\uFFFF"
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all())
diff --git a/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt b/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt
index d3cd088d8ad5c8045ccebcafa394196a6e4908ba..f189ecb73442c827626316bfc7bd15b9f52830a4 100644
--- a/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt
@@ -39,6 +39,10 @@ class HostmaskHelperTest {
                  HostmaskHelper.host("justJanne!kuschku@lithium.kuschku.de"))
     assertEquals("lithium.kuschku.de",
                  HostmaskHelper.split("justJanne!kuschku@lithium.kuschku.de").third)
+
+    assertEquals("justJanne!kuschku@lithium.kuschku.de", HostmaskHelper.build(
+      "justJanne", "kuschku", "lithium.kuschku.de"
+    ))
   }
 
   @Test
@@ -57,6 +61,10 @@ class HostmaskHelperTest {
                  HostmaskHelper.host("justJanne!~kuschku@lithium.kuschku.de"))
     assertEquals("lithium.kuschku.de",
                  HostmaskHelper.split("justJanne!~kuschku@lithium.kuschku.de").third)
+
+    assertEquals("justJanne!~kuschku@lithium.kuschku.de", HostmaskHelper.build(
+      "justJanne", "~kuschku", "lithium.kuschku.de"
+    ))
   }
 
   @Test
@@ -75,6 +83,10 @@ class HostmaskHelperTest {
                  HostmaskHelper.host("bärlauch!maße@flüge.de"))
     assertEquals("flüge.de",
                  HostmaskHelper.split("bärlauch!maße@flüge.de").third)
+
+    assertEquals("bärlauch!maße@flüge.de", HostmaskHelper.build(
+      "bärlauch", "maße", "flüge.de"
+    ))
   }
 
   @Test
@@ -93,6 +105,10 @@ class HostmaskHelperTest {
                  HostmaskHelper.host("irc.freenode.org"))
     assertEquals("",
                  HostmaskHelper.split("irc.freenode.org").third)
+
+    assertEquals("irc.freenode.org", HostmaskHelper.build(
+      "irc.freenode.org", "", ""
+    ))
   }
 
   @Test
@@ -111,6 +127,10 @@ class HostmaskHelperTest {
                  HostmaskHelper.host("@nick!~ident@example.org"))
     assertEquals("example.org",
                  HostmaskHelper.split("@nick!~ident@example.org").third)
+
+    assertEquals("@nick!~ident@example.org", HostmaskHelper.build(
+      "@nick", "~ident", "example.org"
+    ))
   }
 
   @Test
@@ -129,6 +149,10 @@ class HostmaskHelperTest {
                  HostmaskHelper.host("a@a!"))
     assertEquals("a!",
                  HostmaskHelper.split("a@a!").third)
+
+    assertEquals("a@a!", HostmaskHelper.build(
+      "a", "", "a!"
+    ))
   }
 
   @Test
@@ -147,5 +171,9 @@ class HostmaskHelperTest {
                  HostmaskHelper.host("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord"))
     assertEquals("discord",
                  HostmaskHelper.split("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord").third)
+
+    assertEquals("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord", HostmaskHelper.build(
+      "Gin_", "Gin_!♡♅ƸӜƷ♅♡!", "discord"
+    ))
   }
 }