diff --git a/src/org/apache/xpath/objects/XBoolean.java b/src/org/apache/xpath/objects/XBoolean.java
index f1fdad6..7507754 100644
--- a/src/org/apache/xpath/objects/XBoolean.java
+++ b/src/org/apache/xpath/objects/XBoolean.java
@@ -69,7 +69,7 @@
     super();
 
     m_val = b.booleanValue();
-    m_obj = b;
+    setObject(b);
   }
 
 
@@ -133,7 +133,7 @@
   public Object object()
   {
     if(null == m_obj)
-      m_obj = new Boolean(m_val);
+      setObject(new Boolean(m_val));
     return m_obj;
   }
 
diff --git a/src/org/apache/xpath/objects/XNodeSet.java b/src/org/apache/xpath/objects/XNodeSet.java
index 09697ab..dce5f66 100644
--- a/src/org/apache/xpath/objects/XNodeSet.java
+++ b/src/org/apache/xpath/objects/XNodeSet.java
@@ -55,12 +55,17 @@
   	super();
   	if(val instanceof XNodeSet)
   	{
-	    setIter(((XNodeSet)val).m_iter);
-	    m_dtmMgr = ((XNodeSet)val).m_dtmMgr;
-	    m_last = ((XNodeSet)val).m_last;
-	    if(!((XNodeSet)val).hasCache())
-	    	((XNodeSet)val).setShouldCacheNodes(true);
-	    m_obj = ((XNodeSet)val).m_obj;
+        final XNodeSet nodeSet = (XNodeSet) val;
+	    setIter(nodeSet.m_iter);
+	    m_dtmMgr = nodeSet.m_dtmMgr;
+	    m_last = nodeSet.m_last;
+        // First make sure the DTMIterator val has a cache,
+        // so if it doesn't have one, make one.
+	    if(!nodeSet.hasCache())
+	        nodeSet.setShouldCacheNodes(true);
+        
+        // Get the cache from val and use it ourselves (we share it).
+	    setObject(nodeSet.getIteratorCache());
   	}
   	else
     	setIter(val);
@@ -79,7 +84,7 @@
     m_last = val.m_last;
     if(!val.hasCache())
     	val.setShouldCacheNodes(true);
-    m_obj = val.m_obj;
+    setObject(val.m_obj);
   }
 
 
@@ -428,7 +433,7 @@
     else
     {
       mnl = new NodeSetDTM(iter());
-      m_obj = mnl;
+      setObject(mnl);
       setCurrentPos(0);
     }
 
diff --git a/src/org/apache/xpath/objects/XNodeSetForDOM.java b/src/org/apache/xpath/objects/XNodeSetForDOM.java
index eab7278..bc1e2b5 100644
--- a/src/org/apache/xpath/objects/XNodeSetForDOM.java
+++ b/src/org/apache/xpath/objects/XNodeSetForDOM.java
@@ -42,7 +42,7 @@
     m_dtmMgr = dtmMgr;
     m_origObj = node;
     int dtmHandle = dtmMgr.getDTMHandleFromNode(node);
-    m_obj = new NodeSetDTM(dtmMgr);
+    setObject(new NodeSetDTM(dtmMgr));
     ((NodeSetDTM) m_obj).addNode(dtmHandle);
   }
   
@@ -69,7 +69,7 @@
     // m_obj=new org.apache.xpath.NodeSetDTM(nodeList, xctxt);
     org.apache.xpath.NodeSetDTM nsdtm=new org.apache.xpath.NodeSetDTM(nodeList, xctxt);
     m_last=nsdtm.getLength();
-    m_obj = nsdtm;   
+    setObject(nsdtm);   
   }
 
   public XNodeSetForDOM(NodeIterator nodeIter, XPathContext xctxt)
@@ -83,7 +83,7 @@
     // m_obj = new org.apache.xpath.NodeSetDTM(nodeIter, xctxt);
     org.apache.xpath.NodeSetDTM nsdtm=new org.apache.xpath.NodeSetDTM(nodeIter, xctxt);
     m_last=nsdtm.getLength();
-    m_obj = nsdtm;   
+    setObject(nsdtm);   
   }
   
   /**
diff --git a/src/org/apache/xpath/objects/XNumber.java b/src/org/apache/xpath/objects/XNumber.java
index c2496da..5b053b1 100644
--- a/src/org/apache/xpath/objects/XNumber.java
+++ b/src/org/apache/xpath/objects/XNumber.java
@@ -60,7 +60,7 @@
     super();
 
     m_val = num.doubleValue();
-    m_obj = num;
+    setObject(num);
   }
 
   /**
@@ -377,7 +377,7 @@
   public Object object()
   {
     if(null == m_obj)
-      m_obj = new Double(m_val);
+      setObject(new Double(m_val));
     return m_obj;
   }
 
diff --git a/src/org/apache/xpath/objects/XObject.java b/src/org/apache/xpath/objects/XObject.java
index 199dcbe..6c3cf16 100644
--- a/src/org/apache/xpath/objects/XObject.java
+++ b/src/org/apache/xpath/objects/XObject.java
@@ -68,7 +68,11 @@
    */
   public XObject(Object obj)
   {
-    m_obj = obj;
+    setObject(obj);
+  }
+  
+  protected void setObject(Object obj) {
+      m_obj = obj;
   }
 
   /**
@@ -119,7 +123,7 @@
       allowDetachToRelease(true);
       detach();
 
-      m_obj = null;
+      setObject(null);
     }
   }
   
diff --git a/src/org/apache/xpath/objects/XRTreeFrag.java b/src/org/apache/xpath/objects/XRTreeFrag.java
index 9c4447c..ea19b39 100644
--- a/src/org/apache/xpath/objects/XRTreeFrag.java
+++ b/src/org/apache/xpath/objects/XRTreeFrag.java
@@ -118,7 +118,7 @@
   public void detach(){
     if(m_allowRelease){
     	m_DTMXRTreeFrag.destruct();
-      m_obj = null;
+      setObject(null);
     }
   }
   
