diff --git a/src/xercesc/util/BaseRefVectorOf.hpp b/src/xercesc/util/BaseRefVectorOf.hpp
index f7360d07b88ee0f29b54e0f1716357c20418328a..96da51777ba301e5994d84ea042f7365075d5f11 100644
--- a/src/xercesc/util/BaseRefVectorOf.hpp
+++ b/src/xercesc/util/BaseRefVectorOf.hpp
@@ -89,14 +89,14 @@ public :
     //  Element management
     // -----------------------------------------------------------------------
     void addElement(TElem* const toAdd);
-    void setElementAt(TElem* const toSet, const unsigned int setAt);
+    virtual void setElementAt(TElem* const toSet, const unsigned int setAt);
     void insertElementAt(TElem* const toInsert, const unsigned int insertAt);
     TElem* orphanElementAt(const unsigned int orphanAt);
-    void removeAllElements();
-    void removeElementAt(const unsigned int removeAt);
-    void removeLastElement();
+    virtual void removeAllElements();
+    virtual void removeElementAt(const unsigned int removeAt);
+    virtual void removeLastElement();
     bool containsElement(const TElem* const toCheck);
-    void cleanup();
+    virtual void cleanup();
     void reinitialize();
 
 
diff --git a/src/xercesc/util/RefArrayVectorOf.c b/src/xercesc/util/RefArrayVectorOf.c
index 28b23faec58fbfa87796b16c715bd6a11044a9dc..8feae165cf3bfafb9b3ae0385da2205993d49a52 100644
--- a/src/xercesc/util/RefArrayVectorOf.c
+++ b/src/xercesc/util/RefArrayVectorOf.c
@@ -25,10 +25,82 @@ template <class TElem> RefArrayVectorOf<TElem>::~RefArrayVectorOf()
     if (fAdoptedElems)
     {
       for (unsigned int index = 0; index < fCurCount; index++)
-        fMemoryManager->deallocate(fElemList[index]);//delete[] fElemList[index];
+            fMemoryManager->deallocate(fElemList[index]);//delete[] fElemList[index];
     }
     fMemoryManager->deallocate(fElemList);//delete [] fElemList;
 }
 
+template <class TElem> void
+RefArrayVectorOf<TElem>::setElementAt(TElem* const toSet, const unsigned int setAt)
+{
+    if (setAt >= fCurCount)
+        ThrowXML(ArrayIndexOutOfBoundsException, XMLExcepts::Vector_BadIndex);
+
+    if (fAdoptedElems)
+        fMemoryManager->deallocate(fElemList[setAt]);
+
+    fElemList[setAt] = toSet;
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::removeAllElements()
+{
+    for (unsigned int index = 0; index < fCurCount; index++)
+    {
+        if (fAdoptedElems)
+          fMemoryManager->deallocate(fElemList[index]);
+
+        // Keep unused elements zero for sanity's sake
+        fElemList[index] = 0;
+    }
+    fCurCount = 0;
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::
+removeElementAt(const unsigned int removeAt)
+{
+    if (removeAt >= fCurCount)
+        ThrowXML(ArrayIndexOutOfBoundsException, XMLExcepts::Vector_BadIndex);
+
+    if (fAdoptedElems)
+        fMemoryManager->deallocate(fElemList[removeAt]);
+
+    // Optimize if its the last element
+    if (removeAt == fCurCount-1)
+    {
+        fElemList[removeAt] = 0;
+        fCurCount--;
+        return;
+    }
+
+    // Copy down every element above remove point
+    for (unsigned int index = removeAt; index < fCurCount-1; index++)
+        fElemList[index] = fElemList[index+1];
+
+    // Keep unused elements zero for sanity's sake
+    fElemList[fCurCount-1] = 0;
+
+    // And bump down count
+    fCurCount--;
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::removeLastElement()
+{
+    if (!fCurCount)
+        return;
+    fCurCount--;
+
+    if (fAdoptedElems)
+        fMemoryManager->deallocate(fElemList[fCurCount]);
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::cleanup()
+{
+    if (fAdoptedElems)
+    {
+        for (unsigned int index = 0; index < fCurCount; index++)
+            fMemoryManager->deallocate(fElemList[index]);
+    }
+    fMemoryManager->deallocate(fElemList);//delete [] fElemList;
+}
 
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/RefArrayVectorOf.hpp b/src/xercesc/util/RefArrayVectorOf.hpp
index 2a3a1d49b21594c109ba330c4a2665259343f85d..b73b8b65f055673a9e0b2c7a0c4fcc8b2640c06d 100644
--- a/src/xercesc/util/RefArrayVectorOf.hpp
+++ b/src/xercesc/util/RefArrayVectorOf.hpp
@@ -24,6 +24,14 @@ public :
     // -----------------------------------------------------------------------
     ~RefArrayVectorOf();
 
+    // -----------------------------------------------------------------------
+    //  Element management
+    // -----------------------------------------------------------------------
+    void setElementAt(TElem* const toSet, const unsigned int setAt);
+    void removeAllElements();
+    void removeElementAt(const unsigned int removeAt);
+    void removeLastElement();
+    void cleanup();
 };
 
 XERCES_CPP_NAMESPACE_END