diff --git a/obj/NiAVObject.cpp b/obj/NiAVObject.cpp
index 02eb016a78ff51d241409c78c94fcd270f82c435..3dfad973cbe14235f120c49c30509faae9bb6390 100644
--- a/obj/NiAVObject.cpp
+++ b/obj/NiAVObject.cpp
@@ -2,6 +2,28 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "NiAVObject.h"
+#include "NiProperty.h"
+#include "NiCollisionData.h"
 
 //Definition of TYPE constant
-const Type NiAVObject::TYPE("NiAVObject", &NiObjectNET::TYPE );
\ No newline at end of file
+const Type NiAVObject::TYPE("NiAVObject", &NI_A_V_OBJECT_PARENT::TYPE );
+
+NiAVObject::NiAVObject() NI_A_V_OBJECT_CONSTRUCT {}
+
+NiAVObject::~NiAVObject() {}
+
+void NiAVObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+	NI_A_V_OBJECT_READ
+}
+
+void NiAVObject::Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const {
+	NI_A_V_OBJECT_WRITE
+}
+
+string NiAVObject::asString( bool verbose ) const {
+	NI_A_V_OBJECT_STRING
+}
+
+void NiAVObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+	NI_A_V_OBJECT_FIXLINKS
+}
\ No newline at end of file
diff --git a/obj/NiAVObject.h b/obj/NiAVObject.h
index 87028c772bc9390ba1f5ffcc67ec894f0930639f..ff7c3e67745bdc3ffb0619f8833dc54f63d91901 100644
--- a/obj/NiAVObject.h
+++ b/obj/NiAVObject.h
@@ -5,28 +5,26 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIAVOBJECT_H_
 
 #include "xml_extract.h"
-#include "NiObjectNET.h"
+#include NI_A_V_OBJECT_INCLUDE
 
 /*
  * NiAVObject - An audio/video object?  Part of the scene graph and has a position in 3D.
  */
 
 class NiAVObject;
-
 typedef Ref<NiAVObject> NiAVObjectRef;
 
-class NiAVObject : public NiObjectNET {
+class NiAVObject : public NI_A_V_OBJECT_PARENT {
 public:
-	NiAVObject() {}
-	~NiAVObject() {}
+	NiAVObject();
+	~NiAVObject();
 	//Run-Time Type Information
 	static const Type TYPE;
+	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
+	virtual string asString( bool verbose = false ) const;
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
 
-	short flags;
-	Vector3 localTranslate;
-	Matrix33 localRotate;
-	float localScale;
-	Vector3 localVelocity;
 	//TODO: list of NiProperty pointers.  Need functions to add/remove.
 	//TODO:  Bounding Box.  What to do with newer files that have a link?  Wrap this in a function and translate?
 
@@ -69,11 +67,12 @@ public:
 	}
 	NiAVObjectRef GetParent() { return parent; }
 
-protected:
+private:
+	NI_A_V_OBJECT_MEMBERS
+
 	NiAVObject * parent;
 	void ResetSkinnedFlag();
 	Matrix44 bindPosition;
-
 };
 
 #endif
\ No newline at end of file
diff --git a/obj/NiNode.cpp b/obj/NiNode.cpp
index 5def7d798b1da424af62dadbfab046c8450a85db..28da8f94f810f36a115d5aecf1cc7ae612f32f17 100644
--- a/obj/NiNode.cpp
+++ b/obj/NiNode.cpp
@@ -2,6 +2,27 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "NiNode.h"
+#include "NiDynamicEffect.h"
 
 //Definition of TYPE constant
-const Type NiNode::TYPE("NiNode", &NiAVObject::TYPE );
\ No newline at end of file
+const Type NiNode::TYPE("NiNode", &NI_NODE_PARENT::TYPE );
+
+NiNode::NiNode() NI_NODE_CONSTRUCT {}
+
+NiNode::~NiNode() {}
+
+void NiNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+	NI_NODE_READ
+}
+
+void NiNode::Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const {
+	NI_NODE_WRITE
+}
+
+string NiNode::asString( bool verbose ) const {
+	NI_NODE_STRING
+}
+
+void NiNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+	NI_NODE_FIXLINKS
+}
diff --git a/obj/NiNode.h b/obj/NiNode.h
index 3d6e43c40f99e3c837627113a085516ae132bb08..5584cf62e0b7e8dec20e04838c524b770dc0542f 100644
--- a/obj/NiNode.h
+++ b/obj/NiNode.h
@@ -4,24 +4,30 @@ All rights reserved.  Please see niflib.h for licence. */
 #ifndef _NINODE_H_
 #define _NINODE_H_
 
-#include "NiAVObject.h"
+#include "xml_extract.h"
+#include NI_NODE_INCLUDE
 
 /*
  * NiNode - A basic scene graph node.  Can have children.
  */
 
 class NiNode;
-
 typedef Ref<NiNode> NiNodeRef;
 
-class NiNode : public NiAVObject {
+class NiNode : public NI_NODE_PARENT {
 public:
-	NiNode() {}
-	~NiNode() {}
+	NiNode();
+	~NiNode();
 	//Run-Time Type Information
 	static const Type TYPE;
+	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
+	virtual string asString( bool verbose = false ) const;
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
 
 	//TODO:  Add functions to get and set children and store a list of NiObjectNET references
+private:
+	NI_NODE_MEMBERS
 };
 
 #endif
\ No newline at end of file
diff --git a/obj/NiObjectNET.cpp b/obj/NiObjectNET.cpp
index 5c89651b18cbc56a222eb95f484725069889e60f..d5e20ad4fd6e88425861b4cec93c53b8018c998a 100644
--- a/obj/NiObjectNET.cpp
+++ b/obj/NiObjectNET.cpp
@@ -2,6 +2,28 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "NiObjectNET.h"
+#include "NiExtraData.h"
+#include "NiTimeController.h"
 
 //Definition of TYPE constant
-const Type NiObjectNET::TYPE("NiObjectNET", &NiObject::TYPE );
\ No newline at end of file
+const Type NiObjectNET::TYPE("NiObjectNET", &NI_OBJECT_N_E_T_PARENT::TYPE );
+
+NiObjectNET::NiObjectNET() NI_OBJECT_N_E_T_CONSTRUCT {}
+
+NiObjectNET::~NiObjectNET() {}
+
+void NiObjectNET::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+	NI_OBJECT_N_E_T_READ
+}
+
+void NiObjectNET::Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const {
+	NI_OBJECT_N_E_T_WRITE
+}
+
+string NiObjectNET::asString( bool verbose ) const {
+	NI_OBJECT_N_E_T_STRING
+}
+
+void NiObjectNET::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+	NI_OBJECT_N_E_T_FIXLINKS
+}
diff --git a/obj/NiObjectNET.h b/obj/NiObjectNET.h
index 43bf9f91eb19ee107b91d7bf8aa3756cddc7a535..fa214213d9e9ce33184668c386ddd98150c5624d 100644
--- a/obj/NiObjectNET.h
+++ b/obj/NiObjectNET.h
@@ -4,32 +4,29 @@ All rights reserved.  Please see niflib.h for licence. */
 #ifndef _NIOBJECTNET_H_
 #define _NIOBJECTNET_H_
 
-#include "NiObject.h"
+#include "xml_extract.h"
+#include NI_OBJECT_N_E_T_INCLUDE
 
 /*
  * NiObjectNET - An object that has a name.  Can have extra data and controllers attatched.
  */
 
 class NiObjectNET;
-
 typedef Ref<NiObjectNET> NiObjectNETRef;
 
-class NiObjectNET : public NiObject /*NI_OBJECT_N_E_T_PARENTS*/ {
+class NiObjectNET : public NI_OBJECT_N_E_T_PARENT {
 public:
-	NiObjectNET() /*NI_OBJECT_N_E_T_CONSTRUCT*/ {}
-	~NiObjectNET() {}
+	NiObjectNET();
+	~NiObjectNET();
 	//Run-Time Type Information
 	static const Type TYPE;
-	string name;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version ) { /*NI_OBJECT_N_E_T_READ*/ }
-	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const { /*NI_OBJECT_N_E_T_WRITE*/ }
-	virtual string asString( bool verbose = false ) const { /*NI_OBJECT_N_E_T_STRING*/ }
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) { /*NI_OBJECT_N_E_T_FIXLINKS*/ }
-
-private:
-	/*NI_OBJECT_N_E_T_MEMBERS*/
+	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
+	virtual string asString( bool verbose = false ) const;
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
 	//TODO: pointer to extra data type... find out what that is.  AExtraData right now.  Need functions to add/remove.
 	//TODO: pointer to first NiTimeController type.  Need functions to add/remove.
+private:
+	NI_OBJECT_N_E_T_MEMBERS
 };
-
-#endif
\ No newline at end of file
+#endif