diff --git a/src/xercesc/util/BaseRefVectorOf.c b/src/xercesc/util/BaseRefVectorOf.c
index 49f8f01625d02783b51d1fca13e620529c488744..b7ba22a9c8cf9e96050c3f14c1813b8e82746ec7 100644
--- a/src/xercesc/util/BaseRefVectorOf.c
+++ b/src/xercesc/util/BaseRefVectorOf.c
@@ -267,9 +267,10 @@ ensureExtraCapacity(const unsigned int length)
     if (newMax <= fMaxCount)
         return;
 
-    // Avoid too many reallocations by providing a little more space
-    if (newMax < fMaxCount + 32)
-        newMax = fMaxCount + 32;
+	// Choose how much bigger based on the current size.
+	// This will grow half as much again.
+    if (newMax < fMaxCount + fMaxCount/2)
+        newMax = fMaxCount + fMaxCount/2;
 
     // Allocate the new array and copy over the existing stuff
     TElem** newList = (TElem**) fMemoryManager->allocate