diff --git a/include/obj/ABoneLODController.h b/include/obj/ABoneLODController.h
index 29127e8f8b67e31673bce585bf631adab2ce5aee..a06790e1eb64f6cf289cde24c16401e0d527484d 100644
--- a/include/obj/ABoneLODController.h
+++ b/include/obj/ABoneLODController.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~ABoneLODController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/AKeyedData.h b/include/obj/AKeyedData.h
index d9f6062338f59a8cdf99347ec3856204f340d87f..e37e3a7a1b7aa2eba59d9c59bcea830df2ecd662 100644
--- a/include/obj/AKeyedData.h
+++ b/include/obj/AKeyedData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~AKeyedData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/APSysCtlr.h b/include/obj/APSysCtlr.h
index 39ecbc0b5b2beef06e7e18dbf4cea348653478ee..8ec0c42c178b5a695f16f3d3df38ae6677ef5636 100644
--- a/include/obj/APSysCtlr.h
+++ b/include/obj/APSysCtlr.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~APSysCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/APSysData.h b/include/obj/APSysData.h
index 41191aca96d55cb382dc2b9b8ea1ad150c241140..461b6d264bd6ed84207d9287d65921621986f8c5 100644
--- a/include/obj/APSysData.h
+++ b/include/obj/APSysData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~APSysData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/AParticleModifier.h b/include/obj/AParticleModifier.h
index e0cdcc207e7c4a2e87b569f9e05b72cb777c0c9a..920fc2ef357c3c431f8bbfd5a7080ea7b633d26d 100644
--- a/include/obj/AParticleModifier.h
+++ b/include/obj/AParticleModifier.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~AParticleModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/AbhkConstraint.h b/include/obj/AbhkConstraint.h
index b01bd53f0bd7f0fd53856520c53b8963fcd320aa..e075a901ab3a1a952c98afc105712db3de740cde 100644
--- a/include/obj/AbhkConstraint.h
+++ b/include/obj/AbhkConstraint.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~AbhkConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/AbhkRagdollConstraint.h b/include/obj/AbhkRagdollConstraint.h
index 6dcc7e819541edb30ca22812871fdaaa77dc3acd..cd769777c287da2cf45e200a82de93ff47073163 100644
--- a/include/obj/AbhkRagdollConstraint.h
+++ b/include/obj/AbhkRagdollConstraint.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~AbhkRagdollConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/AbhkShapeCollection.h b/include/obj/AbhkShapeCollection.h
index 5b0c18aeb3d92b90c2b53747037db4c55ce01937..84478cdffd31d0372fb73f7d4ef3783caf4f6f23 100644
--- a/include/obj/AbhkShapeCollection.h
+++ b/include/obj/AbhkShapeCollection.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~AbhkShapeCollection();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/AvoidNode.h b/include/obj/AvoidNode.h
index 9a4097b8db728adee5f146ce9efa5e08b6436946..2c20b1c8b842664419f08d40ceee01a1fa3a51c2 100644
--- a/include/obj/AvoidNode.h
+++ b/include/obj/AvoidNode.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~AvoidNode();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/BSBound.h b/include/obj/BSBound.h
index 0dccd0e2537f5270416ccfff1252f8244a6b9e75..d841bc80f4730759c5dc67bdb21f36da16a7ef36 100644
--- a/include/obj/BSBound.h
+++ b/include/obj/BSBound.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~BSBound();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/BSFurnitureMarker.h b/include/obj/BSFurnitureMarker.h
index 7d128de4674616424e87c169643d378865725145..4b841bf1855ba07333e57067c845da468a34c1f1 100644
--- a/include/obj/BSFurnitureMarker.h
+++ b/include/obj/BSFurnitureMarker.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~BSFurnitureMarker();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/BSKeyframeController.h b/include/obj/BSKeyframeController.h
index 0fc0f7fedf9affe9135d1a1363373d68efc8d3e6..42b42603b161cd64a78805076732ba219b5bf205 100644
--- a/include/obj/BSKeyframeController.h
+++ b/include/obj/BSKeyframeController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~BSKeyframeController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/BSPSysArrayEmitter.h b/include/obj/BSPSysArrayEmitter.h
index fa69f7bd9c9f8dd825f07c0487bac8801e4583cc..4fbc83e0b050bfcf78c0dcb9fda865cb1f582b11 100644
--- a/include/obj/BSPSysArrayEmitter.h
+++ b/include/obj/BSPSysArrayEmitter.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~BSPSysArrayEmitter();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/BSParentVelocityModifier.h b/include/obj/BSParentVelocityModifier.h
index 86cc9bfaef1044dcf432f873c8f8fd03c52d1fe8..01b34b9a6d680c5faa8a29ae6a154609314d892b 100644
--- a/include/obj/BSParentVelocityModifier.h
+++ b/include/obj/BSParentVelocityModifier.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~BSParentVelocityModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/BSXFlags.h b/include/obj/BSXFlags.h
index b00f47593b109442756c3f52b5720a7a5c7109cc..dcf023e98b1fe2ab9a1fbda70b8d30ad71b1e63a 100644
--- a/include/obj/BSXFlags.h
+++ b/include/obj/BSXFlags.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~BSXFlags();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/FxButton.h b/include/obj/FxButton.h
index a398e0279532767c8073a2316923f023d29bbd15..3a60968019395ba1023eba48e16a0c92f4a180b0 100644
--- a/include/obj/FxButton.h
+++ b/include/obj/FxButton.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~FxButton();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/FxRadioButton.h b/include/obj/FxRadioButton.h
index 88559fee44def5d1a3ad65010b5341616f8ff056..da88e343913267aa840c34f27243e443a4167db2 100644
--- a/include/obj/FxRadioButton.h
+++ b/include/obj/FxRadioButton.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~FxRadioButton();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/FxWidget.h b/include/obj/FxWidget.h
index 8bd4ad4fc225f19b21a3c4888ee53625b60add63..2d7c1cd6afe6ef62e0f3c9512025b546744e204e 100644
--- a/include/obj/FxWidget.h
+++ b/include/obj/FxWidget.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~FxWidget();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiAVObject.h b/include/obj/NiAVObject.h
index 20c2bfbfb825d320178e0ccd8d57472d5560762e..33599cac12de56a1d16cdb2a530068e06780d27f 100644
--- a/include/obj/NiAVObject.h
+++ b/include/obj/NiAVObject.h
@@ -31,6 +31,7 @@ public:
 	NIFLIB_API ~NiAVObject();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiAlphaController.h b/include/obj/NiAlphaController.h
index f609fe31dcfadb4399f5b0cfadeeb6982cc36d0f..465d46bd7daa204bf57d3bcb95efa83bf1c91d7e 100644
--- a/include/obj/NiAlphaController.h
+++ b/include/obj/NiAlphaController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiAlphaController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiAlphaProperty.h b/include/obj/NiAlphaProperty.h
index 1aef9043428651449c268f65789eec71563d13ae..68562c83fc36099557282abac2b8785a6d30a56e 100644
--- a/include/obj/NiAlphaProperty.h
+++ b/include/obj/NiAlphaProperty.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiAlphaProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiAmbientLight.h b/include/obj/NiAmbientLight.h
index 5cbfb6f71884f7814752dbae60ae9b577449be82..36f2d0568f8d71aa9ef8a881e58366cc826bf214 100644
--- a/include/obj/NiAmbientLight.h
+++ b/include/obj/NiAmbientLight.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiAmbientLight();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiAutoNormalParticles.h b/include/obj/NiAutoNormalParticles.h
index 77a0ed0ce3405aead70ecd332ea28d35743265d0..ba8f36f20300b0ef883e548155b3377a2a49b0ed 100644
--- a/include/obj/NiAutoNormalParticles.h
+++ b/include/obj/NiAutoNormalParticles.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiAutoNormalParticles();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiAutoNormalParticlesData.h b/include/obj/NiAutoNormalParticlesData.h
index f1afdc9e203dd6fc25c2cd4b6eb3c6e0222ccd5e..940511f735216d580a6eaa4b02f8ccfa6c8955a5 100644
--- a/include/obj/NiAutoNormalParticlesData.h
+++ b/include/obj/NiAutoNormalParticlesData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiAutoNormalParticlesData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSAnimationNode.h b/include/obj/NiBSAnimationNode.h
index 5496e740f1fcb57800aa96e0a587a6006a84c06f..2b78cbc682d888e0dfd4cfaf077f39ec6e02cf96 100644
--- a/include/obj/NiBSAnimationNode.h
+++ b/include/obj/NiBSAnimationNode.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBSAnimationNode();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSBoneLODController.h b/include/obj/NiBSBoneLODController.h
index 5ebce2efc47e58b03708ead37485a8aca1825ad3..67e677071464abe2565bb130d8f7f0d11ec0deea 100644
--- a/include/obj/NiBSBoneLODController.h
+++ b/include/obj/NiBSBoneLODController.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiBSBoneLODController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSPArrayController.h b/include/obj/NiBSPArrayController.h
index d147fd04f4b790137cfecf32bb94de505f6cfb3d..07d9793cddef8dafcd43eb38fb3621238b2d5d8c 100644
--- a/include/obj/NiBSPArrayController.h
+++ b/include/obj/NiBSPArrayController.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBSPArrayController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSParticleNode.h b/include/obj/NiBSParticleNode.h
index c4fe79b26d8a1877efa867fd0eefe0dbd4dd9d66..8939bf20b518b8b452de50447483a6ed8af78d9b 100644
--- a/include/obj/NiBSParticleNode.h
+++ b/include/obj/NiBSParticleNode.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiBSParticleNode();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSplineBasisData.h b/include/obj/NiBSplineBasisData.h
index 5db389ab1fd7e6e31eb28d43d7050a4bd59343a1..5cc5f2cc118cd1f11df94387209c028d671a4cf7 100644
--- a/include/obj/NiBSplineBasisData.h
+++ b/include/obj/NiBSplineBasisData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiBSplineBasisData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSplineCompFloatInterpolator.h b/include/obj/NiBSplineCompFloatInterpolator.h
index b150dfc4ebf33b989bd4b35ffb7dbfff98633a70..84f9d894cd20ae2b11dac13d2fe6069fb95ffea6 100644
--- a/include/obj/NiBSplineCompFloatInterpolator.h
+++ b/include/obj/NiBSplineCompFloatInterpolator.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBSplineCompFloatInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSplineCompPoint3Interpolator.h b/include/obj/NiBSplineCompPoint3Interpolator.h
index 1f0a41cab6c7c0400e295c0ff6b0b658079a24d3..bd2309992e9b5c753c6d91a2f2c4160cc94279f2 100644
--- a/include/obj/NiBSplineCompPoint3Interpolator.h
+++ b/include/obj/NiBSplineCompPoint3Interpolator.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiBSplineCompPoint3Interpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSplineCompTransformInterpolator.h b/include/obj/NiBSplineCompTransformInterpolator.h
index f67b7ae662bb8311d43121112ccae915ac24b6e4..eaf36c161713055c377889f9ef3a3be1574ce9c6 100644
--- a/include/obj/NiBSplineCompTransformInterpolator.h
+++ b/include/obj/NiBSplineCompTransformInterpolator.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiBSplineCompTransformInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSplineData.h b/include/obj/NiBSplineData.h
index 14b27ff8018090797f36a602260e4e3ed265878d..150e5aac92e03393f9bb9051ac05e86d22e093ec 100644
--- a/include/obj/NiBSplineData.h
+++ b/include/obj/NiBSplineData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiBSplineData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBSplineInterpolator.h b/include/obj/NiBSplineInterpolator.h
index 68ffc5860956daa249ccd84661abac4a226ff834..404ba2c9fb2b8ca954dbbcc497242b06d054d74d 100644
--- a/include/obj/NiBSplineInterpolator.h
+++ b/include/obj/NiBSplineInterpolator.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~NiBSplineInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBillboardNode.h b/include/obj/NiBillboardNode.h
index c32facf0edff0476db21a42dc02c1be6403c1da2..84ee53cafac08a40cf3d106f1ba6835de8655dc0 100644
--- a/include/obj/NiBillboardNode.h
+++ b/include/obj/NiBillboardNode.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiBillboardNode();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBinaryExtraData.h b/include/obj/NiBinaryExtraData.h
index 696335ae87704f1bf2c4021912f4a6ec587e5594..a3829beee90dfde0f90e87a60e0f865830309cb5 100644
--- a/include/obj/NiBinaryExtraData.h
+++ b/include/obj/NiBinaryExtraData.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiBinaryExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBlendBoolInterpolator.h b/include/obj/NiBlendBoolInterpolator.h
index 30f99784e10a8758d864116b1ff3a3e064cb55ce..1b77f2a8a9361724ba2dfa3dbc3f73ffaa5fad29 100644
--- a/include/obj/NiBlendBoolInterpolator.h
+++ b/include/obj/NiBlendBoolInterpolator.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBlendBoolInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBlendFloatInterpolator.h b/include/obj/NiBlendFloatInterpolator.h
index f783fc322be252d4378b8e367dcbda5b50bdc379..cdfb23ac9aae888f5165e3dcb0aa840e7f810d2d 100644
--- a/include/obj/NiBlendFloatInterpolator.h
+++ b/include/obj/NiBlendFloatInterpolator.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBlendFloatInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBlendInterpolator.h b/include/obj/NiBlendInterpolator.h
index fd386fa97686366f0cdc74130167884dc039ce30..5d977df4b423ef9615b61d9883a2009a69e13213 100644
--- a/include/obj/NiBlendInterpolator.h
+++ b/include/obj/NiBlendInterpolator.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBlendInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBlendPoint3Interpolator.h b/include/obj/NiBlendPoint3Interpolator.h
index c8a0d0e806114cf8d65250ed64f3eb9435d86559..b9aea723fb1b2a654b6f151dfded8f2d16a9f86b 100644
--- a/include/obj/NiBlendPoint3Interpolator.h
+++ b/include/obj/NiBlendPoint3Interpolator.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBlendPoint3Interpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBlendTransformInterpolator.h b/include/obj/NiBlendTransformInterpolator.h
index 5dd7e8c4b63897b3c130375b1c92d0de1d7dcfbc..f791927b628e07aac6c8c89031a2d6903138a93e 100644
--- a/include/obj/NiBlendTransformInterpolator.h
+++ b/include/obj/NiBlendTransformInterpolator.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBlendTransformInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBoneLODController.h b/include/obj/NiBoneLODController.h
index 6bc472bd8deedc62c40fce34f0217bbaeb5cf63f..2fbcb18dfb19ddcaeb1310d3811e98d57327d9f4 100644
--- a/include/obj/NiBoneLODController.h
+++ b/include/obj/NiBoneLODController.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiBoneLODController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBoolData.h b/include/obj/NiBoolData.h
index c6a3b640eda1afdd90bf49fbc579714145013a36..b86c8b28e65c5ee15649e461234705a7a72e8c17 100644
--- a/include/obj/NiBoolData.h
+++ b/include/obj/NiBoolData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiBoolData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBoolInterpolator.h b/include/obj/NiBoolInterpolator.h
index b3d3bd9d861ab6494197f566dffc1458438f7692..4bd83ee59e111bc9dc95c64d24ce02dfc9686970 100644
--- a/include/obj/NiBoolInterpolator.h
+++ b/include/obj/NiBoolInterpolator.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiBoolInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBoolTimelineInterpolator.h b/include/obj/NiBoolTimelineInterpolator.h
index c2bd46898b8cda009e01d08623db6c457f8056d4..e020983ece9c6102a59beb308a86d46e91b282ff 100644
--- a/include/obj/NiBoolTimelineInterpolator.h
+++ b/include/obj/NiBoolTimelineInterpolator.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiBoolTimelineInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiBooleanExtraData.h b/include/obj/NiBooleanExtraData.h
index c5ccb7607dd73c55f8adc82dfc8c081fbda747f3..64a2d2868dd270429c1f937a9e659e7bd6866d86 100644
--- a/include/obj/NiBooleanExtraData.h
+++ b/include/obj/NiBooleanExtraData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiBooleanExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiCamera.h b/include/obj/NiCamera.h
index 0bc365a0825ee6d8fb9f52e1b2a20c94e51b7fe1..5e91498099445946531c579536b45f35beab2490 100644
--- a/include/obj/NiCamera.h
+++ b/include/obj/NiCamera.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiCamera();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiClod.h b/include/obj/NiClod.h
index 7bb65198f391c4f09de5e92cae3bba71bf9850b5..a24d1b35f7acb15797d18f8c61612ff95f8ba0f4 100644
--- a/include/obj/NiClod.h
+++ b/include/obj/NiClod.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiClod();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiClodData.h b/include/obj/NiClodData.h
index 59c51185ba2c3f0d240f000b4765d5446df64a26..3c3c5795cafaa7780b5a69d957cbc7d3db261323 100644
--- a/include/obj/NiClodData.h
+++ b/include/obj/NiClodData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiClodData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiClodSkinInstance.h b/include/obj/NiClodSkinInstance.h
index 8a1d8aea0a5a625d609cd115248a152177ed6ea3..6a14fde77684780dfadf931e5038db76f6d7bef4 100644
--- a/include/obj/NiClodSkinInstance.h
+++ b/include/obj/NiClodSkinInstance.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiClodSkinInstance();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiCollisionData.h b/include/obj/NiCollisionData.h
index 74ede186e7aa8b6559bcf7d02f9f38564eaafde2..38d3b6287873ed5fe8327c949fb052ed41a082ba 100644
--- a/include/obj/NiCollisionData.h
+++ b/include/obj/NiCollisionData.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiCollisionData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiCollisionObject.h b/include/obj/NiCollisionObject.h
index 07303f1529a8fed2a8cbb74846c55c5f4babdde9..cf26860d5ff2fe371cee8ab866631e250ecf786f 100644
--- a/include/obj/NiCollisionObject.h
+++ b/include/obj/NiCollisionObject.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiCollisionObject();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiColorData.h b/include/obj/NiColorData.h
index 8de64eecbb0947c9509f9c678d522f4915ca7eb2..3833fa8c9b0b6cbdfe70bdd900e8c8e9320882d2 100644
--- a/include/obj/NiColorData.h
+++ b/include/obj/NiColorData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiColorData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiColorExtraData.h b/include/obj/NiColorExtraData.h
index 2c034e935533e0c56c130c49297a7a907094edb7..5452b6949c55fb2f20b65c9924b56944bee86306 100644
--- a/include/obj/NiColorExtraData.h
+++ b/include/obj/NiColorExtraData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiColorExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiControllerManager.h b/include/obj/NiControllerManager.h
index 264fdf57dba544d1cad8c74171aeffcc58382f55..cbf5692aee88109ab4459ca9faea1d1b182f2966 100644
--- a/include/obj/NiControllerManager.h
+++ b/include/obj/NiControllerManager.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiControllerManager();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiControllerSequence.h b/include/obj/NiControllerSequence.h
index c8d4a5442ad9609e9b819e4c96dc778f8bb53e29..45b9ad93358d28cdecaf44a6a868f422189618b7 100644
--- a/include/obj/NiControllerSequence.h
+++ b/include/obj/NiControllerSequence.h
@@ -32,6 +32,7 @@ public:
 	NIFLIB_API ~NiControllerSequence();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiDefaultAVObjectPalette.h b/include/obj/NiDefaultAVObjectPalette.h
index 527aa3a54877e7c6145463c7d749571d42f6be4e..4ec328ec3285d17ac366c665bf6562cbc6ecea86 100644
--- a/include/obj/NiDefaultAVObjectPalette.h
+++ b/include/obj/NiDefaultAVObjectPalette.h
@@ -27,6 +27,7 @@ public:
 	NIFLIB_API ~NiDefaultAVObjectPalette();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiDirectionalLight.h b/include/obj/NiDirectionalLight.h
index 0fc79ddd7ef0f61bcb28385d853bfdce74a3d4b6..f8cfab3dc07cf4976056ea8b07d55b6f166e37d5 100644
--- a/include/obj/NiDirectionalLight.h
+++ b/include/obj/NiDirectionalLight.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiDirectionalLight();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiDitherProperty.h b/include/obj/NiDitherProperty.h
index aa124fe8ab078740bb25144a789ce502f9bb5cdd..7313c753389fb53016b80dbbd8bfa46813101d40 100644
--- a/include/obj/NiDitherProperty.h
+++ b/include/obj/NiDitherProperty.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiDitherProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiDynamicEffect.h b/include/obj/NiDynamicEffect.h
index f348ac36a5732c341b406b884ec3514b5832b0e8..679ac192f0a6741ea961a7e788c71cba1025d709 100644
--- a/include/obj/NiDynamicEffect.h
+++ b/include/obj/NiDynamicEffect.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiDynamicEffect();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiExtraData.h b/include/obj/NiExtraData.h
index 849169512a8ba1677ce26c25e49506d48ceb6e1f..e0d4cf5f232b38f761a7fa0185688dd25158f426 100644
--- a/include/obj/NiExtraData.h
+++ b/include/obj/NiExtraData.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiFlipController.h b/include/obj/NiFlipController.h
index 47efe7c11b8a82bec65aee94ac3ef63bfba5ebe0..e8d50c8818e587f85fa551164b6960f384ac09fd 100644
--- a/include/obj/NiFlipController.h
+++ b/include/obj/NiFlipController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiFlipController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiFloatData.h b/include/obj/NiFloatData.h
index 5d0c048378e2423152336c9675e6b64fe208cca7..de46879a9a8f5d5404a1d827563194b41d619498 100644
--- a/include/obj/NiFloatData.h
+++ b/include/obj/NiFloatData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiFloatData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiFloatExtraData.h b/include/obj/NiFloatExtraData.h
index 77284aff113648eaffe2b97df50231b9bb3029af..662bc69f75c16c0272039d1be718fd6cae3e9679 100644
--- a/include/obj/NiFloatExtraData.h
+++ b/include/obj/NiFloatExtraData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiFloatExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiFloatExtraDataController.h b/include/obj/NiFloatExtraDataController.h
index 2f7c9b399d9aa108facccd2ea4171973d8c6012c..5d19feef7786520a089401d510df5178657f274b 100644
--- a/include/obj/NiFloatExtraDataController.h
+++ b/include/obj/NiFloatExtraDataController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiFloatExtraDataController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiFloatInterpolator.h b/include/obj/NiFloatInterpolator.h
index 9e2f25c3a0abeda23921929f49e7e4bafd7b4823..460a34bd21378bd9fdeeb42dd2c8b42dd49d48dd 100644
--- a/include/obj/NiFloatInterpolator.h
+++ b/include/obj/NiFloatInterpolator.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiFloatInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiFloatsExtraData.h b/include/obj/NiFloatsExtraData.h
index d0b6082c986ed85a673ce2f3b98dc546d99e57fb..ff815c3e3a2e1683d6e5b4f8f4acf330764d7ef7 100644
--- a/include/obj/NiFloatsExtraData.h
+++ b/include/obj/NiFloatsExtraData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiFloatsExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiFogProperty.h b/include/obj/NiFogProperty.h
index b6d26ea594b2f1c86d370665948fe07d38a0c20f..c71ffbf0085bd97700f7c47de6532d6b34ca93ae 100644
--- a/include/obj/NiFogProperty.h
+++ b/include/obj/NiFogProperty.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiFogProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiGeomMorpherController.h b/include/obj/NiGeomMorpherController.h
index 2cad8ec08b9bd974e987fae46a4615804dc22ef1..ebc058080621ed7ce95edc0060797cfa8ac2e04f 100644
--- a/include/obj/NiGeomMorpherController.h
+++ b/include/obj/NiGeomMorpherController.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiGeomMorpherController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiGeometry.h b/include/obj/NiGeometry.h
index f1f77c939ff2b653f69e71bef2cba9ae0c8b7750..00e8c0313cc267ff1f26771f3beb2443ce63362c 100644
--- a/include/obj/NiGeometry.h
+++ b/include/obj/NiGeometry.h
@@ -34,6 +34,7 @@ public:
 	NIFLIB_API ~NiGeometry();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiGeometryData.h b/include/obj/NiGeometryData.h
index e18a6cc12ee87d18ca4bc8255ca87a99fe2b3314..b268864faf4ef04ec8c13ac0891c5d5a1164f76b 100644
--- a/include/obj/NiGeometryData.h
+++ b/include/obj/NiGeometryData.h
@@ -32,6 +32,7 @@ public:
 	NIFLIB_API ~NiGeometryData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiGravity.h b/include/obj/NiGravity.h
index bec76a57bf43ca1468649bb5f9e962aabdd91c34..39f0fe7486c33211d46153ce0e558cfb38e8909f 100644
--- a/include/obj/NiGravity.h
+++ b/include/obj/NiGravity.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiGravity();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiImage.h b/include/obj/NiImage.h
index 641a21e57b5efcf7f7bc3f253dadf16c1a45041f..5981963685f15fe66f5e0964da5ae2063f6e2fd1 100644
--- a/include/obj/NiImage.h
+++ b/include/obj/NiImage.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiImage();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiIntegerExtraData.h b/include/obj/NiIntegerExtraData.h
index 93932ae23163fa1b995759e338960d0263976aac..1b12207f9a41ab941a9993159d3b71a17dd5fe6c 100644
--- a/include/obj/NiIntegerExtraData.h
+++ b/include/obj/NiIntegerExtraData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiIntegerExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiIntegersExtraData.h b/include/obj/NiIntegersExtraData.h
index 51421ecb1f9891dafd19dd3d02c86a148e0f6acf..1e46530b1a5d0558fb822f791b609fd06f75a7b5 100644
--- a/include/obj/NiIntegersExtraData.h
+++ b/include/obj/NiIntegersExtraData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiIntegersExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiInterpolator.h b/include/obj/NiInterpolator.h
index 97259320170568ea6b659b3f7630b3b2f4f64eea..032582e7e0989873d26cc6f494bc81f60552083f 100644
--- a/include/obj/NiInterpolator.h
+++ b/include/obj/NiInterpolator.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiKeyframeController.h b/include/obj/NiKeyframeController.h
index 2dfac325154cd0e72a5f4e48cc753bd1c1cdeb22..2c0e43ee309b30836d805557dcfbd612f6fd437c 100644
--- a/include/obj/NiKeyframeController.h
+++ b/include/obj/NiKeyframeController.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiKeyframeController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiKeyframeData.h b/include/obj/NiKeyframeData.h
index f198f58e2373d75ee6f2cddbdfab31adbe9895fc..c764107a35147752c2a641ce7061ca2c87701775 100644
--- a/include/obj/NiKeyframeData.h
+++ b/include/obj/NiKeyframeData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiKeyframeData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiLODData.h b/include/obj/NiLODData.h
index 349c94c4803bdb3e26e8fd12e90cb8d1d804d398..28c077bc8078acb1041337f4bb6e561954bed787 100644
--- a/include/obj/NiLODData.h
+++ b/include/obj/NiLODData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiLODData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiLODNode.h b/include/obj/NiLODNode.h
index 47c559d0e4385d1355544158d3279055f81cb2ca..152b027e27118f6fb065486f2f446601e2bd5901 100644
--- a/include/obj/NiLODNode.h
+++ b/include/obj/NiLODNode.h
@@ -31,6 +31,7 @@ public:
 	NIFLIB_API ~NiLODNode();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiLight.h b/include/obj/NiLight.h
index dbbaa8d29246b8dbbb6c54d6584a0753efe82f10..e4995223f72e66428c0a7e3283c8427be0043f62 100644
--- a/include/obj/NiLight.h
+++ b/include/obj/NiLight.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiLight();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiLightColorController.h b/include/obj/NiLightColorController.h
index 2544f8a08b12f1a0bc495593905be4dca5d410db..7cb4fd21d0f504e390a5504cfcfb38b78e2ca4e6 100644
--- a/include/obj/NiLightColorController.h
+++ b/include/obj/NiLightColorController.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiLightColorController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiLightDimmerController.h b/include/obj/NiLightDimmerController.h
index 04d45aa01a1124e7d54cc4120f9316eccedbd351..1b99c98337183d0a1e4f56aeddc9e8e1474588d5 100644
--- a/include/obj/NiLightDimmerController.h
+++ b/include/obj/NiLightDimmerController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiLightDimmerController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiLookAtController.h b/include/obj/NiLookAtController.h
index 4f8dae8685e0425ca5f225e602eb78e5bc5f39db..8882650820d05e012b18168b5c3168a9cf8a1766 100644
--- a/include/obj/NiLookAtController.h
+++ b/include/obj/NiLookAtController.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiLookAtController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiLookAtInterpolator.h b/include/obj/NiLookAtInterpolator.h
index e525e06ca49a97aeaa6060cddd0f7fb89ab14281..2651e3b5baa23f564d4a783184cf2fbeb0c520b5 100644
--- a/include/obj/NiLookAtInterpolator.h
+++ b/include/obj/NiLookAtInterpolator.h
@@ -30,6 +30,7 @@ public:
 	NIFLIB_API ~NiLookAtInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiMaterialColorController.h b/include/obj/NiMaterialColorController.h
index 2ca593b7d3c2631918c4f42f90d781477d259768..cd1c902f1e6eb822193929d8db5327af660bc324 100644
--- a/include/obj/NiMaterialColorController.h
+++ b/include/obj/NiMaterialColorController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiMaterialColorController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiMaterialProperty.h b/include/obj/NiMaterialProperty.h
index 96bb073cf9e15c21a7ca77bce5eea8537bcc5c88..374ae6ff1ae77deb8e3926b84de33d60c4685a4c 100644
--- a/include/obj/NiMaterialProperty.h
+++ b/include/obj/NiMaterialProperty.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiMaterialProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiMeshPSysData.h b/include/obj/NiMeshPSysData.h
index d97b4041f1e78f69c5e1ab4d81e47cf1bfd6f850..389f58e6d553010dcb7a3bbc05d5189d316eb8d9 100644
--- a/include/obj/NiMeshPSysData.h
+++ b/include/obj/NiMeshPSysData.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiMeshPSysData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiMeshParticleSystem.h b/include/obj/NiMeshParticleSystem.h
index bcc234d115e28db167a0162898a3613b3878e394..3c203f465e0079d8707afec92449b673151aed14 100644
--- a/include/obj/NiMeshParticleSystem.h
+++ b/include/obj/NiMeshParticleSystem.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiMeshParticleSystem();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiMorphData.h b/include/obj/NiMorphData.h
index cc95c43e710c5c5858e8090ff6575d1d2f8f0460..0e22d64ab333241b43e1e9fc9994c9b6ba55aa2d 100644
--- a/include/obj/NiMorphData.h
+++ b/include/obj/NiMorphData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiMorphData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiMultiTargetTransformController.h b/include/obj/NiMultiTargetTransformController.h
index 9689358c352a46a828c78e13ac8c78f7a9003735..05cb0662dc22640df11e09e17654b016fb19c732 100644
--- a/include/obj/NiMultiTargetTransformController.h
+++ b/include/obj/NiMultiTargetTransformController.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~NiMultiTargetTransformController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiNode.h b/include/obj/NiNode.h
index 910e4cfd880b5e34316bf2022e9382184ae646dd..ef8fc8d57917d8c7b27490da8ba33178c1738351 100644
--- a/include/obj/NiNode.h
+++ b/include/obj/NiNode.h
@@ -31,6 +31,7 @@ public:
 	NIFLIB_API ~NiNode();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiObject.h b/include/obj/NiObject.h
index 51c6eb8aa640f9f164a9a09901ddb463aae28b6c..aef9fddcd841ecd7ae42c9b847912b6431c3b945 100644
--- a/include/obj/NiObject.h
+++ b/include/obj/NiObject.h
@@ -130,6 +130,7 @@ public:
 	NIFLIB_HIDDEN virtual void FixLinks( const map<unsigned int,NiObjectRef> & objects, list<unsigned int> & link_stack, const NifInfo & info ) {}
 
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 private:
 	
 	mutable unsigned int _ref_count;
diff --git a/include/obj/NiObjectNET.h b/include/obj/NiObjectNET.h
index e06dd403be39e97e0586c4d07591d1563ce6e372..03f05770a8aa1f12aae90dccf83d9bf8a54f3cb7 100644
--- a/include/obj/NiObjectNET.h
+++ b/include/obj/NiObjectNET.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiObjectNET();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysAgeDeathModifier.h b/include/obj/NiPSysAgeDeathModifier.h
index e604f686b4df710aff2e99f6c8a09629aa78b6a4..b7b9340074fa5095e3ad12cf5996d2ab744db116 100644
--- a/include/obj/NiPSysAgeDeathModifier.h
+++ b/include/obj/NiPSysAgeDeathModifier.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiPSysAgeDeathModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysBombModifier.h b/include/obj/NiPSysBombModifier.h
index 0784f2b53c15585efbe251d68f5d70cc0ec15e0e..0b4683e6e7edb63979dd7bf0385561c7f13fd646 100644
--- a/include/obj/NiPSysBombModifier.h
+++ b/include/obj/NiPSysBombModifier.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiPSysBombModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysBoundUpdateModifier.h b/include/obj/NiPSysBoundUpdateModifier.h
index 91e67eb4eed0a3a8db1665e0fe2529f5108f18b6..c93c67e0601a4822513b1ec6291404176f03373b 100644
--- a/include/obj/NiPSysBoundUpdateModifier.h
+++ b/include/obj/NiPSysBoundUpdateModifier.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysBoundUpdateModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysBoxEmitter.h b/include/obj/NiPSysBoxEmitter.h
index 3858e39dcb83536c8de82ba05633f59d036b963d..6245aa20fb4be541e93d96a641e22257e899cfcd 100644
--- a/include/obj/NiPSysBoxEmitter.h
+++ b/include/obj/NiPSysBoxEmitter.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysBoxEmitter();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysColliderManager.h b/include/obj/NiPSysColliderManager.h
index 61b95d1c9c5e14617c34c19b47a2f1150ee3bb0d..89074efb4042b780ae8c0fa1adcbdd74983d32c0 100644
--- a/include/obj/NiPSysColliderManager.h
+++ b/include/obj/NiPSysColliderManager.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiPSysColliderManager();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysColorModifier.h b/include/obj/NiPSysColorModifier.h
index 6ca73a1bd829538da94b1677bdaf0fa325a79871..5b9b404f74953313fae1fba6f719e509c0ce5698 100644
--- a/include/obj/NiPSysColorModifier.h
+++ b/include/obj/NiPSysColorModifier.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiPSysColorModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysCylinderEmitter.h b/include/obj/NiPSysCylinderEmitter.h
index c3f2c5c34b15acc8ad3fe94d15586eea960a19de..8631657979cbbb9e8d37138dcf58f3a9a7fbb693 100644
--- a/include/obj/NiPSysCylinderEmitter.h
+++ b/include/obj/NiPSysCylinderEmitter.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysCylinderEmitter();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysData.h b/include/obj/NiPSysData.h
index 8621b1dc6c2b1234c971427f9d96faff0eb25ed5..fe7e5acc527a9542ac4af0b350a3b4117fb68f24 100644
--- a/include/obj/NiPSysData.h
+++ b/include/obj/NiPSysData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiPSysData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysDragModifier.h b/include/obj/NiPSysDragModifier.h
index 10cf987f5cef0e8180ac55162d870d6bb9586d79..b9c6aa1c52bc985a561b82d45bd0879858cad1ae 100644
--- a/include/obj/NiPSysDragModifier.h
+++ b/include/obj/NiPSysDragModifier.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiPSysDragModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitter.h b/include/obj/NiPSysEmitter.h
index 91614700f08b61d9fa84b5810e0892667cb00a83..824f700e8f380a577e9a1d5d3e32965f3164389f 100644
--- a/include/obj/NiPSysEmitter.h
+++ b/include/obj/NiPSysEmitter.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysEmitter();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitterCtlr.h b/include/obj/NiPSysEmitterCtlr.h
index cb74e99c8b6030d420466547714b420354ad7c6c..d2a26de2d723452d0ff60521b543c62d89f09f6c 100644
--- a/include/obj/NiPSysEmitterCtlr.h
+++ b/include/obj/NiPSysEmitterCtlr.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiPSysEmitterCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitterCtlrData.h b/include/obj/NiPSysEmitterCtlrData.h
index ec7c66d03b92e615f4b9c3f1645c8ea356106e16..6c22d0e082f839c077cb7a8fc750164bbd21a8d2 100644
--- a/include/obj/NiPSysEmitterCtlrData.h
+++ b/include/obj/NiPSysEmitterCtlrData.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~NiPSysEmitterCtlrData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitterDeclinationCtlr.h b/include/obj/NiPSysEmitterDeclinationCtlr.h
index 2b8111118048c962de97a33068e436e9d3869b40..b8d5c46a7691e8a8942334ac9ab3f91a676a44d7 100644
--- a/include/obj/NiPSysEmitterDeclinationCtlr.h
+++ b/include/obj/NiPSysEmitterDeclinationCtlr.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysEmitterDeclinationCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitterDeclinationVarCtlr.h b/include/obj/NiPSysEmitterDeclinationVarCtlr.h
index 6b6729a71dc2e9fde214b94e30c96121b5da5f7e..e5ccc027c3c71ff1e63d03c5049f5620656ef267 100644
--- a/include/obj/NiPSysEmitterDeclinationVarCtlr.h
+++ b/include/obj/NiPSysEmitterDeclinationVarCtlr.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysEmitterDeclinationVarCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitterInitialRadiusCtlr.h b/include/obj/NiPSysEmitterInitialRadiusCtlr.h
index e567d29b6c2f04efa245d800e46680ab04dcabcd..e83f1ec393662275bd2e9443f48976fa3e8347c9 100644
--- a/include/obj/NiPSysEmitterInitialRadiusCtlr.h
+++ b/include/obj/NiPSysEmitterInitialRadiusCtlr.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysEmitterInitialRadiusCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitterLifeSpanCtlr.h b/include/obj/NiPSysEmitterLifeSpanCtlr.h
index 01f54fc597409b41b2ada9db5b5757ee95e8da75..f48ea3907ead39a2a048733dfc0919df12a878a6 100644
--- a/include/obj/NiPSysEmitterLifeSpanCtlr.h
+++ b/include/obj/NiPSysEmitterLifeSpanCtlr.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~NiPSysEmitterLifeSpanCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysEmitterSpeedCtlr.h b/include/obj/NiPSysEmitterSpeedCtlr.h
index 8578233c52d05126bf69565cc9b3dbc6cfac82cb..72e72afedfab52853b2bbb4ab77b3d5026d2a3e8 100644
--- a/include/obj/NiPSysEmitterSpeedCtlr.h
+++ b/include/obj/NiPSysEmitterSpeedCtlr.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiPSysEmitterSpeedCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysGravityModifier.h b/include/obj/NiPSysGravityModifier.h
index e590eb08a62529251ac0f0eba72943b634063365..3cd6a8e699f8bc99fa3d5f4207469ef950868564 100644
--- a/include/obj/NiPSysGravityModifier.h
+++ b/include/obj/NiPSysGravityModifier.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiPSysGravityModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysGravityStrengthCtlr.h b/include/obj/NiPSysGravityStrengthCtlr.h
index 6ea0d1474a69c4ed1ca37125a3ea96f4e588ab36..96cb7fa5c4b0415ef01a2fbe1612afd5b5989307 100644
--- a/include/obj/NiPSysGravityStrengthCtlr.h
+++ b/include/obj/NiPSysGravityStrengthCtlr.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiPSysGravityStrengthCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysGrowFadeModifier.h b/include/obj/NiPSysGrowFadeModifier.h
index 970a0f2b1c338013d16106f5dec9ce29efc6ab4a..864347ee908a7d4c09561589e5f5c805f5b50a93 100644
--- a/include/obj/NiPSysGrowFadeModifier.h
+++ b/include/obj/NiPSysGrowFadeModifier.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysGrowFadeModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysMeshEmitter.h b/include/obj/NiPSysMeshEmitter.h
index a6facb020f421579d6a6f23229aa2408ae2f9c96..54b1cdfa878aef6d67be7988964d9d4875ed9064 100644
--- a/include/obj/NiPSysMeshEmitter.h
+++ b/include/obj/NiPSysMeshEmitter.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiPSysMeshEmitter();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysMeshUpdateModifier.h b/include/obj/NiPSysMeshUpdateModifier.h
index e70660ac7d6609b572bb14b84a74d072d5c3fe49..c32e856c3bc34ecf1c477a95808ee448d7f8f168 100644
--- a/include/obj/NiPSysMeshUpdateModifier.h
+++ b/include/obj/NiPSysMeshUpdateModifier.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiPSysMeshUpdateModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysModifier.h b/include/obj/NiPSysModifier.h
index f82b1ddca12f7d3619eb687f7cf78fe6dec2d37e..b73f947cc287a6f0f371560edd1b92c6f911018b 100644
--- a/include/obj/NiPSysModifier.h
+++ b/include/obj/NiPSysModifier.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiPSysModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysModifierActiveCtlr.h b/include/obj/NiPSysModifierActiveCtlr.h
index de7a623bffd28c2caf1292e5b5cf08c6d6a63421..f968c46cbd9442da03fa6c75817eb4a8ea411c6e 100644
--- a/include/obj/NiPSysModifierActiveCtlr.h
+++ b/include/obj/NiPSysModifierActiveCtlr.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysModifierActiveCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysPlanarCollider.h b/include/obj/NiPSysPlanarCollider.h
index 3a24aef791e5c344ad4f681db7ff30541b5e3fcf..55e503d6d8ee6c24686fb686496dada5f443c50e 100644
--- a/include/obj/NiPSysPlanarCollider.h
+++ b/include/obj/NiPSysPlanarCollider.h
@@ -30,6 +30,7 @@ public:
 	NIFLIB_API ~NiPSysPlanarCollider();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysPositionModifier.h b/include/obj/NiPSysPositionModifier.h
index ce5e0490437079cc4fe534e3e16f33bfd60a7b75..0c3ea45bf5721f31785d5eb3859d583ba75448c3 100644
--- a/include/obj/NiPSysPositionModifier.h
+++ b/include/obj/NiPSysPositionModifier.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiPSysPositionModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysResetOnLoopCtlr.h b/include/obj/NiPSysResetOnLoopCtlr.h
index a063da9eb381e9b556999fed2179eaefc454c576..067b7c7fdd2fcde1af950bb44e93c4be1288c42b 100644
--- a/include/obj/NiPSysResetOnLoopCtlr.h
+++ b/include/obj/NiPSysResetOnLoopCtlr.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysResetOnLoopCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysRotationModifier.h b/include/obj/NiPSysRotationModifier.h
index 0e1f744932a03387f079dd3fc4a08d0f01f6713d..cede80f3c365904308b352bdd417e7cc7c154d81 100644
--- a/include/obj/NiPSysRotationModifier.h
+++ b/include/obj/NiPSysRotationModifier.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysRotationModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysSpawnModifier.h b/include/obj/NiPSysSpawnModifier.h
index 699b3f3b888d6db8a22e52a26ed01110a22efc02..3f68f38c8c5dc62849178f6ae812cc40dbc6f61e 100644
--- a/include/obj/NiPSysSpawnModifier.h
+++ b/include/obj/NiPSysSpawnModifier.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysSpawnModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysSphereEmitter.h b/include/obj/NiPSysSphereEmitter.h
index 084d280d9edbacd118c0b5f345316b1b40a3437e..4df9cbeee1d25f01c99d7332eeea68266f372b2d 100644
--- a/include/obj/NiPSysSphereEmitter.h
+++ b/include/obj/NiPSysSphereEmitter.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysSphereEmitter();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysUpdateCtlr.h b/include/obj/NiPSysUpdateCtlr.h
index 33bc64cedb8e37d973985ca82d40ba28e8e45025..c631f4f127fe8ca42d827f13f8327ba079615ac2 100644
--- a/include/obj/NiPSysUpdateCtlr.h
+++ b/include/obj/NiPSysUpdateCtlr.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPSysUpdateCtlr();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPSysVolumeEmitter.h b/include/obj/NiPSysVolumeEmitter.h
index 823848a8bb46cec7cb0ba54e73bf5a1e1411b7b8..285248d89dec02524d4c8f7e0bb77d308493e2c7 100644
--- a/include/obj/NiPSysVolumeEmitter.h
+++ b/include/obj/NiPSysVolumeEmitter.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiPSysVolumeEmitter();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPalette.h b/include/obj/NiPalette.h
index e03513273051dc03e17de900e1ffd05bf3819050..c28d8197aab1d6ee69c78bb791e93bb87dba2c52 100644
--- a/include/obj/NiPalette.h
+++ b/include/obj/NiPalette.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiPalette();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleBomb.h b/include/obj/NiParticleBomb.h
index df1c2827d45d0d88b6f232106acd645fdbf007c5..434466edc3944b0dae273c5812cd2e4797849411 100644
--- a/include/obj/NiParticleBomb.h
+++ b/include/obj/NiParticleBomb.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiParticleBomb();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleColorModifier.h b/include/obj/NiParticleColorModifier.h
index 19d53eb9cc698db3251118a765d20b058f32ddb9..c5b88ecdaa0c08509b2f9c266281c2fa8f19df02 100644
--- a/include/obj/NiParticleColorModifier.h
+++ b/include/obj/NiParticleColorModifier.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiParticleColorModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleGrowFade.h b/include/obj/NiParticleGrowFade.h
index ff61ff6ae7e9b5ceef01373946d46e73b7209354..37787c8f2102c42ec2c01c0945fc45a1507a0122 100644
--- a/include/obj/NiParticleGrowFade.h
+++ b/include/obj/NiParticleGrowFade.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~NiParticleGrowFade();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleMeshModifier.h b/include/obj/NiParticleMeshModifier.h
index 5c6cbfd8777457f9563f398c93ed41b04ad05fed..0c35e1e3ce3aaded22a080fdd8730915e1ba0e61 100644
--- a/include/obj/NiParticleMeshModifier.h
+++ b/include/obj/NiParticleMeshModifier.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiParticleMeshModifier();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleMeshes.h b/include/obj/NiParticleMeshes.h
index 8df655042c8e0707f205df4ddd5675145131c623..7209940a8029b258d8eaf7e74c8430372d897da3 100644
--- a/include/obj/NiParticleMeshes.h
+++ b/include/obj/NiParticleMeshes.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiParticleMeshes();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleMeshesData.h b/include/obj/NiParticleMeshesData.h
index defe206b3124d2ccb2aecbea57de8f5e92eb8ae5..8401766954d2e927624a73dadc625288ada41aa4 100644
--- a/include/obj/NiParticleMeshesData.h
+++ b/include/obj/NiParticleMeshesData.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiParticleMeshesData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleRotation.h b/include/obj/NiParticleRotation.h
index f9a400fec57974790c31edfa3214104f8712ad14..5f3c808ec71c85f430fe3346fc7f54170adf3a0f 100644
--- a/include/obj/NiParticleRotation.h
+++ b/include/obj/NiParticleRotation.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiParticleRotation();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleSystem.h b/include/obj/NiParticleSystem.h
index 9332a7c25ee11afea10e2eb998ab1ed9a147fa71..ee7cba94a0599c4e48d01a4995db3ba99408d358 100644
--- a/include/obj/NiParticleSystem.h
+++ b/include/obj/NiParticleSystem.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiParticleSystem();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticleSystemController.h b/include/obj/NiParticleSystemController.h
index a02c2ed26f56b7e4a35992221d7a2ef2cdc9a3b8..a8f8da7f427140722d7dcb9069e4d56a13b52f79 100644
--- a/include/obj/NiParticleSystemController.h
+++ b/include/obj/NiParticleSystemController.h
@@ -31,6 +31,7 @@ public:
 	NIFLIB_API ~NiParticleSystemController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticles.h b/include/obj/NiParticles.h
index 08cfef00faca7b3b902b4bfe5acebf3ee9b344ff..20987056745fd0f03565579695f005a7ce2d5f56 100644
--- a/include/obj/NiParticles.h
+++ b/include/obj/NiParticles.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiParticles();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiParticlesData.h b/include/obj/NiParticlesData.h
index e3b002d596d66f38c791adb8b691ca2f17c6bfc6..9b3b258ff867e9f1093644aa4e702b9cb6e46626 100644
--- a/include/obj/NiParticlesData.h
+++ b/include/obj/NiParticlesData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiParticlesData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPathController.h b/include/obj/NiPathController.h
index 2cf97588f4dda1153659ab9cf3b0cc5ae4814fcd..2a031ac68bcc4c715fec8dc0e0484273cc6bda54 100644
--- a/include/obj/NiPathController.h
+++ b/include/obj/NiPathController.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiPathController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPathInterpolator.h b/include/obj/NiPathInterpolator.h
index 0aedd3a8a7eb363cd1e1304c3af5ca3c480ee981..44c2aa224ddea483e85b4b667294b1eeaa7e2be4 100644
--- a/include/obj/NiPathInterpolator.h
+++ b/include/obj/NiPathInterpolator.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiPathInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPixelData.h b/include/obj/NiPixelData.h
index d323760e36017fc3500fed54a2c0a84415eb0514..3675ffbe4349c6eca3897086ceb357fc5fa90509 100644
--- a/include/obj/NiPixelData.h
+++ b/include/obj/NiPixelData.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiPixelData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPlanarCollider.h b/include/obj/NiPlanarCollider.h
index baf35fb404840064a7d77fadca2db7fe38fc5348..b0ddb27d5cc3a56964c73c5846017725e33d0b51 100644
--- a/include/obj/NiPlanarCollider.h
+++ b/include/obj/NiPlanarCollider.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiPlanarCollider();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPoint3Interpolator.h b/include/obj/NiPoint3Interpolator.h
index dfc9b5fc5b9f5d7381be712f39da4969bfeaf30c..797b835ba65093e9f0cb6daee478672881fae91a 100644
--- a/include/obj/NiPoint3Interpolator.h
+++ b/include/obj/NiPoint3Interpolator.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiPoint3Interpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPointLight.h b/include/obj/NiPointLight.h
index 181f54b5166a3bcfe0d25bf6b9d6414e3e26b389..fd53384e31b370af805b1e8ce2c683ca629fb263 100644
--- a/include/obj/NiPointLight.h
+++ b/include/obj/NiPointLight.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiPointLight();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiPosData.h b/include/obj/NiPosData.h
index b800ee8d5a640be5c71102e963008b0d8c08fddb..f44a48c725509a1950ac6373fd4a7ad9da906bbc 100644
--- a/include/obj/NiPosData.h
+++ b/include/obj/NiPosData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiPosData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiProperty.h b/include/obj/NiProperty.h
index 6f42d0688ed13aa03e761e871964899867ff8b30..9f443741705467506c6699a671612037d8bf1a20 100644
--- a/include/obj/NiProperty.h
+++ b/include/obj/NiProperty.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiRangeLODData.h b/include/obj/NiRangeLODData.h
index 238eca14c57693a16b5b40a1baa5e38bbb2db7f0..ef26bda05ffb30ddaeb504d578d6019ee3415ed6 100644
--- a/include/obj/NiRangeLODData.h
+++ b/include/obj/NiRangeLODData.h
@@ -27,6 +27,7 @@ public:
 	NIFLIB_API ~NiRangeLODData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiRotatingParticles.h b/include/obj/NiRotatingParticles.h
index 63cf99d5732db662497155663e47ef423b42a3ba..d16fcd22af145409b795802dfae374c43bcc182d 100644
--- a/include/obj/NiRotatingParticles.h
+++ b/include/obj/NiRotatingParticles.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiRotatingParticles();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiRotatingParticlesData.h b/include/obj/NiRotatingParticlesData.h
index e8dd55763dd06d9c9bcb2e50250d83595403d2fb..7865d0e0de8dd711a451de80d2745d8d4ac8ac3c 100644
--- a/include/obj/NiRotatingParticlesData.h
+++ b/include/obj/NiRotatingParticlesData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiRotatingParticlesData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiScreenLODData.h b/include/obj/NiScreenLODData.h
index b58fc7a353be19f5e7d5753ec03e8be84b63e7c2..2d1bfc308d3d60802f2724b08e85191777c32518 100644
--- a/include/obj/NiScreenLODData.h
+++ b/include/obj/NiScreenLODData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiScreenLODData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSequenceStreamHelper.h b/include/obj/NiSequenceStreamHelper.h
index e0a2d8bbd8b48899aee6c331634afe957bce49e9..64c3be50cd64429f210d0af9d38fa037a0977bca 100644
--- a/include/obj/NiSequenceStreamHelper.h
+++ b/include/obj/NiSequenceStreamHelper.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiSequenceStreamHelper();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiShadeProperty.h b/include/obj/NiShadeProperty.h
index 5ee61161ec7b6834af47070e52a594f076b6d0ec..aef3e932dbd6efd73e45ad1fe0119d7265c47a41 100644
--- a/include/obj/NiShadeProperty.h
+++ b/include/obj/NiShadeProperty.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiShadeProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSingleInterpolatorController.h b/include/obj/NiSingleInterpolatorController.h
index 7a99f2c778a623dfea0207c52aba5c7bfb70a9bd..39671b7c440e1587c59edd5e19e33faa3016d214 100644
--- a/include/obj/NiSingleInterpolatorController.h
+++ b/include/obj/NiSingleInterpolatorController.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiSingleInterpolatorController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSkinData.h b/include/obj/NiSkinData.h
index 8d3ecff2bf52a60c55bdaf0068fcdbe6459aceba..163cab4dea77a29c5966b3f0c9dd98e3c5439e11 100644
--- a/include/obj/NiSkinData.h
+++ b/include/obj/NiSkinData.h
@@ -37,6 +37,7 @@ public:
 
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSkinInstance.h b/include/obj/NiSkinInstance.h
index c46927b6a54c9a5be61a08b27cfed9322365e791..2502e3e3af6e7c7fb19ba54e1204d8f2902d86a3 100644
--- a/include/obj/NiSkinInstance.h
+++ b/include/obj/NiSkinInstance.h
@@ -39,6 +39,7 @@ public:
 	NIFLIB_API ~NiSkinInstance();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSkinPartition.h b/include/obj/NiSkinPartition.h
index 201e07886cf90d78e228eeccca6819964e7daf7b..1ea934761aaaed445cd18716bed41c366e48dbb2 100644
--- a/include/obj/NiSkinPartition.h
+++ b/include/obj/NiSkinPartition.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiSkinPartition();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSourceTexture.h b/include/obj/NiSourceTexture.h
index 1581fd0c38d064fe2fdd62ae964efc99b772a1a0..30180bc845215f73e9847b267084b523da2b0400 100644
--- a/include/obj/NiSourceTexture.h
+++ b/include/obj/NiSourceTexture.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~NiSourceTexture();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSpecularProperty.h b/include/obj/NiSpecularProperty.h
index 2795333dc81654d26b9527829dba2186e190441b..c98a0b87e9c28e033748774e98af6c34142626cf 100644
--- a/include/obj/NiSpecularProperty.h
+++ b/include/obj/NiSpecularProperty.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiSpecularProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSphericalCollider.h b/include/obj/NiSphericalCollider.h
index 50416284a5bd17bbb8ce0139b18c5a9c4fea604a..195da308893c18478163c2788b17e6e20af9abc9 100644
--- a/include/obj/NiSphericalCollider.h
+++ b/include/obj/NiSphericalCollider.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiSphericalCollider();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiSpotLight.h b/include/obj/NiSpotLight.h
index cf7e1cab9fa600acbb36af731d4f026b45156e87..9dff8aab4910988e136898c6c79885fe9735c349 100644
--- a/include/obj/NiSpotLight.h
+++ b/include/obj/NiSpotLight.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiSpotLight();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiStencilProperty.h b/include/obj/NiStencilProperty.h
index 713f5ec1635ef6aa07678efa6daa7c773a9a2656..7cf7e12b5b7830bc23df6074c45116d1d48d9b49 100644
--- a/include/obj/NiStencilProperty.h
+++ b/include/obj/NiStencilProperty.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiStencilProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiStringExtraData.h b/include/obj/NiStringExtraData.h
index e44a0800b26955d23fd0a48e1e946779ec659837..a080f1bce111ddcb57241aff138b4b7875911eff 100644
--- a/include/obj/NiStringExtraData.h
+++ b/include/obj/NiStringExtraData.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiStringExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiStringPalette.h b/include/obj/NiStringPalette.h
index 608f30dacb2d7df7f8cb24e2966082fb986bcc57..46c1baedfe645ac904d9201179f51eb60602d829 100644
--- a/include/obj/NiStringPalette.h
+++ b/include/obj/NiStringPalette.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiStringPalette();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiStringsExtraData.h b/include/obj/NiStringsExtraData.h
index 6ea62a3e817709972ecc22e9d4514bb55226ceea..9b48c549a7e8eb443225b4cf0045dc0ec3a2f5b6 100644
--- a/include/obj/NiStringsExtraData.h
+++ b/include/obj/NiStringsExtraData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiStringsExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTextKeyExtraData.h b/include/obj/NiTextKeyExtraData.h
index 4d693baffdc81dee155c4913a7d6a641bd05d764..dda54a9699c6570bb5a932b98b7b75c7b6e6d98a 100644
--- a/include/obj/NiTextKeyExtraData.h
+++ b/include/obj/NiTextKeyExtraData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiTextKeyExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTextureEffect.h b/include/obj/NiTextureEffect.h
index 019e4acbe7ef71e120c8c623b366c3889b7764ea..057296708e721379587f38b981ad67ffd3f17f09 100644
--- a/include/obj/NiTextureEffect.h
+++ b/include/obj/NiTextureEffect.h
@@ -31,6 +31,7 @@ public:
 	NIFLIB_API ~NiTextureEffect();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTextureModeProperty.h b/include/obj/NiTextureModeProperty.h
index 161d5938efceefa0caebbc130e2eb1505359d5cc..52c467d2f50b773ec47158f49f15f92e39ffe04c 100644
--- a/include/obj/NiTextureModeProperty.h
+++ b/include/obj/NiTextureModeProperty.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiTextureModeProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTextureProperty.h b/include/obj/NiTextureProperty.h
index 20b6c475d1264e83c02803a3f2339a8dadbe7337..dceb90b48df1013675d898aa05f1e01f37da7114 100644
--- a/include/obj/NiTextureProperty.h
+++ b/include/obj/NiTextureProperty.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiTextureProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTextureTransformController.h b/include/obj/NiTextureTransformController.h
index eaa73d4db0b72161b34f24e13b72bc0dcce9a140..8c95b2306b6e9a2c0bf20eeab3d48b23bedf7f01 100644
--- a/include/obj/NiTextureTransformController.h
+++ b/include/obj/NiTextureTransformController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiTextureTransformController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTexturingProperty.h b/include/obj/NiTexturingProperty.h
index 74cb5a19c41dc73870f9f25eb954b925b1e8969d..d5ae063f4eeaa673c464dc5a10ce6e5599dfb37f 100644
--- a/include/obj/NiTexturingProperty.h
+++ b/include/obj/NiTexturingProperty.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiTexturingProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTimeController.h b/include/obj/NiTimeController.h
index 711794df330d09d6876509dfff94a2a39c9152aa..cd0f5a281bff9f0bdc8c5c7732bded8aaf65190c 100644
--- a/include/obj/NiTimeController.h
+++ b/include/obj/NiTimeController.h
@@ -27,6 +27,7 @@ public:
 	NIFLIB_API ~NiTimeController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTransformController.h b/include/obj/NiTransformController.h
index 1c0be2c41cf221a7a3087a12ccf628a9862ba1f2..e264f00cfbfac1d08c284e26cf1677ba625cb538 100644
--- a/include/obj/NiTransformController.h
+++ b/include/obj/NiTransformController.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiTransformController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTransformData.h b/include/obj/NiTransformData.h
index 2b0e1f0d585c21dfb9dfdfc1bcc8921e6e4e5bbc..a6a0cf131f687a534c09010b36ccdb2423c6728a 100644
--- a/include/obj/NiTransformData.h
+++ b/include/obj/NiTransformData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiTransformData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTransformInterpolator.h b/include/obj/NiTransformInterpolator.h
index 0e93ad3fc6875eddae9089cee3eea82f17163eb1..4b3af54618ebb7f31320989caaa04bbcea2c4fd1 100644
--- a/include/obj/NiTransformInterpolator.h
+++ b/include/obj/NiTransformInterpolator.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiTransformInterpolator();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTriBasedGeom.h b/include/obj/NiTriBasedGeom.h
index 13d1a6982e10853969b4774b55668114f0de2646..7ddab476f580b3217f82904e923dffc7e5d4b44d 100644
--- a/include/obj/NiTriBasedGeom.h
+++ b/include/obj/NiTriBasedGeom.h
@@ -27,6 +27,7 @@ public:
 	NIFLIB_API ~NiTriBasedGeom();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTriBasedGeomData.h b/include/obj/NiTriBasedGeomData.h
index 269499b39af7ca91cc5762e732600a45d93e7266..d8f0a842af09fd8f80957cad5ff65b18b9a2569c 100644
--- a/include/obj/NiTriBasedGeomData.h
+++ b/include/obj/NiTriBasedGeomData.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiTriBasedGeomData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTriShape.h b/include/obj/NiTriShape.h
index 9da6d1cbd1c761ca06152099dfba5e15373dab74..8aadbfb8b2701ac8956b74d3d8eb4d0fbb102c20 100644
--- a/include/obj/NiTriShape.h
+++ b/include/obj/NiTriShape.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiTriShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTriShapeData.h b/include/obj/NiTriShapeData.h
index 9c3f43ab8d4cf30553f1c17ae867101192bed3c2..27ca73cfbcf17371c5a58c324b0e065a21b09ea9 100644
--- a/include/obj/NiTriShapeData.h
+++ b/include/obj/NiTriShapeData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiTriShapeData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTriStrips.h b/include/obj/NiTriStrips.h
index 21be4b118a4ac25913ccb77bcb68b3c323ddbbdf..8ae7b2e953cb6eab423c22ebd2f4d79262e86820 100644
--- a/include/obj/NiTriStrips.h
+++ b/include/obj/NiTriStrips.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiTriStrips();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiTriStripsData.h b/include/obj/NiTriStripsData.h
index 5a47319af2ef2686121cb538452b33e37bd1a03d..1e3725709969c4c5a1f7f279bfb241c0cec2fa8f 100644
--- a/include/obj/NiTriStripsData.h
+++ b/include/obj/NiTriStripsData.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~NiTriStripsData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiUVController.h b/include/obj/NiUVController.h
index 88cd2e83279f78ab836f62f0539e403c79f9d39f..235ca5b8a1e46b75ebe600eedaef4857e14dc43b 100644
--- a/include/obj/NiUVController.h
+++ b/include/obj/NiUVController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiUVController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiUVData.h b/include/obj/NiUVData.h
index a91de1419be6bc9f1211ee577378c9d58ec4e67d..2f16adb467962ee5e94ab603dd10f12fa5e21b51 100644
--- a/include/obj/NiUVData.h
+++ b/include/obj/NiUVData.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~NiUVData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiVectorExtraData.h b/include/obj/NiVectorExtraData.h
index f2a580b71efd06c4aa00e9649e10e913bc823898..898e392525c45e1b5cb43f8009672fa20304d318 100644
--- a/include/obj/NiVectorExtraData.h
+++ b/include/obj/NiVectorExtraData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiVectorExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiVertWeightsExtraData.h b/include/obj/NiVertWeightsExtraData.h
index b6d2362e2f78f35d248235400949c186224caf81..7fb48405f611cd3a64c46d1dc0243f524f74350f 100644
--- a/include/obj/NiVertWeightsExtraData.h
+++ b/include/obj/NiVertWeightsExtraData.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiVertWeightsExtraData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiVertexColorProperty.h b/include/obj/NiVertexColorProperty.h
index a75cc26aa88c757686c1645793c4f80c24022bb3..44876c4d36ca2ff9da5e72cc352003e5263de3c6 100644
--- a/include/obj/NiVertexColorProperty.h
+++ b/include/obj/NiVertexColorProperty.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~NiVertexColorProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiVisController.h b/include/obj/NiVisController.h
index ee33e77f3c091d402177b83af6473822c49eaea6..4eaf5537084cf327c12ab4bdf48e14b4e9332a47 100644
--- a/include/obj/NiVisController.h
+++ b/include/obj/NiVisController.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~NiVisController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiVisData.h b/include/obj/NiVisData.h
index d3ccc21f4877dc73fb09a73cc4abad3aef466e92..95394921b7749bcd59d4a64114e61c95e2e8cb6a 100644
--- a/include/obj/NiVisData.h
+++ b/include/obj/NiVisData.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiVisData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiWireframeProperty.h b/include/obj/NiWireframeProperty.h
index 0bbabff69b8b1eec396114c0cee58927eba509ac..9b01c1b384be8ebeeffc237ef1559e54fac6674c 100644
--- a/include/obj/NiWireframeProperty.h
+++ b/include/obj/NiWireframeProperty.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~NiWireframeProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/NiZBufferProperty.h b/include/obj/NiZBufferProperty.h
index 1b173b4e27e3640ba41d5439a8c102f6bb0a7263..d89a8f82368c779cc8cd2073c450cc4986cadb68 100644
--- a/include/obj/NiZBufferProperty.h
+++ b/include/obj/NiZBufferProperty.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~NiZBufferProperty();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/RootCollisionNode.h b/include/obj/RootCollisionNode.h
index cdb25cdcb55a83cce21cb931ab976c4c13383626..0684cc769093089f689163ebea05eaf3de90c428 100644
--- a/include/obj/RootCollisionNode.h
+++ b/include/obj/RootCollisionNode.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~RootCollisionNode();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkBlendCollisionObject.h b/include/obj/bhkBlendCollisionObject.h
index 9088884907b8ed3421cc6e37dc2e58c5c17c7979..e0e11b6b9ba4ef2305216062bb8998ca7d86caa7 100644
--- a/include/obj/bhkBlendCollisionObject.h
+++ b/include/obj/bhkBlendCollisionObject.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkBlendCollisionObject();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkBlendController.h b/include/obj/bhkBlendController.h
index 668664c9b293634514fc04cb9eb73701432e952a..6572a59b0029bef1593d1c025458ff2941d7188a 100644
--- a/include/obj/bhkBlendController.h
+++ b/include/obj/bhkBlendController.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~bhkBlendController();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkBoxShape.h b/include/obj/bhkBoxShape.h
index dc0c9cd1b42779525c756bdb2ff863abd4e238f8..2c8cab6867fc676370808bc9cd2d276103f303f4 100644
--- a/include/obj/bhkBoxShape.h
+++ b/include/obj/bhkBoxShape.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~bhkBoxShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkCapsuleShape.h b/include/obj/bhkCapsuleShape.h
index c184685827dbb13105f1d4c1ddd5589056dd7d5d..fbc15ae7e7b754cf99a30ce87828db78414e8d52 100644
--- a/include/obj/bhkCapsuleShape.h
+++ b/include/obj/bhkCapsuleShape.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~bhkCapsuleShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkCollisionObject.h b/include/obj/bhkCollisionObject.h
index c677d3b4c7247cf8431973c9ae80f10418bacf84..ebca9670383dd4c851d53c40b65d9fe23aabe153 100644
--- a/include/obj/bhkCollisionObject.h
+++ b/include/obj/bhkCollisionObject.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkCollisionObject();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
 	NIFLIB_API virtual string asString( bool verbose = false ) const;
diff --git a/include/obj/bhkConvexShape.h b/include/obj/bhkConvexShape.h
index 57ab99ac32310bd7009348d0179312605c93d154..da88b9ed9477d4e80c8f6b41e8c553bcfca11340 100644
--- a/include/obj/bhkConvexShape.h
+++ b/include/obj/bhkConvexShape.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkConvexShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkConvexTransformShape.h b/include/obj/bhkConvexTransformShape.h
index b2132e6da3c381a9b1e7d60c7b42335ad4badbb6..1e81df15b48eb026acf6ac1415f45196693ba08d 100644
--- a/include/obj/bhkConvexTransformShape.h
+++ b/include/obj/bhkConvexTransformShape.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkConvexTransformShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkConvexVerticesShape.h b/include/obj/bhkConvexVerticesShape.h
index c96bf1671088efadbbd1d4847dabe661ac358b24..d269e333531d6d4136413154599155d307c282ce 100644
--- a/include/obj/bhkConvexVerticesShape.h
+++ b/include/obj/bhkConvexVerticesShape.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkConvexVerticesShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkEntity.h b/include/obj/bhkEntity.h
index 381e3b98e6a4fa3f32065ee84b53128286fca85e..399a3767efde88b19891a06e7cdae004d992e6b0 100644
--- a/include/obj/bhkEntity.h
+++ b/include/obj/bhkEntity.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~bhkEntity();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkHingeConstraint.h b/include/obj/bhkHingeConstraint.h
index c29b028f62e960409e785c419c2107f92f5fcafd..125b970ca8e0a3a91d90bfeb22f93d62dd2f9ab9 100644
--- a/include/obj/bhkHingeConstraint.h
+++ b/include/obj/bhkHingeConstraint.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkHingeConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkLimitedHingeConstraint.h b/include/obj/bhkLimitedHingeConstraint.h
index 31aa5da046427cf5d022ec4aad701148a5c52e0a..54543383680dcd85271708982111ea80409763f1 100644
--- a/include/obj/bhkLimitedHingeConstraint.h
+++ b/include/obj/bhkLimitedHingeConstraint.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~bhkLimitedHingeConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkListShape.h b/include/obj/bhkListShape.h
index 8e19ba456549debca605ff8473a611d64a3980c8..5cd4e494fbb2b7849b5a77b0f699ee4dfbc8857e 100644
--- a/include/obj/bhkListShape.h
+++ b/include/obj/bhkListShape.h
@@ -28,6 +28,7 @@ public:
 	NIFLIB_API ~bhkListShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkMalleableConstraint.h b/include/obj/bhkMalleableConstraint.h
index ddf1cb5e2dcd386ee4799104893cff6cdfc85971..0633a85600901054cc22dce677e262c7286428c6 100644
--- a/include/obj/bhkMalleableConstraint.h
+++ b/include/obj/bhkMalleableConstraint.h
@@ -30,6 +30,7 @@ public:
 	NIFLIB_API ~bhkMalleableConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkMoppBvTreeShape.h b/include/obj/bhkMoppBvTreeShape.h
index 86f47fcc1f9c0d5c97ef1d03da0e256df05df2c7..af5cb7a175e44ef1f2cc03f8eac347a66e3e8709 100644
--- a/include/obj/bhkMoppBvTreeShape.h
+++ b/include/obj/bhkMoppBvTreeShape.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~bhkMoppBvTreeShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkMultiSphereShape.h b/include/obj/bhkMultiSphereShape.h
index 2526c9952215946cd0b8363336cb6d53f16a8466..96f7bf53f21a903a0bf69e458fab5c839639e66c 100644
--- a/include/obj/bhkMultiSphereShape.h
+++ b/include/obj/bhkMultiSphereShape.h
@@ -25,6 +25,7 @@ public:
 	NIFLIB_API ~bhkMultiSphereShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkNiTriStripsShape.h b/include/obj/bhkNiTriStripsShape.h
index 07d582c40ed70cba31675dd46adeee7994fffa40..3cc4678e8faac21b72b721160a0e22a205b188ae 100644
--- a/include/obj/bhkNiTriStripsShape.h
+++ b/include/obj/bhkNiTriStripsShape.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~bhkNiTriStripsShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkPackedNiTriStripsShape.h b/include/obj/bhkPackedNiTriStripsShape.h
index adc897fc92f992aea0d552f76a517b50d04571e2..7ac6d9ca4a071330b4cd87c63546d815878cda9e 100644
--- a/include/obj/bhkPackedNiTriStripsShape.h
+++ b/include/obj/bhkPackedNiTriStripsShape.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~bhkPackedNiTriStripsShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkPrismaticConstraint.h b/include/obj/bhkPrismaticConstraint.h
index b83f6659c77348c7cefde18c6b5fc0a674227802..b0bd1255da1acbc4ecea1de8d675287246c00f15 100644
--- a/include/obj/bhkPrismaticConstraint.h
+++ b/include/obj/bhkPrismaticConstraint.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkPrismaticConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkRagdollConstraint.h b/include/obj/bhkRagdollConstraint.h
index 2e9825b2e93cd8c728a45e3b201ea33e7d403fbc..8dbddac1d4b03f4cddba39681109132be2d766b7 100644
--- a/include/obj/bhkRagdollConstraint.h
+++ b/include/obj/bhkRagdollConstraint.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkRagdollConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkRefObject.h b/include/obj/bhkRefObject.h
index 6b6be61116b9e570e74c67184e4b94e3024aad0b..2c32d648a2d21d1acee2db2a416d5f8ddb7a0bb3 100644
--- a/include/obj/bhkRefObject.h
+++ b/include/obj/bhkRefObject.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkRefObject();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkRigidBody.h b/include/obj/bhkRigidBody.h
index 13b1b1d7f9a267f181135265c2f78743c1f6a6b4..32f66e4bf3c479b2eb3e06ad576a03e0a046519f 100644
--- a/include/obj/bhkRigidBody.h
+++ b/include/obj/bhkRigidBody.h
@@ -29,6 +29,7 @@ public:
 	NIFLIB_API ~bhkRigidBody();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkRigidBodyT.h b/include/obj/bhkRigidBodyT.h
index b3f741c48b681fb1b25f7d3740c4d5749ddb8f42..ab9fa631cd58f66b0741b7b20667a92318339ee1 100644
--- a/include/obj/bhkRigidBodyT.h
+++ b/include/obj/bhkRigidBodyT.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkRigidBodyT();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkSPCollisionObject.h b/include/obj/bhkSPCollisionObject.h
index 8be90ee163502468ff4a257f4b4ac62f843f48dc..c10f6ac17d4a647ca78c07c46c1beda1f05e8aee 100644
--- a/include/obj/bhkSPCollisionObject.h
+++ b/include/obj/bhkSPCollisionObject.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkSPCollisionObject();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkSerializable.h b/include/obj/bhkSerializable.h
index 9db9ecdcafbc759323c8c253a365b889164065b6..90a6800323c8f12d05b33bf9289b6763a65247c5 100644
--- a/include/obj/bhkSerializable.h
+++ b/include/obj/bhkSerializable.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~bhkSerializable();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkShape.h b/include/obj/bhkShape.h
index 9c47449cb68bf61e1e38837cfec3c6a7f083ebfd..f5c207a28bbf776f84c375959b90620729914c45 100644
--- a/include/obj/bhkShape.h
+++ b/include/obj/bhkShape.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkSimpleShapePhantom.h b/include/obj/bhkSimpleShapePhantom.h
index ed5a555611776ed6bf0c1972d0f9ca7f958d43d6..a1dd86fc8773b5cff0712f8a06ffc1ec74f22215 100644
--- a/include/obj/bhkSimpleShapePhantom.h
+++ b/include/obj/bhkSimpleShapePhantom.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkSimpleShapePhantom();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkSphereRepShape.h b/include/obj/bhkSphereRepShape.h
index 991b281fb7e54cf717f24894524503d6e11e8306..36235578feb7a8d617cf5fac726b4a336b4e334f 100644
--- a/include/obj/bhkSphereRepShape.h
+++ b/include/obj/bhkSphereRepShape.h
@@ -24,6 +24,7 @@ public:
 	NIFLIB_API ~bhkSphereRepShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkSphereShape.h b/include/obj/bhkSphereShape.h
index 020f5f9e0f7b97702213011d0210a9a853bc9475..2626286a805c17c3f7c1df1a0986714d90ba76be 100644
--- a/include/obj/bhkSphereShape.h
+++ b/include/obj/bhkSphereShape.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~bhkSphereShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkStiffSpringConstraint.h b/include/obj/bhkStiffSpringConstraint.h
index 1aa51ab9ba5066fc21883f35348cda735439418a..a72c49a1e1c3926a675dcf965d9da13efb8d3905 100644
--- a/include/obj/bhkStiffSpringConstraint.h
+++ b/include/obj/bhkStiffSpringConstraint.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkStiffSpringConstraint();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkTransformShape.h b/include/obj/bhkTransformShape.h
index 5d12b154837636579f5a3e12e7e3c63e536b2cce..35d522e5eff0397b93891c916174f0307efd6e59 100644
--- a/include/obj/bhkTransformShape.h
+++ b/include/obj/bhkTransformShape.h
@@ -23,6 +23,7 @@ public:
 	NIFLIB_API ~bhkTransformShape();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/bhkWorldObject.h b/include/obj/bhkWorldObject.h
index 4f84705b9b1a137f0dfde6345b24ef8b0097e9a6..2c523ee20c1cf8c490f10a43e7b9108ee6abfbb2 100644
--- a/include/obj/bhkWorldObject.h
+++ b/include/obj/bhkWorldObject.h
@@ -22,6 +22,7 @@ public:
 	NIFLIB_API ~bhkWorldObject();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/include/obj/hkPackedNiTriStripsData.h b/include/obj/hkPackedNiTriStripsData.h
index fb6cdf750838e5bc135dddb7a25113d6a8458184..9c6f365237407789e34e60e640bef5b59d2a46b3 100644
--- a/include/obj/hkPackedNiTriStripsData.h
+++ b/include/obj/hkPackedNiTriStripsData.h
@@ -26,6 +26,7 @@ public:
 	NIFLIB_API ~hkPackedNiTriStripsData();
 	//Run-Time Type Information
 	NIFLIB_API static const Type TYPE;
+	NIFLIB_API static NiObject * Create();
 	NIFLIB_API virtual const Type & GetType() const;
 	NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info );
 	NIFLIB_HIDDEN virtual void Write( ostream& out, const map<NiObjectRef,unsigned int> & link_map, const NifInfo & info ) const;
diff --git a/niflib.vcproj b/niflib.vcproj
index 5ed78846e9462d4c65feb9f3b13ed15204141347..a5a2c597201f0a0094b8e785c2eefc3b45e1ef5f 100644
--- a/niflib.vcproj
+++ b/niflib.vcproj
@@ -1298,10 +1298,6 @@
 					RelativePath=".\src\gen\NodeGroup.cpp"
 					>
 				</File>
-				<File
-					RelativePath=".\src\gen\obj_factories.cpp"
-					>
-				</File>
 				<File
 					RelativePath=".\src\gen\obj_impl.cpp"
 					>
diff --git a/src/gen/obj_factories.cpp b/src/gen/obj_factories.cpp
deleted file mode 100644
index 8a9e43161f5f9078e23f935bebab0df0cf452ca9..0000000000000000000000000000000000000000
--- a/src/gen/obj_factories.cpp
+++ /dev/null
@@ -1,579 +0,0 @@
-/* Copyright (c) 2006, NIF File Format Library and Tools
-All rights reserved.  Please see niflib.h for license. */
-
-//---THIS FILE WAS AUTOMATICALLY GENERATED.  DO NOT EDIT---//
-
-//To change this file, alter the niftools/docsys/nifxml_niflib.py Python script.
-
-#include "../../include/obj/NiObject.h"
-using namespace Niflib;
-using namespace std;
-namespace Niflib {
-typedef NiObject*(*blk_factory_func)();
-extern map<string, blk_factory_func> global_object_map;
-}
-
-#include "../../include/obj/bhkBlendCollisionObject.h"
-NiObject * CreatebhkBlendCollisionObject() { return new bhkBlendCollisionObject; }
-#include "../../include/obj/bhkBlendController.h"
-NiObject * CreatebhkBlendController() { return new bhkBlendController; }
-#include "../../include/obj/bhkBoxShape.h"
-NiObject * CreatebhkBoxShape() { return new bhkBoxShape; }
-#include "../../include/obj/bhkCapsuleShape.h"
-NiObject * CreatebhkCapsuleShape() { return new bhkCapsuleShape; }
-#include "../../include/obj/bhkCollisionObject.h"
-NiObject * CreatebhkCollisionObject() { return new bhkCollisionObject; }
-#include "../../include/obj/bhkConvexVerticesShape.h"
-NiObject * CreatebhkConvexVerticesShape() { return new bhkConvexVerticesShape; }
-#include "../../include/obj/bhkHingeConstraint.h"
-NiObject * CreatebhkHingeConstraint() { return new bhkHingeConstraint; }
-#include "../../include/obj/bhkLimitedHingeConstraint.h"
-NiObject * CreatebhkLimitedHingeConstraint() { return new bhkLimitedHingeConstraint; }
-#include "../../include/obj/bhkListShape.h"
-NiObject * CreatebhkListShape() { return new bhkListShape; }
-#include "../../include/obj/bhkMalleableConstraint.h"
-NiObject * CreatebhkMalleableConstraint() { return new bhkMalleableConstraint; }
-#include "../../include/obj/bhkMoppBvTreeShape.h"
-NiObject * CreatebhkMoppBvTreeShape() { return new bhkMoppBvTreeShape; }
-#include "../../include/obj/bhkMultiSphereShape.h"
-NiObject * CreatebhkMultiSphereShape() { return new bhkMultiSphereShape; }
-#include "../../include/obj/bhkNiTriStripsShape.h"
-NiObject * CreatebhkNiTriStripsShape() { return new bhkNiTriStripsShape; }
-#include "../../include/obj/bhkPackedNiTriStripsShape.h"
-NiObject * CreatebhkPackedNiTriStripsShape() { return new bhkPackedNiTriStripsShape; }
-#include "../../include/obj/bhkPrismaticConstraint.h"
-NiObject * CreatebhkPrismaticConstraint() { return new bhkPrismaticConstraint; }
-#include "../../include/obj/bhkRagdollConstraint.h"
-NiObject * CreatebhkRagdollConstraint() { return new bhkRagdollConstraint; }
-#include "../../include/obj/bhkRigidBody.h"
-NiObject * CreatebhkRigidBody() { return new bhkRigidBody; }
-#include "../../include/obj/bhkRigidBodyT.h"
-NiObject * CreatebhkRigidBodyT() { return new bhkRigidBodyT; }
-#include "../../include/obj/bhkSimpleShapePhantom.h"
-NiObject * CreatebhkSimpleShapePhantom() { return new bhkSimpleShapePhantom; }
-#include "../../include/obj/bhkSPCollisionObject.h"
-NiObject * CreatebhkSPCollisionObject() { return new bhkSPCollisionObject; }
-#include "../../include/obj/bhkSphereShape.h"
-NiObject * CreatebhkSphereShape() { return new bhkSphereShape; }
-#include "../../include/obj/bhkStiffSpringConstraint.h"
-NiObject * CreatebhkStiffSpringConstraint() { return new bhkStiffSpringConstraint; }
-#include "../../include/obj/bhkTransformShape.h"
-NiObject * CreatebhkTransformShape() { return new bhkTransformShape; }
-#include "../../include/obj/bhkConvexTransformShape.h"
-NiObject * CreatebhkConvexTransformShape() { return new bhkConvexTransformShape; }
-#include "../../include/obj/BSBound.h"
-NiObject * CreateBSBound() { return new BSBound; }
-#include "../../include/obj/BSFurnitureMarker.h"
-NiObject * CreateBSFurnitureMarker() { return new BSFurnitureMarker; }
-#include "../../include/obj/BSParentVelocityModifier.h"
-NiObject * CreateBSParentVelocityModifier() { return new BSParentVelocityModifier; }
-#include "../../include/obj/BSPSysArrayEmitter.h"
-NiObject * CreateBSPSysArrayEmitter() { return new BSPSysArrayEmitter; }
-#include "../../include/obj/BSXFlags.h"
-NiObject * CreateBSXFlags() { return new BSXFlags; }
-#include "../../include/obj/hkPackedNiTriStripsData.h"
-NiObject * CreatehkPackedNiTriStripsData() { return new hkPackedNiTriStripsData; }
-#include "../../include/obj/NiAlphaController.h"
-NiObject * CreateNiAlphaController() { return new NiAlphaController; }
-#include "../../include/obj/NiAlphaProperty.h"
-NiObject * CreateNiAlphaProperty() { return new NiAlphaProperty; }
-#include "../../include/obj/NiAmbientLight.h"
-NiObject * CreateNiAmbientLight() { return new NiAmbientLight; }
-#include "../../include/obj/NiAutoNormalParticlesData.h"
-NiObject * CreateNiAutoNormalParticlesData() { return new NiAutoNormalParticlesData; }
-#include "../../include/obj/NiBinaryExtraData.h"
-NiObject * CreateNiBinaryExtraData() { return new NiBinaryExtraData; }
-#include "../../include/obj/NiBlendBoolInterpolator.h"
-NiObject * CreateNiBlendBoolInterpolator() { return new NiBlendBoolInterpolator; }
-#include "../../include/obj/NiBlendFloatInterpolator.h"
-NiObject * CreateNiBlendFloatInterpolator() { return new NiBlendFloatInterpolator; }
-#include "../../include/obj/NiBlendPoint3Interpolator.h"
-NiObject * CreateNiBlendPoint3Interpolator() { return new NiBlendPoint3Interpolator; }
-#include "../../include/obj/NiBlendTransformInterpolator.h"
-NiObject * CreateNiBlendTransformInterpolator() { return new NiBlendTransformInterpolator; }
-#include "../../include/obj/NiBoneLODController.h"
-NiObject * CreateNiBoneLODController() { return new NiBoneLODController; }
-#include "../../include/obj/NiBoolData.h"
-NiObject * CreateNiBoolData() { return new NiBoolData; }
-#include "../../include/obj/NiBooleanExtraData.h"
-NiObject * CreateNiBooleanExtraData() { return new NiBooleanExtraData; }
-#include "../../include/obj/NiBoolInterpolator.h"
-NiObject * CreateNiBoolInterpolator() { return new NiBoolInterpolator; }
-#include "../../include/obj/NiBoolTimelineInterpolator.h"
-NiObject * CreateNiBoolTimelineInterpolator() { return new NiBoolTimelineInterpolator; }
-#include "../../include/obj/NiBSBoneLODController.h"
-NiObject * CreateNiBSBoneLODController() { return new NiBSBoneLODController; }
-#include "../../include/obj/NiBSplineBasisData.h"
-NiObject * CreateNiBSplineBasisData() { return new NiBSplineBasisData; }
-#include "../../include/obj/NiBSplineCompFloatInterpolator.h"
-NiObject * CreateNiBSplineCompFloatInterpolator() { return new NiBSplineCompFloatInterpolator; }
-#include "../../include/obj/NiBSplineCompPoint3Interpolator.h"
-NiObject * CreateNiBSplineCompPoint3Interpolator() { return new NiBSplineCompPoint3Interpolator; }
-#include "../../include/obj/NiBSplineCompTransformInterpolator.h"
-NiObject * CreateNiBSplineCompTransformInterpolator() { return new NiBSplineCompTransformInterpolator; }
-#include "../../include/obj/NiBSplineData.h"
-NiObject * CreateNiBSplineData() { return new NiBSplineData; }
-#include "../../include/obj/NiCamera.h"
-NiObject * CreateNiCamera() { return new NiCamera; }
-#include "../../include/obj/NiCollisionData.h"
-NiObject * CreateNiCollisionData() { return new NiCollisionData; }
-#include "../../include/obj/NiColorData.h"
-NiObject * CreateNiColorData() { return new NiColorData; }
-#include "../../include/obj/NiColorExtraData.h"
-NiObject * CreateNiColorExtraData() { return new NiColorExtraData; }
-#include "../../include/obj/NiControllerManager.h"
-NiObject * CreateNiControllerManager() { return new NiControllerManager; }
-#include "../../include/obj/NiControllerSequence.h"
-NiObject * CreateNiControllerSequence() { return new NiControllerSequence; }
-#include "../../include/obj/NiDefaultAVObjectPalette.h"
-NiObject * CreateNiDefaultAVObjectPalette() { return new NiDefaultAVObjectPalette; }
-#include "../../include/obj/NiDirectionalLight.h"
-NiObject * CreateNiDirectionalLight() { return new NiDirectionalLight; }
-#include "../../include/obj/NiDitherProperty.h"
-NiObject * CreateNiDitherProperty() { return new NiDitherProperty; }
-#include "../../include/obj/NiFlipController.h"
-NiObject * CreateNiFlipController() { return new NiFlipController; }
-#include "../../include/obj/NiFloatData.h"
-NiObject * CreateNiFloatData() { return new NiFloatData; }
-#include "../../include/obj/NiFloatExtraData.h"
-NiObject * CreateNiFloatExtraData() { return new NiFloatExtraData; }
-#include "../../include/obj/NiFloatExtraDataController.h"
-NiObject * CreateNiFloatExtraDataController() { return new NiFloatExtraDataController; }
-#include "../../include/obj/NiFloatInterpolator.h"
-NiObject * CreateNiFloatInterpolator() { return new NiFloatInterpolator; }
-#include "../../include/obj/NiFloatsExtraData.h"
-NiObject * CreateNiFloatsExtraData() { return new NiFloatsExtraData; }
-#include "../../include/obj/NiFogProperty.h"
-NiObject * CreateNiFogProperty() { return new NiFogProperty; }
-#include "../../include/obj/NiGeomMorpherController.h"
-NiObject * CreateNiGeomMorpherController() { return new NiGeomMorpherController; }
-#include "../../include/obj/NiGravity.h"
-NiObject * CreateNiGravity() { return new NiGravity; }
-#include "../../include/obj/NiIntegerExtraData.h"
-NiObject * CreateNiIntegerExtraData() { return new NiIntegerExtraData; }
-#include "../../include/obj/NiIntegersExtraData.h"
-NiObject * CreateNiIntegersExtraData() { return new NiIntegersExtraData; }
-#include "../../include/obj/NiKeyframeController.h"
-NiObject * CreateNiKeyframeController() { return new NiKeyframeController; }
-#include "../../include/obj/BSKeyframeController.h"
-NiObject * CreateBSKeyframeController() { return new BSKeyframeController; }
-#include "../../include/obj/NiKeyframeData.h"
-NiObject * CreateNiKeyframeData() { return new NiKeyframeData; }
-#include "../../include/obj/NiLightColorController.h"
-NiObject * CreateNiLightColorController() { return new NiLightColorController; }
-#include "../../include/obj/NiLightDimmerController.h"
-NiObject * CreateNiLightDimmerController() { return new NiLightDimmerController; }
-#include "../../include/obj/NiLookAtController.h"
-NiObject * CreateNiLookAtController() { return new NiLookAtController; }
-#include "../../include/obj/NiLookAtInterpolator.h"
-NiObject * CreateNiLookAtInterpolator() { return new NiLookAtInterpolator; }
-#include "../../include/obj/NiMaterialColorController.h"
-NiObject * CreateNiMaterialColorController() { return new NiMaterialColorController; }
-#include "../../include/obj/NiMaterialProperty.h"
-NiObject * CreateNiMaterialProperty() { return new NiMaterialProperty; }
-#include "../../include/obj/NiMeshPSysData.h"
-NiObject * CreateNiMeshPSysData() { return new NiMeshPSysData; }
-#include "../../include/obj/NiMorphData.h"
-NiObject * CreateNiMorphData() { return new NiMorphData; }
-#include "../../include/obj/NiMultiTargetTransformController.h"
-NiObject * CreateNiMultiTargetTransformController() { return new NiMultiTargetTransformController; }
-#include "../../include/obj/NiNode.h"
-NiObject * CreateNiNode() { return new NiNode; }
-#include "../../include/obj/AvoidNode.h"
-NiObject * CreateAvoidNode() { return new AvoidNode; }
-#include "../../include/obj/FxWidget.h"
-NiObject * CreateFxWidget() { return new FxWidget; }
-#include "../../include/obj/FxButton.h"
-NiObject * CreateFxButton() { return new FxButton; }
-#include "../../include/obj/FxRadioButton.h"
-NiObject * CreateFxRadioButton() { return new FxRadioButton; }
-#include "../../include/obj/NiBillboardNode.h"
-NiObject * CreateNiBillboardNode() { return new NiBillboardNode; }
-#include "../../include/obj/NiBSAnimationNode.h"
-NiObject * CreateNiBSAnimationNode() { return new NiBSAnimationNode; }
-#include "../../include/obj/NiBSParticleNode.h"
-NiObject * CreateNiBSParticleNode() { return new NiBSParticleNode; }
-#include "../../include/obj/NiLODNode.h"
-NiObject * CreateNiLODNode() { return new NiLODNode; }
-#include "../../include/obj/NiPalette.h"
-NiObject * CreateNiPalette() { return new NiPalette; }
-#include "../../include/obj/NiParticleBomb.h"
-NiObject * CreateNiParticleBomb() { return new NiParticleBomb; }
-#include "../../include/obj/NiParticleColorModifier.h"
-NiObject * CreateNiParticleColorModifier() { return new NiParticleColorModifier; }
-#include "../../include/obj/NiParticleGrowFade.h"
-NiObject * CreateNiParticleGrowFade() { return new NiParticleGrowFade; }
-#include "../../include/obj/NiParticleMeshModifier.h"
-NiObject * CreateNiParticleMeshModifier() { return new NiParticleMeshModifier; }
-#include "../../include/obj/NiParticleRotation.h"
-NiObject * CreateNiParticleRotation() { return new NiParticleRotation; }
-#include "../../include/obj/NiParticles.h"
-NiObject * CreateNiParticles() { return new NiParticles; }
-#include "../../include/obj/NiAutoNormalParticles.h"
-NiObject * CreateNiAutoNormalParticles() { return new NiAutoNormalParticles; }
-#include "../../include/obj/NiParticleMeshes.h"
-NiObject * CreateNiParticleMeshes() { return new NiParticleMeshes; }
-#include "../../include/obj/NiParticlesData.h"
-NiObject * CreateNiParticlesData() { return new NiParticlesData; }
-#include "../../include/obj/NiParticleMeshesData.h"
-NiObject * CreateNiParticleMeshesData() { return new NiParticleMeshesData; }
-#include "../../include/obj/NiParticleSystem.h"
-NiObject * CreateNiParticleSystem() { return new NiParticleSystem; }
-#include "../../include/obj/NiMeshParticleSystem.h"
-NiObject * CreateNiMeshParticleSystem() { return new NiMeshParticleSystem; }
-#include "../../include/obj/NiParticleSystemController.h"
-NiObject * CreateNiParticleSystemController() { return new NiParticleSystemController; }
-#include "../../include/obj/NiBSPArrayController.h"
-NiObject * CreateNiBSPArrayController() { return new NiBSPArrayController; }
-#include "../../include/obj/NiPathController.h"
-NiObject * CreateNiPathController() { return new NiPathController; }
-#include "../../include/obj/NiPathInterpolator.h"
-NiObject * CreateNiPathInterpolator() { return new NiPathInterpolator; }
-#include "../../include/obj/NiPixelData.h"
-NiObject * CreateNiPixelData() { return new NiPixelData; }
-#include "../../include/obj/NiPlanarCollider.h"
-NiObject * CreateNiPlanarCollider() { return new NiPlanarCollider; }
-#include "../../include/obj/NiPoint3Interpolator.h"
-NiObject * CreateNiPoint3Interpolator() { return new NiPoint3Interpolator; }
-#include "../../include/obj/NiPointLight.h"
-NiObject * CreateNiPointLight() { return new NiPointLight; }
-#include "../../include/obj/NiPosData.h"
-NiObject * CreateNiPosData() { return new NiPosData; }
-#include "../../include/obj/NiPSysAgeDeathModifier.h"
-NiObject * CreateNiPSysAgeDeathModifier() { return new NiPSysAgeDeathModifier; }
-#include "../../include/obj/NiPSysBombModifier.h"
-NiObject * CreateNiPSysBombModifier() { return new NiPSysBombModifier; }
-#include "../../include/obj/NiPSysBoundUpdateModifier.h"
-NiObject * CreateNiPSysBoundUpdateModifier() { return new NiPSysBoundUpdateModifier; }
-#include "../../include/obj/NiPSysBoxEmitter.h"
-NiObject * CreateNiPSysBoxEmitter() { return new NiPSysBoxEmitter; }
-#include "../../include/obj/NiPSysColliderManager.h"
-NiObject * CreateNiPSysColliderManager() { return new NiPSysColliderManager; }
-#include "../../include/obj/NiPSysColorModifier.h"
-NiObject * CreateNiPSysColorModifier() { return new NiPSysColorModifier; }
-#include "../../include/obj/NiPSysCylinderEmitter.h"
-NiObject * CreateNiPSysCylinderEmitter() { return new NiPSysCylinderEmitter; }
-#include "../../include/obj/NiPSysData.h"
-NiObject * CreateNiPSysData() { return new NiPSysData; }
-#include "../../include/obj/NiPSysDragModifier.h"
-NiObject * CreateNiPSysDragModifier() { return new NiPSysDragModifier; }
-#include "../../include/obj/NiPSysEmitterCtlr.h"
-NiObject * CreateNiPSysEmitterCtlr() { return new NiPSysEmitterCtlr; }
-#include "../../include/obj/NiPSysEmitterCtlrData.h"
-NiObject * CreateNiPSysEmitterCtlrData() { return new NiPSysEmitterCtlrData; }
-#include "../../include/obj/NiPSysEmitterDeclinationCtlr.h"
-NiObject * CreateNiPSysEmitterDeclinationCtlr() { return new NiPSysEmitterDeclinationCtlr; }
-#include "../../include/obj/NiPSysEmitterDeclinationVarCtlr.h"
-NiObject * CreateNiPSysEmitterDeclinationVarCtlr() { return new NiPSysEmitterDeclinationVarCtlr; }
-#include "../../include/obj/NiPSysEmitterInitialRadiusCtlr.h"
-NiObject * CreateNiPSysEmitterInitialRadiusCtlr() { return new NiPSysEmitterInitialRadiusCtlr; }
-#include "../../include/obj/NiPSysEmitterLifeSpanCtlr.h"
-NiObject * CreateNiPSysEmitterLifeSpanCtlr() { return new NiPSysEmitterLifeSpanCtlr; }
-#include "../../include/obj/NiPSysEmitterSpeedCtlr.h"
-NiObject * CreateNiPSysEmitterSpeedCtlr() { return new NiPSysEmitterSpeedCtlr; }
-#include "../../include/obj/NiPSysGravityModifier.h"
-NiObject * CreateNiPSysGravityModifier() { return new NiPSysGravityModifier; }
-#include "../../include/obj/NiPSysGravityStrengthCtlr.h"
-NiObject * CreateNiPSysGravityStrengthCtlr() { return new NiPSysGravityStrengthCtlr; }
-#include "../../include/obj/NiPSysGrowFadeModifier.h"
-NiObject * CreateNiPSysGrowFadeModifier() { return new NiPSysGrowFadeModifier; }
-#include "../../include/obj/NiPSysMeshEmitter.h"
-NiObject * CreateNiPSysMeshEmitter() { return new NiPSysMeshEmitter; }
-#include "../../include/obj/NiPSysMeshUpdateModifier.h"
-NiObject * CreateNiPSysMeshUpdateModifier() { return new NiPSysMeshUpdateModifier; }
-#include "../../include/obj/NiPSysModifierActiveCtlr.h"
-NiObject * CreateNiPSysModifierActiveCtlr() { return new NiPSysModifierActiveCtlr; }
-#include "../../include/obj/NiPSysPlanarCollider.h"
-NiObject * CreateNiPSysPlanarCollider() { return new NiPSysPlanarCollider; }
-#include "../../include/obj/NiPSysPositionModifier.h"
-NiObject * CreateNiPSysPositionModifier() { return new NiPSysPositionModifier; }
-#include "../../include/obj/NiPSysResetOnLoopCtlr.h"
-NiObject * CreateNiPSysResetOnLoopCtlr() { return new NiPSysResetOnLoopCtlr; }
-#include "../../include/obj/NiPSysRotationModifier.h"
-NiObject * CreateNiPSysRotationModifier() { return new NiPSysRotationModifier; }
-#include "../../include/obj/NiPSysSpawnModifier.h"
-NiObject * CreateNiPSysSpawnModifier() { return new NiPSysSpawnModifier; }
-#include "../../include/obj/NiPSysSphereEmitter.h"
-NiObject * CreateNiPSysSphereEmitter() { return new NiPSysSphereEmitter; }
-#include "../../include/obj/NiPSysUpdateCtlr.h"
-NiObject * CreateNiPSysUpdateCtlr() { return new NiPSysUpdateCtlr; }
-#include "../../include/obj/NiRangeLODData.h"
-NiObject * CreateNiRangeLODData() { return new NiRangeLODData; }
-#include "../../include/obj/NiScreenLODData.h"
-NiObject * CreateNiScreenLODData() { return new NiScreenLODData; }
-#include "../../include/obj/NiRotatingParticles.h"
-NiObject * CreateNiRotatingParticles() { return new NiRotatingParticles; }
-#include "../../include/obj/NiRotatingParticlesData.h"
-NiObject * CreateNiRotatingParticlesData() { return new NiRotatingParticlesData; }
-#include "../../include/obj/NiSequenceStreamHelper.h"
-NiObject * CreateNiSequenceStreamHelper() { return new NiSequenceStreamHelper; }
-#include "../../include/obj/NiShadeProperty.h"
-NiObject * CreateNiShadeProperty() { return new NiShadeProperty; }
-#include "../../include/obj/NiSkinData.h"
-NiObject * CreateNiSkinData() { return new NiSkinData; }
-#include "../../include/obj/NiSkinInstance.h"
-NiObject * CreateNiSkinInstance() { return new NiSkinInstance; }
-#include "../../include/obj/NiClodSkinInstance.h"
-NiObject * CreateNiClodSkinInstance() { return new NiClodSkinInstance; }
-#include "../../include/obj/NiSkinPartition.h"
-NiObject * CreateNiSkinPartition() { return new NiSkinPartition; }
-#include "../../include/obj/NiSourceTexture.h"
-NiObject * CreateNiSourceTexture() { return new NiSourceTexture; }
-#include "../../include/obj/NiSpecularProperty.h"
-NiObject * CreateNiSpecularProperty() { return new NiSpecularProperty; }
-#include "../../include/obj/NiSphericalCollider.h"
-NiObject * CreateNiSphericalCollider() { return new NiSphericalCollider; }
-#include "../../include/obj/NiSpotLight.h"
-NiObject * CreateNiSpotLight() { return new NiSpotLight; }
-#include "../../include/obj/NiStencilProperty.h"
-NiObject * CreateNiStencilProperty() { return new NiStencilProperty; }
-#include "../../include/obj/NiStringExtraData.h"
-NiObject * CreateNiStringExtraData() { return new NiStringExtraData; }
-#include "../../include/obj/NiStringPalette.h"
-NiObject * CreateNiStringPalette() { return new NiStringPalette; }
-#include "../../include/obj/NiStringsExtraData.h"
-NiObject * CreateNiStringsExtraData() { return new NiStringsExtraData; }
-#include "../../include/obj/NiTextKeyExtraData.h"
-NiObject * CreateNiTextKeyExtraData() { return new NiTextKeyExtraData; }
-#include "../../include/obj/NiTextureEffect.h"
-NiObject * CreateNiTextureEffect() { return new NiTextureEffect; }
-#include "../../include/obj/NiTextureTransformController.h"
-NiObject * CreateNiTextureTransformController() { return new NiTextureTransformController; }
-#include "../../include/obj/NiTextureModeProperty.h"
-NiObject * CreateNiTextureModeProperty() { return new NiTextureModeProperty; }
-#include "../../include/obj/NiImage.h"
-NiObject * CreateNiImage() { return new NiImage; }
-#include "../../include/obj/NiTextureProperty.h"
-NiObject * CreateNiTextureProperty() { return new NiTextureProperty; }
-#include "../../include/obj/NiTexturingProperty.h"
-NiObject * CreateNiTexturingProperty() { return new NiTexturingProperty; }
-#include "../../include/obj/NiTransformController.h"
-NiObject * CreateNiTransformController() { return new NiTransformController; }
-#include "../../include/obj/NiTransformData.h"
-NiObject * CreateNiTransformData() { return new NiTransformData; }
-#include "../../include/obj/NiTransformInterpolator.h"
-NiObject * CreateNiTransformInterpolator() { return new NiTransformInterpolator; }
-#include "../../include/obj/NiTriShape.h"
-NiObject * CreateNiTriShape() { return new NiTriShape; }
-#include "../../include/obj/NiTriShapeData.h"
-NiObject * CreateNiTriShapeData() { return new NiTriShapeData; }
-#include "../../include/obj/NiTriStrips.h"
-NiObject * CreateNiTriStrips() { return new NiTriStrips; }
-#include "../../include/obj/NiTriStripsData.h"
-NiObject * CreateNiTriStripsData() { return new NiTriStripsData; }
-#include "../../include/obj/NiClod.h"
-NiObject * CreateNiClod() { return new NiClod; }
-#include "../../include/obj/NiClodData.h"
-NiObject * CreateNiClodData() { return new NiClodData; }
-#include "../../include/obj/NiUVController.h"
-NiObject * CreateNiUVController() { return new NiUVController; }
-#include "../../include/obj/NiUVData.h"
-NiObject * CreateNiUVData() { return new NiUVData; }
-#include "../../include/obj/NiVectorExtraData.h"
-NiObject * CreateNiVectorExtraData() { return new NiVectorExtraData; }
-#include "../../include/obj/NiVertexColorProperty.h"
-NiObject * CreateNiVertexColorProperty() { return new NiVertexColorProperty; }
-#include "../../include/obj/NiVertWeightsExtraData.h"
-NiObject * CreateNiVertWeightsExtraData() { return new NiVertWeightsExtraData; }
-#include "../../include/obj/NiVisController.h"
-NiObject * CreateNiVisController() { return new NiVisController; }
-#include "../../include/obj/NiVisData.h"
-NiObject * CreateNiVisData() { return new NiVisData; }
-#include "../../include/obj/NiWireframeProperty.h"
-NiObject * CreateNiWireframeProperty() { return new NiWireframeProperty; }
-#include "../../include/obj/NiZBufferProperty.h"
-NiObject * CreateNiZBufferProperty() { return new NiZBufferProperty; }
-#include "../../include/obj/RootCollisionNode.h"
-NiObject * CreateRootCollisionNode() { return new RootCollisionNode; }
-
-namespace Niflib {
-//This function registers the factory functions with global_object_map which is used by CreateNiObject
-void RegisterObjectFactories() {
-	global_object_map["bhkBlendCollisionObject"] = CreatebhkBlendCollisionObject;
-	global_object_map["bhkBlendController"] = CreatebhkBlendController;
-	global_object_map["bhkBoxShape"] = CreatebhkBoxShape;
-	global_object_map["bhkCapsuleShape"] = CreatebhkCapsuleShape;
-	global_object_map["bhkCollisionObject"] = CreatebhkCollisionObject;
-	global_object_map["bhkConvexVerticesShape"] = CreatebhkConvexVerticesShape;
-	global_object_map["bhkHingeConstraint"] = CreatebhkHingeConstraint;
-	global_object_map["bhkLimitedHingeConstraint"] = CreatebhkLimitedHingeConstraint;
-	global_object_map["bhkListShape"] = CreatebhkListShape;
-	global_object_map["bhkMalleableConstraint"] = CreatebhkMalleableConstraint;
-	global_object_map["bhkMoppBvTreeShape"] = CreatebhkMoppBvTreeShape;
-	global_object_map["bhkMultiSphereShape"] = CreatebhkMultiSphereShape;
-	global_object_map["bhkNiTriStripsShape"] = CreatebhkNiTriStripsShape;
-	global_object_map["bhkPackedNiTriStripsShape"] = CreatebhkPackedNiTriStripsShape;
-	global_object_map["bhkPrismaticConstraint"] = CreatebhkPrismaticConstraint;
-	global_object_map["bhkRagdollConstraint"] = CreatebhkRagdollConstraint;
-	global_object_map["bhkRigidBody"] = CreatebhkRigidBody;
-	global_object_map["bhkRigidBodyT"] = CreatebhkRigidBodyT;
-	global_object_map["bhkSimpleShapePhantom"] = CreatebhkSimpleShapePhantom;
-	global_object_map["bhkSPCollisionObject"] = CreatebhkSPCollisionObject;
-	global_object_map["bhkSphereShape"] = CreatebhkSphereShape;
-	global_object_map["bhkStiffSpringConstraint"] = CreatebhkStiffSpringConstraint;
-	global_object_map["bhkTransformShape"] = CreatebhkTransformShape;
-	global_object_map["bhkConvexTransformShape"] = CreatebhkConvexTransformShape;
-	global_object_map["BSBound"] = CreateBSBound;
-	global_object_map["BSFurnitureMarker"] = CreateBSFurnitureMarker;
-	global_object_map["BSParentVelocityModifier"] = CreateBSParentVelocityModifier;
-	global_object_map["BSPSysArrayEmitter"] = CreateBSPSysArrayEmitter;
-	global_object_map["BSXFlags"] = CreateBSXFlags;
-	global_object_map["hkPackedNiTriStripsData"] = CreatehkPackedNiTriStripsData;
-	global_object_map["NiAlphaController"] = CreateNiAlphaController;
-	global_object_map["NiAlphaProperty"] = CreateNiAlphaProperty;
-	global_object_map["NiAmbientLight"] = CreateNiAmbientLight;
-	global_object_map["NiAutoNormalParticlesData"] = CreateNiAutoNormalParticlesData;
-	global_object_map["NiBinaryExtraData"] = CreateNiBinaryExtraData;
-	global_object_map["NiBlendBoolInterpolator"] = CreateNiBlendBoolInterpolator;
-	global_object_map["NiBlendFloatInterpolator"] = CreateNiBlendFloatInterpolator;
-	global_object_map["NiBlendPoint3Interpolator"] = CreateNiBlendPoint3Interpolator;
-	global_object_map["NiBlendTransformInterpolator"] = CreateNiBlendTransformInterpolator;
-	global_object_map["NiBoneLODController"] = CreateNiBoneLODController;
-	global_object_map["NiBoolData"] = CreateNiBoolData;
-	global_object_map["NiBooleanExtraData"] = CreateNiBooleanExtraData;
-	global_object_map["NiBoolInterpolator"] = CreateNiBoolInterpolator;
-	global_object_map["NiBoolTimelineInterpolator"] = CreateNiBoolTimelineInterpolator;
-	global_object_map["NiBSBoneLODController"] = CreateNiBSBoneLODController;
-	global_object_map["NiBSplineBasisData"] = CreateNiBSplineBasisData;
-	global_object_map["NiBSplineCompFloatInterpolator"] = CreateNiBSplineCompFloatInterpolator;
-	global_object_map["NiBSplineCompPoint3Interpolator"] = CreateNiBSplineCompPoint3Interpolator;
-	global_object_map["NiBSplineCompTransformInterpolator"] = CreateNiBSplineCompTransformInterpolator;
-	global_object_map["NiBSplineData"] = CreateNiBSplineData;
-	global_object_map["NiCamera"] = CreateNiCamera;
-	global_object_map["NiCollisionData"] = CreateNiCollisionData;
-	global_object_map["NiColorData"] = CreateNiColorData;
-	global_object_map["NiColorExtraData"] = CreateNiColorExtraData;
-	global_object_map["NiControllerManager"] = CreateNiControllerManager;
-	global_object_map["NiControllerSequence"] = CreateNiControllerSequence;
-	global_object_map["NiDefaultAVObjectPalette"] = CreateNiDefaultAVObjectPalette;
-	global_object_map["NiDirectionalLight"] = CreateNiDirectionalLight;
-	global_object_map["NiDitherProperty"] = CreateNiDitherProperty;
-	global_object_map["NiFlipController"] = CreateNiFlipController;
-	global_object_map["NiFloatData"] = CreateNiFloatData;
-	global_object_map["NiFloatExtraData"] = CreateNiFloatExtraData;
-	global_object_map["NiFloatExtraDataController"] = CreateNiFloatExtraDataController;
-	global_object_map["NiFloatInterpolator"] = CreateNiFloatInterpolator;
-	global_object_map["NiFloatsExtraData"] = CreateNiFloatsExtraData;
-	global_object_map["NiFogProperty"] = CreateNiFogProperty;
-	global_object_map["NiGeomMorpherController"] = CreateNiGeomMorpherController;
-	global_object_map["NiGravity"] = CreateNiGravity;
-	global_object_map["NiIntegerExtraData"] = CreateNiIntegerExtraData;
-	global_object_map["NiIntegersExtraData"] = CreateNiIntegersExtraData;
-	global_object_map["NiKeyframeController"] = CreateNiKeyframeController;
-	global_object_map["BSKeyframeController"] = CreateBSKeyframeController;
-	global_object_map["NiKeyframeData"] = CreateNiKeyframeData;
-	global_object_map["NiLightColorController"] = CreateNiLightColorController;
-	global_object_map["NiLightDimmerController"] = CreateNiLightDimmerController;
-	global_object_map["NiLookAtController"] = CreateNiLookAtController;
-	global_object_map["NiLookAtInterpolator"] = CreateNiLookAtInterpolator;
-	global_object_map["NiMaterialColorController"] = CreateNiMaterialColorController;
-	global_object_map["NiMaterialProperty"] = CreateNiMaterialProperty;
-	global_object_map["NiMeshPSysData"] = CreateNiMeshPSysData;
-	global_object_map["NiMorphData"] = CreateNiMorphData;
-	global_object_map["NiMultiTargetTransformController"] = CreateNiMultiTargetTransformController;
-	global_object_map["NiNode"] = CreateNiNode;
-	global_object_map["AvoidNode"] = CreateAvoidNode;
-	global_object_map["FxWidget"] = CreateFxWidget;
-	global_object_map["FxButton"] = CreateFxButton;
-	global_object_map["FxRadioButton"] = CreateFxRadioButton;
-	global_object_map["NiBillboardNode"] = CreateNiBillboardNode;
-	global_object_map["NiBSAnimationNode"] = CreateNiBSAnimationNode;
-	global_object_map["NiBSParticleNode"] = CreateNiBSParticleNode;
-	global_object_map["NiLODNode"] = CreateNiLODNode;
-	global_object_map["NiPalette"] = CreateNiPalette;
-	global_object_map["NiParticleBomb"] = CreateNiParticleBomb;
-	global_object_map["NiParticleColorModifier"] = CreateNiParticleColorModifier;
-	global_object_map["NiParticleGrowFade"] = CreateNiParticleGrowFade;
-	global_object_map["NiParticleMeshModifier"] = CreateNiParticleMeshModifier;
-	global_object_map["NiParticleRotation"] = CreateNiParticleRotation;
-	global_object_map["NiParticles"] = CreateNiParticles;
-	global_object_map["NiAutoNormalParticles"] = CreateNiAutoNormalParticles;
-	global_object_map["NiParticleMeshes"] = CreateNiParticleMeshes;
-	global_object_map["NiParticlesData"] = CreateNiParticlesData;
-	global_object_map["NiParticleMeshesData"] = CreateNiParticleMeshesData;
-	global_object_map["NiParticleSystem"] = CreateNiParticleSystem;
-	global_object_map["NiMeshParticleSystem"] = CreateNiMeshParticleSystem;
-	global_object_map["NiParticleSystemController"] = CreateNiParticleSystemController;
-	global_object_map["NiBSPArrayController"] = CreateNiBSPArrayController;
-	global_object_map["NiPathController"] = CreateNiPathController;
-	global_object_map["NiPathInterpolator"] = CreateNiPathInterpolator;
-	global_object_map["NiPixelData"] = CreateNiPixelData;
-	global_object_map["NiPlanarCollider"] = CreateNiPlanarCollider;
-	global_object_map["NiPoint3Interpolator"] = CreateNiPoint3Interpolator;
-	global_object_map["NiPointLight"] = CreateNiPointLight;
-	global_object_map["NiPosData"] = CreateNiPosData;
-	global_object_map["NiPSysAgeDeathModifier"] = CreateNiPSysAgeDeathModifier;
-	global_object_map["NiPSysBombModifier"] = CreateNiPSysBombModifier;
-	global_object_map["NiPSysBoundUpdateModifier"] = CreateNiPSysBoundUpdateModifier;
-	global_object_map["NiPSysBoxEmitter"] = CreateNiPSysBoxEmitter;
-	global_object_map["NiPSysColliderManager"] = CreateNiPSysColliderManager;
-	global_object_map["NiPSysColorModifier"] = CreateNiPSysColorModifier;
-	global_object_map["NiPSysCylinderEmitter"] = CreateNiPSysCylinderEmitter;
-	global_object_map["NiPSysData"] = CreateNiPSysData;
-	global_object_map["NiPSysDragModifier"] = CreateNiPSysDragModifier;
-	global_object_map["NiPSysEmitterCtlr"] = CreateNiPSysEmitterCtlr;
-	global_object_map["NiPSysEmitterCtlrData"] = CreateNiPSysEmitterCtlrData;
-	global_object_map["NiPSysEmitterDeclinationCtlr"] = CreateNiPSysEmitterDeclinationCtlr;
-	global_object_map["NiPSysEmitterDeclinationVarCtlr"] = CreateNiPSysEmitterDeclinationVarCtlr;
-	global_object_map["NiPSysEmitterInitialRadiusCtlr"] = CreateNiPSysEmitterInitialRadiusCtlr;
-	global_object_map["NiPSysEmitterLifeSpanCtlr"] = CreateNiPSysEmitterLifeSpanCtlr;
-	global_object_map["NiPSysEmitterSpeedCtlr"] = CreateNiPSysEmitterSpeedCtlr;
-	global_object_map["NiPSysGravityModifier"] = CreateNiPSysGravityModifier;
-	global_object_map["NiPSysGravityStrengthCtlr"] = CreateNiPSysGravityStrengthCtlr;
-	global_object_map["NiPSysGrowFadeModifier"] = CreateNiPSysGrowFadeModifier;
-	global_object_map["NiPSysMeshEmitter"] = CreateNiPSysMeshEmitter;
-	global_object_map["NiPSysMeshUpdateModifier"] = CreateNiPSysMeshUpdateModifier;
-	global_object_map["NiPSysModifierActiveCtlr"] = CreateNiPSysModifierActiveCtlr;
-	global_object_map["NiPSysPlanarCollider"] = CreateNiPSysPlanarCollider;
-	global_object_map["NiPSysPositionModifier"] = CreateNiPSysPositionModifier;
-	global_object_map["NiPSysResetOnLoopCtlr"] = CreateNiPSysResetOnLoopCtlr;
-	global_object_map["NiPSysRotationModifier"] = CreateNiPSysRotationModifier;
-	global_object_map["NiPSysSpawnModifier"] = CreateNiPSysSpawnModifier;
-	global_object_map["NiPSysSphereEmitter"] = CreateNiPSysSphereEmitter;
-	global_object_map["NiPSysUpdateCtlr"] = CreateNiPSysUpdateCtlr;
-	global_object_map["NiRangeLODData"] = CreateNiRangeLODData;
-	global_object_map["NiScreenLODData"] = CreateNiScreenLODData;
-	global_object_map["NiRotatingParticles"] = CreateNiRotatingParticles;
-	global_object_map["NiRotatingParticlesData"] = CreateNiRotatingParticlesData;
-	global_object_map["NiSequenceStreamHelper"] = CreateNiSequenceStreamHelper;
-	global_object_map["NiShadeProperty"] = CreateNiShadeProperty;
-	global_object_map["NiSkinData"] = CreateNiSkinData;
-	global_object_map["NiSkinInstance"] = CreateNiSkinInstance;
-	global_object_map["NiClodSkinInstance"] = CreateNiClodSkinInstance;
-	global_object_map["NiSkinPartition"] = CreateNiSkinPartition;
-	global_object_map["NiSourceTexture"] = CreateNiSourceTexture;
-	global_object_map["NiSpecularProperty"] = CreateNiSpecularProperty;
-	global_object_map["NiSphericalCollider"] = CreateNiSphericalCollider;
-	global_object_map["NiSpotLight"] = CreateNiSpotLight;
-	global_object_map["NiStencilProperty"] = CreateNiStencilProperty;
-	global_object_map["NiStringExtraData"] = CreateNiStringExtraData;
-	global_object_map["NiStringPalette"] = CreateNiStringPalette;
-	global_object_map["NiStringsExtraData"] = CreateNiStringsExtraData;
-	global_object_map["NiTextKeyExtraData"] = CreateNiTextKeyExtraData;
-	global_object_map["NiTextureEffect"] = CreateNiTextureEffect;
-	global_object_map["NiTextureTransformController"] = CreateNiTextureTransformController;
-	global_object_map["NiTextureModeProperty"] = CreateNiTextureModeProperty;
-	global_object_map["NiImage"] = CreateNiImage;
-	global_object_map["NiTextureProperty"] = CreateNiTextureProperty;
-	global_object_map["NiTexturingProperty"] = CreateNiTexturingProperty;
-	global_object_map["NiTransformController"] = CreateNiTransformController;
-	global_object_map["NiTransformData"] = CreateNiTransformData;
-	global_object_map["NiTransformInterpolator"] = CreateNiTransformInterpolator;
-	global_object_map["NiTriShape"] = CreateNiTriShape;
-	global_object_map["NiTriShapeData"] = CreateNiTriShapeData;
-	global_object_map["NiTriStrips"] = CreateNiTriStrips;
-	global_object_map["NiTriStripsData"] = CreateNiTriStripsData;
-	global_object_map["NiClod"] = CreateNiClod;
-	global_object_map["NiClodData"] = CreateNiClodData;
-	global_object_map["NiUVController"] = CreateNiUVController;
-	global_object_map["NiUVData"] = CreateNiUVData;
-	global_object_map["NiVectorExtraData"] = CreateNiVectorExtraData;
-	global_object_map["NiVertexColorProperty"] = CreateNiVertexColorProperty;
-	global_object_map["NiVertWeightsExtraData"] = CreateNiVertWeightsExtraData;
-	global_object_map["NiVisController"] = CreateNiVisController;
-	global_object_map["NiVisData"] = CreateNiVisData;
-	global_object_map["NiWireframeProperty"] = CreateNiWireframeProperty;
-	global_object_map["NiZBufferProperty"] = CreateNiZBufferProperty;
-	global_object_map["RootCollisionNode"] = CreateRootCollisionNode;
-}
-}
diff --git a/src/niflib.cpp b/src/niflib.cpp
index 6a18a0542c7ac0c687e5bcbfcf525c53aa4fca9e..c87f1071224a5d00b7875a50fa389fab6c79e289 100644
--- a/src/niflib.cpp
+++ b/src/niflib.cpp
@@ -37,14 +37,13 @@ All rights reserved.  Please see niflib.h for licence. */
 namespace Niflib {
 
 //Stores the mapping between object names and factory function pointers to create them
-typedef NiObject * (*blk_factory_func)();
+typedef NiObject * (*obj_factory_func)();
 bool global_object_map_init = false;
-map<string, blk_factory_func> global_object_map;
+map<string, obj_factory_func> global_object_map;
 
 //Utility Functions
 void EnumerateObjects( NiObject * root, map<Type*,unsigned int> & type_map, map<NiObjectRef, unsigned int> & link_map, bool reverse = false );
 NiObjectRef FindRoot( vector<NiObjectRef> const & objects );
-void RegisterObjectFactories ();
 NiObjectRef GetObjectByType( NiObject * root, const Type & type );
 
 /*!
@@ -61,16 +60,9 @@ static void SplitNifTree( NiObject * root_object, NiObject * xnif_root, list<NiO
 //--Function Bodies--//
 
 NiObjectRef CreateObject( string obj_type ) {
-	
-	//Initialize the global object list if it hasn't been done yet
-	if ( global_object_map_init == false ) {
-		RegisterObjectFactories();
-		global_object_map_init = true;
-	}
-
 	NiObject * object = NULL;
 
-	map<string, blk_factory_func>::iterator it;
+	map<string, obj_factory_func>::iterator it;
 	it = global_object_map.find(obj_type);
 
 	if ( it != global_object_map.end() ) {
diff --git a/src/obj/ABoneLODController.cpp b/src/obj/ABoneLODController.cpp
index 057818a86ac32326628145fc936a038f9aadb838..37f8df7e359258197fa96a8a579b685cab52a832 100644
--- a/src/obj/ABoneLODController.cpp
+++ b/src/obj/ABoneLODController.cpp
@@ -99,3 +99,27 @@ void ABoneLODController::ClearNodeGroups() {
    nodeGroups.clear();
    numNodeGroups2 = nodeGroups.size();
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["ABoneLODController"] = ABoneLODController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * ABoneLODController::Create() {
+	return new ABoneLODController;
+}
diff --git a/src/obj/AKeyedData.cpp b/src/obj/AKeyedData.cpp
index 5c6ea998c839c13772b181d4a88fb6ff348e9b41..8d5f0ffb5c4cbb15738b37b6d82d9d2fa4541d36 100644
--- a/src/obj/AKeyedData.cpp
+++ b/src/obj/AKeyedData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> AKeyedData::GetRefs() const {
 const Type & AKeyedData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["AKeyedData"] = AKeyedData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * AKeyedData::Create() {
+	return new AKeyedData;
+}
diff --git a/src/obj/APSysCtlr.cpp b/src/obj/APSysCtlr.cpp
index e400297764e3c21e70e9242022fde0ad5a40286c..7cf97a15dd30deae00d16d789ea37aea0ef84bca 100644
--- a/src/obj/APSysCtlr.cpp
+++ b/src/obj/APSysCtlr.cpp
@@ -42,3 +42,27 @@ string APSysCtlr::GetModifierName() const {
 void APSysCtlr::SetModifierName( string value ) {
 	modifierName = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["APSysCtlr"] = APSysCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * APSysCtlr::Create() {
+	return new APSysCtlr;
+}
diff --git a/src/obj/APSysData.cpp b/src/obj/APSysData.cpp
index 794758e22db9b61635545a4210ee4c909db44f4b..099eae4593372123e1c6bcfb3331901b990a57f1 100644
--- a/src/obj/APSysData.cpp
+++ b/src/obj/APSysData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> APSysData::GetRefs() const {
 const Type & APSysData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["APSysData"] = APSysData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * APSysData::Create() {
+	return new APSysData;
+}
diff --git a/src/obj/AParticleModifier.cpp b/src/obj/AParticleModifier.cpp
index 76c75a7275097e8b5338a7ee4846cdbb1cd3e8ce..c7d0a3971edf9be62ea9ce4fbb62a58ba121fb4f 100644
--- a/src/obj/AParticleModifier.cpp
+++ b/src/obj/AParticleModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> AParticleModifier::GetRefs() const {
 const Type & AParticleModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["AParticleModifier"] = AParticleModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * AParticleModifier::Create() {
+	return new AParticleModifier;
+}
diff --git a/src/obj/AbhkConstraint.cpp b/src/obj/AbhkConstraint.cpp
index cf17aa22e3f5252cf7804da6d815eff19088ed82..8467375e03ebf963cbb083367e2107765c815ec5 100644
--- a/src/obj/AbhkConstraint.cpp
+++ b/src/obj/AbhkConstraint.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> AbhkConstraint::GetRefs() const {
 const Type & AbhkConstraint::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["AbhkConstraint"] = AbhkConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * AbhkConstraint::Create() {
+	return new AbhkConstraint;
+}
diff --git a/src/obj/AbhkRagdollConstraint.cpp b/src/obj/AbhkRagdollConstraint.cpp
index 620b15db98a58bbb16a2f73e670106d0710021d5..28cbb7fe74086c44b29318ac7ad5f9bc9b00803b 100644
--- a/src/obj/AbhkRagdollConstraint.cpp
+++ b/src/obj/AbhkRagdollConstraint.cpp
@@ -35,3 +35,27 @@ const Type & AbhkRagdollConstraint::GetType() const {
 	return TYPE;
 };
 
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["AbhkRagdollConstraint"] = AbhkRagdollConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * AbhkRagdollConstraint::Create() {
+	return new AbhkRagdollConstraint;
+}
diff --git a/src/obj/AbhkShapeCollection.cpp b/src/obj/AbhkShapeCollection.cpp
index 9a2db0b29e731776922f54a60a48b0e3fc2ca18b..8e5e7bb5483132f8ca82721f19014765eb672d2c 100644
--- a/src/obj/AbhkShapeCollection.cpp
+++ b/src/obj/AbhkShapeCollection.cpp
@@ -35,3 +35,27 @@ const Type & AbhkShapeCollection::GetType() const {
 	return TYPE;
 };
 
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["AbhkShapeCollection"] = AbhkShapeCollection::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * AbhkShapeCollection::Create() {
+	return new AbhkShapeCollection;
+}
diff --git a/src/obj/AvoidNode.cpp b/src/obj/AvoidNode.cpp
index 390e600d12debb96f2a8cf0fdf22f9833710cdf2..5382dcb021f69d2417647133e6f902537c24148a 100644
--- a/src/obj/AvoidNode.cpp
+++ b/src/obj/AvoidNode.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> AvoidNode::GetRefs() const {
 const Type & AvoidNode::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["AvoidNode"] = AvoidNode::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * AvoidNode::Create() {
+	return new AvoidNode;
+}
diff --git a/src/obj/BSBound.cpp b/src/obj/BSBound.cpp
index 15479d566beef66863b9c24eb04fd5843ea066d5..1dc059613f5323a416326eec089fa9a8e5490f04 100644
--- a/src/obj/BSBound.cpp
+++ b/src/obj/BSBound.cpp
@@ -50,3 +50,27 @@ Vector3 BSBound::GetDimensions() const {
 void BSBound::SetDimensions( const Vector3 & value ) {
 	dimensions = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["BSBound"] = BSBound::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * BSBound::Create() {
+	return new BSBound;
+}
diff --git a/src/obj/BSFurnitureMarker.cpp b/src/obj/BSFurnitureMarker.cpp
index 14696e4c040e4874f6560db64f0b025e68a6a17c..53557077d417fefa3c55adc2186680c4bd65de3b 100644
--- a/src/obj/BSFurnitureMarker.cpp
+++ b/src/obj/BSFurnitureMarker.cpp
@@ -44,3 +44,27 @@ void BSFurnitureMarker::SetFurniturePositions( const vector<FurniturePosition> &
 	numPositions = (unsigned int)(n.size());
 	positions = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["BSFurnitureMarker"] = BSFurnitureMarker::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * BSFurnitureMarker::Create() {
+	return new BSFurnitureMarker;
+}
diff --git a/src/obj/BSKeyframeController.cpp b/src/obj/BSKeyframeController.cpp
index c7268d46339eff5a1dc68d8442173dc4bd697057..30095be722edbefa7eb14d07f417f11767dba0c6 100644
--- a/src/obj/BSKeyframeController.cpp
+++ b/src/obj/BSKeyframeController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> BSKeyframeController::GetRefs() const {
 const Type & BSKeyframeController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["BSKeyframeController"] = BSKeyframeController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * BSKeyframeController::Create() {
+	return new BSKeyframeController;
+}
diff --git a/src/obj/BSPSysArrayEmitter.cpp b/src/obj/BSPSysArrayEmitter.cpp
index bddbdc6d166d9088a65255fe8b80af8303302b92..51027d191f04827723936f38f0b9d3f47635492b 100644
--- a/src/obj/BSPSysArrayEmitter.cpp
+++ b/src/obj/BSPSysArrayEmitter.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> BSPSysArrayEmitter::GetRefs() const {
 const Type & BSPSysArrayEmitter::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["BSPSysArrayEmitter"] = BSPSysArrayEmitter::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * BSPSysArrayEmitter::Create() {
+	return new BSPSysArrayEmitter;
+}
diff --git a/src/obj/BSParentVelocityModifier.cpp b/src/obj/BSParentVelocityModifier.cpp
index afc41ad9ddc9ec7c3b6a00278230440e9e5cafb1..8eb47e2ff48c2545ff964168e0d5ebd2ffb75b04 100644
--- a/src/obj/BSParentVelocityModifier.cpp
+++ b/src/obj/BSParentVelocityModifier.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> BSParentVelocityModifier::GetRefs() const {
 const Type & BSParentVelocityModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["BSParentVelocityModifier"] = BSParentVelocityModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * BSParentVelocityModifier::Create() {
+	return new BSParentVelocityModifier;
+}
diff --git a/src/obj/BSXFlags.cpp b/src/obj/BSXFlags.cpp
index bf8c8331554005e2caf7406199865ce03b6a1e41..97b139d984cf2fd3ec1a90776932432814179bcf 100644
--- a/src/obj/BSXFlags.cpp
+++ b/src/obj/BSXFlags.cpp
@@ -42,3 +42,27 @@ unsigned int BSXFlags::GetFlags() const {
 void BSXFlags::SetFlags( unsigned int value ) {
 	flags = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["BSXFlags"] = BSXFlags::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * BSXFlags::Create() {
+	return new BSXFlags;
+}
diff --git a/src/obj/FxButton.cpp b/src/obj/FxButton.cpp
index 3aeed02c799f2aeaa78ba2da88255ff35341ec1c..de0c631b597ba94b5c221601b26bcff871225f29 100644
--- a/src/obj/FxButton.cpp
+++ b/src/obj/FxButton.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> FxButton::GetRefs() const {
 const Type & FxButton::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["FxButton"] = FxButton::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * FxButton::Create() {
+	return new FxButton;
+}
diff --git a/src/obj/FxRadioButton.cpp b/src/obj/FxRadioButton.cpp
index 6e1f9edf4f8c948328a6b6bf668ca43306d52c23..70265bd49c9247c6604957fd2a6f21ee83f68ff1 100644
--- a/src/obj/FxRadioButton.cpp
+++ b/src/obj/FxRadioButton.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> FxRadioButton::GetRefs() const {
 const Type & FxRadioButton::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["FxRadioButton"] = FxRadioButton::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * FxRadioButton::Create() {
+	return new FxRadioButton;
+}
diff --git a/src/obj/FxWidget.cpp b/src/obj/FxWidget.cpp
index 6ca7a9f6d7c8329876484eec664df7cbfcadb033..e0e4742d037f523be5e9e0ba4c47fe81cf7cdf2a 100644
--- a/src/obj/FxWidget.cpp
+++ b/src/obj/FxWidget.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> FxWidget::GetRefs() const {
 const Type & FxWidget::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["FxWidget"] = FxWidget::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * FxWidget::Create() {
+	return new FxWidget;
+}
diff --git a/src/obj/NiAVObject.cpp b/src/obj/NiAVObject.cpp
index 2eb517f3c5c53dc7b14e90a6d87c245d8f9b72c8..ba0e657616ac90158e8ea0cb6e2941e3de17391b 100644
--- a/src/obj/NiAVObject.cpp
+++ b/src/obj/NiAVObject.cpp
@@ -239,3 +239,27 @@ void NiAVObject::SetBoundingBox( const BoundingBox & n ) {
 const Type & NiAVObject::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiAVObject"] = NiAVObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiAVObject::Create() {
+	return new NiAVObject;
+}
diff --git a/src/obj/NiAlphaController.cpp b/src/obj/NiAlphaController.cpp
index 94e7b63881eafb4051acc43c581026604f87f992..32dc1e4fc121e082025a467972264f974857ab05 100644
--- a/src/obj/NiAlphaController.cpp
+++ b/src/obj/NiAlphaController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiAlphaController::GetRefs() const {
 const Type & NiAlphaController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiAlphaController"] = NiAlphaController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiAlphaController::Create() {
+	return new NiAlphaController;
+}
diff --git a/src/obj/NiAlphaProperty.cpp b/src/obj/NiAlphaProperty.cpp
index 87aee482db02e3113ad710f44ff310ba91351300..64a91fd4a276502a42e8650938d0d2a27357a0c6 100644
--- a/src/obj/NiAlphaProperty.cpp
+++ b/src/obj/NiAlphaProperty.cpp
@@ -103,3 +103,27 @@ bool NiAlphaProperty::GetTriangleSortMode() const {
 void NiAlphaProperty::SetTriangleSortMode(bool value) {
    flags = NIFLIB_MASK_FLAG(flags, value?0:1, 13, 0x1);
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiAlphaProperty"] = NiAlphaProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiAlphaProperty::Create() {
+	return new NiAlphaProperty;
+}
diff --git a/src/obj/NiAmbientLight.cpp b/src/obj/NiAmbientLight.cpp
index b584b732c88d1ac43169af45e35efb07d8b18d26..ff5a83b3e795b24a07ee6f01b57f1258bfdef5c2 100644
--- a/src/obj/NiAmbientLight.cpp
+++ b/src/obj/NiAmbientLight.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiAmbientLight::GetRefs() const {
 const Type & NiAmbientLight::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiAmbientLight"] = NiAmbientLight::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiAmbientLight::Create() {
+	return new NiAmbientLight;
+}
diff --git a/src/obj/NiAutoNormalParticles.cpp b/src/obj/NiAutoNormalParticles.cpp
index b88e90ee9c37080b0e31523bc07723a269c41114..a84249aef4921ffe47a3c2e046c43f4e4e6597b1 100644
--- a/src/obj/NiAutoNormalParticles.cpp
+++ b/src/obj/NiAutoNormalParticles.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiAutoNormalParticles::GetRefs() const {
 const Type & NiAutoNormalParticles::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiAutoNormalParticles"] = NiAutoNormalParticles::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiAutoNormalParticles::Create() {
+	return new NiAutoNormalParticles;
+}
diff --git a/src/obj/NiAutoNormalParticlesData.cpp b/src/obj/NiAutoNormalParticlesData.cpp
index 4f6a50854206f5463a005d5dcaa5becc16b3392a..6eaed993857de73a109f249275ec29e35ad52acd 100644
--- a/src/obj/NiAutoNormalParticlesData.cpp
+++ b/src/obj/NiAutoNormalParticlesData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiAutoNormalParticlesData::GetRefs() const {
 const Type & NiAutoNormalParticlesData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiAutoNormalParticlesData"] = NiAutoNormalParticlesData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiAutoNormalParticlesData::Create() {
+	return new NiAutoNormalParticlesData;
+}
diff --git a/src/obj/NiBSAnimationNode.cpp b/src/obj/NiBSAnimationNode.cpp
index f6cc4eac2c55bc9fede288202f82f07f1f498738..b0d779f1b5192599ad9a9cbac50e7801661d2681 100644
--- a/src/obj/NiBSAnimationNode.cpp
+++ b/src/obj/NiBSAnimationNode.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBSAnimationNode::GetRefs() const {
 const Type & NiBSAnimationNode::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSAnimationNode"] = NiBSAnimationNode::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSAnimationNode::Create() {
+	return new NiBSAnimationNode;
+}
diff --git a/src/obj/NiBSBoneLODController.cpp b/src/obj/NiBSBoneLODController.cpp
index 11c257700492f73260889fbf4a492318c64d4c09..ada2b8001d852bb8049802c74f4e7632598a7f45 100644
--- a/src/obj/NiBSBoneLODController.cpp
+++ b/src/obj/NiBSBoneLODController.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBSBoneLODController::GetRefs() const {
 const Type & NiBSBoneLODController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSBoneLODController"] = NiBSBoneLODController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSBoneLODController::Create() {
+	return new NiBSBoneLODController;
+}
diff --git a/src/obj/NiBSPArrayController.cpp b/src/obj/NiBSPArrayController.cpp
index cf60d196bd9d6c5b5f5f001d115678f57fac6f30..a68bd3c8b49b0f8093ea6927181da1ca6fa67f05 100644
--- a/src/obj/NiBSPArrayController.cpp
+++ b/src/obj/NiBSPArrayController.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBSPArrayController::GetRefs() const {
 const Type & NiBSPArrayController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSPArrayController"] = NiBSPArrayController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSPArrayController::Create() {
+	return new NiBSPArrayController;
+}
diff --git a/src/obj/NiBSParticleNode.cpp b/src/obj/NiBSParticleNode.cpp
index 726459d9379002b625f481c8752257b24fead942..48041f2a660646477a3623a76abb7a25bef5df54 100644
--- a/src/obj/NiBSParticleNode.cpp
+++ b/src/obj/NiBSParticleNode.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBSParticleNode::GetRefs() const {
 const Type & NiBSParticleNode::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSParticleNode"] = NiBSParticleNode::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSParticleNode::Create() {
+	return new NiBSParticleNode;
+}
diff --git a/src/obj/NiBSplineBasisData.cpp b/src/obj/NiBSplineBasisData.cpp
index b5ada2cb7661430854572b0646bc91a82b64a7c7..56bf4229abbcfff19e0a544c5b1aa7c269458221 100644
--- a/src/obj/NiBSplineBasisData.cpp
+++ b/src/obj/NiBSplineBasisData.cpp
@@ -42,3 +42,27 @@ unsigned int NiBSplineBasisData::GetNumControlPt() const {
 void NiBSplineBasisData::SetNumControlPt( unsigned int value ) {
 	numControlPt = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSplineBasisData"] = NiBSplineBasisData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSplineBasisData::Create() {
+	return new NiBSplineBasisData;
+}
diff --git a/src/obj/NiBSplineCompFloatInterpolator.cpp b/src/obj/NiBSplineCompFloatInterpolator.cpp
index 8b7306a93e70ed739b7f3751b96d9c872833c5a6..b40a50ae0e5d8d0abdfaf1e71eae4d9993ba48b0 100644
--- a/src/obj/NiBSplineCompFloatInterpolator.cpp
+++ b/src/obj/NiBSplineCompFloatInterpolator.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBSplineCompFloatInterpolator::GetRefs() const {
 const Type & NiBSplineCompFloatInterpolator::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSplineCompFloatInterpolator"] = NiBSplineCompFloatInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSplineCompFloatInterpolator::Create() {
+	return new NiBSplineCompFloatInterpolator;
+}
diff --git a/src/obj/NiBSplineCompPoint3Interpolator.cpp b/src/obj/NiBSplineCompPoint3Interpolator.cpp
index 3eb7ca3c207869547069da894a8cd8dc9c715a6f..2bffb7f0ce67f360a5994ac689a5022fb9544e7d 100644
--- a/src/obj/NiBSplineCompPoint3Interpolator.cpp
+++ b/src/obj/NiBSplineCompPoint3Interpolator.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBSplineCompPoint3Interpolator::GetRefs() const {
 const Type & NiBSplineCompPoint3Interpolator::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSplineCompPoint3Interpolator"] = NiBSplineCompPoint3Interpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSplineCompPoint3Interpolator::Create() {
+	return new NiBSplineCompPoint3Interpolator;
+}
diff --git a/src/obj/NiBSplineCompTransformInterpolator.cpp b/src/obj/NiBSplineCompTransformInterpolator.cpp
index 1db53bcdf45346d7348095b317225c0a630b01a6..3f78b83bf45cd1d7eda01db3680447d31172e3b8 100644
--- a/src/obj/NiBSplineCompTransformInterpolator.cpp
+++ b/src/obj/NiBSplineCompTransformInterpolator.cpp
@@ -282,3 +282,27 @@ int NiBSplineCompTransformInterpolator::GetNumControlPt() const
    }
    return 0;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSplineCompTransformInterpolator"] = NiBSplineCompTransformInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSplineCompTransformInterpolator::Create() {
+	return new NiBSplineCompTransformInterpolator;
+}
diff --git a/src/obj/NiBSplineData.cpp b/src/obj/NiBSplineData.cpp
index a5b8a27cc61be5d2c7993b772a0c82d1df32e7a2..1a032df9ba71b1b38b84cf6c7f4c09eb220b1806 100644
--- a/src/obj/NiBSplineData.cpp
+++ b/src/obj/NiBSplineData.cpp
@@ -50,3 +50,27 @@ vector<short > NiBSplineData::GetControlPointRange(int offset, int count) const
    std::advance(srcend, offset + count);
    return vector<short>(srcbeg, srcend);
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSplineData"] = NiBSplineData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSplineData::Create() {
+	return new NiBSplineData;
+}
diff --git a/src/obj/NiBSplineInterpolator.cpp b/src/obj/NiBSplineInterpolator.cpp
index 95b1d68dae4aa72415fd1ccc9a696c34a1438c8c..90076816c074b80b0090d415cbf3a666a4078394 100644
--- a/src/obj/NiBSplineInterpolator.cpp
+++ b/src/obj/NiBSplineInterpolator.cpp
@@ -167,3 +167,27 @@ void NiBSplineInterpolator::bspline(int n, int t, int l, float *control, float *
    delete [] u;
    delete [] calc;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBSplineInterpolator"] = NiBSplineInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBSplineInterpolator::Create() {
+	return new NiBSplineInterpolator;
+}
diff --git a/src/obj/NiBillboardNode.cpp b/src/obj/NiBillboardNode.cpp
index 438fce324d5a3f18329b0360d81932cc97cfcc19..f8815582aa1fcb6bb41a46b94cf78132e63a881e 100644
--- a/src/obj/NiBillboardNode.cpp
+++ b/src/obj/NiBillboardNode.cpp
@@ -42,3 +42,27 @@ BillboardMode NiBillboardNode::GetBillboardMode() const {
 void NiBillboardNode::SetBillboardMode( BillboardMode value ) {
 	billboardMode = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBillboardNode"] = NiBillboardNode::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBillboardNode::Create() {
+	return new NiBillboardNode;
+}
diff --git a/src/obj/NiBinaryExtraData.cpp b/src/obj/NiBinaryExtraData.cpp
index 8d7bf168c2c51bce5a31cc069190b2b05bf7dbca..63ddd57a64de9b28a1ca7632a20c1ca43f565019 100644
--- a/src/obj/NiBinaryExtraData.cpp
+++ b/src/obj/NiBinaryExtraData.cpp
@@ -45,3 +45,27 @@ void NiBinaryExtraData::SetData( const vector<byte> & n ) {
 	binaryData.dataSize = (unsigned int)(n.size());
 	binaryData.data = n;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBinaryExtraData"] = NiBinaryExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBinaryExtraData::Create() {
+	return new NiBinaryExtraData;
+}
diff --git a/src/obj/NiBlendBoolInterpolator.cpp b/src/obj/NiBlendBoolInterpolator.cpp
index c08f8a4f3a98090142de1795322a503b963ccfc7..acf716ae847ec5ab063a76b03ff5dbd17c704f2e 100644
--- a/src/obj/NiBlendBoolInterpolator.cpp
+++ b/src/obj/NiBlendBoolInterpolator.cpp
@@ -42,3 +42,27 @@ byte NiBlendBoolInterpolator::GetBoolValue() const {
 void NiBlendBoolInterpolator::SetBoolValue( byte value ) {
 	boolValue = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBlendBoolInterpolator"] = NiBlendBoolInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBlendBoolInterpolator::Create() {
+	return new NiBlendBoolInterpolator;
+}
diff --git a/src/obj/NiBlendFloatInterpolator.cpp b/src/obj/NiBlendFloatInterpolator.cpp
index 5baefbca7b3111eb2a4f88b5888db7e10cdbcbbd..d9bbf7e030f9e26031265a61923c33c067a1d257 100644
--- a/src/obj/NiBlendFloatInterpolator.cpp
+++ b/src/obj/NiBlendFloatInterpolator.cpp
@@ -42,3 +42,27 @@ float NiBlendFloatInterpolator::GetFloatValue() const {
 void NiBlendFloatInterpolator::SetFloatValue( float value ) {
 	floatValue = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBlendFloatInterpolator"] = NiBlendFloatInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBlendFloatInterpolator::Create() {
+	return new NiBlendFloatInterpolator;
+}
diff --git a/src/obj/NiBlendInterpolator.cpp b/src/obj/NiBlendInterpolator.cpp
index febaf5a9e769e296d4b037996785d080fd2ede81..8ffa68a24c7dcdefab02a1fc15120cb3f04ffcb9 100644
--- a/src/obj/NiBlendInterpolator.cpp
+++ b/src/obj/NiBlendInterpolator.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBlendInterpolator::GetRefs() const {
 const Type & NiBlendInterpolator::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBlendInterpolator"] = NiBlendInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBlendInterpolator::Create() {
+	return new NiBlendInterpolator;
+}
diff --git a/src/obj/NiBlendPoint3Interpolator.cpp b/src/obj/NiBlendPoint3Interpolator.cpp
index 46685c4cc341a0c51b58df7bc8850b165c86794a..9300f8329f3c4495b9b35b82d2aca173d79425e3 100644
--- a/src/obj/NiBlendPoint3Interpolator.cpp
+++ b/src/obj/NiBlendPoint3Interpolator.cpp
@@ -42,3 +42,27 @@ Vector3 NiBlendPoint3Interpolator::GetPointValue() const {
 void NiBlendPoint3Interpolator::SetPointValue( Vector3 value ) {
 	pointValue = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBlendPoint3Interpolator"] = NiBlendPoint3Interpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBlendPoint3Interpolator::Create() {
+	return new NiBlendPoint3Interpolator;
+}
diff --git a/src/obj/NiBlendTransformInterpolator.cpp b/src/obj/NiBlendTransformInterpolator.cpp
index 057aa0fccbede5e6e5020e0e7679794cdd31526a..331c7624de4a8a4f56995f2487a18df213559d6e 100644
--- a/src/obj/NiBlendTransformInterpolator.cpp
+++ b/src/obj/NiBlendTransformInterpolator.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiBlendTransformInterpolator::GetRefs() const {
 const Type & NiBlendTransformInterpolator::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBlendTransformInterpolator"] = NiBlendTransformInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBlendTransformInterpolator::Create() {
+	return new NiBlendTransformInterpolator;
+}
diff --git a/src/obj/NiBoneLODController.cpp b/src/obj/NiBoneLODController.cpp
index c8a64d59af554eb6af6d5d2ab3afeef9659ee21f..2eaf8bdbf7fca91ede5ed00708f3d51f2d10b78d 100644
--- a/src/obj/NiBoneLODController.cpp
+++ b/src/obj/NiBoneLODController.cpp
@@ -38,3 +38,27 @@ list<NiObjectRef> NiBoneLODController::GetRefs() const {
 const Type & NiBoneLODController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBoneLODController"] = NiBoneLODController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBoneLODController::Create() {
+	return new NiBoneLODController;
+}
diff --git a/src/obj/NiBoolData.cpp b/src/obj/NiBoolData.cpp
index eaf1d66fbf2411e38f4959165ad15abb02dff3a2..2dc8c49c8c91326d494e5a426273d890b3b591a9 100644
--- a/src/obj/NiBoolData.cpp
+++ b/src/obj/NiBoolData.cpp
@@ -51,3 +51,27 @@ vector< Key<unsigned char> > NiBoolData::GetKeys() const {
 void NiBoolData::SetKeys( vector< Key<unsigned char> > const & keys ) {
 	data.keys = keys;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBoolData"] = NiBoolData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBoolData::Create() {
+	return new NiBoolData;
+}
diff --git a/src/obj/NiBoolInterpolator.cpp b/src/obj/NiBoolInterpolator.cpp
index ace48762258910c1dadfcd1be93fc4239ccfef18..93eac38e3be65f3f6ba51e9858a8fb76a992caba 100644
--- a/src/obj/NiBoolInterpolator.cpp
+++ b/src/obj/NiBoolInterpolator.cpp
@@ -51,3 +51,27 @@ Ref<NiBoolData > NiBoolInterpolator::GetData() const {
 void NiBoolInterpolator::SetData( NiBoolData * value ) {
 	data = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBoolInterpolator"] = NiBoolInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBoolInterpolator::Create() {
+	return new NiBoolInterpolator;
+}
diff --git a/src/obj/NiBoolTimelineInterpolator.cpp b/src/obj/NiBoolTimelineInterpolator.cpp
index 684cb2464cd80ecd08cf8fb67f1897ef8e972c35..d0934509c7f5dbc4f49e60392ea5a1d72f2d1d7a 100644
--- a/src/obj/NiBoolTimelineInterpolator.cpp
+++ b/src/obj/NiBoolTimelineInterpolator.cpp
@@ -51,3 +51,27 @@ Ref<NiBoolData> NiBoolTimelineInterpolator::GetData() const {
 void NiBoolTimelineInterpolator::SetData( NiBoolData * value ) {
 	data = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBoolTimelineInterpolator"] = NiBoolTimelineInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBoolTimelineInterpolator::Create() {
+	return new NiBoolTimelineInterpolator;
+}
diff --git a/src/obj/NiBooleanExtraData.cpp b/src/obj/NiBooleanExtraData.cpp
index df39e0428eaf0ccf031324be62ed237cb872e02f..eea4e528b3aa9088da1268a2d1ef570a3dfd10ad 100644
--- a/src/obj/NiBooleanExtraData.cpp
+++ b/src/obj/NiBooleanExtraData.cpp
@@ -42,3 +42,27 @@ bool NiBooleanExtraData::GetData() const {
 void NiBooleanExtraData::SetData( bool n ) {
 	booleanData = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiBooleanExtraData"] = NiBooleanExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiBooleanExtraData::Create() {
+	return new NiBooleanExtraData;
+}
diff --git a/src/obj/NiCamera.cpp b/src/obj/NiCamera.cpp
index 83eeee154f40187f0da66d8fdc9298b60cd39d2c..0167eb6cbe27865198cb225bd4cf7caf6e4c9559 100644
--- a/src/obj/NiCamera.cpp
+++ b/src/obj/NiCamera.cpp
@@ -131,3 +131,27 @@ float NiCamera::GetLodAdjust() const {
 void NiCamera::SetLodAdjust( float value ) {
 	lodAdjust = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiCamera"] = NiCamera::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiCamera::Create() {
+	return new NiCamera;
+}
diff --git a/src/obj/NiClod.cpp b/src/obj/NiClod.cpp
index fc1c82f2987e9143671ebd92cee4007c6a1e82a7..87a956d8dff6c6b7ddb836d813cedab173fee187 100644
--- a/src/obj/NiClod.cpp
+++ b/src/obj/NiClod.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiClod::GetRefs() const {
 const Type & NiClod::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiClod"] = NiClod::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiClod::Create() {
+	return new NiClod;
+}
diff --git a/src/obj/NiClodData.cpp b/src/obj/NiClodData.cpp
index 9dc33489b79517006b2b9945143277c6b441ccab..5672c36f526c90e4fff43e02c775ee5152562eca 100644
--- a/src/obj/NiClodData.cpp
+++ b/src/obj/NiClodData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiClodData::GetRefs() const {
 const Type & NiClodData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiClodData"] = NiClodData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiClodData::Create() {
+	return new NiClodData;
+}
diff --git a/src/obj/NiClodSkinInstance.cpp b/src/obj/NiClodSkinInstance.cpp
index 5aad23b1c048b1f7dc244595c57ba4fd8d9e62a1..c3d668a5ed67149c4310b370171358ce1e879e17 100644
--- a/src/obj/NiClodSkinInstance.cpp
+++ b/src/obj/NiClodSkinInstance.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiClodSkinInstance::GetRefs() const {
 const Type & NiClodSkinInstance::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiClodSkinInstance"] = NiClodSkinInstance::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiClodSkinInstance::Create() {
+	return new NiClodSkinInstance;
+}
diff --git a/src/obj/NiCollisionData.cpp b/src/obj/NiCollisionData.cpp
index 67c0ecc213f049acb6d06437e5da2eb10302167f..5f6d3455a39a5936c4843ddf61c35c67122f1a1c 100644
--- a/src/obj/NiCollisionData.cpp
+++ b/src/obj/NiCollisionData.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiCollisionData::GetRefs() const {
 const Type & NiCollisionData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiCollisionData"] = NiCollisionData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiCollisionData::Create() {
+	return new NiCollisionData;
+}
diff --git a/src/obj/NiCollisionObject.cpp b/src/obj/NiCollisionObject.cpp
index f8488a652a7fe6c8b0257d75aa2bfee9a6cbb97c..c202968fc8c72c56cb41d3eaf91f87c23131480d 100644
--- a/src/obj/NiCollisionObject.cpp
+++ b/src/obj/NiCollisionObject.cpp
@@ -52,3 +52,27 @@ Ref<NiObject > NiCollisionObject::GetBody() const {
 void NiCollisionObject::SetBody( NiObject * value ) {
 	body = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiCollisionObject"] = NiCollisionObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiCollisionObject::Create() {
+	return new NiCollisionObject;
+}
diff --git a/src/obj/NiColorData.cpp b/src/obj/NiColorData.cpp
index 4142b02e19f737970d715ad6ae63e194f5321f50..5904a0c19550f3e09622918feb7ea5344358ecdf 100644
--- a/src/obj/NiColorData.cpp
+++ b/src/obj/NiColorData.cpp
@@ -51,3 +51,27 @@ vector< Key<Color4> > NiColorData::GetKeys() const {
 void NiColorData::SetKeys( vector< Key<Color4> > const & keys ) {
 	data.keys = keys;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiColorData"] = NiColorData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiColorData::Create() {
+	return new NiColorData;
+}
diff --git a/src/obj/NiColorExtraData.cpp b/src/obj/NiColorExtraData.cpp
index eb7b5eee3a37e35ad185e4bbc97bda13c32ff814..b0d15a16ae3c42e5082b00622d2fe0a4cdde3590 100644
--- a/src/obj/NiColorExtraData.cpp
+++ b/src/obj/NiColorExtraData.cpp
@@ -42,3 +42,27 @@ Color4 NiColorExtraData::GetData() const {
 void NiColorExtraData::SetData( const Color4 & n ) {
 	data = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiColorExtraData"] = NiColorExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiColorExtraData::Create() {
+	return new NiColorExtraData;
+}
diff --git a/src/obj/NiControllerManager.cpp b/src/obj/NiControllerManager.cpp
index 4029ae5d3be1d9813a931b5d06fae74993573a40..75334c1176fd78d666801ae90e523b735745813b 100644
--- a/src/obj/NiControllerManager.cpp
+++ b/src/obj/NiControllerManager.cpp
@@ -93,3 +93,27 @@ Ref<NiDefaultAVObjectPalette > NiControllerManager::GetObjectPalette() const {
 void NiControllerManager::SetObjectPalette( NiDefaultAVObjectPalette * value ) {
 	objectPalette = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiControllerManager"] = NiControllerManager::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiControllerManager::Create() {
+	return new NiControllerManager;
+}
diff --git a/src/obj/NiControllerSequence.cpp b/src/obj/NiControllerSequence.cpp
index d531fb31029e32602aa2508a3b32f355736d55ba..0658d9329d65cd98465837f3fd1e77fd2c798708 100644
--- a/src/obj/NiControllerSequence.cpp
+++ b/src/obj/NiControllerSequence.cpp
@@ -223,3 +223,27 @@ float NiControllerSequence::GetWeight() const {
 void NiControllerSequence::SetWeight( const float value ) {
 	weight = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiControllerSequence"] = NiControllerSequence::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiControllerSequence::Create() {
+	return new NiControllerSequence;
+}
diff --git a/src/obj/NiDefaultAVObjectPalette.cpp b/src/obj/NiDefaultAVObjectPalette.cpp
index f7ddb9e292fb302a43cba98f10cd94bdc3e2f659..a9dac865af692dabdba6adcfae12e914b96849e3 100644
--- a/src/obj/NiDefaultAVObjectPalette.cpp
+++ b/src/obj/NiDefaultAVObjectPalette.cpp
@@ -54,3 +54,27 @@ void NiDefaultAVObjectPalette::SetObjs( const vector<Ref<NiAVObject> >& value )
       objs.push_back(obj);
    }
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiDefaultAVObjectPalette"] = NiDefaultAVObjectPalette::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiDefaultAVObjectPalette::Create() {
+	return new NiDefaultAVObjectPalette;
+}
diff --git a/src/obj/NiDirectionalLight.cpp b/src/obj/NiDirectionalLight.cpp
index 10b0ea8480d482d425558c147074298d71a1c63e..f40675b55b9045c35fc699ddd8e62713204babf4 100644
--- a/src/obj/NiDirectionalLight.cpp
+++ b/src/obj/NiDirectionalLight.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiDirectionalLight::GetRefs() const {
 const Type & NiDirectionalLight::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiDirectionalLight"] = NiDirectionalLight::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiDirectionalLight::Create() {
+	return new NiDirectionalLight;
+}
diff --git a/src/obj/NiDitherProperty.cpp b/src/obj/NiDitherProperty.cpp
index d1e1de36300d83b2598694625faf928483d4c225..d30179aa5fb10384b79e779f8a70ecf78c7e5ea7 100644
--- a/src/obj/NiDitherProperty.cpp
+++ b/src/obj/NiDitherProperty.cpp
@@ -42,3 +42,27 @@ unsigned short NiDitherProperty::GetFlags() const {
 void NiDitherProperty::SetFlags( unsigned short n ) {
    flags = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiDitherProperty"] = NiDitherProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiDitherProperty::Create() {
+	return new NiDitherProperty;
+}
diff --git a/src/obj/NiDynamicEffect.cpp b/src/obj/NiDynamicEffect.cpp
index dda7d991d2f789a720b3bd929648199c2a9e835a..399332b542a3c23f2c7e957fb1e5db1111e5c7cf 100644
--- a/src/obj/NiDynamicEffect.cpp
+++ b/src/obj/NiDynamicEffect.cpp
@@ -51,3 +51,27 @@ vector<Ref<NiAVObject > > NiDynamicEffect::GetAffectedNodes() const {
 void NiDynamicEffect::SetAffectedNodes( const vector<Ref<NiAVObject > >& value ) {
 	affectedNodes = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiDynamicEffect"] = NiDynamicEffect::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiDynamicEffect::Create() {
+	return new NiDynamicEffect;
+}
diff --git a/src/obj/NiExtraData.cpp b/src/obj/NiExtraData.cpp
index 689f8b5046aef5f8c94199f284ece8895d6d8adb..d2688eec50f67217072a9ed5cfd1b34b1770c374 100644
--- a/src/obj/NiExtraData.cpp
+++ b/src/obj/NiExtraData.cpp
@@ -57,3 +57,27 @@ NiExtraDataRef NiExtraData::GetNextExtraData() const {
 void NiExtraData::SetNextExtraData( NiExtraData * obj ) {
 	nextExtraData = obj;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiExtraData"] = NiExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiExtraData::Create() {
+	return new NiExtraData;
+}
diff --git a/src/obj/NiFlipController.cpp b/src/obj/NiFlipController.cpp
index 9acbb95f36fcfd16150ebf673859a7eaa15ed63c..c9cebfca14e5c932edbba747275ed18da1783c67 100644
--- a/src/obj/NiFlipController.cpp
+++ b/src/obj/NiFlipController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiFlipController::GetRefs() const {
 const Type & NiFlipController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiFlipController"] = NiFlipController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiFlipController::Create() {
+	return new NiFlipController;
+}
diff --git a/src/obj/NiFloatData.cpp b/src/obj/NiFloatData.cpp
index 436296b36428b3b671608d95525e341d6d3324cc..9b52f89751c205b9bb2677ab6c07d96c7f280813 100644
--- a/src/obj/NiFloatData.cpp
+++ b/src/obj/NiFloatData.cpp
@@ -51,3 +51,27 @@ vector< Key<float> > NiFloatData::GetKeys() const {
 void NiFloatData::SetKeys( vector< Key<float> > const & keys ) {
 	data.keys = keys;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiFloatData"] = NiFloatData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiFloatData::Create() {
+	return new NiFloatData;
+}
diff --git a/src/obj/NiFloatExtraData.cpp b/src/obj/NiFloatExtraData.cpp
index 92e9a28342dafb0e1f740dbd010cce18b76ddf4b..06f82bb9f1c80d90ca07c14004ed4afc6c3e71cc 100644
--- a/src/obj/NiFloatExtraData.cpp
+++ b/src/obj/NiFloatExtraData.cpp
@@ -42,3 +42,27 @@ float NiFloatExtraData::GetData() const {
 void NiFloatExtraData::SetData( float n ) {
 	floatData = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiFloatExtraData"] = NiFloatExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiFloatExtraData::Create() {
+	return new NiFloatExtraData;
+}
diff --git a/src/obj/NiFloatExtraDataController.cpp b/src/obj/NiFloatExtraDataController.cpp
index 75ef2387d2d546b22b4d6b1528a6f2ece7479daa..ab0c976846249be36c02685445405e2a42f49941 100644
--- a/src/obj/NiFloatExtraDataController.cpp
+++ b/src/obj/NiFloatExtraDataController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiFloatExtraDataController::GetRefs() const {
 const Type & NiFloatExtraDataController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiFloatExtraDataController"] = NiFloatExtraDataController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiFloatExtraDataController::Create() {
+	return new NiFloatExtraDataController;
+}
diff --git a/src/obj/NiFloatInterpolator.cpp b/src/obj/NiFloatInterpolator.cpp
index 84ebe777569f6517b830c2ebe4625eafa99ddfcd..3a7637934d375dc6443c5252b554cd6bfc4fc114 100644
--- a/src/obj/NiFloatInterpolator.cpp
+++ b/src/obj/NiFloatInterpolator.cpp
@@ -51,3 +51,27 @@ Ref<NiFloatData > NiFloatInterpolator::GetData() const {
 void NiFloatInterpolator::SetData( NiFloatData * value ) {
 	data = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiFloatInterpolator"] = NiFloatInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiFloatInterpolator::Create() {
+	return new NiFloatInterpolator;
+}
diff --git a/src/obj/NiFloatsExtraData.cpp b/src/obj/NiFloatsExtraData.cpp
index 6371ac37e1e3bceea69c67ab3c1d8b93d55272b7..f636c8665a5b2415eeca09506cf8c82227e035d9 100644
--- a/src/obj/NiFloatsExtraData.cpp
+++ b/src/obj/NiFloatsExtraData.cpp
@@ -43,3 +43,27 @@ void NiFloatsExtraData::SetData( const vector<float> & n ) {
 	numFloats = (unsigned int)(n.size());
 	data = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiFloatsExtraData"] = NiFloatsExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiFloatsExtraData::Create() {
+	return new NiFloatsExtraData;
+}
diff --git a/src/obj/NiFogProperty.cpp b/src/obj/NiFogProperty.cpp
index bd8515863822fb63d39668fa9a0180dc68f5eda7..788b0fb7f665fcca71dd9360633c951456b45fc2 100644
--- a/src/obj/NiFogProperty.cpp
+++ b/src/obj/NiFogProperty.cpp
@@ -59,3 +59,27 @@ Color3 NiFogProperty::GetFogColor() const {
 void NiFogProperty::SetFogColor(Color3 value) {
    fogColor = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiFogProperty"] = NiFogProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiFogProperty::Create() {
+	return new NiFogProperty;
+}
diff --git a/src/obj/NiGeomMorpherController.cpp b/src/obj/NiGeomMorpherController.cpp
index 872041b5bb8108f18a058320a088b7e38da24917..7c9aac40ada1091e0e20f2b9692f4060ae8e202d 100644
--- a/src/obj/NiGeomMorpherController.cpp
+++ b/src/obj/NiGeomMorpherController.cpp
@@ -53,3 +53,27 @@ Ref<NiMorphData> NiGeomMorpherController::GetData() const {
 void NiGeomMorpherController::SetData( NiMorphData * n ) {
 	data = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiGeomMorpherController"] = NiGeomMorpherController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiGeomMorpherController::Create() {
+	return new NiGeomMorpherController;
+}
diff --git a/src/obj/NiGeometry.cpp b/src/obj/NiGeometry.cpp
index 1577f418f4a7b2902242ba75008988ce9a0afe0a..87301e4f08fd874afb1a94d4d1ffa9954bb16d9c 100644
--- a/src/obj/NiGeometry.cpp
+++ b/src/obj/NiGeometry.cpp
@@ -362,3 +362,27 @@ void NiGeometry::SetBoneWeights( unsigned int bone_index, const vector<SkinWeigh
 
 	skinData->SetBoneWeights( bone_index, n, center, radius );
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiGeometry"] = NiGeometry::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiGeometry::Create() {
+	return new NiGeometry;
+}
diff --git a/src/obj/NiGeometryData.cpp b/src/obj/NiGeometryData.cpp
index 852ed168af253d9832b8a50580f485f2d109e56c..651e777357adfac37ea2c6e8a9d36ff5c287fc9d 100644
--- a/src/obj/NiGeometryData.cpp
+++ b/src/obj/NiGeometryData.cpp
@@ -162,3 +162,27 @@ void NiGeometryData::Transform( const Matrix44 & transform ) {
 		normals[i] = rotation * normals[i];
 	}
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiGeometryData"] = NiGeometryData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiGeometryData::Create() {
+	return new NiGeometryData;
+}
diff --git a/src/obj/NiGravity.cpp b/src/obj/NiGravity.cpp
index 3185e3ba873dee2f7dcfdc910c9fabf278ef4a5b..fc14904e3c3b1c5565addf578e1ac3777e14af04 100644
--- a/src/obj/NiGravity.cpp
+++ b/src/obj/NiGravity.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiGravity::GetRefs() const {
 const Type & NiGravity::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiGravity"] = NiGravity::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiGravity::Create() {
+	return new NiGravity;
+}
diff --git a/src/obj/NiImage.cpp b/src/obj/NiImage.cpp
index 8d14b9f5a2051d18e1670a5520469b8e75db0efa..e2defe0e1fffee8ec1fea93a51ab514e3197d475 100644
--- a/src/obj/NiImage.cpp
+++ b/src/obj/NiImage.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiImage::GetRefs() const {
 const Type & NiImage::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiImage"] = NiImage::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiImage::Create() {
+	return new NiImage;
+}
diff --git a/src/obj/NiIntegerExtraData.cpp b/src/obj/NiIntegerExtraData.cpp
index 2dfb9845370b5c8fdfbcfb3df14d76bfd92a4898..1c26cceebeb1fa233f09c4617c79c992218b82e0 100644
--- a/src/obj/NiIntegerExtraData.cpp
+++ b/src/obj/NiIntegerExtraData.cpp
@@ -42,3 +42,27 @@ unsigned int NiIntegerExtraData::GetData() const {
 void NiIntegerExtraData::SetData( unsigned int n ) {
 	integerData = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiIntegerExtraData"] = NiIntegerExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiIntegerExtraData::Create() {
+	return new NiIntegerExtraData;
+}
diff --git a/src/obj/NiIntegersExtraData.cpp b/src/obj/NiIntegersExtraData.cpp
index 2e131b0376d83996e851c160a15560c4fbec52aa..9c35fddc343618a995513b286956ade32fe58777 100644
--- a/src/obj/NiIntegersExtraData.cpp
+++ b/src/obj/NiIntegersExtraData.cpp
@@ -43,3 +43,27 @@ void NiIntegersExtraData::SetData( const vector<unsigned int> & n ) {
 	numIntegers = (unsigned int)( n.size() );
 	data = n;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiIntegersExtraData"] = NiIntegersExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiIntegersExtraData::Create() {
+	return new NiIntegersExtraData;
+}
diff --git a/src/obj/NiInterpolator.cpp b/src/obj/NiInterpolator.cpp
index d8efbb5cb21bf4067155e3a2499502e619318af3..a179eb6597e6cfbefc66652450a0c2ec2d984120 100644
--- a/src/obj/NiInterpolator.cpp
+++ b/src/obj/NiInterpolator.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiInterpolator::GetRefs() const {
 const Type & NiInterpolator::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiInterpolator"] = NiInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiInterpolator::Create() {
+	return new NiInterpolator;
+}
diff --git a/src/obj/NiKeyframeController.cpp b/src/obj/NiKeyframeController.cpp
index c889ddb3ebc66336166bf313707dca54348d29ce..26bd096713675f40ecb5b198e2256746337e3bac 100644
--- a/src/obj/NiKeyframeController.cpp
+++ b/src/obj/NiKeyframeController.cpp
@@ -43,3 +43,27 @@ Ref<NiKeyframeData> NiKeyframeController::GetData() const {
 void NiKeyframeController::SetData( NiKeyframeData * n ) {
 	data = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiKeyframeController"] = NiKeyframeController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiKeyframeController::Create() {
+	return new NiKeyframeController;
+}
diff --git a/src/obj/NiKeyframeData.cpp b/src/obj/NiKeyframeData.cpp
index 8bdf6e1f50bcee88e338c6d2f1d960811438de15..0918aa91e77d2d14a13877709fd666886c798829 100644
--- a/src/obj/NiKeyframeData.cpp
+++ b/src/obj/NiKeyframeData.cpp
@@ -141,3 +141,27 @@ vector< Key<float> > NiKeyframeData::GetScaleKeys() const {
 void NiKeyframeData::SetScaleKeys( vector< Key<float> > const & keys ) {
 	scales.keys = keys;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiKeyframeData"] = NiKeyframeData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiKeyframeData::Create() {
+	return new NiKeyframeData;
+}
diff --git a/src/obj/NiLODData.cpp b/src/obj/NiLODData.cpp
index 022f3fe4509cafe57d8cf330babbd672c918f888..3797f3e51b0d2267adb7ccf2292e2e12b00e0288 100644
--- a/src/obj/NiLODData.cpp
+++ b/src/obj/NiLODData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiLODData::GetRefs() const {
 const Type & NiLODData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiLODData"] = NiLODData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiLODData::Create() {
+	return new NiLODData;
+}
diff --git a/src/obj/NiLODNode.cpp b/src/obj/NiLODNode.cpp
index 12ac8a6be15b6d689990568d2e3536903d4d29fa..68bc31706ce14a2164c87cbf6cf89a7379ea345c 100644
--- a/src/obj/NiLODNode.cpp
+++ b/src/obj/NiLODNode.cpp
@@ -60,3 +60,27 @@ Ref<NiLODData > NiLODNode::GetLODLevelData() const {
 void NiLODNode::SetLODLevelData( Ref<NiLODData > value ) {
 	lodLevelData = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiLODNode"] = NiLODNode::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiLODNode::Create() {
+	return new NiLODNode;
+}
diff --git a/src/obj/NiLight.cpp b/src/obj/NiLight.cpp
index de7f056e0983d2c547415e812e89b4b6941ab0f6..1eca70907b044be947f38ffd3022ca24a50cf7e6 100644
--- a/src/obj/NiLight.cpp
+++ b/src/obj/NiLight.cpp
@@ -66,3 +66,27 @@ Color3 NiLight::GetSpecularColor() const {
 void NiLight::SetSpecularColor( Color3 value ) {
 	specularColor = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiLight"] = NiLight::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiLight::Create() {
+	return new NiLight;
+}
diff --git a/src/obj/NiLightColorController.cpp b/src/obj/NiLightColorController.cpp
index cf4e3e78b55b9e30aae25d0c7ccf4ac4514828e9..582d52c9d306a76a38e89d8a7d06598f32bbbe4c 100644
--- a/src/obj/NiLightColorController.cpp
+++ b/src/obj/NiLightColorController.cpp
@@ -52,3 +52,27 @@ Ref<NiPoint3Interpolator > NiLightColorController::GetInterpolator() const {
 void NiLightColorController::SetInterpolator( NiPoint3Interpolator * value ) {
 	interpolator = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiLightColorController"] = NiLightColorController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiLightColorController::Create() {
+	return new NiLightColorController;
+}
diff --git a/src/obj/NiLightDimmerController.cpp b/src/obj/NiLightDimmerController.cpp
index 7d1b77dc1e051f54d88a9b64c46ec455cda6c8a5..4a5f8a003eab3f41c80ad6b0f8e71a91df095ef8 100644
--- a/src/obj/NiLightDimmerController.cpp
+++ b/src/obj/NiLightDimmerController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiLightDimmerController::GetRefs() const {
 const Type & NiLightDimmerController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiLightDimmerController"] = NiLightDimmerController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiLightDimmerController::Create() {
+	return new NiLightDimmerController;
+}
diff --git a/src/obj/NiLookAtController.cpp b/src/obj/NiLookAtController.cpp
index 17d0fc48c061fe22e72a7b074bfe733a7046a6cf..3609893b88ad1ce31d5d0576d6d396f0d6921528 100644
--- a/src/obj/NiLookAtController.cpp
+++ b/src/obj/NiLookAtController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiLookAtController::GetRefs() const {
 const Type & NiLookAtController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiLookAtController"] = NiLookAtController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiLookAtController::Create() {
+	return new NiLookAtController;
+}
diff --git a/src/obj/NiLookAtInterpolator.cpp b/src/obj/NiLookAtInterpolator.cpp
index f056c64adeacc4c846a96bbbca3f07524bef59d0..55cccaef3c1bf9fd70d5e3bc0805cd523d1fa97a 100644
--- a/src/obj/NiLookAtInterpolator.cpp
+++ b/src/obj/NiLookAtInterpolator.cpp
@@ -69,3 +69,27 @@ float NiLookAtInterpolator::GetScale() const {
 void NiLookAtInterpolator::SetScale( float value ) {
 	scale = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiLookAtInterpolator"] = NiLookAtInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiLookAtInterpolator::Create() {
+	return new NiLookAtInterpolator;
+}
diff --git a/src/obj/NiMaterialColorController.cpp b/src/obj/NiMaterialColorController.cpp
index f4dd83303e2a32fec51ac6ad82d12b2ae0d62866..77d2d132f8aab2f0a3e18a05cf10a76f6edaadb4 100644
--- a/src/obj/NiMaterialColorController.cpp
+++ b/src/obj/NiMaterialColorController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiMaterialColorController::GetRefs() const {
 const Type & NiMaterialColorController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiMaterialColorController"] = NiMaterialColorController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiMaterialColorController::Create() {
+	return new NiMaterialColorController;
+}
diff --git a/src/obj/NiMaterialProperty.cpp b/src/obj/NiMaterialProperty.cpp
index 66142652aaf043a6f41740e11392c42db719e22c..2a0802aaba65647f90b8de326577c498e3efa400 100644
--- a/src/obj/NiMaterialProperty.cpp
+++ b/src/obj/NiMaterialProperty.cpp
@@ -90,3 +90,27 @@ Color3 NiMaterialProperty::GetSpecularColor() const {
 void NiMaterialProperty::SetSpecularColor( const Color3 & n ) {
 	specularColor = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiMaterialProperty"] = NiMaterialProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiMaterialProperty::Create() {
+	return new NiMaterialProperty;
+}
diff --git a/src/obj/NiMeshPSysData.cpp b/src/obj/NiMeshPSysData.cpp
index 9866b03c09bcbf660f4eaeca32a3a8ebaa127cc5..910606e308a54e051eb6a199acb4201ee09adab7 100644
--- a/src/obj/NiMeshPSysData.cpp
+++ b/src/obj/NiMeshPSysData.cpp
@@ -36,3 +36,27 @@ list<NiObjectRef> NiMeshPSysData::GetRefs() const {
 const Type & NiMeshPSysData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiMeshPSysData"] = NiMeshPSysData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiMeshPSysData::Create() {
+	return new NiMeshPSysData;
+}
diff --git a/src/obj/NiMeshParticleSystem.cpp b/src/obj/NiMeshParticleSystem.cpp
index 2933f997b3d5948dc368b8d6a8abb67b02415f5b..b579b036a28ef9eb388e30504ebd7c7d0ddbf2a5 100644
--- a/src/obj/NiMeshParticleSystem.cpp
+++ b/src/obj/NiMeshParticleSystem.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiMeshParticleSystem::GetRefs() const {
 const Type & NiMeshParticleSystem::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiMeshParticleSystem"] = NiMeshParticleSystem::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiMeshParticleSystem::Create() {
+	return new NiMeshParticleSystem;
+}
diff --git a/src/obj/NiMorphData.cpp b/src/obj/NiMorphData.cpp
index d395af2efe170ae7364e7e6d3b9b57200b5949ce..41922c7d039d98b16ddae339ab78fc6eb63b45c4 100644
--- a/src/obj/NiMorphData.cpp
+++ b/src/obj/NiMorphData.cpp
@@ -90,3 +90,27 @@ void NiMorphData::SetMorphVerts( int n, const vector<Vector3> & in ) {
 	//It's the right size, so go ahead and set it
 	morphs[n].vectors = in;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiMorphData"] = NiMorphData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiMorphData::Create() {
+	return new NiMorphData;
+}
diff --git a/src/obj/NiMultiTargetTransformController.cpp b/src/obj/NiMultiTargetTransformController.cpp
index e1e5d6b34e91420a761f6357440a0bbb90a2e8b4..383ba7e8bf73669fd628b7b445fda9a7a29808f6 100644
--- a/src/obj/NiMultiTargetTransformController.cpp
+++ b/src/obj/NiMultiTargetTransformController.cpp
@@ -54,3 +54,27 @@ void NiMultiTargetTransformController::SetExtraTargets( const vector<NiNodeRef>&
       extraTargets.push_back( value[i] );
    extraTargets.erase(std::remove(extraTargets.begin(), extraTargets.end(), (NiNode*)NULL), extraTargets.end());
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiMultiTargetTransformController"] = NiMultiTargetTransformController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiMultiTargetTransformController::Create() {
+	return new NiMultiTargetTransformController;
+}
diff --git a/src/obj/NiNode.cpp b/src/obj/NiNode.cpp
index b35f136a821644ec8aac824849693de1af4bb9ce..fb30eb75e569008d17c78ed5e96639111482a74e 100644
--- a/src/obj/NiNode.cpp
+++ b/src/obj/NiNode.cpp
@@ -274,3 +274,27 @@ bool NiNode::IsSplitMeshProxy() const {
 	//Made it all the way through the loop without returning false
 	return true;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiNode"] = NiNode::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiNode::Create() {
+	return new NiNode;
+}
diff --git a/src/obj/NiObject.cpp b/src/obj/NiObject.cpp
index 351a6b7c61358566513cc2aeff3b1f7a71c2bcdb..5819589d743948c439175f5162f2686874a31f40 100644
--- a/src/obj/NiObject.cpp
+++ b/src/obj/NiObject.cpp
@@ -99,3 +99,28 @@ const Type & NiObject::GetType() const {
 unsigned int NiObject::GetNumRefs() {
 	return _ref_count;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiObject"] = NiObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiObject::Create() {
+	return new NiObject;
+}
+
diff --git a/src/obj/NiObjectNET.cpp b/src/obj/NiObjectNET.cpp
index 205a45a0a4b3005a079fa22b8656e104586e3c87..89bfd506e0573c8208dc55e237a87e39ee45167f 100644
--- a/src/obj/NiObjectNET.cpp
+++ b/src/obj/NiObjectNET.cpp
@@ -187,3 +187,27 @@ list< Ref<NiTimeController> > NiObjectNET::GetControllers() const {
 const Type & NiObjectNET::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiObjectNET"] = NiObjectNET::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiObjectNET::Create() {
+	return new NiObjectNET;
+}
diff --git a/src/obj/NiPSysAgeDeathModifier.cpp b/src/obj/NiPSysAgeDeathModifier.cpp
index 2d1f92b0ec3ee8947dac362c82e25e1c7099cdbb..492f560196cda3414c9a7140489650b92fde5978 100644
--- a/src/obj/NiPSysAgeDeathModifier.cpp
+++ b/src/obj/NiPSysAgeDeathModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysAgeDeathModifier::GetRefs() const {
 const Type & NiPSysAgeDeathModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysAgeDeathModifier"] = NiPSysAgeDeathModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysAgeDeathModifier::Create() {
+	return new NiPSysAgeDeathModifier;
+}
diff --git a/src/obj/NiPSysBombModifier.cpp b/src/obj/NiPSysBombModifier.cpp
index 2088462644021ca289ed774f369e6ef0e1768ec1..0ee4e8d47efe7cd6435fff026eb86631b0241460 100644
--- a/src/obj/NiPSysBombModifier.cpp
+++ b/src/obj/NiPSysBombModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysBombModifier::GetRefs() const {
 const Type & NiPSysBombModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysBombModifier"] = NiPSysBombModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysBombModifier::Create() {
+	return new NiPSysBombModifier;
+}
diff --git a/src/obj/NiPSysBoundUpdateModifier.cpp b/src/obj/NiPSysBoundUpdateModifier.cpp
index ab9ea44fb21eb04971ce2b087d701eff775c0b55..900cb7fb8469bf49fb80f8856731871d99e44664 100644
--- a/src/obj/NiPSysBoundUpdateModifier.cpp
+++ b/src/obj/NiPSysBoundUpdateModifier.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysBoundUpdateModifier::GetRefs() const {
 const Type & NiPSysBoundUpdateModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysBoundUpdateModifier"] = NiPSysBoundUpdateModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysBoundUpdateModifier::Create() {
+	return new NiPSysBoundUpdateModifier;
+}
diff --git a/src/obj/NiPSysBoxEmitter.cpp b/src/obj/NiPSysBoxEmitter.cpp
index 4c45597c0cd00620db28a2cf7135f5db883ec5ff..0c8eed960a408f543fb3353560af42f4bb07c930 100644
--- a/src/obj/NiPSysBoxEmitter.cpp
+++ b/src/obj/NiPSysBoxEmitter.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysBoxEmitter::GetRefs() const {
 const Type & NiPSysBoxEmitter::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysBoxEmitter"] = NiPSysBoxEmitter::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysBoxEmitter::Create() {
+	return new NiPSysBoxEmitter;
+}
diff --git a/src/obj/NiPSysColliderManager.cpp b/src/obj/NiPSysColliderManager.cpp
index e5b585c8573414e90e4b59b3aece3563c05aa9fd..baea4aa14a060c9fd854ca6b464f652a6a433be9 100644
--- a/src/obj/NiPSysColliderManager.cpp
+++ b/src/obj/NiPSysColliderManager.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysColliderManager::GetRefs() const {
 const Type & NiPSysColliderManager::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysColliderManager"] = NiPSysColliderManager::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysColliderManager::Create() {
+	return new NiPSysColliderManager;
+}
diff --git a/src/obj/NiPSysColorModifier.cpp b/src/obj/NiPSysColorModifier.cpp
index 24ff666c75a2d074e582aadea63fb9269024da27..41770333fc11b0c39718ac5cf69100bc2bdef6e9 100644
--- a/src/obj/NiPSysColorModifier.cpp
+++ b/src/obj/NiPSysColorModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysColorModifier::GetRefs() const {
 const Type & NiPSysColorModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysColorModifier"] = NiPSysColorModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysColorModifier::Create() {
+	return new NiPSysColorModifier;
+}
diff --git a/src/obj/NiPSysCylinderEmitter.cpp b/src/obj/NiPSysCylinderEmitter.cpp
index 1e77b2071a17f78549fd886a73252942cfab8bb4..0f97a055c4eff03dbe3d5415be83d36476b796a0 100644
--- a/src/obj/NiPSysCylinderEmitter.cpp
+++ b/src/obj/NiPSysCylinderEmitter.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysCylinderEmitter::GetRefs() const {
 const Type & NiPSysCylinderEmitter::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysCylinderEmitter"] = NiPSysCylinderEmitter::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysCylinderEmitter::Create() {
+	return new NiPSysCylinderEmitter;
+}
diff --git a/src/obj/NiPSysData.cpp b/src/obj/NiPSysData.cpp
index 5d3259685e0b36806400d450903a1b38e1c0ad22..0b82f19c6e8ffe21314cd82bb89b219a8071a232 100644
--- a/src/obj/NiPSysData.cpp
+++ b/src/obj/NiPSysData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysData::GetRefs() const {
 const Type & NiPSysData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysData"] = NiPSysData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysData::Create() {
+	return new NiPSysData;
+}
diff --git a/src/obj/NiPSysDragModifier.cpp b/src/obj/NiPSysDragModifier.cpp
index c69fab7afba9f7b02e1c885d6e6c005b2816496d..79a9b67ac36173968e999606cd0bfd71f90be4f1 100644
--- a/src/obj/NiPSysDragModifier.cpp
+++ b/src/obj/NiPSysDragModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysDragModifier::GetRefs() const {
 const Type & NiPSysDragModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysDragModifier"] = NiPSysDragModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysDragModifier::Create() {
+	return new NiPSysDragModifier;
+}
diff --git a/src/obj/NiPSysEmitter.cpp b/src/obj/NiPSysEmitter.cpp
index a7416fb483b0a8fedd3394fcf652911f1091f78d..4ad0f702ca5bded81854e2796eff4299aee8c620 100644
--- a/src/obj/NiPSysEmitter.cpp
+++ b/src/obj/NiPSysEmitter.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysEmitter::GetRefs() const {
 const Type & NiPSysEmitter::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitter"] = NiPSysEmitter::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitter::Create() {
+	return new NiPSysEmitter;
+}
diff --git a/src/obj/NiPSysEmitterCtlr.cpp b/src/obj/NiPSysEmitterCtlr.cpp
index d33939b75b12c9caefb39300c40f63012852ab9d..80861e3fd262d7b380af23761267abfdc99e18ce 100644
--- a/src/obj/NiPSysEmitterCtlr.cpp
+++ b/src/obj/NiPSysEmitterCtlr.cpp
@@ -52,3 +52,27 @@ Ref<NiInterpolator > NiPSysEmitterCtlr::GetVisibilityInterpolator() const {
 void NiPSysEmitterCtlr::SetVisibilityInterpolator( NiInterpolator * value ) {
 	visibilityInterpolator = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitterCtlr"] = NiPSysEmitterCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitterCtlr::Create() {
+	return new NiPSysEmitterCtlr;
+}
diff --git a/src/obj/NiPSysEmitterCtlrData.cpp b/src/obj/NiPSysEmitterCtlrData.cpp
index cac4c441cb4df7ed8589f0feb171656cd7fe86d1..dbe03d856a36da5a70581d90b424ed27977b694e 100644
--- a/src/obj/NiPSysEmitterCtlrData.cpp
+++ b/src/obj/NiPSysEmitterCtlrData.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysEmitterCtlrData::GetRefs() const {
 const Type & NiPSysEmitterCtlrData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitterCtlrData"] = NiPSysEmitterCtlrData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitterCtlrData::Create() {
+	return new NiPSysEmitterCtlrData;
+}
diff --git a/src/obj/NiPSysEmitterDeclinationCtlr.cpp b/src/obj/NiPSysEmitterDeclinationCtlr.cpp
index a9ce70dd859a1de40c2f799422f892d83880ebfd..eb4c215b29f23f87d75be70be1d86dcc88ee9aa0 100644
--- a/src/obj/NiPSysEmitterDeclinationCtlr.cpp
+++ b/src/obj/NiPSysEmitterDeclinationCtlr.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysEmitterDeclinationCtlr::GetRefs() const {
 const Type & NiPSysEmitterDeclinationCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitterDeclinationCtlr"] = NiPSysEmitterDeclinationCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitterDeclinationCtlr::Create() {
+	return new NiPSysEmitterDeclinationCtlr;
+}
diff --git a/src/obj/NiPSysEmitterDeclinationVarCtlr.cpp b/src/obj/NiPSysEmitterDeclinationVarCtlr.cpp
index 2da4240b57c5ba676b62aa67dd1ce5e60a997b8d..3c1d87e17a5ea0ad1e8789b672f4f77ee41a0feb 100644
--- a/src/obj/NiPSysEmitterDeclinationVarCtlr.cpp
+++ b/src/obj/NiPSysEmitterDeclinationVarCtlr.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysEmitterDeclinationVarCtlr::GetRefs() const {
 const Type & NiPSysEmitterDeclinationVarCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitterDeclinationVarCtlr"] = NiPSysEmitterDeclinationVarCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitterDeclinationVarCtlr::Create() {
+	return new NiPSysEmitterDeclinationVarCtlr;
+}
diff --git a/src/obj/NiPSysEmitterInitialRadiusCtlr.cpp b/src/obj/NiPSysEmitterInitialRadiusCtlr.cpp
index 4422162ae49ca49bd38ec3b275cde2936c16d252..6a5f0855f035eb0b5bc41647c184fc0923e8baa6 100644
--- a/src/obj/NiPSysEmitterInitialRadiusCtlr.cpp
+++ b/src/obj/NiPSysEmitterInitialRadiusCtlr.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysEmitterInitialRadiusCtlr::GetRefs() const {
 const Type & NiPSysEmitterInitialRadiusCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitterInitialRadiusCtlr"] = NiPSysEmitterInitialRadiusCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitterInitialRadiusCtlr::Create() {
+	return new NiPSysEmitterInitialRadiusCtlr;
+}
diff --git a/src/obj/NiPSysEmitterLifeSpanCtlr.cpp b/src/obj/NiPSysEmitterLifeSpanCtlr.cpp
index 2a6196dc65df29ee834f3b14dfd392b9be2d4e1e..5c66e254f3016763be758f7ed1212270ced0569f 100644
--- a/src/obj/NiPSysEmitterLifeSpanCtlr.cpp
+++ b/src/obj/NiPSysEmitterLifeSpanCtlr.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysEmitterLifeSpanCtlr::GetRefs() const {
 const Type & NiPSysEmitterLifeSpanCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitterLifeSpanCtlr"] = NiPSysEmitterLifeSpanCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitterLifeSpanCtlr::Create() {
+	return new NiPSysEmitterLifeSpanCtlr;
+}
diff --git a/src/obj/NiPSysEmitterSpeedCtlr.cpp b/src/obj/NiPSysEmitterSpeedCtlr.cpp
index 7b659990d189f76f85bbc06d1742660d2dad381f..ca334df229b8d9fc4f91d1b9758bc783ea3e4c94 100644
--- a/src/obj/NiPSysEmitterSpeedCtlr.cpp
+++ b/src/obj/NiPSysEmitterSpeedCtlr.cpp
@@ -36,3 +36,27 @@ list<NiObjectRef> NiPSysEmitterSpeedCtlr::GetRefs() const {
 const Type & NiPSysEmitterSpeedCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysEmitterSpeedCtlr"] = NiPSysEmitterSpeedCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysEmitterSpeedCtlr::Create() {
+	return new NiPSysEmitterSpeedCtlr;
+}
diff --git a/src/obj/NiPSysGravityModifier.cpp b/src/obj/NiPSysGravityModifier.cpp
index 449e2847a0727b3938f1bb7f40971440d8b8134b..92b393b2d071ec829cfc5f6b2fb69ee3db823f18 100644
--- a/src/obj/NiPSysGravityModifier.cpp
+++ b/src/obj/NiPSysGravityModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysGravityModifier::GetRefs() const {
 const Type & NiPSysGravityModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysGravityModifier"] = NiPSysGravityModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysGravityModifier::Create() {
+	return new NiPSysGravityModifier;
+}
diff --git a/src/obj/NiPSysGravityStrengthCtlr.cpp b/src/obj/NiPSysGravityStrengthCtlr.cpp
index 2787ae4c755471da6a6603478d06a1128e9951f1..8a80bd2038c32f07fbc6ebab731726e7bb044842 100644
--- a/src/obj/NiPSysGravityStrengthCtlr.cpp
+++ b/src/obj/NiPSysGravityStrengthCtlr.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysGravityStrengthCtlr::GetRefs() const {
 const Type & NiPSysGravityStrengthCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysGravityStrengthCtlr"] = NiPSysGravityStrengthCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysGravityStrengthCtlr::Create() {
+	return new NiPSysGravityStrengthCtlr;
+}
diff --git a/src/obj/NiPSysGrowFadeModifier.cpp b/src/obj/NiPSysGrowFadeModifier.cpp
index f2533a3e79f62c50302e07129cdbf91aa0e0514a..60e1b1c61175eacdced75214598c37f9935e13b8 100644
--- a/src/obj/NiPSysGrowFadeModifier.cpp
+++ b/src/obj/NiPSysGrowFadeModifier.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysGrowFadeModifier::GetRefs() const {
 const Type & NiPSysGrowFadeModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysGrowFadeModifier"] = NiPSysGrowFadeModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysGrowFadeModifier::Create() {
+	return new NiPSysGrowFadeModifier;
+}
diff --git a/src/obj/NiPSysMeshEmitter.cpp b/src/obj/NiPSysMeshEmitter.cpp
index 1f9cc452016bf978b022edbf34ce33086008a07c..e8810b7abcecbf7130787b8c3ba2eb2e6d5b4440 100644
--- a/src/obj/NiPSysMeshEmitter.cpp
+++ b/src/obj/NiPSysMeshEmitter.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysMeshEmitter::GetRefs() const {
 const Type & NiPSysMeshEmitter::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysMeshEmitter"] = NiPSysMeshEmitter::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysMeshEmitter::Create() {
+	return new NiPSysMeshEmitter;
+}
diff --git a/src/obj/NiPSysMeshUpdateModifier.cpp b/src/obj/NiPSysMeshUpdateModifier.cpp
index 2bca31c271bcbd34b1380b93e66f568b956b5413..ce595bab36eab9fe1390b732098fa81e6c512211 100644
--- a/src/obj/NiPSysMeshUpdateModifier.cpp
+++ b/src/obj/NiPSysMeshUpdateModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysMeshUpdateModifier::GetRefs() const {
 const Type & NiPSysMeshUpdateModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysMeshUpdateModifier"] = NiPSysMeshUpdateModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysMeshUpdateModifier::Create() {
+	return new NiPSysMeshUpdateModifier;
+}
diff --git a/src/obj/NiPSysModifier.cpp b/src/obj/NiPSysModifier.cpp
index 572b6a3e7610ec248f11cac55dc5d6e27662941e..13f5bf1cfee67725685f0f9defc2609a83e3e902 100644
--- a/src/obj/NiPSysModifier.cpp
+++ b/src/obj/NiPSysModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysModifier::GetRefs() const {
 const Type & NiPSysModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysModifier"] = NiPSysModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysModifier::Create() {
+	return new NiPSysModifier;
+}
diff --git a/src/obj/NiPSysModifierActiveCtlr.cpp b/src/obj/NiPSysModifierActiveCtlr.cpp
index db3d62ffb2d171f5b2beac45c2960dc9502c8192..591efcfb8ffd263ac2c0712ec10c2dd2c14ad8a2 100644
--- a/src/obj/NiPSysModifierActiveCtlr.cpp
+++ b/src/obj/NiPSysModifierActiveCtlr.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysModifierActiveCtlr::GetRefs() const {
 const Type & NiPSysModifierActiveCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysModifierActiveCtlr"] = NiPSysModifierActiveCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysModifierActiveCtlr::Create() {
+	return new NiPSysModifierActiveCtlr;
+}
diff --git a/src/obj/NiPSysPlanarCollider.cpp b/src/obj/NiPSysPlanarCollider.cpp
index 907a121cc10f28849b4ddc72d9879e0b988aaf12..6c7df074b4d2e0a9d4b0d6cfb56319bbcbffa02a 100644
--- a/src/obj/NiPSysPlanarCollider.cpp
+++ b/src/obj/NiPSysPlanarCollider.cpp
@@ -37,3 +37,27 @@ list<NiObjectRef> NiPSysPlanarCollider::GetRefs() const {
 const Type & NiPSysPlanarCollider::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysPlanarCollider"] = NiPSysPlanarCollider::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysPlanarCollider::Create() {
+	return new NiPSysPlanarCollider;
+}
diff --git a/src/obj/NiPSysPositionModifier.cpp b/src/obj/NiPSysPositionModifier.cpp
index c0c46187be3b94b7efb405416b7e3d1088449304..837d54384dd2bfc0e1b1851264802db3cb76e9f4 100644
--- a/src/obj/NiPSysPositionModifier.cpp
+++ b/src/obj/NiPSysPositionModifier.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysPositionModifier::GetRefs() const {
 const Type & NiPSysPositionModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysPositionModifier"] = NiPSysPositionModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysPositionModifier::Create() {
+	return new NiPSysPositionModifier;
+}
diff --git a/src/obj/NiPSysResetOnLoopCtlr.cpp b/src/obj/NiPSysResetOnLoopCtlr.cpp
index 53a6164515b94c38b6b04dc6df4aaf2503159a62..be072f5526dc44f25505f8b33f15a3a4ff03aa1b 100644
--- a/src/obj/NiPSysResetOnLoopCtlr.cpp
+++ b/src/obj/NiPSysResetOnLoopCtlr.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysResetOnLoopCtlr::GetRefs() const {
 const Type & NiPSysResetOnLoopCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysResetOnLoopCtlr"] = NiPSysResetOnLoopCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysResetOnLoopCtlr::Create() {
+	return new NiPSysResetOnLoopCtlr;
+}
diff --git a/src/obj/NiPSysRotationModifier.cpp b/src/obj/NiPSysRotationModifier.cpp
index 39c2c447e28b94c832669d2491d16389c7c0adb8..28aa6f1fe547cfa68faa7acd741a5c1eaccd6004 100644
--- a/src/obj/NiPSysRotationModifier.cpp
+++ b/src/obj/NiPSysRotationModifier.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysRotationModifier::GetRefs() const {
 const Type & NiPSysRotationModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysRotationModifier"] = NiPSysRotationModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysRotationModifier::Create() {
+	return new NiPSysRotationModifier;
+}
diff --git a/src/obj/NiPSysSpawnModifier.cpp b/src/obj/NiPSysSpawnModifier.cpp
index 0750838c53312ec0330de761e3450dd90a3dcfaa..7e440e6e9f68dfd2a40cbbf62cd545121fee01a2 100644
--- a/src/obj/NiPSysSpawnModifier.cpp
+++ b/src/obj/NiPSysSpawnModifier.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysSpawnModifier::GetRefs() const {
 const Type & NiPSysSpawnModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysSpawnModifier"] = NiPSysSpawnModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysSpawnModifier::Create() {
+	return new NiPSysSpawnModifier;
+}
diff --git a/src/obj/NiPSysSphereEmitter.cpp b/src/obj/NiPSysSphereEmitter.cpp
index cc554fa7fb7133aad59028f63c17b9ce2b7e2025..dc4f7e0d6be0f55c5768fb7ab08276a85c47ab44 100644
--- a/src/obj/NiPSysSphereEmitter.cpp
+++ b/src/obj/NiPSysSphereEmitter.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysSphereEmitter::GetRefs() const {
 const Type & NiPSysSphereEmitter::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysSphereEmitter"] = NiPSysSphereEmitter::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysSphereEmitter::Create() {
+	return new NiPSysSphereEmitter;
+}
diff --git a/src/obj/NiPSysUpdateCtlr.cpp b/src/obj/NiPSysUpdateCtlr.cpp
index 24f8c5f810bb58e57b9ab4383ee2f7ae9f31331c..b7a42f75f1bcc03cf0a114ea289b641939940ab7 100644
--- a/src/obj/NiPSysUpdateCtlr.cpp
+++ b/src/obj/NiPSysUpdateCtlr.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPSysUpdateCtlr::GetRefs() const {
 const Type & NiPSysUpdateCtlr::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysUpdateCtlr"] = NiPSysUpdateCtlr::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysUpdateCtlr::Create() {
+	return new NiPSysUpdateCtlr;
+}
diff --git a/src/obj/NiPSysVolumeEmitter.cpp b/src/obj/NiPSysVolumeEmitter.cpp
index f62d2b968efd898c07da0c49f980d1f7f3ecfb36..4e1bbb061e0258ca025f02a05a8e0d076f7851e6 100644
--- a/src/obj/NiPSysVolumeEmitter.cpp
+++ b/src/obj/NiPSysVolumeEmitter.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiPSysVolumeEmitter::GetRefs() const {
 const Type & NiPSysVolumeEmitter::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPSysVolumeEmitter"] = NiPSysVolumeEmitter::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPSysVolumeEmitter::Create() {
+	return new NiPSysVolumeEmitter;
+}
diff --git a/src/obj/NiPalette.cpp b/src/obj/NiPalette.cpp
index 2445fcc6db6b0118eb18bf47697f57ae76f44387..c917535ef3d078e4b66e7bc0b0dfc343d49d87ed 100644
--- a/src/obj/NiPalette.cpp
+++ b/src/obj/NiPalette.cpp
@@ -61,3 +61,27 @@ void NiPalette::SetPalette( const vector<Color4> & new_pal ) {
 		palette[i][3] = int( new_pal[i].a * 255.0f );
 	}
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPalette"] = NiPalette::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPalette::Create() {
+	return new NiPalette;
+}
diff --git a/src/obj/NiParticleBomb.cpp b/src/obj/NiParticleBomb.cpp
index ebf148acac6975e185d56d707e24d17fb0133c10..1617099769adcb664a8e4936b0379e6749d7f1e2 100644
--- a/src/obj/NiParticleBomb.cpp
+++ b/src/obj/NiParticleBomb.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiParticleBomb::GetRefs() const {
 const Type & NiParticleBomb::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleBomb"] = NiParticleBomb::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleBomb::Create() {
+	return new NiParticleBomb;
+}
diff --git a/src/obj/NiParticleColorModifier.cpp b/src/obj/NiParticleColorModifier.cpp
index 75778265b15d24f4fd88073ad4a82eed871438b7..72475173e9118845da2c9ffe7cfb0b2fdf5d2bfa 100644
--- a/src/obj/NiParticleColorModifier.cpp
+++ b/src/obj/NiParticleColorModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiParticleColorModifier::GetRefs() const {
 const Type & NiParticleColorModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleColorModifier"] = NiParticleColorModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleColorModifier::Create() {
+	return new NiParticleColorModifier;
+}
diff --git a/src/obj/NiParticleGrowFade.cpp b/src/obj/NiParticleGrowFade.cpp
index 4f5425fa13bd707cd30a5b62a84789e9dd13a17a..d810cdbd097106f8f3237da3d181ab6f5f499df2 100644
--- a/src/obj/NiParticleGrowFade.cpp
+++ b/src/obj/NiParticleGrowFade.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiParticleGrowFade::GetRefs() const {
 const Type & NiParticleGrowFade::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleGrowFade"] = NiParticleGrowFade::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleGrowFade::Create() {
+	return new NiParticleGrowFade;
+}
diff --git a/src/obj/NiParticleMeshModifier.cpp b/src/obj/NiParticleMeshModifier.cpp
index bcc2a276b56ec248f11bdfea7977950df6e7bf74..e1461ae0b5e2575e9fe847720270556e3226dc05 100644
--- a/src/obj/NiParticleMeshModifier.cpp
+++ b/src/obj/NiParticleMeshModifier.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiParticleMeshModifier::GetRefs() const {
 const Type & NiParticleMeshModifier::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleMeshModifier"] = NiParticleMeshModifier::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleMeshModifier::Create() {
+	return new NiParticleMeshModifier;
+}
diff --git a/src/obj/NiParticleMeshes.cpp b/src/obj/NiParticleMeshes.cpp
index 1b7573b56677e92e4161692562bb3ac9c7b8c764..6eae566eb54e476435d8d24cbab60da000eea93d 100644
--- a/src/obj/NiParticleMeshes.cpp
+++ b/src/obj/NiParticleMeshes.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiParticleMeshes::GetRefs() const {
 const Type & NiParticleMeshes::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleMeshes"] = NiParticleMeshes::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleMeshes::Create() {
+	return new NiParticleMeshes;
+}
diff --git a/src/obj/NiParticleMeshesData.cpp b/src/obj/NiParticleMeshesData.cpp
index 0d916e389b007ccf04b7071444767dbe999e375e..48ceb6c03eb0a1f9c683f5166ef4752921c90d60 100644
--- a/src/obj/NiParticleMeshesData.cpp
+++ b/src/obj/NiParticleMeshesData.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiParticleMeshesData::GetRefs() const {
 const Type & NiParticleMeshesData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleMeshesData"] = NiParticleMeshesData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleMeshesData::Create() {
+	return new NiParticleMeshesData;
+}
diff --git a/src/obj/NiParticleRotation.cpp b/src/obj/NiParticleRotation.cpp
index bc5a1f84e9c448c1a1841ba27f6d5abf6057e6f7..4a64b39d4db093edcdfa8295002143e7b5b4532c 100644
--- a/src/obj/NiParticleRotation.cpp
+++ b/src/obj/NiParticleRotation.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiParticleRotation::GetRefs() const {
 const Type & NiParticleRotation::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleRotation"] = NiParticleRotation::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleRotation::Create() {
+	return new NiParticleRotation;
+}
diff --git a/src/obj/NiParticleSystem.cpp b/src/obj/NiParticleSystem.cpp
index c7435bbac66f183c9dbdfa29f167fb7be2178c25..2d1c3d42a7f7c1b59311edadcbbbc15439c983fd 100644
--- a/src/obj/NiParticleSystem.cpp
+++ b/src/obj/NiParticleSystem.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiParticleSystem::GetRefs() const {
 const Type & NiParticleSystem::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleSystem"] = NiParticleSystem::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleSystem::Create() {
+	return new NiParticleSystem;
+}
diff --git a/src/obj/NiParticleSystemController.cpp b/src/obj/NiParticleSystemController.cpp
index 6c9ef36dd7bb24f242b54f80df6a58aff0d0f907..2fe0cb6034d01bb7173f19e9fa809000885f7d0a 100644
--- a/src/obj/NiParticleSystemController.cpp
+++ b/src/obj/NiParticleSystemController.cpp
@@ -37,3 +37,27 @@ list<NiObjectRef> NiParticleSystemController::GetRefs() const {
 const Type & NiParticleSystemController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticleSystemController"] = NiParticleSystemController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticleSystemController::Create() {
+	return new NiParticleSystemController;
+}
diff --git a/src/obj/NiParticles.cpp b/src/obj/NiParticles.cpp
index 47ed1bc9ff494a076d0ba41af0a297530e5250f9..95304a572eccad2a17ec9cad4461b0298fa55c80 100644
--- a/src/obj/NiParticles.cpp
+++ b/src/obj/NiParticles.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiParticles::GetRefs() const {
 const Type & NiParticles::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticles"] = NiParticles::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticles::Create() {
+	return new NiParticles;
+}
diff --git a/src/obj/NiParticlesData.cpp b/src/obj/NiParticlesData.cpp
index 32e2d4a4683339fee82a675642cc26b3563351e8..41fdf33db7695c43e1b0d6d16fa125d35a85dcd7 100644
--- a/src/obj/NiParticlesData.cpp
+++ b/src/obj/NiParticlesData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiParticlesData::GetRefs() const {
 const Type & NiParticlesData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiParticlesData"] = NiParticlesData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiParticlesData::Create() {
+	return new NiParticlesData;
+}
diff --git a/src/obj/NiPathController.cpp b/src/obj/NiPathController.cpp
index 09c8b748174dfaf9d8f47e635561ecc35bb89bb3..292b4623e7ed22808ed26f963545ab4eefb72c02 100644
--- a/src/obj/NiPathController.cpp
+++ b/src/obj/NiPathController.cpp
@@ -52,3 +52,27 @@ Ref<NiPosData> NiPathController::GetPosData() const {
 void NiPathController::SetPosData( NiPosData * n ) {
 	posData = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPathController"] = NiPathController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPathController::Create() {
+	return new NiPathController;
+}
diff --git a/src/obj/NiPathInterpolator.cpp b/src/obj/NiPathInterpolator.cpp
index 30d51b4d06d75979eb749cd59d47953757cc9f6b..0f5e205d6e549d4c05bc941a726fedbea7d1a2da 100644
--- a/src/obj/NiPathInterpolator.cpp
+++ b/src/obj/NiPathInterpolator.cpp
@@ -52,3 +52,27 @@ Ref<NiFloatData > NiPathInterpolator::GetFloatData() const {
 void NiPathInterpolator::SetFloatData( NiFloatData * value ) {
 	floatData = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPathInterpolator"] = NiPathInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPathInterpolator::Create() {
+	return new NiPathInterpolator;
+}
diff --git a/src/obj/NiPixelData.cpp b/src/obj/NiPixelData.cpp
index c5469bfebc6be7c20ee7b76e0a05985b02af936d..c5196bf1c4c9b4b01b007dd98c8c1fed280eef31 100644
--- a/src/obj/NiPixelData.cpp
+++ b/src/obj/NiPixelData.cpp
@@ -345,3 +345,27 @@ void NiPixelData::SetColors( const vector<Color4> & new_pixels, bool generate_mi
 		}
 	}
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPixelData"] = NiPixelData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPixelData::Create() {
+	return new NiPixelData;
+}
diff --git a/src/obj/NiPlanarCollider.cpp b/src/obj/NiPlanarCollider.cpp
index 7023ec8c347f276827cc21c69683571544a3e924..8fc0d299873f4f6e0207ab9247312f8a46438778 100644
--- a/src/obj/NiPlanarCollider.cpp
+++ b/src/obj/NiPlanarCollider.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiPlanarCollider::GetRefs() const {
 const Type & NiPlanarCollider::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPlanarCollider"] = NiPlanarCollider::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPlanarCollider::Create() {
+	return new NiPlanarCollider;
+}
diff --git a/src/obj/NiPoint3Interpolator.cpp b/src/obj/NiPoint3Interpolator.cpp
index 76fecce4c69050c8ef010adc000e998deae372a5..a7f4e0ae02f23d4d5834b30d928cf435d5b5a535 100644
--- a/src/obj/NiPoint3Interpolator.cpp
+++ b/src/obj/NiPoint3Interpolator.cpp
@@ -51,3 +51,27 @@ Ref<NiPosData > NiPoint3Interpolator::GetData() const {
 void NiPoint3Interpolator::SetData( NiPosData * value ) {
 	data = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPoint3Interpolator"] = NiPoint3Interpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPoint3Interpolator::Create() {
+	return new NiPoint3Interpolator;
+}
diff --git a/src/obj/NiPointLight.cpp b/src/obj/NiPointLight.cpp
index 9c7249411067f8f209eca7de91cdfc05da50e521..d8320710fadf844b8b2364b04ca2de6ea140a9d0 100644
--- a/src/obj/NiPointLight.cpp
+++ b/src/obj/NiPointLight.cpp
@@ -58,3 +58,27 @@ float NiPointLight::GetQuadraticAttenuation() const {
 void NiPointLight::SetQuadraticAttenuation( float value ) {
 	quadraticAttenuation = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPointLight"] = NiPointLight::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPointLight::Create() {
+	return new NiPointLight;
+}
diff --git a/src/obj/NiPosData.cpp b/src/obj/NiPosData.cpp
index 7cc31e04bb27f405574c39341a0eb3998507361b..cc804ea51c310f3c5a13553eb1d6ea654c0a20a2 100644
--- a/src/obj/NiPosData.cpp
+++ b/src/obj/NiPosData.cpp
@@ -51,3 +51,27 @@ vector< Key<Vector3> > NiPosData::GetKeys() const {
 void NiPosData::SetKeys( vector< Key<Vector3> > const & keys ) {
 	data.keys = keys;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiPosData"] = NiPosData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiPosData::Create() {
+	return new NiPosData;
+}
diff --git a/src/obj/NiProperty.cpp b/src/obj/NiProperty.cpp
index d7c238063803b9bda3cf4bf960ee711534b8906f..ff746cc0244152c1d14424f533dc65b14b8c0e20 100644
--- a/src/obj/NiProperty.cpp
+++ b/src/obj/NiProperty.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiProperty::GetRefs() const {
 const Type & NiProperty::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiProperty"] = NiProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiProperty::Create() {
+	return new NiProperty;
+}
diff --git a/src/obj/NiRangeLODData.cpp b/src/obj/NiRangeLODData.cpp
index d9906a49c287c24438bb5282465a736568c6beff..ee9b70a3f87005f64181da94fd30511d92cc57ef 100644
--- a/src/obj/NiRangeLODData.cpp
+++ b/src/obj/NiRangeLODData.cpp
@@ -51,3 +51,27 @@ vector<LODRange > NiRangeLODData::GetLODLevels() const {
 void NiRangeLODData::SetLODLevels( const vector<LODRange >& value ) {
 	lodLevels = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiRangeLODData"] = NiRangeLODData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiRangeLODData::Create() {
+	return new NiRangeLODData;
+}
diff --git a/src/obj/NiRotatingParticles.cpp b/src/obj/NiRotatingParticles.cpp
index 86bfc3474c7e24db0de9fb7d7b93eb99af4d5628..b4bc1e8c1546f905016d2fa4b9b6c21f4da310a1 100644
--- a/src/obj/NiRotatingParticles.cpp
+++ b/src/obj/NiRotatingParticles.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiRotatingParticles::GetRefs() const {
 const Type & NiRotatingParticles::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiRotatingParticles"] = NiRotatingParticles::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiRotatingParticles::Create() {
+	return new NiRotatingParticles;
+}
diff --git a/src/obj/NiRotatingParticlesData.cpp b/src/obj/NiRotatingParticlesData.cpp
index f31a2c91bfd388f4063ee5f7e37cc770ae779316..3d38c70a103d43234595b899829fc4c1a7735abb 100644
--- a/src/obj/NiRotatingParticlesData.cpp
+++ b/src/obj/NiRotatingParticlesData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiRotatingParticlesData::GetRefs() const {
 const Type & NiRotatingParticlesData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiRotatingParticlesData"] = NiRotatingParticlesData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiRotatingParticlesData::Create() {
+	return new NiRotatingParticlesData;
+}
diff --git a/src/obj/NiScreenLODData.cpp b/src/obj/NiScreenLODData.cpp
index b6a0eb98dbdebb84616fbefc1eb5b972416686b6..5332056ef2001e3853ceda6eda36b5d8fb6e4456 100644
--- a/src/obj/NiScreenLODData.cpp
+++ b/src/obj/NiScreenLODData.cpp
@@ -74,3 +74,27 @@ vector<float > NiScreenLODData::GetProportionLevels() const {
 void NiScreenLODData::SetProportionLevels( const vector<float >& value ) {
 	proportionLevels = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiScreenLODData"] = NiScreenLODData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiScreenLODData::Create() {
+	return new NiScreenLODData;
+}
diff --git a/src/obj/NiSequenceStreamHelper.cpp b/src/obj/NiSequenceStreamHelper.cpp
index add79c3400c0f2f4b2c81fcbb3961955203dc6bf..534fa3d9141fa115f31dcbf1c9c32dde1f3cd8b4 100644
--- a/src/obj/NiSequenceStreamHelper.cpp
+++ b/src/obj/NiSequenceStreamHelper.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiSequenceStreamHelper::GetRefs() const {
 const Type & NiSequenceStreamHelper::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSequenceStreamHelper"] = NiSequenceStreamHelper::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSequenceStreamHelper::Create() {
+	return new NiSequenceStreamHelper;
+}
diff --git a/src/obj/NiShadeProperty.cpp b/src/obj/NiShadeProperty.cpp
index 8e6e3232ef14effc82d9e1d9b4dfe0813980c0d2..f9c99d9eaa48f62eba41a5048c662f5ff207ba73 100644
--- a/src/obj/NiShadeProperty.cpp
+++ b/src/obj/NiShadeProperty.cpp
@@ -42,3 +42,27 @@ unsigned short NiShadeProperty::GetFlags() const {
 void NiShadeProperty::SetFlags( unsigned short n ) {
    flags = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiShadeProperty"] = NiShadeProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiShadeProperty::Create() {
+	return new NiShadeProperty;
+}
diff --git a/src/obj/NiSingleInterpolatorController.cpp b/src/obj/NiSingleInterpolatorController.cpp
index f8ddeab05af6473e81beccc65e9e7823ce8b2ab5..b15a9da19a7bb77ed3cf7a31f712e0928c5f511e 100644
--- a/src/obj/NiSingleInterpolatorController.cpp
+++ b/src/obj/NiSingleInterpolatorController.cpp
@@ -43,3 +43,27 @@ Ref<NiInterpolator > NiSingleInterpolatorController::GetInterpolator() const {
 void NiSingleInterpolatorController::SetInterpolator( NiInterpolator * value ) {
 	interpolator = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSingleInterpolatorController"] = NiSingleInterpolatorController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSingleInterpolatorController::Create() {
+	return new NiSingleInterpolatorController;
+}
diff --git a/src/obj/NiSkinData.cpp b/src/obj/NiSkinData.cpp
index 897417b192eeaced95422f1c9c2d529140028760..3987496673c0b8a09cdb156a990186590a02817a 100644
--- a/src/obj/NiSkinData.cpp
+++ b/src/obj/NiSkinData.cpp
@@ -170,3 +170,27 @@ Ref<NiSkinPartition> NiSkinData::GetSkinPartition() const {
 void NiSkinData::SetSkinPartition( NiSkinPartition * value ) {
    skinPartition = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSkinData"] = NiSkinData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSkinData::Create() {
+	return new NiSkinData;
+}
diff --git a/src/obj/NiSkinInstance.cpp b/src/obj/NiSkinInstance.cpp
index d4a9bb8360682115c598bc6fff6aa0d5f27e7d3b..11e510aa6158dc16d873314928d914abadc5a19d 100644
--- a/src/obj/NiSkinInstance.cpp
+++ b/src/obj/NiSkinInstance.cpp
@@ -135,3 +135,27 @@ unsigned int NiSkinInstance::GetBoneCount() const {
 Ref<NiNode> NiSkinInstance::GetSkeletonRoot() const {
 	return skeletonRoot;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSkinInstance"] = NiSkinInstance::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSkinInstance::Create() {
+	return new NiSkinInstance;
+}
diff --git a/src/obj/NiSkinPartition.cpp b/src/obj/NiSkinPartition.cpp
index c4c59c0ac783ef0050538c4de466c3f70f23cbe5..ff6a2e15daab28ef82501764bb32164acfee4328 100644
--- a/src/obj/NiSkinPartition.cpp
+++ b/src/obj/NiSkinPartition.cpp
@@ -715,3 +715,27 @@ NiSkinPartition::NiSkinPartition(Ref<NiTriBasedGeom> shape, int maxBonesPerParti
       }
    }
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSkinPartition"] = NiSkinPartition::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSkinPartition::Create() {
+	return new NiSkinPartition;
+}
diff --git a/src/obj/NiSourceTexture.cpp b/src/obj/NiSourceTexture.cpp
index 7e2b318594737b0cb63e928f7028b4b9bf15aacb..f3bbfae8e538a3a4ebd2a51f24cdda71b2651246 100644
--- a/src/obj/NiSourceTexture.cpp
+++ b/src/obj/NiSourceTexture.cpp
@@ -95,3 +95,27 @@ AlphaFormat NiSourceTexture::GetAlphaFormat() const {
 void NiSourceTexture::SetAlphaFormat( AlphaFormat n ) {
 	alphaFormat = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSourceTexture"] = NiSourceTexture::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSourceTexture::Create() {
+	return new NiSourceTexture;
+}
diff --git a/src/obj/NiSpecularProperty.cpp b/src/obj/NiSpecularProperty.cpp
index 29c197f27afd0e5138672dad8d6abe2531ebb8a4..d443d57f56695ae2011d07f6c6fe297b5a629969 100644
--- a/src/obj/NiSpecularProperty.cpp
+++ b/src/obj/NiSpecularProperty.cpp
@@ -42,3 +42,27 @@ unsigned short NiSpecularProperty::GetFlags() const {
 void NiSpecularProperty::SetFlags( unsigned short n ) {
    flags = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSpecularProperty"] = NiSpecularProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSpecularProperty::Create() {
+	return new NiSpecularProperty;
+}
diff --git a/src/obj/NiSphericalCollider.cpp b/src/obj/NiSphericalCollider.cpp
index 157b92e36f474f9ee0731d00e5c853e94ea19771..665a818e8c634e0c5d6ef4afddb37c10a2bd1e71 100644
--- a/src/obj/NiSphericalCollider.cpp
+++ b/src/obj/NiSphericalCollider.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiSphericalCollider::GetRefs() const {
 const Type & NiSphericalCollider::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSphericalCollider"] = NiSphericalCollider::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSphericalCollider::Create() {
+	return new NiSphericalCollider;
+}
diff --git a/src/obj/NiSpotLight.cpp b/src/obj/NiSpotLight.cpp
index 5abbc835ad993641bc9098376a9a875c83786316..5aad6080b525e70966542d09a3c716717f677263 100644
--- a/src/obj/NiSpotLight.cpp
+++ b/src/obj/NiSpotLight.cpp
@@ -50,3 +50,27 @@ float NiSpotLight::GetExponent() const {
 void NiSpotLight::SetExponent( float value ) {
 	exponent = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiSpotLight"] = NiSpotLight::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiSpotLight::Create() {
+	return new NiSpotLight;
+}
diff --git a/src/obj/NiStencilProperty.cpp b/src/obj/NiStencilProperty.cpp
index fe245bbb9111902673f597d89cff5268b98e1b02..02a56416f5c15de681f3737d1bdb009428d596e5 100644
--- a/src/obj/NiStencilProperty.cpp
+++ b/src/obj/NiStencilProperty.cpp
@@ -106,3 +106,27 @@ FaceDrawMode NiStencilProperty::GetFaceDrawMode() const {
 void NiStencilProperty::SetFaceDrawMode(FaceDrawMode value) {
    drawMode = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiStencilProperty"] = NiStencilProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiStencilProperty::Create() {
+	return new NiStencilProperty;
+}
diff --git a/src/obj/NiStringExtraData.cpp b/src/obj/NiStringExtraData.cpp
index 86942535a3b8e244fb3a8d6da313c7d8a269cd0d..18c59a16af134295510a9fb179b99da7f7d9a764 100644
--- a/src/obj/NiStringExtraData.cpp
+++ b/src/obj/NiStringExtraData.cpp
@@ -43,3 +43,27 @@ void NiStringExtraData::SetData( const string & n ) {
 	stringData = n;
 	bytesRemaining = (unsigned int)(stringData.size()) + 4;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiStringExtraData"] = NiStringExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiStringExtraData::Create() {
+	return new NiStringExtraData;
+}
diff --git a/src/obj/NiStringPalette.cpp b/src/obj/NiStringPalette.cpp
index 4bc3e0db6e2a31e7573deee2feb9efd4e65592f3..7851687f3f020c8c79cca74876f52aed5d3e9671 100644
--- a/src/obj/NiStringPalette.cpp
+++ b/src/obj/NiStringPalette.cpp
@@ -76,3 +76,27 @@ unsigned int NiStringPalette::AddSubStr( const string & n ) {
 	//Return the offset where the string was found or appended
 	return offset;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiStringPalette"] = NiStringPalette::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiStringPalette::Create() {
+	return new NiStringPalette;
+}
diff --git a/src/obj/NiStringsExtraData.cpp b/src/obj/NiStringsExtraData.cpp
index f0dc77686c2e3294cb02d74cf2bd7619239aa911..c12cfc59738a672faf9c642098fee89e021bb22b 100644
--- a/src/obj/NiStringsExtraData.cpp
+++ b/src/obj/NiStringsExtraData.cpp
@@ -43,3 +43,27 @@ void NiStringsExtraData::SetData( const vector<string> & n ) {
 	numStrings = (unsigned int)(n.size());
 	data = n;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiStringsExtraData"] = NiStringsExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiStringsExtraData::Create() {
+	return new NiStringsExtraData;
+}
diff --git a/src/obj/NiTextKeyExtraData.cpp b/src/obj/NiTextKeyExtraData.cpp
index 780e1014cefce6653d553aacbc566acfbef361c4..469cfac3ad1b0e3737c123644fbb3e3bae397a32 100644
--- a/src/obj/NiTextKeyExtraData.cpp
+++ b/src/obj/NiTextKeyExtraData.cpp
@@ -42,3 +42,27 @@ vector< Key<string> > NiTextKeyExtraData::GetKeys() const {
 void NiTextKeyExtraData::SetKeys( vector< Key<string> > const & keys ) {
 	textKeys = keys;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTextKeyExtraData"] = NiTextKeyExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTextKeyExtraData::Create() {
+	return new NiTextKeyExtraData;
+}
diff --git a/src/obj/NiTextureEffect.cpp b/src/obj/NiTextureEffect.cpp
index 9bf7a2e3186b9e10bde90a7a2df7e6e7a08abd3e..365fae1b43c8f8e3a9206a987ba4d1b7bf9fdc07 100644
--- a/src/obj/NiTextureEffect.cpp
+++ b/src/obj/NiTextureEffect.cpp
@@ -115,3 +115,27 @@ unsigned short NiTextureEffect::GetPs2K() const {
 void NiTextureEffect::SetPs2K( unsigned short value ) {
 	ps2K = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTextureEffect"] = NiTextureEffect::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTextureEffect::Create() {
+	return new NiTextureEffect;
+}
diff --git a/src/obj/NiTextureModeProperty.cpp b/src/obj/NiTextureModeProperty.cpp
index cc3ceb0e136409676b5982b3714a2f6b4d77fa45..cc31537c65c971b21674ac6411f70476f063c905 100644
--- a/src/obj/NiTextureModeProperty.cpp
+++ b/src/obj/NiTextureModeProperty.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiTextureModeProperty::GetRefs() const {
 const Type & NiTextureModeProperty::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTextureModeProperty"] = NiTextureModeProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTextureModeProperty::Create() {
+	return new NiTextureModeProperty;
+}
diff --git a/src/obj/NiTextureProperty.cpp b/src/obj/NiTextureProperty.cpp
index e090cf5fb7f4e93484ab1b71ec50b23037635681..3a0dc37ec53bfb05d14d601f87be9fce16d4b27f 100644
--- a/src/obj/NiTextureProperty.cpp
+++ b/src/obj/NiTextureProperty.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiTextureProperty::GetRefs() const {
 const Type & NiTextureProperty::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTextureProperty"] = NiTextureProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTextureProperty::Create() {
+	return new NiTextureProperty;
+}
diff --git a/src/obj/NiTextureTransformController.cpp b/src/obj/NiTextureTransformController.cpp
index 62d5eb71570b10568a913ba4bb4d9d036dbb243e..96a51fa0cb3802b316af3e0c12c308b43eac9e52 100644
--- a/src/obj/NiTextureTransformController.cpp
+++ b/src/obj/NiTextureTransformController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiTextureTransformController::GetRefs() const {
 const Type & NiTextureTransformController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTextureTransformController"] = NiTextureTransformController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTextureTransformController::Create() {
+	return new NiTextureTransformController;
+}
diff --git a/src/obj/NiTexturingProperty.cpp b/src/obj/NiTexturingProperty.cpp
index 3e3f16199e9eaeb2c5fe71ee84e8bd60a57a59af..fd8dcb022eb05dca516e5f4f9ecf1adec1fa2bb2 100644
--- a/src/obj/NiTexturingProperty.cpp
+++ b/src/obj/NiTexturingProperty.cpp
@@ -245,3 +245,27 @@ void NiTexturingProperty::ClearTexture( int n ) {
 			break;
 	};
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTexturingProperty"] = NiTexturingProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTexturingProperty::Create() {
+	return new NiTexturingProperty;
+}
diff --git a/src/obj/NiTimeController.cpp b/src/obj/NiTimeController.cpp
index 7f3e4235331ffce4fd6b7fda2e164def0de8a960..6da5da594d9fcdd779db8c35ee5ec378b69ef0cf 100644
--- a/src/obj/NiTimeController.cpp
+++ b/src/obj/NiTimeController.cpp
@@ -91,3 +91,27 @@ float NiTimeController::GetStopTime() const {
 void NiTimeController::SetStopTime( float n ) {
 	stopTime = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTimeController"] = NiTimeController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTimeController::Create() {
+	return new NiTimeController;
+}
diff --git a/src/obj/NiTransformController.cpp b/src/obj/NiTransformController.cpp
index eeec9b0c29ba6a63a8a6c77445482be2be0370a4..dc5190be96e0728b3c7f52801ea3953d9e62d3f2 100644
--- a/src/obj/NiTransformController.cpp
+++ b/src/obj/NiTransformController.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiTransformController::GetRefs() const {
 const Type & NiTransformController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTransformController"] = NiTransformController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTransformController::Create() {
+	return new NiTransformController;
+}
diff --git a/src/obj/NiTransformData.cpp b/src/obj/NiTransformData.cpp
index cb360d51b12d5a3677a9aff8742ddf112b74ae43..305455022624b5628e0429a29cd32dbe14bff574 100644
--- a/src/obj/NiTransformData.cpp
+++ b/src/obj/NiTransformData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiTransformData::GetRefs() const {
 const Type & NiTransformData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTransformData"] = NiTransformData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTransformData::Create() {
+	return new NiTransformData;
+}
diff --git a/src/obj/NiTransformInterpolator.cpp b/src/obj/NiTransformInterpolator.cpp
index cd5a182631205f70ae9d25ce90aa18a65b5f5e3c..2882c29d7cca4c4bf4ca322ecbae69b0e3895349 100644
--- a/src/obj/NiTransformInterpolator.cpp
+++ b/src/obj/NiTransformInterpolator.cpp
@@ -67,3 +67,27 @@ Ref<NiTransformData> NiTransformInterpolator::GetData() const {
 void NiTransformInterpolator::SetData( NiTransformData * value ) {
 	data = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTransformInterpolator"] = NiTransformInterpolator::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTransformInterpolator::Create() {
+	return new NiTransformInterpolator;
+}
diff --git a/src/obj/NiTriBasedGeom.cpp b/src/obj/NiTriBasedGeom.cpp
index 95fb041f81f3ddb3f208909c4e52d8c13f69580c..55ff2f5ffca9a8f120c616ce661d0874509cb31b 100644
--- a/src/obj/NiTriBasedGeom.cpp
+++ b/src/obj/NiTriBasedGeom.cpp
@@ -230,3 +230,27 @@ void NiTriBasedGeom::UpdateTangentSpace() {
 
 	TSpaceRef->SetData(binData);
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTriBasedGeom"] = NiTriBasedGeom::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTriBasedGeom::Create() {
+	return new NiTriBasedGeom;
+}
diff --git a/src/obj/NiTriBasedGeomData.cpp b/src/obj/NiTriBasedGeomData.cpp
index f0136aece2a96576badb725aa514ac00b99a0405..701f1759059aad506bae7d5aef42218284256d8b 100644
--- a/src/obj/NiTriBasedGeomData.cpp
+++ b/src/obj/NiTriBasedGeomData.cpp
@@ -43,3 +43,27 @@ void NiTriBasedGeomData::SetTriangles( const vector<Triangle> & in ) {
 vector<Triangle> NiTriBasedGeomData::GetTriangles() const {
 	return vector<Triangle>();
 }  
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTriBasedGeomData"] = NiTriBasedGeomData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTriBasedGeomData::Create() {
+	return new NiTriBasedGeomData;
+}
diff --git a/src/obj/NiTriShape.cpp b/src/obj/NiTriShape.cpp
index 203f53f74ae91db105bfb8ed6c800319a1d79dc7..1a8f1cdf04fdd58026f34001e77787d4052a41d6 100644
--- a/src/obj/NiTriShape.cpp
+++ b/src/obj/NiTriShape.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiTriShape::GetRefs() const {
 const Type & NiTriShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTriShape"] = NiTriShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTriShape::Create() {
+	return new NiTriShape;
+}
diff --git a/src/obj/NiTriShapeData.cpp b/src/obj/NiTriShapeData.cpp
index ff91cf5a8d23f4be132932a83ed803e93213801a..c42267b55a480ef09afa381f6091284cfd9d8fd2 100644
--- a/src/obj/NiTriShapeData.cpp
+++ b/src/obj/NiTriShapeData.cpp
@@ -92,3 +92,27 @@ void NiTriShapeData::SetTriangles( const vector<Triangle> & in ) {
 	//Set number of trianble points to the number of triangles times 3
 	numTrianglePoints = numTriangles * 3;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTriShapeData"] = NiTriShapeData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTriShapeData::Create() {
+	return new NiTriShapeData;
+}
diff --git a/src/obj/NiTriStrips.cpp b/src/obj/NiTriStrips.cpp
index e7821391b0a736e9f8653a33592f71c8cdd2da17..c388c780d10ebfae3d38b07acc93b2a2e2acddca 100644
--- a/src/obj/NiTriStrips.cpp
+++ b/src/obj/NiTriStrips.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiTriStrips::GetRefs() const {
 const Type & NiTriStrips::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTriStrips"] = NiTriStrips::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTriStrips::Create() {
+	return new NiTriStrips;
+}
diff --git a/src/obj/NiTriStripsData.cpp b/src/obj/NiTriStripsData.cpp
index c653ad42ba1e4a7a3aec9d7e36c7f4cd290e8a6e..cf75cb25884a1d2e8fb9e47413e7ea79545c714b 100644
--- a/src/obj/NiTriStripsData.cpp
+++ b/src/obj/NiTriStripsData.cpp
@@ -267,3 +267,27 @@ void NiTriStripsData::SetTSTriangles( const vector<Triangle> & in ) {
    //Recalculate Triangle Count
    numTriangles = CalcTriangleCount();
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiTriStripsData"] = NiTriStripsData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiTriStripsData::Create() {
+	return new NiTriStripsData;
+}
diff --git a/src/obj/NiUVController.cpp b/src/obj/NiUVController.cpp
index 99af5f091838871ec488dc10ba6d43e7a8c9aaa6..ef99f6f23bfe075536aec911ae00b39978bdac0a 100644
--- a/src/obj/NiUVController.cpp
+++ b/src/obj/NiUVController.cpp
@@ -43,3 +43,27 @@ Ref<NiUVData> NiUVController::GetData() const {
 void NiUVController::SetData( NiUVData * n ) {
 	data = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiUVController"] = NiUVController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiUVController::Create() {
+	return new NiUVController;
+}
diff --git a/src/obj/NiUVData.cpp b/src/obj/NiUVData.cpp
index 6ac41393fc3c7c786428446c4ff9a16d417f3cd1..ea93ce5a4a6dba18dcb776c0667948984db332e1 100644
--- a/src/obj/NiUVData.cpp
+++ b/src/obj/NiUVData.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiUVData::GetRefs() const {
 const Type & NiUVData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiUVData"] = NiUVData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiUVData::Create() {
+	return new NiUVData;
+}
diff --git a/src/obj/NiVectorExtraData.cpp b/src/obj/NiVectorExtraData.cpp
index f0e81827de4f7c8aac4e67380889d1474a043f60..37f821af67eeb086198e65808a8ce5b0698a71ea 100644
--- a/src/obj/NiVectorExtraData.cpp
+++ b/src/obj/NiVectorExtraData.cpp
@@ -42,3 +42,27 @@ Vector3 NiVectorExtraData::GetData() const {
 void NiVectorExtraData::SetData( const Vector3 & n ) {
 	vectorData = n;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiVectorExtraData"] = NiVectorExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiVectorExtraData::Create() {
+	return new NiVectorExtraData;
+}
diff --git a/src/obj/NiVertWeightsExtraData.cpp b/src/obj/NiVertWeightsExtraData.cpp
index 9459f331113ca98ea4b64ee37935420b941ab10e..530e0d8944844b55f52538851038b33cb43eea8a 100644
--- a/src/obj/NiVertWeightsExtraData.cpp
+++ b/src/obj/NiVertWeightsExtraData.cpp
@@ -44,3 +44,27 @@ void NiVertWeightsExtraData::SetData( const vector<float> & n ) {
 	numBytes = numVertices + 2;
 	weight = n;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiVertWeightsExtraData"] = NiVertWeightsExtraData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiVertWeightsExtraData::Create() {
+	return new NiVertWeightsExtraData;
+}
diff --git a/src/obj/NiVertexColorProperty.cpp b/src/obj/NiVertexColorProperty.cpp
index f209e5fd3ee9d871ec777413da9efdcfb919321c..481615b7c469bcbfc30f7a8044640a872c4b63ac 100644
--- a/src/obj/NiVertexColorProperty.cpp
+++ b/src/obj/NiVertexColorProperty.cpp
@@ -58,3 +58,27 @@ LightMode NiVertexColorProperty::GetLightingMode() const {
 void NiVertexColorProperty::SetLightingMode(LightMode value) {
    lightingMode = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiVertexColorProperty"] = NiVertexColorProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiVertexColorProperty::Create() {
+	return new NiVertexColorProperty;
+}
diff --git a/src/obj/NiVisController.cpp b/src/obj/NiVisController.cpp
index 7b8b30010f3b8cc2a50c424c3e9cc80b7beab2c4..1ea918808da691befa28d7975748e2da6d3409db 100644
--- a/src/obj/NiVisController.cpp
+++ b/src/obj/NiVisController.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> NiVisController::GetRefs() const {
 const Type & NiVisController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiVisController"] = NiVisController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiVisController::Create() {
+	return new NiVisController;
+}
diff --git a/src/obj/NiVisData.cpp b/src/obj/NiVisData.cpp
index 6052f99f7deaa5d72fa5c5503ff07a6f22ebe075..e27acf259186501cc7f9d81e5b17116ecd3edd80 100644
--- a/src/obj/NiVisData.cpp
+++ b/src/obj/NiVisData.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> NiVisData::GetRefs() const {
 const Type & NiVisData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiVisData"] = NiVisData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiVisData::Create() {
+	return new NiVisData;
+}
diff --git a/src/obj/NiWireframeProperty.cpp b/src/obj/NiWireframeProperty.cpp
index 08bba7ce18159006e5e6e944bfc90642da6e6145..48a54bad7f64dae5390ddecc6dee86f19807729b 100644
--- a/src/obj/NiWireframeProperty.cpp
+++ b/src/obj/NiWireframeProperty.cpp
@@ -42,3 +42,27 @@ unsigned short NiWireframeProperty::GetFlags() const {
 void NiWireframeProperty::SetFlags(unsigned short value) {
    flags = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiWireframeProperty"] = NiWireframeProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiWireframeProperty::Create() {
+	return new NiWireframeProperty;
+}
diff --git a/src/obj/NiZBufferProperty.cpp b/src/obj/NiZBufferProperty.cpp
index 0bdcfa68c54f886657e84967e8f2b357119222cb..0237003045e57832ddd31e7c037d9986d0537d87 100644
--- a/src/obj/NiZBufferProperty.cpp
+++ b/src/obj/NiZBufferProperty.cpp
@@ -50,3 +50,27 @@ CompareMode NiZBufferProperty::GetDepthFunction() const {
 void NiZBufferProperty::SetDepthFunction(CompareMode value) {
    function = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["NiZBufferProperty"] = NiZBufferProperty::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * NiZBufferProperty::Create() {
+	return new NiZBufferProperty;
+}
diff --git a/src/obj/RootCollisionNode.cpp b/src/obj/RootCollisionNode.cpp
index ab9e2fdb66e3737005675e02a27b0db67bfe1e2c..aca010df2ddbfa70d00e4f7040d05cc0d1bfaa9f 100644
--- a/src/obj/RootCollisionNode.cpp
+++ b/src/obj/RootCollisionNode.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> RootCollisionNode::GetRefs() const {
 const Type & RootCollisionNode::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["RootCollisionNode"] = RootCollisionNode::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * RootCollisionNode::Create() {
+	return new RootCollisionNode;
+}
diff --git a/src/obj/bhkBlendCollisionObject.cpp b/src/obj/bhkBlendCollisionObject.cpp
index 1e4c827bda16cc78f3caff0226722670c9334bf7..4fa19e416366146e750590be1f364ed9945438c7 100644
--- a/src/obj/bhkBlendCollisionObject.cpp
+++ b/src/obj/bhkBlendCollisionObject.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkBlendCollisionObject::GetRefs() const {
 const Type & bhkBlendCollisionObject::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkBlendCollisionObject"] = bhkBlendCollisionObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkBlendCollisionObject::Create() {
+	return new bhkBlendCollisionObject;
+}
diff --git a/src/obj/bhkBlendController.cpp b/src/obj/bhkBlendController.cpp
index 4a9513f71b6251ffc5e63c23137934c8ecdf855e..b488eeb5e16f8fc9972af3957541746b6a0d5a16 100644
--- a/src/obj/bhkBlendController.cpp
+++ b/src/obj/bhkBlendController.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkBlendController::GetRefs() const {
 const Type & bhkBlendController::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkBlendController"] = bhkBlendController::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkBlendController::Create() {
+	return new bhkBlendController;
+}
diff --git a/src/obj/bhkBoxShape.cpp b/src/obj/bhkBoxShape.cpp
index 23bc0c1ef2667a5d3b707fd7aacb9d17b04ca101..9e9e5fa80d5124068c35185314d79f5b734946c4 100644
--- a/src/obj/bhkBoxShape.cpp
+++ b/src/obj/bhkBoxShape.cpp
@@ -42,3 +42,27 @@ Vector3 bhkBoxShape::GetDimensions() const {
 void bhkBoxShape::SetDimensions(const Vector3 &value) {
 	dimensions = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkBoxShape"] = bhkBoxShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkBoxShape::Create() {
+	return new bhkBoxShape;
+}
diff --git a/src/obj/bhkCapsuleShape.cpp b/src/obj/bhkCapsuleShape.cpp
index bf4c62e3a440a4d5ff867d301bcfaa6d281c3cd8..564725b3def3699a93f81249818ea30c808392ef 100644
--- a/src/obj/bhkCapsuleShape.cpp
+++ b/src/obj/bhkCapsuleShape.cpp
@@ -74,3 +74,27 @@ float bhkCapsuleShape::GetRadius2() const {
 void bhkCapsuleShape::SetRadius2( float value ) {
 	radius2 = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkCapsuleShape"] = bhkCapsuleShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkCapsuleShape::Create() {
+	return new bhkCapsuleShape;
+}
diff --git a/src/obj/bhkCollisionObject.cpp b/src/obj/bhkCollisionObject.cpp
index 080fcfe491b0cea500c54f4c15653da302658f4c..164713548da960349ca04913862a4d5d165d0cef 100644
--- a/src/obj/bhkCollisionObject.cpp
+++ b/src/obj/bhkCollisionObject.cpp
@@ -37,3 +37,27 @@ list<NiObjectRef> bhkCollisionObject::GetRefs() const {
 const Type & bhkCollisionObject::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkCollisionObject"] = bhkCollisionObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkCollisionObject::Create() {
+	return new bhkCollisionObject;
+}
diff --git a/src/obj/bhkConvexShape.cpp b/src/obj/bhkConvexShape.cpp
index a57db828bca5aea1e103fc0e759177307c116d01..af57b5d17844a69c00bbc26ae2dfd7d476945509 100644
--- a/src/obj/bhkConvexShape.cpp
+++ b/src/obj/bhkConvexShape.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkConvexShape::GetRefs() const {
 const Type & bhkConvexShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkConvexShape"] = bhkConvexShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkConvexShape::Create() {
+	return new bhkConvexShape;
+}
diff --git a/src/obj/bhkConvexTransformShape.cpp b/src/obj/bhkConvexTransformShape.cpp
index 3ade18e946365666f5710c6ce2f7838b0b9ce41c..ddfd93afcabc10ba86955e1bee2e20f1f5119a7b 100644
--- a/src/obj/bhkConvexTransformShape.cpp
+++ b/src/obj/bhkConvexTransformShape.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkConvexTransformShape::GetRefs() const {
 const Type & bhkConvexTransformShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkConvexTransformShape"] = bhkConvexTransformShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkConvexTransformShape::Create() {
+	return new bhkConvexTransformShape;
+}
diff --git a/src/obj/bhkConvexVerticesShape.cpp b/src/obj/bhkConvexVerticesShape.cpp
index 63b17f3eb566bf6f37c1b6b983fe19482fb633ca..3345c47c800cabd0c1da30c71c5909db41f58c6f 100644
--- a/src/obj/bhkConvexVerticesShape.cpp
+++ b/src/obj/bhkConvexVerticesShape.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkConvexVerticesShape::GetRefs() const {
 const Type & bhkConvexVerticesShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkConvexVerticesShape"] = bhkConvexVerticesShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkConvexVerticesShape::Create() {
+	return new bhkConvexVerticesShape;
+}
diff --git a/src/obj/bhkEntity.cpp b/src/obj/bhkEntity.cpp
index cf1a999844699e830d9155adb940e44568bee5c1..17b3885732ecd78bade8236d1a35feffb0d4ea2d 100644
--- a/src/obj/bhkEntity.cpp
+++ b/src/obj/bhkEntity.cpp
@@ -51,3 +51,27 @@ OblivionLayer bhkEntity::GetLayer() const {
 void bhkEntity::SetLayer( OblivionLayer value ) {
 	layer = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkEntity"] = bhkEntity::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkEntity::Create() {
+	return new bhkEntity;
+}
diff --git a/src/obj/bhkHingeConstraint.cpp b/src/obj/bhkHingeConstraint.cpp
index 5a04981e1367b9b63f9ddee1d4e75eff89fbfd59..70523782171bdea10fb35969504e8ca7e1746bf5 100644
--- a/src/obj/bhkHingeConstraint.cpp
+++ b/src/obj/bhkHingeConstraint.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkHingeConstraint::GetRefs() const {
 const Type & bhkHingeConstraint::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkHingeConstraint"] = bhkHingeConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkHingeConstraint::Create() {
+	return new bhkHingeConstraint;
+}
diff --git a/src/obj/bhkLimitedHingeConstraint.cpp b/src/obj/bhkLimitedHingeConstraint.cpp
index a1b930bb2e3ddd3098274145ce9136009314cfdc..d5bc7b20516517fe68bde6d2cd0a916a5d4ca258 100644
--- a/src/obj/bhkLimitedHingeConstraint.cpp
+++ b/src/obj/bhkLimitedHingeConstraint.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> bhkLimitedHingeConstraint::GetRefs() const {
 const Type & bhkLimitedHingeConstraint::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkLimitedHingeConstraint"] = bhkLimitedHingeConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkLimitedHingeConstraint::Create() {
+	return new bhkLimitedHingeConstraint;
+}
diff --git a/src/obj/bhkListShape.cpp b/src/obj/bhkListShape.cpp
index 693376c786e1d29ba32b2e76ea92d532f377be2a..fbee386d16fc89e2f81ae027d6d015f11dffc586 100644
--- a/src/obj/bhkListShape.cpp
+++ b/src/obj/bhkListShape.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> bhkListShape::GetRefs() const {
 const Type & bhkListShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkListShape"] = bhkListShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkListShape::Create() {
+	return new bhkListShape;
+}
diff --git a/src/obj/bhkMalleableConstraint.cpp b/src/obj/bhkMalleableConstraint.cpp
index 14d60a2616cf636aefd1de987c516004b6e0f7a8..207cccaf241d0fe8806948f6e60654b5b131a14d 100644
--- a/src/obj/bhkMalleableConstraint.cpp
+++ b/src/obj/bhkMalleableConstraint.cpp
@@ -37,3 +37,27 @@ list<NiObjectRef> bhkMalleableConstraint::GetRefs() const {
 const Type & bhkMalleableConstraint::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkMalleableConstraint"] = bhkMalleableConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkMalleableConstraint::Create() {
+	return new bhkMalleableConstraint;
+}
diff --git a/src/obj/bhkMoppBvTreeShape.cpp b/src/obj/bhkMoppBvTreeShape.cpp
index 1b9a286e25bf6f4769a4f4c424cb6bb38309ef36..9aa65961fa19819c6974112be15cc9cfd53a0263 100644
--- a/src/obj/bhkMoppBvTreeShape.cpp
+++ b/src/obj/bhkMoppBvTreeShape.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> bhkMoppBvTreeShape::GetRefs() const {
 const Type & bhkMoppBvTreeShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkMoppBvTreeShape"] = bhkMoppBvTreeShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkMoppBvTreeShape::Create() {
+	return new bhkMoppBvTreeShape;
+}
diff --git a/src/obj/bhkMultiSphereShape.cpp b/src/obj/bhkMultiSphereShape.cpp
index 7f874f2392d8edf23611a1f4e6e78c2bb909b386..53e27e1516d3bb0cdf74a721ccfe5ab9c99ae9ab 100644
--- a/src/obj/bhkMultiSphereShape.cpp
+++ b/src/obj/bhkMultiSphereShape.cpp
@@ -43,3 +43,27 @@ vector<Sphere > bhkMultiSphereShape::GetSpheres() const {
 void bhkMultiSphereShape::SetSpheres( const vector<Sphere >& value ) {
 	spheres = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkMultiSphereShape"] = bhkMultiSphereShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkMultiSphereShape::Create() {
+	return new bhkMultiSphereShape;
+}
diff --git a/src/obj/bhkNiTriStripsShape.cpp b/src/obj/bhkNiTriStripsShape.cpp
index bd0ecb1ed04964a44baa783a1cf8a148e41edc6b..f6d83ac12a9058a8fc57a48d4f3b8401d94ec858 100644
--- a/src/obj/bhkNiTriStripsShape.cpp
+++ b/src/obj/bhkNiTriStripsShape.cpp
@@ -61,3 +61,27 @@ Vector3 bhkNiTriStripsShape::GetScale() const {
 void bhkNiTriStripsShape::SetScale( const Vector3 & n ) {
 	scale = n;	
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkNiTriStripsShape"] = bhkNiTriStripsShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkNiTriStripsShape::Create() {
+	return new bhkNiTriStripsShape;
+}
diff --git a/src/obj/bhkPackedNiTriStripsShape.cpp b/src/obj/bhkPackedNiTriStripsShape.cpp
index 94872df31545901ba4b82d9cf19d91033ad789d8..3ade4531eab04cd51de8c9d33dc51f406f71c7d6 100644
--- a/src/obj/bhkPackedNiTriStripsShape.cpp
+++ b/src/obj/bhkPackedNiTriStripsShape.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> bhkPackedNiTriStripsShape::GetRefs() const {
 const Type & bhkPackedNiTriStripsShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkPackedNiTriStripsShape"] = bhkPackedNiTriStripsShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkPackedNiTriStripsShape::Create() {
+	return new bhkPackedNiTriStripsShape;
+}
diff --git a/src/obj/bhkPrismaticConstraint.cpp b/src/obj/bhkPrismaticConstraint.cpp
index aa861511164ee013cee1086922b71543a49f6128..ad40a7120292c9836227e43bbf0dbbfdd6bc9ad0 100644
--- a/src/obj/bhkPrismaticConstraint.cpp
+++ b/src/obj/bhkPrismaticConstraint.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkPrismaticConstraint::GetRefs() const {
 const Type & bhkPrismaticConstraint::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkPrismaticConstraint"] = bhkPrismaticConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkPrismaticConstraint::Create() {
+	return new bhkPrismaticConstraint;
+}
diff --git a/src/obj/bhkRagdollConstraint.cpp b/src/obj/bhkRagdollConstraint.cpp
index 3575fd9877809a9b384b0a2e8ef6b99963cd4210..257a0df41ed33951701a2fcd5cd24532878516af 100644
--- a/src/obj/bhkRagdollConstraint.cpp
+++ b/src/obj/bhkRagdollConstraint.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkRagdollConstraint::GetRefs() const {
 const Type & bhkRagdollConstraint::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkRagdollConstraint"] = bhkRagdollConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkRagdollConstraint::Create() {
+	return new bhkRagdollConstraint;
+}
diff --git a/src/obj/bhkRefObject.cpp b/src/obj/bhkRefObject.cpp
index c70a0ce86384ed8e92a3acd2df340ca6876e1b98..63bf1f985897f9eac4cca5d4a21ff61325d83e98 100644
--- a/src/obj/bhkRefObject.cpp
+++ b/src/obj/bhkRefObject.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkRefObject::GetRefs() const {
 const Type & bhkRefObject::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkRefObject"] = bhkRefObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkRefObject::Create() {
+	return new bhkRefObject;
+}
diff --git a/src/obj/bhkRigidBody.cpp b/src/obj/bhkRigidBody.cpp
index 9e656ed0ac55dfe08e664f98bcb909218c1c8cf8..c46a46d8183856bbe39f69fa084b8296a003fe92 100644
--- a/src/obj/bhkRigidBody.cpp
+++ b/src/obj/bhkRigidBody.cpp
@@ -172,3 +172,27 @@ MotionQuality bhkRigidBody::GetQualityType() const {
 void bhkRigidBody::SetQualityType( MotionQuality value ) {
 	qualityType = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkRigidBody"] = bhkRigidBody::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkRigidBody::Create() {
+	return new bhkRigidBody;
+}
diff --git a/src/obj/bhkRigidBodyT.cpp b/src/obj/bhkRigidBodyT.cpp
index eea636196de5a1d2dbc506f0944a07633d0554b7..5e7f33df69fc7e28abef56d950f0b1b367342bcf 100644
--- a/src/obj/bhkRigidBodyT.cpp
+++ b/src/obj/bhkRigidBodyT.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkRigidBodyT::GetRefs() const {
 const Type & bhkRigidBodyT::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkRigidBodyT"] = bhkRigidBodyT::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkRigidBodyT::Create() {
+	return new bhkRigidBodyT;
+}
diff --git a/src/obj/bhkSPCollisionObject.cpp b/src/obj/bhkSPCollisionObject.cpp
index 93ee2af78ba6138f9681196706063c3501376ab4..ffec309a1d99e41778d331d7965efe136f73fbfa 100644
--- a/src/obj/bhkSPCollisionObject.cpp
+++ b/src/obj/bhkSPCollisionObject.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkSPCollisionObject::GetRefs() const {
 const Type & bhkSPCollisionObject::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkSPCollisionObject"] = bhkSPCollisionObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkSPCollisionObject::Create() {
+	return new bhkSPCollisionObject;
+}
diff --git a/src/obj/bhkSerializable.cpp b/src/obj/bhkSerializable.cpp
index bc169f38c76aa34bbef2f0ab170b04e56bf3f83d..9aa3f10ec85b4f0f207845d3b054745270cde838 100644
--- a/src/obj/bhkSerializable.cpp
+++ b/src/obj/bhkSerializable.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkSerializable::GetRefs() const {
 const Type & bhkSerializable::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkSerializable"] = bhkSerializable::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkSerializable::Create() {
+	return new bhkSerializable;
+}
diff --git a/src/obj/bhkShape.cpp b/src/obj/bhkShape.cpp
index 9ecac5a2522da86ed53678d3276b4f0080bbcf1d..2486cf038be5ff6fb66e77e42ea3d53a41024d03 100644
--- a/src/obj/bhkShape.cpp
+++ b/src/obj/bhkShape.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkShape::GetRefs() const {
 const Type & bhkShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkShape"] = bhkShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkShape::Create() {
+	return new bhkShape;
+}
diff --git a/src/obj/bhkSimpleShapePhantom.cpp b/src/obj/bhkSimpleShapePhantom.cpp
index 22d012eb54c7bf37216b56e2fbd1b18b97941348..6ad3d166575dc1c562b7bb5400d262b1905f88ed 100644
--- a/src/obj/bhkSimpleShapePhantom.cpp
+++ b/src/obj/bhkSimpleShapePhantom.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkSimpleShapePhantom::GetRefs() const {
 const Type & bhkSimpleShapePhantom::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkSimpleShapePhantom"] = bhkSimpleShapePhantom::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkSimpleShapePhantom::Create() {
+	return new bhkSimpleShapePhantom;
+}
diff --git a/src/obj/bhkSphereRepShape.cpp b/src/obj/bhkSphereRepShape.cpp
index a718646b58c3ca9764bf87cfe70795a354822f87..6a0afdf81c26c2561b95cbeb4f9055cf67c9a112 100644
--- a/src/obj/bhkSphereRepShape.cpp
+++ b/src/obj/bhkSphereRepShape.cpp
@@ -42,3 +42,27 @@ HavokMaterial bhkSphereRepShape::GetMaterial() const {
 void bhkSphereRepShape::SetMaterial( HavokMaterial value ) {
 	material = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkSphereRepShape"] = bhkSphereRepShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkSphereRepShape::Create() {
+	return new bhkSphereRepShape;
+}
diff --git a/src/obj/bhkSphereShape.cpp b/src/obj/bhkSphereShape.cpp
index 253dbe5b35d681ce00828109bfdee4ccf96e7cf9..0f60e7e1dd588cd5927fd710ba8e7a20e7a3ba82 100644
--- a/src/obj/bhkSphereShape.cpp
+++ b/src/obj/bhkSphereShape.cpp
@@ -42,3 +42,27 @@ float bhkSphereShape::GetRadius() const {
 void bhkSphereShape::SetRadius( float value ) {
 	radius = value;
 }
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkSphereShape"] = bhkSphereShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkSphereShape::Create() {
+	return new bhkSphereShape;
+}
diff --git a/src/obj/bhkStiffSpringConstraint.cpp b/src/obj/bhkStiffSpringConstraint.cpp
index 2ab45ddbe375dde3501a1846ce75595335a7b844..e2c7befdd944923d81026101a2df9b063e7a37ad 100644
--- a/src/obj/bhkStiffSpringConstraint.cpp
+++ b/src/obj/bhkStiffSpringConstraint.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkStiffSpringConstraint::GetRefs() const {
 const Type & bhkStiffSpringConstraint::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkStiffSpringConstraint"] = bhkStiffSpringConstraint::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkStiffSpringConstraint::Create() {
+	return new bhkStiffSpringConstraint;
+}
diff --git a/src/obj/bhkTransformShape.cpp b/src/obj/bhkTransformShape.cpp
index f9e768a7d42b3ffc36a6c33667fd69a2f12711b4..ef89dd7c2f487dc6b2cbb851715e659ad03e6893 100644
--- a/src/obj/bhkTransformShape.cpp
+++ b/src/obj/bhkTransformShape.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkTransformShape::GetRefs() const {
 const Type & bhkTransformShape::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkTransformShape"] = bhkTransformShape::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkTransformShape::Create() {
+	return new bhkTransformShape;
+}
diff --git a/src/obj/bhkWorldObject.cpp b/src/obj/bhkWorldObject.cpp
index 0bdd9c8215007f5df1104354cb24630bae52a7b3..4bab54a72cc46b177533e92b80beadfad49276c7 100644
--- a/src/obj/bhkWorldObject.cpp
+++ b/src/obj/bhkWorldObject.cpp
@@ -34,3 +34,27 @@ list<NiObjectRef> bhkWorldObject::GetRefs() const {
 const Type & bhkWorldObject::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["bhkWorldObject"] = bhkWorldObject::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * bhkWorldObject::Create() {
+	return new bhkWorldObject;
+}
diff --git a/src/obj/hkPackedNiTriStripsData.cpp b/src/obj/hkPackedNiTriStripsData.cpp
index 6f3dbb20da0eea60fc21931bb857ad2aaee43c67..64b0a64a906748a2fec75c1e480190e7ba688c92 100644
--- a/src/obj/hkPackedNiTriStripsData.cpp
+++ b/src/obj/hkPackedNiTriStripsData.cpp
@@ -35,3 +35,27 @@ list<NiObjectRef> hkPackedNiTriStripsData::GetRefs() const {
 const Type & hkPackedNiTriStripsData::GetType() const {
 	return TYPE;
 };
+
+namespace Niflib { 
+	typedef NiObject*(*obj_factory_func)();
+	extern map<string, obj_factory_func> global_object_map;
+
+	//Initialization function
+	static bool Initialization();
+
+	//A static bool to force the initialization to happen pre-main
+	static bool obj_initialized = Initialization();
+
+	static bool Initialization() {
+		//Add the function to the global object map
+		global_object_map["hkPackedNiTriStripsData"] = hkPackedNiTriStripsData::Create;
+
+		//Do this stuff just to make sure the compiler doesn't optimize this function and the static bool away.
+		obj_initialized = true;
+		return obj_initialized;
+	}
+}
+
+NiObject * hkPackedNiTriStripsData::Create() {
+	return new hkPackedNiTriStripsData;
+}