diff --git a/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt b/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt
index 5ec366f1c79cf4443341b02dacb0a9a400bd1443..ad6bd936a0d9819c6b6d69214a652c16ae02fd5e 100644
--- a/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt
@@ -9,19 +9,17 @@ import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.emptyFlow
 import kotlinx.coroutines.flow.flowOn
 import org.futo.circles.core.extensions.getOrThrow
 import org.futo.circles.core.mapping.toSelectableRoomListItem
 import org.futo.circles.core.model.CircleRoomTypeArg
-import org.futo.circles.core.model.GALLERY_TYPE
-import org.futo.circles.core.model.GROUP_TYPE
 import org.futo.circles.core.model.SelectableRoomListItem
-import org.futo.circles.core.provider.MatrixSessionProvider
+import org.futo.circles.core.utils.getGalleriesLiveData
+import org.futo.circles.core.utils.getGroupsLiveData
+import org.futo.circles.core.utils.getSpacesLiveData
 import org.futo.circles.feature.circles.CirclesDataSource
 import org.matrix.android.sdk.api.session.room.model.Membership
 import org.matrix.android.sdk.api.session.room.model.RoomSummary
-import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
 import javax.inject.Inject
 
 @ViewModelScoped
@@ -35,8 +33,6 @@ class SelectRoomsDataSource @Inject constructor(
         CircleRoomTypeArg.entries.firstOrNull { it.ordinal == ordinal }
             ?: CircleRoomTypeArg.Circle
 
-    private val session by lazy { MatrixSessionProvider.currentSession }
-
     private val selectedRoomsFlow = MutableStateFlow<List<SelectableRoomListItem>>(emptyList())
     val roomsFlow = getMergedRoomsListFlow()
 
@@ -48,11 +44,16 @@ class SelectRoomsDataSource @Inject constructor(
     private fun getRoomsFlowWithType(): Flow<List<RoomSummary>> = when (roomType) {
         CircleRoomTypeArg.Circle -> {
             val joinedCirclesIds = circleDataSource.getJoinedCirclesIds()
-            getFilteredRoomsFlow { circleDataSource.isJoinedCircle(it, joinedCirclesIds) }
+            getSpacesLiveData(listOf(Membership.JOIN)).map { summaries ->
+                summaries.mapNotNull { summary ->
+                    if (joinedCirclesIds.contains(summary.roomId)) summary
+                    else null
+                }
+            }.asFlow()
         }
 
-        CircleRoomTypeArg.Group -> getFilteredRoomsFlow { (it.roomType == GROUP_TYPE && it.membership == Membership.JOIN) }
-        CircleRoomTypeArg.Photo -> getFilteredRoomsFlow { (it.roomType == GALLERY_TYPE && it.membership == Membership.JOIN) }
+        CircleRoomTypeArg.Group -> getGroupsLiveData(listOf(Membership.JOIN)).asFlow()
+        CircleRoomTypeArg.Photo -> getGalleriesLiveData(listOf(Membership.JOIN)).asFlow()
     }
 
     fun getSelectedRooms() = selectedRoomsFlow.value.filter { it.isSelected }
@@ -64,13 +65,6 @@ class SelectRoomsDataSource @Inject constructor(
         selectedRoomsFlow.value = list
     }
 
-    private fun getFilteredRoomsFlow(filter: (summary: RoomSummary) -> Boolean) =
-        session?.roomService()?.getRoomSummariesLive(roomSummaryQueryParams {
-            excludeType = null
-        })?.map { summaries ->
-            summaries.mapNotNull { summary -> if (filter(summary)) summary else null }
-        }?.asFlow() ?: emptyFlow()
-
     private fun List<SelectableRoomListItem>.containsWithId(id: String) =
         firstOrNull { it.id == id } != null
 }
\ No newline at end of file