#include "wx/html/helpctrl.h"
 #include "wx/busyinfo.h"
 
+#ifdef __WXGTK__
+    // for the hack in AddGrabIfNeeded()
+    #include "wx/dialog.h"
+#endif // __WXGTK__
+
 #if wxUSE_HELP
-#include "wx/tipwin.h"
+    #include "wx/tipwin.h"
 #endif
 
 IMPLEMENT_DYNAMIC_CLASS(wxHtmlHelpController, wxHelpControllerBase)
 }
 
 
+bool wxHtmlHelpController::AddBook(const wxFileName& book_file, bool show_wait_msg)
+{
+    return AddBook(wxFileSystem::FileNameToURL(book_file), show_wait_msg);
+}
+
 bool wxHtmlHelpController::AddBook(const wxString& book, bool show_wait_msg)
 {
     wxBusyCursor cur;
     wxSplitPath(file, & dir, & filename, & ext);
 
     if (!dir.IsEmpty())
-        dir = dir + wxString(wxT("/"));
+        dir = dir + wxFILE_SEP_PATH;
 
     // Try to find a suitable file
     wxString actualFilename = dir + filename + wxString(wxT(".zip"));
         }
     }
 
-    return AddBook(actualFilename);
+    return AddBook(wxFileName(actualFilename));
 }
 
 bool wxHtmlHelpController::LoadFile(const wxString& WXUNUSED(file))
 
     if (needGrab && m_helpFrame)
         m_helpFrame->AddGrab();
-#endif
+#endif // __WXGTK__
 }
 
 bool wxHtmlHelpController::Display(const wxString& x)