diff --git a/include/mshtmdid.h b/include/mshtmdid.h
index 8f0530c..baa2354 100644
--- a/include/mshtmdid.h
+++ b/include/mshtmdid.h
@@ -2331,6 +2331,18 @@
 #define DISPID_IHTMLFRAMEBASE2_READYSTATE          DISPID_A_READYSTATE
 #define DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY   DISPID_A_ALLOWTRANSPARENCY
 
+/* IHTMLFrameBase3 */
+#define DISPID_IHTMLFRAMEBASE3_LONGDESC  DISPID_FRAMESITE+10
+
+/* IHTMLIFrameElement */
+#define DISPID_IHTMLIFRAMEELEMENT_VSPACE  DISPID_IFRAME+1
+#define DISPID_IHTMLIFRAMEELEMENT_HSPACE  DISPID_IFRAME+2
+#define DISPID_IHTMLIFRAMEELEMENT_ALIGN   STDPROPID_XOBJ_CONTROLALIGN
+
+/* IHTMLIFrameElement2 */
+#define DISPID_IHTMLIFRAMEELEMENT2_HEIGHT  STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLIFRAMEELEMENT2_WIDTH   STDPROPID_XOBJ_WIDTH
+
 /* IHTMLControlElement */
 #define DISPID_IHTMLCONTROLELEMENT_TABINDEX        STDPROPID_XOBJ_TABINDEX
 #define DISPID_IHTMLCONTROLELEMENT_FOCUS           (DISPID_SITE+0)
diff --git a/include/mshtml.idl b/include/mshtml.idl
index 93574502..c58bad8 100644
--- a/include/mshtml.idl
+++ b/include/mshtml.idl
@@ -18800,4 +18800,961 @@
     HRESULT allowTransparency([retval, out] VARIANT_BOOL *p);
 }
 
+/*****************************************************************************
+ *    DispHTMLIFrame dispinterface
+ */
+[
+    hidden,
+    uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLIFrame
+{
+properties:
+methods:
+    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
+    void setAttribute(
+            [in] BSTR strAttributeName,
+            [in] VARIANT AttributeValue,
+            [in, defaultvalue(1)] LONG lFlags);
+
+    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
+    VARIANT getAttribute(
+             [in] BSTR strAttributeName,
+             [in, defaultvalue(0)] LONG lFlags);
+
+    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
+    VARIANT_BOOL removeAttribute(
+            [in] BSTR strAttributeName,
+            [in, defaultvalue(1)] LONG lFlags);
+
+    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
+    void className(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]
+    BSTR className();
+
+    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]
+    void id(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]
+    BSTR id();
+
+    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
+    BSTR tagName();
+
+    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
+    IHTMLElement *parentElement();
+
+    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]
+    IHTMLStyle *style();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
+    void onhelp(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]
+    VARIANT onhelp();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
+    void onclick(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]
+    VARIANT onclick();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
+    void ondblclick(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]
+    VARIANT ondblclick();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
+    void onkeydown(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable]
+    VARIANT onkeydown();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
+    void onkeyup(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]
+    VARIANT onkeyup();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
+    void onkeypress(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]
+    VARIANT onkeypress();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
+    void onmouseout(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]
+    VARIANT onmouseout();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
+    void onmouseover(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable]
+    VARIANT onmouseover();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
+    void onmousemove(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable]
+    VARIANT onmousemove();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
+    void onmousedown(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable]
+    VARIANT onmousedown();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
+    void onmouseup(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable]
+    VARIANT onmouseup();
+
+    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
+    IDispatch *document();
+
+    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
+    void title(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]
+    BSTR title();
+
+    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
+    void language(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]
+    BSTR language();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
+    void onselectstart(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable]
+    VARIANT onselectstart();
+
+    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
+    void scrollIntoView([in, optional] VARIANT varargStart);
+
+    [id(DISPID_IHTMLELEMENT_CONTAINS)]
+    VARIANT_BOOL contains([in] IHTMLElement *pChild);
+
+    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]
+    long sourceIndex();
+
+    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
+    VARIANT recordNumber();
+
+    [propput, id(DISPID_IHTMLELEMENT_LANG)]
+    void lang(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_LANG)]
+    BSTR lang();
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
+    long offsetLeft();
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
+    long offsetTop();
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
+    long offsetWidth();
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
+    long offsetHeight();
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
+    IHTMLElement *offsetParent();
+
+    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
+    void innerHTML(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
+    BSTR innerHTML();
+
+    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
+    void innerText(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
+    BSTR innerText();
+
+    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
+    void outerHTML(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
+    BSTR outerHTML();
+
+    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
+    void outerText(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
+    BSTR outerText();
+
+    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
+    void insertAdjacentHTML(
+            [in] BSTR where,
+            [in] BSTR html);
+
+    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
+    void insertAdjacentText(
+            [in] BSTR where,
+            [in] BSTR text);
+
+    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
+    IHTMLElement *parentTextEdit();
+
+    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
+    VARIANT_BOOL isTextEdit();
+
+    [id(DISPID_IHTMLELEMENT_CLICK)]
+    void click();
+
+    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
+    IHTMLFiltersCollection *filters();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
+    void ondragstart(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable]
+    VARIANT ondragstart();
+
+    [id(DISPID_IHTMLELEMENT_TOSTRING)]
+    BSTR toString();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
+    void onbeforeupdate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable]
+    VARIANT onbeforeupdate();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
+    void onafterupdate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable]
+    VARIANT onafterupdate();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
+    void onerrorupdate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable]
+    VARIANT onerrorupdate();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
+    void onrowexit(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable]
+    VARIANT onrowexit();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
+    void onrowenter(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable]
+    VARIANT onrowenter();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
+    void ondatasetchanged(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable]
+    VARIANT ondatasetchanged();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
+    void ondataavailable(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable]
+    VARIANT ondataavailable();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
+    void ondatasetcomplete(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable]
+    VARIANT ondatasetcomplete();
+
+    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
+    void onfilterchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable]
+    VARIANT onfilterchange();
+
+    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
+    IDispatch *children();
+
+    [propget, id(DISPID_IHTMLELEMENT_ALL)]
+    IDispatch *all();
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
+    BSTR scopeName();
+
+    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
+    void setCapture([in, defaultvalue(-1)] VARIANT_BOOL containerCapture);
+
+    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
+    void releaseCapture();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
+    void onlosecapture(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
+    VARIANT onlosecapture();
+
+    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
+    BSTR componentFromPoint(
+            [in] long x,
+            [in] long y);
+
+    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
+    void doScroll([in, optional] VARIANT component);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
+    void onscroll(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
+    VARIANT onscroll();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
+    void ondrag(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
+    VARIANT ondrag();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
+    void ondragend(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
+    VARIANT ondragend();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
+    void ondragenter(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
+    VARIANT ondragenter();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
+    void ondragover(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
+    VARIANT ondragover();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
+    void ondragleave(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
+    VARIANT ondragleave();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
+    void ondrop(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
+    VARIANT ondrop();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
+    void onbeforecut(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
+    VARIANT onbeforecut();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
+    void oncut(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
+    VARIANT oncut();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
+    void onbeforecopy(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
+    VARIANT onbeforecopy();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
+    void oncopy(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
+    VARIANT oncopy();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
+    void onbeforepaste(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
+    VARIANT onbeforepaste();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
+    void onpaste(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
+    VARIANT onpaste();
+
+    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
+    IHTMLCurrentStyle *currentStyle();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
+    void onpropertychange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
+    VARIANT onpropertychange();
+
+    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
+    IHTMLRectCollection *getClientRects();
+
+    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
+    IHTMLRect *getBoundingClientRect();
+
+    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
+    void setExpression(
+            [in] BSTR propname,
+            [in] BSTR expression,
+            [in, defaultvalue("")] BSTR language);
+
+    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
+    VARIANT getExpression([in] BSTR propname);
+
+    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
+    VARIANT_BOOL removeExpression([in] BSTR propname);
+
+    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
+    void tabIndex(short v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
+    short tabIndex();
+
+    [id(DISPID_IHTMLELEMENT2_FOCUS)]
+    void focus();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
+    void accessKey(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
+    BSTR accessKey();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
+    void onblur(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
+    VARIANT onblur();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
+    void onfocus(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
+    VARIANT onfocus();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
+    void onresize(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
+    VARIANT onresize();
+
+    [id(DISPID_IHTMLELEMENT2_BLUR)]
+    void blur();
+
+    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
+    void addFilter([in] IUnknown *pUnk);
+
+    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
+    void removeFilter([in] IUnknown *pUnk);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
+    long clientHeight();
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
+    long clientWidth();
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
+    long clientTop();
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
+    long clientLeft();
+
+    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
+    VARIANT_BOOL attachEvent(
+            [in] BSTR event,
+            [in] IDispatch *pDisp);
+
+    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
+    void detachEvent(
+            [in] BSTR event,
+            [in] IDispatch *pDisp);
+
+    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
+    VARIANT readyState();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+    void onreadystatechange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+    VARIANT onreadystatechange();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
+    void onrowsdelete(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
+    VARIANT onrowsdelete();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
+    void onrowsinserted(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
+     VARIANT onrowsinserted();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
+     void oncellchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
+    VARIANT oncellchange();
+
+    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
+    void dir(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
+    BSTR dir();
+
+    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
+    IDispatch *createControlRange();
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
+    long scrollHeight();
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
+    long scrollWidth();
+
+    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
+    void scrollTop(long v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
+    long scrollTop();
+
+    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
+    void scrollLeft(long v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
+    long scrollLeft();
+
+    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
+    void clearAttributes();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
+    void oncontextmenu(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
+    VARIANT oncontextmenu();
+
+    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
+    IHTMLElement *insertAdjacentElement(
+            [in] BSTR where,
+            [in] IHTMLElement *insertedElement);
+
+    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
+    IHTMLElement *applyElement(
+            [in] IHTMLElement *apply,
+            [in] BSTR where);
+
+    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
+    BSTR getAdjacentText([in] BSTR where);
+
+    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
+    BSTR replaceAdjacentText(
+            [in] BSTR where,
+            [in] BSTR newText);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
+    VARIANT_BOOL canHaveChildren();
+
+    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
+    long addBehavior(
+            [in] BSTR bstrUrl,
+            [in, optional] VARIANT *pvarFactory);
+
+    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
+    VARIANT_BOOL removeBehavior([in] long cookie);
+
+    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
+    IHTMLStyle *runtimeStyle();
+
+    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
+    IDispatch *behaviorUrns();
+
+    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
+    void tagUrn(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
+    BSTR tagUrn();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
+    void onbeforeeditfocus(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
+    VARIANT onbeforeeditfocus();
+
+    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
+    long readyStateValue();
+
+    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
+    IHTMLElementCollection *getElementsByTagName([in] BSTR v);
+
+    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]
+    void mergeAttributes(
+            [in] IHTMLElement *mergeThis,
+            [in, optional] VARIANT *pvarFlags);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
+    VARIANT_BOOL isMultiLine();
+
+    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
+    VARIANT_BOOL canHaveHTML();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
+    void onlayoutcomplete(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
+    VARIANT onlayoutcomplete();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
+    void onpage(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
+    VARIANT onpage();
+
+    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
+    void inflateBlock(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
+    VARIANT_BOOL inflateBlock();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
+    void onbeforedeactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
+    VARIANT onbeforedeactivate();
+
+    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]
+    void setActive();
+
+    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
+    void contentEditable(BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
+    BSTR contentEditable();
+
+    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
+    VARIANT_BOOL isContentEditable();
+
+    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
+    void hideFocus(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
+    VARIANT_BOOL hideFocus();
+
+    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
+    void disabled(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
+    VARIANT_BOOL disabled();
+
+    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
+    VARIANT_BOOL isDisabled();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
+    void onmove(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
+    VARIANT onmove();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
+    void oncontrolselect(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
+    VARIANT oncontrolselect();
+
+    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
+    VARIANT_BOOL fireEvent(
+            [in] BSTR bstrEventName,
+            [in, optional] VARIANT *pvarEventObject);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
+    void onresizestart(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
+    VARIANT onresizestart();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
+    void onresizeend(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
+    VARIANT onresizeend();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
+    void onmovestart(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
+    VARIANT onmovestart();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
+    void onmoveend(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
+    VARIANT onmoveend();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
+    void onmouseenter(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
+    VARIANT onmouseenter();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
+    void onmouseleave(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
+    VARIANT onmouseleave();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
+    void onactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
+    VARIANT onactivate();
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
+    void ondeactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
+    VARIANT ondeactivate();
+
+    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]
+    VARIANT_BOOL dragDrop();
+
+    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
+    LONG glyphMode();
+
+    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
+    void onmousewheel(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
+    VARIANT onmousewheel();
+
+    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
+    void normalize();
+
+    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
+    IHTMLDOMAttribute *getAttributeNode([in] BSTR bstrname);
+
+    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
+    IHTMLDOMAttribute *setAttributeNode([in] IHTMLDOMAttribute *pattr);
+
+    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
+    IHTMLDOMAttribute *removeAttributeNode([in] IHTMLDOMAttribute *pattr);
+
+    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
+    void onbeforeactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
+    VARIANT onbeforeactivate();
+
+    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
+    void onfocusin(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
+    VARIANT onfocusin();
+
+    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
+    void onfocusout(VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
+    VARIANT onfocusout();
+
+    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
+    long uniqueNumber();
+
+    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
+    BSTR uniqueID();
+
+    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
+    long nodeType();
+
+    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
+    IHTMLDOMNode *parentNode();
+
+    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
+    VARIANT_BOOL hasChildNodes();
+
+    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
+    IDispatch *childNodes();
+
+    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
+    IDispatch *attributes();
+
+    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
+    IHTMLDOMNode *insertBefore(
+            [in] IHTMLDOMNode *newChild,
+            [in, optional] VARIANT refChild);
+
+    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
+    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);
+
+    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
+    IHTMLDOMNode *replaceChild(
+            [in] IHTMLDOMNode *newChild,
+            [in] IHTMLDOMNode *oldChild);
+
+    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
+    IHTMLDOMNode *cloneNode([in] VARIANT_BOOL fDeep);
+
+    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
+    IHTMLDOMNode *removeNode([in, defaultvalue(0)] VARIANT_BOOL fDeep);
+
+    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
+    IHTMLDOMNode *swapNode([in] IHTMLDOMNode *otherNode);
+
+    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
+    IHTMLDOMNode *replaceNode([in] IHTMLDOMNode *replacement);
+
+    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
+    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
+    BSTR nodeName();
+
+    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+    void nodeValue(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+    VARIANT nodeValue();
+
+    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
+    IHTMLDOMNode *firstChild();
+
+    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
+    IHTMLDOMNode *lastChild();
+
+    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
+    IHTMLDOMNode *previousSibling();
+
+    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
+    IHTMLDOMNode *nextSibling();
+
+    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
+    IDispatch *ownerDocument();
+
+    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
+    void dataFld(BSTR v);
+
+    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
+    BSTR dataFld();
+
+    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
+    void dataSrc(BSTR v);
+
+    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
+    BSTR dataSrc();
+
+    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
+    void dataFormatAs(BSTR v);
+
+    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
+    BSTR dataFormatAs();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]
+    void src(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]
+    BSTR src();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]
+    void border(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]
+    VARIANT border();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
+    void frameBorder(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
+    BSTR frameBorder();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
+    void frameSpacing(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
+    VARIANT frameSpacing();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
+    void marginWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
+    VARIANT marginWidth();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
+    void marginHeight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
+    VARIANT marginHeight();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
+    void noResize(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
+    VARIANT_BOOL noResize();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
+    void scrolling(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
+    BSTR scrolling();
+
+    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]
+    IHTMLWindow2 *contentWindow();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
+    void onload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
+    void allowTransparency(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
+    VARIANT_BOOL allowTransparency();
+
+    [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable]
+    void longDesc(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable]
+    BSTR longDesc();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    void vspace(long v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    long vspace();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    void hspace(long v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    long hspace();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    BSTR align();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+    VARIANT width();
+}
+
 } /* library MSHTML */
