diff --git a/programs/winhelp/hlpfile.c b/programs/winhelp/hlpfile.c
index 30c678d..c20bead 100644
--- a/programs/winhelp/hlpfile.c
+++ b/programs/winhelp/hlpfile.c
@@ -148,13 +148,14 @@
 
 /***********************************************************************
  *
- *           HLPFILE_HlpFilePageByHash
+ *           HLPFILE_PageByHash
  */
 HLPFILE_PAGE *HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash, ULONG* relative)
 {
     BYTE *ptr;
 
-    if (!hlpfile) return 0;
+    if (!hlpfile) return NULL;
+    if (!lHash) return HLPFILE_Contents(hlpfile, relative);
 
     WINE_TRACE("<%s>[%x]\n", hlpfile->lpszPath, lHash);
 
diff --git a/programs/winhelp/macro.c b/programs/winhelp/macro.c
index 3681933..66eac0f 100644
--- a/programs/winhelp/macro.c
+++ b/programs/winhelp/macro.c
@@ -506,10 +506,7 @@
 
     if (WINHELP_GetOpenFileName(szFile, MAX_PATH))
     {
-        HLPFILE*        hlpfile = WINHELP_LookupHelpFile(szFile);
-
-        WINHELP_CreateHelpWindowByHash(hlpfile, 0,
-                                       WINHELP_GetWindowInfo(hlpfile, "main"), SW_SHOWNORMAL);
+        MACRO_JumpContents(szFile, "main");
     }
 }
 
@@ -628,10 +625,10 @@
     HLPFILE*    hlpfile;
 
     WINE_TRACE("(\"%s\", \"%s\")\n", lpszPath, lpszWindow);
-    hlpfile = WINHELP_LookupHelpFile(lpszPath);
-    WINHELP_CreateHelpWindowByHash(hlpfile, 0,
-                                   WINHELP_GetWindowInfo(hlpfile, lpszWindow),
-                                   SW_NORMAL);
+    if ((hlpfile = WINHELP_LookupHelpFile(lpszPath)))
+        WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, 0,
+                               WINHELP_GetWindowInfo(hlpfile, lpszWindow),
+                               SW_NORMAL);
 }
 
 void CALLBACK MACRO_JumpContext(LPCSTR lpszPath, LPCSTR lpszWindow, LONG context)
@@ -641,9 +638,9 @@
     WINE_TRACE("(\"%s\", \"%s\", %d)\n", lpszPath, lpszWindow, context);
     hlpfile = WINHELP_LookupHelpFile(lpszPath);
     /* Some madness: what user calls 'context', hlpfile calls 'map' */
-    WINHELP_CreateHelpWindowByMap(hlpfile, context,
-                                  WINHELP_GetWindowInfo(hlpfile, lpszWindow),
-                                  SW_NORMAL);
+    WINHELP_OpenHelpWindow(HLPFILE_PageByMap, hlpfile, context,
+                           WINHELP_GetWindowInfo(hlpfile, lpszWindow),
+                           SW_NORMAL);
 }
 
 void CALLBACK MACRO_JumpHash(LPCSTR lpszPath, LPCSTR lpszWindow, LONG lHash)
@@ -652,9 +649,9 @@
 
     WINE_TRACE("(\"%s\", \"%s\", %u)\n", lpszPath, lpszWindow, lHash);
     hlpfile = WINHELP_LookupHelpFile(lpszPath);
-    WINHELP_CreateHelpWindowByHash(hlpfile, lHash,
-                                   WINHELP_GetWindowInfo(hlpfile, lpszWindow),
-                                   SW_NORMAL);
+    WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, lHash,
+                           WINHELP_GetWindowInfo(hlpfile, lpszWindow),
+                           SW_NORMAL);
 }
 
 void CALLBACK MACRO_JumpHelpOn(void)
diff --git a/programs/winhelp/winhelp.c b/programs/winhelp/winhelp.c
index 4981748..797bbae 100644
--- a/programs/winhelp/winhelp.c
+++ b/programs/winhelp/winhelp.c
@@ -304,8 +304,8 @@
         if (!hlpfile) return 0;
     }
     else hlpfile = NULL;
-    WINHELP_CreateHelpWindowByHash(hlpfile, lHash, 
-                                   WINHELP_GetWindowInfo(hlpfile, wndname), show);
+    WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, lHash,
+                           WINHELP_GetWindowInfo(hlpfile, wndname), show);
 
     /* Message loop */
     while (GetMessage(&msg, 0, 0, 0))
@@ -657,49 +657,17 @@
     return TRUE;
 }
 
-/***********************************************************************
- *
- *           WINHELP_CreateHelpWindowByHash
+/******************************************************************
+ *             WINHELP_OpenHelpWindow
+ * Main function to search for a page and display it in a window
  */
-BOOL WINHELP_CreateHelpWindowByHash(HLPFILE* hlpfile, LONG lHash, 
-                                    HLPFILE_WINDOWINFO* wi, int nCmdShow)
+BOOL WINHELP_OpenHelpWindow(HLPFILE_PAGE* (*lookup)(HLPFILE*, LONG, ULONG*),
+                            HLPFILE* hlpfile, LONG val, HLPFILE_WINDOWINFO* wi,
+                            int nCmdShow)
 {
     WINHELP_WNDPAGE     wpage;
 
-    wpage.page = NULL;
-    if (hlpfile)
-        wpage.page = lHash ? HLPFILE_PageByHash(hlpfile, lHash, &wpage.relative) :
-            HLPFILE_Contents(hlpfile, &wpage.relative);
-    if (wpage.page) wpage.page->file->wRefCount++;
-    wpage.wininfo = wi;
-    return WINHELP_CreateHelpWindow(&wpage, nCmdShow, TRUE);
-}
-
-/***********************************************************************
- *
- *           WINHELP_CreateHelpWindowByMap
- */
-BOOL WINHELP_CreateHelpWindowByMap(HLPFILE* hlpfile, LONG lMap,
-                                   HLPFILE_WINDOWINFO* wi, int nCmdShow)
-{
-    WINHELP_WNDPAGE     wpage;
-
-    wpage.page = HLPFILE_PageByMap(hlpfile, lMap, &wpage.relative);
-    if (wpage.page) wpage.page->file->wRefCount++;
-    wpage.wininfo = wi;
-    return WINHELP_CreateHelpWindow(&wpage, nCmdShow, TRUE);
-}
-
-/***********************************************************************
- *
- *           WINHELP_CreateHelpWindowByOffset
- */
-BOOL WINHELP_CreateHelpWindowByOffset(HLPFILE* hlpfile, LONG lOffset,
-                                      HLPFILE_WINDOWINFO* wi, int nCmdShow)
-{
-    WINHELP_WNDPAGE     wpage;
-
-    wpage.page = HLPFILE_PageByOffset(hlpfile, lOffset, &wpage.relative);
+    wpage.page = lookup(hlpfile, val, &wpage.relative);
     if (wpage.page) wpage.page->file->wRefCount++;
     wpage.wininfo = wi;
     return WINHELP_CreateHelpWindow(&wpage, nCmdShow, TRUE);
@@ -1229,14 +1197,14 @@
                     WINE_WARN("link to window %d/%d\n", part->link->window, hlpfile->numWindows);
                     break;
                 }
-                WINHELP_CreateHelpWindowByHash(hlpfile, part->link->lHash, wi,
-                                               SW_NORMAL);
+                WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, part->link->lHash,
+                                       wi, SW_NORMAL);
                 break;
             case hlp_link_popup:
                 hlpfile = WINHELP_LookupHelpFile(part->link->lpszString);
-                if (hlpfile) WINHELP_CreateHelpWindowByHash(hlpfile, part->link->lHash, 
-                                               WINHELP_GetPopupWindowInfo(hlpfile, hWnd, &mouse),
-                                               SW_NORMAL);
+                if (hlpfile) WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, part->link->lHash,
+                                                    WINHELP_GetPopupWindowInfo(hlpfile, hWnd, &mouse),
+                                                    SW_NORMAL);
                 break;
             case hlp_link_macro:
                 MACRO_ExecuteMacro(part->link->lpszString);
@@ -2074,7 +2042,8 @@
     {
         ret -= 2;
         WINE_TRACE("got %d as an offset\n", ret);
-        WINHELP_CreateHelpWindowByOffset(hlpfile, ret, Globals.active_win->info, SW_NORMAL);
+        WINHELP_OpenHelpWindow(HLPFILE_PageByOffset, hlpfile, ret,
+                               Globals.active_win->info, SW_NORMAL);
     }
     return TRUE;
 }
diff --git a/programs/winhelp/winhelp.h b/programs/winhelp/winhelp.h
index f8ff0c6..a8f211e 100644
--- a/programs/winhelp/winhelp.h
+++ b/programs/winhelp/winhelp.h
@@ -178,10 +178,9 @@
 extern WINHELP_GLOBALS Globals;
 extern FARPROC         Callbacks[];
 
-BOOL WINHELP_CreateHelpWindowByHash(HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int);
-BOOL WINHELP_CreateHelpWindowByMap(HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int);
-BOOL WINHELP_CreateHelpWindowByOffset(HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int);
 BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE*, int, BOOL);
+BOOL WINHELP_OpenHelpWindow(HLPFILE_PAGE* (*)(HLPFILE*, LONG, ULONG*),
+                            HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int);
 BOOL WINHELP_GetOpenFileName(LPSTR, int);
 BOOL WINHELP_CreateIndexWindow(void);
 void WINHELP_DeleteBackSet(WINHELP_WINDOW*);
