diff --git a/src/app/mainview/components/SelectScreen.qml b/src/app/mainview/components/SelectScreen.qml
index 718e4796eea3c4dba09a92133fdd5018192fea4a..d987e42f480b770b15609901a643c5ce8848df69 100644
--- a/src/app/mainview/components/SelectScreen.qml
+++ b/src/app/mainview/components/SelectScreen.qml
@@ -44,34 +44,41 @@ Window {
     property var listModel: []
     property real componentMinWidth: 350
     property real marginSize: JamiTheme.preferredMarginSize
-    property real elementWidth: {
-        var layoutWidth = selectScreenWindowLayout.width;
-        var minSize = componentMinWidth + 2 * marginSize;
-        var numberElementPerRow = Math.floor(layoutWidth / minSize);
-        if (numberElementPerRow == 1 && layoutWidth > componentMinWidth * 1.5) {
-            numberElementPerRow = 2;
-        }
-        if (showWindows)
-            numberElementPerRow = Math.min(listModel.length, numberElementPerRow);
-        else
-            numberElementPerRow = Math.min(listModel.length + 1, numberElementPerRow);
-        var spacingLength = marginSize * (numberElementPerRow + 2);
-        return (layoutWidth - spacingLength) / numberElementPerRow;
-    }
 
+    // Function to safely populate screen/window list
     function calculateRepeaterModel() {
-        listModel = [];
+        var newModel = [];
         var idx;
+
         if (!showWindows) {
             for (idx in Qt.application.screens) {
-                listModel.push(JamiStrings.screen.arg(idx));
+                newModel.push({
+                    title: JamiStrings.screen.arg(idx),
+                    index: parseInt(idx),
+                    isAllScreens: false
+                });
             }
         } else {
             AvAdapter.getListWindows();
             for (idx in AvAdapter.windowsNames) {
-                listModel.push(AvAdapter.windowsNames[idx]);
+                newModel.push({
+                    title: AvAdapter.windowsNames[idx],
+                    index: parseInt(idx),
+                    isAllScreens: false
+                });
             }
         }
+
+        // Add "All Screens" option for non-Windows platforms when showing screens
+        if (!showWindows && Qt.application.screens.length > 1 && Qt.platform.os.toString() !== "windows") {
+            newModel.unshift({
+                title: JamiStrings.allScreens,
+                index: -1,
+                isAllScreens: true
+            });
+        }
+
+        listModel = newModel;
     }
 
     onVisibleChanged: {
@@ -80,23 +87,21 @@ Window {
         if (!active) {
             selectedScreenNumber = undefined;
         }
-        screenSharePreviewRepeater.model = {};
         calculateRepeaterModel();
-        screenSharePreviewRepeater.model = root.listModel;
     }
 
     Rectangle {
         id: selectScreenWindowRect
-
         anchors.fill: parent
         color: JamiTheme.backgroundColor
 
         ColumnLayout {
             id: selectScreenWindowLayout
-
             anchors.fill: parent
+            spacing: marginSize
 
             Text {
+                id: titleText
                 font.pointSize: JamiTheme.menuFontSize
                 font.bold: true
                 text: showWindows ? JamiStrings.windows : JamiStrings.screens
@@ -107,54 +112,49 @@ Window {
 
             ScrollView {
                 id: screenSelectionScrollView
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredWidth: selectScreenWindowLayout.width
+                Layout.fillWidth: true
                 Layout.fillHeight: true
-
                 clip: true
-                ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+                ScrollBar.horizontal.policy: ScrollBar.AsNeeded
                 ScrollBar.vertical.policy: ScrollBar.AsNeeded
 
-                Flow {
-                    id: screenSelectionScrollViewFlow
-
-                    // https://bugreports.qt.io/browse/QTBUG-110323
-                    width: screenSelectionScrollView.width
-                    height: screenSelectionScrollView.height
-
-                    topPadding: marginSize
-                    rightPadding: marginSize
-                    leftPadding: marginSize
-                    spacing: marginSize
+                GridView {
+                    id: screenGrid
+                    anchors.fill: parent
+                    anchors.margins: marginSize
 
-                    Loader {
-                        // Show all screens
-                        active: !showWindows && Qt.application.screens.length > 1 && Qt.platform.os.toString() !== "windows"
-                        sourceComponent: ScreenSharePreview {
-                            id: screenSelectionRectAll
-
-                            elementIndex: -1
-                            rectTitle: JamiStrings.allScreens
-                            rId: AvAdapter.getSharingResource(-1)
-                        }
+                    cellWidth: {
+                        var cellsPerRow = Math.floor(width / (componentMinWidth + marginSize));
+                        cellsPerRow = Math.max(1, cellsPerRow);
+                        var calculatedWidth = Math.floor(width / cellsPerRow);
+                        return Math.max(componentMinWidth, calculatedWidth);
                     }
+                    cellHeight: cellWidth * 3/4 + marginSize * 2
 
-                    Repeater {
-                        id: screenSharePreviewRepeater
+                    model: listModel
 
-                        model: listModel.length
+                    delegate: Item {
+                        width: screenGrid.cellWidth - marginSize
+                        height: screenGrid.cellHeight - marginSize
 
-                        delegate: ScreenSharePreview {
+                        visible: JamiStrings.selectScreen !== modelData.title &&
+                                 JamiStrings.selectWindow !== modelData.title
+
+                        ScreenSharePreview {
                             id: screenItem
+                            anchors.centerIn: parent
+                            width: parent.width
+                            height: parent.height - marginSize
 
-                            visible: JamiStrings.selectScreen !== listModel[index] && JamiStrings.selectWindow !== listModel[index]
-                            elementIndex: index
-                            rectTitle: listModel[index] ? listModel[index] : ""
+                            elementIndex: modelData.index
+                            rectTitle: modelData.title
                             rId: {
-                                if (showWindows)
-                                    return rId = AvAdapter.getSharingResource(-2, AvAdapter.windowsIds[index], AvAdapter.windowsNames[index]);
-                                return rId = AvAdapter.getSharingResource(index);
+                                if (modelData.isAllScreens)
+                                    return AvAdapter.getSharingResource(-1);
+                                else if (showWindows)
+                                    return AvAdapter.getSharingResource(-2, AvAdapter.windowsIds[modelData.index],
+                                            AvAdapter.windowsNames[modelData.index]);
+                                return AvAdapter.getSharingResource(modelData.index);
                             }
                         }
                     }
@@ -163,19 +163,18 @@ Window {
 
             RowLayout {
                 Layout.margins: marginSize
-                Layout.preferredWidth: selectScreenWindowLayout.width
+                Layout.fillWidth: true
                 Layout.preferredHeight: childrenRect.height
                 spacing: marginSize
 
                 MaterialButton {
                     id: selectButton
-
                     Layout.maximumWidth: 200
                     Layout.fillWidth: true
                     Layout.alignment: Qt.AlignHCenter
                     Layout.leftMargin: marginSize
 
-                    enabled: selectedScreenNumber != undefined
+                    enabled: selectedScreenNumber !== undefined
                     opacity: enabled ? 1.0 : 0.5
 
                     color: JamiTheme.buttonTintedBlack
@@ -193,7 +192,8 @@ Window {
                             if (!showWindows)
                                 AvAdapter.shareEntireScreen(selectedScreenNumber);
                             else {
-                                AvAdapter.shareWindow(AvAdapter.windowsIds[selectedScreenNumber], AvAdapter.windowsNames[selectedScreenNumber - Qt.application.screens.length]);
+                                AvAdapter.shareWindow(AvAdapter.windowsIds[selectedScreenNumber],
+                                        AvAdapter.windowsNames[selectedScreenNumber]);
                             }
                         }
                         root.close();