diff --git a/src/dom/DocumentImpl.cpp b/src/dom/DocumentImpl.cpp
index 7b0c3f0fca8281e791544f2325cef83c7acc0579..04cc4f5e6f62fe33f24cf13f6be49f47437016f6 100644
--- a/src/dom/DocumentImpl.cpp
+++ b/src/dom/DocumentImpl.cpp
@@ -750,14 +750,20 @@ bool DocumentImpl::isKidOK(NodeImpl *parent, NodeImpl *child)
 
 void DocumentImpl::setUserData(NodeImpl* n, void* data)
 {
-	if (!userData)
+	if (!userData && data)
 		userData = new RefHashTableOf<void>(29, false, new HashPtr());
-	userData->put((void*)n,data);
+	if (!data && userData)
+		userData->removeKey((void*)n);
+	else
+		userData->put((void*)n,data);
 }
 
 void* DocumentImpl::getUserData(NodeImpl* n)
 {
-	return userData->get((void*)n);
+	if (userData)
+		return userData->get((void*)n);
+	else
+		return null;
 }
 
 void* DocumentImpl::getUserData()
diff --git a/src/dom/NodeImpl.cpp b/src/dom/NodeImpl.cpp
index 67617176ceed11047d8f8f448a2a6989b7b2c197..b83d494ff2d60f915f09823736c40041ca5488ff 100644
--- a/src/dom/NodeImpl.cpp
+++ b/src/dom/NodeImpl.cpp
@@ -126,6 +126,10 @@ int  NodeImpl::gTotalNodeImpls= 0;
 
 
 NodeImpl::~NodeImpl() {
+	if (getUserData())
+	{
+		setUserData(null);
+	}
     NodeImpl::gLiveNodeImpls--;
 };