diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
index f4a9a5fef1608c4676ca1c4bfaa4397b734bcc78..e734ca5018db5406593128b586a849dbba16d212 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt
@@ -4,6 +4,7 @@ import android.content.Context
 import android.graphics.Typeface
 import android.text.SpannableString
 import android.text.Spanned
+import android.text.TextPaint
 import android.text.style.ForegroundColorSpan
 import android.text.style.StyleSpan
 import android.text.style.URLSpan
@@ -105,7 +106,7 @@ class QuasselMessageRenderer(
           context.getString(R.string.message_format_plain),
           formatPrefix(message.senderPrefixes, highlight),
           formatNick(message.sender, self, highlight),
-          formatContent(message.content)
+          formatContent(message.content, highlight)
         ),
         message.messageId == markerLine
       )
@@ -116,7 +117,7 @@ class QuasselMessageRenderer(
           context.getString(R.string.message_format_action),
           formatPrefix(message.senderPrefixes, highlight),
           formatNick(message.sender, self, highlight),
-          formatContent(message.content)
+          formatContent(message.content, highlight)
         ),
         message.messageId == markerLine
       )
@@ -127,7 +128,7 @@ class QuasselMessageRenderer(
           context.getString(R.string.message_format_notice),
           formatPrefix(message.senderPrefixes, highlight),
           formatNick(message.sender, self, highlight),
-          formatContent(message.content)
+          formatContent(message.content, highlight)
         ),
         message.messageId == markerLine
       )
@@ -244,13 +245,13 @@ class QuasselMessageRenderer(
       Message_Type.Error -> FormattedMessage(
         message.messageId,
         timeFormatter.format(message.time.atZone(zoneId)),
-        formatContent(message.content),
+        formatContent(message.content, highlight),
         message.messageId == markerLine
       )
       Message_Type.Topic -> FormattedMessage(
         message.messageId,
         timeFormatter.format(message.time.atZone(zoneId)),
-        formatContent(message.content),
+        formatContent(message.content, highlight),
         message.messageId == markerLine
       )
       else -> FormattedMessage(
@@ -287,7 +288,7 @@ class QuasselMessageRenderer(
     RegexOption.IGNORE_CASE
   )
 
-  private fun formatContent(content: String): CharSequence {
+  private fun formatContent(content: String, highlight: Boolean): CharSequence {
     val formattedText = ircFormatDeserializer.formatString(content, appearanceSettings.colorizeMirc)
     val text = SpannableString(formattedText)
 
@@ -295,7 +296,8 @@ class QuasselMessageRenderer(
       val group = result.groups[1]
       if (group != null) {
         text.setSpan(
-          URLSpan(group.value), group.range.start, group.range.start + group.value.length,
+          QuasselURLSpan(group.value, highlight), group.range.start,
+          group.range.start + group.value.length,
           Spanned.SPAN_INCLUSIVE_EXCLUSIVE
         )
       }
@@ -309,6 +311,16 @@ class QuasselMessageRenderer(
     return text
   }
 
+  class QuasselURLSpan(text: String, private val highlight: Boolean) : URLSpan(text) {
+    override fun updateDrawState(ds: TextPaint?) {
+      if (ds != null) {
+        if (!highlight)
+          ds.color = ds.linkColor
+        ds.isUnderlineText = true
+      }
+    }
+  }
+
   private fun formatNickImpl(sender: String, colorize: Boolean): CharSequence {
     val nick = IrcUserUtils.nick(sender)
     val spannableString = SpannableString(nick)