diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 918aaae4a353591f9f4e249cce0bd15e0c4d4f96..4ebfa51a7d883f4a2097a5cbcec03e09b95a30ee 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -1513,10 +1513,6 @@ static void LISTVIEW_UpdateScroll(LISTVIEW_INFO *infoPtr)
     horzInfo.cbSize = sizeof(SCROLLINFO);
     horzInfo.nPage = infoPtr->rcList.right - infoPtr->rcList.left;
 
-    ZeroMemory(&vertInfo, sizeof(SCROLLINFO));
-    vertInfo.cbSize = sizeof(SCROLLINFO);
-    vertInfo.nPage = infoPtr->rcList.bottom - infoPtr->rcList.top;
-
     /* for now, we'll set info.nMax to the _count_, and adjust it later */
     if (uView == LVS_LIST)
     {
@@ -1527,18 +1523,12 @@ static void LISTVIEW_UpdateScroll(LISTVIEW_INFO *infoPtr)
     else if (uView == LVS_REPORT)
     {
 	horzInfo.nMax = infoPtr->nItemWidth;
-	vertInfo.nMax = infoPtr->nItemCount;
-	vertInfo.nPage /= infoPtr->nItemHeight;
     }
     else /* LVS_ICON, or LVS_SMALLICON */
     {
 	RECT rcView;
 
-	if (LISTVIEW_GetViewRect(infoPtr, &rcView))
-	{
-	    horzInfo.nMax = rcView.right - rcView.left;
-	    vertInfo.nMax = rcView.bottom - rcView.top;
-	}
+	if (LISTVIEW_GetViewRect(infoPtr, &rcView)) horzInfo.nMax = rcView.right - rcView.left;
     }
   
     horzInfo.fMask = SIF_RANGE | SIF_PAGE;
@@ -1546,6 +1536,27 @@ static void LISTVIEW_UpdateScroll(LISTVIEW_INFO *infoPtr)
     SetScrollInfo(infoPtr->hwndSelf, SB_HORZ, &horzInfo, TRUE);
     TRACE("horzInfo=%s\n", debugscrollinfo(&horzInfo));
 
+    /* Setting the horizontal scroll can change the listview size
+     * (and potentially everything else) so we need to recompute
+     * everything again for the vertical scroll
+     */
+
+    ZeroMemory(&vertInfo, sizeof(SCROLLINFO));
+    vertInfo.cbSize = sizeof(SCROLLINFO);
+    vertInfo.nPage = infoPtr->rcList.bottom - infoPtr->rcList.top;
+
+    if (uView == LVS_REPORT)
+    {
+	vertInfo.nMax = infoPtr->nItemCount;
+	vertInfo.nPage /= infoPtr->nItemHeight;
+    }
+    else if (uView != LVS_LIST) /* LVS_ICON, or LVS_SMALLICON */
+    {
+	RECT rcView;
+
+	if (LISTVIEW_GetViewRect(infoPtr, &rcView)) vertInfo.nMax = rcView.bottom - rcView.top;
+    }
+
     vertInfo.fMask = SIF_RANGE | SIF_PAGE;
     vertInfo.nMax = max(vertInfo.nMax - 1, 0);
     SetScrollInfo(infoPtr->hwndSelf, SB_VERT, &vertInfo, TRUE);