diff --git a/niflib.cpp b/niflib.cpp
index cbc4a78162655ee280c86a97204d0666128c0e08..3b2aec29bdf0d8eb8e4a795b2b4b5f623175699c 100644
--- a/niflib.cpp
+++ b/niflib.cpp
@@ -304,9 +304,18 @@ vector<NiObjectRef> ReadNifList( istream & in ) {
 	if ( ! in.eof() )
 		throw runtime_error("End of file not reached.  This NIF may be corrupt or improperly supported.");
 		
+	cout << "Link Stack:" << endl;
+	list<uint>::iterator it;
+	for ( it = link_stack.begin(); it != link_stack.end(); ++it ) {
+		cout << *it << endl;
+	}
+	
+	
+	cout << "Fixing Links:"  << endl;
 	//--Now that all blocks are read, go back and fix the links--//
 	for (uint i = 0; i < blocks.size(); ++i) {
-
+		
+		cout << blocks[i]->GetType().GetTypeName() << endl;
 		//Fix links & other pre-processing
 		blocks[i]->FixLinks( blocks, link_stack, version );
 	}
diff --git a/obj/ABSplineCompInterpolator.cpp b/obj/ABSplineCompInterpolator.cpp
index 4d91c6b28dc8db43f658d54b22c7245a737cdd17..c54a5997795cde498fda7f4757341c3ca6d1ee8b 100644
--- a/obj/ABSplineCompInterpolator.cpp
+++ b/obj/ABSplineCompInterpolator.cpp
@@ -10,7 +10,7 @@ ABSplineCompInterpolator::ABSplineCompInterpolator() A_B_SPLINE_COMP_INTERPOLATO
 
 ABSplineCompInterpolator::~ABSplineCompInterpolator() {}
 
-void ABSplineCompInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void ABSplineCompInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_B_SPLINE_COMP_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string ABSplineCompInterpolator::asString( bool verbose ) const {
 	A_B_SPLINE_COMP_INTERPOLATOR_STRING
 }
 
-void ABSplineCompInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void ABSplineCompInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_B_SPLINE_COMP_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/ABSplineCompInterpolator.h b/obj/ABSplineCompInterpolator.h
index 89ac838bf6195b7907b808d14edb4e6ccce8208d..e86a1b5a44342169ef281bae1a85af95c399c9d5 100644
--- a/obj/ABSplineCompInterpolator.h
+++ b/obj/ABSplineCompInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~ABSplineCompInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_B_SPLINE_COMP_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/ABlendInterpolator.cpp b/obj/ABlendInterpolator.cpp
index 50c424ae0adeeb464fbc933efb6064afc5334098..f2821854652f9b73e6206f1bbfce754581f39bc7 100644
--- a/obj/ABlendInterpolator.cpp
+++ b/obj/ABlendInterpolator.cpp
@@ -10,7 +10,7 @@ ABlendInterpolator::ABlendInterpolator() A_BLEND_INTERPOLATOR_CONSTRUCT {}
 
 ABlendInterpolator::~ABlendInterpolator() {}
 
-void ABlendInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void ABlendInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_BLEND_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string ABlendInterpolator::asString( bool verbose ) const {
 	A_BLEND_INTERPOLATOR_STRING
 }
 
-void ABlendInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void ABlendInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_BLEND_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/ABlendInterpolator.h b/obj/ABlendInterpolator.h
index af21d1529e9a00b938d7200dbd3758c1f3b24ffc..9868386fd79e23db1f561b0986902eea5f7eb3c9 100644
--- a/obj/ABlendInterpolator.h
+++ b/obj/ABlendInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~ABlendInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_BLEND_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/ABoneLODController.cpp b/obj/ABoneLODController.cpp
index 1cb0b6e6338193964217356020239386b09d1631..428762c9e53c6ba86286a938bf05c11c99a2291d 100644
--- a/obj/ABoneLODController.cpp
+++ b/obj/ABoneLODController.cpp
@@ -11,7 +11,7 @@ ABoneLODController::ABoneLODController() A_BONE_L_O_D_CONTROLLER_CONSTRUCT {}
 
 ABoneLODController::~ABoneLODController() {}
 
-void ABoneLODController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void ABoneLODController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_BONE_L_O_D_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string ABoneLODController::asString( bool verbose ) const {
 	A_BONE_L_O_D_CONTROLLER_STRING
 }
 
-void ABoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void ABoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/ABoneLODController.h b/obj/ABoneLODController.h
index 81017562123773dec8ecd5a8f1f776c4d20aaa80..d3bf71e4916b716382f34fc5f6169a498d586c18 100644
--- a/obj/ABoneLODController.h
+++ b/obj/ABoneLODController.h
@@ -20,10 +20,11 @@ public:
 	~ABoneLODController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_BONE_L_O_D_CONTROLLER_MEMBERS
 };
diff --git a/obj/AInterpolator.cpp b/obj/AInterpolator.cpp
index 13d6d197667cdf2738f406e8d5847bf60a7aabf9..0c39aa84478fd79aa4dca051635f0107a1f53213 100644
--- a/obj/AInterpolator.cpp
+++ b/obj/AInterpolator.cpp
@@ -10,7 +10,7 @@ AInterpolator::AInterpolator() A_INTERPOLATOR_CONSTRUCT {}
 
 AInterpolator::~AInterpolator() {}
 
-void AInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string AInterpolator::asString( bool verbose ) const {
 	A_INTERPOLATOR_STRING
 }
 
-void AInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/AInterpolator.h b/obj/AInterpolator.h
index 8a9c3b9615a6d33d575694de82e145e87e1dcdd2..bba585ca0b871f3945548c7e637802ffab71993f 100644
--- a/obj/AInterpolator.h
+++ b/obj/AInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~AInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/AKeyedData.cpp b/obj/AKeyedData.cpp
index f8e646d70a30f0fe6742cd0f919ea33620ca54f6..1842b0106bfbc051d4f69350e01b7ba7beadec59 100644
--- a/obj/AKeyedData.cpp
+++ b/obj/AKeyedData.cpp
@@ -10,7 +10,7 @@ AKeyedData::AKeyedData() A_KEYED_DATA_CONSTRUCT {}
 
 AKeyedData::~AKeyedData() {}
 
-void AKeyedData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AKeyedData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_KEYED_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string AKeyedData::asString( bool verbose ) const {
 	A_KEYED_DATA_STRING
 }
 
-void AKeyedData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AKeyedData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_KEYED_DATA_FIXLINKS
 }
 
diff --git a/obj/AKeyedData.h b/obj/AKeyedData.h
index d0fea3824dfb78d64b3e066ea02c48cbece02079..9e8d853b56fe577fd51d4322ad115732df2036e3 100644
--- a/obj/AKeyedData.h
+++ b/obj/AKeyedData.h
@@ -20,10 +20,11 @@ public:
 	~AKeyedData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_KEYED_DATA_MEMBERS
 };
diff --git a/obj/APSysCtlr.cpp b/obj/APSysCtlr.cpp
index 66bb3d2c0b0c0b3964ef341984e6459fa594c5c6..7d9fef2fb39743d184d9ed4d7fad60a532537bb0 100644
--- a/obj/APSysCtlr.cpp
+++ b/obj/APSysCtlr.cpp
@@ -10,7 +10,7 @@ APSysCtlr::APSysCtlr() A_P_SYS_CTLR_CONSTRUCT {}
 
 APSysCtlr::~APSysCtlr() {}
 
-void APSysCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string APSysCtlr::asString( bool verbose ) const {
 	A_P_SYS_CTLR_STRING
 }
 
-void APSysCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_CTLR_FIXLINKS
 }
 
diff --git a/obj/APSysCtlr.h b/obj/APSysCtlr.h
index e3b5b0646ea1107f60337883c4cc66b18bffa099..2571c5b1b9802310842279856fb024e8a36566f7 100644
--- a/obj/APSysCtlr.h
+++ b/obj/APSysCtlr.h
@@ -20,10 +20,11 @@ public:
 	~APSysCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_CTLR_MEMBERS
 };
diff --git a/obj/APSysData.cpp b/obj/APSysData.cpp
index 28a30225644dfbee4fa4a38147edc374106ca6e2..a236847a779899e6c265f4ab10efd14d55cfd494 100644
--- a/obj/APSysData.cpp
+++ b/obj/APSysData.cpp
@@ -14,7 +14,7 @@ void APSysData::Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned in
 	A_P_SYS_DATA_WRITE
 }
 
-void APSysData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_DATA_READ
 }
 
@@ -22,6 +22,6 @@ string APSysData::asString( bool verbose ) const {
 	A_P_SYS_DATA_STRING
 }
 
-void APSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_DATA_FIXLINKS
 }
diff --git a/obj/APSysData.h b/obj/APSysData.h
index 23ada367a3eb884a335f564537b6b93fa015dc95..ea9614bc00bc81f97aaf758da44dacdfaf4e1d73 100644
--- a/obj/APSysData.h
+++ b/obj/APSysData.h
@@ -20,10 +20,11 @@ public:
 	~APSysData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_DATA_MEMBERS
 };
diff --git a/obj/APSysEmitter.cpp b/obj/APSysEmitter.cpp
index 323b8aa21f5b38857e9a570759db63676d761e8a..61b4fb8aec81c7b5a01fde7049816cb30bd0fc46 100644
--- a/obj/APSysEmitter.cpp
+++ b/obj/APSysEmitter.cpp
@@ -10,7 +10,7 @@ APSysEmitter::APSysEmitter() A_P_SYS_EMITTER_CONSTRUCT {}
 
 APSysEmitter::~APSysEmitter() {}
 
-void APSysEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string APSysEmitter::asString( bool verbose ) const {
 	A_P_SYS_EMITTER_STRING
 }
 
-void APSysEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_EMITTER_FIXLINKS
 }
 
diff --git a/obj/APSysEmitter.h b/obj/APSysEmitter.h
index 191f63c340dead457c37477a2541db7f69de7d48..7e23035a1d5a62eb0042f4c25f9151a5197c700b 100644
--- a/obj/APSysEmitter.h
+++ b/obj/APSysEmitter.h
@@ -20,10 +20,11 @@ public:
 	~APSysEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_EMITTER_MEMBERS
 };
diff --git a/obj/APSysModifier.cpp b/obj/APSysModifier.cpp
index eb698c6a5d73adbc707316916e2c3fc1fcdb8c48..45cd7d2fc7a1212e9addb75552d0736557243e2a 100644
--- a/obj/APSysModifier.cpp
+++ b/obj/APSysModifier.cpp
@@ -11,7 +11,7 @@ APSysModifier::APSysModifier() A_P_SYS_MODIFIER_CONSTRUCT {}
 
 APSysModifier::~APSysModifier() {}
 
-void APSysModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string APSysModifier::asString( bool verbose ) const {
 	A_P_SYS_MODIFIER_STRING
 }
 
-void APSysModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/APSysModifier.h b/obj/APSysModifier.h
index 0f1699f3fec7842a8ef34e61bfb5655191adc8bb..9eeef6a0284cc1203501c60722162c1d5521ec01 100644
--- a/obj/APSysModifier.h
+++ b/obj/APSysModifier.h
@@ -20,10 +20,11 @@ public:
 	~APSysModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_MODIFIER_MEMBERS
 };
diff --git a/obj/APSysVolumeEmitter.cpp b/obj/APSysVolumeEmitter.cpp
index 63d53b3b5f05a3ab42760c7dcb00f33270811293..200601e4ad389140a60961f0e4da1cb721059683 100644
--- a/obj/APSysVolumeEmitter.cpp
+++ b/obj/APSysVolumeEmitter.cpp
@@ -11,7 +11,7 @@ APSysVolumeEmitter::APSysVolumeEmitter() A_P_SYS_VOLUME_EMITTER_CONSTRUCT {}
 
 APSysVolumeEmitter::~APSysVolumeEmitter() {}
 
-void APSysVolumeEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysVolumeEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_VOLUME_EMITTER_READ
 }
 
@@ -23,7 +23,7 @@ string APSysVolumeEmitter::asString( bool verbose ) const {
 	A_P_SYS_VOLUME_EMITTER_STRING
 }
 
-void APSysVolumeEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysVolumeEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_VOLUME_EMITTER_FIXLINKS
 }
 
diff --git a/obj/APSysVolumeEmitter.h b/obj/APSysVolumeEmitter.h
index 93862cf2d7021242ffdf23cdadcb236662c75e1c..0b96aed709f58797842996609c0a777b8c31fc6a 100644
--- a/obj/APSysVolumeEmitter.h
+++ b/obj/APSysVolumeEmitter.h
@@ -20,10 +20,11 @@ public:
 	~APSysVolumeEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_VOLUME_EMITTER_MEMBERS
 };
diff --git a/obj/AParticleModifier.cpp b/obj/AParticleModifier.cpp
index 6991be9e693313a638e49b7aced313ec9eba8c64..093de45be1248459d835423cc57e4007d9a22d8a 100644
--- a/obj/AParticleModifier.cpp
+++ b/obj/AParticleModifier.cpp
@@ -10,7 +10,7 @@ AParticleModifier::AParticleModifier() A_PARTICLE_MODIFIER_CONSTRUCT {}
 
 AParticleModifier::~AParticleModifier() {}
 
-void AParticleModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AParticleModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_PARTICLE_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string AParticleModifier::asString( bool verbose ) const {
 	A_PARTICLE_MODIFIER_STRING
 }
 
-void AParticleModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AParticleModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_PARTICLE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/AParticleModifier.h b/obj/AParticleModifier.h
index 19f63fd900c6509f5185c2bfee373374c0249f0e..9b4209928eeadad8c0ac3184025d9086afec31ea 100644
--- a/obj/AParticleModifier.h
+++ b/obj/AParticleModifier.h
@@ -20,10 +20,11 @@ public:
 	~AParticleModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_PARTICLE_MODIFIER_MEMBERS
 };
diff --git a/obj/AbhkConstraint.cpp b/obj/AbhkConstraint.cpp
index c4755c6ee8358e98666d55804bd6a6be4fe1a8b4..cbdcd829f2001c23d13700cd53f281a18ce2ca20 100644
--- a/obj/AbhkConstraint.cpp
+++ b/obj/AbhkConstraint.cpp
@@ -11,7 +11,7 @@ AbhkConstraint::AbhkConstraint() ABHK_CONSTRAINT_CONSTRUCT {}
 
 AbhkConstraint::~AbhkConstraint() {}
 
-void AbhkConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AbhkConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ABHK_CONSTRAINT_READ
 }
 
@@ -23,7 +23,7 @@ string AbhkConstraint::asString( bool verbose ) const {
 	ABHK_CONSTRAINT_STRING
 }
 
-void AbhkConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AbhkConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ABHK_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/AbhkConstraint.h b/obj/AbhkConstraint.h
index 0343c66963c4cffb0d937e9b9b1c560b07a61a4d..bef5385a94b50db4bb70c9e8466cca85b54f9244 100644
--- a/obj/AbhkConstraint.h
+++ b/obj/AbhkConstraint.h
@@ -20,10 +20,11 @@ public:
 	~AbhkConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ABHK_CONSTRAINT_MEMBERS
 };
diff --git a/obj/AbhkRagdollConstraint.cpp b/obj/AbhkRagdollConstraint.cpp
index 22c866588f19ed2eb482e0e48b8970a5f641cef2..9035893ceeae8312564b9a838630e14328775c08 100644
--- a/obj/AbhkRagdollConstraint.cpp
+++ b/obj/AbhkRagdollConstraint.cpp
@@ -10,7 +10,7 @@ AbhkRagdollConstraint::AbhkRagdollConstraint() ABHK_RAGDOLL_CONSTRAINT_CONSTRUCT
 
 AbhkRagdollConstraint::~AbhkRagdollConstraint() {}
 
-void AbhkRagdollConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AbhkRagdollConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ABHK_RAGDOLL_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string AbhkRagdollConstraint::asString( bool verbose ) const {
 	ABHK_RAGDOLL_CONSTRAINT_STRING
 }
 
-void AbhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AbhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ABHK_RAGDOLL_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/AbhkRagdollConstraint.h b/obj/AbhkRagdollConstraint.h
index df97b80e7fee64d86352be8b946d8144cf31388e..a9dd2bfce05b64f1e34b5296ce7614bb5c69b0a1 100644
--- a/obj/AbhkRagdollConstraint.h
+++ b/obj/AbhkRagdollConstraint.h
@@ -20,10 +20,11 @@ public:
 	~AbhkRagdollConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ABHK_RAGDOLL_CONSTRAINT_MEMBERS
 };
diff --git a/obj/AbhkShapeCollection.cpp b/obj/AbhkShapeCollection.cpp
index bf1a61244a95187917e97661d9f77bc3cb564fb0..31cee5a888b612961c1a954b1b972c4bc78fb03a 100644
--- a/obj/AbhkShapeCollection.cpp
+++ b/obj/AbhkShapeCollection.cpp
@@ -10,7 +10,7 @@ AbhkShapeCollection::AbhkShapeCollection() ABHK_SHAPE_COLLECTION_CONSTRUCT {}
 
 AbhkShapeCollection::~AbhkShapeCollection() {}
 
-void AbhkShapeCollection::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AbhkShapeCollection::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ABHK_SHAPE_COLLECTION_READ
 }
 
@@ -22,7 +22,7 @@ string AbhkShapeCollection::asString( bool verbose ) const {
 	ABHK_SHAPE_COLLECTION_STRING
 }
 
-void AbhkShapeCollection::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AbhkShapeCollection::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ABHK_SHAPE_COLLECTION_FIXLINKS
 }
 
diff --git a/obj/AbhkShapeCollection.h b/obj/AbhkShapeCollection.h
index 82b4690c998c8a5b1c353eba9192d1fbc33034af..964c3cbcc31da543dba334ed29d3cc711c2b397e 100644
--- a/obj/AbhkShapeCollection.h
+++ b/obj/AbhkShapeCollection.h
@@ -20,10 +20,11 @@ public:
 	~AbhkShapeCollection();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ABHK_SHAPE_COLLECTION_MEMBERS
 };
diff --git a/obj/AvoidNode.cpp b/obj/AvoidNode.cpp
index 5547abe01787641dfb5178f44e0a89ace9725b11..40c272d622429fad2bafc3f1fa9c1f2c4cf68259 100644
--- a/obj/AvoidNode.cpp
+++ b/obj/AvoidNode.cpp
@@ -10,7 +10,7 @@ AvoidNode::AvoidNode() AVOID_NODE_CONSTRUCT {}
 
 AvoidNode::~AvoidNode() {}
 
-void AvoidNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AvoidNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	AVOID_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string AvoidNode::asString( bool verbose ) const {
 	AVOID_NODE_STRING
 }
 
-void AvoidNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AvoidNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	AVOID_NODE_FIXLINKS
 }
 
diff --git a/obj/AvoidNode.h b/obj/AvoidNode.h
index 8e38a7ec0e055764b2e237c4475973fed38a17bb..a191a1cd4534e92e9e3d8a21c7ed0b3d153503e5 100644
--- a/obj/AvoidNode.h
+++ b/obj/AvoidNode.h
@@ -20,10 +20,11 @@ public:
 	~AvoidNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	AVOID_NODE_MEMBERS
 };
diff --git a/obj/BSBound.cpp b/obj/BSBound.cpp
index 2282a5f89682ba653471265db63f35abfee88c91..7f59897bf65f9c0d0c6b4738ac707b602f3e0b23 100644
--- a/obj/BSBound.cpp
+++ b/obj/BSBound.cpp
@@ -10,7 +10,7 @@ BSBound::BSBound() B_S_BOUND_CONSTRUCT {}
 
 BSBound::~BSBound() {}
 
-void BSBound::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSBound::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_BOUND_READ
 }
 
@@ -22,7 +22,7 @@ string BSBound::asString( bool verbose ) const {
 	B_S_BOUND_STRING
 }
 
-void BSBound::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSBound::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_BOUND_FIXLINKS
 }
 
diff --git a/obj/BSBound.h b/obj/BSBound.h
index fcc1d2d29eb5fd3752edb3de9eef0ff4f088445c..decf637f012358ad0b64a4ea010fc66ca418e973 100644
--- a/obj/BSBound.h
+++ b/obj/BSBound.h
@@ -20,10 +20,11 @@ public:
 	~BSBound();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_BOUND_MEMBERS
 };
diff --git a/obj/BSFurnitureMarker.cpp b/obj/BSFurnitureMarker.cpp
index 1db2b25321d3ba039d3aaf11a24f6a9ae3d05c9c..3faf7dd0ca227bafdf5c313c77bfa26778ae48d3 100644
--- a/obj/BSFurnitureMarker.cpp
+++ b/obj/BSFurnitureMarker.cpp
@@ -10,7 +10,7 @@ BSFurnitureMarker::BSFurnitureMarker() B_S_FURNITURE_MARKER_CONSTRUCT {}
 
 BSFurnitureMarker::~BSFurnitureMarker() {}
 
-void BSFurnitureMarker::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSFurnitureMarker::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_FURNITURE_MARKER_READ
 }
 
@@ -22,7 +22,7 @@ string BSFurnitureMarker::asString( bool verbose ) const {
 	B_S_FURNITURE_MARKER_STRING
 }
 
-void BSFurnitureMarker::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSFurnitureMarker::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_FURNITURE_MARKER_FIXLINKS
 }
 
diff --git a/obj/BSFurnitureMarker.h b/obj/BSFurnitureMarker.h
index bd01295b815ab878b95d7197d5275754f5a11074..9b02868656a330b3025e5ace76a46fe686fbd659 100644
--- a/obj/BSFurnitureMarker.h
+++ b/obj/BSFurnitureMarker.h
@@ -20,10 +20,11 @@ public:
 	~BSFurnitureMarker();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_FURNITURE_MARKER_MEMBERS
 };
diff --git a/obj/BSKeyframeController.cpp b/obj/BSKeyframeController.cpp
index 8fae6700600e6aac34bb3022402e991f60c2e694..161a4b733274475f62c7bdd6f6c949aa348ca416 100644
--- a/obj/BSKeyframeController.cpp
+++ b/obj/BSKeyframeController.cpp
@@ -11,7 +11,7 @@ BSKeyframeController::BSKeyframeController() B_S_KEYFRAME_CONTROLLER_CONSTRUCT {
 
 BSKeyframeController::~BSKeyframeController() {}
 
-void BSKeyframeController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSKeyframeController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_KEYFRAME_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string BSKeyframeController::asString( bool verbose ) const {
 	B_S_KEYFRAME_CONTROLLER_STRING
 }
 
-void BSKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_KEYFRAME_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/BSKeyframeController.h b/obj/BSKeyframeController.h
index 88b80a7d6ee3c9c07446d1cd1b67d4a8ab706c4d..6334869dfe1e6569a4e41b1c3842032ba133cbf2 100644
--- a/obj/BSKeyframeController.h
+++ b/obj/BSKeyframeController.h
@@ -20,10 +20,11 @@ public:
 	~BSKeyframeController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_KEYFRAME_CONTROLLER_MEMBERS
 };
diff --git a/obj/BSPSysArrayEmitter.cpp b/obj/BSPSysArrayEmitter.cpp
index 13cf57e3e86ca2020bc9c2b3d7b3c1beb9acefd2..478485a10caac9b8ed90ea7749370bc4d511f870 100644
--- a/obj/BSPSysArrayEmitter.cpp
+++ b/obj/BSPSysArrayEmitter.cpp
@@ -10,7 +10,7 @@ BSPSysArrayEmitter::BSPSysArrayEmitter() B_S_P_SYS_ARRAY_EMITTER_CONSTRUCT {}
 
 BSPSysArrayEmitter::~BSPSysArrayEmitter() {}
 
-void BSPSysArrayEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSPSysArrayEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_P_SYS_ARRAY_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string BSPSysArrayEmitter::asString( bool verbose ) const {
 	B_S_P_SYS_ARRAY_EMITTER_STRING
 }
 
-void BSPSysArrayEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSPSysArrayEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_P_SYS_ARRAY_EMITTER_FIXLINKS
 }
 
diff --git a/obj/BSPSysArrayEmitter.h b/obj/BSPSysArrayEmitter.h
index 7c2d44b2844cee1cd89f160bb981369c24e8ffd7..90991ce18a2554d113e29dc0bc1efac6e2e5c6e7 100644
--- a/obj/BSPSysArrayEmitter.h
+++ b/obj/BSPSysArrayEmitter.h
@@ -20,10 +20,11 @@ public:
 	~BSPSysArrayEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_P_SYS_ARRAY_EMITTER_MEMBERS
 };
diff --git a/obj/BSParentVelocityModifier.cpp b/obj/BSParentVelocityModifier.cpp
index 98f7bdcb62dc3bf27cb7d4d8378e3ab2e16e744e..fe6543cc3f07f37f861004f088874bd140d575cd 100644
--- a/obj/BSParentVelocityModifier.cpp
+++ b/obj/BSParentVelocityModifier.cpp
@@ -10,7 +10,7 @@ BSParentVelocityModifier::BSParentVelocityModifier() B_S_PARENT_VELOCITY_MODIFIE
 
 BSParentVelocityModifier::~BSParentVelocityModifier() {}
 
-void BSParentVelocityModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSParentVelocityModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_PARENT_VELOCITY_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string BSParentVelocityModifier::asString( bool verbose ) const {
 	B_S_PARENT_VELOCITY_MODIFIER_STRING
 }
 
-void BSParentVelocityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSParentVelocityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_PARENT_VELOCITY_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/BSParentVelocityModifier.h b/obj/BSParentVelocityModifier.h
index 9ae14906dde678a7d64d4f3cfe89fb971ebbcc7d..7af3ca644b39387db9d305a728d6c6e59b6701b4 100644
--- a/obj/BSParentVelocityModifier.h
+++ b/obj/BSParentVelocityModifier.h
@@ -20,10 +20,11 @@ public:
 	~BSParentVelocityModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_PARENT_VELOCITY_MODIFIER_MEMBERS
 };
diff --git a/obj/BSXFlags.cpp b/obj/BSXFlags.cpp
index 29f7c4c4c1c79c3599e95de7f66b026d2608ed9b..dc61e9cff03ad948413925f856e5e4ac06d0d5ad 100644
--- a/obj/BSXFlags.cpp
+++ b/obj/BSXFlags.cpp
@@ -10,7 +10,7 @@ BSXFlags::BSXFlags() B_S_X_FLAGS_CONSTRUCT {}
 
 BSXFlags::~BSXFlags() {}
 
-void BSXFlags::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSXFlags::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_X_FLAGS_READ
 }
 
@@ -22,7 +22,7 @@ string BSXFlags::asString( bool verbose ) const {
 	B_S_X_FLAGS_STRING
 }
 
-void BSXFlags::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSXFlags::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_X_FLAGS_FIXLINKS
 }
 
diff --git a/obj/BSXFlags.h b/obj/BSXFlags.h
index 24a78ad79aa5202533bbf89b23123fc2395ae15d..df2e9a2cd8cc79c84beba2e9c9378f2764a64d93 100644
--- a/obj/BSXFlags.h
+++ b/obj/BSXFlags.h
@@ -20,10 +20,11 @@ public:
 	~BSXFlags();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_X_FLAGS_MEMBERS
 };
diff --git a/obj/FxButton.cpp b/obj/FxButton.cpp
index 81cd656ebc4f3f36eca506204329597ecad253ab..4d0ffe340230d5ab04e26a68ae95c798b5fca0de 100644
--- a/obj/FxButton.cpp
+++ b/obj/FxButton.cpp
@@ -10,7 +10,7 @@ FxButton::FxButton() FX_BUTTON_CONSTRUCT {}
 
 FxButton::~FxButton() {}
 
-void FxButton::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void FxButton::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	FX_BUTTON_READ
 }
 
@@ -22,7 +22,7 @@ string FxButton::asString( bool verbose ) const {
 	FX_BUTTON_STRING
 }
 
-void FxButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void FxButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	FX_BUTTON_FIXLINKS
 }
 
diff --git a/obj/FxButton.h b/obj/FxButton.h
index cbbeaf19dbe2af70fa0fa2a130cea08f3ccba5b5..ad99d6f1d2cf37dcf1e40723665aa6bd8c76274c 100644
--- a/obj/FxButton.h
+++ b/obj/FxButton.h
@@ -20,10 +20,11 @@ public:
 	~FxButton();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	FX_BUTTON_MEMBERS
 };
diff --git a/obj/FxRadioButton.cpp b/obj/FxRadioButton.cpp
index b94dd648b2881ebbb02845c0bea802995683f1ce..3cca3cec29944ad70b6f51a355b6a4d2de9cd79d 100644
--- a/obj/FxRadioButton.cpp
+++ b/obj/FxRadioButton.cpp
@@ -10,7 +10,7 @@ FxRadioButton::FxRadioButton() FX_RADIO_BUTTON_CONSTRUCT {}
 
 FxRadioButton::~FxRadioButton() {}
 
-void FxRadioButton::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void FxRadioButton::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	FX_RADIO_BUTTON_READ
 }
 
@@ -22,7 +22,7 @@ string FxRadioButton::asString( bool verbose ) const {
 	FX_RADIO_BUTTON_STRING
 }
 
-void FxRadioButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void FxRadioButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	FX_RADIO_BUTTON_FIXLINKS
 }
 
diff --git a/obj/FxRadioButton.h b/obj/FxRadioButton.h
index cd59ab39ca7229901df0affbfe882e7ca8840003..21c4fe5a0d86a76cf8cc3250f63a7e47ef9184d2 100644
--- a/obj/FxRadioButton.h
+++ b/obj/FxRadioButton.h
@@ -20,10 +20,11 @@ public:
 	~FxRadioButton();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	FX_RADIO_BUTTON_MEMBERS
 };
diff --git a/obj/FxWidget.cpp b/obj/FxWidget.cpp
index 1a5b21f67375c8b257d861c5c872b3a0fe22c127..760d9113770fc204d04bade5f96b6e7ba1268346 100644
--- a/obj/FxWidget.cpp
+++ b/obj/FxWidget.cpp
@@ -10,7 +10,7 @@ FxWidget::FxWidget() FX_WIDGET_CONSTRUCT {}
 
 FxWidget::~FxWidget() {}
 
-void FxWidget::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void FxWidget::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	FX_WIDGET_READ
 }
 
@@ -22,7 +22,7 @@ string FxWidget::asString( bool verbose ) const {
 	FX_WIDGET_STRING
 }
 
-void FxWidget::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void FxWidget::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	FX_WIDGET_FIXLINKS
 }
 
diff --git a/obj/FxWidget.h b/obj/FxWidget.h
index 1deb5b60f82c665fd676a81ad00ff44636970edf..f8cd7af46b7a03fc26036e269f8ad9117da6a2f9 100644
--- a/obj/FxWidget.h
+++ b/obj/FxWidget.h
@@ -20,10 +20,11 @@ public:
 	~FxWidget();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	FX_WIDGET_MEMBERS
 };
diff --git a/obj/NiAVObject.cpp b/obj/NiAVObject.cpp
index f3f0f55453ab8f4ccb4cdbef4fe951babb108630..66f55392b8f6811ba560822eb08569bd09daa101 100644
--- a/obj/NiAVObject.cpp
+++ b/obj/NiAVObject.cpp
@@ -13,7 +13,7 @@ NiAVObject::NiAVObject() NI_A_V_OBJECT_CONSTRUCT {}
 
 NiAVObject::~NiAVObject() {}
 
-void NiAVObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAVObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_A_V_OBJECT_READ
 }
 
@@ -25,7 +25,7 @@ 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 ) {
+void NiAVObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_A_V_OBJECT_FIXLINKS
 }
 
diff --git a/obj/NiAVObject.h b/obj/NiAVObject.h
index ff7c3e67745bdc3ffb0619f8833dc54f63d91901..de87ed1ab299af603bbd1164ecfde32a7fdae31e 100644
--- a/obj/NiAVObject.h
+++ b/obj/NiAVObject.h
@@ -20,10 +20,11 @@ public:
 	~NiAVObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 
 	//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?
diff --git a/obj/NiAlphaController.cpp b/obj/NiAlphaController.cpp
index 4e6e73ec5bc155761f712e7746796b2390e42c27..f062db5fbf2233275e96c97040f34503fd587711 100644
--- a/obj/NiAlphaController.cpp
+++ b/obj/NiAlphaController.cpp
@@ -11,7 +11,7 @@ NiAlphaController::NiAlphaController() NI_ALPHA_CONTROLLER_CONSTRUCT {}
 
 NiAlphaController::~NiAlphaController() {}
 
-void NiAlphaController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAlphaController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiAlphaController::asString( bool verbose ) const {
 	NI_ALPHA_CONTROLLER_STRING
 }
 
-void NiAlphaController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAlphaController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiAlphaController.h b/obj/NiAlphaController.h
index 7d3bdd8fcdcfc9fb5859fa3601bb0d759fa1924e..ada6350343391c09c3d042c437418e7b7ed8a5fe 100644
--- a/obj/NiAlphaController.h
+++ b/obj/NiAlphaController.h
@@ -20,10 +20,11 @@ public:
 	~NiAlphaController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ALPHA_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiAlphaProperty.cpp b/obj/NiAlphaProperty.cpp
index 11875724e9d03cda6e69ad3288455b4b3fddac5e..accc565913cf8732f8aea40ee755ed86359eebf7 100644
--- a/obj/NiAlphaProperty.cpp
+++ b/obj/NiAlphaProperty.cpp
@@ -10,7 +10,7 @@ NiAlphaProperty::NiAlphaProperty() NI_ALPHA_PROPERTY_CONSTRUCT {}
 
 NiAlphaProperty::~NiAlphaProperty() {}
 
-void NiAlphaProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAlphaProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiAlphaProperty::asString( bool verbose ) const {
 	NI_ALPHA_PROPERTY_STRING
 }
 
-void NiAlphaProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAlphaProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiAlphaProperty.h b/obj/NiAlphaProperty.h
index 4fa3b556d850b1d484a58d9ac8cce77c36dd63cd..ab48fd3fa8743dbe3520aca8ab83e85fa10c0be7 100644
--- a/obj/NiAlphaProperty.h
+++ b/obj/NiAlphaProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiAlphaProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ALPHA_PROPERTY_MEMBERS
 };
diff --git a/obj/NiAmbientLight.cpp b/obj/NiAmbientLight.cpp
index e2cb253281770dd0104e5566b19af839b171e856..7893a148032151e7d796486413d348053fbc45c5 100644
--- a/obj/NiAmbientLight.cpp
+++ b/obj/NiAmbientLight.cpp
@@ -10,7 +10,7 @@ NiAmbientLight::NiAmbientLight() NI_AMBIENT_LIGHT_CONSTRUCT {}
 
 NiAmbientLight::~NiAmbientLight() {}
 
-void NiAmbientLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAmbientLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_AMBIENT_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiAmbientLight::asString( bool verbose ) const {
 	NI_AMBIENT_LIGHT_STRING
 }
 
-void NiAmbientLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAmbientLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_AMBIENT_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiAmbientLight.h b/obj/NiAmbientLight.h
index c64e4f69906074d4f0d20fb199fbf216cd531e16..d103433d2507d2ad77fa180814c2fb17a5a61dac 100644
--- a/obj/NiAmbientLight.h
+++ b/obj/NiAmbientLight.h
@@ -20,10 +20,11 @@ public:
 	~NiAmbientLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_AMBIENT_LIGHT_MEMBERS
 };
diff --git a/obj/NiAutoNormalParticles.cpp b/obj/NiAutoNormalParticles.cpp
index 9a3371118d1c0a9fe5b29b3dda2454b77d43de41..e45aff161d59e7067af091821266a63e8b832590 100644
--- a/obj/NiAutoNormalParticles.cpp
+++ b/obj/NiAutoNormalParticles.cpp
@@ -10,7 +10,7 @@ NiAutoNormalParticles::NiAutoNormalParticles() NI_AUTO_NORMAL_PARTICLES_CONSTRUC
 
 NiAutoNormalParticles::~NiAutoNormalParticles() {}
 
-void NiAutoNormalParticles::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticles::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_READ
 }
 
@@ -22,7 +22,7 @@ string NiAutoNormalParticles::asString( bool verbose ) const {
 	NI_AUTO_NORMAL_PARTICLES_STRING
 }
 
-void NiAutoNormalParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_FIXLINKS
 }
 
diff --git a/obj/NiAutoNormalParticles.h b/obj/NiAutoNormalParticles.h
index 544b3e164c6890b5b18d097f78ab7ab446aa2781..deaa3f62e3272651a1a9717cc2d2f6dcf3ee3d4b 100644
--- a/obj/NiAutoNormalParticles.h
+++ b/obj/NiAutoNormalParticles.h
@@ -20,10 +20,11 @@ public:
 	~NiAutoNormalParticles();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_AUTO_NORMAL_PARTICLES_MEMBERS
 };
diff --git a/obj/NiAutoNormalParticlesData.cpp b/obj/NiAutoNormalParticlesData.cpp
index 92991d1dfd5c30fa52d833091ed4be1c9381b999..6ec779c0bc42a3d30a5d96cc755059f227bef369 100644
--- a/obj/NiAutoNormalParticlesData.cpp
+++ b/obj/NiAutoNormalParticlesData.cpp
@@ -10,7 +10,7 @@ NiAutoNormalParticlesData::NiAutoNormalParticlesData() NI_AUTO_NORMAL_PARTICLES_
 
 NiAutoNormalParticlesData::~NiAutoNormalParticlesData() {}
 
-void NiAutoNormalParticlesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticlesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiAutoNormalParticlesData::asString( bool verbose ) const {
 	NI_AUTO_NORMAL_PARTICLES_DATA_STRING
 }
 
-void NiAutoNormalParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiAutoNormalParticlesData.h b/obj/NiAutoNormalParticlesData.h
index afb2c63183b35a8be6cf4def051fcaff4caa71bb..eede0d39a18edf8f18760f1434440a964922257f 100644
--- a/obj/NiAutoNormalParticlesData.h
+++ b/obj/NiAutoNormalParticlesData.h
@@ -20,10 +20,11 @@ public:
 	~NiAutoNormalParticlesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_AUTO_NORMAL_PARTICLES_DATA_MEMBERS
 };
diff --git a/obj/NiBSAnimationNode.cpp b/obj/NiBSAnimationNode.cpp
index 8a95334ace8a2c013c412b73739d9b76f605a947..18d28310424a4388d1261d6d13de9c0c85997502 100644
--- a/obj/NiBSAnimationNode.cpp
+++ b/obj/NiBSAnimationNode.cpp
@@ -10,7 +10,7 @@ NiBSAnimationNode::NiBSAnimationNode() NI_B_S_ANIMATION_NODE_CONSTRUCT {}
 
 NiBSAnimationNode::~NiBSAnimationNode() {}
 
-void NiBSAnimationNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSAnimationNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_ANIMATION_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSAnimationNode::asString( bool verbose ) const {
 	NI_B_S_ANIMATION_NODE_STRING
 }
 
-void NiBSAnimationNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSAnimationNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_ANIMATION_NODE_FIXLINKS
 }
 
diff --git a/obj/NiBSAnimationNode.h b/obj/NiBSAnimationNode.h
index a6635378e30256a326240655f5715ac7f645d596..e44e58fb9debde2fdb7dd71cdd2077b81fccc4cf 100644
--- a/obj/NiBSAnimationNode.h
+++ b/obj/NiBSAnimationNode.h
@@ -20,10 +20,11 @@ public:
 	~NiBSAnimationNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_ANIMATION_NODE_MEMBERS
 };
diff --git a/obj/NiBSBoneLODController.cpp b/obj/NiBSBoneLODController.cpp
index 15523cffd52f34ef74f65c6907c5c207bbdef68f..61396fe3bc4a40b476a5c61de1a2da3aae51df42 100644
--- a/obj/NiBSBoneLODController.cpp
+++ b/obj/NiBSBoneLODController.cpp
@@ -10,7 +10,7 @@ NiBSBoneLODController::NiBSBoneLODController() NI_B_S_BONE_L_O_D_CONTROLLER_CONS
 
 NiBSBoneLODController::~NiBSBoneLODController() {}
 
-void NiBSBoneLODController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSBoneLODController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_BONE_L_O_D_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSBoneLODController::asString( bool verbose ) const {
 	NI_B_S_BONE_L_O_D_CONTROLLER_STRING
 }
 
-void NiBSBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiBSBoneLODController.h b/obj/NiBSBoneLODController.h
index e3f2b39be0267e259719d19e540d63096ed13cba..1178d1f7889771256b15f18ae8be30d37427ada6 100644
--- a/obj/NiBSBoneLODController.h
+++ b/obj/NiBSBoneLODController.h
@@ -20,10 +20,11 @@ public:
 	~NiBSBoneLODController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_BONE_L_O_D_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiBSPArrayController.cpp b/obj/NiBSPArrayController.cpp
index e726b2080b3a57056f878e7eaf5dcfa9f3ffb860..7d5dd483acbf0505b32bdbcd8580e8240e261ccc 100644
--- a/obj/NiBSPArrayController.cpp
+++ b/obj/NiBSPArrayController.cpp
@@ -10,7 +10,7 @@ NiBSPArrayController::NiBSPArrayController() NI_B_S_P_ARRAY_CONTROLLER_CONSTRUCT
 
 NiBSPArrayController::~NiBSPArrayController() {}
 
-void NiBSPArrayController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSPArrayController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_P_ARRAY_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSPArrayController::asString( bool verbose ) const {
 	NI_B_S_P_ARRAY_CONTROLLER_STRING
 }
 
-void NiBSPArrayController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSPArrayController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_P_ARRAY_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiBSPArrayController.h b/obj/NiBSPArrayController.h
index 3d62a36cb14d99168c208b6525efbdbc9851db68..f9bd868b274186594bee66889bbfcbd8eeb123bf 100644
--- a/obj/NiBSPArrayController.h
+++ b/obj/NiBSPArrayController.h
@@ -20,10 +20,11 @@ public:
 	~NiBSPArrayController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_P_ARRAY_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiBSParticleNode.cpp b/obj/NiBSParticleNode.cpp
index 3b41cc3862ba004d20726e74f512448ae36f02c7..6142006a0cac83b9e63937f664de1a5010c90d3c 100644
--- a/obj/NiBSParticleNode.cpp
+++ b/obj/NiBSParticleNode.cpp
@@ -10,7 +10,7 @@ NiBSParticleNode::NiBSParticleNode() NI_B_S_PARTICLE_NODE_CONSTRUCT {}
 
 NiBSParticleNode::~NiBSParticleNode() {}
 
-void NiBSParticleNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSParticleNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_PARTICLE_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSParticleNode::asString( bool verbose ) const {
 	NI_B_S_PARTICLE_NODE_STRING
 }
 
-void NiBSParticleNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSParticleNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_PARTICLE_NODE_FIXLINKS
 }
 
diff --git a/obj/NiBSParticleNode.h b/obj/NiBSParticleNode.h
index 6a20745376933d8bbc8b2206d5b1764356f4359b..118ec0fe5e7cc88768d05cce65ccff6b275bc3a4 100644
--- a/obj/NiBSParticleNode.h
+++ b/obj/NiBSParticleNode.h
@@ -20,10 +20,11 @@ public:
 	~NiBSParticleNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_PARTICLE_NODE_MEMBERS
 };
diff --git a/obj/NiBSplineBasisData.cpp b/obj/NiBSplineBasisData.cpp
index a48c69f400d03b2ca0051f32cec455539410dd7d..38431c2ced7ee7be2d14ef8d89e8d1bac25e2356 100644
--- a/obj/NiBSplineBasisData.cpp
+++ b/obj/NiBSplineBasisData.cpp
@@ -10,7 +10,7 @@ NiBSplineBasisData::NiBSplineBasisData() NI_B_SPLINE_BASIS_DATA_CONSTRUCT {}
 
 NiBSplineBasisData::~NiBSplineBasisData() {}
 
-void NiBSplineBasisData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineBasisData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_BASIS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSplineBasisData::asString( bool verbose ) const {
 	NI_B_SPLINE_BASIS_DATA_STRING
 }
 
-void NiBSplineBasisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineBasisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_BASIS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBSplineBasisData.h b/obj/NiBSplineBasisData.h
index fc8af33ab2b9be73e7b12b3bab30e82e243d7598..2fef2585d93498cd589b0956630fecff355f54a4 100644
--- a/obj/NiBSplineBasisData.h
+++ b/obj/NiBSplineBasisData.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineBasisData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_BASIS_DATA_MEMBERS
 };
diff --git a/obj/NiBSplineCompFloatInterpolator.cpp b/obj/NiBSplineCompFloatInterpolator.cpp
index 1680167ed0cb108a018bf5136b970b651edcd5d2..b6ea194e313b788300592e2f39d92c1c503e3b7f 100644
--- a/obj/NiBSplineCompFloatInterpolator.cpp
+++ b/obj/NiBSplineCompFloatInterpolator.cpp
@@ -10,7 +10,7 @@ NiBSplineCompFloatInterpolator::NiBSplineCompFloatInterpolator() NI_B_SPLINE_COM
 
 NiBSplineCompFloatInterpolator::~NiBSplineCompFloatInterpolator() {}
 
-void NiBSplineCompFloatInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompFloatInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSplineCompFloatInterpolator::asString( bool verbose ) const {
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_STRING
 }
 
-void NiBSplineCompFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBSplineCompFloatInterpolator.h b/obj/NiBSplineCompFloatInterpolator.h
index 6d05a390dced80d2509e0604ed1c8a5836677fa1..9bc6210d28553d60354a7db716ee813b84496ef8 100644
--- a/obj/NiBSplineCompFloatInterpolator.h
+++ b/obj/NiBSplineCompFloatInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineCompFloatInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBSplineCompPoint3Interpolator.cpp b/obj/NiBSplineCompPoint3Interpolator.cpp
index 3539a8e2b2dbe3879ba8de4507bdb02496026765..f7e868f6ac33cfbc56e411ce36cf571e55dc42cd 100644
--- a/obj/NiBSplineCompPoint3Interpolator.cpp
+++ b/obj/NiBSplineCompPoint3Interpolator.cpp
@@ -11,7 +11,7 @@ NiBSplineCompPoint3Interpolator::NiBSplineCompPoint3Interpolator() NI_B_SPLINE_C
 
 NiBSplineCompPoint3Interpolator::~NiBSplineCompPoint3Interpolator() {}
 
-void NiBSplineCompPoint3Interpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompPoint3Interpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiBSplineCompPoint3Interpolator::asString( bool verbose ) const {
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_STRING
 }
 
-void NiBSplineCompPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBSplineCompPoint3Interpolator.h b/obj/NiBSplineCompPoint3Interpolator.h
index f3588793f4ec8a4e5c775fcf26505c5e20da5b7f..8e852cc700be005e1205a1d36c93360cbd2cf3e3 100644
--- a/obj/NiBSplineCompPoint3Interpolator.h
+++ b/obj/NiBSplineCompPoint3Interpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineCompPoint3Interpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBSplineCompTransformInterpolator.cpp b/obj/NiBSplineCompTransformInterpolator.cpp
index 1da2983155f5fcfa542e03f63125f9247db41583..c36b6de12c890ae3dbad1402ecbb108ec6088cf2 100644
--- a/obj/NiBSplineCompTransformInterpolator.cpp
+++ b/obj/NiBSplineCompTransformInterpolator.cpp
@@ -12,7 +12,7 @@ NiBSplineCompTransformInterpolator::NiBSplineCompTransformInterpolator() NI_B_SP
 
 NiBSplineCompTransformInterpolator::~NiBSplineCompTransformInterpolator() {}
 
-void NiBSplineCompTransformInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompTransformInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_READ
 }
 
@@ -24,7 +24,7 @@ string NiBSplineCompTransformInterpolator::asString( bool verbose ) const {
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_STRING
 }
 
-void NiBSplineCompTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBSplineCompTransformInterpolator.h b/obj/NiBSplineCompTransformInterpolator.h
index f6da6174efe950939ce2d2ee3c55b01637ddfee3..151fc381ee802d7746b44e1340b9f56df491c031 100644
--- a/obj/NiBSplineCompTransformInterpolator.h
+++ b/obj/NiBSplineCompTransformInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineCompTransformInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBSplineData.cpp b/obj/NiBSplineData.cpp
index 664e4cc63f467be223b573f791524b3914ff3a11..808b982110bafa6686c0a05465c568bce65fae1b 100644
--- a/obj/NiBSplineData.cpp
+++ b/obj/NiBSplineData.cpp
@@ -10,7 +10,7 @@ NiBSplineData::NiBSplineData() NI_B_SPLINE_DATA_CONSTRUCT {}
 
 NiBSplineData::~NiBSplineData() {}
 
-void NiBSplineData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSplineData::asString( bool verbose ) const {
 	NI_B_SPLINE_DATA_STRING
 }
 
-void NiBSplineData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBSplineData.h b/obj/NiBSplineData.h
index 0dded780a84da4c293d540bcd8506b81eacef76f..30fa5d81e1ae74e9dec1078b2d74efed97f32872 100644
--- a/obj/NiBSplineData.h
+++ b/obj/NiBSplineData.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_DATA_MEMBERS
 };
diff --git a/obj/NiBillboardNode.cpp b/obj/NiBillboardNode.cpp
index bf3fc1f4da3d033fe95d39ea4df5f066eae077a5..e28e70d42371a30202e23579639407becb2e2fab 100644
--- a/obj/NiBillboardNode.cpp
+++ b/obj/NiBillboardNode.cpp
@@ -10,7 +10,7 @@ NiBillboardNode::NiBillboardNode() NI_BILLBOARD_NODE_CONSTRUCT {}
 
 NiBillboardNode::~NiBillboardNode() {}
 
-void NiBillboardNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBillboardNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BILLBOARD_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string NiBillboardNode::asString( bool verbose ) const {
 	NI_BILLBOARD_NODE_STRING
 }
 
-void NiBillboardNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBillboardNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BILLBOARD_NODE_FIXLINKS
 }
 
diff --git a/obj/NiBillboardNode.h b/obj/NiBillboardNode.h
index f089c5d52f6ad1c4a14b100c57fd39a69b46ff5a..6751c4433275ea2eb06aa66546e00271b82e23d3 100644
--- a/obj/NiBillboardNode.h
+++ b/obj/NiBillboardNode.h
@@ -20,10 +20,11 @@ public:
 	~NiBillboardNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BILLBOARD_NODE_MEMBERS
 };
diff --git a/obj/NiBinaryExtraData.cpp b/obj/NiBinaryExtraData.cpp
index 37277b0ce9903ff56057bd996b7bf329c789d2fa..9de23e567f765029f27d0f7b40b00e0709f42eeb 100644
--- a/obj/NiBinaryExtraData.cpp
+++ b/obj/NiBinaryExtraData.cpp
@@ -10,7 +10,7 @@ NiBinaryExtraData::NiBinaryExtraData() NI_BINARY_EXTRA_DATA_CONSTRUCT {}
 
 NiBinaryExtraData::~NiBinaryExtraData() {}
 
-void NiBinaryExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBinaryExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BINARY_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBinaryExtraData::asString( bool verbose ) const {
 	NI_BINARY_EXTRA_DATA_STRING
 }
 
-void NiBinaryExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBinaryExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BINARY_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBinaryExtraData.h b/obj/NiBinaryExtraData.h
index e19bf24abf5c166b0314ffa8121500b5afc66057..04d6b49ab4c220d24c6b5b83de1bede24ea4335c 100644
--- a/obj/NiBinaryExtraData.h
+++ b/obj/NiBinaryExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiBinaryExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BINARY_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiBlendBoolInterpolator.cpp b/obj/NiBlendBoolInterpolator.cpp
index 97db49b88785e374e07b56e5ef53aa915bc875f1..a87ad030b7853401bf8dd2f47ee73ad6a3d16dbe 100644
--- a/obj/NiBlendBoolInterpolator.cpp
+++ b/obj/NiBlendBoolInterpolator.cpp
@@ -10,7 +10,7 @@ NiBlendBoolInterpolator::NiBlendBoolInterpolator() NI_BLEND_BOOL_INTERPOLATOR_CO
 
 NiBlendBoolInterpolator::~NiBlendBoolInterpolator() {}
 
-void NiBlendBoolInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendBoolInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_BOOL_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendBoolInterpolator::asString( bool verbose ) const {
 	NI_BLEND_BOOL_INTERPOLATOR_STRING
 }
 
-void NiBlendBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_BOOL_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendBoolInterpolator.h b/obj/NiBlendBoolInterpolator.h
index d8415a49632cab22c75cf16ecebed9035499a88e..d47b2d67a7b23d6565013c55777049fdb1b17560 100644
--- a/obj/NiBlendBoolInterpolator.h
+++ b/obj/NiBlendBoolInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendBoolInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_BOOL_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBlendFloatInterpolator.cpp b/obj/NiBlendFloatInterpolator.cpp
index 1af6727ef9f4c57bd0bd424d72aec40f28e00c79..2ee837450d3a690e6278c86337399152508fc5ab 100644
--- a/obj/NiBlendFloatInterpolator.cpp
+++ b/obj/NiBlendFloatInterpolator.cpp
@@ -10,7 +10,7 @@ NiBlendFloatInterpolator::NiBlendFloatInterpolator() NI_BLEND_FLOAT_INTERPOLATOR
 
 NiBlendFloatInterpolator::~NiBlendFloatInterpolator() {}
 
-void NiBlendFloatInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendFloatInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_FLOAT_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendFloatInterpolator::asString( bool verbose ) const {
 	NI_BLEND_FLOAT_INTERPOLATOR_STRING
 }
 
-void NiBlendFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendFloatInterpolator.h b/obj/NiBlendFloatInterpolator.h
index ff29fa9112fc97c9bcf76691fa6be5b15c50cc75..e9d98d850b1acd51850d2e49d008c5e6fd898367 100644
--- a/obj/NiBlendFloatInterpolator.h
+++ b/obj/NiBlendFloatInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendFloatInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_FLOAT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBlendPoint3Interpolator.cpp b/obj/NiBlendPoint3Interpolator.cpp
index bc8b9f7058b804823f6b49aeb330e92d57400ad5..c6cb473c150d8e438e75a969069355e395404a53 100644
--- a/obj/NiBlendPoint3Interpolator.cpp
+++ b/obj/NiBlendPoint3Interpolator.cpp
@@ -10,7 +10,7 @@ NiBlendPoint3Interpolator::NiBlendPoint3Interpolator() NI_BLEND_POINT3_INTERPOLA
 
 NiBlendPoint3Interpolator::~NiBlendPoint3Interpolator() {}
 
-void NiBlendPoint3Interpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendPoint3Interpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_POINT3_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendPoint3Interpolator::asString( bool verbose ) const {
 	NI_BLEND_POINT3_INTERPOLATOR_STRING
 }
 
-void NiBlendPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_POINT3_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendPoint3Interpolator.h b/obj/NiBlendPoint3Interpolator.h
index e8fa89afb2b6d7b798adf903c86829d0e1b1fad1..9d710c76a08c456c5b948c9fd64cd9e2f0a83a2c 100644
--- a/obj/NiBlendPoint3Interpolator.h
+++ b/obj/NiBlendPoint3Interpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendPoint3Interpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_POINT3_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBlendTransformInterpolator.cpp b/obj/NiBlendTransformInterpolator.cpp
index 2099089df0183b6547a5f6f9d7cb26494bd668a2..6e15b4cea278437e960a20218fc8ea18cdf63f71 100644
--- a/obj/NiBlendTransformInterpolator.cpp
+++ b/obj/NiBlendTransformInterpolator.cpp
@@ -10,7 +10,7 @@ NiBlendTransformInterpolator::NiBlendTransformInterpolator() NI_BLEND_TRANSFORM_
 
 NiBlendTransformInterpolator::~NiBlendTransformInterpolator() {}
 
-void NiBlendTransformInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendTransformInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_TRANSFORM_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendTransformInterpolator::asString( bool verbose ) const {
 	NI_BLEND_TRANSFORM_INTERPOLATOR_STRING
 }
 
-void NiBlendTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendTransformInterpolator.h b/obj/NiBlendTransformInterpolator.h
index ccc5abe0e04be6065499c4191bf5fdcab1894511..cde286429b7bdced21e49a18c8ea30bfe3dd0037 100644
--- a/obj/NiBlendTransformInterpolator.h
+++ b/obj/NiBlendTransformInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendTransformInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_TRANSFORM_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBoneLODController.cpp b/obj/NiBoneLODController.cpp
index ec92544bf69d31777120d0d88912e3e91645f14b..44fd2fbb1b41443ab11319c6f30bd9471905a3e0 100644
--- a/obj/NiBoneLODController.cpp
+++ b/obj/NiBoneLODController.cpp
@@ -12,7 +12,7 @@ NiBoneLODController::NiBoneLODController() NI_BONE_L_O_D_CONTROLLER_CONSTRUCT {}
 
 NiBoneLODController::~NiBoneLODController() {}
 
-void NiBoneLODController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoneLODController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BONE_L_O_D_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiBoneLODController::asString( bool verbose ) const {
 	NI_BONE_L_O_D_CONTROLLER_STRING
 }
 
-void NiBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiBoneLODController.h b/obj/NiBoneLODController.h
index dc42f8224c17aa63df9fa524c5ccdf0047c944c1..eb094d45a3ad7adb779a5bb0eb6c2e846348a36f 100644
--- a/obj/NiBoneLODController.h
+++ b/obj/NiBoneLODController.h
@@ -20,10 +20,11 @@ public:
 	~NiBoneLODController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BONE_L_O_D_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiBoolData.cpp b/obj/NiBoolData.cpp
index 5efbb26e39c2022e83c2a548599dca5c11d1e121..70889a8ef31c8655ea3b8ccacb85d9fce423a03b 100644
--- a/obj/NiBoolData.cpp
+++ b/obj/NiBoolData.cpp
@@ -10,7 +10,7 @@ NiBoolData::NiBoolData() NI_BOOL_DATA_CONSTRUCT {}
 
 NiBoolData::~NiBoolData() {}
 
-void NiBoolData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoolData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBoolData::asString( bool verbose ) const {
 	NI_BOOL_DATA_STRING
 }
 
-void NiBoolData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoolData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBoolData.h b/obj/NiBoolData.h
index c7db9b5dbf71a2f203707197e0b4e1b7a13b3529..d2ba5e2dae3e4d0e0702999b60c13050d5f660fe 100644
--- a/obj/NiBoolData.h
+++ b/obj/NiBoolData.h
@@ -20,10 +20,11 @@ public:
 	~NiBoolData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOL_DATA_MEMBERS
 };
diff --git a/obj/NiBoolInterpolator.cpp b/obj/NiBoolInterpolator.cpp
index 3db84816223350fa09042129baa2e7d6f251240b..8a9beaa0640f30c1ea906649d1a96eeaa9c4c7f7 100644
--- a/obj/NiBoolInterpolator.cpp
+++ b/obj/NiBoolInterpolator.cpp
@@ -11,7 +11,7 @@ NiBoolInterpolator::NiBoolInterpolator() NI_BOOL_INTERPOLATOR_CONSTRUCT {}
 
 NiBoolInterpolator::~NiBoolInterpolator() {}
 
-void NiBoolInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoolInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiBoolInterpolator::asString( bool verbose ) const {
 	NI_BOOL_INTERPOLATOR_STRING
 }
 
-void NiBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBoolInterpolator.h b/obj/NiBoolInterpolator.h
index ac5b4eb58380137912c73a5d9d2c3cd1f280c057..fef53453ad0f12baf893cf64fb20f3c2d92e3a83 100644
--- a/obj/NiBoolInterpolator.h
+++ b/obj/NiBoolInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBoolInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOL_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBoolTimelineInterpolator.cpp b/obj/NiBoolTimelineInterpolator.cpp
index e623cdda67f0dbd8671374d54b40da8c20aaade5..281345d6bcf2f36a0204e5c3ca67200086a383b9 100644
--- a/obj/NiBoolTimelineInterpolator.cpp
+++ b/obj/NiBoolTimelineInterpolator.cpp
@@ -11,7 +11,7 @@ NiBoolTimelineInterpolator::NiBoolTimelineInterpolator() NI_BOOL_TIMELINE_INTERP
 
 NiBoolTimelineInterpolator::~NiBoolTimelineInterpolator() {}
 
-void NiBoolTimelineInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoolTimelineInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_TIMELINE_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiBoolTimelineInterpolator::asString( bool verbose ) const {
 	NI_BOOL_TIMELINE_INTERPOLATOR_STRING
 }
 
-void NiBoolTimelineInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoolTimelineInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_TIMELINE_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBoolTimelineInterpolator.h b/obj/NiBoolTimelineInterpolator.h
index e1bd39d347f51b5f3e4fcfd563436301b2ae0c34..f2b59580520d3cd5bd6c022b9715d9102df60776 100644
--- a/obj/NiBoolTimelineInterpolator.h
+++ b/obj/NiBoolTimelineInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBoolTimelineInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOL_TIMELINE_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBooleanExtraData.cpp b/obj/NiBooleanExtraData.cpp
index 4506c3c03d11644718523efff9a5ae7840e035c0..dca4aebc502d252ec54b41e753146f1aea932211 100644
--- a/obj/NiBooleanExtraData.cpp
+++ b/obj/NiBooleanExtraData.cpp
@@ -10,7 +10,7 @@ NiBooleanExtraData::NiBooleanExtraData() NI_BOOLEAN_EXTRA_DATA_CONSTRUCT {}
 
 NiBooleanExtraData::~NiBooleanExtraData() {}
 
-void NiBooleanExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBooleanExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOLEAN_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBooleanExtraData::asString( bool verbose ) const {
 	NI_BOOLEAN_EXTRA_DATA_STRING
 }
 
-void NiBooleanExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBooleanExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOLEAN_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBooleanExtraData.h b/obj/NiBooleanExtraData.h
index edecc535cde2b239e581de5f6b6e3dffbebc162b..057ad1b7a520067990c882de22b39f246d27c5d6 100644
--- a/obj/NiBooleanExtraData.h
+++ b/obj/NiBooleanExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiBooleanExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOLEAN_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiCamera.cpp b/obj/NiCamera.cpp
index 86724cf1b458594ac03dd52c12972bedbb8dc6c4..6b77ced40b1ce27572381a97757a62b00758a57a 100644
--- a/obj/NiCamera.cpp
+++ b/obj/NiCamera.cpp
@@ -10,7 +10,7 @@ NiCamera::NiCamera() NI_CAMERA_CONSTRUCT {}
 
 NiCamera::~NiCamera() {}
 
-void NiCamera::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiCamera::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_CAMERA_READ
 }
 
@@ -22,7 +22,7 @@ string NiCamera::asString( bool verbose ) const {
 	NI_CAMERA_STRING
 }
 
-void NiCamera::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiCamera::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_CAMERA_FIXLINKS
 }
 
diff --git a/obj/NiCamera.h b/obj/NiCamera.h
index 7220ebbd9f2227f1723496a7af544005dbc30164..7d0fd27f04b9ea09a922fc43c844c175290d3677 100644
--- a/obj/NiCamera.h
+++ b/obj/NiCamera.h
@@ -20,10 +20,11 @@ public:
 	~NiCamera();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_CAMERA_MEMBERS
 };
diff --git a/obj/NiCollisionData.cpp b/obj/NiCollisionData.cpp
index d3b7839bbb4f1dfded3756b33113593b8474e240..c8630bec73b17a330c56d6c2972edec28b89d21b 100644
--- a/obj/NiCollisionData.cpp
+++ b/obj/NiCollisionData.cpp
@@ -11,7 +11,7 @@ NiCollisionData::NiCollisionData() NI_COLLISION_DATA_CONSTRUCT {}
 
 NiCollisionData::~NiCollisionData() {}
 
-void NiCollisionData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiCollisionData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiCollisionData::asString( bool verbose ) const {
 	NI_COLLISION_DATA_STRING
 }
 
-void NiCollisionData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiCollisionData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_DATA_FIXLINKS
 }
 
diff --git a/obj/NiCollisionData.h b/obj/NiCollisionData.h
index 580f38c41c1b6eb2f6aa9bfcc4a4fd4f41a63ab8..ab7377448b9db96f646e057186d6cf11bf01bd92 100644
--- a/obj/NiCollisionData.h
+++ b/obj/NiCollisionData.h
@@ -20,10 +20,11 @@ public:
 	~NiCollisionData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_COLLISION_DATA_MEMBERS
 };
diff --git a/obj/NiCollisionObject.cpp b/obj/NiCollisionObject.cpp
index 8f2561c19b78d3f97d63352e54c524e56e8a9af7..6c193ad69b98fdd598c943e361ea280b0294f7fc 100644
--- a/obj/NiCollisionObject.cpp
+++ b/obj/NiCollisionObject.cpp
@@ -10,7 +10,7 @@ NiCollisionObject::NiCollisionObject() NI_COLLISION_OBJECT_CONSTRUCT {}
 
 NiCollisionObject::~NiCollisionObject() {}
 
-void NiCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string NiCollisionObject::asString( bool verbose ) const {
 	NI_COLLISION_OBJECT_STRING
 }
 
-void NiCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/NiCollisionObject.h b/obj/NiCollisionObject.h
index 20b9cab2a9dd19c6cdcdcb0861a972704b833d63..4e47208a71c68698b6e7aade091dd6cff4d6126d 100644
--- a/obj/NiCollisionObject.h
+++ b/obj/NiCollisionObject.h
@@ -21,10 +21,11 @@ public:
 	~NiCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	NiAVObject * Parent() const;
 private:
diff --git a/obj/NiColorData.cpp b/obj/NiColorData.cpp
index dc01ac563b8d5e4d7a360dad494875db2271c386..b48a1963152bc7ddabbef114a4a4b315f62bcac7 100644
--- a/obj/NiColorData.cpp
+++ b/obj/NiColorData.cpp
@@ -10,7 +10,7 @@ NiColorData::NiColorData() NI_COLOR_DATA_CONSTRUCT {}
 
 NiColorData::~NiColorData() {}
 
-void NiColorData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiColorData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiColorData::asString( bool verbose ) const {
 	NI_COLOR_DATA_STRING
 }
 
-void NiColorData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiColorData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_DATA_FIXLINKS
 }
 
diff --git a/obj/NiColorData.h b/obj/NiColorData.h
index 7dd6804f97019b6e97151e36ad43f4481c94454d..59775b7600a493243c41fdaa1818fa63c191b06e 100644
--- a/obj/NiColorData.h
+++ b/obj/NiColorData.h
@@ -20,10 +20,11 @@ public:
 	~NiColorData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_COLOR_DATA_MEMBERS
 };
diff --git a/obj/NiColorExtraData.cpp b/obj/NiColorExtraData.cpp
index f39471817d8859f511fd437398e373b5aa5e42f5..67f5707f8065243fbff64ac5a09a2082597b73f1 100644
--- a/obj/NiColorExtraData.cpp
+++ b/obj/NiColorExtraData.cpp
@@ -10,7 +10,7 @@ NiColorExtraData::NiColorExtraData() NI_COLOR_EXTRA_DATA_CONSTRUCT {}
 
 NiColorExtraData::~NiColorExtraData() {}
 
-void NiColorExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiColorExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiColorExtraData::asString( bool verbose ) const {
 	NI_COLOR_EXTRA_DATA_STRING
 }
 
-void NiColorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiColorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiColorExtraData.h b/obj/NiColorExtraData.h
index b33cc1cc3bbcdc51756510523af566c3aaba8a65..a88d6865362fcd52967734a3f2ab0bc2f53283e7 100644
--- a/obj/NiColorExtraData.h
+++ b/obj/NiColorExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiColorExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_COLOR_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiControllerManager.cpp b/obj/NiControllerManager.cpp
index 7475b790851974cc810cae73b77a0d4878760488..4e3974ba90fc9ceb13451e6398af039d3dbe67c0 100644
--- a/obj/NiControllerManager.cpp
+++ b/obj/NiControllerManager.cpp
@@ -12,7 +12,7 @@ NiControllerManager::NiControllerManager() NI_CONTROLLER_MANAGER_CONSTRUCT {}
 
 NiControllerManager::~NiControllerManager() {}
 
-void NiControllerManager::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiControllerManager::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_MANAGER_READ
 }
 
@@ -24,7 +24,7 @@ string NiControllerManager::asString( bool verbose ) const {
 	NI_CONTROLLER_MANAGER_STRING
 }
 
-void NiControllerManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiControllerManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_MANAGER_FIXLINKS
 }
 
diff --git a/obj/NiControllerManager.h b/obj/NiControllerManager.h
index 8514dfa559f171964ef694cf4452c21ae073885f..c06deffd3232f115b5898d3abcd8799038a201df 100644
--- a/obj/NiControllerManager.h
+++ b/obj/NiControllerManager.h
@@ -20,10 +20,11 @@ public:
 	~NiControllerManager();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_CONTROLLER_MANAGER_MEMBERS
 };
diff --git a/obj/NiControllerSequence.cpp b/obj/NiControllerSequence.cpp
index a1a666f07f93fb7c237ab4e89abca680879ed21f..e2ec7e47b4b51beb04f0dbc0c248067fb38f47cd 100644
--- a/obj/NiControllerSequence.cpp
+++ b/obj/NiControllerSequence.cpp
@@ -14,7 +14,7 @@ NiControllerSequence::NiControllerSequence() NI_CONTROLLER_SEQUENCE_CONSTRUCT {}
 
 NiControllerSequence::~NiControllerSequence() {}
 
-void NiControllerSequence::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiControllerSequence::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_SEQUENCE_READ
 }
 
@@ -26,7 +26,7 @@ string NiControllerSequence::asString( bool verbose ) const {
 	NI_CONTROLLER_SEQUENCE_STRING
 }
 
-void NiControllerSequence::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiControllerSequence::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_SEQUENCE_FIXLINKS
 }
 
diff --git a/obj/NiControllerSequence.h b/obj/NiControllerSequence.h
index a432d8dc6738479a640cbdc2f86baed3bc7d4b1c..776ac60defba243954e8bfaffac4b88b660d7a87 100644
--- a/obj/NiControllerSequence.h
+++ b/obj/NiControllerSequence.h
@@ -20,10 +20,11 @@ public:
 	~NiControllerSequence();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	NiControllerManager * Parent() const;
 private:
diff --git a/obj/NiDefaultAVObjectPalette.cpp b/obj/NiDefaultAVObjectPalette.cpp
index fe91f7bba2544d4d42f1cd43135bea4538b1047c..18a66462131451c25d0df2f2029da886c1281ca2 100644
--- a/obj/NiDefaultAVObjectPalette.cpp
+++ b/obj/NiDefaultAVObjectPalette.cpp
@@ -11,7 +11,7 @@ NiDefaultAVObjectPalette::NiDefaultAVObjectPalette() NI_DEFAULT_A_V_OBJECT_PALET
 
 NiDefaultAVObjectPalette::~NiDefaultAVObjectPalette() {}
 
-void NiDefaultAVObjectPalette::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDefaultAVObjectPalette::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DEFAULT_A_V_OBJECT_PALETTE_READ
 }
 
@@ -23,7 +23,7 @@ string NiDefaultAVObjectPalette::asString( bool verbose ) const {
 	NI_DEFAULT_A_V_OBJECT_PALETTE_STRING
 }
 
-void NiDefaultAVObjectPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDefaultAVObjectPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DEFAULT_A_V_OBJECT_PALETTE_FIXLINKS
 }
 
diff --git a/obj/NiDefaultAVObjectPalette.h b/obj/NiDefaultAVObjectPalette.h
index 565d9eaa02b41f7bebc36e8744100c10c4920396..0c03034f7c03dff4b5a5e0de6ab941a929168f3c 100644
--- a/obj/NiDefaultAVObjectPalette.h
+++ b/obj/NiDefaultAVObjectPalette.h
@@ -20,10 +20,11 @@ public:
 	~NiDefaultAVObjectPalette();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DEFAULT_A_V_OBJECT_PALETTE_MEMBERS
 };
diff --git a/obj/NiDirectionalLight.cpp b/obj/NiDirectionalLight.cpp
index e7ae860e847cd5a75accb182e303753f112efd8c..b4066a1317a1eaf31a4a0cf70a26589f09593ca5 100644
--- a/obj/NiDirectionalLight.cpp
+++ b/obj/NiDirectionalLight.cpp
@@ -10,7 +10,7 @@ NiDirectionalLight::NiDirectionalLight() NI_DIRECTIONAL_LIGHT_CONSTRUCT {}
 
 NiDirectionalLight::~NiDirectionalLight() {}
 
-void NiDirectionalLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDirectionalLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DIRECTIONAL_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiDirectionalLight::asString( bool verbose ) const {
 	NI_DIRECTIONAL_LIGHT_STRING
 }
 
-void NiDirectionalLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDirectionalLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DIRECTIONAL_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiDirectionalLight.h b/obj/NiDirectionalLight.h
index fa9047e9d8e45e63a5ffeaf42afa3713ff03498a..fc0829dd18989ee07ca865432042d1f68232891b 100644
--- a/obj/NiDirectionalLight.h
+++ b/obj/NiDirectionalLight.h
@@ -20,10 +20,11 @@ public:
 	~NiDirectionalLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DIRECTIONAL_LIGHT_MEMBERS
 };
diff --git a/obj/NiDitherProperty.cpp b/obj/NiDitherProperty.cpp
index 7c9ba5c6b10548d696c00758f310115bd0e18a18..d067ca3d32dcaf8b4d3181ae2076f81928f19774 100644
--- a/obj/NiDitherProperty.cpp
+++ b/obj/NiDitherProperty.cpp
@@ -10,7 +10,7 @@ NiDitherProperty::NiDitherProperty() NI_DITHER_PROPERTY_CONSTRUCT {}
 
 NiDitherProperty::~NiDitherProperty() {}
 
-void NiDitherProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDitherProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DITHER_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiDitherProperty::asString( bool verbose ) const {
 	NI_DITHER_PROPERTY_STRING
 }
 
-void NiDitherProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDitherProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DITHER_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiDitherProperty.h b/obj/NiDitherProperty.h
index ba293776c16980a9360ef93167a6b15871e7334b..2c7c186974c208d1423ec0b745288d5dc9769701 100644
--- a/obj/NiDitherProperty.h
+++ b/obj/NiDitherProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiDitherProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DITHER_PROPERTY_MEMBERS
 };
diff --git a/obj/NiDynamicEffect.cpp b/obj/NiDynamicEffect.cpp
index 6175f357ca17c29a502786d77bc8c07b8a46819d..205a65c0eaf80b8087d95b8eb6298d807b873507 100644
--- a/obj/NiDynamicEffect.cpp
+++ b/obj/NiDynamicEffect.cpp
@@ -10,7 +10,7 @@ NiDynamicEffect::NiDynamicEffect() NI_DYNAMIC_EFFECT_CONSTRUCT {}
 
 NiDynamicEffect::~NiDynamicEffect() {}
 
-void NiDynamicEffect::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDynamicEffect::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DYNAMIC_EFFECT_READ
 }
 
@@ -22,7 +22,7 @@ string NiDynamicEffect::asString( bool verbose ) const {
 	NI_DYNAMIC_EFFECT_STRING
 }
 
-void NiDynamicEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDynamicEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DYNAMIC_EFFECT_FIXLINKS
 }
 
diff --git a/obj/NiDynamicEffect.h b/obj/NiDynamicEffect.h
index 6ca4a1a08b44bb6ed49a06f7cd3f673be8679c8f..b0ddadba58b9577b2640aa9a2ce5eac4dd3c6b5d 100644
--- a/obj/NiDynamicEffect.h
+++ b/obj/NiDynamicEffect.h
@@ -20,10 +20,11 @@ public:
 	~NiDynamicEffect();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DYNAMIC_EFFECT_MEMBERS
 };
diff --git a/obj/NiExtraData.cpp b/obj/NiExtraData.cpp
index 264c9ca72d780fb8a07b69f045dd484766c72d62..d05d976d8fd3feace671482e356425a75db8e93a 100644
--- a/obj/NiExtraData.cpp
+++ b/obj/NiExtraData.cpp
@@ -10,7 +10,7 @@ NiExtraData::NiExtraData() NI_EXTRA_DATA_CONSTRUCT {}
 
 NiExtraData::~NiExtraData() {}
 
-void NiExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiExtraData::asString( bool verbose ) const {
 	NI_EXTRA_DATA_STRING
 }
 
-void NiExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiExtraData.h b/obj/NiExtraData.h
index 266a2df20887d5e41d06f5ffc0756982b9096228..d0121f81628ed0b391c3aa487566b04db3418784 100644
--- a/obj/NiExtraData.h
+++ b/obj/NiExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiFlipController.cpp b/obj/NiFlipController.cpp
index f98831a02f1c788ae8c104056af8b44d43115f91..fa24f710ef9bc76bbab717e3e695451e34e8bc13 100644
--- a/obj/NiFlipController.cpp
+++ b/obj/NiFlipController.cpp
@@ -11,7 +11,7 @@ NiFlipController::NiFlipController() NI_FLIP_CONTROLLER_CONSTRUCT {}
 
 NiFlipController::~NiFlipController() {}
 
-void NiFlipController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFlipController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLIP_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiFlipController::asString( bool verbose ) const {
 	NI_FLIP_CONTROLLER_STRING
 }
 
-void NiFlipController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFlipController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLIP_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiFlipController.h b/obj/NiFlipController.h
index 8be2a2f321e694f8aded2f310613343981d39d50..a11ef7a07d56f8fe6c6635d1dd85edfe42710a47 100644
--- a/obj/NiFlipController.h
+++ b/obj/NiFlipController.h
@@ -20,10 +20,11 @@ public:
 	~NiFlipController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLIP_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiFloatData.cpp b/obj/NiFloatData.cpp
index 5115b9ef49ca4b31006044a3a4bbd09ac95e113f..762ad7305adf579e6d2c39a5a7ba38a978b7a888 100644
--- a/obj/NiFloatData.cpp
+++ b/obj/NiFloatData.cpp
@@ -10,7 +10,7 @@ NiFloatData::NiFloatData() NI_FLOAT_DATA_CONSTRUCT {}
 
 NiFloatData::~NiFloatData() {}
 
-void NiFloatData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatData::asString( bool verbose ) const {
 	NI_FLOAT_DATA_STRING
 }
 
-void NiFloatData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_DATA_FIXLINKS
 }
 
diff --git a/obj/NiFloatData.h b/obj/NiFloatData.h
index 183b8c82b96a40b6f9a36e4e7e8549e5811dc865..f5ec9ea8be79270ec6610b47d6e912f2ed898c81 100644
--- a/obj/NiFloatData.h
+++ b/obj/NiFloatData.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_DATA_MEMBERS
 };
diff --git a/obj/NiFloatExtraData.cpp b/obj/NiFloatExtraData.cpp
index 1748f15dc6c0002055ce104641b25cbebc18692a..05ee96a8ab083d5b6dd2e7f4f7ce7c691894f79b 100644
--- a/obj/NiFloatExtraData.cpp
+++ b/obj/NiFloatExtraData.cpp
@@ -10,7 +10,7 @@ NiFloatExtraData::NiFloatExtraData() NI_FLOAT_EXTRA_DATA_CONSTRUCT {}
 
 NiFloatExtraData::~NiFloatExtraData() {}
 
-void NiFloatExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatExtraData::asString( bool verbose ) const {
 	NI_FLOAT_EXTRA_DATA_STRING
 }
 
-void NiFloatExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiFloatExtraData.h b/obj/NiFloatExtraData.h
index bcdcdf97c8e897e57302da081ce993233fde07f0..d5b783f6a0fb2658849a5a0f1353e5da0f0e0362 100644
--- a/obj/NiFloatExtraData.h
+++ b/obj/NiFloatExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiFloatExtraDataController.cpp b/obj/NiFloatExtraDataController.cpp
index a422929ad5a6f3a04f9ca0218675d7b6c0323ed0..e06ece2eae3b8b4f7f631c00526ee10b4055423f 100644
--- a/obj/NiFloatExtraDataController.cpp
+++ b/obj/NiFloatExtraDataController.cpp
@@ -10,7 +10,7 @@ NiFloatExtraDataController::NiFloatExtraDataController() NI_FLOAT_EXTRA_DATA_CON
 
 NiFloatExtraDataController::~NiFloatExtraDataController() {}
 
-void NiFloatExtraDataController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraDataController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatExtraDataController::asString( bool verbose ) const {
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_STRING
 }
 
-void NiFloatExtraDataController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraDataController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiFloatExtraDataController.h b/obj/NiFloatExtraDataController.h
index 18379a021bb723dbc7e3527c89d50aafd780c777..cfb8706bbc23e6075d6c8c669a6ba83da89b29bf 100644
--- a/obj/NiFloatExtraDataController.h
+++ b/obj/NiFloatExtraDataController.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatExtraDataController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiFloatInterpolator.cpp b/obj/NiFloatInterpolator.cpp
index ba8080f1912bac1952706a6d11d124bb74672089..d8111d4ab00ae5fa50dd63298c453bf621fee338 100644
--- a/obj/NiFloatInterpolator.cpp
+++ b/obj/NiFloatInterpolator.cpp
@@ -11,7 +11,7 @@ NiFloatInterpolator::NiFloatInterpolator() NI_FLOAT_INTERPOLATOR_CONSTRUCT {}
 
 NiFloatInterpolator::~NiFloatInterpolator() {}
 
-void NiFloatInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiFloatInterpolator::asString( bool verbose ) const {
 	NI_FLOAT_INTERPOLATOR_STRING
 }
 
-void NiFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiFloatInterpolator.h b/obj/NiFloatInterpolator.h
index 501116512664adbba406d75946f9b6b250e00699..1d87fcccbeb98b35549024e3f53a25d821aec013 100644
--- a/obj/NiFloatInterpolator.h
+++ b/obj/NiFloatInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiFloatsExtraData.cpp b/obj/NiFloatsExtraData.cpp
index 203611510e0191fb716fe602adaf33e7021f3402..b2223fb1f13caa4b5087762ca45aa1870fd87f75 100644
--- a/obj/NiFloatsExtraData.cpp
+++ b/obj/NiFloatsExtraData.cpp
@@ -10,7 +10,7 @@ NiFloatsExtraData::NiFloatsExtraData() NI_FLOATS_EXTRA_DATA_CONSTRUCT {}
 
 NiFloatsExtraData::~NiFloatsExtraData() {}
 
-void NiFloatsExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatsExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOATS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatsExtraData::asString( bool verbose ) const {
 	NI_FLOATS_EXTRA_DATA_STRING
 }
 
-void NiFloatsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOATS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiFloatsExtraData.h b/obj/NiFloatsExtraData.h
index 0cca5180bbc69053c36ece9ca4697f7b77f5cdf5..cd93658953d5f9534c2dd4840044001e82981aef 100644
--- a/obj/NiFloatsExtraData.h
+++ b/obj/NiFloatsExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatsExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOATS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiFogProperty.cpp b/obj/NiFogProperty.cpp
index 358dc3a937fe798a6eebb6a4e308bf891996ece2..3f4e577a1517aa142337cfb9f16b0d88d30bf1a0 100644
--- a/obj/NiFogProperty.cpp
+++ b/obj/NiFogProperty.cpp
@@ -10,7 +10,7 @@ NiFogProperty::NiFogProperty() NI_FOG_PROPERTY_CONSTRUCT {}
 
 NiFogProperty::~NiFogProperty() {}
 
-void NiFogProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFogProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FOG_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiFogProperty::asString( bool verbose ) const {
 	NI_FOG_PROPERTY_STRING
 }
 
-void NiFogProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFogProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FOG_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiFogProperty.h b/obj/NiFogProperty.h
index b0805c1be1af0eab59fbb4b91a5d9ab585912c67..e1e7d8b171aa0332fda3117049f7aa40152074ab 100644
--- a/obj/NiFogProperty.h
+++ b/obj/NiFogProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiFogProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FOG_PROPERTY_MEMBERS
 };
diff --git a/obj/NiGeomMorpherController.cpp b/obj/NiGeomMorpherController.cpp
index 1ca4a14876fc23a2b8ee6d60692f80d1b57dbeb1..d820bdf98f97dd34938d019afe594c24e3160241 100644
--- a/obj/NiGeomMorpherController.cpp
+++ b/obj/NiGeomMorpherController.cpp
@@ -12,7 +12,7 @@ NiGeomMorpherController::NiGeomMorpherController() NI_GEOM_MORPHER_CONTROLLER_CO
 
 NiGeomMorpherController::~NiGeomMorpherController() {}
 
-void NiGeomMorpherController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiGeomMorpherController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_GEOM_MORPHER_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiGeomMorpherController::asString( bool verbose ) const {
 	NI_GEOM_MORPHER_CONTROLLER_STRING
 }
 
-void NiGeomMorpherController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiGeomMorpherController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_GEOM_MORPHER_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiGeomMorpherController.h b/obj/NiGeomMorpherController.h
index 20bc16785976120269141b23a5239a6e093d6771..aaaabde88820d481f9adaf09e6c2e057b0bde720 100644
--- a/obj/NiGeomMorpherController.h
+++ b/obj/NiGeomMorpherController.h
@@ -20,10 +20,11 @@ public:
 	~NiGeomMorpherController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_GEOM_MORPHER_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiGravity.cpp b/obj/NiGravity.cpp
index c1b6c8b816b805ae7cd26253e21e3ad4b31c1b4b..63c962025432d386919909ccdd6bd735bbb37313 100644
--- a/obj/NiGravity.cpp
+++ b/obj/NiGravity.cpp
@@ -10,7 +10,7 @@ NiGravity::NiGravity() NI_GRAVITY_CONSTRUCT {}
 
 NiGravity::~NiGravity() {}
 
-void NiGravity::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiGravity::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_GRAVITY_READ
 }
 
@@ -22,7 +22,7 @@ string NiGravity::asString( bool verbose ) const {
 	NI_GRAVITY_STRING
 }
 
-void NiGravity::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiGravity::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_GRAVITY_FIXLINKS
 }
 
diff --git a/obj/NiGravity.h b/obj/NiGravity.h
index 18d5aebd54f0ffdcdfa957475a6557766b418567..f7fa054f8aebfb5eb58f2b464d4772c302eeb6e5 100644
--- a/obj/NiGravity.h
+++ b/obj/NiGravity.h
@@ -20,10 +20,11 @@ public:
 	~NiGravity();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_GRAVITY_MEMBERS
 };
diff --git a/obj/NiIntegerExtraData.cpp b/obj/NiIntegerExtraData.cpp
index 5b9f748833751cddf8497d35b549cc9fff6d7113..3626d51d9b30ea3bc2b0bb0690cd6fd966eac70b 100644
--- a/obj/NiIntegerExtraData.cpp
+++ b/obj/NiIntegerExtraData.cpp
@@ -10,7 +10,7 @@ NiIntegerExtraData::NiIntegerExtraData() NI_INTEGER_EXTRA_DATA_CONSTRUCT {}
 
 NiIntegerExtraData::~NiIntegerExtraData() {}
 
-void NiIntegerExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiIntegerExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGER_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiIntegerExtraData::asString( bool verbose ) const {
 	NI_INTEGER_EXTRA_DATA_STRING
 }
 
-void NiIntegerExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiIntegerExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGER_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiIntegerExtraData.h b/obj/NiIntegerExtraData.h
index d217994a629049d2b3dd77897e97ff23f8793c5d..649ab0186b36d88f806165d93c51de6eaa74e506 100644
--- a/obj/NiIntegerExtraData.h
+++ b/obj/NiIntegerExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiIntegerExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_INTEGER_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiIntegersExtraData.cpp b/obj/NiIntegersExtraData.cpp
index b822551033fd5a87564f81139c90deacaf90f55f..7ea093845d93c222699855b7dc052c060bf1183c 100644
--- a/obj/NiIntegersExtraData.cpp
+++ b/obj/NiIntegersExtraData.cpp
@@ -10,7 +10,7 @@ NiIntegersExtraData::NiIntegersExtraData() NI_INTEGERS_EXTRA_DATA_CONSTRUCT {}
 
 NiIntegersExtraData::~NiIntegersExtraData() {}
 
-void NiIntegersExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiIntegersExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGERS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiIntegersExtraData::asString( bool verbose ) const {
 	NI_INTEGERS_EXTRA_DATA_STRING
 }
 
-void NiIntegersExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiIntegersExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGERS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiIntegersExtraData.h b/obj/NiIntegersExtraData.h
index 7d73542e84ba13d383825d3a06464cce2126d225..8c691654290c97ef2ce1a4c736de87df0de05a57 100644
--- a/obj/NiIntegersExtraData.h
+++ b/obj/NiIntegersExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiIntegersExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_INTEGERS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiKeyframeController.cpp b/obj/NiKeyframeController.cpp
index 05e33c403a876adf592b502bdbd5cf46f19d308b..a7981352ab973d92691105fb3925d7432f0260b8 100644
--- a/obj/NiKeyframeController.cpp
+++ b/obj/NiKeyframeController.cpp
@@ -11,7 +11,7 @@ NiKeyframeController::NiKeyframeController() NI_KEYFRAME_CONTROLLER_CONSTRUCT {}
 
 NiKeyframeController::~NiKeyframeController() {}
 
-void NiKeyframeController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiKeyframeController::asString( bool verbose ) const {
 	NI_KEYFRAME_CONTROLLER_STRING
 }
 
-void NiKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiKeyframeController.h b/obj/NiKeyframeController.h
index e239a2e490c7a8b640f2ba03e65cc4c093a14bff..d668a5a4b670b4ef13e4ae3cb467e399bed81fe5 100644
--- a/obj/NiKeyframeController.h
+++ b/obj/NiKeyframeController.h
@@ -20,10 +20,11 @@ public:
 	~NiKeyframeController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_KEYFRAME_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiKeyframeData.cpp b/obj/NiKeyframeData.cpp
index a0b8b3f3b516625e8f28b582cc7003f23218657b..d8e787488711c483beef49e33e5c1fe736003bb5 100644
--- a/obj/NiKeyframeData.cpp
+++ b/obj/NiKeyframeData.cpp
@@ -10,7 +10,7 @@ NiKeyframeData::NiKeyframeData() NI_KEYFRAME_DATA_CONSTRUCT {}
 
 NiKeyframeData::~NiKeyframeData() {}
 
-void NiKeyframeData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiKeyframeData::asString( bool verbose ) const {
 	NI_KEYFRAME_DATA_STRING
 }
 
-void NiKeyframeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_DATA_FIXLINKS
 }
 
diff --git a/obj/NiKeyframeData.h b/obj/NiKeyframeData.h
index c5e99ee2afe2268025ed68d3fe46ace43d60b0e0..31232938c1382a82bf2847644797fee5233ec4e2 100644
--- a/obj/NiKeyframeData.h
+++ b/obj/NiKeyframeData.h
@@ -20,10 +20,11 @@ public:
 	~NiKeyframeData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_KEYFRAME_DATA_MEMBERS
 };
diff --git a/obj/NiLODNode.cpp b/obj/NiLODNode.cpp
index dc0d60f04e6a8af6d9fdbe041547075f5f88dd28..02b4d471bd0291002dc9a93d24c292f1f3b77850 100644
--- a/obj/NiLODNode.cpp
+++ b/obj/NiLODNode.cpp
@@ -11,7 +11,7 @@ NiLODNode::NiLODNode() NI_L_O_D_NODE_CONSTRUCT {}
 
 NiLODNode::~NiLODNode() {}
 
-void NiLODNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLODNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_L_O_D_NODE_READ
 }
 
@@ -23,7 +23,7 @@ string NiLODNode::asString( bool verbose ) const {
 	NI_L_O_D_NODE_STRING
 }
 
-void NiLODNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLODNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_L_O_D_NODE_FIXLINKS
 }
 
diff --git a/obj/NiLODNode.h b/obj/NiLODNode.h
index acfeacf6de0328db1625d012435fe40976319146..0dcb618d9eaa1e15f64e3ddf474a066eb998f073 100644
--- a/obj/NiLODNode.h
+++ b/obj/NiLODNode.h
@@ -20,10 +20,11 @@ public:
 	~NiLODNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_L_O_D_NODE_MEMBERS
 };
diff --git a/obj/NiLight.cpp b/obj/NiLight.cpp
index 05e138927d93b927726bb276f6b708082eb2f094..d48b6d73b082ef5b9336e0f3d27a9b62fc5523f4 100644
--- a/obj/NiLight.cpp
+++ b/obj/NiLight.cpp
@@ -10,7 +10,7 @@ NiLight::NiLight() NI_LIGHT_CONSTRUCT {}
 
 NiLight::~NiLight() {}
 
-void NiLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiLight::asString( bool verbose ) const {
 	NI_LIGHT_STRING
 }
 
-void NiLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiLight.h b/obj/NiLight.h
index ab3928abd7573e8d361a7cc1c297215ad96950b5..bd8a36314e9acfff381c3ea0143aa17406c358ed 100644
--- a/obj/NiLight.h
+++ b/obj/NiLight.h
@@ -20,10 +20,11 @@ public:
 	~NiLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LIGHT_MEMBERS
 };
diff --git a/obj/NiLightColorController.cpp b/obj/NiLightColorController.cpp
index dcfa8df2dfb07cf19a67e5874564958fc4dc60e0..6c909195e9f286f1317b6a9be9c714877dd0b755 100644
--- a/obj/NiLightColorController.cpp
+++ b/obj/NiLightColorController.cpp
@@ -12,7 +12,7 @@ NiLightColorController::NiLightColorController() NI_LIGHT_COLOR_CONTROLLER_CONST
 
 NiLightColorController::~NiLightColorController() {}
 
-void NiLightColorController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLightColorController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_COLOR_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiLightColorController::asString( bool verbose ) const {
 	NI_LIGHT_COLOR_CONTROLLER_STRING
 }
 
-void NiLightColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLightColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_COLOR_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiLightColorController.h b/obj/NiLightColorController.h
index 3486135452cc56cc403d159d968d66e7251afeb7..0f53d25925d0700d3cacf893df38b80319085daa 100644
--- a/obj/NiLightColorController.h
+++ b/obj/NiLightColorController.h
@@ -20,10 +20,11 @@ public:
 	~NiLightColorController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LIGHT_COLOR_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiLightDimmerController.cpp b/obj/NiLightDimmerController.cpp
index 68ca786d3a011e65e13376eccb8b5693594f431f..f5d000fe690a2d21ac501a092b95d10a3f61bf7a 100644
--- a/obj/NiLightDimmerController.cpp
+++ b/obj/NiLightDimmerController.cpp
@@ -11,7 +11,7 @@ NiLightDimmerController::NiLightDimmerController() NI_LIGHT_DIMMER_CONTROLLER_CO
 
 NiLightDimmerController::~NiLightDimmerController() {}
 
-void NiLightDimmerController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLightDimmerController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_DIMMER_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiLightDimmerController::asString( bool verbose ) const {
 	NI_LIGHT_DIMMER_CONTROLLER_STRING
 }
 
-void NiLightDimmerController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLightDimmerController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_DIMMER_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiLightDimmerController.h b/obj/NiLightDimmerController.h
index 7d2a5ed5d52c003f6781173053e69282f560d994..ee4e0a0c9c47eb3f77e30aef64f40f7fa97c0413 100644
--- a/obj/NiLightDimmerController.h
+++ b/obj/NiLightDimmerController.h
@@ -20,10 +20,11 @@ public:
 	~NiLightDimmerController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LIGHT_DIMMER_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiLookAtController.cpp b/obj/NiLookAtController.cpp
index 15a8e7456f6154576c7ca26efc5cc0f77857322f..0d5eace187016cebe5fbf58ab495b0c8991ad84d 100644
--- a/obj/NiLookAtController.cpp
+++ b/obj/NiLookAtController.cpp
@@ -11,7 +11,7 @@ NiLookAtController::NiLookAtController() NI_LOOK_AT_CONTROLLER_CONSTRUCT {}
 
 NiLookAtController::~NiLookAtController() {}
 
-void NiLookAtController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLookAtController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiLookAtController::asString( bool verbose ) const {
 	NI_LOOK_AT_CONTROLLER_STRING
 }
 
-void NiLookAtController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLookAtController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiLookAtController.h b/obj/NiLookAtController.h
index 5b2231ee25430023fc33802ac81f1cbe35a5eec3..c88f0fcc87770dbccf62a1088630bdccf410b25b 100644
--- a/obj/NiLookAtController.h
+++ b/obj/NiLookAtController.h
@@ -20,10 +20,11 @@ public:
 	~NiLookAtController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LOOK_AT_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiLookAtInterpolator.cpp b/obj/NiLookAtInterpolator.cpp
index 875a477d1faf2c8902f1423b94dbed287fa0e3a4..6593f9ca9f3db5238c8c644fda1bb138de36fc1f 100644
--- a/obj/NiLookAtInterpolator.cpp
+++ b/obj/NiLookAtInterpolator.cpp
@@ -13,7 +13,7 @@ NiLookAtInterpolator::NiLookAtInterpolator() NI_LOOK_AT_INTERPOLATOR_CONSTRUCT {
 
 NiLookAtInterpolator::~NiLookAtInterpolator() {}
 
-void NiLookAtInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLookAtInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_INTERPOLATOR_READ
 }
 
@@ -25,7 +25,7 @@ string NiLookAtInterpolator::asString( bool verbose ) const {
 	NI_LOOK_AT_INTERPOLATOR_STRING
 }
 
-void NiLookAtInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLookAtInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiLookAtInterpolator.h b/obj/NiLookAtInterpolator.h
index 17ac21c8821b0663fc63615d92f5b1c83ef9f806..4b5232efcfd93d014eb57db77d2673666284f5ec 100644
--- a/obj/NiLookAtInterpolator.h
+++ b/obj/NiLookAtInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiLookAtInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LOOK_AT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiMaterialColorController.cpp b/obj/NiMaterialColorController.cpp
index cf060d3ce7376b8bf575de679f26a094ebee61ad..9cd0d4a221dbf9cec0d2b24c304da22d39ebefe0 100644
--- a/obj/NiMaterialColorController.cpp
+++ b/obj/NiMaterialColorController.cpp
@@ -11,7 +11,7 @@ NiMaterialColorController::NiMaterialColorController() NI_MATERIAL_COLOR_CONTROL
 
 NiMaterialColorController::~NiMaterialColorController() {}
 
-void NiMaterialColorController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMaterialColorController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_COLOR_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiMaterialColorController::asString( bool verbose ) const {
 	NI_MATERIAL_COLOR_CONTROLLER_STRING
 }
 
-void NiMaterialColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMaterialColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_COLOR_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiMaterialColorController.h b/obj/NiMaterialColorController.h
index 713542804452ac65daaa238885cf2e3fc97f78c8..87c754e0b2deee2139107d0016c847c69eabe133 100644
--- a/obj/NiMaterialColorController.h
+++ b/obj/NiMaterialColorController.h
@@ -20,10 +20,11 @@ public:
 	~NiMaterialColorController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MATERIAL_COLOR_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiMaterialProperty.cpp b/obj/NiMaterialProperty.cpp
index 7708f146dd25fa4c1e0c282f213f756db84064d5..a3fa3d5473fd09413d8de8a850ce283585a266bb 100644
--- a/obj/NiMaterialProperty.cpp
+++ b/obj/NiMaterialProperty.cpp
@@ -10,7 +10,7 @@ NiMaterialProperty::NiMaterialProperty() NI_MATERIAL_PROPERTY_CONSTRUCT {}
 
 NiMaterialProperty::~NiMaterialProperty() {}
 
-void NiMaterialProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMaterialProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiMaterialProperty::asString( bool verbose ) const {
 	NI_MATERIAL_PROPERTY_STRING
 }
 
-void NiMaterialProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMaterialProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiMaterialProperty.h b/obj/NiMaterialProperty.h
index 33bc070fd8d4e46d695772d933134575b33578bd..ce098d1c33ed3ffc5ce9cdb3e1f1245e6f51a591 100644
--- a/obj/NiMaterialProperty.h
+++ b/obj/NiMaterialProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiMaterialProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MATERIAL_PROPERTY_MEMBERS
 };
diff --git a/obj/NiMeshPSysData.cpp b/obj/NiMeshPSysData.cpp
index ced737ff8fadca682c373ba720e31c15e0c6e8dc..734ce96ebabd291325296eedc0f9ca4a7a86d0d4 100644
--- a/obj/NiMeshPSysData.cpp
+++ b/obj/NiMeshPSysData.cpp
@@ -12,7 +12,7 @@ NiMeshPSysData::NiMeshPSysData() NI_MESH_P_SYS_DATA_CONSTRUCT {}
 
 NiMeshPSysData::~NiMeshPSysData() {}
 
-void NiMeshPSysData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMeshPSysData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_P_SYS_DATA_READ
 }
 
@@ -24,7 +24,7 @@ string NiMeshPSysData::asString( bool verbose ) const {
 	NI_MESH_P_SYS_DATA_STRING
 }
 
-void NiMeshPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMeshPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_P_SYS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiMeshPSysData.h b/obj/NiMeshPSysData.h
index fd111a4a8f47acf77f01fa73b7d48d9a1e9c486a..025825367e70336133459f61b7e5e3bf74b4609f 100644
--- a/obj/NiMeshPSysData.h
+++ b/obj/NiMeshPSysData.h
@@ -20,10 +20,11 @@ public:
 	~NiMeshPSysData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MESH_P_SYS_DATA_MEMBERS
 };
diff --git a/obj/NiMeshParticleSystem.cpp b/obj/NiMeshParticleSystem.cpp
index b7862c6bc94a7112ed3dcb724fd841a21b7133fa..b500461293e6ec14b73b26f40c805f9c97a57b28 100644
--- a/obj/NiMeshParticleSystem.cpp
+++ b/obj/NiMeshParticleSystem.cpp
@@ -10,7 +10,7 @@ NiMeshParticleSystem::NiMeshParticleSystem() NI_MESH_PARTICLE_SYSTEM_CONSTRUCT {
 
 NiMeshParticleSystem::~NiMeshParticleSystem() {}
 
-void NiMeshParticleSystem::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMeshParticleSystem::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_PARTICLE_SYSTEM_READ
 }
 
@@ -22,7 +22,7 @@ string NiMeshParticleSystem::asString( bool verbose ) const {
 	NI_MESH_PARTICLE_SYSTEM_STRING
 }
 
-void NiMeshParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMeshParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_PARTICLE_SYSTEM_FIXLINKS
 }
 
diff --git a/obj/NiMeshParticleSystem.h b/obj/NiMeshParticleSystem.h
index e2665159fd2c6777e32f7a9c225ea0a7490c5db6..3e4bc50fc6cd1315e9d9a13e9ee2181fe8bafde2 100644
--- a/obj/NiMeshParticleSystem.h
+++ b/obj/NiMeshParticleSystem.h
@@ -20,10 +20,11 @@ public:
 	~NiMeshParticleSystem();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MESH_PARTICLE_SYSTEM_MEMBERS
 };
diff --git a/obj/NiMorphData.cpp b/obj/NiMorphData.cpp
index a97ac1cd7d2f335d7074b386f00050c7936de43d..0c9ec92ddeaee9deb686e0f3c22f06736e74a647 100644
--- a/obj/NiMorphData.cpp
+++ b/obj/NiMorphData.cpp
@@ -10,7 +10,7 @@ NiMorphData::NiMorphData() NI_MORPH_DATA_CONSTRUCT {}
 
 NiMorphData::~NiMorphData() {}
 
-void NiMorphData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMorphData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MORPH_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiMorphData::asString( bool verbose ) const {
 	NI_MORPH_DATA_STRING
 }
 
-void NiMorphData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMorphData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MORPH_DATA_FIXLINKS
 }
 
diff --git a/obj/NiMorphData.h b/obj/NiMorphData.h
index a2b5dc91a144026678e85e602b499ad57f072b47..09e5eb28f7919dec2f3e86d6891d9028861ec39e 100644
--- a/obj/NiMorphData.h
+++ b/obj/NiMorphData.h
@@ -20,10 +20,11 @@ public:
 	~NiMorphData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MORPH_DATA_MEMBERS
 };
diff --git a/obj/NiMultiTargetTransformController.cpp b/obj/NiMultiTargetTransformController.cpp
index 780450a2b75361aca90cda7514706f95e723e298..31d858acd73449a407727ca8dcc0ab2cd7ccf4f6 100644
--- a/obj/NiMultiTargetTransformController.cpp
+++ b/obj/NiMultiTargetTransformController.cpp
@@ -11,7 +11,7 @@ NiMultiTargetTransformController::NiMultiTargetTransformController() NI_MULTI_TA
 
 NiMultiTargetTransformController::~NiMultiTargetTransformController() {}
 
-void NiMultiTargetTransformController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMultiTargetTransformController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiMultiTargetTransformController::asString( bool verbose ) const {
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_STRING
 }
 
-void NiMultiTargetTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMultiTargetTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiMultiTargetTransformController.h b/obj/NiMultiTargetTransformController.h
index 4d63c461ef54b4a235c93fa1f156dab5b602fd02..333cd7f4a54c0149821819296539bb8757bdf0a2 100644
--- a/obj/NiMultiTargetTransformController.h
+++ b/obj/NiMultiTargetTransformController.h
@@ -20,10 +20,11 @@ public:
 	~NiMultiTargetTransformController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiNode.cpp b/obj/NiNode.cpp
index 28da8f94f810f36a115d5aecf1cc7ae612f32f17..071c71bd9fe58844e47a65dde49677039b61985d 100644
--- a/obj/NiNode.cpp
+++ b/obj/NiNode.cpp
@@ -11,7 +11,7 @@ NiNode::NiNode() NI_NODE_CONSTRUCT {}
 
 NiNode::~NiNode() {}
 
-void NiNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_NODE_READ
 }
 
@@ -23,6 +23,6 @@ string NiNode::asString( bool verbose ) const {
 	NI_NODE_STRING
 }
 
-void NiNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+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 5584cf62e0b7e8dec20e04838c524b770dc0542f..b05bb4d586bd9fe5fca8e477bafe775c420378ed 100644
--- a/obj/NiNode.h
+++ b/obj/NiNode.h
@@ -20,10 +20,11 @@ public:
 	~NiNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	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:
diff --git a/obj/NiObject.h b/obj/NiObject.h
index 10919381420ff6041275c20d9b958ff4de0dce2c..5e6e1320a12e25d66a044e629cb0df9197448d98 100644
--- a/obj/NiObject.h
+++ b/obj/NiObject.h
@@ -63,9 +63,9 @@ public:
 	bool IsDerivedType( const NiObject * objct ) const;
 
 	//Streaming Functions
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version ) {}
+	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 void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {}
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {}
 
 	//Reference Counting
 	void AddRef(); //Should not be called directly
diff --git a/obj/NiObjectNET.cpp b/obj/NiObjectNET.cpp
index 44f8e36a5c0c95f6d71a4b7b4bc1c0ffb65088c8..8ee930917edbd6fe0ffbd6e9cdb46338125315f2 100644
--- a/obj/NiObjectNET.cpp
+++ b/obj/NiObjectNET.cpp
@@ -12,7 +12,7 @@ NiObjectNET::NiObjectNET() NI_OBJECT_N_E_T_CONSTRUCT {}
 
 NiObjectNET::~NiObjectNET() {}
 
-void NiObjectNET::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiObjectNET::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_OBJECT_N_E_T_READ
 }
 
@@ -24,7 +24,7 @@ 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 ) {
+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 2c5da457d0f7653bc19067b209fc4117fde5eeab..d571a7a021aae21329c07b494c4f197350530db0 100644
--- a/obj/NiObjectNET.h
+++ b/obj/NiObjectNET.h
@@ -20,10 +20,11 @@ public:
 	~NiObjectNET();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	string GetName();
 	void SetName( string & new_name );
diff --git a/obj/NiPSysAgeDeathModifier.cpp b/obj/NiPSysAgeDeathModifier.cpp
index 164d0653ac1af0ff71f4cfe2d1a9764cd932a5b2..c3aabdc792b99dcb06a6b35e3c4decd084336751 100644
--- a/obj/NiPSysAgeDeathModifier.cpp
+++ b/obj/NiPSysAgeDeathModifier.cpp
@@ -11,7 +11,7 @@ NiPSysAgeDeathModifier::NiPSysAgeDeathModifier() NI_P_SYS_AGE_DEATH_MODIFIER_CON
 
 NiPSysAgeDeathModifier::~NiPSysAgeDeathModifier() {}
 
-void NiPSysAgeDeathModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysAgeDeathModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_AGE_DEATH_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysAgeDeathModifier::asString( bool verbose ) const {
 	NI_P_SYS_AGE_DEATH_MODIFIER_STRING
 }
 
-void NiPSysAgeDeathModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysAgeDeathModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_AGE_DEATH_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysAgeDeathModifier.h b/obj/NiPSysAgeDeathModifier.h
index 12565f1a901d7dcde2f65f22c4422aecd8e0a98b..bce0f31306d90a19f0fd4926d4f94e4bd71fe64b 100644
--- a/obj/NiPSysAgeDeathModifier.h
+++ b/obj/NiPSysAgeDeathModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysAgeDeathModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_AGE_DEATH_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysBombModifier.cpp b/obj/NiPSysBombModifier.cpp
index 14101eb30315df48cf0f922e43f1521ac10007f4..28771d4a731c7a035fa3b1ad1fc16c9bf7f185fb 100644
--- a/obj/NiPSysBombModifier.cpp
+++ b/obj/NiPSysBombModifier.cpp
@@ -11,7 +11,7 @@ NiPSysBombModifier::NiPSysBombModifier() NI_P_SYS_BOMB_MODIFIER_CONSTRUCT {}
 
 NiPSysBombModifier::~NiPSysBombModifier() {}
 
-void NiPSysBombModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysBombModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOMB_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysBombModifier::asString( bool verbose ) const {
 	NI_P_SYS_BOMB_MODIFIER_STRING
 }
 
-void NiPSysBombModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysBombModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOMB_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysBombModifier.h b/obj/NiPSysBombModifier.h
index ef2c1f68a484f4afe1091d13bd6329a4c4e66481..87306ce48691540fd19dda2526f1ff2ca5e0152c 100644
--- a/obj/NiPSysBombModifier.h
+++ b/obj/NiPSysBombModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysBombModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_BOMB_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysBoundUpdateModifier.cpp b/obj/NiPSysBoundUpdateModifier.cpp
index 42070725b18a83b0ffc2a8c999b796c394e2c3ff..60e068d3e0ab8e50e576f74aa0c40f6dca2fe51e 100644
--- a/obj/NiPSysBoundUpdateModifier.cpp
+++ b/obj/NiPSysBoundUpdateModifier.cpp
@@ -10,7 +10,7 @@ NiPSysBoundUpdateModifier::NiPSysBoundUpdateModifier() NI_P_SYS_BOUND_UPDATE_MOD
 
 NiPSysBoundUpdateModifier::~NiPSysBoundUpdateModifier() {}
 
-void NiPSysBoundUpdateModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoundUpdateModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysBoundUpdateModifier::asString( bool verbose ) const {
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_STRING
 }
 
-void NiPSysBoundUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoundUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysBoundUpdateModifier.h b/obj/NiPSysBoundUpdateModifier.h
index 077111c767a1aed7dc3e48a7a87e75f91ac01ec5..da98d7c68f8eeb326667638fb17f5dbdc09eea8f 100644
--- a/obj/NiPSysBoundUpdateModifier.h
+++ b/obj/NiPSysBoundUpdateModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysBoundUpdateModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysBoxEmitter.cpp b/obj/NiPSysBoxEmitter.cpp
index 2da5ad1b9a75b4e0d62a73482bc3adeac2f76adf..5241c2fda89f5612c10e5308c6e87c2deb11e719 100644
--- a/obj/NiPSysBoxEmitter.cpp
+++ b/obj/NiPSysBoxEmitter.cpp
@@ -10,7 +10,7 @@ NiPSysBoxEmitter::NiPSysBoxEmitter() NI_P_SYS_BOX_EMITTER_CONSTRUCT {}
 
 NiPSysBoxEmitter::~NiPSysBoxEmitter() {}
 
-void NiPSysBoxEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoxEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOX_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysBoxEmitter::asString( bool verbose ) const {
 	NI_P_SYS_BOX_EMITTER_STRING
 }
 
-void NiPSysBoxEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoxEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOX_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysBoxEmitter.h b/obj/NiPSysBoxEmitter.h
index b6afacd534b61e39389eb2acf65a83797a6f76bb..d6f731a45d7d6d006e20f8811dc1512e37eaa729 100644
--- a/obj/NiPSysBoxEmitter.h
+++ b/obj/NiPSysBoxEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysBoxEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_BOX_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysColliderManager.cpp b/obj/NiPSysColliderManager.cpp
index b3e5ac4f2faaf96e44d762f3ae1bc0f6284bd689..cdb70b3a3fa481a2ac08766ab512d2b01547a60a 100644
--- a/obj/NiPSysColliderManager.cpp
+++ b/obj/NiPSysColliderManager.cpp
@@ -11,7 +11,7 @@ NiPSysColliderManager::NiPSysColliderManager() NI_P_SYS_COLLIDER_MANAGER_CONSTRU
 
 NiPSysColliderManager::~NiPSysColliderManager() {}
 
-void NiPSysColliderManager::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysColliderManager::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLLIDER_MANAGER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysColliderManager::asString( bool verbose ) const {
 	NI_P_SYS_COLLIDER_MANAGER_STRING
 }
 
-void NiPSysColliderManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysColliderManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLLIDER_MANAGER_FIXLINKS
 }
 
diff --git a/obj/NiPSysColliderManager.h b/obj/NiPSysColliderManager.h
index 029a9e7f9feed9e8c4eec8aa384ff4a0b2d82781..10062ef87124d4136618d01617694230380af419 100644
--- a/obj/NiPSysColliderManager.h
+++ b/obj/NiPSysColliderManager.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysColliderManager();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_COLLIDER_MANAGER_MEMBERS
 };
diff --git a/obj/NiPSysColorModifier.cpp b/obj/NiPSysColorModifier.cpp
index dcb81ec7b6001dc92dd6c66a81b040eb49f23842..8e95aa013a6ad8da9be0253f69db3fd00cda6334 100644
--- a/obj/NiPSysColorModifier.cpp
+++ b/obj/NiPSysColorModifier.cpp
@@ -12,7 +12,7 @@ NiPSysColorModifier::NiPSysColorModifier() NI_P_SYS_COLOR_MODIFIER_CONSTRUCT {}
 
 NiPSysColorModifier::~NiPSysColorModifier() {}
 
-void NiPSysColorModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysColorModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLOR_MODIFIER_READ
 }
 
@@ -24,7 +24,7 @@ string NiPSysColorModifier::asString( bool verbose ) const {
 	NI_P_SYS_COLOR_MODIFIER_STRING
 }
 
-void NiPSysColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLOR_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysColorModifier.h b/obj/NiPSysColorModifier.h
index d0a037cbc0fe05ff0fa9c89094c8a9c68f87fe65..5dfb188802b3293343682bee993167b3ecc533bf 100644
--- a/obj/NiPSysColorModifier.h
+++ b/obj/NiPSysColorModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysColorModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_COLOR_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysCylinderEmitter.cpp b/obj/NiPSysCylinderEmitter.cpp
index 61e26ba8bbd0a6c945db6d3ed5a3e987b9a63186..58f9d3c894f96734ea6419e8a3baffb3c3a19cb6 100644
--- a/obj/NiPSysCylinderEmitter.cpp
+++ b/obj/NiPSysCylinderEmitter.cpp
@@ -10,7 +10,7 @@ NiPSysCylinderEmitter::NiPSysCylinderEmitter() NI_P_SYS_CYLINDER_EMITTER_CONSTRU
 
 NiPSysCylinderEmitter::~NiPSysCylinderEmitter() {}
 
-void NiPSysCylinderEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysCylinderEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_CYLINDER_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysCylinderEmitter::asString( bool verbose ) const {
 	NI_P_SYS_CYLINDER_EMITTER_STRING
 }
 
-void NiPSysCylinderEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysCylinderEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_CYLINDER_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysCylinderEmitter.h b/obj/NiPSysCylinderEmitter.h
index 30111cfef5bc60a4faa92fbee37ff37e621f3570..5e329abb245deada25b8b69e58877d040f0ba67c 100644
--- a/obj/NiPSysCylinderEmitter.h
+++ b/obj/NiPSysCylinderEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysCylinderEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_CYLINDER_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysData.cpp b/obj/NiPSysData.cpp
index d93021be40fd5cee2a6abc034adf4f4660de8a02..df14c5a985a57e3cb4f9d8cc8b22029b2e1d3e48 100644
--- a/obj/NiPSysData.cpp
+++ b/obj/NiPSysData.cpp
@@ -10,7 +10,7 @@ NiPSysData::NiPSysData() NI_P_SYS_DATA_CONSTRUCT {}
 
 NiPSysData::~NiPSysData() {}
 
-void NiPSysData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysData::asString( bool verbose ) const {
 	NI_P_SYS_DATA_STRING
 }
 
-void NiPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPSysData.h b/obj/NiPSysData.h
index 7ea23771e46a6f1061bbadbefee19fa536fca80c..8d8eb90b77d44f8dcf0d83c5b702a36851bd59d5 100644
--- a/obj/NiPSysData.h
+++ b/obj/NiPSysData.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_DATA_MEMBERS
 };
diff --git a/obj/NiPSysDragModifier.cpp b/obj/NiPSysDragModifier.cpp
index 1fb4c4c1269d7ecd3bf07e8d09414b455e6b6ab8..eab96c68b495460e08d8b5266ad1851650f2d87d 100644
--- a/obj/NiPSysDragModifier.cpp
+++ b/obj/NiPSysDragModifier.cpp
@@ -10,7 +10,7 @@ NiPSysDragModifier::NiPSysDragModifier() NI_P_SYS_DRAG_MODIFIER_CONSTRUCT {}
 
 NiPSysDragModifier::~NiPSysDragModifier() {}
 
-void NiPSysDragModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysDragModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DRAG_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysDragModifier::asString( bool verbose ) const {
 	NI_P_SYS_DRAG_MODIFIER_STRING
 }
 
-void NiPSysDragModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysDragModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DRAG_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysDragModifier.h b/obj/NiPSysDragModifier.h
index ba75792e5acfde733c318c5c94003ef3478df6f6..263992b37348475d2b7d3753728a91cf50753415 100644
--- a/obj/NiPSysDragModifier.h
+++ b/obj/NiPSysDragModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysDragModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_DRAG_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysEmitterCtlr.cpp b/obj/NiPSysEmitterCtlr.cpp
index 36f98857a0e51174fb4a88d0b873e7b1f1c81f6b..2bfb6f63fbb0f54e24812650328ba3c52f8f4f2d 100644
--- a/obj/NiPSysEmitterCtlr.cpp
+++ b/obj/NiPSysEmitterCtlr.cpp
@@ -12,7 +12,7 @@ NiPSysEmitterCtlr::NiPSysEmitterCtlr() NI_P_SYS_EMITTER_CTLR_CONSTRUCT {}
 
 NiPSysEmitterCtlr::~NiPSysEmitterCtlr() {}
 
-void NiPSysEmitterCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_READ
 }
 
@@ -24,7 +24,7 @@ string NiPSysEmitterCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_CTLR_STRING
 }
 
-void NiPSysEmitterCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterCtlr.h b/obj/NiPSysEmitterCtlr.h
index 98b3b68e8cd4fa3e91dbe13de52fd4711136e89e..dbfc1c638ae6755d1186f2da4991cbda6fc70523 100644
--- a/obj/NiPSysEmitterCtlr.h
+++ b/obj/NiPSysEmitterCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterCtlrData.cpp b/obj/NiPSysEmitterCtlrData.cpp
index d55b2c8e5084eccb8c52ac2c293af5d4dd30388a..f3def5b2baa9b0d97504058197ce6d54a123fed0 100644
--- a/obj/NiPSysEmitterCtlrData.cpp
+++ b/obj/NiPSysEmitterCtlrData.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterCtlrData::NiPSysEmitterCtlrData() NI_P_SYS_EMITTER_CTLR_DATA_CONSTR
 
 NiPSysEmitterCtlrData::~NiPSysEmitterCtlrData() {}
 
-void NiPSysEmitterCtlrData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlrData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterCtlrData::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_CTLR_DATA_STRING
 }
 
-void NiPSysEmitterCtlrData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlrData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterCtlrData.h b/obj/NiPSysEmitterCtlrData.h
index 993db1b49cfaa9677f574cb8c164845663394c82..fb8448f5756d6db560b657a973bb9db66a605bb4 100644
--- a/obj/NiPSysEmitterCtlrData.h
+++ b/obj/NiPSysEmitterCtlrData.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterCtlrData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_CTLR_DATA_MEMBERS
 };
diff --git a/obj/NiPSysEmitterDeclinationCtlr.cpp b/obj/NiPSysEmitterDeclinationCtlr.cpp
index 78256e08969c3e22c139e9fa13fcf4172376f9f5..b28117fc13a2c69829dfe139f08ab72b7acaf246 100644
--- a/obj/NiPSysEmitterDeclinationCtlr.cpp
+++ b/obj/NiPSysEmitterDeclinationCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterDeclinationCtlr::NiPSysEmitterDeclinationCtlr() NI_P_SYS_EMITTER_DE
 
 NiPSysEmitterDeclinationCtlr::~NiPSysEmitterDeclinationCtlr() {}
 
-void NiPSysEmitterDeclinationCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterDeclinationCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_STRING
 }
 
-void NiPSysEmitterDeclinationCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterDeclinationCtlr.h b/obj/NiPSysEmitterDeclinationCtlr.h
index e9db06bceb50a52af1e916f67b94dba9bf3a9924..9ff3bb2997ca026b3fae9e0693f66d3f292de1a8 100644
--- a/obj/NiPSysEmitterDeclinationCtlr.h
+++ b/obj/NiPSysEmitterDeclinationCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterDeclinationCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterDeclinationVarCtlr.cpp b/obj/NiPSysEmitterDeclinationVarCtlr.cpp
index f760d39347ad6ee74024bb2afe6a7f9d737450db..b20c03acf19d350efe9f151801230dbda3fd408d 100644
--- a/obj/NiPSysEmitterDeclinationVarCtlr.cpp
+++ b/obj/NiPSysEmitterDeclinationVarCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterDeclinationVarCtlr::NiPSysEmitterDeclinationVarCtlr() NI_P_SYS_EMIT
 
 NiPSysEmitterDeclinationVarCtlr::~NiPSysEmitterDeclinationVarCtlr() {}
 
-void NiPSysEmitterDeclinationVarCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationVarCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterDeclinationVarCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_STRING
 }
 
-void NiPSysEmitterDeclinationVarCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationVarCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterDeclinationVarCtlr.h b/obj/NiPSysEmitterDeclinationVarCtlr.h
index 96f21f60b5bd9a0b391686bded3d9298a0d09ddb..c0e7c15cfd468653f9cd669044c7bc73e86010dc 100644
--- a/obj/NiPSysEmitterDeclinationVarCtlr.h
+++ b/obj/NiPSysEmitterDeclinationVarCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterDeclinationVarCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterInitialRadiusCtlr.cpp b/obj/NiPSysEmitterInitialRadiusCtlr.cpp
index 4169b51927eaffd4d9e5f880ae944bf9c7a6bf9f..852770091fe6a570e50fe0f309e67155d2de4f99 100644
--- a/obj/NiPSysEmitterInitialRadiusCtlr.cpp
+++ b/obj/NiPSysEmitterInitialRadiusCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterInitialRadiusCtlr::NiPSysEmitterInitialRadiusCtlr() NI_P_SYS_EMITTE
 
 NiPSysEmitterInitialRadiusCtlr::~NiPSysEmitterInitialRadiusCtlr() {}
 
-void NiPSysEmitterInitialRadiusCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterInitialRadiusCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterInitialRadiusCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_STRING
 }
 
-void NiPSysEmitterInitialRadiusCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterInitialRadiusCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterInitialRadiusCtlr.h b/obj/NiPSysEmitterInitialRadiusCtlr.h
index 4582da69e72db294dd78c273595ad1e9958934b4..2ba0839b957d6f24e92fc7e5c113682cca7846ac 100644
--- a/obj/NiPSysEmitterInitialRadiusCtlr.h
+++ b/obj/NiPSysEmitterInitialRadiusCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterInitialRadiusCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterLifeSpanCtlr.cpp b/obj/NiPSysEmitterLifeSpanCtlr.cpp
index d3fa8a20e0c78c122538b891c44fba40cf693002..9403050e9898ea64af4141d802b389855bce4f5d 100644
--- a/obj/NiPSysEmitterLifeSpanCtlr.cpp
+++ b/obj/NiPSysEmitterLifeSpanCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterLifeSpanCtlr::NiPSysEmitterLifeSpanCtlr() NI_P_SYS_EMITTER_LIFE_SPA
 
 NiPSysEmitterLifeSpanCtlr::~NiPSysEmitterLifeSpanCtlr() {}
 
-void NiPSysEmitterLifeSpanCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterLifeSpanCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterLifeSpanCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_STRING
 }
 
-void NiPSysEmitterLifeSpanCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterLifeSpanCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterLifeSpanCtlr.h b/obj/NiPSysEmitterLifeSpanCtlr.h
index b4984c4c3c43cd2937797a6e8adb93444ae13336..7c8a5332139607eb00bd56b3694bfb30d47da4fa 100644
--- a/obj/NiPSysEmitterLifeSpanCtlr.h
+++ b/obj/NiPSysEmitterLifeSpanCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterLifeSpanCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterSpeedCtlr.cpp b/obj/NiPSysEmitterSpeedCtlr.cpp
index 2c2cd8dcb41e1bbe8a4bcb3f208ca7b263ab0910..36ddd3cc91eb2c5e5ed5c86b760a934f7de80089 100644
--- a/obj/NiPSysEmitterSpeedCtlr.cpp
+++ b/obj/NiPSysEmitterSpeedCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterSpeedCtlr::NiPSysEmitterSpeedCtlr() NI_P_SYS_EMITTER_SPEED_CTLR_CON
 
 NiPSysEmitterSpeedCtlr::~NiPSysEmitterSpeedCtlr() {}
 
-void NiPSysEmitterSpeedCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterSpeedCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_SPEED_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterSpeedCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_SPEED_CTLR_STRING
 }
 
-void NiPSysEmitterSpeedCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterSpeedCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_SPEED_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterSpeedCtlr.h b/obj/NiPSysEmitterSpeedCtlr.h
index 0980abd081c43babd13e6ac46338d8f574be7f9e..94c8ab04c4a190e24d0f7d994726ad21777ba9f1 100644
--- a/obj/NiPSysEmitterSpeedCtlr.h
+++ b/obj/NiPSysEmitterSpeedCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterSpeedCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_SPEED_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysGravityModifier.cpp b/obj/NiPSysGravityModifier.cpp
index a5b6f82dad3b65677aa0718827e0f4bee9e8ec68..829d49a191d996c88a7cae9b763e3f5a2ef856ba 100644
--- a/obj/NiPSysGravityModifier.cpp
+++ b/obj/NiPSysGravityModifier.cpp
@@ -11,7 +11,7 @@ NiPSysGravityModifier::NiPSysGravityModifier() NI_P_SYS_GRAVITY_MODIFIER_CONSTRU
 
 NiPSysGravityModifier::~NiPSysGravityModifier() {}
 
-void NiPSysGravityModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysGravityModifier::asString( bool verbose ) const {
 	NI_P_SYS_GRAVITY_MODIFIER_STRING
 }
 
-void NiPSysGravityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysGravityModifier.h b/obj/NiPSysGravityModifier.h
index eced5db9e0d60833ae5ba6e7144fa36a64e2dee0..1c21bfd94a01fb82e06054bedaf0bef8f2bb0522 100644
--- a/obj/NiPSysGravityModifier.h
+++ b/obj/NiPSysGravityModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysGravityModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_GRAVITY_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysGravityStrengthCtlr.cpp b/obj/NiPSysGravityStrengthCtlr.cpp
index 202b960ec7b65532391113a6520caf1e9d5ab0a0..35a74c9fec979915456c9ff40dfa5c4ce036c3ec 100644
--- a/obj/NiPSysGravityStrengthCtlr.cpp
+++ b/obj/NiPSysGravityStrengthCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysGravityStrengthCtlr::NiPSysGravityStrengthCtlr() NI_P_SYS_GRAVITY_STRENGTH
 
 NiPSysGravityStrengthCtlr::~NiPSysGravityStrengthCtlr() {}
 
-void NiPSysGravityStrengthCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityStrengthCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysGravityStrengthCtlr::asString( bool verbose ) const {
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_STRING
 }
 
-void NiPSysGravityStrengthCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityStrengthCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysGravityStrengthCtlr.h b/obj/NiPSysGravityStrengthCtlr.h
index b4a33ecdca09eb83ab44b5a3121fb7bcd5d95911..6f12368b937308800da277e047d3f5060970c134 100644
--- a/obj/NiPSysGravityStrengthCtlr.h
+++ b/obj/NiPSysGravityStrengthCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysGravityStrengthCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysGrowFadeModifier.cpp b/obj/NiPSysGrowFadeModifier.cpp
index 591d1a54c1938d00e4f3265daada77a09ae82656..831e875adb57a4ef29ae74d6d0e3d4a2841afe04 100644
--- a/obj/NiPSysGrowFadeModifier.cpp
+++ b/obj/NiPSysGrowFadeModifier.cpp
@@ -10,7 +10,7 @@ NiPSysGrowFadeModifier::NiPSysGrowFadeModifier() NI_P_SYS_GROW_FADE_MODIFIER_CON
 
 NiPSysGrowFadeModifier::~NiPSysGrowFadeModifier() {}
 
-void NiPSysGrowFadeModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysGrowFadeModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GROW_FADE_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysGrowFadeModifier::asString( bool verbose ) const {
 	NI_P_SYS_GROW_FADE_MODIFIER_STRING
 }
 
-void NiPSysGrowFadeModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysGrowFadeModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GROW_FADE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysGrowFadeModifier.h b/obj/NiPSysGrowFadeModifier.h
index 6b56036b6b41153153b6a266f623773cee98110e..76aaa8dca8d875e1fba93d671c93b34696dc5c83 100644
--- a/obj/NiPSysGrowFadeModifier.h
+++ b/obj/NiPSysGrowFadeModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysGrowFadeModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_GROW_FADE_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysMeshEmitter.cpp b/obj/NiPSysMeshEmitter.cpp
index f453fde4a6e2b6aaa65df421afdeaed4220abf56..d1fa7d712d3f061a032691ad6bab1fd29c525ecc 100644
--- a/obj/NiPSysMeshEmitter.cpp
+++ b/obj/NiPSysMeshEmitter.cpp
@@ -11,7 +11,7 @@ NiPSysMeshEmitter::NiPSysMeshEmitter() NI_P_SYS_MESH_EMITTER_CONSTRUCT {}
 
 NiPSysMeshEmitter::~NiPSysMeshEmitter() {}
 
-void NiPSysMeshEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_EMITTER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysMeshEmitter::asString( bool verbose ) const {
 	NI_P_SYS_MESH_EMITTER_STRING
 }
 
-void NiPSysMeshEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysMeshEmitter.h b/obj/NiPSysMeshEmitter.h
index fd5470e8234c0c551033918adf3f029f63cf217a..c0a6afab477d586d5126874387458c5b77b41b52 100644
--- a/obj/NiPSysMeshEmitter.h
+++ b/obj/NiPSysMeshEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysMeshEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_MESH_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysMeshUpdateModifier.cpp b/obj/NiPSysMeshUpdateModifier.cpp
index 623c0a29bf4b5fb5688b4210cfdbb456b6033e1d..80796190235d5a99e5ff5cd667a4db9bfb11aae8 100644
--- a/obj/NiPSysMeshUpdateModifier.cpp
+++ b/obj/NiPSysMeshUpdateModifier.cpp
@@ -11,7 +11,7 @@ NiPSysMeshUpdateModifier::NiPSysMeshUpdateModifier() NI_P_SYS_MESH_UPDATE_MODIFI
 
 NiPSysMeshUpdateModifier::~NiPSysMeshUpdateModifier() {}
 
-void NiPSysMeshUpdateModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshUpdateModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_UPDATE_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysMeshUpdateModifier::asString( bool verbose ) const {
 	NI_P_SYS_MESH_UPDATE_MODIFIER_STRING
 }
 
-void NiPSysMeshUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_UPDATE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysMeshUpdateModifier.h b/obj/NiPSysMeshUpdateModifier.h
index 1de1657cc5ef2a6aed65eecbe15812caf97867fd..1ba78588e6152b3d80ebf61dc90b4f7852d14643 100644
--- a/obj/NiPSysMeshUpdateModifier.h
+++ b/obj/NiPSysMeshUpdateModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysMeshUpdateModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_MESH_UPDATE_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysModifierActiveCtlr.cpp b/obj/NiPSysModifierActiveCtlr.cpp
index 45db203439342c238ac72be5cdc7bfc050a87386..7b170e9fb2704e1914f2bafc34fc65ed753dea6a 100644
--- a/obj/NiPSysModifierActiveCtlr.cpp
+++ b/obj/NiPSysModifierActiveCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysModifierActiveCtlr::NiPSysModifierActiveCtlr() NI_P_SYS_MODIFIER_ACTIVE_CT
 
 NiPSysModifierActiveCtlr::~NiPSysModifierActiveCtlr() {}
 
-void NiPSysModifierActiveCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysModifierActiveCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysModifierActiveCtlr::asString( bool verbose ) const {
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_STRING
 }
 
-void NiPSysModifierActiveCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysModifierActiveCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysModifierActiveCtlr.h b/obj/NiPSysModifierActiveCtlr.h
index 6cf3eaf9cd52c9e481681f1b9a0aa0afbf405264..599a4c2ae961da319c06f11a10542f4fa715cc01 100644
--- a/obj/NiPSysModifierActiveCtlr.h
+++ b/obj/NiPSysModifierActiveCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysModifierActiveCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysPlanarCollider.cpp b/obj/NiPSysPlanarCollider.cpp
index c32257cefd83fb0cc681749422030cc98f1f73c3..114b35fede94cb51563c62e630a7474de077fc1e 100644
--- a/obj/NiPSysPlanarCollider.cpp
+++ b/obj/NiPSysPlanarCollider.cpp
@@ -12,7 +12,7 @@ NiPSysPlanarCollider::NiPSysPlanarCollider() NI_P_SYS_PLANAR_COLLIDER_CONSTRUCT
 
 NiPSysPlanarCollider::~NiPSysPlanarCollider() {}
 
-void NiPSysPlanarCollider::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysPlanarCollider::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_PLANAR_COLLIDER_READ
 }
 
@@ -24,7 +24,7 @@ string NiPSysPlanarCollider::asString( bool verbose ) const {
 	NI_P_SYS_PLANAR_COLLIDER_STRING
 }
 
-void NiPSysPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_PLANAR_COLLIDER_FIXLINKS
 }
 
diff --git a/obj/NiPSysPlanarCollider.h b/obj/NiPSysPlanarCollider.h
index edfd19834e2051a22922bdfabc893195d367dee8..254e7090f404db060270009eaa428ab8f46d7e30 100644
--- a/obj/NiPSysPlanarCollider.h
+++ b/obj/NiPSysPlanarCollider.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysPlanarCollider();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_PLANAR_COLLIDER_MEMBERS
 };
diff --git a/obj/NiPSysPositionModifier.cpp b/obj/NiPSysPositionModifier.cpp
index fec2e99ca74f324c11449990119177e50842811a..e240e051505ae7afcfd71cb8587367e0bb79bf2b 100644
--- a/obj/NiPSysPositionModifier.cpp
+++ b/obj/NiPSysPositionModifier.cpp
@@ -10,7 +10,7 @@ NiPSysPositionModifier::NiPSysPositionModifier() NI_P_SYS_POSITION_MODIFIER_CONS
 
 NiPSysPositionModifier::~NiPSysPositionModifier() {}
 
-void NiPSysPositionModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysPositionModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_POSITION_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysPositionModifier::asString( bool verbose ) const {
 	NI_P_SYS_POSITION_MODIFIER_STRING
 }
 
-void NiPSysPositionModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysPositionModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_POSITION_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysPositionModifier.h b/obj/NiPSysPositionModifier.h
index 6679dc9ba6b46cb1bcdceaaff7cb7d3c84ab8e8a..8c9562bfb95260c646417fb9d924fd8dc1e49b1e 100644
--- a/obj/NiPSysPositionModifier.h
+++ b/obj/NiPSysPositionModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysPositionModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_POSITION_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysResetOnLoopCtlr.cpp b/obj/NiPSysResetOnLoopCtlr.cpp
index 5a82b9320a9bfd93447c770e9b8ac331ead2e7a0..816b4ecb5351b57eef056655161ad5596c69fe12 100644
--- a/obj/NiPSysResetOnLoopCtlr.cpp
+++ b/obj/NiPSysResetOnLoopCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysResetOnLoopCtlr::NiPSysResetOnLoopCtlr() NI_P_SYS_RESET_ON_LOOP_CTLR_CONST
 
 NiPSysResetOnLoopCtlr::~NiPSysResetOnLoopCtlr() {}
 
-void NiPSysResetOnLoopCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysResetOnLoopCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_RESET_ON_LOOP_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysResetOnLoopCtlr::asString( bool verbose ) const {
 	NI_P_SYS_RESET_ON_LOOP_CTLR_STRING
 }
 
-void NiPSysResetOnLoopCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysResetOnLoopCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_RESET_ON_LOOP_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysResetOnLoopCtlr.h b/obj/NiPSysResetOnLoopCtlr.h
index d1d426a8dfe4eb67f8623a4367993a807d09f760..6381974f554198eb7e80e0c2a110b008b1e80050 100644
--- a/obj/NiPSysResetOnLoopCtlr.h
+++ b/obj/NiPSysResetOnLoopCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysResetOnLoopCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_RESET_ON_LOOP_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysRotationModifier.cpp b/obj/NiPSysRotationModifier.cpp
index 68111eef02662b630c55fce008a5af3ab8e545ff..79ea4473427480a07dcf24de97810b2f0e2d7f62 100644
--- a/obj/NiPSysRotationModifier.cpp
+++ b/obj/NiPSysRotationModifier.cpp
@@ -10,7 +10,7 @@ NiPSysRotationModifier::NiPSysRotationModifier() NI_P_SYS_ROTATION_MODIFIER_CONS
 
 NiPSysRotationModifier::~NiPSysRotationModifier() {}
 
-void NiPSysRotationModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysRotationModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_ROTATION_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysRotationModifier::asString( bool verbose ) const {
 	NI_P_SYS_ROTATION_MODIFIER_STRING
 }
 
-void NiPSysRotationModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysRotationModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_ROTATION_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysRotationModifier.h b/obj/NiPSysRotationModifier.h
index d2fb4d03bd41e4e0d036494a0cb803bbbd982f5a..f75816b63f854f3f6514a2576981859fee0f8950 100644
--- a/obj/NiPSysRotationModifier.h
+++ b/obj/NiPSysRotationModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysRotationModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_ROTATION_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysSpawnModifier.cpp b/obj/NiPSysSpawnModifier.cpp
index 2058fe14a438f4e0388307c686346e9f85a38041..b8771d51a5abc3f090112a77ec4878ed7342cddd 100644
--- a/obj/NiPSysSpawnModifier.cpp
+++ b/obj/NiPSysSpawnModifier.cpp
@@ -10,7 +10,7 @@ NiPSysSpawnModifier::NiPSysSpawnModifier() NI_P_SYS_SPAWN_MODIFIER_CONSTRUCT {}
 
 NiPSysSpawnModifier::~NiPSysSpawnModifier() {}
 
-void NiPSysSpawnModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysSpawnModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPAWN_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysSpawnModifier::asString( bool verbose ) const {
 	NI_P_SYS_SPAWN_MODIFIER_STRING
 }
 
-void NiPSysSpawnModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysSpawnModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPAWN_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysSpawnModifier.h b/obj/NiPSysSpawnModifier.h
index 95e051647d52779c8132eaf9417b707ce0a94f58..86b3ddc313e6a048064de8cb3b535754e56d05b0 100644
--- a/obj/NiPSysSpawnModifier.h
+++ b/obj/NiPSysSpawnModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysSpawnModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_SPAWN_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysSphereEmitter.cpp b/obj/NiPSysSphereEmitter.cpp
index 38d58bd8b736a163c046e604e4c931624ea316ae..8a1232a0df9fbb3166bb904542dca428632f0ab0 100644
--- a/obj/NiPSysSphereEmitter.cpp
+++ b/obj/NiPSysSphereEmitter.cpp
@@ -10,7 +10,7 @@ NiPSysSphereEmitter::NiPSysSphereEmitter() NI_P_SYS_SPHERE_EMITTER_CONSTRUCT {}
 
 NiPSysSphereEmitter::~NiPSysSphereEmitter() {}
 
-void NiPSysSphereEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysSphereEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPHERE_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysSphereEmitter::asString( bool verbose ) const {
 	NI_P_SYS_SPHERE_EMITTER_STRING
 }
 
-void NiPSysSphereEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysSphereEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPHERE_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysSphereEmitter.h b/obj/NiPSysSphereEmitter.h
index fddc5c5aa251f10e83d4d6b2ad222c006e12ed6a..a76933425eecae4154bb54c8ab3973b02438d25c 100644
--- a/obj/NiPSysSphereEmitter.h
+++ b/obj/NiPSysSphereEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysSphereEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_SPHERE_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysUpdateCtlr.cpp b/obj/NiPSysUpdateCtlr.cpp
index 9a1b4b633fe253d8dcdc6f2a1638b0b23022a56a..d018b6892f8dab8db4a7db625b79f90fe24b5768 100644
--- a/obj/NiPSysUpdateCtlr.cpp
+++ b/obj/NiPSysUpdateCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysUpdateCtlr::NiPSysUpdateCtlr() NI_P_SYS_UPDATE_CTLR_CONSTRUCT {}
 
 NiPSysUpdateCtlr::~NiPSysUpdateCtlr() {}
 
-void NiPSysUpdateCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysUpdateCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_UPDATE_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysUpdateCtlr::asString( bool verbose ) const {
 	NI_P_SYS_UPDATE_CTLR_STRING
 }
 
-void NiPSysUpdateCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysUpdateCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_UPDATE_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysUpdateCtlr.h b/obj/NiPSysUpdateCtlr.h
index f41bfff120a1c5b86ed7cdb3f4299378908961b8..949c3f6aca1047689516420204281cde55adc97f 100644
--- a/obj/NiPSysUpdateCtlr.h
+++ b/obj/NiPSysUpdateCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysUpdateCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_UPDATE_CTLR_MEMBERS
 };
diff --git a/obj/NiPalette.cpp b/obj/NiPalette.cpp
index e486e4bf5c676c8e1ae88bb2b9f428cd1d0c2a40..f6a4642f0b7be0fa2e8758056b5710468e315235 100644
--- a/obj/NiPalette.cpp
+++ b/obj/NiPalette.cpp
@@ -10,7 +10,7 @@ NiPalette::NiPalette() NI_PALETTE_CONSTRUCT {}
 
 NiPalette::~NiPalette() {}
 
-void NiPalette::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPalette::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PALETTE_READ
 }
 
@@ -22,7 +22,7 @@ string NiPalette::asString( bool verbose ) const {
 	NI_PALETTE_STRING
 }
 
-void NiPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PALETTE_FIXLINKS
 }
 
diff --git a/obj/NiPalette.h b/obj/NiPalette.h
index 0862fb48bec9a9b9949f99d323003fbf97aaf4cc..83c3db92dcb878c5f533c90f65f7f0af821fcf84 100644
--- a/obj/NiPalette.h
+++ b/obj/NiPalette.h
@@ -20,10 +20,11 @@ public:
 	~NiPalette();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PALETTE_MEMBERS
 };
diff --git a/obj/NiParticleBomb.cpp b/obj/NiParticleBomb.cpp
index 0a9a26d3d1623c4cc9306ca5d041635f62444a83..64cc38b305382750531ce4b3ad76224020ff095a 100644
--- a/obj/NiParticleBomb.cpp
+++ b/obj/NiParticleBomb.cpp
@@ -10,7 +10,7 @@ NiParticleBomb::NiParticleBomb() NI_PARTICLE_BOMB_CONSTRUCT {}
 
 NiParticleBomb::~NiParticleBomb() {}
 
-void NiParticleBomb::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleBomb::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_BOMB_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleBomb::asString( bool verbose ) const {
 	NI_PARTICLE_BOMB_STRING
 }
 
-void NiParticleBomb::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleBomb::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_BOMB_FIXLINKS
 }
 
diff --git a/obj/NiParticleBomb.h b/obj/NiParticleBomb.h
index f3a744c615a92f562dc9baa079909bd17595101b..45302ae28bc26d894b43d128e3ab9ac2f2d0f9f6 100644
--- a/obj/NiParticleBomb.h
+++ b/obj/NiParticleBomb.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleBomb();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_BOMB_MEMBERS
 };
diff --git a/obj/NiParticleColorModifier.cpp b/obj/NiParticleColorModifier.cpp
index 0f46eacf05a8960255fd033a0e2307ecbd17eefa..1d9f8be68da0c80f8688d5c46ff7e69937302be2 100644
--- a/obj/NiParticleColorModifier.cpp
+++ b/obj/NiParticleColorModifier.cpp
@@ -11,7 +11,7 @@ NiParticleColorModifier::NiParticleColorModifier() NI_PARTICLE_COLOR_MODIFIER_CO
 
 NiParticleColorModifier::~NiParticleColorModifier() {}
 
-void NiParticleColorModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleColorModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_COLOR_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleColorModifier::asString( bool verbose ) const {
 	NI_PARTICLE_COLOR_MODIFIER_STRING
 }
 
-void NiParticleColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_COLOR_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiParticleColorModifier.h b/obj/NiParticleColorModifier.h
index 5c4fea489518db1aa9fb218248e637a95fa91cc1..8ff4d525ed19db94c0f3fc4e5e4c3317f6ae546a 100644
--- a/obj/NiParticleColorModifier.h
+++ b/obj/NiParticleColorModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleColorModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_COLOR_MODIFIER_MEMBERS
 };
diff --git a/obj/NiParticleGrowFade.cpp b/obj/NiParticleGrowFade.cpp
index 11eb0de9370fe587686fa8cdf4cdc146aa6692ef..407ccb6c95dde93eca3997cc5bb98851f256c152 100644
--- a/obj/NiParticleGrowFade.cpp
+++ b/obj/NiParticleGrowFade.cpp
@@ -10,7 +10,7 @@ NiParticleGrowFade::NiParticleGrowFade() NI_PARTICLE_GROW_FADE_CONSTRUCT {}
 
 NiParticleGrowFade::~NiParticleGrowFade() {}
 
-void NiParticleGrowFade::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleGrowFade::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_GROW_FADE_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleGrowFade::asString( bool verbose ) const {
 	NI_PARTICLE_GROW_FADE_STRING
 }
 
-void NiParticleGrowFade::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleGrowFade::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_GROW_FADE_FIXLINKS
 }
 
diff --git a/obj/NiParticleGrowFade.h b/obj/NiParticleGrowFade.h
index 061744b8e2318374ae3865581d87dc0942693802..7dd38d8893b5d9f32499671fa670646272e19df2 100644
--- a/obj/NiParticleGrowFade.h
+++ b/obj/NiParticleGrowFade.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleGrowFade();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_GROW_FADE_MEMBERS
 };
diff --git a/obj/NiParticleMeshModifier.cpp b/obj/NiParticleMeshModifier.cpp
index 443032eca81f82e0f176b8ea8402d8ecd2d9f9f7..a74fdc4ffe285742ccf43913f9e38e8fabcb73e5 100644
--- a/obj/NiParticleMeshModifier.cpp
+++ b/obj/NiParticleMeshModifier.cpp
@@ -11,7 +11,7 @@ NiParticleMeshModifier::NiParticleMeshModifier() NI_PARTICLE_MESH_MODIFIER_CONST
 
 NiParticleMeshModifier::~NiParticleMeshModifier() {}
 
-void NiParticleMeshModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESH_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleMeshModifier::asString( bool verbose ) const {
 	NI_PARTICLE_MESH_MODIFIER_STRING
 }
 
-void NiParticleMeshModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESH_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiParticleMeshModifier.h b/obj/NiParticleMeshModifier.h
index 89f59483624f95a06d51cbe52cb20f00a5b47f19..2239fee95a9500074a15aca99e7045e7eeb899dc 100644
--- a/obj/NiParticleMeshModifier.h
+++ b/obj/NiParticleMeshModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleMeshModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_MESH_MODIFIER_MEMBERS
 };
diff --git a/obj/NiParticleMeshes.cpp b/obj/NiParticleMeshes.cpp
index 09dda3db6899a787051f387a5e57a6d59ec402c3..19cae84353dfd6f6383e76a761329f3fde2ecb6e 100644
--- a/obj/NiParticleMeshes.cpp
+++ b/obj/NiParticleMeshes.cpp
@@ -10,7 +10,7 @@ NiParticleMeshes::NiParticleMeshes() NI_PARTICLE_MESHES_CONSTRUCT {}
 
 NiParticleMeshes::~NiParticleMeshes() {}
 
-void NiParticleMeshes::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshes::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleMeshes::asString( bool verbose ) const {
 	NI_PARTICLE_MESHES_STRING
 }
 
-void NiParticleMeshes::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshes::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_FIXLINKS
 }
 
diff --git a/obj/NiParticleMeshes.h b/obj/NiParticleMeshes.h
index ed6a1c8f97b9002ce8bafb5e7654d6a13240cd9f..d9df9735acae638a4ffe7d3372a6cf3137a25375 100644
--- a/obj/NiParticleMeshes.h
+++ b/obj/NiParticleMeshes.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleMeshes();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_MESHES_MEMBERS
 };
diff --git a/obj/NiParticleMeshesData.cpp b/obj/NiParticleMeshesData.cpp
index fb79ba3f22bbcab25fe353fb3010be7f27a98b8c..0ab8c339c790a581cc796f8edc8c4a0bd66868f0 100644
--- a/obj/NiParticleMeshesData.cpp
+++ b/obj/NiParticleMeshesData.cpp
@@ -11,7 +11,7 @@ NiParticleMeshesData::NiParticleMeshesData() NI_PARTICLE_MESHES_DATA_CONSTRUCT {
 
 NiParticleMeshesData::~NiParticleMeshesData() {}
 
-void NiParticleMeshesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleMeshesData::asString( bool verbose ) const {
 	NI_PARTICLE_MESHES_DATA_STRING
 }
 
-void NiParticleMeshesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiParticleMeshesData.h b/obj/NiParticleMeshesData.h
index 1c2ac2b3ed7944feddf638fdb7f5a81c387a5c37..f60abf087129d5f780bdc466df669c2c759b4300 100644
--- a/obj/NiParticleMeshesData.h
+++ b/obj/NiParticleMeshesData.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleMeshesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_MESHES_DATA_MEMBERS
 };
diff --git a/obj/NiParticleRotation.cpp b/obj/NiParticleRotation.cpp
index 33cd5d231477be6bbb6adf52dd2909835cb08252..63152f36e64e7116be6db85de592fe2b054f9ea2 100644
--- a/obj/NiParticleRotation.cpp
+++ b/obj/NiParticleRotation.cpp
@@ -10,7 +10,7 @@ NiParticleRotation::NiParticleRotation() NI_PARTICLE_ROTATION_CONSTRUCT {}
 
 NiParticleRotation::~NiParticleRotation() {}
 
-void NiParticleRotation::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleRotation::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_ROTATION_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleRotation::asString( bool verbose ) const {
 	NI_PARTICLE_ROTATION_STRING
 }
 
-void NiParticleRotation::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleRotation::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_ROTATION_FIXLINKS
 }
 
diff --git a/obj/NiParticleRotation.h b/obj/NiParticleRotation.h
index 2872994e2b6af19eaee9815df6afdabb64f0ddfc..e32c0d54443ecd33cebe075bd30220efc6772f81 100644
--- a/obj/NiParticleRotation.h
+++ b/obj/NiParticleRotation.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleRotation();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_ROTATION_MEMBERS
 };
diff --git a/obj/NiParticleSystem.cpp b/obj/NiParticleSystem.cpp
index cfb40c290026e4fca3626a593c7b7428a25c79e8..c705b516f45622adf6dd732d5473cd2a6e93c187 100644
--- a/obj/NiParticleSystem.cpp
+++ b/obj/NiParticleSystem.cpp
@@ -12,7 +12,7 @@ NiParticleSystem::NiParticleSystem() NI_PARTICLE_SYSTEM_CONSTRUCT {}
 
 NiParticleSystem::~NiParticleSystem() {}
 
-void NiParticleSystem::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystem::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_READ
 }
 
@@ -24,7 +24,7 @@ string NiParticleSystem::asString( bool verbose ) const {
 	NI_PARTICLE_SYSTEM_STRING
 }
 
-void NiParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_FIXLINKS
 }
 
diff --git a/obj/NiParticleSystem.h b/obj/NiParticleSystem.h
index c765cf73c1ee14b07f5106c48759dd3239f90844..7bac9d78f5bf20dba52edf2d2cf7aa1cf48df434 100644
--- a/obj/NiParticleSystem.h
+++ b/obj/NiParticleSystem.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleSystem();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_SYSTEM_MEMBERS
 };
diff --git a/obj/NiParticleSystemController.cpp b/obj/NiParticleSystemController.cpp
index a14e7b58d4a0402be1e6f2c52e9921fb7bae4010..ad6affc2af3c262f6a0aae836087a5fa294045d1 100644
--- a/obj/NiParticleSystemController.cpp
+++ b/obj/NiParticleSystemController.cpp
@@ -11,7 +11,7 @@ NiParticleSystemController::NiParticleSystemController() NI_PARTICLE_SYSTEM_CONT
 
 NiParticleSystemController::~NiParticleSystemController() {}
 
-void NiParticleSystemController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystemController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleSystemController::asString( bool verbose ) const {
 	NI_PARTICLE_SYSTEM_CONTROLLER_STRING
 }
 
-void NiParticleSystemController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystemController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiParticleSystemController.h b/obj/NiParticleSystemController.h
index 47284e31c56cd4c74e789af8dbbcfeb940fabdfe..4027f2700d8895791d2645e1f346ac402c9bc4a3 100644
--- a/obj/NiParticleSystemController.h
+++ b/obj/NiParticleSystemController.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleSystemController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_SYSTEM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiParticles.cpp b/obj/NiParticles.cpp
index b1305e1c4e503652fbb34985619cfd9a3e753233..205ceab5dc6011311a1f038ae6ee04c80b65c9ad 100644
--- a/obj/NiParticles.cpp
+++ b/obj/NiParticles.cpp
@@ -10,7 +10,7 @@ NiParticles::NiParticles() NI_PARTICLES_CONSTRUCT {}
 
 NiParticles::~NiParticles() {}
 
-void NiParticles::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticles::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticles::asString( bool verbose ) const {
 	NI_PARTICLES_STRING
 }
 
-void NiParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_FIXLINKS
 }
 
diff --git a/obj/NiParticles.h b/obj/NiParticles.h
index 578afcb98388537f2d467f2304704904016de4a7..0cc486b5968021cc09c75652a759be040b0afe57 100644
--- a/obj/NiParticles.h
+++ b/obj/NiParticles.h
@@ -20,10 +20,11 @@ public:
 	~NiParticles();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLES_MEMBERS
 };
diff --git a/obj/NiParticlesData.cpp b/obj/NiParticlesData.cpp
index 726eda94e3c7c6326318e6276434aaa5e4bb2f43..e04b1cde185b4761b187d6a7ad4e844662e412ba 100644
--- a/obj/NiParticlesData.cpp
+++ b/obj/NiParticlesData.cpp
@@ -10,7 +10,7 @@ NiParticlesData::NiParticlesData() NI_PARTICLES_DATA_CONSTRUCT {}
 
 NiParticlesData::~NiParticlesData() {}
 
-void NiParticlesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticlesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticlesData::asString( bool verbose ) const {
 	NI_PARTICLES_DATA_STRING
 }
 
-void NiParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiParticlesData.h b/obj/NiParticlesData.h
index 2ac42bdb2591ec3630669a9b929f37ed64ff3f97..04683b1865d90bdf902056692a69953d50d1aec5 100644
--- a/obj/NiParticlesData.h
+++ b/obj/NiParticlesData.h
@@ -20,10 +20,11 @@ public:
 	~NiParticlesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLES_DATA_MEMBERS
 };
diff --git a/obj/NiPathController.cpp b/obj/NiPathController.cpp
index f188600aabee80de243f941e82b4f2b7b4b7c656..610169c359d20446bfa6983a09122585a75de534 100644
--- a/obj/NiPathController.cpp
+++ b/obj/NiPathController.cpp
@@ -12,7 +12,7 @@ NiPathController::NiPathController() NI_PATH_CONTROLLER_CONSTRUCT {}
 
 NiPathController::~NiPathController() {}
 
-void NiPathController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPathController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiPathController::asString( bool verbose ) const {
 	NI_PATH_CONTROLLER_STRING
 }
 
-void NiPathController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPathController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiPathController.h b/obj/NiPathController.h
index 7dff56c111ae862eeb42451ca4eb7ef0755994cb..bf26ab6232b8087cf4c669f070b0214ea148af44 100644
--- a/obj/NiPathController.h
+++ b/obj/NiPathController.h
@@ -20,10 +20,11 @@ public:
 	~NiPathController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PATH_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiPathInterpolator.cpp b/obj/NiPathInterpolator.cpp
index 2b22dcacd0ac7e1efbb73051d770a4dfd31a6207..6a4e66da76d304a8241353060e657ad04c73c15e 100644
--- a/obj/NiPathInterpolator.cpp
+++ b/obj/NiPathInterpolator.cpp
@@ -12,7 +12,7 @@ NiPathInterpolator::NiPathInterpolator() NI_PATH_INTERPOLATOR_CONSTRUCT {}
 
 NiPathInterpolator::~NiPathInterpolator() {}
 
-void NiPathInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPathInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_INTERPOLATOR_READ
 }
 
@@ -24,7 +24,7 @@ string NiPathInterpolator::asString( bool verbose ) const {
 	NI_PATH_INTERPOLATOR_STRING
 }
 
-void NiPathInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPathInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiPathInterpolator.h b/obj/NiPathInterpolator.h
index 96dff644319b14ecf534862fcde35b21d6fb770f..7bc7db1417733d72fa26d1230d03d4375f5a017d 100644
--- a/obj/NiPathInterpolator.h
+++ b/obj/NiPathInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiPathInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PATH_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiPixelData.cpp b/obj/NiPixelData.cpp
index 90175021a7b9159aef709385d5e77b5d85b0feb3..40d776d812916386053eb7e556d2f1a7889a2f24 100644
--- a/obj/NiPixelData.cpp
+++ b/obj/NiPixelData.cpp
@@ -11,7 +11,7 @@ NiPixelData::NiPixelData() NI_PIXEL_DATA_CONSTRUCT {}
 
 NiPixelData::~NiPixelData() {}
 
-void NiPixelData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPixelData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PIXEL_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiPixelData::asString( bool verbose ) const {
 	NI_PIXEL_DATA_STRING
 }
 
-void NiPixelData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPixelData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PIXEL_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPixelData.h b/obj/NiPixelData.h
index 575bd74eb2d0fece022714c0bcf1410097be549d..ded9779c8cfb667df2d2c85bc51b97f2a2b53c1b 100644
--- a/obj/NiPixelData.h
+++ b/obj/NiPixelData.h
@@ -20,10 +20,11 @@ public:
 	~NiPixelData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PIXEL_DATA_MEMBERS
 };
diff --git a/obj/NiPlanarCollider.cpp b/obj/NiPlanarCollider.cpp
index 87d2b554b20146c54332751504110e21536ea878..84ba909676c61424de4e7fc84786107acd2b5073 100644
--- a/obj/NiPlanarCollider.cpp
+++ b/obj/NiPlanarCollider.cpp
@@ -10,7 +10,7 @@ NiPlanarCollider::NiPlanarCollider() NI_PLANAR_COLLIDER_CONSTRUCT {}
 
 NiPlanarCollider::~NiPlanarCollider() {}
 
-void NiPlanarCollider::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPlanarCollider::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PLANAR_COLLIDER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPlanarCollider::asString( bool verbose ) const {
 	NI_PLANAR_COLLIDER_STRING
 }
 
-void NiPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PLANAR_COLLIDER_FIXLINKS
 }
 
diff --git a/obj/NiPlanarCollider.h b/obj/NiPlanarCollider.h
index 5582973b61e46b2ce8f5c4654196b358b8e8fd54..a2ec91e7d70d235888bc210be10c6afda8b60027 100644
--- a/obj/NiPlanarCollider.h
+++ b/obj/NiPlanarCollider.h
@@ -20,10 +20,11 @@ public:
 	~NiPlanarCollider();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PLANAR_COLLIDER_MEMBERS
 };
diff --git a/obj/NiPoint3Interpolator.cpp b/obj/NiPoint3Interpolator.cpp
index 9f1dc1b74f4d63220231e61a318515aa15e1a8b3..29e1d8b35dce577822bbe672bcf2af7d0ec67b56 100644
--- a/obj/NiPoint3Interpolator.cpp
+++ b/obj/NiPoint3Interpolator.cpp
@@ -11,7 +11,7 @@ NiPoint3Interpolator::NiPoint3Interpolator() NI_POINT3_INTERPOLATOR_CONSTRUCT {}
 
 NiPoint3Interpolator::~NiPoint3Interpolator() {}
 
-void NiPoint3Interpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPoint3Interpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT3_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiPoint3Interpolator::asString( bool verbose ) const {
 	NI_POINT3_INTERPOLATOR_STRING
 }
 
-void NiPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT3_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiPoint3Interpolator.h b/obj/NiPoint3Interpolator.h
index b90d3fb5ee9491a0a5c929d566f4e1c961ff3c87..4428935d870bdc75cb9215dc8529290c51862d24 100644
--- a/obj/NiPoint3Interpolator.h
+++ b/obj/NiPoint3Interpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiPoint3Interpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_POINT3_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiPointLight.cpp b/obj/NiPointLight.cpp
index 4973c70226948930cf875ed4dc147600bf389d5a..8b7b5f74f464c375c3f58e90547f221cf4ec1b7d 100644
--- a/obj/NiPointLight.cpp
+++ b/obj/NiPointLight.cpp
@@ -10,7 +10,7 @@ NiPointLight::NiPointLight() NI_POINT_LIGHT_CONSTRUCT {}
 
 NiPointLight::~NiPointLight() {}
 
-void NiPointLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPointLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiPointLight::asString( bool verbose ) const {
 	NI_POINT_LIGHT_STRING
 }
 
-void NiPointLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPointLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiPointLight.h b/obj/NiPointLight.h
index dbd9a40bd7d5771cb3323dde06d801a85a3c3003..d09878292a2a51f2826a1f58af14f827a7606187 100644
--- a/obj/NiPointLight.h
+++ b/obj/NiPointLight.h
@@ -20,10 +20,11 @@ public:
 	~NiPointLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_POINT_LIGHT_MEMBERS
 };
diff --git a/obj/NiPosData.cpp b/obj/NiPosData.cpp
index 6f8ddd8917f0898b5dd4f203a45c38cff67c2b9b..1109f8a16c975402660f192fa78c5bf5d68025ea 100644
--- a/obj/NiPosData.cpp
+++ b/obj/NiPosData.cpp
@@ -10,7 +10,7 @@ NiPosData::NiPosData() NI_POS_DATA_CONSTRUCT {}
 
 NiPosData::~NiPosData() {}
 
-void NiPosData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPosData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_POS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiPosData::asString( bool verbose ) const {
 	NI_POS_DATA_STRING
 }
 
-void NiPosData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPosData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_POS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPosData.h b/obj/NiPosData.h
index 5aeb3b9265122282ebf73b1141792f900449c02d..6e5409a358a6b42bc0d1e7d66b5c00b007f48f62 100644
--- a/obj/NiPosData.h
+++ b/obj/NiPosData.h
@@ -20,10 +20,11 @@ public:
 	~NiPosData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_POS_DATA_MEMBERS
 };
diff --git a/obj/NiProperty.cpp b/obj/NiProperty.cpp
index e6c4881b530cd4d29e2ce3bc9dd576578c73c1d7..4660cc5f17a44236f9acd62be46d7b7ced0bae83 100644
--- a/obj/NiProperty.cpp
+++ b/obj/NiProperty.cpp
@@ -10,7 +10,7 @@ NiProperty::NiProperty() NI_PROPERTY_CONSTRUCT {}
 
 NiProperty::~NiProperty() {}
 
-void NiProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiProperty::asString( bool verbose ) const {
 	NI_PROPERTY_STRING
 }
 
-void NiProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiProperty.h b/obj/NiProperty.h
index 0d5b1aa4ba3dc26d0605006a745d08b5d15b8ce8..7437faa602db4f4131627ddc825d2a056c34ff32 100644
--- a/obj/NiProperty.h
+++ b/obj/NiProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PROPERTY_MEMBERS
 };
diff --git a/obj/NiRangeLODData.cpp b/obj/NiRangeLODData.cpp
index 07cd41db4840864831c027180b2d8dcd9b23b0a5..3c49e0611ac953bed3b8237484f1a18f4dab8718 100644
--- a/obj/NiRangeLODData.cpp
+++ b/obj/NiRangeLODData.cpp
@@ -10,7 +10,7 @@ NiRangeLODData::NiRangeLODData() NI_RANGE_L_O_D_DATA_CONSTRUCT {}
 
 NiRangeLODData::~NiRangeLODData() {}
 
-void NiRangeLODData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiRangeLODData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_RANGE_L_O_D_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiRangeLODData::asString( bool verbose ) const {
 	NI_RANGE_L_O_D_DATA_STRING
 }
 
-void NiRangeLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiRangeLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_RANGE_L_O_D_DATA_FIXLINKS
 }
 
diff --git a/obj/NiRangeLODData.h b/obj/NiRangeLODData.h
index ae85cc92bed703732de5be875673983c6454be6a..822a806f44519e691eeb35b85ae224c064b5be03 100644
--- a/obj/NiRangeLODData.h
+++ b/obj/NiRangeLODData.h
@@ -20,10 +20,11 @@ public:
 	~NiRangeLODData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_RANGE_L_O_D_DATA_MEMBERS
 };
diff --git a/obj/NiRotatingParticles.cpp b/obj/NiRotatingParticles.cpp
index 1cc420657631712c636793c861d38e65eec243d0..e1c382c962b7cef44c58949760a7dc9f39e82cfd 100644
--- a/obj/NiRotatingParticles.cpp
+++ b/obj/NiRotatingParticles.cpp
@@ -10,7 +10,7 @@ NiRotatingParticles::NiRotatingParticles() NI_ROTATING_PARTICLES_CONSTRUCT {}
 
 NiRotatingParticles::~NiRotatingParticles() {}
 
-void NiRotatingParticles::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticles::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_READ
 }
 
@@ -22,7 +22,7 @@ string NiRotatingParticles::asString( bool verbose ) const {
 	NI_ROTATING_PARTICLES_STRING
 }
 
-void NiRotatingParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_FIXLINKS
 }
 
diff --git a/obj/NiRotatingParticles.h b/obj/NiRotatingParticles.h
index 0ae0cb2f45581c14c1c994f4e6f073a92d8546a7..f0eb702fffb41fb07d5d3b78d428a4ebf5d73fad 100644
--- a/obj/NiRotatingParticles.h
+++ b/obj/NiRotatingParticles.h
@@ -20,10 +20,11 @@ public:
 	~NiRotatingParticles();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ROTATING_PARTICLES_MEMBERS
 };
diff --git a/obj/NiRotatingParticlesData.cpp b/obj/NiRotatingParticlesData.cpp
index 1ce86dd4a1ae0e407c2508c56821c1fdf23bf30a..bdd11fc420d57d53c41ae75942f13825fccf0f88 100644
--- a/obj/NiRotatingParticlesData.cpp
+++ b/obj/NiRotatingParticlesData.cpp
@@ -10,7 +10,7 @@ NiRotatingParticlesData::NiRotatingParticlesData() NI_ROTATING_PARTICLES_DATA_CO
 
 NiRotatingParticlesData::~NiRotatingParticlesData() {}
 
-void NiRotatingParticlesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticlesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiRotatingParticlesData::asString( bool verbose ) const {
 	NI_ROTATING_PARTICLES_DATA_STRING
 }
 
-void NiRotatingParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiRotatingParticlesData.h b/obj/NiRotatingParticlesData.h
index 7715d807bfd6208f231782529b03fac61a787b65..dd1ee84dc5665c3022323779ec4b3890523a6d27 100644
--- a/obj/NiRotatingParticlesData.h
+++ b/obj/NiRotatingParticlesData.h
@@ -20,10 +20,11 @@ public:
 	~NiRotatingParticlesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ROTATING_PARTICLES_DATA_MEMBERS
 };
diff --git a/obj/NiScreenLODData.cpp b/obj/NiScreenLODData.cpp
index aa06fff184ed56db28e30b2b86d19622bb3f79d7..ab3ae7c76312548320b2e097739fdeec37d63445 100644
--- a/obj/NiScreenLODData.cpp
+++ b/obj/NiScreenLODData.cpp
@@ -10,7 +10,7 @@ NiScreenLODData::NiScreenLODData() NI_SCREEN_L_O_D_DATA_CONSTRUCT {}
 
 NiScreenLODData::~NiScreenLODData() {}
 
-void NiScreenLODData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiScreenLODData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SCREEN_L_O_D_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiScreenLODData::asString( bool verbose ) const {
 	NI_SCREEN_L_O_D_DATA_STRING
 }
 
-void NiScreenLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiScreenLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SCREEN_L_O_D_DATA_FIXLINKS
 }
 
diff --git a/obj/NiScreenLODData.h b/obj/NiScreenLODData.h
index 8cbcc0e0580ab9b46045689b324838d7c86a00c5..a44524703a9a43cc3d7445d6854a9b16326c3e01 100644
--- a/obj/NiScreenLODData.h
+++ b/obj/NiScreenLODData.h
@@ -20,10 +20,11 @@ public:
 	~NiScreenLODData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SCREEN_L_O_D_DATA_MEMBERS
 };
diff --git a/obj/NiSequenceStreamHelper.cpp b/obj/NiSequenceStreamHelper.cpp
index b502690b20fe0a61f76213e32560e0ce97364422..d8f50b3b5a1f039feea937e48196cf76cc3a5563 100644
--- a/obj/NiSequenceStreamHelper.cpp
+++ b/obj/NiSequenceStreamHelper.cpp
@@ -10,7 +10,7 @@ NiSequenceStreamHelper::NiSequenceStreamHelper() NI_SEQUENCE_STREAM_HELPER_CONST
 
 NiSequenceStreamHelper::~NiSequenceStreamHelper() {}
 
-void NiSequenceStreamHelper::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSequenceStreamHelper::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SEQUENCE_STREAM_HELPER_READ
 }
 
@@ -22,7 +22,7 @@ string NiSequenceStreamHelper::asString( bool verbose ) const {
 	NI_SEQUENCE_STREAM_HELPER_STRING
 }
 
-void NiSequenceStreamHelper::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSequenceStreamHelper::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SEQUENCE_STREAM_HELPER_FIXLINKS
 }
 
diff --git a/obj/NiSequenceStreamHelper.h b/obj/NiSequenceStreamHelper.h
index d423408cc9af5f144028eab7a7abb28e6c05366b..129e59193eb2bd91cb7164f5b4cb730d0b5ca8a8 100644
--- a/obj/NiSequenceStreamHelper.h
+++ b/obj/NiSequenceStreamHelper.h
@@ -20,10 +20,11 @@ public:
 	~NiSequenceStreamHelper();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SEQUENCE_STREAM_HELPER_MEMBERS
 };
diff --git a/obj/NiShadeProperty.cpp b/obj/NiShadeProperty.cpp
index 800c5aeebb2e485172ef2f3beea22eaaaca379cc..d64f6da8ee177dfca381dbec74e2c99e62f71316 100644
--- a/obj/NiShadeProperty.cpp
+++ b/obj/NiShadeProperty.cpp
@@ -10,7 +10,7 @@ NiShadeProperty::NiShadeProperty() NI_SHADE_PROPERTY_CONSTRUCT {}
 
 NiShadeProperty::~NiShadeProperty() {}
 
-void NiShadeProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiShadeProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SHADE_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiShadeProperty::asString( bool verbose ) const {
 	NI_SHADE_PROPERTY_STRING
 }
 
-void NiShadeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiShadeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SHADE_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiShadeProperty.h b/obj/NiShadeProperty.h
index 7f40b286d09ae1518a9753989d727cbaddf1d666..db0314e0629ec41acc7bffe1261d198392636299 100644
--- a/obj/NiShadeProperty.h
+++ b/obj/NiShadeProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiShadeProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SHADE_PROPERTY_MEMBERS
 };
diff --git a/obj/NiSingleInterpolatorController.cpp b/obj/NiSingleInterpolatorController.cpp
index dbac8fd094f07c8f21d102384cf7615623b18a49..a4f33eda3bc60af082c4e9a1ee574cfce69d1701 100644
--- a/obj/NiSingleInterpolatorController.cpp
+++ b/obj/NiSingleInterpolatorController.cpp
@@ -11,7 +11,7 @@ NiSingleInterpolatorController::NiSingleInterpolatorController() NI_SINGLE_INTER
 
 NiSingleInterpolatorController::~NiSingleInterpolatorController() {}
 
-void NiSingleInterpolatorController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSingleInterpolatorController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiSingleInterpolatorController::asString( bool verbose ) const {
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_STRING
 }
 
-void NiSingleInterpolatorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSingleInterpolatorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiSingleInterpolatorController.h b/obj/NiSingleInterpolatorController.h
index dc8f4585a67607eac86ac2e8deb9133d15df5c1d..5c1b7f4707fd4633d3412285faf2b9f61099b78f 100644
--- a/obj/NiSingleInterpolatorController.h
+++ b/obj/NiSingleInterpolatorController.h
@@ -20,10 +20,11 @@ public:
 	~NiSingleInterpolatorController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiSkinData.cpp b/obj/NiSkinData.cpp
index 3c7122e1a3f732b411d3ebcf477507b86d703c6f..9d93e36840b83c87731963cefcca2a81b8029eff 100644
--- a/obj/NiSkinData.cpp
+++ b/obj/NiSkinData.cpp
@@ -11,7 +11,7 @@ NiSkinData::NiSkinData() NI_SKIN_DATA_CONSTRUCT {}
 
 NiSkinData::~NiSkinData() {}
 
-void NiSkinData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSkinData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiSkinData::asString( bool verbose ) const {
 	NI_SKIN_DATA_STRING
 }
 
-void NiSkinData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSkinData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_DATA_FIXLINKS
 }
 
diff --git a/obj/NiSkinData.h b/obj/NiSkinData.h
index 526dca46f044332b81f776676a07bcf856c58d53..236b6ce4f0e7825770c173c77b05235a8fdc5955 100644
--- a/obj/NiSkinData.h
+++ b/obj/NiSkinData.h
@@ -20,10 +20,11 @@ public:
 	~NiSkinData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SKIN_DATA_MEMBERS
 };
diff --git a/obj/NiSkinInstance.cpp b/obj/NiSkinInstance.cpp
index 484df2b57ff771bed99be6228acbb9745efff7b1..69c71145ce990518a7838da91376f0d2f0b72d94 100644
--- a/obj/NiSkinInstance.cpp
+++ b/obj/NiSkinInstance.cpp
@@ -13,7 +13,7 @@ NiSkinInstance::NiSkinInstance() NI_SKIN_INSTANCE_CONSTRUCT {}
 
 NiSkinInstance::~NiSkinInstance() {}
 
-void NiSkinInstance::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSkinInstance::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_INSTANCE_READ
 }
 
@@ -25,7 +25,7 @@ string NiSkinInstance::asString( bool verbose ) const {
 	NI_SKIN_INSTANCE_STRING
 }
 
-void NiSkinInstance::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSkinInstance::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_INSTANCE_FIXLINKS
 }
 
diff --git a/obj/NiSkinInstance.h b/obj/NiSkinInstance.h
index 5c53efe5b2aa3c04948091f81943cd4ea06d5533..d6f991e652042cc3687401bf41ea3edc0d6c5957 100644
--- a/obj/NiSkinInstance.h
+++ b/obj/NiSkinInstance.h
@@ -20,10 +20,11 @@ public:
 	~NiSkinInstance();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	NiNode * SkeletonRoot() const;
 private:
diff --git a/obj/NiSkinPartition.cpp b/obj/NiSkinPartition.cpp
index 1764839e4dd15230b6be05177279319d7afaa612..0b968c8cd97f2ccba1d4c03da8b7ac1f4a6508da 100644
--- a/obj/NiSkinPartition.cpp
+++ b/obj/NiSkinPartition.cpp
@@ -10,7 +10,7 @@ NiSkinPartition::NiSkinPartition() NI_SKIN_PARTITION_CONSTRUCT {}
 
 NiSkinPartition::~NiSkinPartition() {}
 
-void NiSkinPartition::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSkinPartition::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_PARTITION_READ
 }
 
@@ -22,7 +22,7 @@ string NiSkinPartition::asString( bool verbose ) const {
 	NI_SKIN_PARTITION_STRING
 }
 
-void NiSkinPartition::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSkinPartition::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_PARTITION_FIXLINKS
 }
 
diff --git a/obj/NiSkinPartition.h b/obj/NiSkinPartition.h
index f02126f304490bd53b75c9a21db27cbd0376cced..38850604112109e74e4ba387b535f10f3f4d4938 100644
--- a/obj/NiSkinPartition.h
+++ b/obj/NiSkinPartition.h
@@ -20,10 +20,11 @@ public:
 	~NiSkinPartition();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SKIN_PARTITION_MEMBERS
 };
diff --git a/obj/NiSourceTexture.cpp b/obj/NiSourceTexture.cpp
index 7f222486056343f53de1b5a026c2d444b025831c..81151a29e921f17f5c5553a3b86e60ccd3cb7d59 100644
--- a/obj/NiSourceTexture.cpp
+++ b/obj/NiSourceTexture.cpp
@@ -11,7 +11,7 @@ NiSourceTexture::NiSourceTexture() NI_SOURCE_TEXTURE_CONSTRUCT {}
 
 NiSourceTexture::~NiSourceTexture() {}
 
-void NiSourceTexture::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSourceTexture::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SOURCE_TEXTURE_READ
 }
 
@@ -23,7 +23,7 @@ string NiSourceTexture::asString( bool verbose ) const {
 	NI_SOURCE_TEXTURE_STRING
 }
 
-void NiSourceTexture::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSourceTexture::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SOURCE_TEXTURE_FIXLINKS
 }
 
diff --git a/obj/NiSourceTexture.h b/obj/NiSourceTexture.h
index cea97a4612d53a0081bade3b5c1a42201babb448..28670018ad8343a3a881c0148401b652b93fee82 100644
--- a/obj/NiSourceTexture.h
+++ b/obj/NiSourceTexture.h
@@ -20,10 +20,11 @@ public:
 	~NiSourceTexture();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SOURCE_TEXTURE_MEMBERS
 };
diff --git a/obj/NiSpecularProperty.cpp b/obj/NiSpecularProperty.cpp
index d140bafe62a20f6d3136c0a326f9cfcec6498e1b..b18100c7b4fa8e0930781d6378f6a97e9911a065 100644
--- a/obj/NiSpecularProperty.cpp
+++ b/obj/NiSpecularProperty.cpp
@@ -10,7 +10,7 @@ NiSpecularProperty::NiSpecularProperty() NI_SPECULAR_PROPERTY_CONSTRUCT {}
 
 NiSpecularProperty::~NiSpecularProperty() {}
 
-void NiSpecularProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSpecularProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SPECULAR_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiSpecularProperty::asString( bool verbose ) const {
 	NI_SPECULAR_PROPERTY_STRING
 }
 
-void NiSpecularProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSpecularProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SPECULAR_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiSpecularProperty.h b/obj/NiSpecularProperty.h
index 1f8a98a92a0126c7e6a160a2baedb9f9d03f71c5..a47ff8c3dda5bc874a5d35ea3b9aff1c77996a24 100644
--- a/obj/NiSpecularProperty.h
+++ b/obj/NiSpecularProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiSpecularProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SPECULAR_PROPERTY_MEMBERS
 };
diff --git a/obj/NiSphericalCollider.cpp b/obj/NiSphericalCollider.cpp
index 3d57cbde09c3494b658528f878ab6838753bed80..a5c30c96549cd13ef411e0bfe9cab7828dda4eee 100644
--- a/obj/NiSphericalCollider.cpp
+++ b/obj/NiSphericalCollider.cpp
@@ -10,7 +10,7 @@ NiSphericalCollider::NiSphericalCollider() NI_SPHERICAL_COLLIDER_CONSTRUCT {}
 
 NiSphericalCollider::~NiSphericalCollider() {}
 
-void NiSphericalCollider::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSphericalCollider::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SPHERICAL_COLLIDER_READ
 }
 
@@ -22,7 +22,7 @@ string NiSphericalCollider::asString( bool verbose ) const {
 	NI_SPHERICAL_COLLIDER_STRING
 }
 
-void NiSphericalCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSphericalCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SPHERICAL_COLLIDER_FIXLINKS
 }
 
diff --git a/obj/NiSphericalCollider.h b/obj/NiSphericalCollider.h
index 0190766289405228f07b0164ea1ef711a9edf816..64f116ed5e1a2afbcf2da3dfd710cabe9598ad41 100644
--- a/obj/NiSphericalCollider.h
+++ b/obj/NiSphericalCollider.h
@@ -20,10 +20,11 @@ public:
 	~NiSphericalCollider();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SPHERICAL_COLLIDER_MEMBERS
 };
diff --git a/obj/NiSpotLight.cpp b/obj/NiSpotLight.cpp
index 39801cf32a4a89d1a36d3e0ae8b6b96a6e09b1b8..15f439d15a729a15fbf76de92895feea8f2065e4 100644
--- a/obj/NiSpotLight.cpp
+++ b/obj/NiSpotLight.cpp
@@ -10,7 +10,7 @@ NiSpotLight::NiSpotLight() NI_SPOT_LIGHT_CONSTRUCT {}
 
 NiSpotLight::~NiSpotLight() {}
 
-void NiSpotLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSpotLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SPOT_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiSpotLight::asString( bool verbose ) const {
 	NI_SPOT_LIGHT_STRING
 }
 
-void NiSpotLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSpotLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SPOT_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiSpotLight.h b/obj/NiSpotLight.h
index 4bf6a27ab2fb13306b96fb8f1270fc4a05af9719..5f73cc9ed50a19177b831bfbd13b8f36be6c31e3 100644
--- a/obj/NiSpotLight.h
+++ b/obj/NiSpotLight.h
@@ -20,10 +20,11 @@ public:
 	~NiSpotLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SPOT_LIGHT_MEMBERS
 };
diff --git a/obj/NiStencilProperty.cpp b/obj/NiStencilProperty.cpp
index a6012f2b8a9686ebe0b4424bdb4c86f40c143159..93122a1862ca7a77d1ec7506066ffff70e791e57 100644
--- a/obj/NiStencilProperty.cpp
+++ b/obj/NiStencilProperty.cpp
@@ -10,7 +10,7 @@ NiStencilProperty::NiStencilProperty() NI_STENCIL_PROPERTY_CONSTRUCT {}
 
 NiStencilProperty::~NiStencilProperty() {}
 
-void NiStencilProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStencilProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STENCIL_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiStencilProperty::asString( bool verbose ) const {
 	NI_STENCIL_PROPERTY_STRING
 }
 
-void NiStencilProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStencilProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STENCIL_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiStencilProperty.h b/obj/NiStencilProperty.h
index 3bd94465bc4bcf87ae9693cfcbbac882d47723a2..b25291d1cee17e68c12546f0ae58678d74f47ed5 100644
--- a/obj/NiStencilProperty.h
+++ b/obj/NiStencilProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiStencilProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_STENCIL_PROPERTY_MEMBERS
 };
diff --git a/obj/NiStringExtraData.cpp b/obj/NiStringExtraData.cpp
index e6f2559bbf838ff8ce069e1596ec728387c5733a..ad40d005ebf180e9037151cb42bc17b392edefef 100644
--- a/obj/NiStringExtraData.cpp
+++ b/obj/NiStringExtraData.cpp
@@ -10,7 +10,7 @@ NiStringExtraData::NiStringExtraData() NI_STRING_EXTRA_DATA_CONSTRUCT {}
 
 NiStringExtraData::~NiStringExtraData() {}
 
-void NiStringExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStringExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiStringExtraData::asString( bool verbose ) const {
 	NI_STRING_EXTRA_DATA_STRING
 }
 
-void NiStringExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStringExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiStringExtraData.h b/obj/NiStringExtraData.h
index 878b4d41fd6a65abc4ba136678a38fb557b9d90f..123bf359985e4feb069dec41f7e8b9994737d9a5 100644
--- a/obj/NiStringExtraData.h
+++ b/obj/NiStringExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiStringExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	uint BytesRemaining() const;
 
diff --git a/obj/NiStringPalette.cpp b/obj/NiStringPalette.cpp
index ed94deaa6b422ccf2d3601acc8bb38398ef38b71..2cc6d8d5e439439465bc1c15b7fb9577917e7db9 100644
--- a/obj/NiStringPalette.cpp
+++ b/obj/NiStringPalette.cpp
@@ -10,7 +10,7 @@ NiStringPalette::NiStringPalette() NI_STRING_PALETTE_CONSTRUCT {}
 
 NiStringPalette::~NiStringPalette() {}
 
-void NiStringPalette::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStringPalette::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_PALETTE_READ
 }
 
@@ -22,7 +22,7 @@ string NiStringPalette::asString( bool verbose ) const {
 	NI_STRING_PALETTE_STRING
 }
 
-void NiStringPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStringPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_PALETTE_FIXLINKS
 }
 
diff --git a/obj/NiStringPalette.h b/obj/NiStringPalette.h
index 0ecb63cdcbcbc230d81d10a39ac90449fe97741f..db2a1524f10ff69fa6179c603eeaca87405ab1ce 100644
--- a/obj/NiStringPalette.h
+++ b/obj/NiStringPalette.h
@@ -20,10 +20,11 @@ public:
 	~NiStringPalette();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_STRING_PALETTE_MEMBERS
 };
diff --git a/obj/NiStringsExtraData.cpp b/obj/NiStringsExtraData.cpp
index 889759b9a7ef92555254c78673b6ca295d8b494f..e576e797118a8594854fed6358f3df4d670fb996 100644
--- a/obj/NiStringsExtraData.cpp
+++ b/obj/NiStringsExtraData.cpp
@@ -10,7 +10,7 @@ NiStringsExtraData::NiStringsExtraData() NI_STRINGS_EXTRA_DATA_CONSTRUCT {}
 
 NiStringsExtraData::~NiStringsExtraData() {}
 
-void NiStringsExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStringsExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STRINGS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiStringsExtraData::asString( bool verbose ) const {
 	NI_STRINGS_EXTRA_DATA_STRING
 }
 
-void NiStringsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStringsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STRINGS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiStringsExtraData.h b/obj/NiStringsExtraData.h
index 53f6d8adca3ac3bd5946e0378489651861faa61c..32dd987cb16d1f3ea07635414a7a431e4b467602 100644
--- a/obj/NiStringsExtraData.h
+++ b/obj/NiStringsExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiStringsExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_STRINGS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiTextKeyExtraData.cpp b/obj/NiTextKeyExtraData.cpp
index b828f81ff2b38707ecd7753bd450ba0343ec4f46..aaa38c2f7684e91ede848374a30c02c0899c91de 100644
--- a/obj/NiTextKeyExtraData.cpp
+++ b/obj/NiTextKeyExtraData.cpp
@@ -10,7 +10,7 @@ NiTextKeyExtraData::NiTextKeyExtraData() NI_TEXT_KEY_EXTRA_DATA_CONSTRUCT {}
 
 NiTextKeyExtraData::~NiTextKeyExtraData() {}
 
-void NiTextKeyExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTextKeyExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXT_KEY_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTextKeyExtraData::asString( bool verbose ) const {
 	NI_TEXT_KEY_EXTRA_DATA_STRING
 }
 
-void NiTextKeyExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTextKeyExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXT_KEY_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTextKeyExtraData.h b/obj/NiTextKeyExtraData.h
index 6a27dcb789c46eb2e44a22ad06d10ce9e73e86bd..2250a951b15a419ae317ac26576b9e4d2d3532bf 100644
--- a/obj/NiTextKeyExtraData.h
+++ b/obj/NiTextKeyExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiTextKeyExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXT_KEY_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiTextureEffect.cpp b/obj/NiTextureEffect.cpp
index 4563ce783c9411aa98c724abefa4ae89a154946c..5aff510b8d58805dc37455b0b088153544764dfe 100644
--- a/obj/NiTextureEffect.cpp
+++ b/obj/NiTextureEffect.cpp
@@ -11,7 +11,7 @@ NiTextureEffect::NiTextureEffect() NI_TEXTURE_EFFECT_CONSTRUCT {}
 
 NiTextureEffect::~NiTextureEffect() {}
 
-void NiTextureEffect::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTextureEffect::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_EFFECT_READ
 }
 
@@ -23,7 +23,7 @@ string NiTextureEffect::asString( bool verbose ) const {
 	NI_TEXTURE_EFFECT_STRING
 }
 
-void NiTextureEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTextureEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_EFFECT_FIXLINKS
 }
 
diff --git a/obj/NiTextureEffect.h b/obj/NiTextureEffect.h
index 383eb1b6770ebd83dd3b2f9592336cd69e6e2110..322ddc850d6bf2b9334a77ecc0e3eacfce9c89c1 100644
--- a/obj/NiTextureEffect.h
+++ b/obj/NiTextureEffect.h
@@ -20,10 +20,11 @@ public:
 	~NiTextureEffect();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXTURE_EFFECT_MEMBERS
 };
diff --git a/obj/NiTextureTransformController.cpp b/obj/NiTextureTransformController.cpp
index 93f81fa7dafb9d98bec58aadab15b16ae6f4df82..0e5b584d7decc7f239a4223fc3a5073a512f016f 100644
--- a/obj/NiTextureTransformController.cpp
+++ b/obj/NiTextureTransformController.cpp
@@ -11,7 +11,7 @@ NiTextureTransformController::NiTextureTransformController() NI_TEXTURE_TRANSFOR
 
 NiTextureTransformController::~NiTextureTransformController() {}
 
-void NiTextureTransformController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTextureTransformController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_TRANSFORM_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiTextureTransformController::asString( bool verbose ) const {
 	NI_TEXTURE_TRANSFORM_CONTROLLER_STRING
 }
 
-void NiTextureTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTextureTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiTextureTransformController.h b/obj/NiTextureTransformController.h
index c47d4bda2a2c57e72b417febf90d6bc39e1487f4..37b3414cb6a91be30284a42aec29013799bd434f 100644
--- a/obj/NiTextureTransformController.h
+++ b/obj/NiTextureTransformController.h
@@ -20,10 +20,11 @@ public:
 	~NiTextureTransformController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXTURE_TRANSFORM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiTexturingProperty.cpp b/obj/NiTexturingProperty.cpp
index a4f2bf1ece51025c8c98d718d48c6dfad1de2bce..55c316a694ffab5ece1b5ea88174bd780af36297 100644
--- a/obj/NiTexturingProperty.cpp
+++ b/obj/NiTexturingProperty.cpp
@@ -11,7 +11,7 @@ NiTexturingProperty::NiTexturingProperty() NI_TEXTURING_PROPERTY_CONSTRUCT {}
 
 NiTexturingProperty::~NiTexturingProperty() {}
 
-void NiTexturingProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTexturingProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURING_PROPERTY_READ
 }
 
@@ -23,7 +23,7 @@ string NiTexturingProperty::asString( bool verbose ) const {
 	NI_TEXTURING_PROPERTY_STRING
 }
 
-void NiTexturingProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTexturingProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURING_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiTexturingProperty.h b/obj/NiTexturingProperty.h
index 90b1cb4cee71c365d71247c64d72c5f161e154e1..729f6a593a66573d415e57613e4a11f18322aa7d 100644
--- a/obj/NiTexturingProperty.h
+++ b/obj/NiTexturingProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiTexturingProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXTURING_PROPERTY_MEMBERS
 };
diff --git a/obj/NiTimeController.cpp b/obj/NiTimeController.cpp
index 2c64c3aa3a2a75477d0bfeb6823a49bcb7a7eac4..4682e5ac0f1382979bda48d803a46cbde704b4ef 100644
--- a/obj/NiTimeController.cpp
+++ b/obj/NiTimeController.cpp
@@ -10,7 +10,7 @@ NiTimeController::NiTimeController() NI_TIME_CONTROLLER_CONSTRUCT {}
 
 NiTimeController::~NiTimeController() {}
 
-void NiTimeController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTimeController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TIME_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiTimeController::asString( bool verbose ) const {
 	NI_TIME_CONTROLLER_STRING
 }
 
-void NiTimeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTimeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TIME_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiTimeController.h b/obj/NiTimeController.h
index a40a950ff67ba5cc6e81ad75c4be3a45ef1882fc..3deedec3f3979983f45c30c95d136ff13a84cfd0 100644
--- a/obj/NiTimeController.h
+++ b/obj/NiTimeController.h
@@ -20,10 +20,11 @@ public:
 	~NiTimeController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TIME_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiTransformController.cpp b/obj/NiTransformController.cpp
index fb0138184b84eaa19f09fda138917413b488777e..c7db92cbba81c0043ce7547f3c5b2508bef1cbee 100644
--- a/obj/NiTransformController.cpp
+++ b/obj/NiTransformController.cpp
@@ -10,7 +10,7 @@ NiTransformController::NiTransformController() NI_TRANSFORM_CONTROLLER_CONSTRUCT
 
 NiTransformController::~NiTransformController() {}
 
-void NiTransformController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTransformController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiTransformController::asString( bool verbose ) const {
 	NI_TRANSFORM_CONTROLLER_STRING
 }
 
-void NiTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiTransformController.h b/obj/NiTransformController.h
index 62b262f55fa13e3df1360338cefc79a086d0d8c8..5750565f6d131fe47d75b3b1ff952910d60308c8 100644
--- a/obj/NiTransformController.h
+++ b/obj/NiTransformController.h
@@ -20,10 +20,11 @@ public:
 	~NiTransformController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRANSFORM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiTransformData.cpp b/obj/NiTransformData.cpp
index ca37afd08055362207de333a3b74a069597aab67..b757eae08914b420446593f002577dd940805bd9 100644
--- a/obj/NiTransformData.cpp
+++ b/obj/NiTransformData.cpp
@@ -10,7 +10,7 @@ NiTransformData::NiTransformData() NI_TRANSFORM_DATA_CONSTRUCT {}
 
 NiTransformData::~NiTransformData() {}
 
-void NiTransformData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTransformData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTransformData::asString( bool verbose ) const {
 	NI_TRANSFORM_DATA_STRING
 }
 
-void NiTransformData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTransformData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTransformData.h b/obj/NiTransformData.h
index c2e05fc0b6b6c680e9f6b02055ddaa484aa4ca6d..99699723b2dee4c138949adebfc7fdbe8cdecbc7 100644
--- a/obj/NiTransformData.h
+++ b/obj/NiTransformData.h
@@ -20,10 +20,11 @@ public:
 	~NiTransformData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRANSFORM_DATA_MEMBERS
 };
diff --git a/obj/NiTransformInterpolator.cpp b/obj/NiTransformInterpolator.cpp
index cd4f5dfecf31a8e96dc689f6dd5147df77f3ff4e..dcbb54e1707b9eac9dbbafbb26236747ef8b2b0c 100644
--- a/obj/NiTransformInterpolator.cpp
+++ b/obj/NiTransformInterpolator.cpp
@@ -11,7 +11,7 @@ NiTransformInterpolator::NiTransformInterpolator() NI_TRANSFORM_INTERPOLATOR_CON
 
 NiTransformInterpolator::~NiTransformInterpolator() {}
 
-void NiTransformInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTransformInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiTransformInterpolator::asString( bool verbose ) const {
 	NI_TRANSFORM_INTERPOLATOR_STRING
 }
 
-void NiTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiTransformInterpolator.h b/obj/NiTransformInterpolator.h
index ef5120427663e22a36b9c2beb81265ee63d2c215..bc71f0ec2d2d80cecd03e044a10732f7ca49714a 100644
--- a/obj/NiTransformInterpolator.h
+++ b/obj/NiTransformInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiTransformInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRANSFORM_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiTriBasedGeom.cpp b/obj/NiTriBasedGeom.cpp
index f16e65c4a2083ea088b878c7f4e2acdf32615623..9847528c61b3f931adde15aba1cc433caa2a4287 100644
--- a/obj/NiTriBasedGeom.cpp
+++ b/obj/NiTriBasedGeom.cpp
@@ -12,7 +12,7 @@ NiTriBasedGeom::NiTriBasedGeom() NI_TRI_BASED_GEOM_CONSTRUCT {}
 
 NiTriBasedGeom::~NiTriBasedGeom() {}
 
-void NiTriBasedGeom::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriBasedGeom::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_BASED_GEOM_READ
 }
 
@@ -24,7 +24,7 @@ string NiTriBasedGeom::asString( bool verbose ) const {
 	NI_TRI_BASED_GEOM_STRING
 }
 
-void NiTriBasedGeom::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriBasedGeom::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_BASED_GEOM_FIXLINKS
 }
 
diff --git a/obj/NiTriBasedGeom.h b/obj/NiTriBasedGeom.h
index f88fc20e6ba3ae55371021efc2e8976e2cd3b420..ea565b1e022627084175672bb77f9e2ccdd14cfe 100644
--- a/obj/NiTriBasedGeom.h
+++ b/obj/NiTriBasedGeom.h
@@ -20,10 +20,11 @@ public:
 	~NiTriBasedGeom();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	Vector3 Center() const;
 	float Radius() const;
diff --git a/obj/NiTriShape.cpp b/obj/NiTriShape.cpp
index 6f0e62ce1d71fa9d95327d3745cf2587377eba6a..ce25669506f9917bfe76cec06681156aeef7b287 100644
--- a/obj/NiTriShape.cpp
+++ b/obj/NiTriShape.cpp
@@ -10,7 +10,7 @@ NiTriShape::NiTriShape() NI_TRI_SHAPE_CONSTRUCT {}
 
 NiTriShape::~NiTriShape() {}
 
-void NiTriShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriShape::asString( bool verbose ) const {
 	NI_TRI_SHAPE_STRING
 }
 
-void NiTriShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_FIXLINKS
 }
 
diff --git a/obj/NiTriShape.h b/obj/NiTriShape.h
index fe28b1bde85e2dd3aad13d3f540b03c456e7064a..899df250f564c6f6b765814af9ad7fba7f6a0d95 100644
--- a/obj/NiTriShape.h
+++ b/obj/NiTriShape.h
@@ -20,10 +20,11 @@ public:
 	~NiTriShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_SHAPE_MEMBERS
 };
diff --git a/obj/NiTriShapeData.cpp b/obj/NiTriShapeData.cpp
index d4264124aad237640b2c4dc5e8c2a655521d2d3b..e9be9574ad9e48a541b695d0b5de2b0c1e491f4d 100644
--- a/obj/NiTriShapeData.cpp
+++ b/obj/NiTriShapeData.cpp
@@ -10,7 +10,7 @@ NiTriShapeData::NiTriShapeData() NI_TRI_SHAPE_DATA_CONSTRUCT {}
 
 NiTriShapeData::~NiTriShapeData() {}
 
-void NiTriShapeData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriShapeData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriShapeData::asString( bool verbose ) const {
 	NI_TRI_SHAPE_DATA_STRING
 }
 
-void NiTriShapeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriShapeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTriShapeData.h b/obj/NiTriShapeData.h
index 6bd84ac1258ad9eca3c3d31f9ccff61cb8df5c67..8a17bc7ca702cae20b72b2e741b141302ba5d21d 100644
--- a/obj/NiTriShapeData.h
+++ b/obj/NiTriShapeData.h
@@ -20,10 +20,11 @@ public:
 	~NiTriShapeData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_SHAPE_DATA_MEMBERS
 };
diff --git a/obj/NiTriStrips.cpp b/obj/NiTriStrips.cpp
index e6538486abb1212ca5c6d24876df5a1345e4699b..60cf1a290944d0a9cb03517ef7eeb0d5a7aa168f 100644
--- a/obj/NiTriStrips.cpp
+++ b/obj/NiTriStrips.cpp
@@ -10,7 +10,7 @@ NiTriStrips::NiTriStrips() NI_TRI_STRIPS_CONSTRUCT {}
 
 NiTriStrips::~NiTriStrips() {}
 
-void NiTriStrips::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriStrips::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriStrips::asString( bool verbose ) const {
 	NI_TRI_STRIPS_STRING
 }
 
-void NiTriStrips::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriStrips::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_FIXLINKS
 }
 
diff --git a/obj/NiTriStrips.h b/obj/NiTriStrips.h
index c1a03c1a4c9cdcad08403bfa55bbb7b59ef99ea1..e4f93bb14beec20be0fcce1024b60b881ff0ee21 100644
--- a/obj/NiTriStrips.h
+++ b/obj/NiTriStrips.h
@@ -20,10 +20,11 @@ public:
 	~NiTriStrips();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_STRIPS_MEMBERS
 };
diff --git a/obj/NiTriStripsData.cpp b/obj/NiTriStripsData.cpp
index 20c4a24cf58607b011ffbfe69eb6b81b4a208fca..54af6909d363f93eb5e3794b74ee2f1bbfe90666 100644
--- a/obj/NiTriStripsData.cpp
+++ b/obj/NiTriStripsData.cpp
@@ -10,7 +10,7 @@ NiTriStripsData::NiTriStripsData() NI_TRI_STRIPS_DATA_CONSTRUCT {}
 
 NiTriStripsData::~NiTriStripsData() {}
 
-void NiTriStripsData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriStripsData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriStripsData::asString( bool verbose ) const {
 	NI_TRI_STRIPS_DATA_STRING
 }
 
-void NiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTriStripsData.h b/obj/NiTriStripsData.h
index 1ee5fd3e1917a7273798f6fdfd5750151035e7fc..3c380a0f01b2a03ba389b6116387f3e7f36b6772 100644
--- a/obj/NiTriStripsData.h
+++ b/obj/NiTriStripsData.h
@@ -20,10 +20,11 @@ public:
 	~NiTriStripsData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_STRIPS_DATA_MEMBERS
 };
diff --git a/obj/NiUVController.cpp b/obj/NiUVController.cpp
index e4e0a507e8182aa281061bc778012931ab136ea4..86f39c5f6ccc8ba10ccbba2648902187bc84737a 100644
--- a/obj/NiUVController.cpp
+++ b/obj/NiUVController.cpp
@@ -11,7 +11,7 @@ NiUVController::NiUVController() NI_U_V_CONTROLLER_CONSTRUCT {}
 
 NiUVController::~NiUVController() {}
 
-void NiUVController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiUVController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiUVController::asString( bool verbose ) const {
 	NI_U_V_CONTROLLER_STRING
 }
 
-void NiUVController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiUVController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiUVController.h b/obj/NiUVController.h
index 564a721d9233de288ea9c0200efcae4b6e304200..ecf9e137efe90939f9444cde32e23554652bd8b3 100644
--- a/obj/NiUVController.h
+++ b/obj/NiUVController.h
@@ -20,10 +20,11 @@ public:
 	~NiUVController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_U_V_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiUVData.cpp b/obj/NiUVData.cpp
index 6c73f66fc7c7b4b1d58228f8bf27acc6fb55e8b0..632ded00fd5edf1f3e99fb705ee2706fc40145b6 100644
--- a/obj/NiUVData.cpp
+++ b/obj/NiUVData.cpp
@@ -10,7 +10,7 @@ NiUVData::NiUVData() NI_U_V_DATA_CONSTRUCT {}
 
 NiUVData::~NiUVData() {}
 
-void NiUVData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiUVData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiUVData::asString( bool verbose ) const {
 	NI_U_V_DATA_STRING
 }
 
-void NiUVData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiUVData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_DATA_FIXLINKS
 }
 
diff --git a/obj/NiUVData.h b/obj/NiUVData.h
index 545ba7d2776cd2096351d854bdc6f2db763719c5..bbaf7c80351bd6164263e1fb7fe665020005d6ba 100644
--- a/obj/NiUVData.h
+++ b/obj/NiUVData.h
@@ -20,10 +20,11 @@ public:
 	~NiUVData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_U_V_DATA_MEMBERS
 };
diff --git a/obj/NiVectorExtraData.cpp b/obj/NiVectorExtraData.cpp
index 9cb68b8b7fdc190f05a64f722584bffe4df5f4c3..5e313be3dfffa65f86cb5cac78808694fdd01c24 100644
--- a/obj/NiVectorExtraData.cpp
+++ b/obj/NiVectorExtraData.cpp
@@ -10,7 +10,7 @@ NiVectorExtraData::NiVectorExtraData() NI_VECTOR_EXTRA_DATA_CONSTRUCT {}
 
 NiVectorExtraData::~NiVectorExtraData() {}
 
-void NiVectorExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVectorExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VECTOR_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiVectorExtraData::asString( bool verbose ) const {
 	NI_VECTOR_EXTRA_DATA_STRING
 }
 
-void NiVectorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVectorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VECTOR_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiVectorExtraData.h b/obj/NiVectorExtraData.h
index fe7ca061e2c0eb9efd55ce3fd156569e84db9e8f..dfaace002cd134bdd6d6db53dce568cdc5fd177c 100644
--- a/obj/NiVectorExtraData.h
+++ b/obj/NiVectorExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiVectorExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VECTOR_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiVertWeightsExtraData.cpp b/obj/NiVertWeightsExtraData.cpp
index 447cb11bbb4c487517af7d758b64b59136af6ef6..03df727db2fe8d4bbdc12cc4cee9cc3d53dd6203 100644
--- a/obj/NiVertWeightsExtraData.cpp
+++ b/obj/NiVertWeightsExtraData.cpp
@@ -10,7 +10,7 @@ NiVertWeightsExtraData::NiVertWeightsExtraData() NI_VERT_WEIGHTS_EXTRA_DATA_CONS
 
 NiVertWeightsExtraData::~NiVertWeightsExtraData() {}
 
-void NiVertWeightsExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVertWeightsExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VERT_WEIGHTS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiVertWeightsExtraData::asString( bool verbose ) const {
 	NI_VERT_WEIGHTS_EXTRA_DATA_STRING
 }
 
-void NiVertWeightsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVertWeightsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VERT_WEIGHTS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiVertWeightsExtraData.h b/obj/NiVertWeightsExtraData.h
index 2400e42f41e0cb2632efb3c8796a44dfe69cbfe2..f6dec1b7d319e9f1029887042cb6f95883407dda 100644
--- a/obj/NiVertWeightsExtraData.h
+++ b/obj/NiVertWeightsExtraData.h
@@ -19,11 +19,12 @@ public:
 	NiVertWeightsExtraData();
 	~NiVertWeightsExtraData();
 	//Run-Time Type Information
-	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	static const Type
+		TYPE; virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VERT_WEIGHTS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiVertexColorProperty.cpp b/obj/NiVertexColorProperty.cpp
index a198d9cacafcd2fd898f7b344659526386400f43..548646d8b8694fa531806637f73a9d926dc8626f 100644
--- a/obj/NiVertexColorProperty.cpp
+++ b/obj/NiVertexColorProperty.cpp
@@ -10,7 +10,7 @@ NiVertexColorProperty::NiVertexColorProperty() NI_VERTEX_COLOR_PROPERTY_CONSTRUC
 
 NiVertexColorProperty::~NiVertexColorProperty() {}
 
-void NiVertexColorProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVertexColorProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VERTEX_COLOR_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiVertexColorProperty::asString( bool verbose ) const {
 	NI_VERTEX_COLOR_PROPERTY_STRING
 }
 
-void NiVertexColorProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVertexColorProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VERTEX_COLOR_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiVertexColorProperty.h b/obj/NiVertexColorProperty.h
index 560c17da81988c997ae1b5dd1eaf6e6d9176b7c0..e2ffb801d526f41487b949744fa04e32d37e3d1a 100644
--- a/obj/NiVertexColorProperty.h
+++ b/obj/NiVertexColorProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiVertexColorProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VERTEX_COLOR_PROPERTY_MEMBERS
 };
diff --git a/obj/NiVisController.cpp b/obj/NiVisController.cpp
index 9fa64e188a894d3fccdc78867fe13c1015921c14..ecafaa10d2aed2b67bbba2f9ee5d7931b0343c90 100644
--- a/obj/NiVisController.cpp
+++ b/obj/NiVisController.cpp
@@ -11,7 +11,7 @@ NiVisController::NiVisController() NI_VIS_CONTROLLER_CONSTRUCT {}
 
 NiVisController::~NiVisController() {}
 
-void NiVisController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVisController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiVisController::asString( bool verbose ) const {
 	NI_VIS_CONTROLLER_STRING
 }
 
-void NiVisController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVisController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiVisController.h b/obj/NiVisController.h
index 354c5ddd8a9aced86bca5d68dbe7e1a346c39946..e999ffeefa091da4a93cb1162c4263123ae17f11 100644
--- a/obj/NiVisController.h
+++ b/obj/NiVisController.h
@@ -20,10 +20,11 @@ public:
 	~NiVisController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VIS_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiVisData.cpp b/obj/NiVisData.cpp
index 114262ed1ab6d79aae06a12a50d1ed851f097e99..02c5e962dbb6e7bab0c0a9e8a3165c72a2176ed2 100644
--- a/obj/NiVisData.cpp
+++ b/obj/NiVisData.cpp
@@ -10,7 +10,7 @@ NiVisData::NiVisData() NI_VIS_DATA_CONSTRUCT {}
 
 NiVisData::~NiVisData() {}
 
-void NiVisData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVisData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiVisData::asString( bool verbose ) const {
 	NI_VIS_DATA_STRING
 }
 
-void NiVisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiVisData.h b/obj/NiVisData.h
index 3468fe2798f36cd9e10a231d5935b606b82b42c0..6c2d61e00b415491736d7c4deabf69c823c611ed 100644
--- a/obj/NiVisData.h
+++ b/obj/NiVisData.h
@@ -20,10 +20,11 @@ public:
 	~NiVisData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VIS_DATA_MEMBERS
 };
diff --git a/obj/NiWireframeProperty.cpp b/obj/NiWireframeProperty.cpp
index 48ddb1cea69b268e7e1c7a2c7f39cda22119e619..f5aebaccabd69c4e3767a712b2889643548b4f7a 100644
--- a/obj/NiWireframeProperty.cpp
+++ b/obj/NiWireframeProperty.cpp
@@ -10,7 +10,7 @@ NiWireframeProperty::NiWireframeProperty() NI_WIREFRAME_PROPERTY_CONSTRUCT {}
 
 NiWireframeProperty::~NiWireframeProperty() {}
 
-void NiWireframeProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiWireframeProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_WIREFRAME_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiWireframeProperty::asString( bool verbose ) const {
 	NI_WIREFRAME_PROPERTY_STRING
 }
 
-void NiWireframeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiWireframeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_WIREFRAME_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiWireframeProperty.h b/obj/NiWireframeProperty.h
index b1fea2ec0a98893883c79d3bb3735912338ab8ee..beb29df0c75cf99ccd9dc3ae159de97d2f137abd 100644
--- a/obj/NiWireframeProperty.h
+++ b/obj/NiWireframeProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiWireframeProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_WIREFRAME_PROPERTY_MEMBERS
 };
diff --git a/obj/NiZBufferProperty.cpp b/obj/NiZBufferProperty.cpp
index 825887cbfd8ba48d8436843e0277cdf6647a2e5a..80b4882c2c69c79fb43660f5cb76c0be198bd651 100644
--- a/obj/NiZBufferProperty.cpp
+++ b/obj/NiZBufferProperty.cpp
@@ -10,7 +10,7 @@ NiZBufferProperty::NiZBufferProperty() NI_Z_BUFFER_PROPERTY_CONSTRUCT {}
 
 NiZBufferProperty::~NiZBufferProperty() {}
 
-void NiZBufferProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiZBufferProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_Z_BUFFER_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiZBufferProperty::asString( bool verbose ) const {
 	NI_Z_BUFFER_PROPERTY_STRING
 }
 
-void NiZBufferProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiZBufferProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_Z_BUFFER_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiZBufferProperty.h b/obj/NiZBufferProperty.h
index fdc9c95e89594f1a6c1fc0de26b2bccf3599deef..a7b0f99a6f620b25d860154c8db13e6627815eb4 100644
--- a/obj/NiZBufferProperty.h
+++ b/obj/NiZBufferProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiZBufferProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_Z_BUFFER_PROPERTY_MEMBERS
 };
diff --git a/obj/RootCollisionNode.cpp b/obj/RootCollisionNode.cpp
index abee6c25053a5c58b489031d3b60641557fc9a23..4603f6b3bee5b6848b0d1d166efc8009e55e20ca 100644
--- a/obj/RootCollisionNode.cpp
+++ b/obj/RootCollisionNode.cpp
@@ -10,7 +10,7 @@ RootCollisionNode::RootCollisionNode() ROOT_COLLISION_NODE_CONSTRUCT {}
 
 RootCollisionNode::~RootCollisionNode() {}
 
-void RootCollisionNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void RootCollisionNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ROOT_COLLISION_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string RootCollisionNode::asString( bool verbose ) const {
 	ROOT_COLLISION_NODE_STRING
 }
 
-void RootCollisionNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void RootCollisionNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ROOT_COLLISION_NODE_FIXLINKS
 }
 
diff --git a/obj/RootCollisionNode.h b/obj/RootCollisionNode.h
index 03f863d2de0bbd4fc620545dd07baccdd8bc80ba..efdea3c5c1c127fcc1d8e2ec130c3cccaaa4f112 100644
--- a/obj/RootCollisionNode.h
+++ b/obj/RootCollisionNode.h
@@ -20,10 +20,11 @@ public:
 	~RootCollisionNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ROOT_COLLISION_NODE_MEMBERS
 };
diff --git a/obj/TriBasedGeomData.cpp b/obj/TriBasedGeomData.cpp
index 04e5fab0077dee0fe7736c87ed1342d10fe02ab1..705c9c67b2de287b73b1856c7d36e2699c641a29 100644
--- a/obj/TriBasedGeomData.cpp
+++ b/obj/TriBasedGeomData.cpp
@@ -10,7 +10,7 @@ TriBasedGeomData::TriBasedGeomData() TRI_BASED_GEOM_DATA_CONSTRUCT {}
 
 TriBasedGeomData::~TriBasedGeomData() {}
 
-void TriBasedGeomData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void TriBasedGeomData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	TRI_BASED_GEOM_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string TriBasedGeomData::asString( bool verbose ) const {
 	TRI_BASED_GEOM_DATA_STRING
 }
 
-void TriBasedGeomData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void TriBasedGeomData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	TRI_BASED_GEOM_DATA_FIXLINKS
 }
 
diff --git a/obj/TriBasedGeomData.h b/obj/TriBasedGeomData.h
index a01568315e4009247274f08cbd01840506f94fa3..89fdaebb9783739a1cf16e7b728a0a54d311ceb9 100644
--- a/obj/TriBasedGeomData.h
+++ b/obj/TriBasedGeomData.h
@@ -20,10 +20,11 @@ public:
 	~TriBasedGeomData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	Vector3 Center() const;
 	float Radius() const;
diff --git a/obj/bhkBlendCollisionObject.cpp b/obj/bhkBlendCollisionObject.cpp
index 27214d787fc013218aa3c955a63605b79183a4ac..7adf02602220f25c071cd5e0186cad82dd482d11 100644
--- a/obj/bhkBlendCollisionObject.cpp
+++ b/obj/bhkBlendCollisionObject.cpp
@@ -10,7 +10,7 @@ bhkBlendCollisionObject::bhkBlendCollisionObject() BHK_BLEND_COLLISION_OBJECT_CO
 
 bhkBlendCollisionObject::~bhkBlendCollisionObject() {}
 
-void bhkBlendCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkBlendCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkBlendCollisionObject::asString( bool verbose ) const {
 	BHK_BLEND_COLLISION_OBJECT_STRING
 }
 
-void bhkBlendCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkBlendCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkBlendCollisionObject.h b/obj/bhkBlendCollisionObject.h
index a82460c068be637d5383b7d61ffaf9b67063de8f..fa31c24f6e6c9f04c8e72db44189c7a207acede8 100644
--- a/obj/bhkBlendCollisionObject.h
+++ b/obj/bhkBlendCollisionObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkBlendCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_BLEND_COLLISION_OBJECT_MEMBERS
 };
diff --git a/obj/bhkBlendController.cpp b/obj/bhkBlendController.cpp
index d309565f1415c205badb7bae99f77ab3bdd14b36..345c7a86f9e51a58fb6e2421d6f7e31c0ff5e45c 100644
--- a/obj/bhkBlendController.cpp
+++ b/obj/bhkBlendController.cpp
@@ -10,7 +10,7 @@ bhkBlendController::bhkBlendController() BHK_BLEND_CONTROLLER_CONSTRUCT {}
 
 bhkBlendController::~bhkBlendController() {}
 
-void bhkBlendController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkBlendController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string bhkBlendController::asString( bool verbose ) const {
 	BHK_BLEND_CONTROLLER_STRING
 }
 
-void bhkBlendController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkBlendController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/bhkBlendController.h b/obj/bhkBlendController.h
index 34a11c51c0c7ec133340cdfd00c14437024ea213..133581a1a1fa5db81a7fb9c495dbf931c43d47de 100644
--- a/obj/bhkBlendController.h
+++ b/obj/bhkBlendController.h
@@ -20,10 +20,11 @@ public:
 	~bhkBlendController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_BLEND_CONTROLLER_MEMBERS
 };
diff --git a/obj/bhkBoxShape.cpp b/obj/bhkBoxShape.cpp
index ddf34e16ec2181a0cd13b4191042b9886ea6eca1..254986845bbb63de567ab36cfabc53d80b6f9ee1 100644
--- a/obj/bhkBoxShape.cpp
+++ b/obj/bhkBoxShape.cpp
@@ -10,7 +10,7 @@ bhkBoxShape::bhkBoxShape() BHK_BOX_SHAPE_CONSTRUCT {}
 
 bhkBoxShape::~bhkBoxShape() {}
 
-void bhkBoxShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkBoxShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_BOX_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkBoxShape::asString( bool verbose ) const {
 	BHK_BOX_SHAPE_STRING
 }
 
-void bhkBoxShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkBoxShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_BOX_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkBoxShape.h b/obj/bhkBoxShape.h
index ef2066746671be4354eca13597cfafa0eb011dc6..c5c2ccbce0876558b681e056ac01da7ad8ea6da5 100644
--- a/obj/bhkBoxShape.h
+++ b/obj/bhkBoxShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkBoxShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_BOX_SHAPE_MEMBERS
 };
diff --git a/obj/bhkCapsuleShape.cpp b/obj/bhkCapsuleShape.cpp
index 00046dc555d801e4c595aa1e3b75181f5a20f3ff..f2f8549d23c82f35e1dd976d98db3be782ab480d 100644
--- a/obj/bhkCapsuleShape.cpp
+++ b/obj/bhkCapsuleShape.cpp
@@ -10,7 +10,7 @@ bhkCapsuleShape::bhkCapsuleShape() BHK_CAPSULE_SHAPE_CONSTRUCT {}
 
 bhkCapsuleShape::~bhkCapsuleShape() {}
 
-void bhkCapsuleShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkCapsuleShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CAPSULE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkCapsuleShape::asString( bool verbose ) const {
 	BHK_CAPSULE_SHAPE_STRING
 }
 
-void bhkCapsuleShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkCapsuleShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CAPSULE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkCapsuleShape.h b/obj/bhkCapsuleShape.h
index 7adf103fe979bf6e71f9784663afe86e17ad222e..7395e417b76a5d78965d9b4423a8f30f7708a07a 100644
--- a/obj/bhkCapsuleShape.h
+++ b/obj/bhkCapsuleShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkCapsuleShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CAPSULE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkCollisionObject.cpp b/obj/bhkCollisionObject.cpp
index 5da7ae6c9d2b433073c03eb65364ec98ff426fe2..54a2bf10cdee9ef90926262b4974e88666b62a4a 100644
--- a/obj/bhkCollisionObject.cpp
+++ b/obj/bhkCollisionObject.cpp
@@ -10,7 +10,7 @@ bhkCollisionObject::bhkCollisionObject() BHK_COLLISION_OBJECT_CONSTRUCT {}
 
 bhkCollisionObject::~bhkCollisionObject() {}
 
-void bhkCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkCollisionObject::asString( bool verbose ) const {
 	BHK_COLLISION_OBJECT_STRING
 }
 
-void bhkCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkCollisionObject.h b/obj/bhkCollisionObject.h
index fe5f2e65350ecc6dcea38d4db9c6336ee4bb948f..7e99fcd571d891a122cfe5bd753cca134b1062b7 100644
--- a/obj/bhkCollisionObject.h
+++ b/obj/bhkCollisionObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_COLLISION_OBJECT_MEMBERS
 };
diff --git a/obj/bhkConvexShape.cpp b/obj/bhkConvexShape.cpp
index eb863a6d613b5054e21259860c7fd7dbe8047127..f25e98af4cb388652ff9bdfcb19f6b8badd901df 100644
--- a/obj/bhkConvexShape.cpp
+++ b/obj/bhkConvexShape.cpp
@@ -10,7 +10,7 @@ bhkConvexShape::bhkConvexShape() BHK_CONVEX_SHAPE_CONSTRUCT {}
 
 bhkConvexShape::~bhkConvexShape() {}
 
-void bhkConvexShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkConvexShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkConvexShape::asString( bool verbose ) const {
 	BHK_CONVEX_SHAPE_STRING
 }
 
-void bhkConvexShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkConvexShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkConvexShape.h b/obj/bhkConvexShape.h
index 8fdbf43cfb6cc3f51980c92cf7c4dfd25d0c7fc2..b772a45aedd26580742ef0bf2e0e894bacfc7285 100644
--- a/obj/bhkConvexShape.h
+++ b/obj/bhkConvexShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkConvexShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CONVEX_SHAPE_MEMBERS
 };
diff --git a/obj/bhkConvexTransformShape.cpp b/obj/bhkConvexTransformShape.cpp
index a781b9d7dbdaabfd429d7fe49ee2a7e23f9a9a57..687bbc248b9efddd819b3d04fa8fce7799664933 100644
--- a/obj/bhkConvexTransformShape.cpp
+++ b/obj/bhkConvexTransformShape.cpp
@@ -10,7 +10,7 @@ bhkConvexTransformShape::bhkConvexTransformShape() BHK_CONVEX_TRANSFORM_SHAPE_CO
 
 bhkConvexTransformShape::~bhkConvexTransformShape() {}
 
-void bhkConvexTransformShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkConvexTransformShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_TRANSFORM_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkConvexTransformShape::asString( bool verbose ) const {
 	BHK_CONVEX_TRANSFORM_SHAPE_STRING
 }
 
-void bhkConvexTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkConvexTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_TRANSFORM_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkConvexTransformShape.h b/obj/bhkConvexTransformShape.h
index 9be7b37aeadd658f0db7a272cb88ee37a6678fa8..e3aa73abde298dc163cfc6a3cf6fd9c989d45ac1 100644
--- a/obj/bhkConvexTransformShape.h
+++ b/obj/bhkConvexTransformShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkConvexTransformShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CONVEX_TRANSFORM_SHAPE_MEMBERS
 };
diff --git a/obj/bhkConvexVerticesShape.cpp b/obj/bhkConvexVerticesShape.cpp
index 932a1f470250bdf3d3f6a36ec62218dc2bb238b7..dd098e537eba74131c2f4866244d2d8fd6805b77 100644
--- a/obj/bhkConvexVerticesShape.cpp
+++ b/obj/bhkConvexVerticesShape.cpp
@@ -10,7 +10,7 @@ bhkConvexVerticesShape::bhkConvexVerticesShape() BHK_CONVEX_VERTICES_SHAPE_CONST
 
 bhkConvexVerticesShape::~bhkConvexVerticesShape() {}
 
-void bhkConvexVerticesShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkConvexVerticesShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_VERTICES_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkConvexVerticesShape::asString( bool verbose ) const {
 	BHK_CONVEX_VERTICES_SHAPE_STRING
 }
 
-void bhkConvexVerticesShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkConvexVerticesShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_VERTICES_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkConvexVerticesShape.h b/obj/bhkConvexVerticesShape.h
index fc629043a1244acc559e4111de4f62b28debe203..49cf522e696bb4cc4489cbb064ceea8300e10049 100644
--- a/obj/bhkConvexVerticesShape.h
+++ b/obj/bhkConvexVerticesShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkConvexVerticesShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CONVEX_VERTICES_SHAPE_MEMBERS
 };
diff --git a/obj/bhkEntity.cpp b/obj/bhkEntity.cpp
index 5839dc49216618d4ff5f68e081da5cc571c90021..a4920f2330a90634fef196274a2f60ea06289050 100644
--- a/obj/bhkEntity.cpp
+++ b/obj/bhkEntity.cpp
@@ -11,7 +11,7 @@ bhkEntity::bhkEntity() BHK_ENTITY_CONSTRUCT {}
 
 bhkEntity::~bhkEntity() {}
 
-void bhkEntity::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkEntity::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_ENTITY_READ
 }
 
@@ -23,7 +23,7 @@ string bhkEntity::asString( bool verbose ) const {
 	BHK_ENTITY_STRING
 }
 
-void bhkEntity::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkEntity::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_ENTITY_FIXLINKS
 }
 
diff --git a/obj/bhkEntity.h b/obj/bhkEntity.h
index 3f1959dcf35d28f1435a01bfd84bd3f0a12d8391..e8678ea6992dac722827a0a7d9c62e61714ff974 100644
--- a/obj/bhkEntity.h
+++ b/obj/bhkEntity.h
@@ -20,10 +20,11 @@ public:
 	~bhkEntity();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_ENTITY_MEMBERS
 };
diff --git a/obj/bhkHingeConstraint.cpp b/obj/bhkHingeConstraint.cpp
index 6c2d3f83142daf09eb6392654a72e2f71f5063c2..0db4e5ab59b1be1906a10c3f77c6c845d8cfbcf7 100644
--- a/obj/bhkHingeConstraint.cpp
+++ b/obj/bhkHingeConstraint.cpp
@@ -10,7 +10,7 @@ bhkHingeConstraint::bhkHingeConstraint() BHK_HINGE_CONSTRAINT_CONSTRUCT {}
 
 bhkHingeConstraint::~bhkHingeConstraint() {}
 
-void bhkHingeConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkHingeConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_HINGE_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkHingeConstraint::asString( bool verbose ) const {
 	BHK_HINGE_CONSTRAINT_STRING
 }
 
-void bhkHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_HINGE_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkHingeConstraint.h b/obj/bhkHingeConstraint.h
index b911a4fa5fefdd1e4004a5081c8f7fdc0ae030a5..fa871e5b8ecb4542ac020cbb43bffdec82e321c1 100644
--- a/obj/bhkHingeConstraint.h
+++ b/obj/bhkHingeConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkHingeConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_HINGE_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkLimitedHingeConstraint.cpp b/obj/bhkLimitedHingeConstraint.cpp
index aa19c58b2d7ed25403051217dd7ec477f9ca0bc4..1b5848d8606cb6f76e4f72ed4b8866fad15455b2 100644
--- a/obj/bhkLimitedHingeConstraint.cpp
+++ b/obj/bhkLimitedHingeConstraint.cpp
@@ -10,7 +10,7 @@ bhkLimitedHingeConstraint::bhkLimitedHingeConstraint() BHK_LIMITED_HINGE_CONSTRA
 
 bhkLimitedHingeConstraint::~bhkLimitedHingeConstraint() {}
 
-void bhkLimitedHingeConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkLimitedHingeConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIMITED_HINGE_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkLimitedHingeConstraint::asString( bool verbose ) const {
 	BHK_LIMITED_HINGE_CONSTRAINT_STRING
 }
 
-void bhkLimitedHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkLimitedHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIMITED_HINGE_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkLimitedHingeConstraint.h b/obj/bhkLimitedHingeConstraint.h
index 3253ae18af6d5f1ff5daf2dbb0f3c0516215e20b..344178f46e3d85f3ef6caa95a3ec578d268dd684 100644
--- a/obj/bhkLimitedHingeConstraint.h
+++ b/obj/bhkLimitedHingeConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkLimitedHingeConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_LIMITED_HINGE_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkListShape.cpp b/obj/bhkListShape.cpp
index a2b6e77b999fcd83f42424cf2b19f644b0f4a603..ea79b31a144553d3938b103d5e55c01dedea9d6d 100644
--- a/obj/bhkListShape.cpp
+++ b/obj/bhkListShape.cpp
@@ -11,7 +11,7 @@ bhkListShape::bhkListShape() BHK_LIST_SHAPE_CONSTRUCT {}
 
 bhkListShape::~bhkListShape() {}
 
-void bhkListShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkListShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIST_SHAPE_READ
 }
 
@@ -23,7 +23,7 @@ string bhkListShape::asString( bool verbose ) const {
 	BHK_LIST_SHAPE_STRING
 }
 
-void bhkListShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkListShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIST_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkListShape.h b/obj/bhkListShape.h
index 2711eb3eb48ac9f4379c35ded4c74ff8c4900c5d..a99c492cc201c4f8398eae4b434d867a30df9710 100644
--- a/obj/bhkListShape.h
+++ b/obj/bhkListShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkListShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_LIST_SHAPE_MEMBERS
 };
diff --git a/obj/bhkMalleableConstraint.cpp b/obj/bhkMalleableConstraint.cpp
index 1bd788ed54a3b53690a9f1dcd7b87665a70bc434..9b59e55b620edbb32a38ff81cd866a09d3a68b16 100644
--- a/obj/bhkMalleableConstraint.cpp
+++ b/obj/bhkMalleableConstraint.cpp
@@ -10,7 +10,7 @@ bhkMalleableConstraint::bhkMalleableConstraint() BHK_MALLEABLE_CONSTRAINT_CONSTR
 
 bhkMalleableConstraint::~bhkMalleableConstraint() {}
 
-void bhkMalleableConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkMalleableConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_MALLEABLE_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkMalleableConstraint::asString( bool verbose ) const {
 	BHK_MALLEABLE_CONSTRAINT_STRING
 }
 
-void bhkMalleableConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkMalleableConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_MALLEABLE_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkMalleableConstraint.h b/obj/bhkMalleableConstraint.h
index 26193e5dc9c30279da23b86c4eac4c0f761d5f8a..e709ff026c77d8db03bece59ba836f9b724ee16d 100644
--- a/obj/bhkMalleableConstraint.h
+++ b/obj/bhkMalleableConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkMalleableConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_MALLEABLE_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkMoppBvTreeShape.cpp b/obj/bhkMoppBvTreeShape.cpp
index 0cb2129a6185e4e58bae44777c2e07489f23e946..28864ecc0fedeb9cce3ea7cab109c562450c03ca 100644
--- a/obj/bhkMoppBvTreeShape.cpp
+++ b/obj/bhkMoppBvTreeShape.cpp
@@ -10,7 +10,7 @@ bhkMoppBvTreeShape::bhkMoppBvTreeShape() BHK_MOPP_BV_TREE_SHAPE_CONSTRUCT {}
 
 bhkMoppBvTreeShape::~bhkMoppBvTreeShape() {}
 
-void bhkMoppBvTreeShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkMoppBvTreeShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_MOPP_BV_TREE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkMoppBvTreeShape::asString( bool verbose ) const {
 	BHK_MOPP_BV_TREE_SHAPE_STRING
 }
 
-void bhkMoppBvTreeShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkMoppBvTreeShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_MOPP_BV_TREE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkMoppBvTreeShape.h b/obj/bhkMoppBvTreeShape.h
index 7da687e9d9e393691f9c3e99339891e7fd10f08d..0bf5f53456f209555145a9d29d4caf6aaceef34d 100644
--- a/obj/bhkMoppBvTreeShape.h
+++ b/obj/bhkMoppBvTreeShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkMoppBvTreeShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_MOPP_BV_TREE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkMultiSphereShape.cpp b/obj/bhkMultiSphereShape.cpp
index 047f71d146618ab782e4cffdef18c9786cb5fa90..7add0ab9abfc1ade8b8596977b0c8e500a509033 100644
--- a/obj/bhkMultiSphereShape.cpp
+++ b/obj/bhkMultiSphereShape.cpp
@@ -10,7 +10,7 @@ bhkMultiSphereShape::bhkMultiSphereShape() BHK_MULTI_SPHERE_SHAPE_CONSTRUCT {}
 
 bhkMultiSphereShape::~bhkMultiSphereShape() {}
 
-void bhkMultiSphereShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkMultiSphereShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_MULTI_SPHERE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkMultiSphereShape::asString( bool verbose ) const {
 	BHK_MULTI_SPHERE_SHAPE_STRING
 }
 
-void bhkMultiSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkMultiSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_MULTI_SPHERE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkMultiSphereShape.h b/obj/bhkMultiSphereShape.h
index 291e7a7d473ffe445c10f91a953e50a61e5c6874..a1797584ad4d60575b5c1016c21d17321157b618 100644
--- a/obj/bhkMultiSphereShape.h
+++ b/obj/bhkMultiSphereShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkMultiSphereShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_MULTI_SPHERE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkNiTriStripsShape.cpp b/obj/bhkNiTriStripsShape.cpp
index effb0cd7f479e2510579877f928c84f15dde06eb..e159287be6e3cc5fd991afc2bddd6470b8cfa8d7 100644
--- a/obj/bhkNiTriStripsShape.cpp
+++ b/obj/bhkNiTriStripsShape.cpp
@@ -11,7 +11,7 @@ bhkNiTriStripsShape::bhkNiTriStripsShape() BHK_NI_TRI_STRIPS_SHAPE_CONSTRUCT {}
 
 bhkNiTriStripsShape::~bhkNiTriStripsShape() {}
 
-void bhkNiTriStripsShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkNiTriStripsShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_NI_TRI_STRIPS_SHAPE_READ
 }
 
@@ -23,7 +23,7 @@ string bhkNiTriStripsShape::asString( bool verbose ) const {
 	BHK_NI_TRI_STRIPS_SHAPE_STRING
 }
 
-void bhkNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_NI_TRI_STRIPS_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkNiTriStripsShape.h b/obj/bhkNiTriStripsShape.h
index 6b01d2d84c5d798faaa2872bedf878c9eb8ec663..02c800c329bcc8dba489f8c9ab52d257e97f5591 100644
--- a/obj/bhkNiTriStripsShape.h
+++ b/obj/bhkNiTriStripsShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkNiTriStripsShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_NI_TRI_STRIPS_SHAPE_MEMBERS
 };
diff --git a/obj/bhkPackedNiTriStripsShape.cpp b/obj/bhkPackedNiTriStripsShape.cpp
index 01b25a6034386601cf62b6a8996340eb701525d7..e6171c126f36a452eb42fd226b958bc103987f6d 100644
--- a/obj/bhkPackedNiTriStripsShape.cpp
+++ b/obj/bhkPackedNiTriStripsShape.cpp
@@ -12,7 +12,7 @@ bhkPackedNiTriStripsShape::bhkPackedNiTriStripsShape() BHK_PACKED_NI_TRI_STRIPS_
 
 bhkPackedNiTriStripsShape::~bhkPackedNiTriStripsShape() {}
 
-void bhkPackedNiTriStripsShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkPackedNiTriStripsShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_READ
 }
 
@@ -24,7 +24,7 @@ string bhkPackedNiTriStripsShape::asString( bool verbose ) const {
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_STRING
 }
 
-void bhkPackedNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkPackedNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkPackedNiTriStripsShape.h b/obj/bhkPackedNiTriStripsShape.h
index ac9e82a802a0ac9bb70a21f62e4191d7a1b25b2b..d7c9a0cbc1380697eb192df72070df379d3c7833 100644
--- a/obj/bhkPackedNiTriStripsShape.h
+++ b/obj/bhkPackedNiTriStripsShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkPackedNiTriStripsShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_MEMBERS
 };
diff --git a/obj/bhkPrismaticConstraint.cpp b/obj/bhkPrismaticConstraint.cpp
index fea2c86c680359198b16f495a81efd3752cfd23e..35ae2ee4bce036093af0cd1c255360a92c71e07b 100644
--- a/obj/bhkPrismaticConstraint.cpp
+++ b/obj/bhkPrismaticConstraint.cpp
@@ -10,7 +10,7 @@ bhkPrismaticConstraint::bhkPrismaticConstraint() BHK_PRISMATIC_CONSTRAINT_CONSTR
 
 bhkPrismaticConstraint::~bhkPrismaticConstraint() {}
 
-void bhkPrismaticConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkPrismaticConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_PRISMATIC_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkPrismaticConstraint::asString( bool verbose ) const {
 	BHK_PRISMATIC_CONSTRAINT_STRING
 }
 
-void bhkPrismaticConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkPrismaticConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_PRISMATIC_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkPrismaticConstraint.h b/obj/bhkPrismaticConstraint.h
index dcccd0bd1f24a6ae10764b0156810674a415ee86..e0fe19ae3f45cf4004ab5ee3091a58aab4aca675 100644
--- a/obj/bhkPrismaticConstraint.h
+++ b/obj/bhkPrismaticConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkPrismaticConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_PRISMATIC_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkRagdollConstraint.cpp b/obj/bhkRagdollConstraint.cpp
index 3d889c84891e38ff20345383fe1b4d7d5a533b0d..1ba2878a21b9091da390d90b5302d73d2726a814 100644
--- a/obj/bhkRagdollConstraint.cpp
+++ b/obj/bhkRagdollConstraint.cpp
@@ -10,7 +10,7 @@ bhkRagdollConstraint::bhkRagdollConstraint() BHK_RAGDOLL_CONSTRAINT_CONSTRUCT {}
 
 bhkRagdollConstraint::~bhkRagdollConstraint() {}
 
-void bhkRagdollConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRagdollConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_RAGDOLL_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkRagdollConstraint::asString( bool verbose ) const {
 	BHK_RAGDOLL_CONSTRAINT_STRING
 }
 
-void bhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_RAGDOLL_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkRagdollConstraint.h b/obj/bhkRagdollConstraint.h
index ae6cccf0798454c3d2fb06457e2810a2fb48625a..7aadeecdd6b8c68b10f4ba3a2f1fa10da466990f 100644
--- a/obj/bhkRagdollConstraint.h
+++ b/obj/bhkRagdollConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkRagdollConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_RAGDOLL_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkRefObject.cpp b/obj/bhkRefObject.cpp
index 485db7c6c7634a94618a73614d5773980e272e12..dc4c1735b18b0af69d1ef19e4553fe9a925d1780 100644
--- a/obj/bhkRefObject.cpp
+++ b/obj/bhkRefObject.cpp
@@ -10,7 +10,7 @@ bhkRefObject::bhkRefObject() BHK_REF_OBJECT_CONSTRUCT {}
 
 bhkRefObject::~bhkRefObject() {}
 
-void bhkRefObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRefObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_REF_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkRefObject::asString( bool verbose ) const {
 	BHK_REF_OBJECT_STRING
 }
 
-void bhkRefObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRefObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_REF_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkRefObject.h b/obj/bhkRefObject.h
index dac4d8b1b36ee09058d483ecaa7c3590731f5598..b6b93c69bc11f9480a05f702a238c867ee2184f6 100644
--- a/obj/bhkRefObject.h
+++ b/obj/bhkRefObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkRefObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_REF_OBJECT_MEMBERS
 };
diff --git a/obj/bhkRigidBody.cpp b/obj/bhkRigidBody.cpp
index 9bdc71515ecc8aa4d93c2e6dbda686b031812f44..ab4cdef0c920bcf3a1797d4d3c4fd190182379f6 100644
--- a/obj/bhkRigidBody.cpp
+++ b/obj/bhkRigidBody.cpp
@@ -11,7 +11,7 @@ bhkRigidBody::bhkRigidBody() BHK_RIGID_BODY_CONSTRUCT {}
 
 bhkRigidBody::~bhkRigidBody() {}
 
-void bhkRigidBody::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBody::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_READ
 }
 
@@ -23,7 +23,7 @@ string bhkRigidBody::asString( bool verbose ) const {
 	BHK_RIGID_BODY_STRING
 }
 
-void bhkRigidBody::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBody::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_FIXLINKS
 }
 
diff --git a/obj/bhkRigidBody.h b/obj/bhkRigidBody.h
index 074e0471d80cf4f69c53eabc64c7db05b5e4b2b2..fd1b6d594af147aadef667dfb1d7f5f2cbd4004c 100644
--- a/obj/bhkRigidBody.h
+++ b/obj/bhkRigidBody.h
@@ -20,10 +20,11 @@ public:
 	~bhkRigidBody();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_RIGID_BODY_MEMBERS
 };
diff --git a/obj/bhkRigidBodyT.cpp b/obj/bhkRigidBodyT.cpp
index 59bc18a193e588560b5a4d46ebef9aad96713f0e..b59120e598706d93aee66c1edef0ae5525275009 100644
--- a/obj/bhkRigidBodyT.cpp
+++ b/obj/bhkRigidBodyT.cpp
@@ -10,7 +10,7 @@ bhkRigidBodyT::bhkRigidBodyT() BHK_RIGID_BODY_T_CONSTRUCT {}
 
 bhkRigidBodyT::~bhkRigidBodyT() {}
 
-void bhkRigidBodyT::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBodyT::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_T_READ
 }
 
@@ -22,7 +22,7 @@ string bhkRigidBodyT::asString( bool verbose ) const {
 	BHK_RIGID_BODY_T_STRING
 }
 
-void bhkRigidBodyT::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBodyT::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_T_FIXLINKS
 }
 
diff --git a/obj/bhkRigidBodyT.h b/obj/bhkRigidBodyT.h
index aabc38aa447206c6bb98f0d2e474aa87e9a43781..11cb72093562e8fba95dc57d7899ce4c3cda41c6 100644
--- a/obj/bhkRigidBodyT.h
+++ b/obj/bhkRigidBodyT.h
@@ -20,10 +20,11 @@ public:
 	~bhkRigidBodyT();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_RIGID_BODY_T_MEMBERS
 };
diff --git a/obj/bhkSPCollisionObject.cpp b/obj/bhkSPCollisionObject.cpp
index d39de7bea45d75e4f9639cd127405de65df37fe1..0347e3279f15882cada8262f1da57ed9550859a0 100644
--- a/obj/bhkSPCollisionObject.cpp
+++ b/obj/bhkSPCollisionObject.cpp
@@ -10,7 +10,7 @@ bhkSPCollisionObject::bhkSPCollisionObject() BHK_S_P_COLLISION_OBJECT_CONSTRUCT
 
 bhkSPCollisionObject::~bhkSPCollisionObject() {}
 
-void bhkSPCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSPCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_S_P_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSPCollisionObject::asString( bool verbose ) const {
 	BHK_S_P_COLLISION_OBJECT_STRING
 }
 
-void bhkSPCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSPCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_S_P_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkSPCollisionObject.h b/obj/bhkSPCollisionObject.h
index c60fb362388cc0cf839796582f612408ab384807..c461df41bd5782b26c749b26032580e89ba3f9ef 100644
--- a/obj/bhkSPCollisionObject.h
+++ b/obj/bhkSPCollisionObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkSPCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_S_P_COLLISION_OBJECT_MEMBERS
 };
diff --git a/obj/bhkSerializable.cpp b/obj/bhkSerializable.cpp
index 200da352e6c13f14681fdda869e27b1417f0f855..1d2b0d2703d094fd8fd6fe31e00e672459a80d01 100644
--- a/obj/bhkSerializable.cpp
+++ b/obj/bhkSerializable.cpp
@@ -10,7 +10,7 @@ bhkSerializable::bhkSerializable() BHK_SERIALIZABLE_CONSTRUCT {}
 
 bhkSerializable::~bhkSerializable() {}
 
-void bhkSerializable::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSerializable::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SERIALIZABLE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSerializable::asString( bool verbose ) const {
 	BHK_SERIALIZABLE_STRING
 }
 
-void bhkSerializable::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSerializable::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SERIALIZABLE_FIXLINKS
 }
 
diff --git a/obj/bhkSerializable.h b/obj/bhkSerializable.h
index c58b1eaf8d654832e6aa7234c6b95f981a95a812..52a85ec84e5053bf9eb283e2a6c7590333c47fca 100644
--- a/obj/bhkSerializable.h
+++ b/obj/bhkSerializable.h
@@ -20,10 +20,11 @@ public:
 	~bhkSerializable();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SERIALIZABLE_MEMBERS
 };
diff --git a/obj/bhkShape.cpp b/obj/bhkShape.cpp
index 2a1bca1648964dbc2c6ddedbc7ec68f43164b063..7d32307307570a62f481d2b7df7a1be40d5c1a87 100644
--- a/obj/bhkShape.cpp
+++ b/obj/bhkShape.cpp
@@ -10,7 +10,7 @@ bhkShape::bhkShape() BHK_SHAPE_CONSTRUCT {}
 
 bhkShape::~bhkShape() {}
 
-void bhkShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkShape::asString( bool verbose ) const {
 	BHK_SHAPE_STRING
 }
 
-void bhkShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkShape.h b/obj/bhkShape.h
index f541c99c25303a6a7dd40ee95e7328a17d891223..5de843b5b7636799f0c4f76e18d8a0a93b0a7a34 100644
--- a/obj/bhkShape.h
+++ b/obj/bhkShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SHAPE_MEMBERS
 };
diff --git a/obj/bhkSimpleShapePhantom.cpp b/obj/bhkSimpleShapePhantom.cpp
index 3b4fa84fa694512dfa7dbcdc0830e9e7acff0140..39971bff584891029b9519ae8aca219dffc41f08 100644
--- a/obj/bhkSimpleShapePhantom.cpp
+++ b/obj/bhkSimpleShapePhantom.cpp
@@ -10,7 +10,7 @@ bhkSimpleShapePhantom::bhkSimpleShapePhantom() BHK_SIMPLE_SHAPE_PHANTOM_CONSTRUC
 
 bhkSimpleShapePhantom::~bhkSimpleShapePhantom() {}
 
-void bhkSimpleShapePhantom::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSimpleShapePhantom::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SIMPLE_SHAPE_PHANTOM_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSimpleShapePhantom::asString( bool verbose ) const {
 	BHK_SIMPLE_SHAPE_PHANTOM_STRING
 }
 
-void bhkSimpleShapePhantom::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSimpleShapePhantom::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SIMPLE_SHAPE_PHANTOM_FIXLINKS
 }
 
diff --git a/obj/bhkSimpleShapePhantom.h b/obj/bhkSimpleShapePhantom.h
index f985eb0f991568ad0daf9c3770729f58f01a9dfd..ba80f89af22e24fe746b0d6541ce51a042ae9a32 100644
--- a/obj/bhkSimpleShapePhantom.h
+++ b/obj/bhkSimpleShapePhantom.h
@@ -20,10 +20,11 @@ public:
 	~bhkSimpleShapePhantom();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SIMPLE_SHAPE_PHANTOM_MEMBERS
 };
diff --git a/obj/bhkSphereRepShape.cpp b/obj/bhkSphereRepShape.cpp
index b2d4e231ec37765a72a037132fcf1378e57edd34..ade1fe7ebcda229f0aafe94fceb1ce049bce7564 100644
--- a/obj/bhkSphereRepShape.cpp
+++ b/obj/bhkSphereRepShape.cpp
@@ -10,7 +10,7 @@ bhkSphereRepShape::bhkSphereRepShape() BHK_SPHERE_REP_SHAPE_CONSTRUCT {}
 
 bhkSphereRepShape::~bhkSphereRepShape() {}
 
-void bhkSphereRepShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSphereRepShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_REP_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSphereRepShape::asString( bool verbose ) const {
 	BHK_SPHERE_REP_SHAPE_STRING
 }
 
-void bhkSphereRepShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSphereRepShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_REP_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkSphereRepShape.h b/obj/bhkSphereRepShape.h
index f48935a4172ddede81462f82ac6ac6729d148511..de8593b6ad12cba0dbeb55857a1c5d2e48de5f93 100644
--- a/obj/bhkSphereRepShape.h
+++ b/obj/bhkSphereRepShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkSphereRepShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SPHERE_REP_SHAPE_MEMBERS
 };
diff --git a/obj/bhkSphereShape.cpp b/obj/bhkSphereShape.cpp
index d110f9cbe43edff2f04dffa148e1591843d79761..234585b418f4d5d50f91a388a9f232420ed31a5f 100644
--- a/obj/bhkSphereShape.cpp
+++ b/obj/bhkSphereShape.cpp
@@ -10,7 +10,7 @@ bhkSphereShape::bhkSphereShape() BHK_SPHERE_SHAPE_CONSTRUCT {}
 
 bhkSphereShape::~bhkSphereShape() {}
 
-void bhkSphereShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSphereShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSphereShape::asString( bool verbose ) const {
 	BHK_SPHERE_SHAPE_STRING
 }
 
-void bhkSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkSphereShape.h b/obj/bhkSphereShape.h
index 51a6bca381330d11e0accc8335f3293c3cd83d9c..9b16f0caa266afb939d52d9b9d5d04987786bb44 100644
--- a/obj/bhkSphereShape.h
+++ b/obj/bhkSphereShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkSphereShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SPHERE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkStiffSpringConstraint.cpp b/obj/bhkStiffSpringConstraint.cpp
index fc2366b39ef07d57520325aae5fdcbddce97e5a0..f4b40b6ad759cacbd2d7057cfc90b10d1f16841c 100644
--- a/obj/bhkStiffSpringConstraint.cpp
+++ b/obj/bhkStiffSpringConstraint.cpp
@@ -10,7 +10,7 @@ bhkStiffSpringConstraint::bhkStiffSpringConstraint() BHK_STIFF_SPRING_CONSTRAINT
 
 bhkStiffSpringConstraint::~bhkStiffSpringConstraint() {}
 
-void bhkStiffSpringConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkStiffSpringConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_STIFF_SPRING_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkStiffSpringConstraint::asString( bool verbose ) const {
 	BHK_STIFF_SPRING_CONSTRAINT_STRING
 }
 
-void bhkStiffSpringConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkStiffSpringConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_STIFF_SPRING_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkStiffSpringConstraint.h b/obj/bhkStiffSpringConstraint.h
index 62db183f7eadf405b730a2f0b7258febffd149aa..aded5a569feef53725f812fd7113f0830f63e039 100644
--- a/obj/bhkStiffSpringConstraint.h
+++ b/obj/bhkStiffSpringConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkStiffSpringConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_STIFF_SPRING_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkTransformShape.cpp b/obj/bhkTransformShape.cpp
index f323cb78008bafa591f81ea07d9c049139ba5344..c16ca1e4ac286193148a1ca2faafd355f32ca9ec 100644
--- a/obj/bhkTransformShape.cpp
+++ b/obj/bhkTransformShape.cpp
@@ -10,7 +10,7 @@ bhkTransformShape::bhkTransformShape() BHK_TRANSFORM_SHAPE_CONSTRUCT {}
 
 bhkTransformShape::~bhkTransformShape() {}
 
-void bhkTransformShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkTransformShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_TRANSFORM_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkTransformShape::asString( bool verbose ) const {
 	BHK_TRANSFORM_SHAPE_STRING
 }
 
-void bhkTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_TRANSFORM_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkTransformShape.h b/obj/bhkTransformShape.h
index bb6739fb4ced903fec3aed58bec4a5af10c092f7..092d70115733d97288ff4f22f728c884270db458 100644
--- a/obj/bhkTransformShape.h
+++ b/obj/bhkTransformShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkTransformShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_TRANSFORM_SHAPE_MEMBERS
 };
diff --git a/obj/bhkWorldObject.cpp b/obj/bhkWorldObject.cpp
index 304b51a4d2a1f8a50166af81b3ce393fc5274cc6..9cd5a5c7c21c8df328acb0c2127a3b05c2791cfb 100644
--- a/obj/bhkWorldObject.cpp
+++ b/obj/bhkWorldObject.cpp
@@ -10,7 +10,7 @@ bhkWorldObject::bhkWorldObject() BHK_WORLD_OBJECT_CONSTRUCT {}
 
 bhkWorldObject::~bhkWorldObject() {}
 
-void bhkWorldObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkWorldObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_WORLD_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkWorldObject::asString( bool verbose ) const {
 	BHK_WORLD_OBJECT_STRING
 }
 
-void bhkWorldObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkWorldObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_WORLD_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkWorldObject.h b/obj/bhkWorldObject.h
index d4250ef7a72ed11bc200db1ca222ed8ede20db7f..9d38b23f881a36117de191d17dd2f852c4f4ac18 100644
--- a/obj/bhkWorldObject.h
+++ b/obj/bhkWorldObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkWorldObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_WORLD_OBJECT_MEMBERS
 };
diff --git a/obj/hkPackedNiTriStripsData.cpp b/obj/hkPackedNiTriStripsData.cpp
index 2c04f1ee405b44763b2b345883181b8a6a249f85..4bfb39a4fd30668c57ea7e24b52a87b494cdcd38 100644
--- a/obj/hkPackedNiTriStripsData.cpp
+++ b/obj/hkPackedNiTriStripsData.cpp
@@ -10,7 +10,7 @@ hkPackedNiTriStripsData::hkPackedNiTriStripsData() HK_PACKED_NI_TRI_STRIPS_DATA_
 
 hkPackedNiTriStripsData::~hkPackedNiTriStripsData() {}
 
-void hkPackedNiTriStripsData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void hkPackedNiTriStripsData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	HK_PACKED_NI_TRI_STRIPS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string hkPackedNiTriStripsData::asString( bool verbose ) const {
 	HK_PACKED_NI_TRI_STRIPS_DATA_STRING
 }
 
-void hkPackedNiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void hkPackedNiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	HK_PACKED_NI_TRI_STRIPS_DATA_FIXLINKS
 }
 
diff --git a/obj/hkPackedNiTriStripsData.h b/obj/hkPackedNiTriStripsData.h
index f148dc32a86bb3029225d69bb659cf3aea1b194b..cfd80d176359d8aae37a1f0282e585af4b502778 100644
--- a/obj/hkPackedNiTriStripsData.h
+++ b/obj/hkPackedNiTriStripsData.h
@@ -20,10 +20,11 @@ public:
 	~hkPackedNiTriStripsData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return 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 );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	HK_PACKED_NI_TRI_STRIPS_DATA_MEMBERS
 };