-    switch (backend)
-    {
-        #if defined(wxUSE_WEBVIEW_WEBKIT) && defined(__WXOSX__)
-            case wxWEB_VIEW_BACKEND_OSX_WEBKIT:
-                return new wxOSXWebKitCtrl(parent, id, url, pos, size, style,
-                                           name);
-        #endif
-
-        #if defined(wxUSE_WEBVIEW_WEBKIT) && defined(__WXGTK__)
-            case wxWEB_VIEW_BACKEND_GTK_WEBKIT:
-                return new wxWebViewWebKit(parent, id, url, pos, size, style,
-                                           name);
-        #endif
-
-        #if wxUSE_WEBVIEW_IE
-            case wxWEB_VIEW_BACKEND_IE:
-                return new wxWebViewIE(parent, id, url, pos, size, style, name);
-        #endif
-
-        case wxWEB_VIEW_BACKEND_DEFAULT:
-
-            #if defined(wxUSE_WEBVIEW_WEBKIT) && defined(__WXOSX__)
-            return new wxOSXWebKitCtrl(parent, id, url, pos, size, style, name);
-            #endif
-
-            #if defined(wxUSE_WEBVIEW_WEBKIT) && defined(__WXGTK__)
-            return new wxWebViewWebKit(parent, id, url, pos, size, style, name);
-            #endif
-
-            #if wxUSE_WEBVIEW_IE
-            return new wxWebViewIE(parent, id, url, pos, size, style, name);
-            #endif
-
-        // fall-through intended
-        default:
-            return NULL;
-    }
+    wxStringWebViewFactoryMap::iterator iter = FindFactory(backend);
+
+    if(iter == m_factoryMap.end())
+        return NULL;
+    else
+        return (*iter).second->Create(parent, id, url, pos, size, style, name);
+
+}
+
+// static
+void wxWebView::RegisterFactory(const wxString& backend, 
+                                wxSharedPtr<wxWebViewFactory> factory)
+{
+    m_factoryMap[backend] = factory;
+}
+
+// static 
+wxStringWebViewFactoryMap::iterator wxWebView::FindFactory(const wxString &backend)
+{
+    // Initialise the map if needed
+    if(m_factoryMap.empty())
+        InitFactoryMap();
+
+    return m_factoryMap.find(backend);
+}
+ 
+// static
+void wxWebView::InitFactoryMap()
+{
+#ifdef __WXMSW__
+    RegisterFactory(wxWebViewBackendIE, wxSharedPtr<wxWebViewFactory>
+                                                   (new wxWebViewFactoryIE));
+#else
+    RegisterFactory(wxWebViewBackendWebKit, wxSharedPtr<wxWebViewFactory>
+                                                       (new wxWebViewFactoryWebKit));
+#endif