diff --git a/src/org/apache/xalan/processor/XSLTSchema.java b/src/org/apache/xalan/processor/XSLTSchema.java
index dfb8606..50bf910 100644
--- a/src/org/apache/xalan/processor/XSLTSchema.java
+++ b/src/org/apache/xalan/processor/XSLTSchema.java
@@ -20,7 +20,7 @@
  */
 package org.apache.xalan.processor;
 
-import java.util.Hashtable;
+import java.util.HashMap;
 
 import org.apache.xalan.templates.Constants;
 import org.apache.xalan.templates.ElemApplyImport;
@@ -886,7 +886,7 @@
    * function.
    * TODO:  When we convert to Java2, this should be a Set.
    */
-  private Hashtable m_availElems = new Hashtable();
+  private HashMap m_availElems = new HashMap();
   
   /**
    * Get the table of available elements.
@@ -894,7 +894,7 @@
    * @return table of available elements, keyed by qualified names, and with 
    * values of the same qualified names.
    */
-  public Hashtable getElemsAvailable() 
+  public HashMap getElemsAvailable() 
   {
     return m_availElems;
   }
diff --git a/src/org/apache/xalan/templates/ElemUse.java b/src/org/apache/xalan/templates/ElemUse.java
index 20211fd..7b5d2b6 100644
--- a/src/org/apache/xalan/templates/ElemUse.java
+++ b/src/org/apache/xalan/templates/ElemUse.java
@@ -149,7 +149,7 @@
       for (int i = 0; i < nNames; i++)
       {
         QName qname = attributeSetsNames[i];
-        Vector attrSets = stylesheet.getAttributeSetComposed(qname);
+        java.util.List attrSets = stylesheet.getAttributeSetComposed(qname);
 
         if (null != attrSets)
         {
@@ -160,7 +160,7 @@
           for (int k = nSets-1; k >= 0 ; k--)
           {
             ElemAttributeSet attrSet =
-              (ElemAttributeSet) attrSets.elementAt(k);
+              (ElemAttributeSet) attrSets.get(k);
 
             attrSet.execute(transformer);
           }
diff --git a/src/org/apache/xalan/templates/StylesheetRoot.java b/src/org/apache/xalan/templates/StylesheetRoot.java
index 574190f..df79f81 100644
--- a/src/org/apache/xalan/templates/StylesheetRoot.java
+++ b/src/org/apache/xalan/templates/StylesheetRoot.java
@@ -21,6 +21,8 @@
 package org.apache.xalan.templates;
 
 import java.text.DecimalFormatSymbols;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Properties;
 import java.util.Vector;
@@ -100,7 +102,7 @@
    * The schema used when creating this StylesheetRoot
    * @serial
    */
-  private Hashtable m_availElems;
+  private HashMap m_availElems;
   
   /**
    * Creates a StylesheetRoot and retains a pointer to the schema used to create this
@@ -148,7 +150,7 @@
    * @return table of available elements, keyed by qualified names, and with 
    * values of the same qualified names.
    */
-  public Hashtable getAvailableElements()
+  public HashMap getAvailableElements()
   {
     return m_availElems;
   }
@@ -286,7 +288,7 @@
     m_outputProperties = new OutputProperties(org.apache.xml.serializer.Method.UNKNOWN);
 //  m_outputProperties = new OutputProperties(Method.XML);
     
-    m_attrSets = new Hashtable();
+    m_attrSets = new HashMap();
     m_decimalFormatSymbols = new Hashtable();
     m_keyDecls = new Vector();
     m_namespaceAliasComposed = new Hashtable();
@@ -539,7 +541,7 @@
    * Each entry is a vector of ElemAttributeSet objects.
    * @serial
    */
-  private Hashtable m_attrSets;
+  private HashMap m_attrSets;
 
   /**
    * Recompose the attribute-set declarations.
@@ -548,16 +550,16 @@
    */
   void recomposeAttributeSets(ElemAttributeSet attrSet)
   {
-    Vector attrSetList = (Vector) m_attrSets.get(attrSet.getName());
+    ArrayList attrSetList = (ArrayList) m_attrSets.get(attrSet.getName());
 
     if (null == attrSetList)
     {
-      attrSetList = new Vector();
+      attrSetList = new ArrayList();
 
       m_attrSets.put(attrSet.getName(), attrSetList);
     }
 
-    attrSetList.addElement(attrSet);
+    attrSetList.add(attrSet);
   }
 
   /**
@@ -570,10 +572,10 @@
    *
    * @throws ArrayIndexOutOfBoundsException
    */
-  public Vector getAttributeSetComposed(QName name)
+  public ArrayList getAttributeSetComposed(QName name)
           throws ArrayIndexOutOfBoundsException
   {
-    return (Vector) m_attrSets.get(name);
+    return (ArrayList) m_attrSets.get(name);
   }
 
   /**
