diff --git a/tinyxml2.h b/tinyxml2.h
index 27f38c9..066e38d 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -3,16 +3,19 @@
 
 /*
 	TODO
-	- const and non-const versions of API
+	X const and non-const versions of API
 	X memory pool the class construction
-	- attribute accessors
-	- node navigation
+	X attribute accessors
+	X node navigation
 	- handles
-	- visit pattern - change streamer?
-	- make constructors protected
-	- hide copy constructor
-	- hide = operator
+	X visit pattern - change streamer?
+	X make constructors protected
+	X hide copy constructor
+	X hide = operator
 	X UTF8 support: isAlpha, etc.
+	- tests from xml1
+	- perf test: xml1
+	- perf test: xenowar
 */
 
 #include <limits.h>
@@ -156,6 +159,7 @@
 	int size;			// number objects in use
 };
 
+
 class MemPool
 {
 public:
@@ -167,6 +171,7 @@
 	virtual void Free( void* ) = 0; 
 };
 
+
 template< int SIZE >
 class MemPoolT : public MemPool
 {
@@ -371,18 +376,17 @@
 	//virtual void Print( XMLStreamer* streamer );
 
 	virtual char* ParseDeep( char* );
-	void SetTextParent()		{ isTextParent = true; } 
-	bool IsTextParent() const	{ return isTextParent; }
 	virtual bool IsClosingElement() const { return false; }
 
 protected:
 	XMLNode( XMLDocument* );
 	virtual ~XMLNode();
+	XMLNode( const XMLNode& );	// not supported
+	void operator=( const XMLNode& );	// not supported
 	
 	XMLDocument*	document;
 	XMLNode*		parent;
-	bool			isTextParent;
-	mutable StrPair			value;
+	mutable StrPair	value;
 
 	XMLNode*		firstChild;
 	XMLNode*		lastChild;
@@ -402,6 +406,7 @@
 	friend class XMLDocument;
 public:
 	virtual bool Accept( XMLVisitor* visitor ) const;
+
 	virtual XMLText*	ToText()			{ return this; }
 	virtual const XMLText*	ToText() const	{ return this; }
 
@@ -413,6 +418,8 @@
 protected:
 	XMLText( XMLDocument* doc )	: XMLNode( doc ), isCData( false )	{}
 	virtual ~XMLText()												{}
+	XMLText( const XMLText& );	// not supported
+	void operator=( const XMLText& );	// not supported
 
 private:
 	bool isCData;
@@ -433,6 +440,8 @@
 protected:
 	XMLComment( XMLDocument* doc );
 	virtual ~XMLComment();
+	XMLComment( const XMLComment& );	// not supported
+	void operator=( const XMLComment& );	// not supported
 
 private:
 };
@@ -452,6 +461,8 @@
 protected:
 	XMLDeclaration( XMLDocument* doc );
 	virtual ~XMLDeclaration();
+	XMLDeclaration( const XMLDeclaration& );	// not supported
+	void operator=( const XMLDeclaration& );	// not supported
 };
 
 
@@ -469,6 +480,8 @@
 protected:
 	XMLUnknown( XMLDocument* doc );
 	virtual ~XMLUnknown();
+	XMLUnknown( const XMLUnknown& );	// not supported
+	void operator=( const XMLUnknown& );	// not supported
 };
 
 
@@ -476,15 +489,28 @@
 {
 	friend class XMLElement;
 public:
-	//virtual void Print( XMLStreamer* streamer );
-
 	const char* Name() const { return name.GetStr(); }
 	const char* Value() const { return value.GetStr(); }
 	const XMLAttribute* Next() const { return next; }
 
+	int QueryIntAttribute( const char* name, int* value ) const;
+	int QueryUnsignedAttribute( const char* name, unsigned int* value ) const;
+	int QueryBoolAttribute( const char* name, bool* value ) const;
+	int QueryDoubleAttribute( const char* name, double* _value ) const;
+	int QueryFloatAttribute( const char* name, float* _value ) const;
+
+	void SetAttribute( const char* name, const char* value );
+	void SetAttribute( const char* name, int value );
+	void SetAttribute( const char* name, unsigned value );
+	void SetAttribute( const char* name, bool value );
+	void SetAttribute( const char* name, double value );
+
 private:
 	XMLAttribute( XMLElement* element ) : next( 0 ) {}
 	virtual ~XMLAttribute()	{}
+	XMLAttribute( const XMLAttribute& );	// not supported
+	void operator=( const XMLAttribute& );	// not supported
+
 	char* ParseDeep( char* p );
 
 	mutable StrPair name;
@@ -530,11 +556,12 @@
 	virtual bool IsClosingElement() const { return closing; }
 	char* ParseDeep( char* p );
 
-protected:
+private:
 	XMLElement( XMLDocument* doc );
 	virtual ~XMLElement();
+	XMLElement( const XMLElement& );	// not supported
+	void operator=( const XMLElement& );	// not supported
 
-private:
 	char* ParseAttributes( char* p, bool *closedElement );
 
 	bool closing;
@@ -579,8 +606,8 @@
 	char* Identify( char* p, XMLNode** node );
 
 private:
-
-	XMLDocument( const XMLDocument& );	// intentionally not implemented
+	XMLDocument( const XMLDocument& );	// not supported
+	void operator=( const XMLDocument& );	// not supported
 	void InitDocument();
 
 	int errorID;
