diff --git a/app/src/main/java/org/futo/circles/view/PostLayout.kt b/app/src/main/java/org/futo/circles/view/PostLayout.kt
index 1976049f69bc9eb634b757f7c993f19145bc067a..094f9ace219658672497137b2c7c498324fef977 100644
--- a/app/src/main/java/org/futo/circles/view/PostLayout.kt
+++ b/app/src/main/java/org/futo/circles/view/PostLayout.kt
@@ -62,8 +62,7 @@ class PostLayout(
             }
 
             override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
-                if (binding.postFooter.areUserAbleToReply())
-                    post?.let { optionsListener?.onReply(it.postInfo.roomId, it.id) }
+                openReplies()
                 return true
             }
 
@@ -75,9 +74,18 @@ class PostLayout(
         }
 
     init {
-        binding.lvContent.setOnClickListener {
-            post?.let {
-                if (it.content.isMedia()) optionsListener?.onShowPreview(it.postInfo.roomId, it.id)
+        binding.lvContent.apply {
+            setOnClickListener {
+                post?.let {
+                    if (it.content.isMedia()) optionsListener?.onShowPreview(
+                        it.postInfo.roomId,
+                        it.id
+                    ) else openReplies()
+                }
+            }
+            setOnLongClickListener {
+                binding.postHeader.showMenu()
+                true
             }
         }
         binding.lCard.setOnTouchListener { _, event ->
@@ -115,6 +123,11 @@ class PostLayout(
         binding.tvEditedLabel.setIsVisible(isEdited)
     }
 
+    private fun openReplies() {
+        if (binding.postFooter.areUserAbleToReply())
+            post?.let { optionsListener?.onReply(it.postInfo.roomId, it.id) }
+    }
+
     private fun setMentionBorder(content: PostContent) {
         val hasMention = when (content) {
             is MediaContent -> content.caption?.let {
diff --git a/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt b/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt
index a2d49f26e6bd100fc6f95210fc6a63047d150f39..4cf2ccc96c8d6dde43a72e2ce29cf202791993af 100644
--- a/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt
+++ b/app/src/main/java/org/futo/circles/view/ReadMoreTextView.kt
@@ -9,10 +9,14 @@ import android.text.TextPaint
 import android.text.TextUtils
 import android.text.style.TextAppearanceSpan
 import android.util.AttributeSet
+import android.view.ViewGroup
 import androidx.appcompat.widget.AppCompatTextView
 import androidx.core.content.res.use
 import androidx.core.text.buildSpannedString
+import androidx.core.text.getSpans
 import androidx.core.text.inSpans
+import androidx.core.text.toSpannable
+import io.noties.markwon.core.spans.LinkSpan
 import org.futo.circles.R
 import kotlin.text.Typography.ellipsis
 import kotlin.text.Typography.nbsp
@@ -47,7 +51,17 @@ class ReadMoreTextView @JvmOverloads constructor(
         }
 
         if (hasOnClickListeners()) throw IllegalStateException("Custom onClickListener not supported")
-        super.setOnClickListener { toggle() }
+        super.setOnClickListener {
+            toggle()
+            if (collapseText == originalText &&
+                originalText?.toSpannable()
+                    ?.getSpans<LinkSpan>(0, originalText?.length ?: 0)?.size == 0
+            ) (parent?.parent as? ViewGroup)?.performClick()
+        }
+
+        super.setOnLongClickListener {
+            (parent?.parent as? ViewGroup)?.performLongClick() == true
+        }
 
         if (originalText != null) invalidateText()