diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt
index 56fd01480..841a02a88 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt
@@ -13,13 +13,17 @@ import com.nextcloud.talk.R
 import com.nextcloud.talk.application.NextcloudTalkApplication
 import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.databinding.PollResultVoterItemBinding
+import com.nextcloud.talk.extensions.loadFederatedUserAvatar
 import com.nextcloud.talk.extensions.loadGuestAvatar
 import com.nextcloud.talk.extensions.loadUserAvatar
+import com.nextcloud.talk.models.json.participants.Participant
 import com.nextcloud.talk.polls.model.PollDetails
 import com.nextcloud.talk.ui.theme.ViewThemeUtils
+import com.nextcloud.talk.utils.DisplayUtils
 
 class PollResultVoterViewHolder(
     private val user: User,
+    private val roomToken: String,
     override val binding: PollResultVoterItemBinding,
     private val viewThemeUtils: ViewThemeUtils
 ) : PollResultViewHolder(binding) {
@@ -36,14 +40,33 @@ class PollResultVoterViewHolder(
     }
 
     private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) {
-        if (pollDetail.actorType == "guests") {
-            var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
-            if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
-                displayName = pollDetail.actorDisplayName!!
+        when (pollDetail.actorType) {
+            Participant.ActorType.GUESTS -> {
+                var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
+                if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
+                    displayName = pollDetail.actorDisplayName!!
+                }
+                avatar.loadGuestAvatar(user, displayName!!, false)
             }
-            avatar.loadGuestAvatar(user, displayName!!, false)
-        } else if (pollDetail.actorType == "users") {
-            avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false)
+
+            Participant.ActorType.USERS -> {
+                avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false)
+            }
+
+            Participant.ActorType.FEDERATED -> {
+                val darkTheme = if (DisplayUtils.isDarkModeOn(binding.root.context)) 1 else 0
+                avatar.loadFederatedUserAvatar(
+                    user,
+                    user.baseUrl!!,
+                    roomToken,
+                    pollDetail.actorId!!,
+                    darkTheme,
+                    false,
+                    false
+                )
+            }
+
+            else -> {}
         }
     }
 }
diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt
index 3f6f809a5..5b3184e49 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt
@@ -16,12 +16,16 @@ import com.nextcloud.talk.R
 import com.nextcloud.talk.application.NextcloudTalkApplication
 import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.databinding.PollResultVotersOverviewItemBinding
+import com.nextcloud.talk.extensions.loadFederatedUserAvatar
 import com.nextcloud.talk.extensions.loadGuestAvatar
 import com.nextcloud.talk.extensions.loadUserAvatar
+import com.nextcloud.talk.models.json.participants.Participant
 import com.nextcloud.talk.polls.model.PollDetails
+import com.nextcloud.talk.utils.DisplayUtils
 
 class PollResultVotersOverviewViewHolder(
     private val user: User,
+    private val roomToken: String,
     override val binding: PollResultVotersOverviewItemBinding
 ) : PollResultViewHolder(binding) {
 
@@ -66,14 +70,33 @@ class PollResultVotersOverviewViewHolder(
     }
 
     private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) {
-        if (pollDetail.actorType == "guests") {
-            var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
-            if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
-                displayName = pollDetail.actorDisplayName!!
+        when (pollDetail.actorType) {
+            Participant.ActorType.GUESTS -> {
+                var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
+                if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
+                    displayName = pollDetail.actorDisplayName!!
+                }
+                avatar.loadGuestAvatar(user, displayName!!, false)
             }
-            avatar.loadGuestAvatar(user, displayName!!, false)
-        } else if (pollDetail.actorType == "users") {
-            avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false)
+
+            Participant.ActorType.USERS -> {
+                avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false)
+            }
+
+            Participant.ActorType.FEDERATED -> {
+                val darkTheme = if (DisplayUtils.isDarkModeOn(binding.root.context)) 1 else 0
+                avatar.loadFederatedUserAvatar(
+                    user,
+                    user.baseUrl!!,
+                    roomToken,
+                    pollDetail.actorId!!,
+                    darkTheme,
+                    false,
+                    false
+                )
+            }
+
+            else -> {}
         }
     }
 
diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt
index 82f3be807..6ca1b1f98 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt
@@ -17,6 +17,7 @@ import com.nextcloud.talk.ui.theme.ViewThemeUtils
 
 class PollResultsAdapter(
     private val user: User,
+    private val roomToken: String,
     private val clickListener: PollResultItemClickListener,
     private val viewThemeUtils: ViewThemeUtils
 ) : RecyclerView.Adapter<PollResultViewHolder>() {
@@ -40,7 +41,7 @@ class PollResultsAdapter(
                     parent,
                     false
                 )
-                viewHolder = PollResultVoterViewHolder(user, itemBinding, viewThemeUtils)
+                viewHolder = PollResultVoterViewHolder(user, roomToken, itemBinding, viewThemeUtils)
             }
             PollResultVotersOverviewItem.VIEW_TYPE -> {
                 val itemBinding = PollResultVotersOverviewItemBinding.inflate(
@@ -48,7 +49,7 @@ class PollResultsAdapter(
                     parent,
                     false
                 )
-                viewHolder = PollResultVotersOverviewViewHolder(user, itemBinding)
+                viewHolder = PollResultVotersOverviewViewHolder(user, roomToken, itemBinding)
             }
         }
         return viewHolder!!
diff --git a/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt b/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt
index 939186a61..c1a1e98a4 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt
@@ -6,12 +6,14 @@
  */
 package com.nextcloud.talk.polls.model
 
+import com.nextcloud.talk.models.json.participants.Participant
+
 data class Poll(
     val id: String,
     val question: String?,
     val options: List<String>?,
     val votes: Map<String, Int>?,
-    val actorType: String?,
+    val actorType: Participant.ActorType?,
     val actorId: String?,
     val actorDisplayName: String?,
     val status: Int,
diff --git a/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt b/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt
index 2e36d96b5..63d704bc1 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt
@@ -6,8 +6,10 @@
  */
 package com.nextcloud.talk.polls.model
 
+import com.nextcloud.talk.models.json.participants.Participant
+
 data class PollDetails(
-    val actorType: String?,
+    val actorType: Participant.ActorType?,
     val actorId: String?,
     val actorDisplayName: String?,
     val optionId: Int
diff --git a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt
index b052296f0..24e8fa5aa 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt
@@ -9,13 +9,15 @@ package com.nextcloud.talk.polls.repositories.model
 import android.os.Parcelable
 import com.bluelinelabs.logansquare.annotation.JsonField
 import com.bluelinelabs.logansquare.annotation.JsonObject
+import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter
+import com.nextcloud.talk.models.json.participants.Participant
 import kotlinx.parcelize.Parcelize
 
 @Parcelize
 @JsonObject
 data class PollDetailsResponse(
-    @JsonField(name = ["actorType"])
-    var actorType: String? = null,
+    @JsonField(name = ["actorType"], typeConverter = EnumActorTypeConverter::class)
+    var actorType: Participant.ActorType? = null,
 
     @JsonField(name = ["actorId"])
     var actorId: String,
diff --git a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt
index 2531eb069..e406fbbd2 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt
@@ -9,6 +9,8 @@ package com.nextcloud.talk.polls.repositories.model
 import android.os.Parcelable
 import com.bluelinelabs.logansquare.annotation.JsonField
 import com.bluelinelabs.logansquare.annotation.JsonObject
+import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter
+import com.nextcloud.talk.models.json.participants.Participant
 import kotlinx.parcelize.Parcelize
 
 @Parcelize
@@ -26,8 +28,8 @@ data class PollResponse(
     @JsonField(name = ["votes"])
     var votes: Map<String, Int>? = null,
 
-    @JsonField(name = ["actorType"])
-    var actorType: String? = null,
+    @JsonField(name = ["actorType"], typeConverter = EnumActorTypeConverter::class)
+    var actorType: Participant.ActorType? = null,
 
     @JsonField(name = ["actorId"])
     var actorId: String? = null,
diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt
index 3218cc3b4..48b4ceaba 100644
--- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt
+++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt
@@ -68,11 +68,17 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener {
         }
 
         viewModel.items.observe(viewLifecycleOwner) {
-            val adapter = PollResultsAdapter(parentViewModel.user, this, viewThemeUtils).apply {
-                if (it != null) {
-                    list = it
+            val adapter = PollResultsAdapter(
+                parentViewModel.user,
+                parentViewModel.roomToken,
+                this,
+                viewThemeUtils
+            )
+                .apply {
+                    if (it != null) {
+                        list = it
+                    }
                 }
-            }
             binding.pollResultsList.adapter = adapter
         }
 
@@ -85,7 +91,12 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener {
     }
 
     private fun initAdapter() {
-        adapter = PollResultsAdapter(parentViewModel.user, this, viewThemeUtils)
+        adapter = PollResultsAdapter(
+            parentViewModel.user,
+            parentViewModel.roomToken,
+            this,
+            viewThemeUtils
+        )
         binding.pollResultsList.adapter = adapter
         binding.pollResultsList.layoutManager = LinearLayoutManager(context)
     }