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 ac79fc8929fadf55b273f0f679839ccc6497fbfa..ef7d1a58ccd40e7b94ef0fca36f16e3fa6bb9583 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
@@ -71,11 +71,7 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
     }
 
     private val listAdapter by lazy {
-        TimelineAdapter(
-            getCurrentUserPowerLevel(args.roomId),
-            this,
-            isThread
-        ) { loadMoreDebounce(Unit) }.apply {
+        TimelineAdapter(this, isThread) { loadMoreDebounce(Unit) }.apply {
             setHasStableIds(true)
             registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
                 override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
@@ -216,6 +212,7 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
 
     override fun onShowEmoji(roomId: String, eventId: String, onAddEmoji: (String) -> Unit) {
         if (showNoInternetConnection()) return
+        if (showErrorIfNotAbleToPost()) return
         onLocalAddEmojiCallback = onAddEmoji
         navigator.navigateToShowEmoji(roomId, eventId)
     }
@@ -246,16 +243,14 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
         roomId: String, eventId: String, emoji: String, isUnSend: Boolean
     ) {
         if (showNoInternetConnection()) return
-        if (viewModel.accessLevelLiveData.value?.isCurrentUserAbleToPost() != true) {
-            showError(getString(R.string.you_can_not_post_to_this_room))
-            return
-        }
+        if (showErrorIfNotAbleToPost()) return
         if (isUnSend) viewModel.unSendReaction(roomId, eventId, emoji)
         else viewModel.sendReaction(roomId, eventId, emoji)
     }
 
     override fun onPollOptionSelected(roomId: String, eventId: String, optionId: String) {
         if (showNoInternetConnection()) return
+        if (showErrorIfNotAbleToPost()) return
         viewModel.pollVote(roomId, eventId, optionId)
     }
 
@@ -320,7 +315,12 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
     private fun onUserAccessLevelChanged(powerLevelsContent: PowerLevelsContent) {
         if (isGroupMode) onGroupUserAccessLevelChanged(powerLevelsContent)
         else onCircleUserAccessLeveChanged(powerLevelsContent)
-        listAdapter.updateUserPowerLevel(getCurrentUserPowerLevel(args.roomId))
+    }
+
+    private fun showErrorIfNotAbleToPost(): Boolean {
+        val isAbleToPost = viewModel.accessLevelLiveData.value?.isCurrentUserAbleToPost() == true
+        if (!isAbleToPost) showError(getString(R.string.you_can_not_post_to_this_room))
+        return !isAbleToPost
     }
 
     private fun onGroupUserAccessLevelChanged(powerLevelsContent: PowerLevelsContent) {
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineAdapter.kt b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineAdapter.kt
index d94c4652a3e42f43828bc071c7a28f3dcc09921c..a2e48feaec5b35bb58e5ad5ff0164938efd3de29 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineAdapter.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineAdapter.kt
@@ -1,6 +1,5 @@
 package org.futo.circles.feature.timeline.list
 
-import android.annotation.SuppressLint
 import android.view.ViewGroup
 import org.futo.circles.core.base.list.BaseRvAdapter
 import org.futo.circles.core.feature.timeline.data_source.BaseTimelineDataSource
@@ -10,7 +9,6 @@ import org.futo.circles.model.PostItemPayload
 import org.futo.circles.view.PostOptionsListener
 
 class TimelineAdapter(
-    private var userPowerLevel: Int,
     private val postOptionsListener: PostOptionsListener,
     private val isThread: Boolean,
     private val onLoadMore: () -> Unit
@@ -24,12 +22,6 @@ class TimelineAdapter(
     )
 }) {
 
-    @SuppressLint("NotifyDataSetChanged")
-    fun updateUserPowerLevel(level: Int) {
-        userPowerLevel = level
-        notifyDataSetChanged()
-    }
-
     override fun getItemId(position: Int): Long = getItem(position).id.hashCode().toLong()
 
     override fun getItemViewType(position: Int): Int = getItem(position).content.type.ordinal
@@ -45,7 +37,7 @@ class TimelineAdapter(
     }
 
     override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
-        holder.bind(getItem(position), userPowerLevel)
+        holder.bind(getItem(position))
         if (position >= itemCount - BaseTimelineDataSource.LOAD_MORE_THRESHOLD) onLoadMore()
     }
 
@@ -59,7 +51,7 @@ class TimelineAdapter(
         } else {
             payloads.forEach {
                 val payload = (it as? PostItemPayload) ?: return@forEach
-                if (payload.needToUpdateFullItem) holder.bind(getItem(position), userPowerLevel)
+                if (payload.needToUpdateFullItem) holder.bind(getItem(position))
                 else holder.bindPayload(payload)
             }
         }
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt
index fd2366a96746e65a7cb701a4e0ae2531dac2a95f..963a2cd832282abf0d54695cbfe1bf8f8cc1dba5 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt
@@ -8,6 +8,7 @@ import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
+import androidx.annotation.CallSuper
 import androidx.core.view.updateLayoutParams
 import androidx.recyclerview.widget.RecyclerView
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -36,8 +37,9 @@ sealed class PostViewHolder(view: View, private val isThread: Boolean) :
 
     abstract val postLayout: PostLayout
 
-    open fun bind(post: Post, userPowerLevel: Int) {
-        postLayout.setData(post, userPowerLevel, isThread)
+    @CallSuper
+    open fun bind(post: Post) {
+        postLayout.setData(post, isThread)
     }
 
     fun bindPayload(payload: PostItemPayload) {
@@ -94,8 +96,8 @@ class TextMediaPostViewHolder(
             .show()
     }
 
-    override fun bind(post: Post, userPowerLevel: Int) {
-        super.bind(post, userPowerLevel)
+    override fun bind(post: Post) {
+        super.bind(post)
         binding.vLoadingView.gone()
         when (val content = post.content) {
             is TextContent -> bindTextPost(content)
@@ -159,8 +161,8 @@ class PollPostViewHolder(
         binding.lPollPost.setListener(postOptionsListener)
     }
 
-    override fun bind(post: Post, userPowerLevel: Int) {
-        super.bind(post, userPowerLevel)
+    override fun bind(post: Post) {
+        super.bind(post)
         (post.content as? PollContent)?.let {
             binding.pollContentView.setup(it) { optionId ->
                 postOptionsListener.onPollOptionSelected(post.postInfo.roomId, post.id, optionId)
diff --git a/app/src/main/java/org/futo/circles/view/PostFooterView.kt b/app/src/main/java/org/futo/circles/view/PostFooterView.kt
index ad29fbbe7854028db59c95fd0ab30f863e2eec91..484fcbfcf583aa0fb9dfa299cf094f421b44919d 100644
--- a/app/src/main/java/org/futo/circles/view/PostFooterView.kt
+++ b/app/src/main/java/org/futo/circles/view/PostFooterView.kt
@@ -7,6 +7,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.core.view.children
 import androidx.core.view.isVisible
 import org.futo.circles.core.base.NetworkObserver
+import org.futo.circles.core.extensions.getCurrentUserPowerLevel
 import org.futo.circles.core.extensions.setIsVisible
 import org.futo.circles.core.model.Post
 import org.futo.circles.core.model.ReactionsData
@@ -25,7 +26,6 @@ class PostFooterView(
     private var optionsListener: PostOptionsListener? = null
     private var post: Post? = null
     private var isThreadPost = false
-    private var userPowerLevel: Int = Role.Default.value
 
     init {
         setupViews()
@@ -56,9 +56,8 @@ class PostFooterView(
         optionsListener = postOptionsListener
     }
 
-    fun setData(data: Post, powerLevel: Int, isThread: Boolean) {
+    fun setData(data: Post, isThread: Boolean) {
         post = data
-        userPowerLevel = powerLevel
         isThreadPost = isThread
         bindViewData(data.repliesCount, data.canShare())
         bindReactionsList(data.reactionsData)
@@ -70,12 +69,9 @@ class PostFooterView(
         bindReactionsList(reactions)
     }
 
-    fun areUserAbleToPost() = userPowerLevel >= Role.Default.value
-
     private fun bindViewData(repliesCount: Int, canShare: Boolean) {
         with(binding) {
             btnShare.setIsVisible(canShare)
-            btnLike.isEnabled = areUserAbleToPost()
             btnReply.apply {
                 isVisible = !isThreadPost
                 setRepliesCount(repliesCount)
@@ -111,7 +107,7 @@ class PostFooterView(
 
     private fun locallyUpdateEmojisList(view: ReactionItemView, reaction: ReactionsData) {
         if (!NetworkObserver.isConnected()) return
-        if (areUserAbleToPost().not()) return
+        if (!isAbleToPost()) return
         if (reaction.addedByMe) {
             if (reaction.count == 1) {
                 binding.lEmojisContainer.removeView(view)
@@ -139,5 +135,7 @@ class PostFooterView(
         }
     }
 
+    private fun isAbleToPost() =
+        getCurrentUserPowerLevel(post?.postInfo?.roomId ?: "") >= Role.Default.value
 
 }
\ No newline at end of file
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 1dbcb5bf94fee01cd227aa7b2d731ebf366d3706..e9b15ff219670e38eb5bc06b0245b9d492c11a9e 100644
--- a/app/src/main/java/org/futo/circles/view/PostLayout.kt
+++ b/app/src/main/java/org/futo/circles/view/PostLayout.kt
@@ -49,12 +49,11 @@ class PostLayout(
     private val gestureDetector =
         GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
             override fun onDoubleTap(e: MotionEvent): Boolean {
-                if (binding.postFooter.areUserAbleToPost())
-                    post?.let {
-                        optionsListener?.onShowEmoji(it.postInfo.roomId, it.id) { emoji ->
-                            binding.postFooter.addEmojiFromPickerLocalUpdate(emoji)
-                        }
+                post?.let {
+                    optionsListener?.onShowEmoji(it.postInfo.roomId, it.id) { emoji ->
+                        binding.postFooter.addEmojiFromPickerLocalUpdate(emoji)
                     }
+                }
                 return true
             }
 
@@ -89,9 +88,9 @@ class PostLayout(
     }
 
 
-    fun setData(data: Post, userPowerLevel: Int, isThread: Boolean) {
+    fun setData(data: Post, isThread: Boolean) {
         post = data
-        setGeneralMessageData(data, userPowerLevel, isThread)
+        setGeneralMessageData(data, isThread)
     }
 
     fun setPayload(payload: PostItemPayload) {
@@ -118,9 +117,9 @@ class PostLayout(
         }
     }
 
-    private fun setGeneralMessageData(data: Post, userPowerLevel: Int, isThread: Boolean) {
+    private fun setGeneralMessageData(data: Post, isThread: Boolean) {
         binding.postHeader.setData(data)
-        binding.postFooter.setData(data, userPowerLevel, isThread)
+        binding.postFooter.setData(data, isThread)
         setMentionBorder(data.content)
         setIsEdited(data.postInfo.isEdited)
         setSendStatus(data.sendState, data.readByCount)