diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 72f9db8..c860c07 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -235,18 +235,18 @@
 }
 
 
-bool XMLDocument::Accept( XMLVisitor* visitor ) const
-{
-	if ( visitor->VisitEnter( *this ) )
-	{
-		for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() )
-		{
-			if ( !node->Accept( visitor ) )
-				break;
-		}
-	}
-	return visitor->VisitExit( *this );
-}
+bool XMLDocument::Accept( XMLVisitor* visitor ) const
+{
+	if ( visitor->VisitEnter( *this ) )
+	{
+		for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() )
+		{
+			if ( !node->Accept( visitor ) )
+				break;
+		}
+	}
+	return visitor->VisitExit( *this );
+}
 
 
 // --------- XMLNode ----------- //
@@ -363,12 +363,13 @@
 }
 
 
-void XMLNode::Print( XMLStreamer* streamer )
+/*void XMLNode::Print( XMLStreamer* streamer )
 {
 	for( XMLNode* node = firstChild; node; node=node->next ) {
 		node->Print( streamer );
 	}
 }
+*/
 
 
 char* XMLNode::ParseDeep( char* p )
@@ -401,11 +402,13 @@
 }
 
 
+/*
 void XMLText::Print( XMLStreamer* streamer )
 {
 	const char* v = value.GetStr();
 	streamer->PushText( v );
 }
+*/
 
 
 bool XMLText::Accept( XMLVisitor* visitor ) const
@@ -427,12 +430,14 @@
 }
 
 
+/*
 void XMLComment::Print( XMLStreamer* streamer )
 {
 //	XMLNode::Print( fp, depth );
 //	fprintf( fp, "<!--%s-->\n", value.GetStr() );
 	streamer->PushComment( value.GetStr() );
 }
+*/
 
 
 char* XMLComment::ParseDeep( char* p )
@@ -442,10 +447,10 @@
 }
 
 
-bool XMLComment::Accept( XMLVisitor* visitor ) const
-{
-	return visitor->Visit( *this );
-}
+bool XMLComment::Accept( XMLVisitor* visitor ) const
+{
+	return visitor->Visit( *this );
+}
 
 
 // --------- XMLAttribute ---------- //
@@ -462,13 +467,14 @@
 }
 
 
+/*
 void XMLAttribute::Print( XMLStreamer* streamer )
 {
 	// fixme: sort out single vs. double quote
 	//fprintf( cfile, "%s=\"%s\"", name.GetStr(), value.GetStr() );
 	streamer->PushAttribute( name.GetStr(), value.GetStr() );
 }
-
+*/
 
 // --------- XMLElement ---------- //
 XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ),
@@ -580,6 +586,7 @@
 }
 
 
+/*
 void XMLElement::Print( XMLStreamer* streamer )
 {
 	//if ( !parent || !parent->IsTextParent() ) {
@@ -599,21 +606,22 @@
 	}
 	streamer->CloseElement();
 }
+*/
 
 
-bool XMLElement::Accept( XMLVisitor* visitor ) const
-{
-	if ( visitor->VisitEnter( *this, rootAttribute ) ) 
-	{
-		for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() )
-		{
-			if ( !node->Accept( visitor ) )
-				break;
-		}
-	}
-	return visitor->VisitExit( *this );
-
-}
+bool XMLElement::Accept( XMLVisitor* visitor ) const
+{
+	if ( visitor->VisitEnter( *this, rootAttribute ) ) 
+	{
+		for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() )
+		{
+			if ( !node->Accept( visitor ) )
+				break;
+		}
+	}
+	return visitor->VisitExit( *this );
+
+}
 
 
 // --------- XMLDocument ----------- //
@@ -687,9 +695,10 @@
 	XMLStreamer stdStreamer( stdout );
 	if ( !streamer )
 		streamer = &stdStreamer;
-	for( XMLNode* node = firstChild; node; node=node->next ) {
-		node->Print( streamer );
-	}
+	//for( XMLNode* node = firstChild; node; node=node->next ) {
+	//	node->Print( streamer );
+	//}
+	Accept( streamer );
 }
 
 
@@ -872,3 +881,35 @@
 	PrintSpace( depth );
 	fprintf( fp, "<!--%s-->\n", comment );
 }
+
+
+bool XMLStreamer::VisitEnter( const XMLElement& element, const XMLAttribute* attribute )
+{
+	OpenElement( element.Name() );
+	while ( attribute ) {
+		PushAttribute( attribute->Name(), attribute->Value() );
+		attribute = attribute->Next();
+	}
+	return true;
+}
+
+
+bool XMLStreamer::VisitExit( const XMLElement& element )
+{
+	CloseElement();
+	return true;
+}
+
+
+bool XMLStreamer::Visit( const XMLText& text )
+{
+	PushText( text.Value() );
+	return true;
+}
+
+
+bool XMLStreamer::Visit( const XMLComment& comment )
+{
+	PushComment( comment.Value() );
+	return true;
+}
