diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
index a25309972984e37eaee98917649670db65748688..acee9bf501ac8f292df786c752ed3bb640705c87 100644
--- a/dlls/comctl32/propsheet.c
+++ b/dlls/comctl32/propsheet.c
@@ -2433,17 +2433,23 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags)
   EnableWindow(hwndNext, FALSE);
   EnableWindow(hwndFinish, FALSE);
 
+  /* set the default pushbutton to an enabled button */
+  if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH))
+    SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0);
+  else if (dwFlags & PSWIZB_NEXT)
+    SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0);
+  else if (dwFlags & PSWIZB_BACK)
+    SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0);
+  else
+    SendMessageW(hwndDlg, DM_SETDEFID, IDCANCEL, 0);
+
+
   if (dwFlags & PSWIZB_BACK)
     EnableWindow(hwndBack, TRUE);
 
   if (dwFlags & PSWIZB_NEXT)
-  {
     EnableWindow(hwndNext, TRUE);
 
-    /* Set the Next button as the default pushbutton  */
-    SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0);
-  }
-
   if (!psInfo->hasFinish)
   {
     if ((dwFlags & PSWIZB_FINISH) || (dwFlags & PSWIZB_DISABLEDFINISH))
@@ -2455,12 +2461,7 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags)
       ShowWindow(hwndFinish, SW_SHOW);
 
       if (!(dwFlags & PSWIZB_DISABLEDFINISH))
-      {
         EnableWindow(hwndFinish, TRUE);
-
-        /* Set the Finish button as the default pushbutton  */
-        SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0);
-      }
     }
     else
     {