diff --git a/CHANGES.md b/CHANGES.md
index b447b6e6e5..a99b4baf68 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -2,7 +2,7 @@ Changes in Element 1.1.7 (2021-XX-XX)
 ===================================================
 
 Features ✨:
- -
+ - Spaces beta
 
 Improvements 🙌:
  -
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomAggregateNotificationCount.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomAggregateNotificationCount.kt
index 066178b1ec..b3440059e8 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomAggregateNotificationCount.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomAggregateNotificationCount.kt
@@ -20,6 +20,6 @@ data class RoomAggregateNotificationCount(
         val notificationCount: Int,
         val highlightCount: Int
 ) {
-    val totalCount = notificationCount + highlightCount
+    val totalCount = notificationCount
     val isHighlight = highlightCount > 0
 }
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt
index dae2c0838e..56eb3db236 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt
@@ -349,6 +349,29 @@ internal class RoomSummaryUpdater @Inject constructor(
 //                        Timber.v("## SPACES: flatten of ${dmRoom.otherMemberIds.joinToString(",")} is ${dmRoom.flattenParentIds}")
                     }
 
+            // Maybe a good place to count the number of notifications for spaces?
+
+            realm.where(RoomSummaryEntity::class.java)
+                    .process(RoomSummaryEntityFields.MEMBERSHIP_STR, Membership.activeMemberships())
+                    .equalTo(RoomSummaryEntityFields.ROOM_TYPE, RoomType.SPACE)
+                    .findAll().forEach { space ->
+                        // get all children
+                        var highlightCount = 0
+                        var notificationCount = 0
+                        realm.where(RoomSummaryEntity::class.java)
+                                .process(RoomSummaryEntityFields.MEMBERSHIP_STR, listOf(Membership.JOIN))
+                                .notEqualTo(RoomSummaryEntityFields.ROOM_TYPE, RoomType.SPACE)
+                                .contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, space.roomId)
+                                .findAll().forEach {
+                                    highlightCount += it.highlightCount
+                                    notificationCount += it.notificationCount
+                                }
+
+                        space.highlightCount = highlightCount
+                        space.notificationCount = notificationCount
+                    }
+            // xxx invites??
+
             // LEGACY GROUPS
             // lets mark rooms that belongs to groups
             val existingGroups = GroupSummaryEntity.where(realm).findAll()
diff --git a/vector/src/main/java/im/vector/app/features/grouplist/HomeSpaceSummaryItem.kt b/vector/src/main/java/im/vector/app/features/grouplist/HomeSpaceSummaryItem.kt
index 9912564720..553f82e98f 100644
--- a/vector/src/main/java/im/vector/app/features/grouplist/HomeSpaceSummaryItem.kt
+++ b/vector/src/main/java/im/vector/app/features/grouplist/HomeSpaceSummaryItem.kt
@@ -28,6 +28,7 @@ import im.vector.app.R
 import im.vector.app.core.epoxy.VectorEpoxyHolder
 import im.vector.app.core.epoxy.VectorEpoxyModel
 import im.vector.app.core.platform.CheckableConstraintLayout
+import im.vector.app.features.home.room.list.UnreadCounterBadgeView
 import im.vector.app.features.themes.ThemeUtils
 
 @EpoxyModelClass(layout = R.layout.item_space)
@@ -35,6 +36,7 @@ abstract class HomeSpaceSummaryItem : VectorEpoxyModel<HomeSpaceSummaryItem.Hold
 
     @EpoxyAttribute var selected: Boolean = false
     @EpoxyAttribute var listener: (() -> Unit)? = null
+    @EpoxyAttribute var countState : UnreadCounterBadgeView.State = UnreadCounterBadgeView.State(0, false)
 
     override fun getViewType(): Int {
         // mm.. it's reusing the same layout for basic space item
@@ -52,6 +54,8 @@ abstract class HomeSpaceSummaryItem : VectorEpoxyModel<HomeSpaceSummaryItem.Hold
         holder.avatarImageView.imageTintList = ColorStateList.valueOf(ThemeUtils.getColor(holder.view.context, R.attr.riot_primary_text_color))
         holder.avatarImageView.scaleType = ImageView.ScaleType.CENTER_INSIDE
         holder.leaveView.isVisible = false
+
+        holder.counterBadgeView.render(countState)
     }
 
     class Holder : VectorEpoxyHolder() {
@@ -59,5 +63,6 @@ abstract class HomeSpaceSummaryItem : VectorEpoxyModel<HomeSpaceSummaryItem.Hold
         val groupNameView by bind<TextView>(R.id.groupNameView)
         val rootView by bind<CheckableConstraintLayout>(R.id.itemGroupLayout)
         val leaveView by bind<ImageView>(R.id.groupTmpLeave)
+        val counterBadgeView by bind<UnreadCounterBadgeView>(R.id.groupCounterBadge)
     }
 }
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
index 607a1aeb54..36bf32919c 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
@@ -22,7 +22,6 @@ import android.view.Menu
 import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
-import android.widget.ImageView
 import androidx.core.content.ContextCompat
 import androidx.core.view.isVisible
 import com.airbnb.mvrx.activityViewModel
@@ -32,7 +31,6 @@ import com.google.android.material.badge.BadgeDrawable
 import im.vector.app.R
 import im.vector.app.core.extensions.commitTransaction
 import im.vector.app.core.extensions.toMvRxBundle
-import im.vector.app.core.glide.GlideApp
 import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.core.platform.VectorBaseFragment
@@ -56,14 +54,9 @@ import im.vector.app.features.workers.signout.ServerBackupStatusViewModel
 import im.vector.app.features.workers.signout.ServerBackupStatusViewState
 import org.matrix.android.sdk.api.session.group.model.GroupSummary
 import org.matrix.android.sdk.api.session.room.model.RoomSummary
-import org.matrix.android.sdk.api.util.toMatrixItem
 import org.matrix.android.sdk.internal.crypto.model.rest.DeviceInfo
 import javax.inject.Inject
 
-private const val INDEX_PEOPLE = 0
-private const val INDEX_ROOMS = 1
-private const val INDEX_CATCHUP = 2
-
 class HomeDetailFragment @Inject constructor(
         val homeDetailViewModelFactory: HomeDetailViewModel.Factory,
         private val serverBackupStatusViewModelFactory: ServerBackupStatusViewModel.Factory,
@@ -251,19 +244,8 @@ class HomeDetailFragment @Inject constructor(
     private fun onGroupChange(groupSummary: GroupSummary?) {
         groupSummary ?: return
         if (groupSummary.groupId == ALL_COMMUNITIES_GROUP_ID) {
-            // Special case
-            avatarRenderer.clear(views.groupToolbarAvatarImageView)
-            views.groupToolbarAvatarImageView.background = null
-
-            val myMxItem = withState(viewModel) { it.myMatrixItem }
-            if (myMxItem != null) {
-                avatarRenderer.render(myMxItem, views.groupToolbarAvatarImageView, GlideApp.with(requireActivity()))
-            }
             views.groupToolbarSpaceTitleView.isVisible = false
         } else {
-            views.groupToolbarAvatarImageView.background = null
-            // Use GlideApp with activity context to avoid the glideRequests to be paused
-            avatarRenderer.render(groupSummary.toMatrixItem(), views.groupToolbarAvatarImageView, GlideApp.with(requireActivity()))
             views.groupToolbarSpaceTitleView.isVisible = true
             views.groupToolbarSpaceTitleView.text = groupSummary.displayName
         }
@@ -271,24 +253,9 @@ class HomeDetailFragment @Inject constructor(
 
     private fun onSpaceChange(spaceSummary: RoomSummary?) {
         spaceSummary ?: return
-
-        // Use GlideApp with activity context to avoid the glideRequests to be paused
         if (spaceSummary.roomId == ALL_COMMUNITIES_GROUP_ID) {
-            // Special case
-            views.groupToolbarAvatarImageView.background = ContextCompat.getDrawable(requireContext(), R.drawable.space_home_background)
-            views.groupToolbarAvatarImageView.scaleType = ImageView.ScaleType.CENTER_INSIDE
-            ThemeUtils.tintDrawableWithColor(
-                    ContextCompat.getDrawable(requireContext(), R.drawable.ic_space_home)!!,
-                    ThemeUtils.getColor(requireContext(), R.attr.riot_primary_text_color)
-            ).let {
-                views.groupToolbarAvatarImageView.setImageDrawable(it)
-            }
-
             views.groupToolbarSpaceTitleView.isVisible = false
         } else {
-            avatarRenderer.clear(views.groupToolbarAvatarImageView)
-            views.groupToolbarAvatarImageView.background = null
-            avatarRenderer.renderSpace(spaceSummary.toMatrixItem(), views.groupToolbarAvatarImageView, GlideApp.with(requireActivity()))
             views.groupToolbarSpaceTitleView.isVisible = true
             views.groupToolbarSpaceTitleView.text = spaceSummary.displayName
         }
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt
index 8aa58632b3..1d57b26015 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt
@@ -35,6 +35,7 @@ import kotlinx.coroutines.launch
 import org.matrix.android.sdk.api.query.ActiveSpaceFilter
 import org.matrix.android.sdk.api.query.RoomCategoryFilter
 import org.matrix.android.sdk.api.session.Session
+import org.matrix.android.sdk.api.session.room.RoomSortOrder
 import org.matrix.android.sdk.api.session.room.model.Membership
 import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
 import org.matrix.android.sdk.api.util.toMatrixItem
@@ -163,7 +164,8 @@ class HomeDetailViewModel @AssistedInject constructor(@Assisted initialState: Ho
             session.getPagedRoomSummariesLive(
                     roomSummaryQueryParams {
                         memberships = Membership.activeMemberships()
-                    }
+                    },
+                    sortOrder = RoomSortOrder.NONE
             ).asObservable()
         }
 
diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/SpaceRoomListSectionBuilder.kt b/vector/src/main/java/im/vector/app/features/home/room/list/SpaceRoomListSectionBuilder.kt
index a05f6ebaf8..353cf5732d 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/list/SpaceRoomListSectionBuilder.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/list/SpaceRoomListSectionBuilder.kt
@@ -314,23 +314,7 @@ class SpaceRoomListSectionBuilder(
 
                     val name = stringProvider.getString(nameRes)
                     session.getFilteredPagedRoomSummariesLive(
-                            when (spaceFilterStrategy) {
-                                RoomListViewModel.SpaceFilterStrategy.NORMAL     -> {
-                                    roomQueryParams.copy(
-                                            activeSpaceId = ActiveSpaceFilter.ActiveSpace(appStateHandler.safeActiveSpaceId())
-                                    )
-                                }
-                                RoomListViewModel.SpaceFilterStrategy.NOT_IF_ALL -> {
-                                    if (appStateHandler.safeActiveSpaceId() == null) {
-                                        roomQueryParams
-                                    } else {
-                                        roomQueryParams.copy(
-                                                activeSpaceId = ActiveSpaceFilter.ActiveSpace(appStateHandler.safeActiveSpaceId())
-                                        )
-                                    }
-                                }
-                                RoomListViewModel.SpaceFilterStrategy.NONE       -> roomQueryParams
-                            },
+                            roomQueryParams.process(spaceFilterStrategy, appStateHandler.safeActiveSpaceId()),
                             pagedListConfig
                     ).also {
                         when (spaceFilterStrategy) {
@@ -371,7 +355,9 @@ class SpaceRoomListSectionBuilder(
                                         .subscribe {
                                             sections.find { it.sectionName == name }
                                                     ?.notificationCount
-                                                    ?.postValue(session.getNotificationCountForRooms(roomQueryParams))
+                                                    ?.postValue(session.getNotificationCountForRooms(
+                                                            roomQueryParams.process(spaceFilterStrategy, appStateHandler.safeActiveSpaceId())
+                                                    ))
                                         }.also {
                                             onDisposable.invoke(it)
                                         }
@@ -395,4 +381,24 @@ class SpaceRoomListSectionBuilder(
                 .build()
                 .let { block(it) }
     }
+
+    internal fun RoomSummaryQueryParams.process(spaceFilter: RoomListViewModel.SpaceFilterStrategy, currentSpace: String?): RoomSummaryQueryParams {
+        return when (spaceFilter) {
+            RoomListViewModel.SpaceFilterStrategy.NORMAL -> {
+                copy(
+                        activeSpaceId = ActiveSpaceFilter.ActiveSpace(currentSpace)
+                )
+            }
+            RoomListViewModel.SpaceFilterStrategy.NOT_IF_ALL -> {
+                if (currentSpace == null) {
+                    this
+                } else {
+                    copy(
+                            activeSpaceId = ActiveSpaceFilter.ActiveSpace(currentSpace)
+                    )
+                }
+            }
+            RoomListViewModel.SpaceFilterStrategy.NONE -> this
+        }
+    }
 }
diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewState.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewState.kt
index cd578bce11..558b631c16 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewState.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewState.kt
@@ -20,10 +20,12 @@ import com.airbnb.mvrx.Async
 import com.airbnb.mvrx.MvRxState
 import com.airbnb.mvrx.Uninitialized
 import org.matrix.android.sdk.api.session.room.model.RoomSummary
+import org.matrix.android.sdk.api.session.room.summary.RoomAggregateNotificationCount
 
 data class SpaceListViewState(
         val asyncSpaces: Async<List<RoomSummary>> = Uninitialized,
         val selectedSpace: RoomSummary? = null,
         val rootSpaces: List<RoomSummary>? = null,
-        val expandedStates: Map<String, Boolean> = emptyMap()
+        val expandedStates: Map<String, Boolean> = emptyMap(),
+        val homeAggregateCount : RoomAggregateNotificationCount = RoomAggregateNotificationCount(0, 0)
 ) : MvRxState
diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryController.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryController.kt
index 2a20889545..14be8cd408 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryController.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryController.kt
@@ -25,8 +25,10 @@ import im.vector.app.core.ui.list.genericItemHeader
 import im.vector.app.core.utils.DebouncedClickListener
 import im.vector.app.features.grouplist.homeSpaceSummaryItem
 import im.vector.app.features.home.AvatarRenderer
+import im.vector.app.features.home.room.list.UnreadCounterBadgeView
 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.summary.RoomAggregateNotificationCount
 import org.matrix.android.sdk.api.util.MatrixItem
 import org.matrix.android.sdk.api.util.toMatrixItem
 import javax.inject.Inject
@@ -53,13 +55,15 @@ class SpaceSummaryController @Inject constructor(
                 nonNullViewState.asyncSpaces(),
                 nonNullViewState.selectedSpace,
                 nonNullViewState.rootSpaces,
-                nonNullViewState.expandedStates)
+                nonNullViewState.expandedStates,
+                nonNullViewState.homeAggregateCount)
     }
 
     private fun buildGroupModels(summaries: List<RoomSummary>?,
                                  selected: RoomSummary?,
                                  rootSpaces: List<RoomSummary>?,
-                                 expandedStates: Map<String, Boolean>) {
+                                 expandedStates: Map<String, Boolean>,
+                                 homeCount: RoomAggregateNotificationCount) {
         if (summaries.isNullOrEmpty()) {
             return
         }
@@ -99,22 +103,14 @@ class SpaceSummaryController @Inject constructor(
                     homeSpaceSummaryItem {
                         id(it.roomId)
                         selected(it.roomId == selected?.roomId)
+                        countState(UnreadCounterBadgeView.State(homeCount.totalCount, homeCount.isHighlight))
                         listener { callback?.onSpaceSelected(it) }
                     }
                 }
 
-//        summaries
-//                .filter { it.membership == Membership.JOIN }
         rootSpaces
                 ?.forEach { groupSummary ->
                     val isSelected = groupSummary.roomId == selected?.roomId
-//                    if (groupSummary.roomId == ALL_COMMUNITIES_GROUP_ID) {
-//                        homeSpaceSummaryItem {
-//                            id(groupSummary.roomId)
-//                            selected(isSelected)
-//                            listener { callback?.onSpaceSelected(groupSummary) }
-//                        }
-//                    } else {
                     // does it have children?
                     val subSpaces = groupSummary.children?.filter { childInfo ->
                         summaries.indexOfFirst { it.roomId == childInfo.childRoomId } != -1
@@ -132,24 +128,36 @@ class SpaceSummaryController @Inject constructor(
                         onMore { callback?.onSpaceSettings(groupSummary) }
                         listener { callback?.onSpaceSelected(groupSummary) }
                         toggleExpand { callback?.onToggleExpand(groupSummary) }
+                        countState(
+                                UnreadCounterBadgeView.State(
+                                        groupSummary.notificationCount,
+                                        groupSummary.highlightCount > 0
+                                )
+                        )
                     }
 
                     if (hasChildren && expanded) {
                         // it's expanded
-                            subSpaces?.forEach { child ->
-                                summaries.firstOrNull { it.roomId == child.childRoomId }?.let {  childSum ->
-                                    val isChildSelected = childSum.roomId == selected?.roomId
-                                    spaceSummaryItem {
-                                        avatarRenderer(avatarRenderer)
-                                        id(child.childRoomId)
-                                        hasChildren(false)
-                                        selected(isChildSelected)
-                                        matrixItem(MatrixItem.RoomItem(child.childRoomId, child.name, child.avatarUrl))
-                                        listener { callback?.onSpaceSelected(childSum) }
-                                        indent(1)
-                                    }
+                        subSpaces?.forEach { child ->
+                            summaries.firstOrNull { it.roomId == child.childRoomId }?.let { childSum ->
+                                val isChildSelected = childSum.roomId == selected?.roomId
+                                spaceSummaryItem {
+                                    avatarRenderer(avatarRenderer)
+                                    id(child.childRoomId)
+                                    hasChildren(false)
+                                    selected(isChildSelected)
+                                    matrixItem(MatrixItem.RoomItem(child.childRoomId, child.name, child.avatarUrl))
+                                    listener { callback?.onSpaceSelected(childSum) }
+                                    indent(1)
+                                    countState(
+                                            UnreadCounterBadgeView.State(
+                                                    groupSummary.notificationCount,
+                                                    groupSummary.highlightCount > 0
+                                            )
+                                    )
                                 }
                             }
+                        }
                     }
                 }
 
diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryItem.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryItem.kt
index e3deca5367..797087e78b 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryItem.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceSummaryItem.kt
@@ -30,6 +30,7 @@ import im.vector.app.core.epoxy.VectorEpoxyModel
 import im.vector.app.core.platform.CheckableConstraintLayout
 import im.vector.app.core.utils.DebouncedClickListener
 import im.vector.app.features.home.AvatarRenderer
+import im.vector.app.features.home.room.list.UnreadCounterBadgeView
 import org.matrix.android.sdk.api.util.MatrixItem
 
 @EpoxyModelClass(layout = R.layout.item_space)
@@ -44,6 +45,7 @@ abstract class SpaceSummaryItem : VectorEpoxyModel<SpaceSummaryItem.Holder>() {
     @EpoxyAttribute var expanded: Boolean = false
     @EpoxyAttribute var hasChildren: Boolean = false
     @EpoxyAttribute var indent: Int = 0
+    @EpoxyAttribute var countState : UnreadCounterBadgeView.State = UnreadCounterBadgeView.State(0, false)
 
     override fun bind(holder: Holder) {
         super.bind(holder)
@@ -91,6 +93,7 @@ abstract class SpaceSummaryItem : VectorEpoxyModel<SpaceSummaryItem.Holder>() {
         holder.indentSpace.isVisible = indent > 0
 
         avatarRenderer.renderSpace(matrixItem, holder.avatarImageView)
+        holder.counterBadgeView.render(countState)
     }
 
     override fun unbind(holder: Holder) {
@@ -105,5 +108,6 @@ abstract class SpaceSummaryItem : VectorEpoxyModel<SpaceSummaryItem.Holder>() {
         val moreView by bind<ImageView>(R.id.groupTmpLeave)
         val collapseIndicator by bind<ImageView>(R.id.groupChildrenCollapse)
         val indentSpace by bind<Space>(R.id.indent)
+        val counterBadgeView by bind<UnreadCounterBadgeView>(R.id.groupCounterBadge)
     }
 }
diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpacesListViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/SpacesListViewModel.kt
index 8889a76f9b..690e7970f1 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/SpacesListViewModel.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/SpacesListViewModel.kt
@@ -32,12 +32,16 @@ import io.reactivex.Observable
 import io.reactivex.functions.BiFunction
 import kotlinx.coroutines.launch
 import org.matrix.android.sdk.api.extensions.tryOrNull
+import org.matrix.android.sdk.api.query.ActiveSpaceFilter
 import org.matrix.android.sdk.api.query.QueryStringValue
 import org.matrix.android.sdk.api.session.Session
+import org.matrix.android.sdk.api.session.room.RoomSortOrder
 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 org.matrix.android.sdk.rx.asObservable
 import org.matrix.android.sdk.rx.rx
+import java.util.concurrent.TimeUnit
 
 const val ALL_COMMUNITIES_GROUP_ID = "+ALL_COMMUNITIES_GROUP_ID"
 
@@ -78,6 +82,27 @@ class SpacesListViewModel @AssistedInject constructor(@Assisted initialState: Sp
                     }
                 }
                 .disposeOnClear()
+
+        session.getPagedRoomSummariesLive(
+                roomSummaryQueryParams {
+                    this.memberships = listOf(Membership.JOIN)
+                    this.activeSpaceId = ActiveSpaceFilter.ActiveSpace(null)
+                }, sortOrder = RoomSortOrder.NONE
+        ).asObservable()
+                .throttleFirst(300, TimeUnit.MILLISECONDS)
+                .subscribe {
+                    val counts = session.getNotificationCountForRooms(
+                            roomSummaryQueryParams {
+                                this.memberships = listOf(Membership.JOIN)
+                                this.activeSpaceId = ActiveSpaceFilter.ActiveSpace(null)
+                            }
+                    )
+                    setState {
+                        copy(
+                                homeAggregateCount = counts
+                        )
+                    }
+                }.disposeOnClear()
     }
 
     private fun observeSelectionState() {
diff --git a/vector/src/main/res/drawable/ic_space_icons.xml b/vector/src/main/res/drawable/ic_space_icons.xml
new file mode 100644
index 0000000000..44c75908c7
--- /dev/null
+++ b/vector/src/main/res/drawable/ic_space_icons.xml
@@ -0,0 +1,27 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M3,12H21"
+      android:strokeLineJoin="round"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#8D99A5"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M3,6H21"
+      android:strokeLineJoin="round"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#8D99A5"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M3,18H21"
+      android:strokeLineJoin="round"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#8D99A5"
+      android:strokeLineCap="round"/>
+</vector>
diff --git a/vector/src/main/res/layout/fragment_home_detail.xml b/vector/src/main/res/layout/fragment_home_detail.xml
index bea64bcab1..419ba5b64f 100644
--- a/vector/src/main/res/layout/fragment_home_detail.xml
+++ b/vector/src/main/res/layout/fragment_home_detail.xml
@@ -19,15 +19,50 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="center_vertical"
-            android:orientation="horizontal">
+            android:orientation="horizontal"
+            android:baselineAligned="false">
 
-            <ImageView
-                android:layout_gravity="center_vertical"
+            <RelativeLayout
                 android:id="@+id/groupToolbarAvatarImageView"
-                android:layout_width="32dp"
-                android:layout_height="32dp"
                 android:contentDescription="@string/a11y_open_drawer"
-                tools:src="@tools:sample/avatars" />
+                android:layout_marginTop="8dp"
+                android:layout_marginBottom="8dp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                android:layout_width="40dp"
+                android:layout_height="40dp">
+
+                <ImageView
+                    android:importantForAccessibility="no"
+                    android:layout_width="28dp"
+                    android:layout_height="28dp"
+                    android:layout_centerVertical="true"
+                    android:src="@drawable/ic_space_icons"
+                    app:tint="?riotx_text_secondary"
+                    android:layout_marginStart="4dp"
+                    />
+
+                <!-- Not yet done -->
+<!--                <im.vector.app.features.home.room.list.UnreadCounterBadgeView-->
+<!--                    android:id="@+id/roomUnreadCounterBadgeView"-->
+<!--                    android:layout_width="wrap_content"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:layout_marginEnd="0dp"-->
+<!--                    android:gravity="center"-->
+<!--                    android:minWidth="16dp"-->
+<!--                    android:minHeight="16dp"-->
+<!--                    android:paddingStart="4dp"-->
+<!--                    android:paddingEnd="4dp"-->
+<!--                    android:textColor="@android:color/white"-->
+<!--                    android:textSize="10sp"-->
+<!--                    android:visibility="gone"-->
+<!--                    android:layout_alignParentTop="true"-->
+<!--                    android:layout_alignParentEnd="true"-->
+<!--                    tools:background="@drawable/bg_unread_highlight"-->
+<!--                    tools:text="4"-->
+<!--                    tools:visibility="visible" />-->
+            </RelativeLayout>
 
             <LinearLayout
                 android:layout_width="0dp"
diff --git a/vector/src/main/res/layout/item_room_placeholder.xml b/vector/src/main/res/layout/item_room_placeholder.xml
index 41131c5150..c5fdd7781a 100644
--- a/vector/src/main/res/layout/item_room_placeholder.xml
+++ b/vector/src/main/res/layout/item_room_placeholder.xml
@@ -60,7 +60,7 @@
         android:layout_width="0dp"
         android:layout_height="30dp"
         android:layout_marginTop="8dp"
-        android:layout_marginEnd="8dp"
+        android:layout_marginEnd="20dp"
         android:background="@drawable/rounded_rect_shape_8"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="@+id/roomNameView"
diff --git a/vector/src/main/res/layout/item_space.xml b/vector/src/main/res/layout/item_space.xml
index fc7b43216a..ef147f7730 100644
--- a/vector/src/main/res/layout/item_space.xml
+++ b/vector/src/main/res/layout/item_space.xml
@@ -33,6 +33,28 @@
         app:layout_constraintTop_toTopOf="parent"
         tools:src="@tools:sample/avatars" />
 
+    <im.vector.app.features.home.room.list.UnreadCounterBadgeView
+        android:id="@+id/groupCounterBadge"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="4dp"
+        android:layout_marginEnd="4dp"
+        android:paddingStart="4dp"
+        android:paddingEnd="4dp"
+        android:gravity="center"
+        android:minWidth="16dp"
+        android:minHeight="16dp"
+        android:textColor="@android:color/white"
+        android:textSize="10sp"
+        app:layout_constraintCircle="@+id/groupAvatarImageView"
+        app:layout_constraintCircleAngle="45"
+        app:layout_constraintCircleRadius="24dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        tools:background="@drawable/bg_unread_highlight"
+        tools:text="147" />
+
+
     <TextView
         android:id="@+id/groupNameView"
         android:layout_width="0dp"