diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c
index a6fa1c3a027582231a5e0fdb6a5253b84ed8b6b5..bae80e2b7732eb834e944e6938e53d88373d6994 100644
--- a/dlls/msxml3/attribute.c
+++ b/dlls/msxml3/attribute.c
@@ -504,7 +504,8 @@ static HRESULT WINAPI domattr_get_namespaceURI(
     BSTR* p)
 {
     domattr *This = impl_from_IXMLDOMAttribute( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI domattr_get_prefix(
diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c
index e5c6641e080012576d5097891645cb2d4b3bb8b8..d0984c16682505f698e98ec5bfa878e0082928c3 100644
--- a/dlls/msxml3/cdata.c
+++ b/dlls/msxml3/cdata.c
@@ -515,7 +515,8 @@ static HRESULT WINAPI domcdata_get_namespaceURI(
     BSTR* p)
 {
     domcdata *This = impl_from_IXMLDOMCDATASection( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI domcdata_get_prefix(
diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c
index a5d76c550dc1dace484fcbe9b28593e1fad91b13..5ebc9c325430a0bc2f0abbedb69e89df48ceb123 100644
--- a/dlls/msxml3/comment.c
+++ b/dlls/msxml3/comment.c
@@ -508,7 +508,8 @@ static HRESULT WINAPI domcomment_get_namespaceURI(
     BSTR* p)
 {
     domcomment *This = impl_from_IXMLDOMComment( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI domcomment_get_prefix(
diff --git a/dlls/msxml3/docfrag.c b/dlls/msxml3/docfrag.c
index a43d1324b4b1b4636b10e4378d8829ca0896cddc..8ecf905a7937baf3e12b72dd30dc6333e600f6ff 100644
--- a/dlls/msxml3/docfrag.c
+++ b/dlls/msxml3/docfrag.c
@@ -512,7 +512,8 @@ static HRESULT WINAPI domfrag_get_namespaceURI(
     BSTR* p)
 {
     domfrag *This = impl_from_IXMLDOMDocumentFragment( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI domfrag_get_prefix(
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 3ea85b30f0431ea65071e7542e4db10102435d9e..b4a5b84dfce97851ade32654fc757c3ca35b33ae 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -1425,7 +1425,8 @@ static HRESULT WINAPI domdoc_get_namespaceURI(
     BSTR* namespaceURI )
 {
     domdoc *This = impl_from_IXMLDOMDocument3( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), namespaceURI );
+    TRACE("(%p)->(%p)\n", This, namespaceURI);
+    return node_get_namespaceURI(&This->node, namespaceURI);
 }
 
 
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c
index 5c8383e115d0842b055f64941a28d7e8519df699..fe3e558c5ad1526837e82f42dc6bdf985f2f7612 100644
--- a/dlls/msxml3/element.c
+++ b/dlls/msxml3/element.c
@@ -964,7 +964,8 @@ static HRESULT WINAPI domelem_get_namespaceURI(
     BSTR* p)
 {
     domelem *This = impl_from_IXMLDOMElement( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI domelem_get_prefix(
diff --git a/dlls/msxml3/entityref.c b/dlls/msxml3/entityref.c
index 6b1ce2e64c1adf2db2499dec49639cf2cdf9e19e..dc681437055f06fc159bf88e93efefd92d9251a1 100644
--- a/dlls/msxml3/entityref.c
+++ b/dlls/msxml3/entityref.c
@@ -506,7 +506,8 @@ static HRESULT WINAPI entityref_get_namespaceURI(
     BSTR* p)
 {
     entityref *This = impl_from_IXMLDOMEntityReference( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI entityref_get_prefix(
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index bbe839440aec950ea559aac5fbe352049486c761..ff255cb921eb04c43c83235a18f5e817ae0db6e3 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -273,6 +273,7 @@ extern HRESULT node_get_xml(xmlnode*,BOOL,BOOL,BSTR*);
 extern HRESULT node_clone(xmlnode*,VARIANT_BOOL,IXMLDOMNode**);
 extern HRESULT node_get_prefix(xmlnode*,BSTR*);
 extern HRESULT node_get_base_name(xmlnode*,BSTR*);
+extern HRESULT node_get_namespaceURI(xmlnode*,BSTR*);
 
 extern HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **document);
 extern HRESULT SchemaCache_validate_tree(IXMLDOMSchemaCollection2* iface, xmlNodePtr tree);
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 8e90029b8e1fac09e641d7ee8294a2a6f644b01d..b2e5b161ed3ceabb4dc271b530a15b62893030d0 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -1079,15 +1079,10 @@ static HRESULT WINAPI xmlnode_selectSingleNode(
     return r;
 }
 
-static HRESULT WINAPI xmlnode_get_namespaceURI(
-    IXMLDOMNode *iface,
-    BSTR* namespaceURI)
+HRESULT node_get_namespaceURI(xmlnode *This, BSTR *namespaceURI)
 {
-    xmlnode *This = impl_from_IXMLDOMNode( iface );
     xmlNsPtr *ns;
 
-    TRACE("(%p)->(%p)\n", This, namespaceURI );
-
     if(!namespaceURI)
         return E_INVALIDARG;
 
@@ -1174,9 +1169,7 @@ static const struct IXMLDOMNodeVtbl xmlnode_vtbl =
     NULL,
     xmlnode_transformNode,
     xmlnode_selectNodes,
-    xmlnode_selectSingleNode,
-    NULL,
-    xmlnode_get_namespaceURI
+    xmlnode_selectSingleNode
 };
 
 void destroy_xmlnode(xmlnode *This)
@@ -1672,7 +1665,8 @@ static HRESULT WINAPI unknode_get_namespaceURI(
     BSTR* p)
 {
     unknode *This = impl_from_unkIXMLDOMNode( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI unknode_get_prefix(
diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c
index 6018093bb3447d08cfb4ea261387a6a663d2c3e4..48adea857ef0bb52cf34addc9ff8316ce27c1cea 100644
--- a/dlls/msxml3/pi.c
+++ b/dlls/msxml3/pi.c
@@ -523,7 +523,8 @@ static HRESULT WINAPI dom_pi_get_namespaceURI(
     BSTR* p)
 {
     dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI dom_pi_get_prefix(
diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c
index 988dd975bed01492d28c124f72573da6bca0a98e..0d3425e7c6fe2ef68694b9676882737c2862550d 100644
--- a/dlls/msxml3/text.c
+++ b/dlls/msxml3/text.c
@@ -593,7 +593,8 @@ static HRESULT WINAPI domtext_get_namespaceURI(
     BSTR* p)
 {
     domtext *This = impl_from_IXMLDOMText( iface );
-    return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
+    TRACE("(%p)->(%p)\n", This, p);
+    return node_get_namespaceURI(&This->node, p);
 }
 
 static HRESULT WINAPI domtext_get_prefix(