Added declaration of IHTMLDocument3 and more DISPIDs.
diff --git a/include/mshtml.idl b/include/mshtml.idl
index 55562b3..6a73751 100644
--- a/include/mshtml.idl
+++ b/include/mshtml.idl
@@ -1125,6 +1125,88 @@
 }
 
 /*****************************************************************************
+ *    IHTMLDOMNode interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f5da-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMNode : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
+    HRESULT nodeType([retval, out] long *p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
+    HRESULT parentNode([retval, out] IHTMLDOMNode **p);
+
+    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
+    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);
+
+    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
+    HRESULT childNodes([retval, out] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
+    HRESULT attributes([retval, out] IDispatch **p);
+
+    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
+    HRESULT insertBefore([in] IHTMLDOMNode *newChild,
+                         [optional, in] VARIANT refChild,
+                         [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
+    HRESULT removeChild([in] IHTMLDOMNode *oldChild,
+                        [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
+    HRESULT replaceChild([in] IHTMLDOMNode *newChild,
+                         [in] IHTMLDOMNode* oldChild,
+                         [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
+    HRESULT cloneNode([in] VARIANT_BOOL fDeep,
+                      [retval, out] IHTMLDOMNode **clonedNode);
+
+    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
+    HRESULT removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep,
+                       [retval, out] IHTMLDOMNode **removed);
+
+    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
+    HRESULT swapNode([in] IHTMLDOMNode *otherNode,
+                     [retval, out] IHTMLDOMNode **swappedNode);
+
+    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
+    HRESULT replaceNode([in] IHTMLDOMNode *replacement,
+                        [retval, out] IHTMLDOMNode **replaced);
+
+    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
+    HRESULT appendChild([in] IHTMLDOMNode *newChild,
+                        [retval, out] IHTMLDOMNode **node);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
+    HRESULT nodeName([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+    HRESULT nodeValue([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+    HRESULT nodeValue([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
+    HRESULT firstChild([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
+    HRESULT lastChild([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
+    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
+    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);
+}
+
+/*****************************************************************************
  *    IHTMLElement interface
  */
 [
@@ -2984,6 +3066,149 @@
 }
 
 /*****************************************************************************
+ *    IHTMLDocument3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f485-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument3 : IDispatch
+{
+    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
+    HRESULT releaseCapture();
+
+    [id(DISPID_IHTMLDOCUMENT3_RECALC)]
+    HRESULT recalc([defaultvalue(0), in] VARIANT_BOOL fForce);
+
+    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
+    HRESULT createTextNode([in] BSTR text,
+                           [retval, out] IHTMLDOMNode **newTextNode);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
+    HRESULT documentElement([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
+    HRESULT uniqueID([retval, out] BSTR *p);
+    
+    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
+    HRESULT attachEvent([in] BSTR event,
+                        [in] IDispatch* pDisp,
+                        [retval, out] VARIANT_BOOL *pfResult);
+
+    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
+    HRESULT detachEvent([in] BSTR event,
+                        [in] IDispatch *pDisp);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE)/*, displaybind, bindable*/]
+    HRESULT onrowsdelete([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE)/*, displaybind, bindable*/]
+    HRESULT onrowsdelete([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED)/*, displaybind, bindable*/]
+    HRESULT onrowsinserted([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED)/*, displaybind, bindable*/]
+    HRESULT onrowsinserted([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE)/*, displaybind, bindable*/]
+    HRESULT oncellchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE)/*, displaybind, bindable*/]
+    HRESULT oncellchange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED)/*, displaybind, bindable*/]
+    HRESULT ondatasetchanged([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED)/*, displaybind, bindable*/]
+    HRESULT ondatasetchanged([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE)/*, displaybind, bindable*/]
+    HRESULT ondataavailable([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE)/*, displaybind, bindable*/]
+    HRESULT ondataavailable([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE)/*, displaybind, bindable*/]
+    HRESULT ondatasetcomplete([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE)/*, displaybind, bindable*/]
+    HRESULT ondatasetcomplete([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE)/*, displaybind, bindable*/]
+    HRESULT onpropertychange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE)/*, displaybind, bindable*/]
+    HRESULT onpropertychange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
+    HRESULT dir([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
+    HRESULT dir([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU)/*, displaybind, bindable*/]
+    HRESULT oncontextmenu([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU)/*, displaybind, bindable*/]
+    HRESULT oncontextmenu([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP)/*, displaybind, bindable*/]
+    HRESULT onstop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP)/*, displaybind, bindable*/]
+    HRESULT onstop([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
+    HRESULT createDocumentFragment([retval, out] IHTMLDocument2 **pNewDoc);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
+    HRESULT parentDocument([retval, out] IHTMLDocument2 **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+    HRESULT enableDownload([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+    HRESULT enableDownload([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+    HRESULT baseUrl([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+    HRESULT baseUrl([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_CHILDNODES)]
+    HRESULT childNodes([retval, out] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+    HRESULT inheritStyleSheets([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+    HRESULT inheritStyleSheets([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS)/*, displaybind, bindable*/]
+    HRESULT onbeforeeditfocus([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS)/*, displaybind, bindable*/]
+    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
+    HRESULT getElementsByName([in] BSTR v,
+                              [retval, out] IHTMLElementCollection **pelColl);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
+    HRESULT getElementById([in] BSTR v,
+                           [retval, out] IHTMLElement **pel);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName([in] BSTR v,
+                                 [retval, out] IHTMLElementCollection **pelColl);
+}
+
+
+/*****************************************************************************
  *    HTMLDocument coclass
  */
 [