diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index a2d0878..f868c91 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -23,14 +23,15 @@
 static const int NUM_ENTITIES = 5;
 static const Entity entities[NUM_ENTITIES] = 
 {
-	{ "quot", 4,	'\"' },
+	{ "quot", 4,	DOUBLE_QUOTE },
 	{ "amp", 3,		'&'  },
-	{ "apos", 4,	'\'' },
+	{ "apos", 4,	SINGLE_QUOTE },
 	{ "lt",	2, 		'<'	 },
 	{ "gt",	2,		'>'	 }
 };
 
 
+#if 0
 // --------- CharBuffer ----------- //
 /*static*/ CharBuffer* CharBuffer::Construct( const char* in )
 {
@@ -47,6 +48,7 @@
 {
 	free( cb );
 }
+#endif
 
 
 const char* StrPair::GetStr()
@@ -115,7 +117,8 @@
 
 
 // --------- XMLBase ----------- //
-char* XMLBase::ParseText( char* p, StrPair* pair, const char* endTag )
+// fixme: should take in the entity/newline flags as param
+char* XMLBase::ParseText( char* p, StrPair* pair, const char* endTag, int strFlags )
 {
 	TIXMLASSERT( endTag && *endTag );
 
@@ -126,7 +129,7 @@
 	// Inner loop of text parsing.
 	while ( *p ) {
 		if ( *p == endChar && strncmp( p, endTag, length ) == 0 ) {
-			pair->Set( start, p, StrPair::NEEDS_ENTITY_PROCESSING | StrPair::NEEDS_NEWLINE_NORMALIZATION );
+			pair->Set( start, p, strFlags );
 			return p + length;
 		}
 		++p;
@@ -233,12 +236,18 @@
 
 XMLNode::~XMLNode()
 {
-	//printf( "~XMLNode %x\n", this );
+	ClearChildren();
+}
+
+
+void XMLNode::ClearChildren()
+{
 	while( firstChild ) {
 		XMLNode* node = firstChild;
 		Unlink( node );
 		delete node;
 	}
+	firstChild = lastChild = 0;
 }
 
 
@@ -316,7 +325,7 @@
 // --------- XMLText ---------- //
 char* XMLText::ParseDeep( char* p )
 {
-	p = ParseText( p, &value, "<" );
+	p = ParseText( p, &value, "<", StrPair::TEXT_ELEMENT );
 	// consumes the end tag.
 	if ( p && *p ) {
 		return p-1;
@@ -356,19 +365,19 @@
 char* XMLComment::ParseDeep( char* p )
 {
 	// Comment parses as text.
-	return ParseText( p, &value, "-->" );
+	return ParseText( p, &value, "-->", StrPair::COMMENT );
 }
 
 
 // --------- XMLAttribute ---------- //
 char* XMLAttribute::ParseDeep( char* p )
 {
-	p = ParseText( p, &name, "=" );
+	p = ParseText( p, &name, "=", StrPair::ATTRIBUTE_NAME );
 	if ( !p || !*p ) return 0;
 
 	char endTag[2] = { *p, 0 };
 	++p;
-	p = ParseText( p, &value, endTag );
+	p = ParseText( p, &value, endTag, StrPair::ATTRIBUTE_VALUE );
 	if ( value.Empty() ) return 0;
 	return p;
 }
@@ -513,24 +522,45 @@
 
 // --------- XMLDocument ----------- //
 XMLDocument::XMLDocument() :
-	XMLNode( this ),
+	XMLNode( 0 ),
 	charBuffer( 0 )
 {
+	document = this;	// avoid warning about 'this' in initializer list
 }
 
 
 XMLDocument::~XMLDocument()
 {
+	delete [] charBuffer;
 }
 
 
+void XMLDocument::InitDocument()
+{
+	errorID = NO_ERROR;
+	errorStr1 = 0;
+	errorStr2 = 0;
+
+	delete [] charBuffer;
+	charBuffer = 0;
+
+}
+
 
 bool XMLDocument::Parse( const char* p )
 {
-	charBuffer = CharBuffer::Construct( p );
+	ClearChildren();
+	InitDocument();
+
+	if ( !p || !*p ) {
+		return true;	// correctly parse an empty string?
+	}
+	size_t len = strlen( p );
+	charBuffer = new char[ len+1 ];
+	memcpy( charBuffer, p, len+1 );
 	XMLNode* node = 0;
 	
-	char* q = ParseDeep( charBuffer->mem );
+	char* q = ParseDeep( charBuffer );
 	return true;
 }
 
@@ -548,7 +578,10 @@
 
 void XMLDocument::SetError( int error, const char* str1, const char* str2 )
 {
-	printf( "ERROR: id=%d '%s' '%s'\n", error, str1, str2 );
+	errorID = error;
+	printf( "ERROR: id=%d '%s' '%s'\n", error, str1, str2 );	// fixme: remove
+	errorStr1 = str1;
+	errorStr2 = str2;
 }
 
 
@@ -682,8 +715,9 @@
 void XMLStreamer::PushAttribute( const char* name, const char* value )
 {
 	TIXMLASSERT( elementJustOpened );
-	// fixme: supports entities?
-	fprintf( fp, " %s=\"%s\"", name, value );
+	fprintf( fp, " %s=\"", name );
+	PrintString( value );
+	fprintf( fp, "\"" );
 }
 
 
