diff --git a/tinyxml2.h b/tinyxml2.h
index 72f5989..4d2d70e 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -273,11 +273,72 @@
 };
 
 
+template <class T, int INIT>
+class DynArray
+{
+public:
+	DynArray< T, INIT >() 
+	{
+		mem = pool;
+		allocated = INIT;
+		size = 0;
+	}
+	~DynArray()
+	{
+		if ( mem != pool ) {
+			delete mem;
+		}
+	}
+	void Push( T t )
+	{
+		EnsureCapacity( size+1 );
+		mem[size++] = t;
+	}
+
+	T* PushArr( int count )
+	{
+		EnsureCapacity( size+count );
+		T* ret = &mem[size];
+		size += count;
+		return ret;
+	}
+	T Pop() {
+		return mem[--size];
+	}
+	void PopArr( int count ) 
+	{
+		TIXMLASSERT( size >= count );
+		size -= count;
+	}
+	int Size() const { return size; }
+	const T* Mem() const { return mem; }
+	T* Mem() { return mem; }
+
+
+private:
+	void EnsureCapacity( int cap ) {
+		if ( cap > allocated ) {
+			int newAllocated = cap * 2;
+			T* newMem = new T[newAllocated];
+			memcpy( newMem, mem, sizeof(T)*size );	// warning: not using constructors, only works for PODs
+			if ( mem != pool ) delete [] mem;
+			mem = newMem;
+			allocated = newAllocated;
+		}
+	}
+
+	T* mem;
+	T pool[INIT];
+	int allocated;		// objects allocated
+	int size;			// number objects in use
+};
+
+
 class StringStack
 {
 public:
 	StringStack();
-	~StringStack();
+	virtual ~StringStack();
 
 	void Push( const char* str );
 	const char* Pop();
@@ -285,40 +346,11 @@
 	int NumPositive() const { return nPositive; }
 
 private:
-	enum { 
-		INIT=10		// fixme, super small for testing
-	};
-	char* mem;
-	char pool[INIT];
-	int inUse;			// includes null
-	int allocated;		// bytes allocated
+	DynArray< char, 50 > mem;
 	int nPositive;		// number of strings with len > 0
 };
 
 
-class StringPtrStack
-{
-public:
-	StringPtrStack();
-	~StringPtrStack();
-
-	void Push( const char* str );
-	const char* Pop();
-
-	int NumPositive() const { return nPositive; }
-
-private:
-	enum { 
-		INIT=10		// fixme, super small for testing
-	};
-	char** mem;
-	char* pool[INIT];
-	int inUse;			
-	int allocated;		// bytes allocated
-	int nPositive;		// number of non-null pointers
-};
-
-
 class XMLStreamer
 {
 public:
@@ -345,7 +377,7 @@
 	};
 	bool entityFlag[ENTITY_RANGE];
 
-	StringPtrStack stack;
+	DynArray< const char*, 40 > stack;
 	StringStack text;
 };
 
