diff --git a/dlls/hhctrl.ocx/help.c b/dlls/hhctrl.ocx/help.c
index 8196e4e..770b69a 100644
--- a/dlls/hhctrl.ocx/help.c
+++ b/dlls/hhctrl.ocx/help.c
@@ -24,7 +24,6 @@
 #include "commctrl.h"
 #include "wininet.h"
 
-#include "wine/unicode.h"
 #include "wine/debug.h"
 
 #include "resource.h"
@@ -737,7 +736,7 @@
 }
 
 /* Creates the whole package */
-static BOOL HH_CreateViewer(HHInfo *pHHInfo)
+static BOOL CreateViewer(HHInfo *pHHInfo)
 {
     HH_CreateFont(pHHInfo);
 
@@ -765,7 +764,7 @@
     return TRUE;
 }
 
-static void HH_Close(HHInfo *info)
+static void ReleaseHelpViewer(HHInfo *info)
 {
     if (!info)
         return;
@@ -786,43 +785,49 @@
         CloseCHM(info->pCHMInfo);
 
     ReleaseWebBrowser(info);
+
+    hhctrl_free(info);
+    OleUninitialize();
 }
 
-static HHInfo *HH_OpenHH(LPWSTR filename)
+static HHInfo *CreateHelpViewer(LPCWSTR filename)
 {
-    HHInfo *pHHInfo = hhctrl_alloc_zero(sizeof(HHInfo));
+    HHInfo *info = hhctrl_alloc_zero(sizeof(HHInfo));
 
-    pHHInfo->pCHMInfo = OpenCHM(filename);
-    if(!pHHInfo->pCHMInfo) {
-        HH_Close(pHHInfo);
+    OleInitialize(NULL);
+
+    info->pCHMInfo = OpenCHM(filename);
+    if(!info->pCHMInfo) {
+        ReleaseHelpViewer(info);
         return NULL;
     }
 
-    if (!CHM_LoadWinTypeFromCHM(pHHInfo->pCHMInfo, &pHHInfo->WinType)) {
-        HH_Close(pHHInfo);
+    if (!LoadWinTypeFromCHM(info->pCHMInfo, &info->WinType)) {
+        ReleaseHelpViewer(info);
         return NULL;
     }
 
-    return pHHInfo;
+    if(!CreateViewer(info)) {
+        ReleaseHelpViewer(info);
+        return NULL;
+    }
+
+    return info;
 }
 
 /* FIXME: Check szCmdLine for bad arguments */
 int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine)
 {
     MSG msg;
-    HHInfo *pHHInfo;
+    HHInfo *info;
+    LPWSTR filename = strdupAtoW(szCmdLine);
 
-    if (FAILED(OleInitialize(NULL)))
+    info = CreateHelpViewer(filename);
+    hhctrl_free(filename);
+    if(!info)
         return -1;
 
-    pHHInfo = HH_OpenHH(strdupAtoW(szCmdLine));
-    if (!pHHInfo || !HH_CreateViewer(pHHInfo))
-    {
-        OleUninitialize();
-        return -1;
-    }
-
-    NavigateToChm(pHHInfo, pHHInfo->pCHMInfo->szFile, pHHInfo->WinType.pszFile);
+    NavigateToChm(info, info->pCHMInfo->szFile, info->WinType.pszFile);
     
     while (GetMessageW(&msg, 0, 0, 0))
     {
@@ -830,9 +835,7 @@
         DispatchMessageW(&msg);
     }
 
-    HH_Close(pHHInfo);
-    hhctrl_free(pHHInfo);
-    OleUninitialize();
+    ReleaseHelpViewer(info);
 
     return 0;
 }
