diff --git a/app/build.gradle b/app/build.gradle
index 6a9db595aecda61eca9962b7f1aba56569183973..517c4710f3de04b87621b721380a13feda191399 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -80,8 +80,6 @@ dependencies {
     //Webp animations
     implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.25.0'
 
-    // Custom shadow
-    implementation 'com.github.BluRe-CN:ComplexView:1.1'
 
     //Markdown
     def markwon_version = "4.6.2"
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
index d0f1d8c0e007cd9b7db514bb0d8d64139e0f6e84..8c0856a46079efb1e2dc663d8a8ada7082d3a9b2 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
@@ -7,6 +7,7 @@ import android.view.View
 import androidx.appcompat.view.menu.MenuBuilder
 import androidx.fragment.app.viewModels
 import androidx.navigation.fragment.navArgs
+import androidx.recyclerview.widget.DividerItemDecoration
 import dagger.hilt.android.AndroidEntryPoint
 import org.futo.circles.R
 import org.futo.circles.core.extensions.getCurrentUserPowerLevel
@@ -90,7 +91,7 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
         }
     }
 
-    private fun invalidateMenu(){
+    private fun invalidateMenu() {
         binding.toolbar.menu.clear()
         setupMenu()
     }
@@ -149,6 +150,7 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
     private fun setupViews() {
         binding.rvTimeline.apply {
             adapter = listAdapter
+            addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL))
             MarkAsReadBuffer(this) { viewModel.markEventAsRead(it) }
         }
         binding.lCreatePost.setUp(object : CreatePostViewListener {
diff --git a/app/src/main/java/org/futo/circles/view/PostHeaderView.kt b/app/src/main/java/org/futo/circles/view/PostHeaderView.kt
index 9426085f3acd0b9143894ccb182426db37f5ebd8..6d61068d04fb88d7c5b5cb54573d334abc2cf9cb 100644
--- a/app/src/main/java/org/futo/circles/view/PostHeaderView.kt
+++ b/app/src/main/java/org/futo/circles/view/PostHeaderView.kt
@@ -91,7 +91,7 @@ class PostHeaderView(
     }
 
     @SuppressLint("RestrictedApi")
-    private fun showMenu() {
+    fun showMenu() {
         val unwrappedPost = post ?: return
         PopupMenu(context, binding.btnMore).apply {
             (menu as? MenuBuilder)?.setOptionalIconsVisible(true)
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 ea93176ad798ad8bee922802e2b428aceede0ed5..b3a82408faf6d00d0c07bd37eebf77d1509fce60 100644
--- a/app/src/main/java/org/futo/circles/view/PostLayout.kt
+++ b/app/src/main/java/org/futo/circles/view/PostLayout.kt
@@ -1,25 +1,24 @@
 package org.futo.circles.view
 
+import android.annotation.SuppressLint
 import android.content.Context
-import android.graphics.drawable.GradientDrawable
 import android.util.AttributeSet
+import android.view.GestureDetector
 import android.view.LayoutInflater
+import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
 import android.widget.FrameLayout
-import androidx.constraintlayout.widget.ConstraintLayout
-import com.blure.complexview.Shadow
 import org.futo.circles.R
 import org.futo.circles.core.extensions.setIsVisible
-import org.futo.circles.databinding.LayoutPostBinding
-import org.futo.circles.extensions.convertDpToPixel
-import org.futo.circles.feature.timeline.post.markdown.MarkdownParser
 import org.futo.circles.core.model.MediaContent
 import org.futo.circles.core.model.PollContent
 import org.futo.circles.core.model.Post
 import org.futo.circles.core.model.PostContent
-import org.futo.circles.model.PostItemPayload
 import org.futo.circles.core.model.TextContent
+import org.futo.circles.databinding.LayoutPostBinding
+import org.futo.circles.feature.timeline.post.markdown.MarkdownParser
+import org.futo.circles.model.PostItemPayload
 import org.matrix.android.sdk.api.session.room.send.SendState
 
 
@@ -42,10 +41,11 @@ interface PostOptionsListener {
     fun onInfoClicked(roomId: String, eventId: String)
 }
 
+@SuppressLint("ClickableViewAccessibility")
 class PostLayout(
     context: Context,
     attrs: AttributeSet? = null,
-) : ConstraintLayout(context, attrs) {
+) : FrameLayout(context, attrs) {
 
     private val binding =
         LayoutPostBinding.inflate(LayoutInflater.from(context), this)
@@ -53,12 +53,39 @@ class PostLayout(
     private var optionsListener: PostOptionsListener? = null
     private var post: Post? = null
 
+    private val gestureDetector =
+        GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
+            override fun onDoubleTap(e: MotionEvent): Boolean {
+                post?.let { optionsListener?.onShowEmoji(it.postInfo.roomId, it.id) }
+                return true
+            }
+
+            override fun onLongPress(e: MotionEvent) {
+                binding.postHeader.showMenu()
+            }
+
+            override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
+                post?.let { optionsListener?.onReply(it.postInfo.roomId, it.id) }
+                return true
+            }
+
+            override fun onDoubleTapEvent(e: MotionEvent) = true
+            override fun onDown(e: MotionEvent) = true
+
+        }).apply {
+            setIsLongpressEnabled(true)
+        }
+
     init {
         binding.lvContent.setOnClickListener {
             post?.let {
                 if (it.content.isMedia()) optionsListener?.onShowPreview(it.postInfo.roomId, it.id)
             }
         }
+        binding.lCard.setOnTouchListener { _, event ->
+            gestureDetector.onTouchEvent(event)
+            false
+        }
     }
 
     fun setListener(postOptionsListener: PostOptionsListener) {
@@ -74,7 +101,6 @@ class PostLayout(
     }
 
     fun setPayload(payload: PostItemPayload) {
-        setShadow(payload.readInfo.shouldIndicateAsNew)
         setSendStatus(payload.sendState, payload.readInfo.readByCount)
         binding.postFooter.setRepliesCount(payload.repliesCount)
     }
@@ -84,10 +110,13 @@ class PostLayout(
         binding.postFooter.setData(data, userPowerLevel, isThread)
         setMentionBorder(data.content)
         setIsEdited(data.postInfo.isEdited)
-        setShadow(data.readInfo.shouldIndicateAsNew)
         setSendStatus(data.sendState, data.readInfo.readByCount)
     }
 
+    private fun setIsEdited(isEdited: Boolean) {
+        binding.tvEditedLabel.setIsVisible(isEdited)
+    }
+
     private fun setMentionBorder(content: PostContent) {
         val hasMention = when (content) {
             is MediaContent -> content.mediaContentInfo.caption?.let {
@@ -97,25 +126,10 @@ class PostLayout(
             is TextContent -> MarkdownParser.hasCurrentUserMention(content.message)
             is PollContent -> false
         }
-        if (hasMention)
-            binding.lCard.setBackgroundResource(R.drawable.bg_mention_highlight)
+        if (hasMention) binding.lCard.setBackgroundResource(R.drawable.bg_mention_highlight)
         else binding.lCard.background = null
     }
 
-    private fun setIsEdited(isEdited: Boolean) {
-        binding.tvEditedLabel.setIsVisible(isEdited)
-    }
-
-    private fun setShadow(isNew: Boolean) {
-        val color = if (isNew) "#0E7AFE" else "#8E8E93"
-        binding.lShadow.shadow =
-            Shadow(
-                1, 255, color, GradientDrawable.RECTANGLE,
-                FloatArray(8) { context.convertDpToPixel(4f) },
-                Shadow.Position.CENTER
-            )
-    }
-
     private fun setSendStatus(sendState: SendState, readByCount: Int) {
         when {
             sendState.isSending() -> {
@@ -141,7 +155,7 @@ class PostLayout(
     }
 
     override fun addView(child: View, index: Int, params: ViewGroup.LayoutParams?) {
-        if (child.id == R.id.lShadow) {
+        if (child.id == R.id.lCard) {
             super.addView(child, index, params)
         } else {
             findViewById<FrameLayout>(R.id.lvContent).addView(child, index, params)
diff --git a/app/src/main/res/color/button_src_state_color.xml b/app/src/main/res/color/button_src_state_color.xml
index 22fd48601102b643d1fbb5c6deabce0de29f4fc5..182d3263bf5b4242f022a4b4609f2ae03a5b1b3b 100644
--- a/app/src/main/res/color/button_src_state_color.xml
+++ b/app/src/main/res/color/button_src_state_color.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="@color/blue" android:state_enabled="true" />
+    <item android:color="@color/menu_icon_color" android:state_enabled="true" />
     <item android:color="@color/gray" />
 </selector>
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_post.xml b/app/src/main/res/layout/layout_post.xml
index fa70ba7868c97aa88bd5efbac06991c8c18e818d..a815b35036314a0d84f9fc1716caddbf0e085dbd 100644
--- a/app/src/main/res/layout/layout_post.xml
+++ b/app/src/main/res/layout/layout_post.xml
@@ -5,124 +5,89 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
-    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+    tools:parentTag="android.widget.FrameLayout">
 
 
-    <com.blure.complexview.ComplexView
-        android:id="@+id/lShadow"
-        android:layout_width="0dp"
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/lCard"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        app:radius="4dp"
-        app:shadow="true"
-        app:shadowColor="#0E7AFE"
-        app:shadowSpread="1">
+        android:clickable="true"
+        android:focusable="true"
+        android:foreground="?selectableItemBackground">
 
-        <com.blure.complexview.ComplexView
-            android:layout_width="match_parent"
+        <org.futo.circles.view.PostHeaderView
+            android:id="@+id/postHeader"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            app:color="@color/post_card_background_color"
-            app:radius="4dp">
+            android:layout_marginHorizontal="8dp"
+            android:layout_marginTop="8dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:id="@+id/lCard"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
 
-                <androidx.constraintlayout.widget.Guideline
-                    android:id="@+id/guidelineStart"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical"
-                    app:layout_constraintGuide_begin="8dp" />
-
-                <androidx.constraintlayout.widget.Guideline
-                    android:id="@+id/guidelineEnd"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical"
-                    app:layout_constraintGuide_end="8dp" />
-
-                <androidx.constraintlayout.widget.Guideline
-                    android:id="@+id/guidelineTop"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:orientation="horizontal"
-                    app:layout_constraintGuide_begin="8dp" />
-
-                <org.futo.circles.view.PostHeaderView
-                    android:id="@+id/postHeader"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
-                    app:layout_constraintStart_toStartOf="@id/guidelineStart"
-                    app:layout_constraintTop_toTopOf="@id/guidelineTop" />
-
-
-                <FrameLayout
-                    android:id="@+id/lvContent"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="8dp"
-                    android:clickable="true"
-                    android:focusable="true"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@id/postHeader" />
-
-                <LinearLayout
-                    android:id="@+id/lReadInfo"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:orientation="horizontal"
-                    app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
-                    app:layout_constraintTop_toBottomOf="@id/lvContent">
-
-                    <ImageView
-                        android:id="@+id/ivSendStatus"
-                        android:layout_width="14dp"
-                        android:layout_height="14dp"
-                        android:layout_gravity="bottom"
-                        android:layout_marginEnd="2dp"
-                        android:src="@drawable/ic_sending" />
-
-                    <TextView
-                        android:id="@+id/tvReadByCount"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_marginEnd="4dp"
-                        android:lines="1"
-                        android:textSize="12sp"
-                        app:layout_goneMarginEnd="0dp"
-                        tools:text="12" />
-
-                    <TextView
-                        android:id="@+id/tvEditedLabel"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:lines="1"
-                        android:text="@string/edited_label"
-                        android:textSize="12sp"
-                        android:visibility="gone"
-                        tools:visibility="visible" />
-
-                </LinearLayout>
-
-                <org.futo.circles.view.PostFooterView
-                    android:id="@+id/postFooter"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
-                    app:layout_constraintStart_toStartOf="@id/guidelineStart"
-                    app:layout_constraintTop_toBottomOf="@id/lReadInfo"
-                    app:layout_goneMarginTop="8dp" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
-
-        </com.blure.complexview.ComplexView>
-    </com.blure.complexview.ComplexView>
+        <FrameLayout
+            android:id="@+id/lvContent"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="8dp"
+            android:clickable="true"
+            android:focusable="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/postHeader" />
+
+        <LinearLayout
+            android:id="@+id/lReadInfo"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="8dp"
+            android:orientation="horizontal"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/lvContent">
+
+            <ImageView
+                android:id="@+id/ivSendStatus"
+                android:layout_width="14dp"
+                android:layout_height="14dp"
+                android:layout_gravity="bottom"
+                android:layout_marginEnd="2dp"
+                android:src="@drawable/ic_sending" />
+
+            <TextView
+                android:id="@+id/tvReadByCount"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="4dp"
+                android:lines="1"
+                android:textSize="12sp"
+                app:layout_goneMarginEnd="0dp"
+                tools:text="12" />
+
+            <TextView
+                android:id="@+id/tvEditedLabel"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:lines="1"
+                android:text="@string/edited_label"
+                android:textSize="12sp"
+                android:visibility="gone"
+                tools:visibility="visible" />
+
+        </LinearLayout>
+
+        <org.futo.circles.view.PostFooterView
+            android:id="@+id/postFooter"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="8dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/lReadInfo"
+            app:layout_goneMarginTop="8dp" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
 </merge>
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_post_footer.xml b/app/src/main/res/layout/view_post_footer.xml
index 96cc5b6d1c40f80c5378b910a9a4a51fc49c05b6..a1bef382bcd6e0957329fc08897dc33422a3cf7a 100644
--- a/app/src/main/res/layout/view_post_footer.xml
+++ b/app/src/main/res/layout/view_post_footer.xml
@@ -6,26 +6,15 @@
     android:layout_height="wrap_content"
     tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
 
-    <View
-        android:id="@+id/divider"
-        android:layout_width="0dp"
-        android:layout_height="@dimen/divider_height"
-        android:background="@color/divider_color"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
 
     <HorizontalScrollView
         android:id="@+id/chipsScrollView"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="@id/btnLike"
         app:layout_constraintEnd_toStartOf="@id/btnLike"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="@id/btnLike"
-        tools:visibility="visible">
+        app:layout_constraintTop_toTopOf="@id/btnLike">
 
         <LinearLayout
             android:id="@+id/lReactions"
@@ -36,15 +25,22 @@
 
     </HorizontalScrollView>
 
-    <ImageButton
+    <com.google.android.material.button.MaterialButton
         android:id="@+id/btnLike"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="2dp"
         android:layout_marginEnd="8dp"
         android:background="?selectableItemBackgroundBorderless"
-        android:padding="8dp"
-        android:src="@drawable/ic_emoji"
+        android:gravity="top"
+        android:minWidth="0dp"
+        android:minHeight="0dp"
+        android:paddingHorizontal="8dp"
+        app:icon="@drawable/ic_emoji"
+        app:iconGravity="textStart"
+        app:iconPadding="0dp"
+        app:iconSize="20dp"
+        app:iconTint="@color/button_src_state_color"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@id/btnReply"
         app:layout_constraintStart_toEndOf="@id/chipsScrollView"
@@ -55,6 +51,7 @@
         android:id="@+id/btnReply"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_marginEnd="6dp"
         android:background="?selectableItemBackgroundBorderless"
         android:gravity="top"
         android:minWidth="0dp"
@@ -62,9 +59,11 @@
         android:padding="2dp"
         android:textAlignment="gravity"
         android:textColor="@color/button_src_state_color"
-        android:textSize="16sp"
+        android:textSize="14sp"
+        app:iconPadding="2dp"
         app:icon="@drawable/ic_reply"
         app:iconGravity="textStart"
+        app:iconSize="20dp"
         app:iconTint="@color/button_src_state_color"
         app:layout_constraintBottom_toBottomOf="@id/btnLike"
         app:layout_constraintEnd_toStartOf="@id/btnShare"
@@ -73,18 +72,25 @@
         app:tint="@color/button_src_state_color"
         tools:text="30" />
 
-    <ImageButton
+    <com.google.android.material.button.MaterialButton
         android:id="@+id/btnShare"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginEnd="8dp"
         android:background="?selectableItemBackgroundBorderless"
-        android:padding="8dp"
-        android:src="@drawable/ic_share"
+        android:gravity="top"
+        android:minWidth="0dp"
+        android:minHeight="0dp"
+        android:paddingHorizontal="8dp"
+        app:icon="@drawable/ic_share"
+        app:iconGravity="textStart"
+        app:iconPadding="0dp"
+        app:iconSize="20dp"
+        app:iconTint="@color/button_src_state_color"
         app:layout_constraintBottom_toBottomOf="@id/btnLike"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toEndOf="@id/btnReply"
         app:layout_constraintTop_toTopOf="@id/btnLike"
-        app:tint="@color/blue" />
+        app:tint="@color/menu_icon_color" />
 
 </merge>
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_post_header.xml b/app/src/main/res/layout/view_post_header.xml
index 24a0c2e06faab0b2340e8e6831494320837c747e..2f48f019247fce500fa6c793d8c2ce7c0b60b4a6 100644
--- a/app/src/main/res/layout/view_post_header.xml
+++ b/app/src/main/res/layout/view_post_header.xml
@@ -88,6 +88,6 @@
         android:src="@drawable/ic_more"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:tint="@color/blue" />
+        app:tint="@color/menu_icon_color" />
 
 </merge>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 15639ec4d44bb63f9ea9f51ab1e56a5f7719de28..dd7e0e09b97aa6f163fdb31c56b390b320d49c2d 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -18,7 +18,7 @@
     <color name="gray">#8E8E93</color>
     <color name="close_background">#80000000</color>
     <color name="list_item_icon_color">@color/black</color>
-    <color name="highlight_color">#330E7AFE</color>
+    <color name="highlight_color">#4D0E7AFE</color>
     <color name="chip_selected_color">#800E7AFE</color>
     <color name="launcher_background_color">#00008b</color>
     <color name="transparent">#00000000</color>