return cloneObj;
  protected Object clone () throws CloneNotSupportedException{     //shallow copy for fields     BaseObject cloneObj = (BaseObject) super.clone();     // deep copy the attriOrder     synchronized (this.attribOrder) {      synchronized (cloneObj.attribOrder) {        cloneObj.attribOrder = Collections.synchronizedList(new ArrayList());        int stop = this.attribOrder.size();        for (int i = 0; i < stop; i++) {          cloneObj.attribOrder.add(new String((String) this.attribOrder.get(i)));        }      }    }     // XMLAttributes Clone, deep copy     synchronized (this.attribHash) {      synchronized (cloneObj.attribHash) {        cloneObj.attribHash = new Hashtable();        Enumeration keys = this.attribHash.keys();        while (keys.hasMoreElements()) {          String key = (String) keys.nextElement();          XMLAttribute XMLAttributeValue = (XMLAttribute) this.attribHash.get(key);          cloneObj.attribHash.put(key, XMLAttributeValue.clone());        }      }    }    return cloneObj;  }