diff --git a/.gitignore b/.gitignore
index 75e33da41b616c52a01a30fee03cff4803a1ae90..2558e763011bf8d36f78da1fc2a5d9ae3cf3909d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -95,6 +95,7 @@ dlls/msi/sql.tab.h
 dlls/mstask/mstask_local.h
 dlls/mstask/mstask_local_i.c
 dlls/msxml/msxml_tlb.tlb
+dlls/msxml2/msxml2_tlb.tlb
 dlls/msxml3/msxml3_v1.tlb
 dlls/msxml3/xslpattern.tab.c
 dlls/msxml3/xslpattern.tab.h
diff --git a/configure b/configure
index 00fbb6f1de0d45bbf0829a80d009610343854976..e1da621b8fea40bfae2b27255030c5c61869d4f9 100755
--- a/configure
+++ b/configure
@@ -15066,6 +15066,7 @@ wine_fn_config_dll msvidc32 enable_msvidc32
 wine_fn_config_dll msvideo.dll16 enable_win16
 wine_fn_config_dll mswsock enable_mswsock mswsock
 wine_fn_config_dll msxml enable_msxml
+wine_fn_config_dll msxml2 enable_msxml2
 wine_fn_config_dll msxml3 enable_msxml3
 wine_fn_config_test dlls/msxml3/tests msxml3_test
 wine_fn_config_dll msxml4 enable_msxml4
diff --git a/configure.ac b/configure.ac
index 1250730f5fc9792e7897e80501bc3de75574be18..5e1810f847be724e2cd3a1b1de5100be9b13b378 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2612,6 +2612,7 @@ WINE_CONFIG_DLL(msvidc32)
 WINE_CONFIG_DLL(msvideo.dll16,enable_win16)
 WINE_CONFIG_DLL(mswsock,,[mswsock])
 WINE_CONFIG_DLL(msxml)
+WINE_CONFIG_DLL(msxml2)
 WINE_CONFIG_DLL(msxml3)
 WINE_CONFIG_TEST(dlls/msxml3/tests)
 WINE_CONFIG_DLL(msxml4)
diff --git a/dlls/msxml2/Makefile.in b/dlls/msxml2/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..263274cdfceff20b96166e467978cbb2dee3c211
--- /dev/null
+++ b/dlls/msxml2/Makefile.in
@@ -0,0 +1,10 @@
+MODULE = msxml2.dll
+
+C_SRCS = main.c
+
+IDL_TLB_SRCS = msxml2_tlb.idl
+IDL_R_SRCS   = msxml2_tlb.idl
+
+RC_SRCS = rsrc.rc
+
+@MAKE_DLL_RULES@
diff --git a/dlls/msxml2/main.c b/dlls/msxml2/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..a5acf7193ec42f412607ae8d8ea8f7663186beef
--- /dev/null
+++ b/dlls/msxml2/main.c
@@ -0,0 +1,63 @@
+/*
+ * MSXML2 implementation
+ *
+ * Copyright 2010 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include "windef.h"
+#include "winbase.h"
+#include "objbase.h"
+#include "rpcproxy.h"
+
+static HINSTANCE instance;
+
+BOOL WINAPI DllMain(HINSTANCE hinstance, DWORD reason, LPVOID reserved)
+{
+    switch (reason)
+    {
+    case DLL_PROCESS_ATTACH:
+        instance = hinstance;
+        DisableThreadLibraryCalls(hinstance);
+        break;
+    }
+    return TRUE;
+}
+
+/***********************************************************************
+ *		DllCanUnloadNow (MSXML2.@)
+ */
+HRESULT WINAPI DllCanUnloadNow(void)
+{
+    return S_FALSE;
+}
+
+/***********************************************************************
+ *		DllRegisterServer (MSXML2.@)
+ */
+HRESULT WINAPI DllRegisterServer(void)
+{
+    return __wine_register_resources( instance, NULL );
+}
+
+/***********************************************************************
+ *		DllUnregisterServer (MSXML2.@)
+ */
+HRESULT WINAPI DllUnregisterServer(void)
+{
+    return __wine_unregister_resources( instance, NULL );
+}
diff --git a/dlls/msxml2/msxml2.spec b/dlls/msxml2/msxml2.spec
new file mode 100644
index 0000000000000000000000000000000000000000..5fd4c2841f95320e62f45cdbebca32af9e06d222
--- /dev/null
+++ b/dlls/msxml2/msxml2.spec
@@ -0,0 +1,4 @@
+@ stdcall -private DllCanUnloadNow()
+@ stdcall -private DllGetClassObject(ptr ptr ptr) msxml3.DllGetClassObject
+@ stdcall -private DllRegisterServer()
+@ stdcall -private DllUnregisterServer()
diff --git a/dlls/msxml2/msxml2_tlb.idl b/dlls/msxml2/msxml2_tlb.idl
new file mode 100644
index 0000000000000000000000000000000000000000..9826496d25e323e73d9b246a4f24c39dc79f0ca1
--- /dev/null
+++ b/dlls/msxml2/msxml2_tlb.idl
@@ -0,0 +1,1166 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ * Copyright (C) 2010 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <msxml2did.h>
+#include <idispids.h>
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+[
+    uuid(f5078f18-c551-11d3-89b9-0000f81fe221),
+    version(2.6),
+    helpstring("Microsoft XML, v2.6")
+]
+library MSXML2
+{
+
+importlib("stdole2.tlb");
+
+interface IXMLDOMImplementation;
+interface IXMLDOMNode;
+interface IXMLDOMDocumentFragment;
+interface IXMLDOMDocument;
+interface IXMLDOMSchemaCollection;
+interface IXMLDOMDocument2;
+interface IXMLDOMNodeList;
+interface IXMLDOMNamedNodeMap;
+interface IXMLDOMCharacterData;
+interface IXMLDOMAttribute;
+interface IXMLDOMElement;
+interface IXMLDOMText;
+interface IXMLDOMComment;
+interface IXMLDOMProcessingInstruction;
+interface IXMLDOMCDATASection;
+interface IXMLDOMDocumentType;
+interface IXMLDOMNotation;
+interface IXMLDOMEntity;
+interface IXMLDOMEntityReference;
+interface IXMLDOMParseError;
+interface IXTLRuntime;
+interface IXSLTemplate;
+interface IXSLProcessor;
+
+typedef enum tagDOMNodeType
+{
+    NODE_INVALID  		= 0,
+    NODE_ELEMENT  		= 1,
+    NODE_ATTRIBUTE		= 2,
+    NODE_TEXT			= 3,
+    NODE_CDATA_SECTION		= 4,
+    NODE_ENTITY_REFERENCE 	= 5,
+    NODE_ENTITY 		= 6,
+    NODE_PROCESSING_INSTRUCTION = 7,
+    NODE_COMMENT		= 8,
+    NODE_DOCUMENT		= 9,
+    NODE_DOCUMENT_TYPE		= 10,
+    NODE_DOCUMENT_FRAGMENT 	= 11,
+    NODE_NOTATION 		= 12
+} DOMNodeType;
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF80-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNode : IDispatch
+{
+    [propget, id(DISPID_DOM_NODE_NODENAME)]
+    HRESULT nodeName([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue([in] VARIANT var1);
+
+    [propget, id(DISPID_DOM_NODE_NODETYPE)]
+    HRESULT nodeType([retval, out] DOMNodeType *domNodeType);
+
+    [propget, id(DISPID_DOM_NODE_PARENTNODE)]
+    HRESULT parentNode([retval, out] IXMLDOMNode **parent);
+
+    [propget, id(DISPID_DOM_NODE_CHILDNODES)]
+    HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);
+
+    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
+    HRESULT firstChild([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_LASTCHILD)]
+    HRESULT lastChild([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
+    HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
+    HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
+    HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);
+
+    [id(DISPID_DOM_NODE_INSERTBEFORE)]
+    HRESULT insertBefore(
+        [in] IXMLDOMNode *newNode,
+        [in] VARIANT var1,
+        [retval, out] IXMLDOMNode **outOldNode);
+
+    [id(DISPID_DOM_NODE_REPLACECHILD)]
+    HRESULT replaceChild(
+        [in] IXMLDOMNode *newNode,
+        [in] IXMLDOMNode *oldNode,
+        [retval, out] IXMLDOMNode **outOldNode);
+
+    [id(DISPID_DOM_NODE_REMOVECHILD)]
+    HRESULT removeChild(
+        [in] IXMLDOMNode *domNode,
+        [retval, out] IXMLDOMNode **oldNode);
+
+    [id(DISPID_DOM_NODE_APPENDCHILD)]
+    HRESULT appendChild(
+        [in] IXMLDOMNode *newNode,
+        [retval, out] IXMLDOMNode **outNewNode);
+
+    [id(DISPID_DOM_NODE_HASCHILDNODES)]
+    HRESULT hasChildNodes(
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_DOM_NODE_OWNERDOC)]
+    HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);
+
+    [id(DISPID_DOM_NODE_CLONENODE)]
+    HRESULT cloneNode(
+        [in] VARIANT_BOOL pbool,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
+    HRESULT nodeTypeString([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
+    HRESULT specified([retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
+    HRESULT definition([retval,out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue([in] VARIANT var1);
+
+    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_NODE_XML)]
+    HRESULT xml([retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
+    HRESULT transformNode(
+        [in] IXMLDOMNode *domNode,
+        [retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_SELECTNODES)]
+    HRESULT selectNodes(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **outList);
+
+    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
+    HRESULT selectSingleNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget,id(DISPID_XMLDOM_NODE_PARSED)]
+    HRESULT parsed([retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
+    HRESULT namespaceURI([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
+    HRESULT prefix([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
+    HRESULT baseName([retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
+    HRESULT transformNodeToObject(
+        [in] IXMLDOMNode *domNode,
+        [in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF81-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
+    HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);
+
+    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
+    HRESULT implementation([retval, out] IXMLDOMImplementation **impl);
+
+    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement([retval, out] IXMLDOMElement **domElement);
+
+    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement([in] IXMLDOMElement *domElement);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
+    HRESULT createElement(
+        [in] BSTR p,
+        [retval, out] IXMLDOMElement **domElement);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
+    HRESULT createDocumentFragment(
+        [retval, out] IXMLDOMDocumentFragment **docFrag);
+
+    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
+    HRESULT createTextNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMText **text);
+
+    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
+    HRESULT createComment(
+        [in] BSTR p,
+        [retval, out] IXMLDOMComment **comment);
+
+    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
+    HRESULT createCDATASection(
+        [in] BSTR p,
+        [retval, out] IXMLDOMCDATASection **cdata);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
+    HRESULT createProcessingInstruction(
+        [in] BSTR target,
+        [in] BSTR data,
+        [retval, out] IXMLDOMProcessingInstruction **pi);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
+    HRESULT createAttribute(
+        [in] BSTR p,
+        [retval, out] IXMLDOMAttribute **attribute);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
+    HRESULT createEntityReference(
+        [in] BSTR p,
+        [retval, out] IXMLDOMEntityReference **entityRef);
+
+    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **resultList);
+
+    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
+    HRESULT createNode(
+        [in] VARIANT var,
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
+    HRESULT nodeFromID(
+        [in] BSTR id,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
+    HRESULT load(
+        [in] VARIANT var1,
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_READYSTATE)]
+    HRESULT readyState([retval, out] LONG *value);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
+    HRESULT parseError([retval, out] IXMLDOMParseError **err);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
+    HRESULT url([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async([retval, out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async([in] VARIANT_BOOL pbool);
+
+    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
+    HRESULT abort();
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
+    HRESULT loadXML(
+        [in] BSTR p,
+        [out, retval] VARIANT_BOOL *pbool);
+
+    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
+    HRESULT save(
+        [in] VARIANT var1);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse([in] VARIANT_BOOL pbool);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals([in] VARIANT_BOOL pbool);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange([in] VARIANT var1);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable([in] VARIANT var1);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
+    HRESULT ontransformnode([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (373984c8-b845-449b-91e7-45ac83036ade)
+]
+interface IXMLDOMSchemaCollection : IDispatch
+{
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]
+    HRESULT add(
+        [in] BSTR uri,
+        [in] VARIANT var);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]
+    HRESULT get(
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]
+    HRESULT remove(
+        [in] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]
+    HRESULT length(
+        [retval, out] LONG *length);
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]
+    HRESULT addCollection(
+        [in] IXMLDOMSchemaCollection *otherCollection);
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF95-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument2 : IXMLDOMDocument
+{
+    [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]
+    HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+    HRESULT schemas([retval, out] VARIANT *var1);
+
+    [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+    HRESULT schemas([in] VARIANT var1);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]
+    HRESULT validate(
+        [retval, out] IXMLDOMParseError **err);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]
+    HRESULT setProperty(
+        [in] BSTR p,
+        [in] VARIANT var);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR p,
+        [retval, out] VARIANT *var);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF82-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNodeList : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length([retval, out] LONG *lLength);
+
+    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
+    HRESULT nextNode(
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NODELIST_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)
+]
+interface IXMLDOMSelection : IXMLDOMNodeList
+{
+    [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]
+    HRESULT expr([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]
+    HRESULT expr([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+    HRESULT context([retval, out] IXMLDOMNode **ppNode);
+
+    [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+    HRESULT context([in] IXMLDOMNode * pNode);
+
+    [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]
+    HRESULT peekNode(
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_MATCHES)]
+    HRESULT matches(
+        [in] IXMLDOMNode *pNode,
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)]
+    HRESULT removeNext(
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]
+    HRESULT removeAll();
+
+    [id(DISPID_XMLDOM_SELECTION_CLONE)]
+    HRESULT clone(
+        [retval, out] IXMLDOMSelection **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR p,
+        [retval, out] VARIANT * var);
+
+    [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]
+    HRESULT setProperty(
+        [in] BSTR p,
+        [in] VARIANT var);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF83-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNamedNodeMap : IDispatch
+{
+    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
+    HRESULT getNamedItem(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
+    HRESULT setNamedItem(
+        [in] IXMLDOMNode *newNode,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
+    HRESULT removeNamedItem(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length([retval, out] LONG *lLength);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
+    HRESULT getQualifiedItem(
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
+    HRESULT removeQualifiedItem(
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
+    HRESULT nextNode(
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa413-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMDocumentFragment : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF84-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCharacterData : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data([retval, out] BSTR *p);
+
+    [propput, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data([in] BSTR data);
+
+    [propget, id(DISPID_DOM_DATA_LENGTH)]
+    HRESULT length([retval, out] LONG *len);
+
+    [id(DISPID_DOM_DATA_SUBSTRING)]
+    HRESULT substringData(
+        [in] LONG offset,
+        [in] LONG count,
+        [retval, out] BSTR *p);
+
+    [id(DISPID_DOM_DATA_APPEND)]
+    HRESULT appendData(
+        [in] BSTR p);
+
+    [id(DISPID_DOM_DATA_INSERT)]
+    HRESULT insertData(
+        [in] LONG offset,
+        [in] BSTR p);
+
+    [id(DISPID_DOM_DATA_DELETE)]
+    HRESULT deleteData(
+        [in] LONG offset,
+        [in] LONG count);
+
+    [id(DISPID_DOM_DATA_REPLACE)]
+    HRESULT replaceData(
+        [in] LONG offset,
+        [in] LONG count,
+        [in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF85-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMAttribute : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF86-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMElement : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
+    HRESULT tagName([retval, out] BSTR *p);
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR p,
+        [retval, out] VARIANT *var);
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR p,
+        [in] VARIANT var);
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+        [in] BSTR p);
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
+    HRESULT getAttributeNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
+    HRESULT setAttributeNode(
+        [in] IXMLDOMAttribute *domAttribute,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
+    HRESULT removeAttributeNode(
+        [in] IXMLDOMAttribute *domAttribute,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **resultList);
+
+    [id(DISPID_DOM_ELEMENT_NORMALIZE)]
+    HRESULT normalize();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF87-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMText : IXMLDOMCharacterData
+{
+    [id(DISPID_DOM_TEXT_SPLITTEXT)]
+    HRESULT splitText(
+        [in] LONG offset,
+        [retval, out] IXMLDOMText **txtNode);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF88-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMComment : IXMLDOMCharacterData
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF89-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMProcessingInstruction : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_PI_TARGET)]
+    HRESULT target([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_PI_DATA)]
+    HRESULT data([retval, out] BSTR *p);
+
+    [propput, id(DISPID_DOM_PI_DATA)]
+    HRESULT data([in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCDATASection : IXMLDOMText
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocumentType : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
+    HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
+    HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNotation : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
+    HRESULT publicId([retval, out] VARIANT *id);
+
+    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
+    HRESULT systemId([retval, out] VARIANT *id);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntity : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
+    HRESULT publicId([retval, out] VARIANT *id1);
+
+    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
+    HRESULT systemId([retval, out] VARIANT *id1);
+
+    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
+    HRESULT notationName([retval, out] BSTR *p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntityReference : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMImplementation : IDispatch
+{
+    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
+    HRESULT hasFeature(
+        [in] BSTR feature,
+        [in] BSTR version,
+        [retval, out] VARIANT_BOOL *pbool);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa425-272f-11d2-836f-0000f87a7782)
+]
+interface IXTLRuntime : IXMLDOMNode
+{
+    [id(DISPID_XTLRUNTIME_UNIQUEID)]
+    HRESULT uniqueID(
+        [in]IXMLDOMNode *pNode,
+        [retval, out]LONG *pID);
+
+    [id(DISPID_XTLRUNTIME_DEPTH)]
+    HRESULT depth(
+        [in] IXMLDOMNode *pNode,
+        [retval, out]LONG * pDepth);
+
+    [id(DISPID_XTLRUNTIME_CHILDNUMBER)]
+    HRESULT childNumber(
+        [in]IXMLDOMNode *pNode,
+        [retval, out] LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]
+    HRESULT ancestorChildNumber(
+        [in]BSTR bstr,
+        [in]IXMLDOMNode *pNode,
+        [retval, out]LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]
+    HRESULT absoluteChildNumber(
+        [in]IXMLDOMNode *pNode,
+        [retval, out]LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_FORMATINDEX)]
+    HRESULT formatIndex(
+        [in] LONG lIndex,
+        [in] BSTR bstr,
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATNUMBER)]
+    HRESULT formatNumber(
+        [in] double dblNumber,
+        [in] BSTR bstr,
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATDATE)]
+    HRESULT formatDate(
+        [in] VARIANT var1,
+        [in] BSTR bstr,
+        [optional, in] VARIANT var2,
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATTIME)]
+    HRESULT formatTime(
+        [in] VARIANT var1,
+        [in] BSTR bstr,
+        [optional, in] VARIANT var2,
+        [retval, out]BSTR *pbstr);
+
+}
+
+[
+    uuid(3efaa427-272f-11d2-836f-0000f87a7782)
+]
+dispinterface XMLDOMDocumentEvents
+{
+    properties:
+    methods:
+    [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable();
+
+    [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF92-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLProcessor : IDispatch
+{
+    [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+    HRESULT input([in] VARIANT var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+    HRESULT input([retval, out] VARIANT *var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]
+    HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);
+
+    [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]
+    HRESULT setStartMode(
+        [in] BSTR p,
+        [in, defaultvalue("")] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]
+    HRESULT startMode([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]
+    HRESULT startModeURI([retval, out] BSTR *uri);
+
+    [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+    HRESULT output([in] VARIANT var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+    HRESULT output([retval, out] VARIANT *var);
+
+    [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]
+    HRESULT transform(
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [id(DISPID_XMLDOM_PROCESSOR_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]
+    HRESULT readyState([retval, out] LONG *pstate);
+
+    [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]
+    HRESULT addParameter(
+        [in] BSTR p,
+        [in] VARIANT var,
+        [in, defaultvalue("")] BSTR uri);
+
+    [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]
+    HRESULT addObject(
+        [in] IDispatch* obj,
+        [in] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]
+    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF93-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLTemplate : IDispatch
+{
+    [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+    HRESULT stylesheet([in] IXMLDOMNode *node);
+
+    [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]
+    HRESULT createProcessor(
+        [retval, out] IXSLProcessor **ppProcessor);
+}
+
+[
+    object,
+    uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),
+    odl,
+    dual,
+    oleautomation,
+    pointer_default(unique)
+]
+interface IXMLHTTPRequest : IDispatch
+{
+    [id(1)]
+    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,
+                 [in,optional] VARIANT username, [in,optional] VARIANT password);
+
+    [id(2)]
+    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);
+
+    [id(3)]
+    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);
+
+    [id(4)]
+    HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);
+
+    [id(5)]
+    HRESULT send([in, optional] VARIANT body);
+
+    [id(6)]
+    HRESULT abort();
+
+    [propget, id(7)]
+    HRESULT status([out, retval] LONG *pStatus);
+
+    [propget, id(8)]
+    HRESULT statusText([out, retval] BSTR *pStatus);
+
+    [propget, id(9)]
+    HRESULT responseXML([out, retval] IDispatch **pBody);
+
+    [propget, id(10)]
+    HRESULT responseText([out, retval] BSTR *pBody);
+
+    [propget, id(11)]
+    HRESULT responseBody([out, retval] VARIANT *pBody);
+
+    [propget, id(12)]
+    HRESULT responseStream([out, retval] VARIANT *pBody);
+
+    [propget, id(13)]
+    HRESULT readyState([out, retval] LONG *pState);
+
+    [propput, id(14)]
+    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa426-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT errorCode([retval, out] LONG *errCode);
+
+    [propget, id(DISPID_DOM_ERROR_URL)]
+    HRESULT url([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_REASON)]
+    HRESULT reason([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
+    HRESULT srcText([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_LINE)]
+    HRESULT line([retval, out] LONG *lineNo);
+
+    [propget, id(DISPID_DOM_ERROR_LINEPOS)]
+    HRESULT linepos([retval, out] LONG * linePos);
+
+    [propget, id(DISPID_DOM_ERROR_FILEPOS)]
+    HRESULT filepos([retval, out] LONG * filePos);
+}
+
+[
+    uuid(F6D90F11-9C73-11D3-B32E-00C04F990BB4)
+]
+coclass DOMDocument
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("XML DOM Document 2.6"),
+    progid("Msxml2.DOMDocument.2.6"),
+    vi_progid("Msxml2.DOMDocument"),
+    threading(both),
+    uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument26
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(F6D90F12-9C73-11D3-B32E-00C04F990BB4)
+]
+coclass FreeThreadedDOMDocument
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("Free Threaded XML DOM Document 2.6"),
+    progid("Msxml2.FreeThreadedDOMDocument.2.6"),
+    vi_progid("Msxml2.FreeThreadedDOMDocument"),
+    threading(both),
+    uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument26
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass XMLHTTP
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    helpstring("XML HTTP 2.6"),
+    progid("Msxml2.XMLHTTP.2.6"),
+    vi_progid("Msxml2.XMLHTTP"),
+    threading(apartment),
+    uuid(f5078f1e-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP26
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    uuid(373984c9-b845-449b-91e7-45ac83036ade)
+]
+coclass XMLSchemaCache
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    helpstring("XML Schema Cache 2.6"),
+    progid("Msxml2.XMLSchemaCache.2.6"),
+    vi_progid("Msxml2.XMLSchemaCache"),
+    threading(both),
+    uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache26
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)
+]
+coclass XSLTemplate
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    helpstring("XSL Template 2.6"),
+    progid("Msxml2.XSLTemplate.2.6"),
+    vi_progid("Msxml2.XSLTemplate"),
+    threading(both),
+    uuid(f5078f21-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate26
+{
+    [default] interface IXSLTemplate;
+}
+
+} /* Library MSXML */
diff --git a/dlls/msxml2/rsrc.rc b/dlls/msxml2/rsrc.rc
new file mode 100644
index 0000000000000000000000000000000000000000..087bec1a38b1a9379cf86cf2f79f921f34f5738a
--- /dev/null
+++ b/dlls/msxml2/rsrc.rc
@@ -0,0 +1,22 @@
+/*
+ * Resources for msxml2
+ *
+ * Copyright 2010 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* @makedep: msxml2_tlb.tlb */
+1 TYPELIB msxml2_tlb.tlb
diff --git a/dlls/msxml3/factory.c b/dlls/msxml3/factory.c
index 8ad1abcbd7b5dce456efef55cdf19b3e0ddf87a7..6fbf464e3dc4e69efe665b02e7ded1d8f0723c22 100644
--- a/dlls/msxml3/factory.c
+++ b/dlls/msxml3/factory.c
@@ -218,6 +218,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
 
     if( IsEqualCLSID( rclsid, &CLSID_DOMDocument )  ||  /* Version indep. v 2.x */
         IsEqualCLSID( rclsid, &CLSID_DOMDocument2 ) ||  /* Version indep. v 3.0 */
+        IsEqualCLSID( rclsid, &CLSID_DOMDocument26 )||  /* Version dep.   v 2.6 */
         IsEqualCLSID( rclsid, &CLSID_DOMDocument30 )||  /* Version dep.   v 3.0 */
         IsEqualCLSID( rclsid, &CLSID_DOMDocument40 )||  /* Version dep.   v 4.0 */
         IsEqualCLSID( rclsid, &CLSID_DOMDocument60 ))   /* Version dep.   v 6.0 */
@@ -225,6 +226,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
         return DOMClassFactory_Create(rclsid, riid, ppv, DOMDocument_create);
     }
     else if( IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache )   ||
+             IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache26 ) ||
              IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache30 ) ||
              IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache40 ) ||
              IsEqualCLSID( rclsid, &CLSID_XMLSchemaCache60 ))
@@ -237,6 +239,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
     }
     else if( IsEqualCLSID( rclsid, &CLSID_DOMFreeThreadedDocument )   ||   /* Version indep. v 2.x */
              IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument )   ||
+             IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument26 ) ||
              IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument30 ) ||
              IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument40 ) ||
              IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument60 ))
diff --git a/dlls/msxml3/regsvr.c b/dlls/msxml3/regsvr.c
index bbefedd6954feaa61b2a44c907416773f5d8712c..50da4f2f4e3a152317e4b50b27df5bb33ea96ae7 100644
--- a/dlls/msxml3/regsvr.c
+++ b/dlls/msxml3/regsvr.c
@@ -490,14 +490,6 @@ static struct regsvr_coclass const coclass_list[] = {
         "Microsoft.FreeThreadedXMLDOM.1.0",
         "1.0"
     },
-    {   &CLSID_FreeThreadedDOMDocument26,
-        "Free Threaded XML DOM Document 2.6",
-        NULL,
-        "msxml3.dll",
-        "Both",
-        "Microsoft.FreeThreadedXMLDOM.1.0",
-        "1.0"
-     },
     {   &CLSID_FreeThreadedDOMDocument30,
         "Free Threaded XML DOM Document 3.0",
         NULL,
@@ -506,14 +498,6 @@ static struct regsvr_coclass const coclass_list[] = {
         "Microsoft.FreeThreadedDOMDocument.1.0",
         "1.0"
      },
-    {   &CLSID_XMLHTTP26,
-	"XML HTTP 2.6",
-	NULL,
-	"msxml3.dll",
-	"Apartment",
-	"Msxml2.XMLHTTP.2.6",
-	"2.6"
-    },
     {   &CLSID_XMLHTTP30,
 	"XML HTTP 3.0",
 	NULL,
@@ -537,14 +521,6 @@ static struct regsvr_coclass const coclass_list[] = {
 	"Msxml2.XMLSchemaCache",
         "3.0"
     },
-    {   &CLSID_XMLSchemaCache26,
-    "XML Schema Cache 2.6",
-    NULL,
-    "msxml3.dll",
-    "Both",
-    "Msxml2.XMLSchemaCache",
-    "2.6"
-    },
     {   &CLSID_XMLSchemaCache30,
 	"XML Schema Cache 3.0",
 	NULL,
@@ -625,21 +601,11 @@ static struct progid const progid_list[] = {
         &CLSID_DOMDocument30,
         NULL
     },
-    {   "MSXML.FreeThreadedDOMDocument26",
-    "Free threaded XML DOM Document 2.6",
-    &CLSID_FreeThreadedDOMDocument26,
-    NULL
-    },
     {   "MSXML.FreeThreadedDOMDocument30",
     "Free threaded XML DOM Document 3.0",
     &CLSID_FreeThreadedDOMDocument30,
     NULL
     },
-    {   "Msxml2.XMLHTTP.2.6",
-	"XML HTTP 2.6",
-	&CLSID_XMLHTTP26,
-	NULL
-    },
     {   "Msxml2.XMLHTTP.3.0",
 	"XML HTTP 3.0",
 	&CLSID_XMLHTTP30,
@@ -655,11 +621,6 @@ static struct progid const progid_list[] = {
         &CLSID_XMLSchemaCache,
         "Msxml2.XMLSchemaCache.3.0"
     },
-    {   "Msxml2.XMLSchemaCache.2.6",
-        "XML Schema Cache 2.6",
-        &CLSID_XMLSchemaCache26,
-        "Msxml2.XMLSchemaCache.2.6"
-    },
     {   "Msxml2.XMLSchemaCache.3.0",
         "XML Schema Cache 3.0",
         &CLSID_XMLSchemaCache30,
diff --git a/tools/wine.inf.in b/tools/wine.inf.in
index e65162de879c9fe9fa81c196f012d695e3574d93..b2667af001f6a54da3f19e3e5f57845ac9d1196a 100644
--- a/tools/wine.inf.in
+++ b/tools/wine.inf.in
@@ -2528,6 +2528,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
 11,,msisip.dll,1
 11,,mstask.dll,1
 11,,msxml.dll,1
+11,,msxml2.dll,1
 11,,msxml3.dll,1
 11,,msxml4.dll,1
 11,,msxml6.dll,1