From e246e65c8d82a1550b2193aec2f7c74d01729766 Mon Sep 17 00:00:00 2001
From: Shon Ferguson <shonferg@users.sourceforge.net>
Date: Sat, 5 May 2007 21:06:12 +0000
Subject: [PATCH] Objects now have a Create methods and register themselves in
 the global object map with pre-main initialization, making obj_factories.cpp
 obsolete.

---
 include/obj/ABoneLODController.h              |   1 +
 include/obj/AKeyedData.h                      |   1 +
 include/obj/APSysCtlr.h                       |   1 +
 include/obj/APSysData.h                       |   1 +
 include/obj/AParticleModifier.h               |   1 +
 include/obj/AbhkConstraint.h                  |   1 +
 include/obj/AbhkRagdollConstraint.h           |   1 +
 include/obj/AbhkShapeCollection.h             |   1 +
 include/obj/AvoidNode.h                       |   1 +
 include/obj/BSBound.h                         |   1 +
 include/obj/BSFurnitureMarker.h               |   1 +
 include/obj/BSKeyframeController.h            |   1 +
 include/obj/BSPSysArrayEmitter.h              |   1 +
 include/obj/BSParentVelocityModifier.h        |   1 +
 include/obj/BSXFlags.h                        |   1 +
 include/obj/FxButton.h                        |   1 +
 include/obj/FxRadioButton.h                   |   1 +
 include/obj/FxWidget.h                        |   1 +
 include/obj/NiAVObject.h                      |   1 +
 include/obj/NiAlphaController.h               |   1 +
 include/obj/NiAlphaProperty.h                 |   1 +
 include/obj/NiAmbientLight.h                  |   1 +
 include/obj/NiAutoNormalParticles.h           |   1 +
 include/obj/NiAutoNormalParticlesData.h       |   1 +
 include/obj/NiBSAnimationNode.h               |   1 +
 include/obj/NiBSBoneLODController.h           |   1 +
 include/obj/NiBSPArrayController.h            |   1 +
 include/obj/NiBSParticleNode.h                |   1 +
 include/obj/NiBSplineBasisData.h              |   1 +
 include/obj/NiBSplineCompFloatInterpolator.h  |   1 +
 include/obj/NiBSplineCompPoint3Interpolator.h |   1 +
 .../obj/NiBSplineCompTransformInterpolator.h  |   1 +
 include/obj/NiBSplineData.h                   |   1 +
 include/obj/NiBSplineInterpolator.h           |   1 +
 include/obj/NiBillboardNode.h                 |   1 +
 include/obj/NiBinaryExtraData.h               |   1 +
 include/obj/NiBlendBoolInterpolator.h         |   1 +
 include/obj/NiBlendFloatInterpolator.h        |   1 +
 include/obj/NiBlendInterpolator.h             |   1 +
 include/obj/NiBlendPoint3Interpolator.h       |   1 +
 include/obj/NiBlendTransformInterpolator.h    |   1 +
 include/obj/NiBoneLODController.h             |   1 +
 include/obj/NiBoolData.h                      |   1 +
 include/obj/NiBoolInterpolator.h              |   1 +
 include/obj/NiBoolTimelineInterpolator.h      |   1 +
 include/obj/NiBooleanExtraData.h              |   1 +
 include/obj/NiCamera.h                        |   1 +
 include/obj/NiClod.h                          |   1 +
 include/obj/NiClodData.h                      |   1 +
 include/obj/NiClodSkinInstance.h              |   1 +
 include/obj/NiCollisionData.h                 |   1 +
 include/obj/NiCollisionObject.h               |   1 +
 include/obj/NiColorData.h                     |   1 +
 include/obj/NiColorExtraData.h                |   1 +
 include/obj/NiControllerManager.h             |   1 +
 include/obj/NiControllerSequence.h            |   1 +
 include/obj/NiDefaultAVObjectPalette.h        |   1 +
 include/obj/NiDirectionalLight.h              |   1 +
 include/obj/NiDitherProperty.h                |   1 +
 include/obj/NiDynamicEffect.h                 |   1 +
 include/obj/NiExtraData.h                     |   1 +
 include/obj/NiFlipController.h                |   1 +
 include/obj/NiFloatData.h                     |   1 +
 include/obj/NiFloatExtraData.h                |   1 +
 include/obj/NiFloatExtraDataController.h      |   1 +
 include/obj/NiFloatInterpolator.h             |   1 +
 include/obj/NiFloatsExtraData.h               |   1 +
 include/obj/NiFogProperty.h                   |   1 +
 include/obj/NiGeomMorpherController.h         |   1 +
 include/obj/NiGeometry.h                      |   1 +
 include/obj/NiGeometryData.h                  |   1 +
 include/obj/NiGravity.h                       |   1 +
 include/obj/NiImage.h                         |   1 +
 include/obj/NiIntegerExtraData.h              |   1 +
 include/obj/NiIntegersExtraData.h             |   1 +
 include/obj/NiInterpolator.h                  |   1 +
 include/obj/NiKeyframeController.h            |   1 +
 include/obj/NiKeyframeData.h                  |   1 +
 include/obj/NiLODData.h                       |   1 +
 include/obj/NiLODNode.h                       |   1 +
 include/obj/NiLight.h                         |   1 +
 include/obj/NiLightColorController.h          |   1 +
 include/obj/NiLightDimmerController.h         |   1 +
 include/obj/NiLookAtController.h              |   1 +
 include/obj/NiLookAtInterpolator.h            |   1 +
 include/obj/NiMaterialColorController.h       |   1 +
 include/obj/NiMaterialProperty.h              |   1 +
 include/obj/NiMeshPSysData.h                  |   1 +
 include/obj/NiMeshParticleSystem.h            |   1 +
 include/obj/NiMorphData.h                     |   1 +
 .../obj/NiMultiTargetTransformController.h    |   1 +
 include/obj/NiNode.h                          |   1 +
 include/obj/NiObject.h                        |   1 +
 include/obj/NiObjectNET.h                     |   1 +
 include/obj/NiPSysAgeDeathModifier.h          |   1 +
 include/obj/NiPSysBombModifier.h              |   1 +
 include/obj/NiPSysBoundUpdateModifier.h       |   1 +
 include/obj/NiPSysBoxEmitter.h                |   1 +
 include/obj/NiPSysColliderManager.h           |   1 +
 include/obj/NiPSysColorModifier.h             |   1 +
 include/obj/NiPSysCylinderEmitter.h           |   1 +
 include/obj/NiPSysData.h                      |   1 +
 include/obj/NiPSysDragModifier.h              |   1 +
 include/obj/NiPSysEmitter.h                   |   1 +
 include/obj/NiPSysEmitterCtlr.h               |   1 +
 include/obj/NiPSysEmitterCtlrData.h           |   1 +
 include/obj/NiPSysEmitterDeclinationCtlr.h    |   1 +
 include/obj/NiPSysEmitterDeclinationVarCtlr.h |   1 +
 include/obj/NiPSysEmitterInitialRadiusCtlr.h  |   1 +
 include/obj/NiPSysEmitterLifeSpanCtlr.h       |   1 +
 include/obj/NiPSysEmitterSpeedCtlr.h          |   1 +
 include/obj/NiPSysGravityModifier.h           |   1 +
 include/obj/NiPSysGravityStrengthCtlr.h       |   1 +
 include/obj/NiPSysGrowFadeModifier.h          |   1 +
 include/obj/NiPSysMeshEmitter.h               |   1 +
 include/obj/NiPSysMeshUpdateModifier.h        |   1 +
 include/obj/NiPSysModifier.h                  |   1 +
 include/obj/NiPSysModifierActiveCtlr.h        |   1 +
 include/obj/NiPSysPlanarCollider.h            |   1 +
 include/obj/NiPSysPositionModifier.h          |   1 +
 include/obj/NiPSysResetOnLoopCtlr.h           |   1 +
 include/obj/NiPSysRotationModifier.h          |   1 +
 include/obj/NiPSysSpawnModifier.h             |   1 +
 include/obj/NiPSysSphereEmitter.h             |   1 +
 include/obj/NiPSysUpdateCtlr.h                |   1 +
 include/obj/NiPSysVolumeEmitter.h             |   1 +
 include/obj/NiPalette.h                       |   1 +
 include/obj/NiParticleBomb.h                  |   1 +
 include/obj/NiParticleColorModifier.h         |   1 +
 include/obj/NiParticleGrowFade.h              |   1 +
 include/obj/NiParticleMeshModifier.h          |   1 +
 include/obj/NiParticleMeshes.h                |   1 +
 include/obj/NiParticleMeshesData.h            |   1 +
 include/obj/NiParticleRotation.h              |   1 +
 include/obj/NiParticleSystem.h                |   1 +
 include/obj/NiParticleSystemController.h      |   1 +
 include/obj/NiParticles.h                     |   1 +
 include/obj/NiParticlesData.h                 |   1 +
 include/obj/NiPathController.h                |   1 +
 include/obj/NiPathInterpolator.h              |   1 +
 include/obj/NiPixelData.h                     |   1 +
 include/obj/NiPlanarCollider.h                |   1 +
 include/obj/NiPoint3Interpolator.h            |   1 +
 include/obj/NiPointLight.h                    |   1 +
 include/obj/NiPosData.h                       |   1 +
 include/obj/NiProperty.h                      |   1 +
 include/obj/NiRangeLODData.h                  |   1 +
 include/obj/NiRotatingParticles.h             |   1 +
 include/obj/NiRotatingParticlesData.h         |   1 +
 include/obj/NiScreenLODData.h                 |   1 +
 include/obj/NiSequenceStreamHelper.h          |   1 +
 include/obj/NiShadeProperty.h                 |   1 +
 include/obj/NiSingleInterpolatorController.h  |   1 +
 include/obj/NiSkinData.h                      |   1 +
 include/obj/NiSkinInstance.h                  |   1 +
 include/obj/NiSkinPartition.h                 |   1 +
 include/obj/NiSourceTexture.h                 |   1 +
 include/obj/NiSpecularProperty.h              |   1 +
 include/obj/NiSphericalCollider.h             |   1 +
 include/obj/NiSpotLight.h                     |   1 +
 include/obj/NiStencilProperty.h               |   1 +
 include/obj/NiStringExtraData.h               |   1 +
 include/obj/NiStringPalette.h                 |   1 +
 include/obj/NiStringsExtraData.h              |   1 +
 include/obj/NiTextKeyExtraData.h              |   1 +
 include/obj/NiTextureEffect.h                 |   1 +
 include/obj/NiTextureModeProperty.h           |   1 +
 include/obj/NiTextureProperty.h               |   1 +
 include/obj/NiTextureTransformController.h    |   1 +
 include/obj/NiTexturingProperty.h             |   1 +
 include/obj/NiTimeController.h                |   1 +
 include/obj/NiTransformController.h           |   1 +
 include/obj/NiTransformData.h                 |   1 +
 include/obj/NiTransformInterpolator.h         |   1 +
 include/obj/NiTriBasedGeom.h                  |   1 +
 include/obj/NiTriBasedGeomData.h              |   1 +
 include/obj/NiTriShape.h                      |   1 +
 include/obj/NiTriShapeData.h                  |   1 +
 include/obj/NiTriStrips.h                     |   1 +
 include/obj/NiTriStripsData.h                 |   1 +
 include/obj/NiUVController.h                  |   1 +
 include/obj/NiUVData.h                        |   1 +
 include/obj/NiVectorExtraData.h               |   1 +
 include/obj/NiVertWeightsExtraData.h          |   1 +
 include/obj/NiVertexColorProperty.h           |   1 +
 include/obj/NiVisController.h                 |   1 +
 include/obj/NiVisData.h                       |   1 +
 include/obj/NiWireframeProperty.h             |   1 +
 include/obj/NiZBufferProperty.h               |   1 +
 include/obj/RootCollisionNode.h               |   1 +
 include/obj/bhkBlendCollisionObject.h         |   1 +
 include/obj/bhkBlendController.h              |   1 +
 include/obj/bhkBoxShape.h                     |   1 +
 include/obj/bhkCapsuleShape.h                 |   1 +
 include/obj/bhkCollisionObject.h              |   1 +
 include/obj/bhkConvexShape.h                  |   1 +
 include/obj/bhkConvexTransformShape.h         |   1 +
 include/obj/bhkConvexVerticesShape.h          |   1 +
 include/obj/bhkEntity.h                       |   1 +
 include/obj/bhkHingeConstraint.h              |   1 +
 include/obj/bhkLimitedHingeConstraint.h       |   1 +
 include/obj/bhkListShape.h                    |   1 +
 include/obj/bhkMalleableConstraint.h          |   1 +
 include/obj/bhkMoppBvTreeShape.h              |   1 +
 include/obj/bhkMultiSphereShape.h             |   1 +
 include/obj/bhkNiTriStripsShape.h             |   1 +
 include/obj/bhkPackedNiTriStripsShape.h       |   1 +
 include/obj/bhkPrismaticConstraint.h          |   1 +
 include/obj/bhkRagdollConstraint.h            |   1 +
 include/obj/bhkRefObject.h                    |   1 +
 include/obj/bhkRigidBody.h                    |   1 +
 include/obj/bhkRigidBodyT.h                   |   1 +
 include/obj/bhkSPCollisionObject.h            |   1 +
 include/obj/bhkSerializable.h                 |   1 +
 include/obj/bhkShape.h                        |   1 +
 include/obj/bhkSimpleShapePhantom.h           |   1 +
 include/obj/bhkSphereRepShape.h               |   1 +
 include/obj/bhkSphereShape.h                  |   1 +
 include/obj/bhkStiffSpringConstraint.h        |   1 +
 include/obj/bhkTransformShape.h               |   1 +
 include/obj/bhkWorldObject.h                  |   1 +
 include/obj/hkPackedNiTriStripsData.h         |   1 +
 niflib.vcproj                                 |   4 -
 src/gen/obj_factories.cpp                     | 579 ------------------
 src/niflib.cpp                                |  14 +-
 src/obj/ABoneLODController.cpp                |  24 +
 src/obj/AKeyedData.cpp                        |  24 +
 src/obj/APSysCtlr.cpp                         |  24 +
 src/obj/APSysData.cpp                         |  24 +
 src/obj/AParticleModifier.cpp                 |  24 +
 src/obj/AbhkConstraint.cpp                    |  24 +
 src/obj/AbhkRagdollConstraint.cpp             |  24 +
 src/obj/AbhkShapeCollection.cpp               |  24 +
 src/obj/AvoidNode.cpp                         |  24 +
 src/obj/BSBound.cpp                           |  24 +
 src/obj/BSFurnitureMarker.cpp                 |  24 +
 src/obj/BSKeyframeController.cpp              |  24 +
 src/obj/BSPSysArrayEmitter.cpp                |  24 +
 src/obj/BSParentVelocityModifier.cpp          |  24 +
 src/obj/BSXFlags.cpp                          |  24 +
 src/obj/FxButton.cpp                          |  24 +
 src/obj/FxRadioButton.cpp                     |  24 +
 src/obj/FxWidget.cpp                          |  24 +
 src/obj/NiAVObject.cpp                        |  24 +
 src/obj/NiAlphaController.cpp                 |  24 +
 src/obj/NiAlphaProperty.cpp                   |  24 +
 src/obj/NiAmbientLight.cpp                    |  24 +
 src/obj/NiAutoNormalParticles.cpp             |  24 +
 src/obj/NiAutoNormalParticlesData.cpp         |  24 +
 src/obj/NiBSAnimationNode.cpp                 |  24 +
 src/obj/NiBSBoneLODController.cpp             |  24 +
 src/obj/NiBSPArrayController.cpp              |  24 +
 src/obj/NiBSParticleNode.cpp                  |  24 +
 src/obj/NiBSplineBasisData.cpp                |  24 +
 src/obj/NiBSplineCompFloatInterpolator.cpp    |  24 +
 src/obj/NiBSplineCompPoint3Interpolator.cpp   |  24 +
 .../NiBSplineCompTransformInterpolator.cpp    |  24 +
 src/obj/NiBSplineData.cpp                     |  24 +
 src/obj/NiBSplineInterpolator.cpp             |  24 +
 src/obj/NiBillboardNode.cpp                   |  24 +
 src/obj/NiBinaryExtraData.cpp                 |  24 +
 src/obj/NiBlendBoolInterpolator.cpp           |  24 +
 src/obj/NiBlendFloatInterpolator.cpp          |  24 +
 src/obj/NiBlendInterpolator.cpp               |  24 +
 src/obj/NiBlendPoint3Interpolator.cpp         |  24 +
 src/obj/NiBlendTransformInterpolator.cpp      |  24 +
 src/obj/NiBoneLODController.cpp               |  24 +
 src/obj/NiBoolData.cpp                        |  24 +
 src/obj/NiBoolInterpolator.cpp                |  24 +
 src/obj/NiBoolTimelineInterpolator.cpp        |  24 +
 src/obj/NiBooleanExtraData.cpp                |  24 +
 src/obj/NiCamera.cpp                          |  24 +
 src/obj/NiClod.cpp                            |  24 +
 src/obj/NiClodData.cpp                        |  24 +
 src/obj/NiClodSkinInstance.cpp                |  24 +
 src/obj/NiCollisionData.cpp                   |  24 +
 src/obj/NiCollisionObject.cpp                 |  24 +
 src/obj/NiColorData.cpp                       |  24 +
 src/obj/NiColorExtraData.cpp                  |  24 +
 src/obj/NiControllerManager.cpp               |  24 +
 src/obj/NiControllerSequence.cpp              |  24 +
 src/obj/NiDefaultAVObjectPalette.cpp          |  24 +
 src/obj/NiDirectionalLight.cpp                |  24 +
 src/obj/NiDitherProperty.cpp                  |  24 +
 src/obj/NiDynamicEffect.cpp                   |  24 +
 src/obj/NiExtraData.cpp                       |  24 +
 src/obj/NiFlipController.cpp                  |  24 +
 src/obj/NiFloatData.cpp                       |  24 +
 src/obj/NiFloatExtraData.cpp                  |  24 +
 src/obj/NiFloatExtraDataController.cpp        |  24 +
 src/obj/NiFloatInterpolator.cpp               |  24 +
 src/obj/NiFloatsExtraData.cpp                 |  24 +
 src/obj/NiFogProperty.cpp                     |  24 +
 src/obj/NiGeomMorpherController.cpp           |  24 +
 src/obj/NiGeometry.cpp                        |  24 +
 src/obj/NiGeometryData.cpp                    |  24 +
 src/obj/NiGravity.cpp                         |  24 +
 src/obj/NiImage.cpp                           |  24 +
 src/obj/NiIntegerExtraData.cpp                |  24 +
 src/obj/NiIntegersExtraData.cpp               |  24 +
 src/obj/NiInterpolator.cpp                    |  24 +
 src/obj/NiKeyframeController.cpp              |  24 +
 src/obj/NiKeyframeData.cpp                    |  24 +
 src/obj/NiLODData.cpp                         |  24 +
 src/obj/NiLODNode.cpp                         |  24 +
 src/obj/NiLight.cpp                           |  24 +
 src/obj/NiLightColorController.cpp            |  24 +
 src/obj/NiLightDimmerController.cpp           |  24 +
 src/obj/NiLookAtController.cpp                |  24 +
 src/obj/NiLookAtInterpolator.cpp              |  24 +
 src/obj/NiMaterialColorController.cpp         |  24 +
 src/obj/NiMaterialProperty.cpp                |  24 +
 src/obj/NiMeshPSysData.cpp                    |  24 +
 src/obj/NiMeshParticleSystem.cpp              |  24 +
 src/obj/NiMorphData.cpp                       |  24 +
 src/obj/NiMultiTargetTransformController.cpp  |  24 +
 src/obj/NiNode.cpp                            |  24 +
 src/obj/NiObject.cpp                          |  25 +
 src/obj/NiObjectNET.cpp                       |  24 +
 src/obj/NiPSysAgeDeathModifier.cpp            |  24 +
 src/obj/NiPSysBombModifier.cpp                |  24 +
 src/obj/NiPSysBoundUpdateModifier.cpp         |  24 +
 src/obj/NiPSysBoxEmitter.cpp                  |  24 +
 src/obj/NiPSysColliderManager.cpp             |  24 +
 src/obj/NiPSysColorModifier.cpp               |  24 +
 src/obj/NiPSysCylinderEmitter.cpp             |  24 +
 src/obj/NiPSysData.cpp                        |  24 +
 src/obj/NiPSysDragModifier.cpp                |  24 +
 src/obj/NiPSysEmitter.cpp                     |  24 +
 src/obj/NiPSysEmitterCtlr.cpp                 |  24 +
 src/obj/NiPSysEmitterCtlrData.cpp             |  24 +
 src/obj/NiPSysEmitterDeclinationCtlr.cpp      |  24 +
 src/obj/NiPSysEmitterDeclinationVarCtlr.cpp   |  24 +
 src/obj/NiPSysEmitterInitialRadiusCtlr.cpp    |  24 +
 src/obj/NiPSysEmitterLifeSpanCtlr.cpp         |  24 +
 src/obj/NiPSysEmitterSpeedCtlr.cpp            |  24 +
 src/obj/NiPSysGravityModifier.cpp             |  24 +
 src/obj/NiPSysGravityStrengthCtlr.cpp         |  24 +
 src/obj/NiPSysGrowFadeModifier.cpp            |  24 +
 src/obj/NiPSysMeshEmitter.cpp                 |  24 +
 src/obj/NiPSysMeshUpdateModifier.cpp          |  24 +
 src/obj/NiPSysModifier.cpp                    |  24 +
 src/obj/NiPSysModifierActiveCtlr.cpp          |  24 +
 src/obj/NiPSysPlanarCollider.cpp              |  24 +
 src/obj/NiPSysPositionModifier.cpp            |  24 +
 src/obj/NiPSysResetOnLoopCtlr.cpp             |  24 +
 src/obj/NiPSysRotationModifier.cpp            |  24 +
 src/obj/NiPSysSpawnModifier.cpp               |  24 +
 src/obj/NiPSysSphereEmitter.cpp               |  24 +
 src/obj/NiPSysUpdateCtlr.cpp                  |  24 +
 src/obj/NiPSysVolumeEmitter.cpp               |  24 +
 src/obj/NiPalette.cpp                         |  24 +
 src/obj/NiParticleBomb.cpp                    |  24 +
 src/obj/NiParticleColorModifier.cpp           |  24 +
 src/obj/NiParticleGrowFade.cpp                |  24 +
 src/obj/NiParticleMeshModifier.cpp            |  24 +
 src/obj/NiParticleMeshes.cpp                  |  24 +
 src/obj/NiParticleMeshesData.cpp              |  24 +
 src/obj/NiParticleRotation.cpp                |  24 +
 src/obj/NiParticleSystem.cpp                  |  24 +
 src/obj/NiParticleSystemController.cpp        |  24 +
 src/obj/NiParticles.cpp                       |  24 +
 src/obj/NiParticlesData.cpp                   |  24 +
 src/obj/NiPathController.cpp                  |  24 +
 src/obj/NiPathInterpolator.cpp                |  24 +
 src/obj/NiPixelData.cpp                       |  24 +
 src/obj/NiPlanarCollider.cpp                  |  24 +
 src/obj/NiPoint3Interpolator.cpp              |  24 +
 src/obj/NiPointLight.cpp                      |  24 +
 src/obj/NiPosData.cpp                         |  24 +
 src/obj/NiProperty.cpp                        |  24 +
 src/obj/NiRangeLODData.cpp                    |  24 +
 src/obj/NiRotatingParticles.cpp               |  24 +
 src/obj/NiRotatingParticlesData.cpp           |  24 +
 src/obj/NiScreenLODData.cpp                   |  24 +
 src/obj/NiSequenceStreamHelper.cpp            |  24 +
 src/obj/NiShadeProperty.cpp                   |  24 +
 src/obj/NiSingleInterpolatorController.cpp    |  24 +
 src/obj/NiSkinData.cpp                        |  24 +
 src/obj/NiSkinInstance.cpp                    |  24 +
 src/obj/NiSkinPartition.cpp                   |  24 +
 src/obj/NiSourceTexture.cpp                   |  24 +
 src/obj/NiSpecularProperty.cpp                |  24 +
 src/obj/NiSphericalCollider.cpp               |  24 +
 src/obj/NiSpotLight.cpp                       |  24 +
 src/obj/NiStencilProperty.cpp                 |  24 +
 src/obj/NiStringExtraData.cpp                 |  24 +
 src/obj/NiStringPalette.cpp                   |  24 +
 src/obj/NiStringsExtraData.cpp                |  24 +
 src/obj/NiTextKeyExtraData.cpp                |  24 +
 src/obj/NiTextureEffect.cpp                   |  24 +
 src/obj/NiTextureModeProperty.cpp             |  24 +
 src/obj/NiTextureProperty.cpp                 |  24 +
 src/obj/NiTextureTransformController.cpp      |  24 +
 src/obj/NiTexturingProperty.cpp               |  24 +
 src/obj/NiTimeController.cpp                  |  24 +
 src/obj/NiTransformController.cpp             |  24 +
 src/obj/NiTransformData.cpp                   |  24 +
 src/obj/NiTransformInterpolator.cpp           |  24 +
 src/obj/NiTriBasedGeom.cpp                    |  24 +
 src/obj/NiTriBasedGeomData.cpp                |  24 +
 src/obj/NiTriShape.cpp                        |  24 +
 src/obj/NiTriShapeData.cpp                    |  24 +
 src/obj/NiTriStrips.cpp                       |  24 +
 src/obj/NiTriStripsData.cpp                   |  24 +
 src/obj/NiUVController.cpp                    |  24 +
 src/obj/NiUVData.cpp                          |  24 +
 src/obj/NiVectorExtraData.cpp                 |  24 +
 src/obj/NiVertWeightsExtraData.cpp            |  24 +
 src/obj/NiVertexColorProperty.cpp             |  24 +
 src/obj/NiVisController.cpp                   |  24 +
 src/obj/NiVisData.cpp                         |  24 +
 src/obj/NiWireframeProperty.cpp               |  24 +
 src/obj/NiZBufferProperty.cpp                 |  24 +
 src/obj/RootCollisionNode.cpp                 |  24 +
 src/obj/bhkBlendCollisionObject.cpp           |  24 +
 src/obj/bhkBlendController.cpp                |  24 +
 src/obj/bhkBoxShape.cpp                       |  24 +
 src/obj/bhkCapsuleShape.cpp                   |  24 +
 src/obj/bhkCollisionObject.cpp                |  24 +
 src/obj/bhkConvexShape.cpp                    |  24 +
 src/obj/bhkConvexTransformShape.cpp           |  24 +
 src/obj/bhkConvexVerticesShape.cpp            |  24 +
 src/obj/bhkEntity.cpp                         |  24 +
 src/obj/bhkHingeConstraint.cpp                |  24 +
 src/obj/bhkLimitedHingeConstraint.cpp         |  24 +
 src/obj/bhkListShape.cpp                      |  24 +
 src/obj/bhkMalleableConstraint.cpp            |  24 +
 src/obj/bhkMoppBvTreeShape.cpp                |  24 +
 src/obj/bhkMultiSphereShape.cpp               |  24 +
 src/obj/bhkNiTriStripsShape.cpp               |  24 +
 src/obj/bhkPackedNiTriStripsShape.cpp         |  24 +
 src/obj/bhkPrismaticConstraint.cpp            |  24 +
 src/obj/bhkRagdollConstraint.cpp              |  24 +
 src/obj/bhkRefObject.cpp                      |  24 +
 src/obj/bhkRigidBody.cpp                      |  24 +
 src/obj/bhkRigidBodyT.cpp                     |  24 +
 src/obj/bhkSPCollisionObject.cpp              |  24 +
 src/obj/bhkSerializable.cpp                   |  24 +
 src/obj/bhkShape.cpp                          |  24 +
 src/obj/bhkSimpleShapePhantom.cpp             |  24 +
 src/obj/bhkSphereRepShape.cpp                 |  24 +
 src/obj/bhkSphereShape.cpp                    |  24 +
 src/obj/bhkStiffSpringConstraint.cpp          |  24 +
 src/obj/bhkTransformShape.cpp                 |  24 +
 src/obj/bhkWorldObject.cpp                    |  24 +
 src/obj/hkPackedNiTriStripsData.cpp           |  24 +
 447 files changed, 5554 insertions(+), 594 deletions(-)
 delete mode 100644 src/gen/obj_factories.cpp

diff --git a/include/obj/ABoneLODController.h b/include/obj/ABoneLODController.h
index 29127e8f..a06790e1 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 d9f60623..e37e3a7a 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 39ecbc0b..8ec0c42c 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 41191aca..461b6d26 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 e0cdcc20..920fc2ef 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 b01bd53f..e075a901 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 6dcc7e81..cd769777 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 5b0c18ae..84478cdf 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 9a4097b8..2c20b1c8 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 0dccd0e2..d841bc80 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 7d128de4..4b841bf1 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 0fc0f7fe..42b42603 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 fa69f7bd..4fbc83e0 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 86cc9bfa..01b34b9a 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 b00f4759..dcf023e9 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 a398e027..3a609680 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 88559fee..da88e343 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 8bd4ad4f..2d7c1cd6 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 20c2bfbf..33599cac 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 f609fe31..465d46bd 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 1aef9043..68562c83 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 5cbfb6f7..36f2d056 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 77a0ed0c..ba8f36f2 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 f1afdc9e..940511f7 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 5496e740..2b78cbc6 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 5ebce2ef..67e67707 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 d147fd04..07d9793c 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 c4fe79b2..8939bf20 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 5db389ab..5cc5f2cc 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 b150dfc4..84f9d894 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 1f0a41ca..bd230999 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 f67b7ae6..eaf36c16 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 14b27ff8..150e5aac 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 68ffc586..404ba2c9 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 c32facf0..84ee53ca 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 696335ae..a3829bee 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 30f99784..1b77f2a8 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 f783fc32..cdfb23ac 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 fd386fa9..5d977df4 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 c8a0d0e8..b9aea723 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 5dd7e8c4..f791927b 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 6bc472bd..2fbcb18d 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 c6a3b640..b86c8b28 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 b3d3bd9d..4bd83ee5 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 c2bd4689..e020983e 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 c5ccb760..64a2d286 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 0bc365a0..5e914980 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 7bb65198..a24d1b35 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 59c51185..3c3c5795 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 8a1d8aea..6a14fde7 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 74ede186..38d3b628 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 07303f15..cf26860d 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 8de64eec..3833fa8c 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 2c034e93..5452b694 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 264fdf57..cbf5692a 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 c8d4a544..45b9ad93 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 527aa3a5..4ec328ec 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 0fc79ddd..f8cfab3d 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 aa124fe8..7313c753 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 f348ac36..679ac192 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 84916951..e0d4cf5f 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 47efe7c1..e8d50c88 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 5d0c0483..de46879a 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 77284aff..662bc69f 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 2f7c9b39..5d19feef 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 9e2f25c3..460a34bd 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 d0b6082c..ff815c3e 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 b6d26ea5..c71ffbf0 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 2cad8ec0..ebc05808 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 f1f77c93..00e8c031 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 e18a6cc1..b268864f 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 bec76a57..39f0fe74 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 641a21e5..59819636 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 93932ae2..1b12207f 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 51421ecb..1e46530b 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 97259320..032582e7 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 2dfac325..2c0e43ee 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 f198f58e..c764107a 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 349c94c4..28c077bc 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 47c559d0..152b027e 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 dbbaa8d2..e4995223 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 2544f8a0..7cb4fd21 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 04d45aa0..1b99c983 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 4f8dae86..88826508 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 e525e06c..2651e3b5 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 2ca593b7..cd1c902f 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 96bb073c..374ae6ff 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 d97b4041..389f58e6 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 bcc234d1..3c203f46 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 cc95c43e..0e22d64a 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 9689358c..05cb0662 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 910e4cfd..ef8fc8d5 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 51c6eb8a..aef9fddc 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 e06dd403..03f05770 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 e604f686..b7b93400 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 0784f2b5..0b4683e6 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 91e67eb4..c93c67e0 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 3858e39d..6245aa20 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 61b95d1c..89074efb 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 6ca73a1b..5b9b404f 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 c3f2c5c3..86316579 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 8621b1dc..fe7e5acc 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 10cf987f..b9c6aa1c 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 91614700..824f700e 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 cb74e99c..d2a26de2 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 ec7c66d0..6c22d0e0 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 2b811111..b8d5c46a 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 6b6729a7..e5ccc027 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 e567d29b..e83f1ec3 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 01f54fc5..f48ea390 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 8578233c..72e72afe 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 e590eb08..3cd6a8e6 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 6ea0d147..96cb7fa5 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 970a0f2b..864347ee 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 a6facb02..54b1cdfa 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 e70660ac..c32e856c 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 f82b1ddc..b73f947c 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 de7a623b..f968c46c 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 3a24aef7..55e503d6 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 ce5e0490..0c3ea45b 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 a063da9e..067b7c7f 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 0e1f7449..cede80f3 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 699b3f3b..3f68f38c 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 084d280d..4df9cbee 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 33bc64ce..c631f4f1 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 823848a8..285248d8 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 e0351327..c28d8197 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 df1c2827..434466ed 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 19d53eb9..c5b88ecd 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 ff61ff6a..37787c8f 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 5c6cbfd8..0c35e1e3 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 8df65504..7209940a 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 defe206b..84017669 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 f9a400fe..5f3c808e 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 9332a7c2..ee7cba94 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 a02c2ed2..a8f8da7f 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 08cfef00..20987056 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 e3b002d5..9b3b258f 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 2cf97588..2a031ac6 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 0aedd3a8..44c2aa22 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 d323760e..3675ffbe 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 baf35fb4..b0ddb27d 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 dfc9b5fc..797b835b 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 181f54b5..fd53384e 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 b800ee8d..f44a48c7 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 6f42d068..9f443741 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 238eca14..ef26bda0 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 63cf99d5..d16fcd22 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 e8dd5576..7865d0e0 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 b58fc7a3..2d1bfc30 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 e0a2d8bb..64c3be50 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 5ee61161..aef3e932 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 7a99f2c7..39671b7c 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 8d3ecff2..163cab4d 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 c46927b6..2502e3e3 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 201e0788..1ea93476 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 1581fd0c..30180bc8 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 2795333d..c98a0b87 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 50416284..195da308 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 cf7e1cab..9dff8aab 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 713f5ec1..7cf7e12b 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 e44a0800..a080f1bc 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 608f30da..46c1baed 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 6ea62a3e..9b48c549 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 4d693baf..dda54a96 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 019e4acb..05729670 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 161d5938..52c467d2 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 20b6c475..dceb90b4 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 eaa73d4d..8c95b230 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 74cb5a19..d5ae063f 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 711794df..cd0f5a28 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 1c0be2c4..e264f00c 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 2b0e1f0d..a6a0cf13 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 0e93ad3f..4b3af546 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 13d1a698..7ddab476 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 269499b3..d8f0a842 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 9da6d1cb..8aadbfb8 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 9c3f43ab..27ca73cf 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 21be4b11..8ae7b2e9 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 5a47319a..1e372570 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 88cd2e83..235ca5b8 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 a91de141..2f16adb4 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 f2a580b7..898e3925 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 b6d2362e..7fb48405 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 a75cc26a..44876c4d 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 ee33e77f..4eaf5537 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 d3ccc21f..95394921 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 0bbabff6..9b01c1b3 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 1b173b4e..d89a8f82 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 cdb25cdc..0684cc76 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 90888849..e0e11b6b 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 668664c9..6572a59b 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 dc0c9cd1..2c8cab68 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 c1846858..fbc15ae7 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 c677d3b4..ebca9670 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 57ab99ac..da88b9ed 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 b2132e6d..1e81df15 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 c96bf167..d269e333 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 381e3b98..399a3767 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 c29b028f..125b970c 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 31aa5da0..54543383 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 8e19ba45..5cd4e494 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 ddf1cb5e..0633a856 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 86f47fcc..af5cb7a1 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 2526c995..96f7bf53 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 07d582c4..3cc4678e 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 adc897fc..7ac6d9ca 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 b83f6659..b0bd1255 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 2e9825b2..8dbddac1 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 6b6be611..2c32d648 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 13b1b1d7..32f66e4b 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 b3f741c4..ab9fa631 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 8be90ee1..c10f6ac1 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 9db9ecdc..90a68003 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 9c47449c..f5c207a2 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 ed5a5556..a1dd86fc 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 991b281f..36235578 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 020f5f9e..2626286a 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 1aa51ab9..a72c49a1 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 5d12b154..35d522e5 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 4f84705b..2c523ee2 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 fb6cdf75..9c6f3652 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 5ed78846..a5a2c597 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 8a9e4316..00000000
--- 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 6a18a054..c87f1071 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 057818a8..37f8df7e 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 5c6ea998..8d5f0ffb 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 e4002977..7cf97a15 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 794758e2..099eae45 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 76c75a72..c7d0a397 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 cf17aa22..8467375e 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 620b15db..28cbb7fe 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 9a2db0b2..8e5e7bb5 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 390e600d..5382dcb0 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 15479d56..1dc05961 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 14696e4c..53557077 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 c7268d46..30095be7 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 bddbdc6d..51027d19 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 afc41ad9..8eb47e2f 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 bf8c8331..97b139d9 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 3aeed02c..de0c631b 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 6e1f9edf..70265bd4 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 6ca7a9f6..e0e4742d 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 2eb517f3..ba0e6576 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 94e7b638..32dc1e4f 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 87aee482..64a91fd4 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 b584b732..ff5a83b3 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 b88e90ee..a84249ae 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 4f6a5085..6eaed993 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 f6cc4eac..b0d779f1 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 11c25770..ada2b800 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 cf60d196..a68bd3c8 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 726459d9..48041f2a 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 b5ada2cb..56bf4229 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 8b7306a9..b40a50ae 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 3eb7ca3c..2bffb7f0 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 1db53bcd..3f78b83b 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 a5b8a27c..1a032df9 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 95b1d68d..90076816 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 438fce32..f8815582 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 8d7bf168..63ddd57a 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 c08f8a4f..acf716ae 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 5baefbca..d9bbf7e0 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 febaf5a9..8ffa68a2 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 46685c4c..9300f832 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 057aa0fc..331c7624 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 c8a64d59..2eaf8bdb 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 eaf1d66f..2dc8c49c 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 ace48762..93eac38e 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 684cb246..d0934509 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 df39e042..eea4e528 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 83eeee15..0167eb6c 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 fc1c82f2..87a956d8 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 9dc33489..5672c36f 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 5aad23b1..c3d668a5 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 67c0ecc2..5f6d3455 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 f8488a65..c202968f 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 4142b02e..5904a0c1 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 eb7b5eee..b0d15a16 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 4029ae5d..75334c11 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 d531fb31..0658d932 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 f7ddb9e2..a9dac865 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 10b0ea84..f40675b5 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 d1e1de36..d30179aa 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 dda7d991..399332b5 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 689f8b50..d2688eec 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 9acbb95f..c9cebfca 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 436296b3..9b52f897 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 92e9a283..06f82bb9 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 75ef2387..ab0c9768 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 84ebe777..3a763793 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 6371ac37..f636c866 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 bd851586..788b0fb7 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 872041b5..7c9aac40 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 1577f418..87301e4f 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 852ed168..651e7773 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 3185e3ba..fc14904e 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 8d14b9f5..e2defe0e 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 2dfb9845..1c26ccee 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 2e131b03..9c35fddc 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 d8efbb5c..a179eb65 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 c889ddb3..26bd0967 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 8bdf6e1f..0918aa91 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 022f3fe4..3797f3e5 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 12ac8a6b..68bc3170 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 de7f056e..1eca7090 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 cf4e3e78..582d52c9 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 7d1b77dc..4a5f8a00 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 17d0fc48..3609893b 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 f056c64a..55cccaef 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 f4dd8330..77d2d132 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 66142652..2a0802aa 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 9866b03c..910606e3 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 2933f997..b579b036 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 d395af2e..41922c7d 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 e1e5d6b3..383ba7e8 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 b35f136a..fb30eb75 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 351a6b7c..5819589d 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 205a45a0..89bfd506 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 2d1f92b0..492f5601 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 20884626..0ee4e8d4 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 ab9ea44f..900cb7fb 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 4c45597c..0c8eed96 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 e5b585c8..baea4aa1 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 24ff666c..41770333 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 1e77b207..0f97a055 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 5d325968..0b82f19c 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 c69fab7a..79a9b67a 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 a7416fb4..4ad0f702 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 d33939b7..80861e3f 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 cac4c441..dbe03d85 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 a9ce70dd..eb4c215b 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 2da4240b..3c1d87e1 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 4422162a..6a5f0855 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 2a6196dc..5c66e254 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 7b659990..ca334df2 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 449e2847..92b393b2 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 2787ae4c..8a80bd20 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 f2533a3e..60e1b1c6 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 1f9cc452..e8810b7a 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 2bca31c2..ce595bab 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 572b6a3e..13f5bf1c 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 db3d62ff..591efcfb 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 907a121c..6c7df074 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 c0c46187..837d5438 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 53a61645..be072f55 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 39c2c447..28aa6f1f 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 0750838c..7e440e6e 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 cc554fa7..dc4f7e0d 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 24f8c5f8..b7a42f75 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 f62d2b96..4e1bbb06 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 2445fcc6..c917535e 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 ebf148ac..16170997 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 75778265..72475173 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 4f5425fa..d810cdbd 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 bcc2a276..e1461ae0 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 1b7573b5..6eae566e 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 0d916e38..48ceb6c0 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 bc5a1f84..4a64b39d 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 c7435bba..2d1c3d42 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 6c9ef36d..2fe0cb60 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 47ed1bc9..95304a57 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 32e2d4a4..41fdf33d 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 09c8b748..292b4623 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 30d51b4d..0f5e205d 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 c5469bfe..c5196bf1 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 7023ec8c..8fc0d299 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 76fecce4..a7f4e0ae 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 9c724941..d8320710 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 7cc31e04..cc804ea5 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 d7c23806..ff746cc0 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 d9906a49..ee9b70a3 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 86bfc347..b4bc1e8c 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 f31a2c91..3d38c70a 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 b6a0eb98..5332056e 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 add79c34..534fa3d9 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 8e6e3232..f9c99d9e 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 f8ddeab0..b15a9da1 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 897417b1..39874966 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 d4a9bb83..11e510aa 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 c4c59c0a..ff6a2e15 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 7e2b3185..f3bbfae8 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 29c197f2..d443d57f 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 157b92e3..665a818e 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 5abbc835..5aad6080 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 fe245bbb..02a56416 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 86942535..18c59a16 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 4bc3e0db..7851687f 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 f0dc7768..c12cfc59 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 780e1014..469cfac3 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 9bf7a2e3..365fae1b 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 cc3ceb0e..cc31537c 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 e090cf5f..3a0dc37e 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 62d5eb71..96a51fa0 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 3e3f1619..fd8dcb02 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 7f3e4235..6da5da59 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 eeec9b0c..dc5190be 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 cb360d51..30545502 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 cd5a1826..2882c29d 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 95fb041f..55ff2f5f 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 f0136aec..701f1759 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 203f53f7..1a8f1cdf 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 ff91cf5a..c42267b5 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 e7821391..c388c780 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 c653ad42..cf75cb25 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 99af5f09..ef99f6f2 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 6ac41393..ea93ce5a 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 f0e81827..37f821af 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 9459f331..530e0d89 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 f209e5fd..481615b7 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 7b8b3001..1ea91880 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 6052f99f..e27acf25 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 08bba7ce..48a54bad 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 0bdcfa68..02370030 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 ab9e2fdb..aca010df 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 1e4c827b..4fa19e41 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 4a9513f7..b488eeb5 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 23bc0c1e..9e9e5fa8 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 bf4c62e3..564725b3 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 080fcfe4..16471354 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 a57db828..af57b5d1 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 3ade18e9..ddfd93af 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 63b17f3e..3345c47c 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 cf1a9998..17b38857 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 5a04981e..70523782 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 a1b930bb..d5bc7b20 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 693376c7..fbee386d 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 14d60a26..207cccaf 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 1b9a286e..9aa65961 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 7f874f23..53e27e15 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 bd0ecb1e..f6d83ac1 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 94872df3..3ade4531 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 aa861511..ad40a712 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 3575fd98..257a0df4 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 c70a0ce8..63bf1f98 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 9e656ed0..c46a46d8 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 eea63619..5e7f33df 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 93ee2af7..ffec309a 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 bc169f38..9aa3f10e 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 9ecac5a2..2486cf03 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 22d012eb..6ad3d166 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 a718646b..6a0afdf8 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 253dbe5b..0f60e7e1 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 2ab45ddb..e2c7befd 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 f9e768a7..ef89dd7c 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 0bdd9c82..4bab54a7 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 6f3dbb20..64b0a64a 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;
+}
-- 
GitLab