From 88131c5413a2f0aa0500d01e4d63af64190c38a2 Mon Sep 17 00:00:00 2001
From: Shon Ferguson <shonferg@users.sourceforge.net>
Date: Mon, 29 May 2006 02:43:45 +0000
Subject: [PATCH] Fixed a bunch of bugs trying to get Niflyze to work.

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

diff --git a/niflib.cpp b/niflib.cpp
index cbc4a781..3b2aec29 100644
--- a/niflib.cpp
+++ b/niflib.cpp
@@ -304,9 +304,18 @@ vector<NiObjectRef> ReadNifList( istream & in ) {
 	if ( ! in.eof() )
 		throw runtime_error("End of file not reached.  This NIF may be corrupt or improperly supported.");
 		
+	cout << "Link Stack:" << endl;
+	list<uint>::iterator it;
+	for ( it = link_stack.begin(); it != link_stack.end(); ++it ) {
+		cout << *it << endl;
+	}
+	
+	
+	cout << "Fixing Links:"  << endl;
 	//--Now that all blocks are read, go back and fix the links--//
 	for (uint i = 0; i < blocks.size(); ++i) {
-
+		
+		cout << blocks[i]->GetType().GetTypeName() << endl;
 		//Fix links & other pre-processing
 		blocks[i]->FixLinks( blocks, link_stack, version );
 	}
diff --git a/obj/ABSplineCompInterpolator.cpp b/obj/ABSplineCompInterpolator.cpp
index 4d91c6b2..c54a5997 100644
--- a/obj/ABSplineCompInterpolator.cpp
+++ b/obj/ABSplineCompInterpolator.cpp
@@ -10,7 +10,7 @@ ABSplineCompInterpolator::ABSplineCompInterpolator() A_B_SPLINE_COMP_INTERPOLATO
 
 ABSplineCompInterpolator::~ABSplineCompInterpolator() {}
 
-void ABSplineCompInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void ABSplineCompInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_B_SPLINE_COMP_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string ABSplineCompInterpolator::asString( bool verbose ) const {
 	A_B_SPLINE_COMP_INTERPOLATOR_STRING
 }
 
-void ABSplineCompInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void ABSplineCompInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_B_SPLINE_COMP_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/ABSplineCompInterpolator.h b/obj/ABSplineCompInterpolator.h
index 89ac838b..e86a1b5a 100644
--- a/obj/ABSplineCompInterpolator.h
+++ b/obj/ABSplineCompInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~ABSplineCompInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_B_SPLINE_COMP_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/ABlendInterpolator.cpp b/obj/ABlendInterpolator.cpp
index 50c424ae..f2821854 100644
--- a/obj/ABlendInterpolator.cpp
+++ b/obj/ABlendInterpolator.cpp
@@ -10,7 +10,7 @@ ABlendInterpolator::ABlendInterpolator() A_BLEND_INTERPOLATOR_CONSTRUCT {}
 
 ABlendInterpolator::~ABlendInterpolator() {}
 
-void ABlendInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void ABlendInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_BLEND_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string ABlendInterpolator::asString( bool verbose ) const {
 	A_BLEND_INTERPOLATOR_STRING
 }
 
-void ABlendInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void ABlendInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_BLEND_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/ABlendInterpolator.h b/obj/ABlendInterpolator.h
index af21d152..9868386f 100644
--- a/obj/ABlendInterpolator.h
+++ b/obj/ABlendInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~ABlendInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_BLEND_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/ABoneLODController.cpp b/obj/ABoneLODController.cpp
index 1cb0b6e6..428762c9 100644
--- a/obj/ABoneLODController.cpp
+++ b/obj/ABoneLODController.cpp
@@ -11,7 +11,7 @@ ABoneLODController::ABoneLODController() A_BONE_L_O_D_CONTROLLER_CONSTRUCT {}
 
 ABoneLODController::~ABoneLODController() {}
 
-void ABoneLODController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void ABoneLODController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_BONE_L_O_D_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string ABoneLODController::asString( bool verbose ) const {
 	A_BONE_L_O_D_CONTROLLER_STRING
 }
 
-void ABoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void ABoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/ABoneLODController.h b/obj/ABoneLODController.h
index 81017562..d3bf71e4 100644
--- a/obj/ABoneLODController.h
+++ b/obj/ABoneLODController.h
@@ -20,10 +20,11 @@ public:
 	~ABoneLODController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_BONE_L_O_D_CONTROLLER_MEMBERS
 };
diff --git a/obj/AInterpolator.cpp b/obj/AInterpolator.cpp
index 13d6d197..0c39aa84 100644
--- a/obj/AInterpolator.cpp
+++ b/obj/AInterpolator.cpp
@@ -10,7 +10,7 @@ AInterpolator::AInterpolator() A_INTERPOLATOR_CONSTRUCT {}
 
 AInterpolator::~AInterpolator() {}
 
-void AInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string AInterpolator::asString( bool verbose ) const {
 	A_INTERPOLATOR_STRING
 }
 
-void AInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/AInterpolator.h b/obj/AInterpolator.h
index 8a9c3b96..bba585ca 100644
--- a/obj/AInterpolator.h
+++ b/obj/AInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~AInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/AKeyedData.cpp b/obj/AKeyedData.cpp
index f8e646d7..1842b010 100644
--- a/obj/AKeyedData.cpp
+++ b/obj/AKeyedData.cpp
@@ -10,7 +10,7 @@ AKeyedData::AKeyedData() A_KEYED_DATA_CONSTRUCT {}
 
 AKeyedData::~AKeyedData() {}
 
-void AKeyedData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AKeyedData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_KEYED_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string AKeyedData::asString( bool verbose ) const {
 	A_KEYED_DATA_STRING
 }
 
-void AKeyedData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AKeyedData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_KEYED_DATA_FIXLINKS
 }
 
diff --git a/obj/AKeyedData.h b/obj/AKeyedData.h
index d0fea382..9e8d853b 100644
--- a/obj/AKeyedData.h
+++ b/obj/AKeyedData.h
@@ -20,10 +20,11 @@ public:
 	~AKeyedData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_KEYED_DATA_MEMBERS
 };
diff --git a/obj/APSysCtlr.cpp b/obj/APSysCtlr.cpp
index 66bb3d2c..7d9fef2f 100644
--- a/obj/APSysCtlr.cpp
+++ b/obj/APSysCtlr.cpp
@@ -10,7 +10,7 @@ APSysCtlr::APSysCtlr() A_P_SYS_CTLR_CONSTRUCT {}
 
 APSysCtlr::~APSysCtlr() {}
 
-void APSysCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string APSysCtlr::asString( bool verbose ) const {
 	A_P_SYS_CTLR_STRING
 }
 
-void APSysCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_CTLR_FIXLINKS
 }
 
diff --git a/obj/APSysCtlr.h b/obj/APSysCtlr.h
index e3b5b064..2571c5b1 100644
--- a/obj/APSysCtlr.h
+++ b/obj/APSysCtlr.h
@@ -20,10 +20,11 @@ public:
 	~APSysCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_CTLR_MEMBERS
 };
diff --git a/obj/APSysData.cpp b/obj/APSysData.cpp
index 28a30225..a236847a 100644
--- a/obj/APSysData.cpp
+++ b/obj/APSysData.cpp
@@ -14,7 +14,7 @@ void APSysData::Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned in
 	A_P_SYS_DATA_WRITE
 }
 
-void APSysData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_DATA_READ
 }
 
@@ -22,6 +22,6 @@ string APSysData::asString( bool verbose ) const {
 	A_P_SYS_DATA_STRING
 }
 
-void APSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_DATA_FIXLINKS
 }
diff --git a/obj/APSysData.h b/obj/APSysData.h
index 23ada367..ea9614bc 100644
--- a/obj/APSysData.h
+++ b/obj/APSysData.h
@@ -20,10 +20,11 @@ public:
 	~APSysData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_DATA_MEMBERS
 };
diff --git a/obj/APSysEmitter.cpp b/obj/APSysEmitter.cpp
index 323b8aa2..61b4fb8a 100644
--- a/obj/APSysEmitter.cpp
+++ b/obj/APSysEmitter.cpp
@@ -10,7 +10,7 @@ APSysEmitter::APSysEmitter() A_P_SYS_EMITTER_CONSTRUCT {}
 
 APSysEmitter::~APSysEmitter() {}
 
-void APSysEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string APSysEmitter::asString( bool verbose ) const {
 	A_P_SYS_EMITTER_STRING
 }
 
-void APSysEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_EMITTER_FIXLINKS
 }
 
diff --git a/obj/APSysEmitter.h b/obj/APSysEmitter.h
index 191f63c3..7e23035a 100644
--- a/obj/APSysEmitter.h
+++ b/obj/APSysEmitter.h
@@ -20,10 +20,11 @@ public:
 	~APSysEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_EMITTER_MEMBERS
 };
diff --git a/obj/APSysModifier.cpp b/obj/APSysModifier.cpp
index eb698c6a..45cd7d2f 100644
--- a/obj/APSysModifier.cpp
+++ b/obj/APSysModifier.cpp
@@ -11,7 +11,7 @@ APSysModifier::APSysModifier() A_P_SYS_MODIFIER_CONSTRUCT {}
 
 APSysModifier::~APSysModifier() {}
 
-void APSysModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string APSysModifier::asString( bool verbose ) const {
 	A_P_SYS_MODIFIER_STRING
 }
 
-void APSysModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/APSysModifier.h b/obj/APSysModifier.h
index 0f1699f3..9eeef6a0 100644
--- a/obj/APSysModifier.h
+++ b/obj/APSysModifier.h
@@ -20,10 +20,11 @@ public:
 	~APSysModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_MODIFIER_MEMBERS
 };
diff --git a/obj/APSysVolumeEmitter.cpp b/obj/APSysVolumeEmitter.cpp
index 63d53b3b..200601e4 100644
--- a/obj/APSysVolumeEmitter.cpp
+++ b/obj/APSysVolumeEmitter.cpp
@@ -11,7 +11,7 @@ APSysVolumeEmitter::APSysVolumeEmitter() A_P_SYS_VOLUME_EMITTER_CONSTRUCT {}
 
 APSysVolumeEmitter::~APSysVolumeEmitter() {}
 
-void APSysVolumeEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void APSysVolumeEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_VOLUME_EMITTER_READ
 }
 
@@ -23,7 +23,7 @@ string APSysVolumeEmitter::asString( bool verbose ) const {
 	A_P_SYS_VOLUME_EMITTER_STRING
 }
 
-void APSysVolumeEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void APSysVolumeEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_P_SYS_VOLUME_EMITTER_FIXLINKS
 }
 
diff --git a/obj/APSysVolumeEmitter.h b/obj/APSysVolumeEmitter.h
index 93862cf2..0b96aed7 100644
--- a/obj/APSysVolumeEmitter.h
+++ b/obj/APSysVolumeEmitter.h
@@ -20,10 +20,11 @@ public:
 	~APSysVolumeEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_P_SYS_VOLUME_EMITTER_MEMBERS
 };
diff --git a/obj/AParticleModifier.cpp b/obj/AParticleModifier.cpp
index 6991be9e..093de45b 100644
--- a/obj/AParticleModifier.cpp
+++ b/obj/AParticleModifier.cpp
@@ -10,7 +10,7 @@ AParticleModifier::AParticleModifier() A_PARTICLE_MODIFIER_CONSTRUCT {}
 
 AParticleModifier::~AParticleModifier() {}
 
-void AParticleModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AParticleModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	A_PARTICLE_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string AParticleModifier::asString( bool verbose ) const {
 	A_PARTICLE_MODIFIER_STRING
 }
 
-void AParticleModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AParticleModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	A_PARTICLE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/AParticleModifier.h b/obj/AParticleModifier.h
index 19f63fd9..9b420992 100644
--- a/obj/AParticleModifier.h
+++ b/obj/AParticleModifier.h
@@ -20,10 +20,11 @@ public:
 	~AParticleModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	A_PARTICLE_MODIFIER_MEMBERS
 };
diff --git a/obj/AbhkConstraint.cpp b/obj/AbhkConstraint.cpp
index c4755c6e..cbdcd829 100644
--- a/obj/AbhkConstraint.cpp
+++ b/obj/AbhkConstraint.cpp
@@ -11,7 +11,7 @@ AbhkConstraint::AbhkConstraint() ABHK_CONSTRAINT_CONSTRUCT {}
 
 AbhkConstraint::~AbhkConstraint() {}
 
-void AbhkConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AbhkConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ABHK_CONSTRAINT_READ
 }
 
@@ -23,7 +23,7 @@ string AbhkConstraint::asString( bool verbose ) const {
 	ABHK_CONSTRAINT_STRING
 }
 
-void AbhkConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AbhkConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ABHK_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/AbhkConstraint.h b/obj/AbhkConstraint.h
index 0343c669..bef5385a 100644
--- a/obj/AbhkConstraint.h
+++ b/obj/AbhkConstraint.h
@@ -20,10 +20,11 @@ public:
 	~AbhkConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ABHK_CONSTRAINT_MEMBERS
 };
diff --git a/obj/AbhkRagdollConstraint.cpp b/obj/AbhkRagdollConstraint.cpp
index 22c86658..9035893c 100644
--- a/obj/AbhkRagdollConstraint.cpp
+++ b/obj/AbhkRagdollConstraint.cpp
@@ -10,7 +10,7 @@ AbhkRagdollConstraint::AbhkRagdollConstraint() ABHK_RAGDOLL_CONSTRAINT_CONSTRUCT
 
 AbhkRagdollConstraint::~AbhkRagdollConstraint() {}
 
-void AbhkRagdollConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AbhkRagdollConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ABHK_RAGDOLL_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string AbhkRagdollConstraint::asString( bool verbose ) const {
 	ABHK_RAGDOLL_CONSTRAINT_STRING
 }
 
-void AbhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AbhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ABHK_RAGDOLL_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/AbhkRagdollConstraint.h b/obj/AbhkRagdollConstraint.h
index df97b80e..a9dd2bfc 100644
--- a/obj/AbhkRagdollConstraint.h
+++ b/obj/AbhkRagdollConstraint.h
@@ -20,10 +20,11 @@ public:
 	~AbhkRagdollConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ABHK_RAGDOLL_CONSTRAINT_MEMBERS
 };
diff --git a/obj/AbhkShapeCollection.cpp b/obj/AbhkShapeCollection.cpp
index bf1a6124..31cee5a8 100644
--- a/obj/AbhkShapeCollection.cpp
+++ b/obj/AbhkShapeCollection.cpp
@@ -10,7 +10,7 @@ AbhkShapeCollection::AbhkShapeCollection() ABHK_SHAPE_COLLECTION_CONSTRUCT {}
 
 AbhkShapeCollection::~AbhkShapeCollection() {}
 
-void AbhkShapeCollection::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AbhkShapeCollection::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ABHK_SHAPE_COLLECTION_READ
 }
 
@@ -22,7 +22,7 @@ string AbhkShapeCollection::asString( bool verbose ) const {
 	ABHK_SHAPE_COLLECTION_STRING
 }
 
-void AbhkShapeCollection::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AbhkShapeCollection::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ABHK_SHAPE_COLLECTION_FIXLINKS
 }
 
diff --git a/obj/AbhkShapeCollection.h b/obj/AbhkShapeCollection.h
index 82b4690c..964c3cbc 100644
--- a/obj/AbhkShapeCollection.h
+++ b/obj/AbhkShapeCollection.h
@@ -20,10 +20,11 @@ public:
 	~AbhkShapeCollection();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ABHK_SHAPE_COLLECTION_MEMBERS
 };
diff --git a/obj/AvoidNode.cpp b/obj/AvoidNode.cpp
index 5547abe0..40c272d6 100644
--- a/obj/AvoidNode.cpp
+++ b/obj/AvoidNode.cpp
@@ -10,7 +10,7 @@ AvoidNode::AvoidNode() AVOID_NODE_CONSTRUCT {}
 
 AvoidNode::~AvoidNode() {}
 
-void AvoidNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void AvoidNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	AVOID_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string AvoidNode::asString( bool verbose ) const {
 	AVOID_NODE_STRING
 }
 
-void AvoidNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void AvoidNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	AVOID_NODE_FIXLINKS
 }
 
diff --git a/obj/AvoidNode.h b/obj/AvoidNode.h
index 8e38a7ec..a191a1cd 100644
--- a/obj/AvoidNode.h
+++ b/obj/AvoidNode.h
@@ -20,10 +20,11 @@ public:
 	~AvoidNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	AVOID_NODE_MEMBERS
 };
diff --git a/obj/BSBound.cpp b/obj/BSBound.cpp
index 2282a5f8..7f59897b 100644
--- a/obj/BSBound.cpp
+++ b/obj/BSBound.cpp
@@ -10,7 +10,7 @@ BSBound::BSBound() B_S_BOUND_CONSTRUCT {}
 
 BSBound::~BSBound() {}
 
-void BSBound::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSBound::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_BOUND_READ
 }
 
@@ -22,7 +22,7 @@ string BSBound::asString( bool verbose ) const {
 	B_S_BOUND_STRING
 }
 
-void BSBound::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSBound::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_BOUND_FIXLINKS
 }
 
diff --git a/obj/BSBound.h b/obj/BSBound.h
index fcc1d2d2..decf637f 100644
--- a/obj/BSBound.h
+++ b/obj/BSBound.h
@@ -20,10 +20,11 @@ public:
 	~BSBound();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_BOUND_MEMBERS
 };
diff --git a/obj/BSFurnitureMarker.cpp b/obj/BSFurnitureMarker.cpp
index 1db2b253..3faf7dd0 100644
--- a/obj/BSFurnitureMarker.cpp
+++ b/obj/BSFurnitureMarker.cpp
@@ -10,7 +10,7 @@ BSFurnitureMarker::BSFurnitureMarker() B_S_FURNITURE_MARKER_CONSTRUCT {}
 
 BSFurnitureMarker::~BSFurnitureMarker() {}
 
-void BSFurnitureMarker::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSFurnitureMarker::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_FURNITURE_MARKER_READ
 }
 
@@ -22,7 +22,7 @@ string BSFurnitureMarker::asString( bool verbose ) const {
 	B_S_FURNITURE_MARKER_STRING
 }
 
-void BSFurnitureMarker::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSFurnitureMarker::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_FURNITURE_MARKER_FIXLINKS
 }
 
diff --git a/obj/BSFurnitureMarker.h b/obj/BSFurnitureMarker.h
index bd01295b..9b028686 100644
--- a/obj/BSFurnitureMarker.h
+++ b/obj/BSFurnitureMarker.h
@@ -20,10 +20,11 @@ public:
 	~BSFurnitureMarker();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_FURNITURE_MARKER_MEMBERS
 };
diff --git a/obj/BSKeyframeController.cpp b/obj/BSKeyframeController.cpp
index 8fae6700..161a4b73 100644
--- a/obj/BSKeyframeController.cpp
+++ b/obj/BSKeyframeController.cpp
@@ -11,7 +11,7 @@ BSKeyframeController::BSKeyframeController() B_S_KEYFRAME_CONTROLLER_CONSTRUCT {
 
 BSKeyframeController::~BSKeyframeController() {}
 
-void BSKeyframeController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSKeyframeController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_KEYFRAME_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string BSKeyframeController::asString( bool verbose ) const {
 	B_S_KEYFRAME_CONTROLLER_STRING
 }
 
-void BSKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_KEYFRAME_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/BSKeyframeController.h b/obj/BSKeyframeController.h
index 88b80a7d..6334869d 100644
--- a/obj/BSKeyframeController.h
+++ b/obj/BSKeyframeController.h
@@ -20,10 +20,11 @@ public:
 	~BSKeyframeController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_KEYFRAME_CONTROLLER_MEMBERS
 };
diff --git a/obj/BSPSysArrayEmitter.cpp b/obj/BSPSysArrayEmitter.cpp
index 13cf57e3..478485a1 100644
--- a/obj/BSPSysArrayEmitter.cpp
+++ b/obj/BSPSysArrayEmitter.cpp
@@ -10,7 +10,7 @@ BSPSysArrayEmitter::BSPSysArrayEmitter() B_S_P_SYS_ARRAY_EMITTER_CONSTRUCT {}
 
 BSPSysArrayEmitter::~BSPSysArrayEmitter() {}
 
-void BSPSysArrayEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSPSysArrayEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_P_SYS_ARRAY_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string BSPSysArrayEmitter::asString( bool verbose ) const {
 	B_S_P_SYS_ARRAY_EMITTER_STRING
 }
 
-void BSPSysArrayEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSPSysArrayEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_P_SYS_ARRAY_EMITTER_FIXLINKS
 }
 
diff --git a/obj/BSPSysArrayEmitter.h b/obj/BSPSysArrayEmitter.h
index 7c2d44b2..90991ce1 100644
--- a/obj/BSPSysArrayEmitter.h
+++ b/obj/BSPSysArrayEmitter.h
@@ -20,10 +20,11 @@ public:
 	~BSPSysArrayEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_P_SYS_ARRAY_EMITTER_MEMBERS
 };
diff --git a/obj/BSParentVelocityModifier.cpp b/obj/BSParentVelocityModifier.cpp
index 98f7bdcb..fe6543cc 100644
--- a/obj/BSParentVelocityModifier.cpp
+++ b/obj/BSParentVelocityModifier.cpp
@@ -10,7 +10,7 @@ BSParentVelocityModifier::BSParentVelocityModifier() B_S_PARENT_VELOCITY_MODIFIE
 
 BSParentVelocityModifier::~BSParentVelocityModifier() {}
 
-void BSParentVelocityModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSParentVelocityModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_PARENT_VELOCITY_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string BSParentVelocityModifier::asString( bool verbose ) const {
 	B_S_PARENT_VELOCITY_MODIFIER_STRING
 }
 
-void BSParentVelocityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSParentVelocityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_PARENT_VELOCITY_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/BSParentVelocityModifier.h b/obj/BSParentVelocityModifier.h
index 9ae14906..7af3ca64 100644
--- a/obj/BSParentVelocityModifier.h
+++ b/obj/BSParentVelocityModifier.h
@@ -20,10 +20,11 @@ public:
 	~BSParentVelocityModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_PARENT_VELOCITY_MODIFIER_MEMBERS
 };
diff --git a/obj/BSXFlags.cpp b/obj/BSXFlags.cpp
index 29f7c4c4..dc61e9cf 100644
--- a/obj/BSXFlags.cpp
+++ b/obj/BSXFlags.cpp
@@ -10,7 +10,7 @@ BSXFlags::BSXFlags() B_S_X_FLAGS_CONSTRUCT {}
 
 BSXFlags::~BSXFlags() {}
 
-void BSXFlags::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void BSXFlags::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	B_S_X_FLAGS_READ
 }
 
@@ -22,7 +22,7 @@ string BSXFlags::asString( bool verbose ) const {
 	B_S_X_FLAGS_STRING
 }
 
-void BSXFlags::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void BSXFlags::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	B_S_X_FLAGS_FIXLINKS
 }
 
diff --git a/obj/BSXFlags.h b/obj/BSXFlags.h
index 24a78ad7..df2e9a2c 100644
--- a/obj/BSXFlags.h
+++ b/obj/BSXFlags.h
@@ -20,10 +20,11 @@ public:
 	~BSXFlags();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	B_S_X_FLAGS_MEMBERS
 };
diff --git a/obj/FxButton.cpp b/obj/FxButton.cpp
index 81cd656e..4d0ffe34 100644
--- a/obj/FxButton.cpp
+++ b/obj/FxButton.cpp
@@ -10,7 +10,7 @@ FxButton::FxButton() FX_BUTTON_CONSTRUCT {}
 
 FxButton::~FxButton() {}
 
-void FxButton::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void FxButton::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	FX_BUTTON_READ
 }
 
@@ -22,7 +22,7 @@ string FxButton::asString( bool verbose ) const {
 	FX_BUTTON_STRING
 }
 
-void FxButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void FxButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	FX_BUTTON_FIXLINKS
 }
 
diff --git a/obj/FxButton.h b/obj/FxButton.h
index cbbeaf19..ad99d6f1 100644
--- a/obj/FxButton.h
+++ b/obj/FxButton.h
@@ -20,10 +20,11 @@ public:
 	~FxButton();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	FX_BUTTON_MEMBERS
 };
diff --git a/obj/FxRadioButton.cpp b/obj/FxRadioButton.cpp
index b94dd648..3cca3cec 100644
--- a/obj/FxRadioButton.cpp
+++ b/obj/FxRadioButton.cpp
@@ -10,7 +10,7 @@ FxRadioButton::FxRadioButton() FX_RADIO_BUTTON_CONSTRUCT {}
 
 FxRadioButton::~FxRadioButton() {}
 
-void FxRadioButton::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void FxRadioButton::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	FX_RADIO_BUTTON_READ
 }
 
@@ -22,7 +22,7 @@ string FxRadioButton::asString( bool verbose ) const {
 	FX_RADIO_BUTTON_STRING
 }
 
-void FxRadioButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void FxRadioButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	FX_RADIO_BUTTON_FIXLINKS
 }
 
diff --git a/obj/FxRadioButton.h b/obj/FxRadioButton.h
index cd59ab39..21c4fe5a 100644
--- a/obj/FxRadioButton.h
+++ b/obj/FxRadioButton.h
@@ -20,10 +20,11 @@ public:
 	~FxRadioButton();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	FX_RADIO_BUTTON_MEMBERS
 };
diff --git a/obj/FxWidget.cpp b/obj/FxWidget.cpp
index 1a5b21f6..760d9113 100644
--- a/obj/FxWidget.cpp
+++ b/obj/FxWidget.cpp
@@ -10,7 +10,7 @@ FxWidget::FxWidget() FX_WIDGET_CONSTRUCT {}
 
 FxWidget::~FxWidget() {}
 
-void FxWidget::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void FxWidget::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	FX_WIDGET_READ
 }
 
@@ -22,7 +22,7 @@ string FxWidget::asString( bool verbose ) const {
 	FX_WIDGET_STRING
 }
 
-void FxWidget::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void FxWidget::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	FX_WIDGET_FIXLINKS
 }
 
diff --git a/obj/FxWidget.h b/obj/FxWidget.h
index 1deb5b60..f8cd7af4 100644
--- a/obj/FxWidget.h
+++ b/obj/FxWidget.h
@@ -20,10 +20,11 @@ public:
 	~FxWidget();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	FX_WIDGET_MEMBERS
 };
diff --git a/obj/NiAVObject.cpp b/obj/NiAVObject.cpp
index f3f0f554..66f55392 100644
--- a/obj/NiAVObject.cpp
+++ b/obj/NiAVObject.cpp
@@ -13,7 +13,7 @@ NiAVObject::NiAVObject() NI_A_V_OBJECT_CONSTRUCT {}
 
 NiAVObject::~NiAVObject() {}
 
-void NiAVObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAVObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_A_V_OBJECT_READ
 }
 
@@ -25,7 +25,7 @@ string NiAVObject::asString( bool verbose ) const {
 	NI_A_V_OBJECT_STRING
 }
 
-void NiAVObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAVObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_A_V_OBJECT_FIXLINKS
 }
 
diff --git a/obj/NiAVObject.h b/obj/NiAVObject.h
index ff7c3e67..de87ed1a 100644
--- a/obj/NiAVObject.h
+++ b/obj/NiAVObject.h
@@ -20,10 +20,11 @@ public:
 	~NiAVObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 
 	//TODO: list of NiProperty pointers.  Need functions to add/remove.
 	//TODO:  Bounding Box.  What to do with newer files that have a link?  Wrap this in a function and translate?
diff --git a/obj/NiAlphaController.cpp b/obj/NiAlphaController.cpp
index 4e6e73ec..f062db5f 100644
--- a/obj/NiAlphaController.cpp
+++ b/obj/NiAlphaController.cpp
@@ -11,7 +11,7 @@ NiAlphaController::NiAlphaController() NI_ALPHA_CONTROLLER_CONSTRUCT {}
 
 NiAlphaController::~NiAlphaController() {}
 
-void NiAlphaController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAlphaController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiAlphaController::asString( bool verbose ) const {
 	NI_ALPHA_CONTROLLER_STRING
 }
 
-void NiAlphaController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAlphaController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiAlphaController.h b/obj/NiAlphaController.h
index 7d3bdd8f..ada63503 100644
--- a/obj/NiAlphaController.h
+++ b/obj/NiAlphaController.h
@@ -20,10 +20,11 @@ public:
 	~NiAlphaController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ALPHA_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiAlphaProperty.cpp b/obj/NiAlphaProperty.cpp
index 11875724..accc5659 100644
--- a/obj/NiAlphaProperty.cpp
+++ b/obj/NiAlphaProperty.cpp
@@ -10,7 +10,7 @@ NiAlphaProperty::NiAlphaProperty() NI_ALPHA_PROPERTY_CONSTRUCT {}
 
 NiAlphaProperty::~NiAlphaProperty() {}
 
-void NiAlphaProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAlphaProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiAlphaProperty::asString( bool verbose ) const {
 	NI_ALPHA_PROPERTY_STRING
 }
 
-void NiAlphaProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAlphaProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ALPHA_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiAlphaProperty.h b/obj/NiAlphaProperty.h
index 4fa3b556..ab48fd3f 100644
--- a/obj/NiAlphaProperty.h
+++ b/obj/NiAlphaProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiAlphaProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ALPHA_PROPERTY_MEMBERS
 };
diff --git a/obj/NiAmbientLight.cpp b/obj/NiAmbientLight.cpp
index e2cb2532..7893a148 100644
--- a/obj/NiAmbientLight.cpp
+++ b/obj/NiAmbientLight.cpp
@@ -10,7 +10,7 @@ NiAmbientLight::NiAmbientLight() NI_AMBIENT_LIGHT_CONSTRUCT {}
 
 NiAmbientLight::~NiAmbientLight() {}
 
-void NiAmbientLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAmbientLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_AMBIENT_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiAmbientLight::asString( bool verbose ) const {
 	NI_AMBIENT_LIGHT_STRING
 }
 
-void NiAmbientLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAmbientLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_AMBIENT_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiAmbientLight.h b/obj/NiAmbientLight.h
index c64e4f69..d103433d 100644
--- a/obj/NiAmbientLight.h
+++ b/obj/NiAmbientLight.h
@@ -20,10 +20,11 @@ public:
 	~NiAmbientLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_AMBIENT_LIGHT_MEMBERS
 };
diff --git a/obj/NiAutoNormalParticles.cpp b/obj/NiAutoNormalParticles.cpp
index 9a337111..e45aff16 100644
--- a/obj/NiAutoNormalParticles.cpp
+++ b/obj/NiAutoNormalParticles.cpp
@@ -10,7 +10,7 @@ NiAutoNormalParticles::NiAutoNormalParticles() NI_AUTO_NORMAL_PARTICLES_CONSTRUC
 
 NiAutoNormalParticles::~NiAutoNormalParticles() {}
 
-void NiAutoNormalParticles::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticles::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_READ
 }
 
@@ -22,7 +22,7 @@ string NiAutoNormalParticles::asString( bool verbose ) const {
 	NI_AUTO_NORMAL_PARTICLES_STRING
 }
 
-void NiAutoNormalParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_FIXLINKS
 }
 
diff --git a/obj/NiAutoNormalParticles.h b/obj/NiAutoNormalParticles.h
index 544b3e16..deaa3f62 100644
--- a/obj/NiAutoNormalParticles.h
+++ b/obj/NiAutoNormalParticles.h
@@ -20,10 +20,11 @@ public:
 	~NiAutoNormalParticles();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_AUTO_NORMAL_PARTICLES_MEMBERS
 };
diff --git a/obj/NiAutoNormalParticlesData.cpp b/obj/NiAutoNormalParticlesData.cpp
index 92991d1d..6ec779c0 100644
--- a/obj/NiAutoNormalParticlesData.cpp
+++ b/obj/NiAutoNormalParticlesData.cpp
@@ -10,7 +10,7 @@ NiAutoNormalParticlesData::NiAutoNormalParticlesData() NI_AUTO_NORMAL_PARTICLES_
 
 NiAutoNormalParticlesData::~NiAutoNormalParticlesData() {}
 
-void NiAutoNormalParticlesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticlesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiAutoNormalParticlesData::asString( bool verbose ) const {
 	NI_AUTO_NORMAL_PARTICLES_DATA_STRING
 }
 
-void NiAutoNormalParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiAutoNormalParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_AUTO_NORMAL_PARTICLES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiAutoNormalParticlesData.h b/obj/NiAutoNormalParticlesData.h
index afb2c631..eede0d39 100644
--- a/obj/NiAutoNormalParticlesData.h
+++ b/obj/NiAutoNormalParticlesData.h
@@ -20,10 +20,11 @@ public:
 	~NiAutoNormalParticlesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_AUTO_NORMAL_PARTICLES_DATA_MEMBERS
 };
diff --git a/obj/NiBSAnimationNode.cpp b/obj/NiBSAnimationNode.cpp
index 8a95334a..18d28310 100644
--- a/obj/NiBSAnimationNode.cpp
+++ b/obj/NiBSAnimationNode.cpp
@@ -10,7 +10,7 @@ NiBSAnimationNode::NiBSAnimationNode() NI_B_S_ANIMATION_NODE_CONSTRUCT {}
 
 NiBSAnimationNode::~NiBSAnimationNode() {}
 
-void NiBSAnimationNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSAnimationNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_ANIMATION_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSAnimationNode::asString( bool verbose ) const {
 	NI_B_S_ANIMATION_NODE_STRING
 }
 
-void NiBSAnimationNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSAnimationNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_ANIMATION_NODE_FIXLINKS
 }
 
diff --git a/obj/NiBSAnimationNode.h b/obj/NiBSAnimationNode.h
index a6635378..e44e58fb 100644
--- a/obj/NiBSAnimationNode.h
+++ b/obj/NiBSAnimationNode.h
@@ -20,10 +20,11 @@ public:
 	~NiBSAnimationNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_ANIMATION_NODE_MEMBERS
 };
diff --git a/obj/NiBSBoneLODController.cpp b/obj/NiBSBoneLODController.cpp
index 15523cff..61396fe3 100644
--- a/obj/NiBSBoneLODController.cpp
+++ b/obj/NiBSBoneLODController.cpp
@@ -10,7 +10,7 @@ NiBSBoneLODController::NiBSBoneLODController() NI_B_S_BONE_L_O_D_CONTROLLER_CONS
 
 NiBSBoneLODController::~NiBSBoneLODController() {}
 
-void NiBSBoneLODController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSBoneLODController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_BONE_L_O_D_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSBoneLODController::asString( bool verbose ) const {
 	NI_B_S_BONE_L_O_D_CONTROLLER_STRING
 }
 
-void NiBSBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiBSBoneLODController.h b/obj/NiBSBoneLODController.h
index e3f2b39b..1178d1f7 100644
--- a/obj/NiBSBoneLODController.h
+++ b/obj/NiBSBoneLODController.h
@@ -20,10 +20,11 @@ public:
 	~NiBSBoneLODController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_BONE_L_O_D_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiBSPArrayController.cpp b/obj/NiBSPArrayController.cpp
index e726b208..7d5dd483 100644
--- a/obj/NiBSPArrayController.cpp
+++ b/obj/NiBSPArrayController.cpp
@@ -10,7 +10,7 @@ NiBSPArrayController::NiBSPArrayController() NI_B_S_P_ARRAY_CONTROLLER_CONSTRUCT
 
 NiBSPArrayController::~NiBSPArrayController() {}
 
-void NiBSPArrayController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSPArrayController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_P_ARRAY_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSPArrayController::asString( bool verbose ) const {
 	NI_B_S_P_ARRAY_CONTROLLER_STRING
 }
 
-void NiBSPArrayController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSPArrayController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_P_ARRAY_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiBSPArrayController.h b/obj/NiBSPArrayController.h
index 3d62a36c..f9bd868b 100644
--- a/obj/NiBSPArrayController.h
+++ b/obj/NiBSPArrayController.h
@@ -20,10 +20,11 @@ public:
 	~NiBSPArrayController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_P_ARRAY_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiBSParticleNode.cpp b/obj/NiBSParticleNode.cpp
index 3b41cc38..6142006a 100644
--- a/obj/NiBSParticleNode.cpp
+++ b/obj/NiBSParticleNode.cpp
@@ -10,7 +10,7 @@ NiBSParticleNode::NiBSParticleNode() NI_B_S_PARTICLE_NODE_CONSTRUCT {}
 
 NiBSParticleNode::~NiBSParticleNode() {}
 
-void NiBSParticleNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSParticleNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_PARTICLE_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSParticleNode::asString( bool verbose ) const {
 	NI_B_S_PARTICLE_NODE_STRING
 }
 
-void NiBSParticleNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSParticleNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_S_PARTICLE_NODE_FIXLINKS
 }
 
diff --git a/obj/NiBSParticleNode.h b/obj/NiBSParticleNode.h
index 6a207453..118ec0fe 100644
--- a/obj/NiBSParticleNode.h
+++ b/obj/NiBSParticleNode.h
@@ -20,10 +20,11 @@ public:
 	~NiBSParticleNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_S_PARTICLE_NODE_MEMBERS
 };
diff --git a/obj/NiBSplineBasisData.cpp b/obj/NiBSplineBasisData.cpp
index a48c69f4..38431c2c 100644
--- a/obj/NiBSplineBasisData.cpp
+++ b/obj/NiBSplineBasisData.cpp
@@ -10,7 +10,7 @@ NiBSplineBasisData::NiBSplineBasisData() NI_B_SPLINE_BASIS_DATA_CONSTRUCT {}
 
 NiBSplineBasisData::~NiBSplineBasisData() {}
 
-void NiBSplineBasisData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineBasisData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_BASIS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSplineBasisData::asString( bool verbose ) const {
 	NI_B_SPLINE_BASIS_DATA_STRING
 }
 
-void NiBSplineBasisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineBasisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_BASIS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBSplineBasisData.h b/obj/NiBSplineBasisData.h
index fc8af33a..2fef2585 100644
--- a/obj/NiBSplineBasisData.h
+++ b/obj/NiBSplineBasisData.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineBasisData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_BASIS_DATA_MEMBERS
 };
diff --git a/obj/NiBSplineCompFloatInterpolator.cpp b/obj/NiBSplineCompFloatInterpolator.cpp
index 1680167e..b6ea194e 100644
--- a/obj/NiBSplineCompFloatInterpolator.cpp
+++ b/obj/NiBSplineCompFloatInterpolator.cpp
@@ -10,7 +10,7 @@ NiBSplineCompFloatInterpolator::NiBSplineCompFloatInterpolator() NI_B_SPLINE_COM
 
 NiBSplineCompFloatInterpolator::~NiBSplineCompFloatInterpolator() {}
 
-void NiBSplineCompFloatInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompFloatInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSplineCompFloatInterpolator::asString( bool verbose ) const {
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_STRING
 }
 
-void NiBSplineCompFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBSplineCompFloatInterpolator.h b/obj/NiBSplineCompFloatInterpolator.h
index 6d05a390..9bc6210d 100644
--- a/obj/NiBSplineCompFloatInterpolator.h
+++ b/obj/NiBSplineCompFloatInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineCompFloatInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBSplineCompPoint3Interpolator.cpp b/obj/NiBSplineCompPoint3Interpolator.cpp
index 3539a8e2..f7e868f6 100644
--- a/obj/NiBSplineCompPoint3Interpolator.cpp
+++ b/obj/NiBSplineCompPoint3Interpolator.cpp
@@ -11,7 +11,7 @@ NiBSplineCompPoint3Interpolator::NiBSplineCompPoint3Interpolator() NI_B_SPLINE_C
 
 NiBSplineCompPoint3Interpolator::~NiBSplineCompPoint3Interpolator() {}
 
-void NiBSplineCompPoint3Interpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompPoint3Interpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiBSplineCompPoint3Interpolator::asString( bool verbose ) const {
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_STRING
 }
 
-void NiBSplineCompPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBSplineCompPoint3Interpolator.h b/obj/NiBSplineCompPoint3Interpolator.h
index f3588793..8e852cc7 100644
--- a/obj/NiBSplineCompPoint3Interpolator.h
+++ b/obj/NiBSplineCompPoint3Interpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineCompPoint3Interpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBSplineCompTransformInterpolator.cpp b/obj/NiBSplineCompTransformInterpolator.cpp
index 1da29831..c36b6de1 100644
--- a/obj/NiBSplineCompTransformInterpolator.cpp
+++ b/obj/NiBSplineCompTransformInterpolator.cpp
@@ -12,7 +12,7 @@ NiBSplineCompTransformInterpolator::NiBSplineCompTransformInterpolator() NI_B_SP
 
 NiBSplineCompTransformInterpolator::~NiBSplineCompTransformInterpolator() {}
 
-void NiBSplineCompTransformInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompTransformInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_READ
 }
 
@@ -24,7 +24,7 @@ string NiBSplineCompTransformInterpolator::asString( bool verbose ) const {
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_STRING
 }
 
-void NiBSplineCompTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineCompTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBSplineCompTransformInterpolator.h b/obj/NiBSplineCompTransformInterpolator.h
index f6da6174..151fc381 100644
--- a/obj/NiBSplineCompTransformInterpolator.h
+++ b/obj/NiBSplineCompTransformInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineCompTransformInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBSplineData.cpp b/obj/NiBSplineData.cpp
index 664e4cc6..808b9821 100644
--- a/obj/NiBSplineData.cpp
+++ b/obj/NiBSplineData.cpp
@@ -10,7 +10,7 @@ NiBSplineData::NiBSplineData() NI_B_SPLINE_DATA_CONSTRUCT {}
 
 NiBSplineData::~NiBSplineData() {}
 
-void NiBSplineData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBSplineData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBSplineData::asString( bool verbose ) const {
 	NI_B_SPLINE_DATA_STRING
 }
 
-void NiBSplineData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBSplineData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_B_SPLINE_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBSplineData.h b/obj/NiBSplineData.h
index 0dded780..30fa5d81 100644
--- a/obj/NiBSplineData.h
+++ b/obj/NiBSplineData.h
@@ -20,10 +20,11 @@ public:
 	~NiBSplineData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_B_SPLINE_DATA_MEMBERS
 };
diff --git a/obj/NiBillboardNode.cpp b/obj/NiBillboardNode.cpp
index bf3fc1f4..e28e70d4 100644
--- a/obj/NiBillboardNode.cpp
+++ b/obj/NiBillboardNode.cpp
@@ -10,7 +10,7 @@ NiBillboardNode::NiBillboardNode() NI_BILLBOARD_NODE_CONSTRUCT {}
 
 NiBillboardNode::~NiBillboardNode() {}
 
-void NiBillboardNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBillboardNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BILLBOARD_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string NiBillboardNode::asString( bool verbose ) const {
 	NI_BILLBOARD_NODE_STRING
 }
 
-void NiBillboardNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBillboardNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BILLBOARD_NODE_FIXLINKS
 }
 
diff --git a/obj/NiBillboardNode.h b/obj/NiBillboardNode.h
index f089c5d5..6751c443 100644
--- a/obj/NiBillboardNode.h
+++ b/obj/NiBillboardNode.h
@@ -20,10 +20,11 @@ public:
 	~NiBillboardNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BILLBOARD_NODE_MEMBERS
 };
diff --git a/obj/NiBinaryExtraData.cpp b/obj/NiBinaryExtraData.cpp
index 37277b0c..9de23e56 100644
--- a/obj/NiBinaryExtraData.cpp
+++ b/obj/NiBinaryExtraData.cpp
@@ -10,7 +10,7 @@ NiBinaryExtraData::NiBinaryExtraData() NI_BINARY_EXTRA_DATA_CONSTRUCT {}
 
 NiBinaryExtraData::~NiBinaryExtraData() {}
 
-void NiBinaryExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBinaryExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BINARY_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBinaryExtraData::asString( bool verbose ) const {
 	NI_BINARY_EXTRA_DATA_STRING
 }
 
-void NiBinaryExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBinaryExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BINARY_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBinaryExtraData.h b/obj/NiBinaryExtraData.h
index e19bf24a..04d6b49a 100644
--- a/obj/NiBinaryExtraData.h
+++ b/obj/NiBinaryExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiBinaryExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BINARY_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiBlendBoolInterpolator.cpp b/obj/NiBlendBoolInterpolator.cpp
index 97db49b8..a87ad030 100644
--- a/obj/NiBlendBoolInterpolator.cpp
+++ b/obj/NiBlendBoolInterpolator.cpp
@@ -10,7 +10,7 @@ NiBlendBoolInterpolator::NiBlendBoolInterpolator() NI_BLEND_BOOL_INTERPOLATOR_CO
 
 NiBlendBoolInterpolator::~NiBlendBoolInterpolator() {}
 
-void NiBlendBoolInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendBoolInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_BOOL_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendBoolInterpolator::asString( bool verbose ) const {
 	NI_BLEND_BOOL_INTERPOLATOR_STRING
 }
 
-void NiBlendBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_BOOL_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendBoolInterpolator.h b/obj/NiBlendBoolInterpolator.h
index d8415a49..d47b2d67 100644
--- a/obj/NiBlendBoolInterpolator.h
+++ b/obj/NiBlendBoolInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendBoolInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_BOOL_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBlendFloatInterpolator.cpp b/obj/NiBlendFloatInterpolator.cpp
index 1af6727e..2ee83745 100644
--- a/obj/NiBlendFloatInterpolator.cpp
+++ b/obj/NiBlendFloatInterpolator.cpp
@@ -10,7 +10,7 @@ NiBlendFloatInterpolator::NiBlendFloatInterpolator() NI_BLEND_FLOAT_INTERPOLATOR
 
 NiBlendFloatInterpolator::~NiBlendFloatInterpolator() {}
 
-void NiBlendFloatInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendFloatInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_FLOAT_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendFloatInterpolator::asString( bool verbose ) const {
 	NI_BLEND_FLOAT_INTERPOLATOR_STRING
 }
 
-void NiBlendFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendFloatInterpolator.h b/obj/NiBlendFloatInterpolator.h
index ff29fa91..e9d98d85 100644
--- a/obj/NiBlendFloatInterpolator.h
+++ b/obj/NiBlendFloatInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendFloatInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_FLOAT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBlendPoint3Interpolator.cpp b/obj/NiBlendPoint3Interpolator.cpp
index bc8b9f70..c6cb473c 100644
--- a/obj/NiBlendPoint3Interpolator.cpp
+++ b/obj/NiBlendPoint3Interpolator.cpp
@@ -10,7 +10,7 @@ NiBlendPoint3Interpolator::NiBlendPoint3Interpolator() NI_BLEND_POINT3_INTERPOLA
 
 NiBlendPoint3Interpolator::~NiBlendPoint3Interpolator() {}
 
-void NiBlendPoint3Interpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendPoint3Interpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_POINT3_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendPoint3Interpolator::asString( bool verbose ) const {
 	NI_BLEND_POINT3_INTERPOLATOR_STRING
 }
 
-void NiBlendPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_POINT3_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendPoint3Interpolator.h b/obj/NiBlendPoint3Interpolator.h
index e8fa89af..9d710c76 100644
--- a/obj/NiBlendPoint3Interpolator.h
+++ b/obj/NiBlendPoint3Interpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendPoint3Interpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_POINT3_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBlendTransformInterpolator.cpp b/obj/NiBlendTransformInterpolator.cpp
index 2099089d..6e15b4ce 100644
--- a/obj/NiBlendTransformInterpolator.cpp
+++ b/obj/NiBlendTransformInterpolator.cpp
@@ -10,7 +10,7 @@ NiBlendTransformInterpolator::NiBlendTransformInterpolator() NI_BLEND_TRANSFORM_
 
 NiBlendTransformInterpolator::~NiBlendTransformInterpolator() {}
 
-void NiBlendTransformInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBlendTransformInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_TRANSFORM_INTERPOLATOR_READ
 }
 
@@ -22,7 +22,7 @@ string NiBlendTransformInterpolator::asString( bool verbose ) const {
 	NI_BLEND_TRANSFORM_INTERPOLATOR_STRING
 }
 
-void NiBlendTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBlendTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BLEND_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBlendTransformInterpolator.h b/obj/NiBlendTransformInterpolator.h
index ccc5abe0..cde28642 100644
--- a/obj/NiBlendTransformInterpolator.h
+++ b/obj/NiBlendTransformInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBlendTransformInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BLEND_TRANSFORM_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBoneLODController.cpp b/obj/NiBoneLODController.cpp
index ec92544b..44fd2fbb 100644
--- a/obj/NiBoneLODController.cpp
+++ b/obj/NiBoneLODController.cpp
@@ -12,7 +12,7 @@ NiBoneLODController::NiBoneLODController() NI_BONE_L_O_D_CONTROLLER_CONSTRUCT {}
 
 NiBoneLODController::~NiBoneLODController() {}
 
-void NiBoneLODController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoneLODController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BONE_L_O_D_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiBoneLODController::asString( bool verbose ) const {
 	NI_BONE_L_O_D_CONTROLLER_STRING
 }
 
-void NiBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiBoneLODController.h b/obj/NiBoneLODController.h
index dc42f822..eb094d45 100644
--- a/obj/NiBoneLODController.h
+++ b/obj/NiBoneLODController.h
@@ -20,10 +20,11 @@ public:
 	~NiBoneLODController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BONE_L_O_D_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiBoolData.cpp b/obj/NiBoolData.cpp
index 5efbb26e..70889a8e 100644
--- a/obj/NiBoolData.cpp
+++ b/obj/NiBoolData.cpp
@@ -10,7 +10,7 @@ NiBoolData::NiBoolData() NI_BOOL_DATA_CONSTRUCT {}
 
 NiBoolData::~NiBoolData() {}
 
-void NiBoolData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoolData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBoolData::asString( bool verbose ) const {
 	NI_BOOL_DATA_STRING
 }
 
-void NiBoolData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoolData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBoolData.h b/obj/NiBoolData.h
index c7db9b5d..d2ba5e2d 100644
--- a/obj/NiBoolData.h
+++ b/obj/NiBoolData.h
@@ -20,10 +20,11 @@ public:
 	~NiBoolData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOL_DATA_MEMBERS
 };
diff --git a/obj/NiBoolInterpolator.cpp b/obj/NiBoolInterpolator.cpp
index 3db84816..8a9beaa0 100644
--- a/obj/NiBoolInterpolator.cpp
+++ b/obj/NiBoolInterpolator.cpp
@@ -11,7 +11,7 @@ NiBoolInterpolator::NiBoolInterpolator() NI_BOOL_INTERPOLATOR_CONSTRUCT {}
 
 NiBoolInterpolator::~NiBoolInterpolator() {}
 
-void NiBoolInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoolInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiBoolInterpolator::asString( bool verbose ) const {
 	NI_BOOL_INTERPOLATOR_STRING
 }
 
-void NiBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBoolInterpolator.h b/obj/NiBoolInterpolator.h
index ac5b4eb5..fef53453 100644
--- a/obj/NiBoolInterpolator.h
+++ b/obj/NiBoolInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBoolInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOL_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBoolTimelineInterpolator.cpp b/obj/NiBoolTimelineInterpolator.cpp
index e623cdda..281345d6 100644
--- a/obj/NiBoolTimelineInterpolator.cpp
+++ b/obj/NiBoolTimelineInterpolator.cpp
@@ -11,7 +11,7 @@ NiBoolTimelineInterpolator::NiBoolTimelineInterpolator() NI_BOOL_TIMELINE_INTERP
 
 NiBoolTimelineInterpolator::~NiBoolTimelineInterpolator() {}
 
-void NiBoolTimelineInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBoolTimelineInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_TIMELINE_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiBoolTimelineInterpolator::asString( bool verbose ) const {
 	NI_BOOL_TIMELINE_INTERPOLATOR_STRING
 }
 
-void NiBoolTimelineInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBoolTimelineInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOL_TIMELINE_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiBoolTimelineInterpolator.h b/obj/NiBoolTimelineInterpolator.h
index e1bd39d3..f2b59580 100644
--- a/obj/NiBoolTimelineInterpolator.h
+++ b/obj/NiBoolTimelineInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiBoolTimelineInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOL_TIMELINE_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiBooleanExtraData.cpp b/obj/NiBooleanExtraData.cpp
index 4506c3c0..dca4aebc 100644
--- a/obj/NiBooleanExtraData.cpp
+++ b/obj/NiBooleanExtraData.cpp
@@ -10,7 +10,7 @@ NiBooleanExtraData::NiBooleanExtraData() NI_BOOLEAN_EXTRA_DATA_CONSTRUCT {}
 
 NiBooleanExtraData::~NiBooleanExtraData() {}
 
-void NiBooleanExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiBooleanExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOLEAN_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiBooleanExtraData::asString( bool verbose ) const {
 	NI_BOOLEAN_EXTRA_DATA_STRING
 }
 
-void NiBooleanExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiBooleanExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_BOOLEAN_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiBooleanExtraData.h b/obj/NiBooleanExtraData.h
index edecc535..057ad1b7 100644
--- a/obj/NiBooleanExtraData.h
+++ b/obj/NiBooleanExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiBooleanExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_BOOLEAN_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiCamera.cpp b/obj/NiCamera.cpp
index 86724cf1..6b77ced4 100644
--- a/obj/NiCamera.cpp
+++ b/obj/NiCamera.cpp
@@ -10,7 +10,7 @@ NiCamera::NiCamera() NI_CAMERA_CONSTRUCT {}
 
 NiCamera::~NiCamera() {}
 
-void NiCamera::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiCamera::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_CAMERA_READ
 }
 
@@ -22,7 +22,7 @@ string NiCamera::asString( bool verbose ) const {
 	NI_CAMERA_STRING
 }
 
-void NiCamera::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiCamera::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_CAMERA_FIXLINKS
 }
 
diff --git a/obj/NiCamera.h b/obj/NiCamera.h
index 7220ebbd..7d0fd27f 100644
--- a/obj/NiCamera.h
+++ b/obj/NiCamera.h
@@ -20,10 +20,11 @@ public:
 	~NiCamera();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_CAMERA_MEMBERS
 };
diff --git a/obj/NiCollisionData.cpp b/obj/NiCollisionData.cpp
index d3b7839b..c8630bec 100644
--- a/obj/NiCollisionData.cpp
+++ b/obj/NiCollisionData.cpp
@@ -11,7 +11,7 @@ NiCollisionData::NiCollisionData() NI_COLLISION_DATA_CONSTRUCT {}
 
 NiCollisionData::~NiCollisionData() {}
 
-void NiCollisionData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiCollisionData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiCollisionData::asString( bool verbose ) const {
 	NI_COLLISION_DATA_STRING
 }
 
-void NiCollisionData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiCollisionData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_DATA_FIXLINKS
 }
 
diff --git a/obj/NiCollisionData.h b/obj/NiCollisionData.h
index 580f38c4..ab737744 100644
--- a/obj/NiCollisionData.h
+++ b/obj/NiCollisionData.h
@@ -20,10 +20,11 @@ public:
 	~NiCollisionData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_COLLISION_DATA_MEMBERS
 };
diff --git a/obj/NiCollisionObject.cpp b/obj/NiCollisionObject.cpp
index 8f2561c1..6c193ad6 100644
--- a/obj/NiCollisionObject.cpp
+++ b/obj/NiCollisionObject.cpp
@@ -10,7 +10,7 @@ NiCollisionObject::NiCollisionObject() NI_COLLISION_OBJECT_CONSTRUCT {}
 
 NiCollisionObject::~NiCollisionObject() {}
 
-void NiCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string NiCollisionObject::asString( bool verbose ) const {
 	NI_COLLISION_OBJECT_STRING
 }
 
-void NiCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/NiCollisionObject.h b/obj/NiCollisionObject.h
index 20b9cab2..4e47208a 100644
--- a/obj/NiCollisionObject.h
+++ b/obj/NiCollisionObject.h
@@ -21,10 +21,11 @@ public:
 	~NiCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	NiAVObject * Parent() const;
 private:
diff --git a/obj/NiColorData.cpp b/obj/NiColorData.cpp
index dc01ac56..b48a1963 100644
--- a/obj/NiColorData.cpp
+++ b/obj/NiColorData.cpp
@@ -10,7 +10,7 @@ NiColorData::NiColorData() NI_COLOR_DATA_CONSTRUCT {}
 
 NiColorData::~NiColorData() {}
 
-void NiColorData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiColorData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiColorData::asString( bool verbose ) const {
 	NI_COLOR_DATA_STRING
 }
 
-void NiColorData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiColorData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_DATA_FIXLINKS
 }
 
diff --git a/obj/NiColorData.h b/obj/NiColorData.h
index 7dd6804f..59775b76 100644
--- a/obj/NiColorData.h
+++ b/obj/NiColorData.h
@@ -20,10 +20,11 @@ public:
 	~NiColorData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_COLOR_DATA_MEMBERS
 };
diff --git a/obj/NiColorExtraData.cpp b/obj/NiColorExtraData.cpp
index f3947181..67f5707f 100644
--- a/obj/NiColorExtraData.cpp
+++ b/obj/NiColorExtraData.cpp
@@ -10,7 +10,7 @@ NiColorExtraData::NiColorExtraData() NI_COLOR_EXTRA_DATA_CONSTRUCT {}
 
 NiColorExtraData::~NiColorExtraData() {}
 
-void NiColorExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiColorExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiColorExtraData::asString( bool verbose ) const {
 	NI_COLOR_EXTRA_DATA_STRING
 }
 
-void NiColorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiColorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_COLOR_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiColorExtraData.h b/obj/NiColorExtraData.h
index b33cc1cc..a88d6865 100644
--- a/obj/NiColorExtraData.h
+++ b/obj/NiColorExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiColorExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_COLOR_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiControllerManager.cpp b/obj/NiControllerManager.cpp
index 7475b790..4e3974ba 100644
--- a/obj/NiControllerManager.cpp
+++ b/obj/NiControllerManager.cpp
@@ -12,7 +12,7 @@ NiControllerManager::NiControllerManager() NI_CONTROLLER_MANAGER_CONSTRUCT {}
 
 NiControllerManager::~NiControllerManager() {}
 
-void NiControllerManager::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiControllerManager::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_MANAGER_READ
 }
 
@@ -24,7 +24,7 @@ string NiControllerManager::asString( bool verbose ) const {
 	NI_CONTROLLER_MANAGER_STRING
 }
 
-void NiControllerManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiControllerManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_MANAGER_FIXLINKS
 }
 
diff --git a/obj/NiControllerManager.h b/obj/NiControllerManager.h
index 8514dfa5..c06deffd 100644
--- a/obj/NiControllerManager.h
+++ b/obj/NiControllerManager.h
@@ -20,10 +20,11 @@ public:
 	~NiControllerManager();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_CONTROLLER_MANAGER_MEMBERS
 };
diff --git a/obj/NiControllerSequence.cpp b/obj/NiControllerSequence.cpp
index a1a666f0..e2ec7e47 100644
--- a/obj/NiControllerSequence.cpp
+++ b/obj/NiControllerSequence.cpp
@@ -14,7 +14,7 @@ NiControllerSequence::NiControllerSequence() NI_CONTROLLER_SEQUENCE_CONSTRUCT {}
 
 NiControllerSequence::~NiControllerSequence() {}
 
-void NiControllerSequence::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiControllerSequence::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_SEQUENCE_READ
 }
 
@@ -26,7 +26,7 @@ string NiControllerSequence::asString( bool verbose ) const {
 	NI_CONTROLLER_SEQUENCE_STRING
 }
 
-void NiControllerSequence::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiControllerSequence::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_CONTROLLER_SEQUENCE_FIXLINKS
 }
 
diff --git a/obj/NiControllerSequence.h b/obj/NiControllerSequence.h
index a432d8dc..776ac60d 100644
--- a/obj/NiControllerSequence.h
+++ b/obj/NiControllerSequence.h
@@ -20,10 +20,11 @@ public:
 	~NiControllerSequence();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	NiControllerManager * Parent() const;
 private:
diff --git a/obj/NiDefaultAVObjectPalette.cpp b/obj/NiDefaultAVObjectPalette.cpp
index fe91f7bb..18a66462 100644
--- a/obj/NiDefaultAVObjectPalette.cpp
+++ b/obj/NiDefaultAVObjectPalette.cpp
@@ -11,7 +11,7 @@ NiDefaultAVObjectPalette::NiDefaultAVObjectPalette() NI_DEFAULT_A_V_OBJECT_PALET
 
 NiDefaultAVObjectPalette::~NiDefaultAVObjectPalette() {}
 
-void NiDefaultAVObjectPalette::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDefaultAVObjectPalette::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DEFAULT_A_V_OBJECT_PALETTE_READ
 }
 
@@ -23,7 +23,7 @@ string NiDefaultAVObjectPalette::asString( bool verbose ) const {
 	NI_DEFAULT_A_V_OBJECT_PALETTE_STRING
 }
 
-void NiDefaultAVObjectPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDefaultAVObjectPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DEFAULT_A_V_OBJECT_PALETTE_FIXLINKS
 }
 
diff --git a/obj/NiDefaultAVObjectPalette.h b/obj/NiDefaultAVObjectPalette.h
index 565d9eaa..0c03034f 100644
--- a/obj/NiDefaultAVObjectPalette.h
+++ b/obj/NiDefaultAVObjectPalette.h
@@ -20,10 +20,11 @@ public:
 	~NiDefaultAVObjectPalette();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DEFAULT_A_V_OBJECT_PALETTE_MEMBERS
 };
diff --git a/obj/NiDirectionalLight.cpp b/obj/NiDirectionalLight.cpp
index e7ae860e..b4066a13 100644
--- a/obj/NiDirectionalLight.cpp
+++ b/obj/NiDirectionalLight.cpp
@@ -10,7 +10,7 @@ NiDirectionalLight::NiDirectionalLight() NI_DIRECTIONAL_LIGHT_CONSTRUCT {}
 
 NiDirectionalLight::~NiDirectionalLight() {}
 
-void NiDirectionalLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDirectionalLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DIRECTIONAL_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiDirectionalLight::asString( bool verbose ) const {
 	NI_DIRECTIONAL_LIGHT_STRING
 }
 
-void NiDirectionalLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDirectionalLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DIRECTIONAL_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiDirectionalLight.h b/obj/NiDirectionalLight.h
index fa9047e9..fc0829dd 100644
--- a/obj/NiDirectionalLight.h
+++ b/obj/NiDirectionalLight.h
@@ -20,10 +20,11 @@ public:
 	~NiDirectionalLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DIRECTIONAL_LIGHT_MEMBERS
 };
diff --git a/obj/NiDitherProperty.cpp b/obj/NiDitherProperty.cpp
index 7c9ba5c6..d067ca3d 100644
--- a/obj/NiDitherProperty.cpp
+++ b/obj/NiDitherProperty.cpp
@@ -10,7 +10,7 @@ NiDitherProperty::NiDitherProperty() NI_DITHER_PROPERTY_CONSTRUCT {}
 
 NiDitherProperty::~NiDitherProperty() {}
 
-void NiDitherProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDitherProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DITHER_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiDitherProperty::asString( bool verbose ) const {
 	NI_DITHER_PROPERTY_STRING
 }
 
-void NiDitherProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDitherProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DITHER_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiDitherProperty.h b/obj/NiDitherProperty.h
index ba293776..2c7c1869 100644
--- a/obj/NiDitherProperty.h
+++ b/obj/NiDitherProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiDitherProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DITHER_PROPERTY_MEMBERS
 };
diff --git a/obj/NiDynamicEffect.cpp b/obj/NiDynamicEffect.cpp
index 6175f357..205a65c0 100644
--- a/obj/NiDynamicEffect.cpp
+++ b/obj/NiDynamicEffect.cpp
@@ -10,7 +10,7 @@ NiDynamicEffect::NiDynamicEffect() NI_DYNAMIC_EFFECT_CONSTRUCT {}
 
 NiDynamicEffect::~NiDynamicEffect() {}
 
-void NiDynamicEffect::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiDynamicEffect::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_DYNAMIC_EFFECT_READ
 }
 
@@ -22,7 +22,7 @@ string NiDynamicEffect::asString( bool verbose ) const {
 	NI_DYNAMIC_EFFECT_STRING
 }
 
-void NiDynamicEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiDynamicEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_DYNAMIC_EFFECT_FIXLINKS
 }
 
diff --git a/obj/NiDynamicEffect.h b/obj/NiDynamicEffect.h
index 6ca4a1a0..b0ddadba 100644
--- a/obj/NiDynamicEffect.h
+++ b/obj/NiDynamicEffect.h
@@ -20,10 +20,11 @@ public:
 	~NiDynamicEffect();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_DYNAMIC_EFFECT_MEMBERS
 };
diff --git a/obj/NiExtraData.cpp b/obj/NiExtraData.cpp
index 264c9ca7..d05d976d 100644
--- a/obj/NiExtraData.cpp
+++ b/obj/NiExtraData.cpp
@@ -10,7 +10,7 @@ NiExtraData::NiExtraData() NI_EXTRA_DATA_CONSTRUCT {}
 
 NiExtraData::~NiExtraData() {}
 
-void NiExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiExtraData::asString( bool verbose ) const {
 	NI_EXTRA_DATA_STRING
 }
 
-void NiExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiExtraData.h b/obj/NiExtraData.h
index 266a2df2..d0121f81 100644
--- a/obj/NiExtraData.h
+++ b/obj/NiExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiFlipController.cpp b/obj/NiFlipController.cpp
index f98831a0..fa24f710 100644
--- a/obj/NiFlipController.cpp
+++ b/obj/NiFlipController.cpp
@@ -11,7 +11,7 @@ NiFlipController::NiFlipController() NI_FLIP_CONTROLLER_CONSTRUCT {}
 
 NiFlipController::~NiFlipController() {}
 
-void NiFlipController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFlipController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLIP_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiFlipController::asString( bool verbose ) const {
 	NI_FLIP_CONTROLLER_STRING
 }
 
-void NiFlipController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFlipController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLIP_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiFlipController.h b/obj/NiFlipController.h
index 8be2a2f3..a11ef7a0 100644
--- a/obj/NiFlipController.h
+++ b/obj/NiFlipController.h
@@ -20,10 +20,11 @@ public:
 	~NiFlipController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLIP_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiFloatData.cpp b/obj/NiFloatData.cpp
index 5115b9ef..762ad730 100644
--- a/obj/NiFloatData.cpp
+++ b/obj/NiFloatData.cpp
@@ -10,7 +10,7 @@ NiFloatData::NiFloatData() NI_FLOAT_DATA_CONSTRUCT {}
 
 NiFloatData::~NiFloatData() {}
 
-void NiFloatData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatData::asString( bool verbose ) const {
 	NI_FLOAT_DATA_STRING
 }
 
-void NiFloatData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_DATA_FIXLINKS
 }
 
diff --git a/obj/NiFloatData.h b/obj/NiFloatData.h
index 183b8c82..f5ec9ea8 100644
--- a/obj/NiFloatData.h
+++ b/obj/NiFloatData.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_DATA_MEMBERS
 };
diff --git a/obj/NiFloatExtraData.cpp b/obj/NiFloatExtraData.cpp
index 1748f15d..05ee96a8 100644
--- a/obj/NiFloatExtraData.cpp
+++ b/obj/NiFloatExtraData.cpp
@@ -10,7 +10,7 @@ NiFloatExtraData::NiFloatExtraData() NI_FLOAT_EXTRA_DATA_CONSTRUCT {}
 
 NiFloatExtraData::~NiFloatExtraData() {}
 
-void NiFloatExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatExtraData::asString( bool verbose ) const {
 	NI_FLOAT_EXTRA_DATA_STRING
 }
 
-void NiFloatExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiFloatExtraData.h b/obj/NiFloatExtraData.h
index bcdcdf97..d5b783f6 100644
--- a/obj/NiFloatExtraData.h
+++ b/obj/NiFloatExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiFloatExtraDataController.cpp b/obj/NiFloatExtraDataController.cpp
index a422929a..e06ece2e 100644
--- a/obj/NiFloatExtraDataController.cpp
+++ b/obj/NiFloatExtraDataController.cpp
@@ -10,7 +10,7 @@ NiFloatExtraDataController::NiFloatExtraDataController() NI_FLOAT_EXTRA_DATA_CON
 
 NiFloatExtraDataController::~NiFloatExtraDataController() {}
 
-void NiFloatExtraDataController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraDataController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatExtraDataController::asString( bool verbose ) const {
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_STRING
 }
 
-void NiFloatExtraDataController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatExtraDataController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiFloatExtraDataController.h b/obj/NiFloatExtraDataController.h
index 18379a02..cfb8706b 100644
--- a/obj/NiFloatExtraDataController.h
+++ b/obj/NiFloatExtraDataController.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatExtraDataController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiFloatInterpolator.cpp b/obj/NiFloatInterpolator.cpp
index ba8080f1..d8111d4a 100644
--- a/obj/NiFloatInterpolator.cpp
+++ b/obj/NiFloatInterpolator.cpp
@@ -11,7 +11,7 @@ NiFloatInterpolator::NiFloatInterpolator() NI_FLOAT_INTERPOLATOR_CONSTRUCT {}
 
 NiFloatInterpolator::~NiFloatInterpolator() {}
 
-void NiFloatInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiFloatInterpolator::asString( bool verbose ) const {
 	NI_FLOAT_INTERPOLATOR_STRING
 }
 
-void NiFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiFloatInterpolator.h b/obj/NiFloatInterpolator.h
index 50111651..1d87fccc 100644
--- a/obj/NiFloatInterpolator.h
+++ b/obj/NiFloatInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOAT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiFloatsExtraData.cpp b/obj/NiFloatsExtraData.cpp
index 20361151..b2223fb1 100644
--- a/obj/NiFloatsExtraData.cpp
+++ b/obj/NiFloatsExtraData.cpp
@@ -10,7 +10,7 @@ NiFloatsExtraData::NiFloatsExtraData() NI_FLOATS_EXTRA_DATA_CONSTRUCT {}
 
 NiFloatsExtraData::~NiFloatsExtraData() {}
 
-void NiFloatsExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFloatsExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOATS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiFloatsExtraData::asString( bool verbose ) const {
 	NI_FLOATS_EXTRA_DATA_STRING
 }
 
-void NiFloatsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFloatsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FLOATS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiFloatsExtraData.h b/obj/NiFloatsExtraData.h
index 0cca5180..cd936589 100644
--- a/obj/NiFloatsExtraData.h
+++ b/obj/NiFloatsExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiFloatsExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FLOATS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiFogProperty.cpp b/obj/NiFogProperty.cpp
index 358dc3a9..3f4e577a 100644
--- a/obj/NiFogProperty.cpp
+++ b/obj/NiFogProperty.cpp
@@ -10,7 +10,7 @@ NiFogProperty::NiFogProperty() NI_FOG_PROPERTY_CONSTRUCT {}
 
 NiFogProperty::~NiFogProperty() {}
 
-void NiFogProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiFogProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_FOG_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiFogProperty::asString( bool verbose ) const {
 	NI_FOG_PROPERTY_STRING
 }
 
-void NiFogProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiFogProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_FOG_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiFogProperty.h b/obj/NiFogProperty.h
index b0805c1b..e1e7d8b1 100644
--- a/obj/NiFogProperty.h
+++ b/obj/NiFogProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiFogProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_FOG_PROPERTY_MEMBERS
 };
diff --git a/obj/NiGeomMorpherController.cpp b/obj/NiGeomMorpherController.cpp
index 1ca4a148..d820bdf9 100644
--- a/obj/NiGeomMorpherController.cpp
+++ b/obj/NiGeomMorpherController.cpp
@@ -12,7 +12,7 @@ NiGeomMorpherController::NiGeomMorpherController() NI_GEOM_MORPHER_CONTROLLER_CO
 
 NiGeomMorpherController::~NiGeomMorpherController() {}
 
-void NiGeomMorpherController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiGeomMorpherController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_GEOM_MORPHER_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiGeomMorpherController::asString( bool verbose ) const {
 	NI_GEOM_MORPHER_CONTROLLER_STRING
 }
 
-void NiGeomMorpherController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiGeomMorpherController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_GEOM_MORPHER_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiGeomMorpherController.h b/obj/NiGeomMorpherController.h
index 20bc1678..aaaabde8 100644
--- a/obj/NiGeomMorpherController.h
+++ b/obj/NiGeomMorpherController.h
@@ -20,10 +20,11 @@ public:
 	~NiGeomMorpherController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_GEOM_MORPHER_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiGravity.cpp b/obj/NiGravity.cpp
index c1b6c8b8..63c96202 100644
--- a/obj/NiGravity.cpp
+++ b/obj/NiGravity.cpp
@@ -10,7 +10,7 @@ NiGravity::NiGravity() NI_GRAVITY_CONSTRUCT {}
 
 NiGravity::~NiGravity() {}
 
-void NiGravity::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiGravity::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_GRAVITY_READ
 }
 
@@ -22,7 +22,7 @@ string NiGravity::asString( bool verbose ) const {
 	NI_GRAVITY_STRING
 }
 
-void NiGravity::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiGravity::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_GRAVITY_FIXLINKS
 }
 
diff --git a/obj/NiGravity.h b/obj/NiGravity.h
index 18d5aebd..f7fa054f 100644
--- a/obj/NiGravity.h
+++ b/obj/NiGravity.h
@@ -20,10 +20,11 @@ public:
 	~NiGravity();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_GRAVITY_MEMBERS
 };
diff --git a/obj/NiIntegerExtraData.cpp b/obj/NiIntegerExtraData.cpp
index 5b9f7488..3626d51d 100644
--- a/obj/NiIntegerExtraData.cpp
+++ b/obj/NiIntegerExtraData.cpp
@@ -10,7 +10,7 @@ NiIntegerExtraData::NiIntegerExtraData() NI_INTEGER_EXTRA_DATA_CONSTRUCT {}
 
 NiIntegerExtraData::~NiIntegerExtraData() {}
 
-void NiIntegerExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiIntegerExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGER_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiIntegerExtraData::asString( bool verbose ) const {
 	NI_INTEGER_EXTRA_DATA_STRING
 }
 
-void NiIntegerExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiIntegerExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGER_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiIntegerExtraData.h b/obj/NiIntegerExtraData.h
index d217994a..649ab018 100644
--- a/obj/NiIntegerExtraData.h
+++ b/obj/NiIntegerExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiIntegerExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_INTEGER_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiIntegersExtraData.cpp b/obj/NiIntegersExtraData.cpp
index b8225510..7ea09384 100644
--- a/obj/NiIntegersExtraData.cpp
+++ b/obj/NiIntegersExtraData.cpp
@@ -10,7 +10,7 @@ NiIntegersExtraData::NiIntegersExtraData() NI_INTEGERS_EXTRA_DATA_CONSTRUCT {}
 
 NiIntegersExtraData::~NiIntegersExtraData() {}
 
-void NiIntegersExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiIntegersExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGERS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiIntegersExtraData::asString( bool verbose ) const {
 	NI_INTEGERS_EXTRA_DATA_STRING
 }
 
-void NiIntegersExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiIntegersExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_INTEGERS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiIntegersExtraData.h b/obj/NiIntegersExtraData.h
index 7d73542e..8c691654 100644
--- a/obj/NiIntegersExtraData.h
+++ b/obj/NiIntegersExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiIntegersExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_INTEGERS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiKeyframeController.cpp b/obj/NiKeyframeController.cpp
index 05e33c40..a7981352 100644
--- a/obj/NiKeyframeController.cpp
+++ b/obj/NiKeyframeController.cpp
@@ -11,7 +11,7 @@ NiKeyframeController::NiKeyframeController() NI_KEYFRAME_CONTROLLER_CONSTRUCT {}
 
 NiKeyframeController::~NiKeyframeController() {}
 
-void NiKeyframeController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiKeyframeController::asString( bool verbose ) const {
 	NI_KEYFRAME_CONTROLLER_STRING
 }
 
-void NiKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiKeyframeController.h b/obj/NiKeyframeController.h
index e239a2e4..d668a5a4 100644
--- a/obj/NiKeyframeController.h
+++ b/obj/NiKeyframeController.h
@@ -20,10 +20,11 @@ public:
 	~NiKeyframeController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_KEYFRAME_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiKeyframeData.cpp b/obj/NiKeyframeData.cpp
index a0b8b3f3..d8e78748 100644
--- a/obj/NiKeyframeData.cpp
+++ b/obj/NiKeyframeData.cpp
@@ -10,7 +10,7 @@ NiKeyframeData::NiKeyframeData() NI_KEYFRAME_DATA_CONSTRUCT {}
 
 NiKeyframeData::~NiKeyframeData() {}
 
-void NiKeyframeData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiKeyframeData::asString( bool verbose ) const {
 	NI_KEYFRAME_DATA_STRING
 }
 
-void NiKeyframeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiKeyframeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_KEYFRAME_DATA_FIXLINKS
 }
 
diff --git a/obj/NiKeyframeData.h b/obj/NiKeyframeData.h
index c5e99ee2..31232938 100644
--- a/obj/NiKeyframeData.h
+++ b/obj/NiKeyframeData.h
@@ -20,10 +20,11 @@ public:
 	~NiKeyframeData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_KEYFRAME_DATA_MEMBERS
 };
diff --git a/obj/NiLODNode.cpp b/obj/NiLODNode.cpp
index dc0d60f0..02b4d471 100644
--- a/obj/NiLODNode.cpp
+++ b/obj/NiLODNode.cpp
@@ -11,7 +11,7 @@ NiLODNode::NiLODNode() NI_L_O_D_NODE_CONSTRUCT {}
 
 NiLODNode::~NiLODNode() {}
 
-void NiLODNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLODNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_L_O_D_NODE_READ
 }
 
@@ -23,7 +23,7 @@ string NiLODNode::asString( bool verbose ) const {
 	NI_L_O_D_NODE_STRING
 }
 
-void NiLODNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLODNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_L_O_D_NODE_FIXLINKS
 }
 
diff --git a/obj/NiLODNode.h b/obj/NiLODNode.h
index acfeacf6..0dcb618d 100644
--- a/obj/NiLODNode.h
+++ b/obj/NiLODNode.h
@@ -20,10 +20,11 @@ public:
 	~NiLODNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_L_O_D_NODE_MEMBERS
 };
diff --git a/obj/NiLight.cpp b/obj/NiLight.cpp
index 05e13892..d48b6d73 100644
--- a/obj/NiLight.cpp
+++ b/obj/NiLight.cpp
@@ -10,7 +10,7 @@ NiLight::NiLight() NI_LIGHT_CONSTRUCT {}
 
 NiLight::~NiLight() {}
 
-void NiLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiLight::asString( bool verbose ) const {
 	NI_LIGHT_STRING
 }
 
-void NiLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiLight.h b/obj/NiLight.h
index ab3928ab..bd8a3631 100644
--- a/obj/NiLight.h
+++ b/obj/NiLight.h
@@ -20,10 +20,11 @@ public:
 	~NiLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LIGHT_MEMBERS
 };
diff --git a/obj/NiLightColorController.cpp b/obj/NiLightColorController.cpp
index dcfa8df2..6c909195 100644
--- a/obj/NiLightColorController.cpp
+++ b/obj/NiLightColorController.cpp
@@ -12,7 +12,7 @@ NiLightColorController::NiLightColorController() NI_LIGHT_COLOR_CONTROLLER_CONST
 
 NiLightColorController::~NiLightColorController() {}
 
-void NiLightColorController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLightColorController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_COLOR_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiLightColorController::asString( bool verbose ) const {
 	NI_LIGHT_COLOR_CONTROLLER_STRING
 }
 
-void NiLightColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLightColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_COLOR_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiLightColorController.h b/obj/NiLightColorController.h
index 34861354..0f53d259 100644
--- a/obj/NiLightColorController.h
+++ b/obj/NiLightColorController.h
@@ -20,10 +20,11 @@ public:
 	~NiLightColorController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LIGHT_COLOR_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiLightDimmerController.cpp b/obj/NiLightDimmerController.cpp
index 68ca786d..f5d000fe 100644
--- a/obj/NiLightDimmerController.cpp
+++ b/obj/NiLightDimmerController.cpp
@@ -11,7 +11,7 @@ NiLightDimmerController::NiLightDimmerController() NI_LIGHT_DIMMER_CONTROLLER_CO
 
 NiLightDimmerController::~NiLightDimmerController() {}
 
-void NiLightDimmerController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLightDimmerController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_DIMMER_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiLightDimmerController::asString( bool verbose ) const {
 	NI_LIGHT_DIMMER_CONTROLLER_STRING
 }
 
-void NiLightDimmerController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLightDimmerController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LIGHT_DIMMER_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiLightDimmerController.h b/obj/NiLightDimmerController.h
index 7d2a5ed5..ee4e0a0c 100644
--- a/obj/NiLightDimmerController.h
+++ b/obj/NiLightDimmerController.h
@@ -20,10 +20,11 @@ public:
 	~NiLightDimmerController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LIGHT_DIMMER_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiLookAtController.cpp b/obj/NiLookAtController.cpp
index 15a8e745..0d5eace1 100644
--- a/obj/NiLookAtController.cpp
+++ b/obj/NiLookAtController.cpp
@@ -11,7 +11,7 @@ NiLookAtController::NiLookAtController() NI_LOOK_AT_CONTROLLER_CONSTRUCT {}
 
 NiLookAtController::~NiLookAtController() {}
 
-void NiLookAtController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLookAtController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiLookAtController::asString( bool verbose ) const {
 	NI_LOOK_AT_CONTROLLER_STRING
 }
 
-void NiLookAtController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLookAtController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiLookAtController.h b/obj/NiLookAtController.h
index 5b2231ee..c88f0fcc 100644
--- a/obj/NiLookAtController.h
+++ b/obj/NiLookAtController.h
@@ -20,10 +20,11 @@ public:
 	~NiLookAtController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LOOK_AT_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiLookAtInterpolator.cpp b/obj/NiLookAtInterpolator.cpp
index 875a477d..6593f9ca 100644
--- a/obj/NiLookAtInterpolator.cpp
+++ b/obj/NiLookAtInterpolator.cpp
@@ -13,7 +13,7 @@ NiLookAtInterpolator::NiLookAtInterpolator() NI_LOOK_AT_INTERPOLATOR_CONSTRUCT {
 
 NiLookAtInterpolator::~NiLookAtInterpolator() {}
 
-void NiLookAtInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiLookAtInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_INTERPOLATOR_READ
 }
 
@@ -25,7 +25,7 @@ string NiLookAtInterpolator::asString( bool verbose ) const {
 	NI_LOOK_AT_INTERPOLATOR_STRING
 }
 
-void NiLookAtInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiLookAtInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_LOOK_AT_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiLookAtInterpolator.h b/obj/NiLookAtInterpolator.h
index 17ac21c8..4b5232ef 100644
--- a/obj/NiLookAtInterpolator.h
+++ b/obj/NiLookAtInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiLookAtInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_LOOK_AT_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiMaterialColorController.cpp b/obj/NiMaterialColorController.cpp
index cf060d3c..9cd0d4a2 100644
--- a/obj/NiMaterialColorController.cpp
+++ b/obj/NiMaterialColorController.cpp
@@ -11,7 +11,7 @@ NiMaterialColorController::NiMaterialColorController() NI_MATERIAL_COLOR_CONTROL
 
 NiMaterialColorController::~NiMaterialColorController() {}
 
-void NiMaterialColorController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMaterialColorController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_COLOR_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiMaterialColorController::asString( bool verbose ) const {
 	NI_MATERIAL_COLOR_CONTROLLER_STRING
 }
 
-void NiMaterialColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMaterialColorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_COLOR_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiMaterialColorController.h b/obj/NiMaterialColorController.h
index 71354280..87c754e0 100644
--- a/obj/NiMaterialColorController.h
+++ b/obj/NiMaterialColorController.h
@@ -20,10 +20,11 @@ public:
 	~NiMaterialColorController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MATERIAL_COLOR_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiMaterialProperty.cpp b/obj/NiMaterialProperty.cpp
index 7708f146..a3fa3d54 100644
--- a/obj/NiMaterialProperty.cpp
+++ b/obj/NiMaterialProperty.cpp
@@ -10,7 +10,7 @@ NiMaterialProperty::NiMaterialProperty() NI_MATERIAL_PROPERTY_CONSTRUCT {}
 
 NiMaterialProperty::~NiMaterialProperty() {}
 
-void NiMaterialProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMaterialProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiMaterialProperty::asString( bool verbose ) const {
 	NI_MATERIAL_PROPERTY_STRING
 }
 
-void NiMaterialProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMaterialProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MATERIAL_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiMaterialProperty.h b/obj/NiMaterialProperty.h
index 33bc070f..ce098d1c 100644
--- a/obj/NiMaterialProperty.h
+++ b/obj/NiMaterialProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiMaterialProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MATERIAL_PROPERTY_MEMBERS
 };
diff --git a/obj/NiMeshPSysData.cpp b/obj/NiMeshPSysData.cpp
index ced737ff..734ce96e 100644
--- a/obj/NiMeshPSysData.cpp
+++ b/obj/NiMeshPSysData.cpp
@@ -12,7 +12,7 @@ NiMeshPSysData::NiMeshPSysData() NI_MESH_P_SYS_DATA_CONSTRUCT {}
 
 NiMeshPSysData::~NiMeshPSysData() {}
 
-void NiMeshPSysData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMeshPSysData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_P_SYS_DATA_READ
 }
 
@@ -24,7 +24,7 @@ string NiMeshPSysData::asString( bool verbose ) const {
 	NI_MESH_P_SYS_DATA_STRING
 }
 
-void NiMeshPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMeshPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_P_SYS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiMeshPSysData.h b/obj/NiMeshPSysData.h
index fd111a4a..02582536 100644
--- a/obj/NiMeshPSysData.h
+++ b/obj/NiMeshPSysData.h
@@ -20,10 +20,11 @@ public:
 	~NiMeshPSysData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MESH_P_SYS_DATA_MEMBERS
 };
diff --git a/obj/NiMeshParticleSystem.cpp b/obj/NiMeshParticleSystem.cpp
index b7862c6b..b5004612 100644
--- a/obj/NiMeshParticleSystem.cpp
+++ b/obj/NiMeshParticleSystem.cpp
@@ -10,7 +10,7 @@ NiMeshParticleSystem::NiMeshParticleSystem() NI_MESH_PARTICLE_SYSTEM_CONSTRUCT {
 
 NiMeshParticleSystem::~NiMeshParticleSystem() {}
 
-void NiMeshParticleSystem::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMeshParticleSystem::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_PARTICLE_SYSTEM_READ
 }
 
@@ -22,7 +22,7 @@ string NiMeshParticleSystem::asString( bool verbose ) const {
 	NI_MESH_PARTICLE_SYSTEM_STRING
 }
 
-void NiMeshParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMeshParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MESH_PARTICLE_SYSTEM_FIXLINKS
 }
 
diff --git a/obj/NiMeshParticleSystem.h b/obj/NiMeshParticleSystem.h
index e2665159..3e4bc50f 100644
--- a/obj/NiMeshParticleSystem.h
+++ b/obj/NiMeshParticleSystem.h
@@ -20,10 +20,11 @@ public:
 	~NiMeshParticleSystem();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MESH_PARTICLE_SYSTEM_MEMBERS
 };
diff --git a/obj/NiMorphData.cpp b/obj/NiMorphData.cpp
index a97ac1cd..0c9ec92d 100644
--- a/obj/NiMorphData.cpp
+++ b/obj/NiMorphData.cpp
@@ -10,7 +10,7 @@ NiMorphData::NiMorphData() NI_MORPH_DATA_CONSTRUCT {}
 
 NiMorphData::~NiMorphData() {}
 
-void NiMorphData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMorphData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MORPH_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiMorphData::asString( bool verbose ) const {
 	NI_MORPH_DATA_STRING
 }
 
-void NiMorphData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMorphData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MORPH_DATA_FIXLINKS
 }
 
diff --git a/obj/NiMorphData.h b/obj/NiMorphData.h
index a2b5dc91..09e5eb28 100644
--- a/obj/NiMorphData.h
+++ b/obj/NiMorphData.h
@@ -20,10 +20,11 @@ public:
 	~NiMorphData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MORPH_DATA_MEMBERS
 };
diff --git a/obj/NiMultiTargetTransformController.cpp b/obj/NiMultiTargetTransformController.cpp
index 780450a2..31d858ac 100644
--- a/obj/NiMultiTargetTransformController.cpp
+++ b/obj/NiMultiTargetTransformController.cpp
@@ -11,7 +11,7 @@ NiMultiTargetTransformController::NiMultiTargetTransformController() NI_MULTI_TA
 
 NiMultiTargetTransformController::~NiMultiTargetTransformController() {}
 
-void NiMultiTargetTransformController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiMultiTargetTransformController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiMultiTargetTransformController::asString( bool verbose ) const {
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_STRING
 }
 
-void NiMultiTargetTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiMultiTargetTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiMultiTargetTransformController.h b/obj/NiMultiTargetTransformController.h
index 4d63c461..333cd7f4 100644
--- a/obj/NiMultiTargetTransformController.h
+++ b/obj/NiMultiTargetTransformController.h
@@ -20,10 +20,11 @@ public:
 	~NiMultiTargetTransformController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiNode.cpp b/obj/NiNode.cpp
index 28da8f94..071c71bd 100644
--- a/obj/NiNode.cpp
+++ b/obj/NiNode.cpp
@@ -11,7 +11,7 @@ NiNode::NiNode() NI_NODE_CONSTRUCT {}
 
 NiNode::~NiNode() {}
 
-void NiNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_NODE_READ
 }
 
@@ -23,6 +23,6 @@ string NiNode::asString( bool verbose ) const {
 	NI_NODE_STRING
 }
 
-void NiNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_NODE_FIXLINKS
 }
diff --git a/obj/NiNode.h b/obj/NiNode.h
index 5584cf62..b05bb4d5 100644
--- a/obj/NiNode.h
+++ b/obj/NiNode.h
@@ -20,10 +20,11 @@ public:
 	~NiNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 
 	//TODO:  Add functions to get and set children and store a list of NiObjectNET references
 private:
diff --git a/obj/NiObject.h b/obj/NiObject.h
index 10919381..5e6e1320 100644
--- a/obj/NiObject.h
+++ b/obj/NiObject.h
@@ -63,9 +63,9 @@ public:
 	bool IsDerivedType( const NiObject * objct ) const;
 
 	//Streaming Functions
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version ) {}
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version ) {}
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const {}
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {}
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {}
 
 	//Reference Counting
 	void AddRef(); //Should not be called directly
diff --git a/obj/NiObjectNET.cpp b/obj/NiObjectNET.cpp
index 44f8e36a..8ee93091 100644
--- a/obj/NiObjectNET.cpp
+++ b/obj/NiObjectNET.cpp
@@ -12,7 +12,7 @@ NiObjectNET::NiObjectNET() NI_OBJECT_N_E_T_CONSTRUCT {}
 
 NiObjectNET::~NiObjectNET() {}
 
-void NiObjectNET::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiObjectNET::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_OBJECT_N_E_T_READ
 }
 
@@ -24,7 +24,7 @@ string NiObjectNET::asString( bool verbose ) const {
 	NI_OBJECT_N_E_T_STRING
 }
 
-void NiObjectNET::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiObjectNET::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_OBJECT_N_E_T_FIXLINKS
 }
 
diff --git a/obj/NiObjectNET.h b/obj/NiObjectNET.h
index 2c5da457..d571a7a0 100644
--- a/obj/NiObjectNET.h
+++ b/obj/NiObjectNET.h
@@ -20,10 +20,11 @@ public:
 	~NiObjectNET();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	string GetName();
 	void SetName( string & new_name );
diff --git a/obj/NiPSysAgeDeathModifier.cpp b/obj/NiPSysAgeDeathModifier.cpp
index 164d0653..c3aabdc7 100644
--- a/obj/NiPSysAgeDeathModifier.cpp
+++ b/obj/NiPSysAgeDeathModifier.cpp
@@ -11,7 +11,7 @@ NiPSysAgeDeathModifier::NiPSysAgeDeathModifier() NI_P_SYS_AGE_DEATH_MODIFIER_CON
 
 NiPSysAgeDeathModifier::~NiPSysAgeDeathModifier() {}
 
-void NiPSysAgeDeathModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysAgeDeathModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_AGE_DEATH_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysAgeDeathModifier::asString( bool verbose ) const {
 	NI_P_SYS_AGE_DEATH_MODIFIER_STRING
 }
 
-void NiPSysAgeDeathModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysAgeDeathModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_AGE_DEATH_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysAgeDeathModifier.h b/obj/NiPSysAgeDeathModifier.h
index 12565f1a..bce0f313 100644
--- a/obj/NiPSysAgeDeathModifier.h
+++ b/obj/NiPSysAgeDeathModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysAgeDeathModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_AGE_DEATH_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysBombModifier.cpp b/obj/NiPSysBombModifier.cpp
index 14101eb3..28771d4a 100644
--- a/obj/NiPSysBombModifier.cpp
+++ b/obj/NiPSysBombModifier.cpp
@@ -11,7 +11,7 @@ NiPSysBombModifier::NiPSysBombModifier() NI_P_SYS_BOMB_MODIFIER_CONSTRUCT {}
 
 NiPSysBombModifier::~NiPSysBombModifier() {}
 
-void NiPSysBombModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysBombModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOMB_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysBombModifier::asString( bool verbose ) const {
 	NI_P_SYS_BOMB_MODIFIER_STRING
 }
 
-void NiPSysBombModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysBombModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOMB_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysBombModifier.h b/obj/NiPSysBombModifier.h
index ef2c1f68..87306ce4 100644
--- a/obj/NiPSysBombModifier.h
+++ b/obj/NiPSysBombModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysBombModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_BOMB_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysBoundUpdateModifier.cpp b/obj/NiPSysBoundUpdateModifier.cpp
index 42070725..60e068d3 100644
--- a/obj/NiPSysBoundUpdateModifier.cpp
+++ b/obj/NiPSysBoundUpdateModifier.cpp
@@ -10,7 +10,7 @@ NiPSysBoundUpdateModifier::NiPSysBoundUpdateModifier() NI_P_SYS_BOUND_UPDATE_MOD
 
 NiPSysBoundUpdateModifier::~NiPSysBoundUpdateModifier() {}
 
-void NiPSysBoundUpdateModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoundUpdateModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysBoundUpdateModifier::asString( bool verbose ) const {
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_STRING
 }
 
-void NiPSysBoundUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoundUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysBoundUpdateModifier.h b/obj/NiPSysBoundUpdateModifier.h
index 077111c7..da98d7c6 100644
--- a/obj/NiPSysBoundUpdateModifier.h
+++ b/obj/NiPSysBoundUpdateModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysBoundUpdateModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysBoxEmitter.cpp b/obj/NiPSysBoxEmitter.cpp
index 2da5ad1b..5241c2fd 100644
--- a/obj/NiPSysBoxEmitter.cpp
+++ b/obj/NiPSysBoxEmitter.cpp
@@ -10,7 +10,7 @@ NiPSysBoxEmitter::NiPSysBoxEmitter() NI_P_SYS_BOX_EMITTER_CONSTRUCT {}
 
 NiPSysBoxEmitter::~NiPSysBoxEmitter() {}
 
-void NiPSysBoxEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoxEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOX_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysBoxEmitter::asString( bool verbose ) const {
 	NI_P_SYS_BOX_EMITTER_STRING
 }
 
-void NiPSysBoxEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysBoxEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_BOX_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysBoxEmitter.h b/obj/NiPSysBoxEmitter.h
index b6afacd5..d6f731a4 100644
--- a/obj/NiPSysBoxEmitter.h
+++ b/obj/NiPSysBoxEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysBoxEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_BOX_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysColliderManager.cpp b/obj/NiPSysColliderManager.cpp
index b3e5ac4f..cdb70b3a 100644
--- a/obj/NiPSysColliderManager.cpp
+++ b/obj/NiPSysColliderManager.cpp
@@ -11,7 +11,7 @@ NiPSysColliderManager::NiPSysColliderManager() NI_P_SYS_COLLIDER_MANAGER_CONSTRU
 
 NiPSysColliderManager::~NiPSysColliderManager() {}
 
-void NiPSysColliderManager::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysColliderManager::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLLIDER_MANAGER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysColliderManager::asString( bool verbose ) const {
 	NI_P_SYS_COLLIDER_MANAGER_STRING
 }
 
-void NiPSysColliderManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysColliderManager::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLLIDER_MANAGER_FIXLINKS
 }
 
diff --git a/obj/NiPSysColliderManager.h b/obj/NiPSysColliderManager.h
index 029a9e7f..10062ef8 100644
--- a/obj/NiPSysColliderManager.h
+++ b/obj/NiPSysColliderManager.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysColliderManager();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_COLLIDER_MANAGER_MEMBERS
 };
diff --git a/obj/NiPSysColorModifier.cpp b/obj/NiPSysColorModifier.cpp
index dcb81ec7..8e95aa01 100644
--- a/obj/NiPSysColorModifier.cpp
+++ b/obj/NiPSysColorModifier.cpp
@@ -12,7 +12,7 @@ NiPSysColorModifier::NiPSysColorModifier() NI_P_SYS_COLOR_MODIFIER_CONSTRUCT {}
 
 NiPSysColorModifier::~NiPSysColorModifier() {}
 
-void NiPSysColorModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysColorModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLOR_MODIFIER_READ
 }
 
@@ -24,7 +24,7 @@ string NiPSysColorModifier::asString( bool verbose ) const {
 	NI_P_SYS_COLOR_MODIFIER_STRING
 }
 
-void NiPSysColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_COLOR_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysColorModifier.h b/obj/NiPSysColorModifier.h
index d0a037cb..5dfb1888 100644
--- a/obj/NiPSysColorModifier.h
+++ b/obj/NiPSysColorModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysColorModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_COLOR_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysCylinderEmitter.cpp b/obj/NiPSysCylinderEmitter.cpp
index 61e26ba8..58f9d3c8 100644
--- a/obj/NiPSysCylinderEmitter.cpp
+++ b/obj/NiPSysCylinderEmitter.cpp
@@ -10,7 +10,7 @@ NiPSysCylinderEmitter::NiPSysCylinderEmitter() NI_P_SYS_CYLINDER_EMITTER_CONSTRU
 
 NiPSysCylinderEmitter::~NiPSysCylinderEmitter() {}
 
-void NiPSysCylinderEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysCylinderEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_CYLINDER_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysCylinderEmitter::asString( bool verbose ) const {
 	NI_P_SYS_CYLINDER_EMITTER_STRING
 }
 
-void NiPSysCylinderEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysCylinderEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_CYLINDER_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysCylinderEmitter.h b/obj/NiPSysCylinderEmitter.h
index 30111cfe..5e329abb 100644
--- a/obj/NiPSysCylinderEmitter.h
+++ b/obj/NiPSysCylinderEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysCylinderEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_CYLINDER_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysData.cpp b/obj/NiPSysData.cpp
index d93021be..df14c5a9 100644
--- a/obj/NiPSysData.cpp
+++ b/obj/NiPSysData.cpp
@@ -10,7 +10,7 @@ NiPSysData::NiPSysData() NI_P_SYS_DATA_CONSTRUCT {}
 
 NiPSysData::~NiPSysData() {}
 
-void NiPSysData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysData::asString( bool verbose ) const {
 	NI_P_SYS_DATA_STRING
 }
 
-void NiPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPSysData.h b/obj/NiPSysData.h
index 7ea23771..8d8eb90b 100644
--- a/obj/NiPSysData.h
+++ b/obj/NiPSysData.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_DATA_MEMBERS
 };
diff --git a/obj/NiPSysDragModifier.cpp b/obj/NiPSysDragModifier.cpp
index 1fb4c4c1..eab96c68 100644
--- a/obj/NiPSysDragModifier.cpp
+++ b/obj/NiPSysDragModifier.cpp
@@ -10,7 +10,7 @@ NiPSysDragModifier::NiPSysDragModifier() NI_P_SYS_DRAG_MODIFIER_CONSTRUCT {}
 
 NiPSysDragModifier::~NiPSysDragModifier() {}
 
-void NiPSysDragModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysDragModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DRAG_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysDragModifier::asString( bool verbose ) const {
 	NI_P_SYS_DRAG_MODIFIER_STRING
 }
 
-void NiPSysDragModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysDragModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_DRAG_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysDragModifier.h b/obj/NiPSysDragModifier.h
index ba75792e..263992b3 100644
--- a/obj/NiPSysDragModifier.h
+++ b/obj/NiPSysDragModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysDragModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_DRAG_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysEmitterCtlr.cpp b/obj/NiPSysEmitterCtlr.cpp
index 36f98857..2bfb6f63 100644
--- a/obj/NiPSysEmitterCtlr.cpp
+++ b/obj/NiPSysEmitterCtlr.cpp
@@ -12,7 +12,7 @@ NiPSysEmitterCtlr::NiPSysEmitterCtlr() NI_P_SYS_EMITTER_CTLR_CONSTRUCT {}
 
 NiPSysEmitterCtlr::~NiPSysEmitterCtlr() {}
 
-void NiPSysEmitterCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_READ
 }
 
@@ -24,7 +24,7 @@ string NiPSysEmitterCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_CTLR_STRING
 }
 
-void NiPSysEmitterCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterCtlr.h b/obj/NiPSysEmitterCtlr.h
index 98b3b68e..dbfc1c63 100644
--- a/obj/NiPSysEmitterCtlr.h
+++ b/obj/NiPSysEmitterCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterCtlrData.cpp b/obj/NiPSysEmitterCtlrData.cpp
index d55b2c8e..f3def5b2 100644
--- a/obj/NiPSysEmitterCtlrData.cpp
+++ b/obj/NiPSysEmitterCtlrData.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterCtlrData::NiPSysEmitterCtlrData() NI_P_SYS_EMITTER_CTLR_DATA_CONSTR
 
 NiPSysEmitterCtlrData::~NiPSysEmitterCtlrData() {}
 
-void NiPSysEmitterCtlrData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlrData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterCtlrData::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_CTLR_DATA_STRING
 }
 
-void NiPSysEmitterCtlrData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterCtlrData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_CTLR_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterCtlrData.h b/obj/NiPSysEmitterCtlrData.h
index 993db1b4..fb8448f5 100644
--- a/obj/NiPSysEmitterCtlrData.h
+++ b/obj/NiPSysEmitterCtlrData.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterCtlrData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_CTLR_DATA_MEMBERS
 };
diff --git a/obj/NiPSysEmitterDeclinationCtlr.cpp b/obj/NiPSysEmitterDeclinationCtlr.cpp
index 78256e08..b28117fc 100644
--- a/obj/NiPSysEmitterDeclinationCtlr.cpp
+++ b/obj/NiPSysEmitterDeclinationCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterDeclinationCtlr::NiPSysEmitterDeclinationCtlr() NI_P_SYS_EMITTER_DE
 
 NiPSysEmitterDeclinationCtlr::~NiPSysEmitterDeclinationCtlr() {}
 
-void NiPSysEmitterDeclinationCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterDeclinationCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_STRING
 }
 
-void NiPSysEmitterDeclinationCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterDeclinationCtlr.h b/obj/NiPSysEmitterDeclinationCtlr.h
index e9db06bc..9ff3bb29 100644
--- a/obj/NiPSysEmitterDeclinationCtlr.h
+++ b/obj/NiPSysEmitterDeclinationCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterDeclinationCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterDeclinationVarCtlr.cpp b/obj/NiPSysEmitterDeclinationVarCtlr.cpp
index f760d393..b20c03ac 100644
--- a/obj/NiPSysEmitterDeclinationVarCtlr.cpp
+++ b/obj/NiPSysEmitterDeclinationVarCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterDeclinationVarCtlr::NiPSysEmitterDeclinationVarCtlr() NI_P_SYS_EMIT
 
 NiPSysEmitterDeclinationVarCtlr::~NiPSysEmitterDeclinationVarCtlr() {}
 
-void NiPSysEmitterDeclinationVarCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationVarCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterDeclinationVarCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_STRING
 }
 
-void NiPSysEmitterDeclinationVarCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterDeclinationVarCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterDeclinationVarCtlr.h b/obj/NiPSysEmitterDeclinationVarCtlr.h
index 96f21f60..c0e7c15c 100644
--- a/obj/NiPSysEmitterDeclinationVarCtlr.h
+++ b/obj/NiPSysEmitterDeclinationVarCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterDeclinationVarCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterInitialRadiusCtlr.cpp b/obj/NiPSysEmitterInitialRadiusCtlr.cpp
index 4169b519..85277009 100644
--- a/obj/NiPSysEmitterInitialRadiusCtlr.cpp
+++ b/obj/NiPSysEmitterInitialRadiusCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterInitialRadiusCtlr::NiPSysEmitterInitialRadiusCtlr() NI_P_SYS_EMITTE
 
 NiPSysEmitterInitialRadiusCtlr::~NiPSysEmitterInitialRadiusCtlr() {}
 
-void NiPSysEmitterInitialRadiusCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterInitialRadiusCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterInitialRadiusCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_STRING
 }
 
-void NiPSysEmitterInitialRadiusCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterInitialRadiusCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterInitialRadiusCtlr.h b/obj/NiPSysEmitterInitialRadiusCtlr.h
index 4582da69..2ba0839b 100644
--- a/obj/NiPSysEmitterInitialRadiusCtlr.h
+++ b/obj/NiPSysEmitterInitialRadiusCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterInitialRadiusCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterLifeSpanCtlr.cpp b/obj/NiPSysEmitterLifeSpanCtlr.cpp
index d3fa8a20..9403050e 100644
--- a/obj/NiPSysEmitterLifeSpanCtlr.cpp
+++ b/obj/NiPSysEmitterLifeSpanCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterLifeSpanCtlr::NiPSysEmitterLifeSpanCtlr() NI_P_SYS_EMITTER_LIFE_SPA
 
 NiPSysEmitterLifeSpanCtlr::~NiPSysEmitterLifeSpanCtlr() {}
 
-void NiPSysEmitterLifeSpanCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterLifeSpanCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterLifeSpanCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_STRING
 }
 
-void NiPSysEmitterLifeSpanCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterLifeSpanCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterLifeSpanCtlr.h b/obj/NiPSysEmitterLifeSpanCtlr.h
index b4984c4c..7c8a5332 100644
--- a/obj/NiPSysEmitterLifeSpanCtlr.h
+++ b/obj/NiPSysEmitterLifeSpanCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterLifeSpanCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysEmitterSpeedCtlr.cpp b/obj/NiPSysEmitterSpeedCtlr.cpp
index 2c2cd8dc..36ddd3cc 100644
--- a/obj/NiPSysEmitterSpeedCtlr.cpp
+++ b/obj/NiPSysEmitterSpeedCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysEmitterSpeedCtlr::NiPSysEmitterSpeedCtlr() NI_P_SYS_EMITTER_SPEED_CTLR_CON
 
 NiPSysEmitterSpeedCtlr::~NiPSysEmitterSpeedCtlr() {}
 
-void NiPSysEmitterSpeedCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterSpeedCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_SPEED_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysEmitterSpeedCtlr::asString( bool verbose ) const {
 	NI_P_SYS_EMITTER_SPEED_CTLR_STRING
 }
 
-void NiPSysEmitterSpeedCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysEmitterSpeedCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_EMITTER_SPEED_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysEmitterSpeedCtlr.h b/obj/NiPSysEmitterSpeedCtlr.h
index 0980abd0..94c8ab04 100644
--- a/obj/NiPSysEmitterSpeedCtlr.h
+++ b/obj/NiPSysEmitterSpeedCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysEmitterSpeedCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_EMITTER_SPEED_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysGravityModifier.cpp b/obj/NiPSysGravityModifier.cpp
index a5b6f82d..829d49a1 100644
--- a/obj/NiPSysGravityModifier.cpp
+++ b/obj/NiPSysGravityModifier.cpp
@@ -11,7 +11,7 @@ NiPSysGravityModifier::NiPSysGravityModifier() NI_P_SYS_GRAVITY_MODIFIER_CONSTRU
 
 NiPSysGravityModifier::~NiPSysGravityModifier() {}
 
-void NiPSysGravityModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysGravityModifier::asString( bool verbose ) const {
 	NI_P_SYS_GRAVITY_MODIFIER_STRING
 }
 
-void NiPSysGravityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysGravityModifier.h b/obj/NiPSysGravityModifier.h
index eced5db9..1c21bfd9 100644
--- a/obj/NiPSysGravityModifier.h
+++ b/obj/NiPSysGravityModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysGravityModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_GRAVITY_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysGravityStrengthCtlr.cpp b/obj/NiPSysGravityStrengthCtlr.cpp
index 202b960e..35a74c9f 100644
--- a/obj/NiPSysGravityStrengthCtlr.cpp
+++ b/obj/NiPSysGravityStrengthCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysGravityStrengthCtlr::NiPSysGravityStrengthCtlr() NI_P_SYS_GRAVITY_STRENGTH
 
 NiPSysGravityStrengthCtlr::~NiPSysGravityStrengthCtlr() {}
 
-void NiPSysGravityStrengthCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityStrengthCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysGravityStrengthCtlr::asString( bool verbose ) const {
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_STRING
 }
 
-void NiPSysGravityStrengthCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysGravityStrengthCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysGravityStrengthCtlr.h b/obj/NiPSysGravityStrengthCtlr.h
index b4a33ecd..6f12368b 100644
--- a/obj/NiPSysGravityStrengthCtlr.h
+++ b/obj/NiPSysGravityStrengthCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysGravityStrengthCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysGrowFadeModifier.cpp b/obj/NiPSysGrowFadeModifier.cpp
index 591d1a54..831e875a 100644
--- a/obj/NiPSysGrowFadeModifier.cpp
+++ b/obj/NiPSysGrowFadeModifier.cpp
@@ -10,7 +10,7 @@ NiPSysGrowFadeModifier::NiPSysGrowFadeModifier() NI_P_SYS_GROW_FADE_MODIFIER_CON
 
 NiPSysGrowFadeModifier::~NiPSysGrowFadeModifier() {}
 
-void NiPSysGrowFadeModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysGrowFadeModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GROW_FADE_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysGrowFadeModifier::asString( bool verbose ) const {
 	NI_P_SYS_GROW_FADE_MODIFIER_STRING
 }
 
-void NiPSysGrowFadeModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysGrowFadeModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_GROW_FADE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysGrowFadeModifier.h b/obj/NiPSysGrowFadeModifier.h
index 6b56036b..76aaa8dc 100644
--- a/obj/NiPSysGrowFadeModifier.h
+++ b/obj/NiPSysGrowFadeModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysGrowFadeModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_GROW_FADE_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysMeshEmitter.cpp b/obj/NiPSysMeshEmitter.cpp
index f453fde4..d1fa7d71 100644
--- a/obj/NiPSysMeshEmitter.cpp
+++ b/obj/NiPSysMeshEmitter.cpp
@@ -11,7 +11,7 @@ NiPSysMeshEmitter::NiPSysMeshEmitter() NI_P_SYS_MESH_EMITTER_CONSTRUCT {}
 
 NiPSysMeshEmitter::~NiPSysMeshEmitter() {}
 
-void NiPSysMeshEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_EMITTER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysMeshEmitter::asString( bool verbose ) const {
 	NI_P_SYS_MESH_EMITTER_STRING
 }
 
-void NiPSysMeshEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysMeshEmitter.h b/obj/NiPSysMeshEmitter.h
index fd5470e8..c0a6afab 100644
--- a/obj/NiPSysMeshEmitter.h
+++ b/obj/NiPSysMeshEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysMeshEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_MESH_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysMeshUpdateModifier.cpp b/obj/NiPSysMeshUpdateModifier.cpp
index 623c0a29..80796190 100644
--- a/obj/NiPSysMeshUpdateModifier.cpp
+++ b/obj/NiPSysMeshUpdateModifier.cpp
@@ -11,7 +11,7 @@ NiPSysMeshUpdateModifier::NiPSysMeshUpdateModifier() NI_P_SYS_MESH_UPDATE_MODIFI
 
 NiPSysMeshUpdateModifier::~NiPSysMeshUpdateModifier() {}
 
-void NiPSysMeshUpdateModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshUpdateModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_UPDATE_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiPSysMeshUpdateModifier::asString( bool verbose ) const {
 	NI_P_SYS_MESH_UPDATE_MODIFIER_STRING
 }
 
-void NiPSysMeshUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysMeshUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MESH_UPDATE_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysMeshUpdateModifier.h b/obj/NiPSysMeshUpdateModifier.h
index 1de1657c..1ba78588 100644
--- a/obj/NiPSysMeshUpdateModifier.h
+++ b/obj/NiPSysMeshUpdateModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysMeshUpdateModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_MESH_UPDATE_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysModifierActiveCtlr.cpp b/obj/NiPSysModifierActiveCtlr.cpp
index 45db2034..7b170e9f 100644
--- a/obj/NiPSysModifierActiveCtlr.cpp
+++ b/obj/NiPSysModifierActiveCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysModifierActiveCtlr::NiPSysModifierActiveCtlr() NI_P_SYS_MODIFIER_ACTIVE_CT
 
 NiPSysModifierActiveCtlr::~NiPSysModifierActiveCtlr() {}
 
-void NiPSysModifierActiveCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysModifierActiveCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysModifierActiveCtlr::asString( bool verbose ) const {
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_STRING
 }
 
-void NiPSysModifierActiveCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysModifierActiveCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysModifierActiveCtlr.h b/obj/NiPSysModifierActiveCtlr.h
index 6cf3eaf9..599a4c2a 100644
--- a/obj/NiPSysModifierActiveCtlr.h
+++ b/obj/NiPSysModifierActiveCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysModifierActiveCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysPlanarCollider.cpp b/obj/NiPSysPlanarCollider.cpp
index c32257ce..114b35fe 100644
--- a/obj/NiPSysPlanarCollider.cpp
+++ b/obj/NiPSysPlanarCollider.cpp
@@ -12,7 +12,7 @@ NiPSysPlanarCollider::NiPSysPlanarCollider() NI_P_SYS_PLANAR_COLLIDER_CONSTRUCT
 
 NiPSysPlanarCollider::~NiPSysPlanarCollider() {}
 
-void NiPSysPlanarCollider::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysPlanarCollider::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_PLANAR_COLLIDER_READ
 }
 
@@ -24,7 +24,7 @@ string NiPSysPlanarCollider::asString( bool verbose ) const {
 	NI_P_SYS_PLANAR_COLLIDER_STRING
 }
 
-void NiPSysPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_PLANAR_COLLIDER_FIXLINKS
 }
 
diff --git a/obj/NiPSysPlanarCollider.h b/obj/NiPSysPlanarCollider.h
index edfd1983..254e7090 100644
--- a/obj/NiPSysPlanarCollider.h
+++ b/obj/NiPSysPlanarCollider.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysPlanarCollider();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_PLANAR_COLLIDER_MEMBERS
 };
diff --git a/obj/NiPSysPositionModifier.cpp b/obj/NiPSysPositionModifier.cpp
index fec2e99c..e240e051 100644
--- a/obj/NiPSysPositionModifier.cpp
+++ b/obj/NiPSysPositionModifier.cpp
@@ -10,7 +10,7 @@ NiPSysPositionModifier::NiPSysPositionModifier() NI_P_SYS_POSITION_MODIFIER_CONS
 
 NiPSysPositionModifier::~NiPSysPositionModifier() {}
 
-void NiPSysPositionModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysPositionModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_POSITION_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysPositionModifier::asString( bool verbose ) const {
 	NI_P_SYS_POSITION_MODIFIER_STRING
 }
 
-void NiPSysPositionModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysPositionModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_POSITION_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysPositionModifier.h b/obj/NiPSysPositionModifier.h
index 6679dc9b..8c9562bf 100644
--- a/obj/NiPSysPositionModifier.h
+++ b/obj/NiPSysPositionModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysPositionModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_POSITION_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysResetOnLoopCtlr.cpp b/obj/NiPSysResetOnLoopCtlr.cpp
index 5a82b932..816b4ecb 100644
--- a/obj/NiPSysResetOnLoopCtlr.cpp
+++ b/obj/NiPSysResetOnLoopCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysResetOnLoopCtlr::NiPSysResetOnLoopCtlr() NI_P_SYS_RESET_ON_LOOP_CTLR_CONST
 
 NiPSysResetOnLoopCtlr::~NiPSysResetOnLoopCtlr() {}
 
-void NiPSysResetOnLoopCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysResetOnLoopCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_RESET_ON_LOOP_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysResetOnLoopCtlr::asString( bool verbose ) const {
 	NI_P_SYS_RESET_ON_LOOP_CTLR_STRING
 }
 
-void NiPSysResetOnLoopCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysResetOnLoopCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_RESET_ON_LOOP_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysResetOnLoopCtlr.h b/obj/NiPSysResetOnLoopCtlr.h
index d1d426a8..6381974f 100644
--- a/obj/NiPSysResetOnLoopCtlr.h
+++ b/obj/NiPSysResetOnLoopCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysResetOnLoopCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_RESET_ON_LOOP_CTLR_MEMBERS
 };
diff --git a/obj/NiPSysRotationModifier.cpp b/obj/NiPSysRotationModifier.cpp
index 68111eef..79ea4473 100644
--- a/obj/NiPSysRotationModifier.cpp
+++ b/obj/NiPSysRotationModifier.cpp
@@ -10,7 +10,7 @@ NiPSysRotationModifier::NiPSysRotationModifier() NI_P_SYS_ROTATION_MODIFIER_CONS
 
 NiPSysRotationModifier::~NiPSysRotationModifier() {}
 
-void NiPSysRotationModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysRotationModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_ROTATION_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysRotationModifier::asString( bool verbose ) const {
 	NI_P_SYS_ROTATION_MODIFIER_STRING
 }
 
-void NiPSysRotationModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysRotationModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_ROTATION_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysRotationModifier.h b/obj/NiPSysRotationModifier.h
index d2fb4d03..f75816b6 100644
--- a/obj/NiPSysRotationModifier.h
+++ b/obj/NiPSysRotationModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysRotationModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_ROTATION_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysSpawnModifier.cpp b/obj/NiPSysSpawnModifier.cpp
index 2058fe14..b8771d51 100644
--- a/obj/NiPSysSpawnModifier.cpp
+++ b/obj/NiPSysSpawnModifier.cpp
@@ -10,7 +10,7 @@ NiPSysSpawnModifier::NiPSysSpawnModifier() NI_P_SYS_SPAWN_MODIFIER_CONSTRUCT {}
 
 NiPSysSpawnModifier::~NiPSysSpawnModifier() {}
 
-void NiPSysSpawnModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysSpawnModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPAWN_MODIFIER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysSpawnModifier::asString( bool verbose ) const {
 	NI_P_SYS_SPAWN_MODIFIER_STRING
 }
 
-void NiPSysSpawnModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysSpawnModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPAWN_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiPSysSpawnModifier.h b/obj/NiPSysSpawnModifier.h
index 95e05164..86b3ddc3 100644
--- a/obj/NiPSysSpawnModifier.h
+++ b/obj/NiPSysSpawnModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysSpawnModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_SPAWN_MODIFIER_MEMBERS
 };
diff --git a/obj/NiPSysSphereEmitter.cpp b/obj/NiPSysSphereEmitter.cpp
index 38d58bd8..8a1232a0 100644
--- a/obj/NiPSysSphereEmitter.cpp
+++ b/obj/NiPSysSphereEmitter.cpp
@@ -10,7 +10,7 @@ NiPSysSphereEmitter::NiPSysSphereEmitter() NI_P_SYS_SPHERE_EMITTER_CONSTRUCT {}
 
 NiPSysSphereEmitter::~NiPSysSphereEmitter() {}
 
-void NiPSysSphereEmitter::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysSphereEmitter::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPHERE_EMITTER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysSphereEmitter::asString( bool verbose ) const {
 	NI_P_SYS_SPHERE_EMITTER_STRING
 }
 
-void NiPSysSphereEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysSphereEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_SPHERE_EMITTER_FIXLINKS
 }
 
diff --git a/obj/NiPSysSphereEmitter.h b/obj/NiPSysSphereEmitter.h
index fddc5c5a..a7693342 100644
--- a/obj/NiPSysSphereEmitter.h
+++ b/obj/NiPSysSphereEmitter.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysSphereEmitter();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_SPHERE_EMITTER_MEMBERS
 };
diff --git a/obj/NiPSysUpdateCtlr.cpp b/obj/NiPSysUpdateCtlr.cpp
index 9a1b4b63..d018b689 100644
--- a/obj/NiPSysUpdateCtlr.cpp
+++ b/obj/NiPSysUpdateCtlr.cpp
@@ -10,7 +10,7 @@ NiPSysUpdateCtlr::NiPSysUpdateCtlr() NI_P_SYS_UPDATE_CTLR_CONSTRUCT {}
 
 NiPSysUpdateCtlr::~NiPSysUpdateCtlr() {}
 
-void NiPSysUpdateCtlr::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPSysUpdateCtlr::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_UPDATE_CTLR_READ
 }
 
@@ -22,7 +22,7 @@ string NiPSysUpdateCtlr::asString( bool verbose ) const {
 	NI_P_SYS_UPDATE_CTLR_STRING
 }
 
-void NiPSysUpdateCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPSysUpdateCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_P_SYS_UPDATE_CTLR_FIXLINKS
 }
 
diff --git a/obj/NiPSysUpdateCtlr.h b/obj/NiPSysUpdateCtlr.h
index f41bfff1..949c3f6a 100644
--- a/obj/NiPSysUpdateCtlr.h
+++ b/obj/NiPSysUpdateCtlr.h
@@ -20,10 +20,11 @@ public:
 	~NiPSysUpdateCtlr();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_P_SYS_UPDATE_CTLR_MEMBERS
 };
diff --git a/obj/NiPalette.cpp b/obj/NiPalette.cpp
index e486e4bf..f6a4642f 100644
--- a/obj/NiPalette.cpp
+++ b/obj/NiPalette.cpp
@@ -10,7 +10,7 @@ NiPalette::NiPalette() NI_PALETTE_CONSTRUCT {}
 
 NiPalette::~NiPalette() {}
 
-void NiPalette::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPalette::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PALETTE_READ
 }
 
@@ -22,7 +22,7 @@ string NiPalette::asString( bool verbose ) const {
 	NI_PALETTE_STRING
 }
 
-void NiPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PALETTE_FIXLINKS
 }
 
diff --git a/obj/NiPalette.h b/obj/NiPalette.h
index 0862fb48..83c3db92 100644
--- a/obj/NiPalette.h
+++ b/obj/NiPalette.h
@@ -20,10 +20,11 @@ public:
 	~NiPalette();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PALETTE_MEMBERS
 };
diff --git a/obj/NiParticleBomb.cpp b/obj/NiParticleBomb.cpp
index 0a9a26d3..64cc38b3 100644
--- a/obj/NiParticleBomb.cpp
+++ b/obj/NiParticleBomb.cpp
@@ -10,7 +10,7 @@ NiParticleBomb::NiParticleBomb() NI_PARTICLE_BOMB_CONSTRUCT {}
 
 NiParticleBomb::~NiParticleBomb() {}
 
-void NiParticleBomb::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleBomb::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_BOMB_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleBomb::asString( bool verbose ) const {
 	NI_PARTICLE_BOMB_STRING
 }
 
-void NiParticleBomb::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleBomb::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_BOMB_FIXLINKS
 }
 
diff --git a/obj/NiParticleBomb.h b/obj/NiParticleBomb.h
index f3a744c6..45302ae2 100644
--- a/obj/NiParticleBomb.h
+++ b/obj/NiParticleBomb.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleBomb();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_BOMB_MEMBERS
 };
diff --git a/obj/NiParticleColorModifier.cpp b/obj/NiParticleColorModifier.cpp
index 0f46eacf..1d9f8be6 100644
--- a/obj/NiParticleColorModifier.cpp
+++ b/obj/NiParticleColorModifier.cpp
@@ -11,7 +11,7 @@ NiParticleColorModifier::NiParticleColorModifier() NI_PARTICLE_COLOR_MODIFIER_CO
 
 NiParticleColorModifier::~NiParticleColorModifier() {}
 
-void NiParticleColorModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleColorModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_COLOR_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleColorModifier::asString( bool verbose ) const {
 	NI_PARTICLE_COLOR_MODIFIER_STRING
 }
 
-void NiParticleColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_COLOR_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiParticleColorModifier.h b/obj/NiParticleColorModifier.h
index 5c4fea48..8ff4d525 100644
--- a/obj/NiParticleColorModifier.h
+++ b/obj/NiParticleColorModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleColorModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_COLOR_MODIFIER_MEMBERS
 };
diff --git a/obj/NiParticleGrowFade.cpp b/obj/NiParticleGrowFade.cpp
index 11eb0de9..407ccb6c 100644
--- a/obj/NiParticleGrowFade.cpp
+++ b/obj/NiParticleGrowFade.cpp
@@ -10,7 +10,7 @@ NiParticleGrowFade::NiParticleGrowFade() NI_PARTICLE_GROW_FADE_CONSTRUCT {}
 
 NiParticleGrowFade::~NiParticleGrowFade() {}
 
-void NiParticleGrowFade::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleGrowFade::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_GROW_FADE_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleGrowFade::asString( bool verbose ) const {
 	NI_PARTICLE_GROW_FADE_STRING
 }
 
-void NiParticleGrowFade::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleGrowFade::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_GROW_FADE_FIXLINKS
 }
 
diff --git a/obj/NiParticleGrowFade.h b/obj/NiParticleGrowFade.h
index 061744b8..7dd38d88 100644
--- a/obj/NiParticleGrowFade.h
+++ b/obj/NiParticleGrowFade.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleGrowFade();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_GROW_FADE_MEMBERS
 };
diff --git a/obj/NiParticleMeshModifier.cpp b/obj/NiParticleMeshModifier.cpp
index 443032ec..a74fdc4f 100644
--- a/obj/NiParticleMeshModifier.cpp
+++ b/obj/NiParticleMeshModifier.cpp
@@ -11,7 +11,7 @@ NiParticleMeshModifier::NiParticleMeshModifier() NI_PARTICLE_MESH_MODIFIER_CONST
 
 NiParticleMeshModifier::~NiParticleMeshModifier() {}
 
-void NiParticleMeshModifier::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshModifier::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESH_MODIFIER_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleMeshModifier::asString( bool verbose ) const {
 	NI_PARTICLE_MESH_MODIFIER_STRING
 }
 
-void NiParticleMeshModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESH_MODIFIER_FIXLINKS
 }
 
diff --git a/obj/NiParticleMeshModifier.h b/obj/NiParticleMeshModifier.h
index 89f59483..2239fee9 100644
--- a/obj/NiParticleMeshModifier.h
+++ b/obj/NiParticleMeshModifier.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleMeshModifier();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_MESH_MODIFIER_MEMBERS
 };
diff --git a/obj/NiParticleMeshes.cpp b/obj/NiParticleMeshes.cpp
index 09dda3db..19cae843 100644
--- a/obj/NiParticleMeshes.cpp
+++ b/obj/NiParticleMeshes.cpp
@@ -10,7 +10,7 @@ NiParticleMeshes::NiParticleMeshes() NI_PARTICLE_MESHES_CONSTRUCT {}
 
 NiParticleMeshes::~NiParticleMeshes() {}
 
-void NiParticleMeshes::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshes::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleMeshes::asString( bool verbose ) const {
 	NI_PARTICLE_MESHES_STRING
 }
 
-void NiParticleMeshes::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshes::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_FIXLINKS
 }
 
diff --git a/obj/NiParticleMeshes.h b/obj/NiParticleMeshes.h
index ed6a1c8f..d9df9735 100644
--- a/obj/NiParticleMeshes.h
+++ b/obj/NiParticleMeshes.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleMeshes();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_MESHES_MEMBERS
 };
diff --git a/obj/NiParticleMeshesData.cpp b/obj/NiParticleMeshesData.cpp
index fb79ba3f..0ab8c339 100644
--- a/obj/NiParticleMeshesData.cpp
+++ b/obj/NiParticleMeshesData.cpp
@@ -11,7 +11,7 @@ NiParticleMeshesData::NiParticleMeshesData() NI_PARTICLE_MESHES_DATA_CONSTRUCT {
 
 NiParticleMeshesData::~NiParticleMeshesData() {}
 
-void NiParticleMeshesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleMeshesData::asString( bool verbose ) const {
 	NI_PARTICLE_MESHES_DATA_STRING
 }
 
-void NiParticleMeshesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleMeshesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_MESHES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiParticleMeshesData.h b/obj/NiParticleMeshesData.h
index 1c2ac2b3..f60abf08 100644
--- a/obj/NiParticleMeshesData.h
+++ b/obj/NiParticleMeshesData.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleMeshesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_MESHES_DATA_MEMBERS
 };
diff --git a/obj/NiParticleRotation.cpp b/obj/NiParticleRotation.cpp
index 33cd5d23..63152f36 100644
--- a/obj/NiParticleRotation.cpp
+++ b/obj/NiParticleRotation.cpp
@@ -10,7 +10,7 @@ NiParticleRotation::NiParticleRotation() NI_PARTICLE_ROTATION_CONSTRUCT {}
 
 NiParticleRotation::~NiParticleRotation() {}
 
-void NiParticleRotation::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleRotation::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_ROTATION_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticleRotation::asString( bool verbose ) const {
 	NI_PARTICLE_ROTATION_STRING
 }
 
-void NiParticleRotation::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleRotation::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_ROTATION_FIXLINKS
 }
 
diff --git a/obj/NiParticleRotation.h b/obj/NiParticleRotation.h
index 2872994e..e32c0d54 100644
--- a/obj/NiParticleRotation.h
+++ b/obj/NiParticleRotation.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleRotation();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_ROTATION_MEMBERS
 };
diff --git a/obj/NiParticleSystem.cpp b/obj/NiParticleSystem.cpp
index cfb40c29..c705b516 100644
--- a/obj/NiParticleSystem.cpp
+++ b/obj/NiParticleSystem.cpp
@@ -12,7 +12,7 @@ NiParticleSystem::NiParticleSystem() NI_PARTICLE_SYSTEM_CONSTRUCT {}
 
 NiParticleSystem::~NiParticleSystem() {}
 
-void NiParticleSystem::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystem::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_READ
 }
 
@@ -24,7 +24,7 @@ string NiParticleSystem::asString( bool verbose ) const {
 	NI_PARTICLE_SYSTEM_STRING
 }
 
-void NiParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_FIXLINKS
 }
 
diff --git a/obj/NiParticleSystem.h b/obj/NiParticleSystem.h
index c765cf73..7bac9d78 100644
--- a/obj/NiParticleSystem.h
+++ b/obj/NiParticleSystem.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleSystem();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_SYSTEM_MEMBERS
 };
diff --git a/obj/NiParticleSystemController.cpp b/obj/NiParticleSystemController.cpp
index a14e7b58..ad6affc2 100644
--- a/obj/NiParticleSystemController.cpp
+++ b/obj/NiParticleSystemController.cpp
@@ -11,7 +11,7 @@ NiParticleSystemController::NiParticleSystemController() NI_PARTICLE_SYSTEM_CONT
 
 NiParticleSystemController::~NiParticleSystemController() {}
 
-void NiParticleSystemController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystemController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiParticleSystemController::asString( bool verbose ) const {
 	NI_PARTICLE_SYSTEM_CONTROLLER_STRING
 }
 
-void NiParticleSystemController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticleSystemController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLE_SYSTEM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiParticleSystemController.h b/obj/NiParticleSystemController.h
index 47284e31..4027f270 100644
--- a/obj/NiParticleSystemController.h
+++ b/obj/NiParticleSystemController.h
@@ -20,10 +20,11 @@ public:
 	~NiParticleSystemController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLE_SYSTEM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiParticles.cpp b/obj/NiParticles.cpp
index b1305e1c..205ceab5 100644
--- a/obj/NiParticles.cpp
+++ b/obj/NiParticles.cpp
@@ -10,7 +10,7 @@ NiParticles::NiParticles() NI_PARTICLES_CONSTRUCT {}
 
 NiParticles::~NiParticles() {}
 
-void NiParticles::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticles::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticles::asString( bool verbose ) const {
 	NI_PARTICLES_STRING
 }
 
-void NiParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_FIXLINKS
 }
 
diff --git a/obj/NiParticles.h b/obj/NiParticles.h
index 578afcb9..0cc486b5 100644
--- a/obj/NiParticles.h
+++ b/obj/NiParticles.h
@@ -20,10 +20,11 @@ public:
 	~NiParticles();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLES_MEMBERS
 };
diff --git a/obj/NiParticlesData.cpp b/obj/NiParticlesData.cpp
index 726eda94..e04b1cde 100644
--- a/obj/NiParticlesData.cpp
+++ b/obj/NiParticlesData.cpp
@@ -10,7 +10,7 @@ NiParticlesData::NiParticlesData() NI_PARTICLES_DATA_CONSTRUCT {}
 
 NiParticlesData::~NiParticlesData() {}
 
-void NiParticlesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiParticlesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiParticlesData::asString( bool verbose ) const {
 	NI_PARTICLES_DATA_STRING
 }
 
-void NiParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PARTICLES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiParticlesData.h b/obj/NiParticlesData.h
index 2ac42bdb..04683b18 100644
--- a/obj/NiParticlesData.h
+++ b/obj/NiParticlesData.h
@@ -20,10 +20,11 @@ public:
 	~NiParticlesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PARTICLES_DATA_MEMBERS
 };
diff --git a/obj/NiPathController.cpp b/obj/NiPathController.cpp
index f188600a..610169c3 100644
--- a/obj/NiPathController.cpp
+++ b/obj/NiPathController.cpp
@@ -12,7 +12,7 @@ NiPathController::NiPathController() NI_PATH_CONTROLLER_CONSTRUCT {}
 
 NiPathController::~NiPathController() {}
 
-void NiPathController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPathController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_CONTROLLER_READ
 }
 
@@ -24,7 +24,7 @@ string NiPathController::asString( bool verbose ) const {
 	NI_PATH_CONTROLLER_STRING
 }
 
-void NiPathController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPathController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiPathController.h b/obj/NiPathController.h
index 7dff56c1..bf26ab62 100644
--- a/obj/NiPathController.h
+++ b/obj/NiPathController.h
@@ -20,10 +20,11 @@ public:
 	~NiPathController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PATH_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiPathInterpolator.cpp b/obj/NiPathInterpolator.cpp
index 2b22dcac..6a4e66da 100644
--- a/obj/NiPathInterpolator.cpp
+++ b/obj/NiPathInterpolator.cpp
@@ -12,7 +12,7 @@ NiPathInterpolator::NiPathInterpolator() NI_PATH_INTERPOLATOR_CONSTRUCT {}
 
 NiPathInterpolator::~NiPathInterpolator() {}
 
-void NiPathInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPathInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_INTERPOLATOR_READ
 }
 
@@ -24,7 +24,7 @@ string NiPathInterpolator::asString( bool verbose ) const {
 	NI_PATH_INTERPOLATOR_STRING
 }
 
-void NiPathInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPathInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PATH_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiPathInterpolator.h b/obj/NiPathInterpolator.h
index 96dff644..7bc7db14 100644
--- a/obj/NiPathInterpolator.h
+++ b/obj/NiPathInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiPathInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PATH_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiPixelData.cpp b/obj/NiPixelData.cpp
index 90175021..40d776d8 100644
--- a/obj/NiPixelData.cpp
+++ b/obj/NiPixelData.cpp
@@ -11,7 +11,7 @@ NiPixelData::NiPixelData() NI_PIXEL_DATA_CONSTRUCT {}
 
 NiPixelData::~NiPixelData() {}
 
-void NiPixelData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPixelData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PIXEL_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiPixelData::asString( bool verbose ) const {
 	NI_PIXEL_DATA_STRING
 }
 
-void NiPixelData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPixelData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PIXEL_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPixelData.h b/obj/NiPixelData.h
index 575bd74e..ded9779c 100644
--- a/obj/NiPixelData.h
+++ b/obj/NiPixelData.h
@@ -20,10 +20,11 @@ public:
 	~NiPixelData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PIXEL_DATA_MEMBERS
 };
diff --git a/obj/NiPlanarCollider.cpp b/obj/NiPlanarCollider.cpp
index 87d2b554..84ba9096 100644
--- a/obj/NiPlanarCollider.cpp
+++ b/obj/NiPlanarCollider.cpp
@@ -10,7 +10,7 @@ NiPlanarCollider::NiPlanarCollider() NI_PLANAR_COLLIDER_CONSTRUCT {}
 
 NiPlanarCollider::~NiPlanarCollider() {}
 
-void NiPlanarCollider::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPlanarCollider::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PLANAR_COLLIDER_READ
 }
 
@@ -22,7 +22,7 @@ string NiPlanarCollider::asString( bool verbose ) const {
 	NI_PLANAR_COLLIDER_STRING
 }
 
-void NiPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PLANAR_COLLIDER_FIXLINKS
 }
 
diff --git a/obj/NiPlanarCollider.h b/obj/NiPlanarCollider.h
index 5582973b..a2ec91e7 100644
--- a/obj/NiPlanarCollider.h
+++ b/obj/NiPlanarCollider.h
@@ -20,10 +20,11 @@ public:
 	~NiPlanarCollider();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PLANAR_COLLIDER_MEMBERS
 };
diff --git a/obj/NiPoint3Interpolator.cpp b/obj/NiPoint3Interpolator.cpp
index 9f1dc1b7..29e1d8b3 100644
--- a/obj/NiPoint3Interpolator.cpp
+++ b/obj/NiPoint3Interpolator.cpp
@@ -11,7 +11,7 @@ NiPoint3Interpolator::NiPoint3Interpolator() NI_POINT3_INTERPOLATOR_CONSTRUCT {}
 
 NiPoint3Interpolator::~NiPoint3Interpolator() {}
 
-void NiPoint3Interpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPoint3Interpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT3_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiPoint3Interpolator::asString( bool verbose ) const {
 	NI_POINT3_INTERPOLATOR_STRING
 }
 
-void NiPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT3_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiPoint3Interpolator.h b/obj/NiPoint3Interpolator.h
index b90d3fb5..4428935d 100644
--- a/obj/NiPoint3Interpolator.h
+++ b/obj/NiPoint3Interpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiPoint3Interpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_POINT3_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiPointLight.cpp b/obj/NiPointLight.cpp
index 4973c702..8b7b5f74 100644
--- a/obj/NiPointLight.cpp
+++ b/obj/NiPointLight.cpp
@@ -10,7 +10,7 @@ NiPointLight::NiPointLight() NI_POINT_LIGHT_CONSTRUCT {}
 
 NiPointLight::~NiPointLight() {}
 
-void NiPointLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPointLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiPointLight::asString( bool verbose ) const {
 	NI_POINT_LIGHT_STRING
 }
 
-void NiPointLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPointLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_POINT_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiPointLight.h b/obj/NiPointLight.h
index dbd9a40b..d0987829 100644
--- a/obj/NiPointLight.h
+++ b/obj/NiPointLight.h
@@ -20,10 +20,11 @@ public:
 	~NiPointLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_POINT_LIGHT_MEMBERS
 };
diff --git a/obj/NiPosData.cpp b/obj/NiPosData.cpp
index 6f8ddd89..1109f8a1 100644
--- a/obj/NiPosData.cpp
+++ b/obj/NiPosData.cpp
@@ -10,7 +10,7 @@ NiPosData::NiPosData() NI_POS_DATA_CONSTRUCT {}
 
 NiPosData::~NiPosData() {}
 
-void NiPosData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiPosData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_POS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiPosData::asString( bool verbose ) const {
 	NI_POS_DATA_STRING
 }
 
-void NiPosData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiPosData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_POS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiPosData.h b/obj/NiPosData.h
index 5aeb3b92..6e5409a3 100644
--- a/obj/NiPosData.h
+++ b/obj/NiPosData.h
@@ -20,10 +20,11 @@ public:
 	~NiPosData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_POS_DATA_MEMBERS
 };
diff --git a/obj/NiProperty.cpp b/obj/NiProperty.cpp
index e6c4881b..4660cc5f 100644
--- a/obj/NiProperty.cpp
+++ b/obj/NiProperty.cpp
@@ -10,7 +10,7 @@ NiProperty::NiProperty() NI_PROPERTY_CONSTRUCT {}
 
 NiProperty::~NiProperty() {}
 
-void NiProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiProperty::asString( bool verbose ) const {
 	NI_PROPERTY_STRING
 }
 
-void NiProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiProperty.h b/obj/NiProperty.h
index 0d5b1aa4..7437faa6 100644
--- a/obj/NiProperty.h
+++ b/obj/NiProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_PROPERTY_MEMBERS
 };
diff --git a/obj/NiRangeLODData.cpp b/obj/NiRangeLODData.cpp
index 07cd41db..3c49e061 100644
--- a/obj/NiRangeLODData.cpp
+++ b/obj/NiRangeLODData.cpp
@@ -10,7 +10,7 @@ NiRangeLODData::NiRangeLODData() NI_RANGE_L_O_D_DATA_CONSTRUCT {}
 
 NiRangeLODData::~NiRangeLODData() {}
 
-void NiRangeLODData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiRangeLODData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_RANGE_L_O_D_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiRangeLODData::asString( bool verbose ) const {
 	NI_RANGE_L_O_D_DATA_STRING
 }
 
-void NiRangeLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiRangeLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_RANGE_L_O_D_DATA_FIXLINKS
 }
 
diff --git a/obj/NiRangeLODData.h b/obj/NiRangeLODData.h
index ae85cc92..822a806f 100644
--- a/obj/NiRangeLODData.h
+++ b/obj/NiRangeLODData.h
@@ -20,10 +20,11 @@ public:
 	~NiRangeLODData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_RANGE_L_O_D_DATA_MEMBERS
 };
diff --git a/obj/NiRotatingParticles.cpp b/obj/NiRotatingParticles.cpp
index 1cc42065..e1c382c9 100644
--- a/obj/NiRotatingParticles.cpp
+++ b/obj/NiRotatingParticles.cpp
@@ -10,7 +10,7 @@ NiRotatingParticles::NiRotatingParticles() NI_ROTATING_PARTICLES_CONSTRUCT {}
 
 NiRotatingParticles::~NiRotatingParticles() {}
 
-void NiRotatingParticles::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticles::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_READ
 }
 
@@ -22,7 +22,7 @@ string NiRotatingParticles::asString( bool verbose ) const {
 	NI_ROTATING_PARTICLES_STRING
 }
 
-void NiRotatingParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_FIXLINKS
 }
 
diff --git a/obj/NiRotatingParticles.h b/obj/NiRotatingParticles.h
index 0ae0cb2f..f0eb702f 100644
--- a/obj/NiRotatingParticles.h
+++ b/obj/NiRotatingParticles.h
@@ -20,10 +20,11 @@ public:
 	~NiRotatingParticles();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ROTATING_PARTICLES_MEMBERS
 };
diff --git a/obj/NiRotatingParticlesData.cpp b/obj/NiRotatingParticlesData.cpp
index 1ce86dd4..bdd11fc4 100644
--- a/obj/NiRotatingParticlesData.cpp
+++ b/obj/NiRotatingParticlesData.cpp
@@ -10,7 +10,7 @@ NiRotatingParticlesData::NiRotatingParticlesData() NI_ROTATING_PARTICLES_DATA_CO
 
 NiRotatingParticlesData::~NiRotatingParticlesData() {}
 
-void NiRotatingParticlesData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticlesData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiRotatingParticlesData::asString( bool verbose ) const {
 	NI_ROTATING_PARTICLES_DATA_STRING
 }
 
-void NiRotatingParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiRotatingParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_ROTATING_PARTICLES_DATA_FIXLINKS
 }
 
diff --git a/obj/NiRotatingParticlesData.h b/obj/NiRotatingParticlesData.h
index 7715d807..dd1ee84d 100644
--- a/obj/NiRotatingParticlesData.h
+++ b/obj/NiRotatingParticlesData.h
@@ -20,10 +20,11 @@ public:
 	~NiRotatingParticlesData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_ROTATING_PARTICLES_DATA_MEMBERS
 };
diff --git a/obj/NiScreenLODData.cpp b/obj/NiScreenLODData.cpp
index aa06fff1..ab3ae7c7 100644
--- a/obj/NiScreenLODData.cpp
+++ b/obj/NiScreenLODData.cpp
@@ -10,7 +10,7 @@ NiScreenLODData::NiScreenLODData() NI_SCREEN_L_O_D_DATA_CONSTRUCT {}
 
 NiScreenLODData::~NiScreenLODData() {}
 
-void NiScreenLODData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiScreenLODData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SCREEN_L_O_D_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiScreenLODData::asString( bool verbose ) const {
 	NI_SCREEN_L_O_D_DATA_STRING
 }
 
-void NiScreenLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiScreenLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SCREEN_L_O_D_DATA_FIXLINKS
 }
 
diff --git a/obj/NiScreenLODData.h b/obj/NiScreenLODData.h
index 8cbcc0e0..a4452470 100644
--- a/obj/NiScreenLODData.h
+++ b/obj/NiScreenLODData.h
@@ -20,10 +20,11 @@ public:
 	~NiScreenLODData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SCREEN_L_O_D_DATA_MEMBERS
 };
diff --git a/obj/NiSequenceStreamHelper.cpp b/obj/NiSequenceStreamHelper.cpp
index b502690b..d8f50b3b 100644
--- a/obj/NiSequenceStreamHelper.cpp
+++ b/obj/NiSequenceStreamHelper.cpp
@@ -10,7 +10,7 @@ NiSequenceStreamHelper::NiSequenceStreamHelper() NI_SEQUENCE_STREAM_HELPER_CONST
 
 NiSequenceStreamHelper::~NiSequenceStreamHelper() {}
 
-void NiSequenceStreamHelper::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSequenceStreamHelper::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SEQUENCE_STREAM_HELPER_READ
 }
 
@@ -22,7 +22,7 @@ string NiSequenceStreamHelper::asString( bool verbose ) const {
 	NI_SEQUENCE_STREAM_HELPER_STRING
 }
 
-void NiSequenceStreamHelper::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSequenceStreamHelper::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SEQUENCE_STREAM_HELPER_FIXLINKS
 }
 
diff --git a/obj/NiSequenceStreamHelper.h b/obj/NiSequenceStreamHelper.h
index d423408c..129e5919 100644
--- a/obj/NiSequenceStreamHelper.h
+++ b/obj/NiSequenceStreamHelper.h
@@ -20,10 +20,11 @@ public:
 	~NiSequenceStreamHelper();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SEQUENCE_STREAM_HELPER_MEMBERS
 };
diff --git a/obj/NiShadeProperty.cpp b/obj/NiShadeProperty.cpp
index 800c5aee..d64f6da8 100644
--- a/obj/NiShadeProperty.cpp
+++ b/obj/NiShadeProperty.cpp
@@ -10,7 +10,7 @@ NiShadeProperty::NiShadeProperty() NI_SHADE_PROPERTY_CONSTRUCT {}
 
 NiShadeProperty::~NiShadeProperty() {}
 
-void NiShadeProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiShadeProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SHADE_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiShadeProperty::asString( bool verbose ) const {
 	NI_SHADE_PROPERTY_STRING
 }
 
-void NiShadeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiShadeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SHADE_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiShadeProperty.h b/obj/NiShadeProperty.h
index 7f40b286..db0314e0 100644
--- a/obj/NiShadeProperty.h
+++ b/obj/NiShadeProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiShadeProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SHADE_PROPERTY_MEMBERS
 };
diff --git a/obj/NiSingleInterpolatorController.cpp b/obj/NiSingleInterpolatorController.cpp
index dbac8fd0..a4f33eda 100644
--- a/obj/NiSingleInterpolatorController.cpp
+++ b/obj/NiSingleInterpolatorController.cpp
@@ -11,7 +11,7 @@ NiSingleInterpolatorController::NiSingleInterpolatorController() NI_SINGLE_INTER
 
 NiSingleInterpolatorController::~NiSingleInterpolatorController() {}
 
-void NiSingleInterpolatorController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSingleInterpolatorController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiSingleInterpolatorController::asString( bool verbose ) const {
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_STRING
 }
 
-void NiSingleInterpolatorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSingleInterpolatorController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiSingleInterpolatorController.h b/obj/NiSingleInterpolatorController.h
index dc8f4585..5c1b7f47 100644
--- a/obj/NiSingleInterpolatorController.h
+++ b/obj/NiSingleInterpolatorController.h
@@ -20,10 +20,11 @@ public:
 	~NiSingleInterpolatorController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiSkinData.cpp b/obj/NiSkinData.cpp
index 3c7122e1..9d93e368 100644
--- a/obj/NiSkinData.cpp
+++ b/obj/NiSkinData.cpp
@@ -11,7 +11,7 @@ NiSkinData::NiSkinData() NI_SKIN_DATA_CONSTRUCT {}
 
 NiSkinData::~NiSkinData() {}
 
-void NiSkinData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSkinData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_DATA_READ
 }
 
@@ -23,7 +23,7 @@ string NiSkinData::asString( bool verbose ) const {
 	NI_SKIN_DATA_STRING
 }
 
-void NiSkinData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSkinData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_DATA_FIXLINKS
 }
 
diff --git a/obj/NiSkinData.h b/obj/NiSkinData.h
index 526dca46..236b6ce4 100644
--- a/obj/NiSkinData.h
+++ b/obj/NiSkinData.h
@@ -20,10 +20,11 @@ public:
 	~NiSkinData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SKIN_DATA_MEMBERS
 };
diff --git a/obj/NiSkinInstance.cpp b/obj/NiSkinInstance.cpp
index 484df2b5..69c71145 100644
--- a/obj/NiSkinInstance.cpp
+++ b/obj/NiSkinInstance.cpp
@@ -13,7 +13,7 @@ NiSkinInstance::NiSkinInstance() NI_SKIN_INSTANCE_CONSTRUCT {}
 
 NiSkinInstance::~NiSkinInstance() {}
 
-void NiSkinInstance::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSkinInstance::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_INSTANCE_READ
 }
 
@@ -25,7 +25,7 @@ string NiSkinInstance::asString( bool verbose ) const {
 	NI_SKIN_INSTANCE_STRING
 }
 
-void NiSkinInstance::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSkinInstance::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_INSTANCE_FIXLINKS
 }
 
diff --git a/obj/NiSkinInstance.h b/obj/NiSkinInstance.h
index 5c53efe5..d6f991e6 100644
--- a/obj/NiSkinInstance.h
+++ b/obj/NiSkinInstance.h
@@ -20,10 +20,11 @@ public:
 	~NiSkinInstance();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	NiNode * SkeletonRoot() const;
 private:
diff --git a/obj/NiSkinPartition.cpp b/obj/NiSkinPartition.cpp
index 1764839e..0b968c8c 100644
--- a/obj/NiSkinPartition.cpp
+++ b/obj/NiSkinPartition.cpp
@@ -10,7 +10,7 @@ NiSkinPartition::NiSkinPartition() NI_SKIN_PARTITION_CONSTRUCT {}
 
 NiSkinPartition::~NiSkinPartition() {}
 
-void NiSkinPartition::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSkinPartition::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_PARTITION_READ
 }
 
@@ -22,7 +22,7 @@ string NiSkinPartition::asString( bool verbose ) const {
 	NI_SKIN_PARTITION_STRING
 }
 
-void NiSkinPartition::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSkinPartition::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SKIN_PARTITION_FIXLINKS
 }
 
diff --git a/obj/NiSkinPartition.h b/obj/NiSkinPartition.h
index f02126f3..38850604 100644
--- a/obj/NiSkinPartition.h
+++ b/obj/NiSkinPartition.h
@@ -20,10 +20,11 @@ public:
 	~NiSkinPartition();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SKIN_PARTITION_MEMBERS
 };
diff --git a/obj/NiSourceTexture.cpp b/obj/NiSourceTexture.cpp
index 7f222486..81151a29 100644
--- a/obj/NiSourceTexture.cpp
+++ b/obj/NiSourceTexture.cpp
@@ -11,7 +11,7 @@ NiSourceTexture::NiSourceTexture() NI_SOURCE_TEXTURE_CONSTRUCT {}
 
 NiSourceTexture::~NiSourceTexture() {}
 
-void NiSourceTexture::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSourceTexture::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SOURCE_TEXTURE_READ
 }
 
@@ -23,7 +23,7 @@ string NiSourceTexture::asString( bool verbose ) const {
 	NI_SOURCE_TEXTURE_STRING
 }
 
-void NiSourceTexture::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSourceTexture::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SOURCE_TEXTURE_FIXLINKS
 }
 
diff --git a/obj/NiSourceTexture.h b/obj/NiSourceTexture.h
index cea97a46..28670018 100644
--- a/obj/NiSourceTexture.h
+++ b/obj/NiSourceTexture.h
@@ -20,10 +20,11 @@ public:
 	~NiSourceTexture();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SOURCE_TEXTURE_MEMBERS
 };
diff --git a/obj/NiSpecularProperty.cpp b/obj/NiSpecularProperty.cpp
index d140bafe..b18100c7 100644
--- a/obj/NiSpecularProperty.cpp
+++ b/obj/NiSpecularProperty.cpp
@@ -10,7 +10,7 @@ NiSpecularProperty::NiSpecularProperty() NI_SPECULAR_PROPERTY_CONSTRUCT {}
 
 NiSpecularProperty::~NiSpecularProperty() {}
 
-void NiSpecularProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSpecularProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SPECULAR_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiSpecularProperty::asString( bool verbose ) const {
 	NI_SPECULAR_PROPERTY_STRING
 }
 
-void NiSpecularProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSpecularProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SPECULAR_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiSpecularProperty.h b/obj/NiSpecularProperty.h
index 1f8a98a9..a47ff8c3 100644
--- a/obj/NiSpecularProperty.h
+++ b/obj/NiSpecularProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiSpecularProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SPECULAR_PROPERTY_MEMBERS
 };
diff --git a/obj/NiSphericalCollider.cpp b/obj/NiSphericalCollider.cpp
index 3d57cbde..a5c30c96 100644
--- a/obj/NiSphericalCollider.cpp
+++ b/obj/NiSphericalCollider.cpp
@@ -10,7 +10,7 @@ NiSphericalCollider::NiSphericalCollider() NI_SPHERICAL_COLLIDER_CONSTRUCT {}
 
 NiSphericalCollider::~NiSphericalCollider() {}
 
-void NiSphericalCollider::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSphericalCollider::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SPHERICAL_COLLIDER_READ
 }
 
@@ -22,7 +22,7 @@ string NiSphericalCollider::asString( bool verbose ) const {
 	NI_SPHERICAL_COLLIDER_STRING
 }
 
-void NiSphericalCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSphericalCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SPHERICAL_COLLIDER_FIXLINKS
 }
 
diff --git a/obj/NiSphericalCollider.h b/obj/NiSphericalCollider.h
index 01907662..64f116ed 100644
--- a/obj/NiSphericalCollider.h
+++ b/obj/NiSphericalCollider.h
@@ -20,10 +20,11 @@ public:
 	~NiSphericalCollider();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SPHERICAL_COLLIDER_MEMBERS
 };
diff --git a/obj/NiSpotLight.cpp b/obj/NiSpotLight.cpp
index 39801cf3..15f439d1 100644
--- a/obj/NiSpotLight.cpp
+++ b/obj/NiSpotLight.cpp
@@ -10,7 +10,7 @@ NiSpotLight::NiSpotLight() NI_SPOT_LIGHT_CONSTRUCT {}
 
 NiSpotLight::~NiSpotLight() {}
 
-void NiSpotLight::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiSpotLight::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_SPOT_LIGHT_READ
 }
 
@@ -22,7 +22,7 @@ string NiSpotLight::asString( bool verbose ) const {
 	NI_SPOT_LIGHT_STRING
 }
 
-void NiSpotLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiSpotLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_SPOT_LIGHT_FIXLINKS
 }
 
diff --git a/obj/NiSpotLight.h b/obj/NiSpotLight.h
index 4bf6a27a..5f73cc9e 100644
--- a/obj/NiSpotLight.h
+++ b/obj/NiSpotLight.h
@@ -20,10 +20,11 @@ public:
 	~NiSpotLight();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_SPOT_LIGHT_MEMBERS
 };
diff --git a/obj/NiStencilProperty.cpp b/obj/NiStencilProperty.cpp
index a6012f2b..93122a18 100644
--- a/obj/NiStencilProperty.cpp
+++ b/obj/NiStencilProperty.cpp
@@ -10,7 +10,7 @@ NiStencilProperty::NiStencilProperty() NI_STENCIL_PROPERTY_CONSTRUCT {}
 
 NiStencilProperty::~NiStencilProperty() {}
 
-void NiStencilProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStencilProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STENCIL_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiStencilProperty::asString( bool verbose ) const {
 	NI_STENCIL_PROPERTY_STRING
 }
 
-void NiStencilProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStencilProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STENCIL_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiStencilProperty.h b/obj/NiStencilProperty.h
index 3bd94465..b25291d1 100644
--- a/obj/NiStencilProperty.h
+++ b/obj/NiStencilProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiStencilProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_STENCIL_PROPERTY_MEMBERS
 };
diff --git a/obj/NiStringExtraData.cpp b/obj/NiStringExtraData.cpp
index e6f2559b..ad40d005 100644
--- a/obj/NiStringExtraData.cpp
+++ b/obj/NiStringExtraData.cpp
@@ -10,7 +10,7 @@ NiStringExtraData::NiStringExtraData() NI_STRING_EXTRA_DATA_CONSTRUCT {}
 
 NiStringExtraData::~NiStringExtraData() {}
 
-void NiStringExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStringExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiStringExtraData::asString( bool verbose ) const {
 	NI_STRING_EXTRA_DATA_STRING
 }
 
-void NiStringExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStringExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiStringExtraData.h b/obj/NiStringExtraData.h
index 878b4d41..123bf359 100644
--- a/obj/NiStringExtraData.h
+++ b/obj/NiStringExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiStringExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	uint BytesRemaining() const;
 
diff --git a/obj/NiStringPalette.cpp b/obj/NiStringPalette.cpp
index ed94deaa..2cc6d8d5 100644
--- a/obj/NiStringPalette.cpp
+++ b/obj/NiStringPalette.cpp
@@ -10,7 +10,7 @@ NiStringPalette::NiStringPalette() NI_STRING_PALETTE_CONSTRUCT {}
 
 NiStringPalette::~NiStringPalette() {}
 
-void NiStringPalette::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStringPalette::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_PALETTE_READ
 }
 
@@ -22,7 +22,7 @@ string NiStringPalette::asString( bool verbose ) const {
 	NI_STRING_PALETTE_STRING
 }
 
-void NiStringPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStringPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STRING_PALETTE_FIXLINKS
 }
 
diff --git a/obj/NiStringPalette.h b/obj/NiStringPalette.h
index 0ecb63cd..db2a1524 100644
--- a/obj/NiStringPalette.h
+++ b/obj/NiStringPalette.h
@@ -20,10 +20,11 @@ public:
 	~NiStringPalette();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_STRING_PALETTE_MEMBERS
 };
diff --git a/obj/NiStringsExtraData.cpp b/obj/NiStringsExtraData.cpp
index 889759b9..e576e797 100644
--- a/obj/NiStringsExtraData.cpp
+++ b/obj/NiStringsExtraData.cpp
@@ -10,7 +10,7 @@ NiStringsExtraData::NiStringsExtraData() NI_STRINGS_EXTRA_DATA_CONSTRUCT {}
 
 NiStringsExtraData::~NiStringsExtraData() {}
 
-void NiStringsExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiStringsExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_STRINGS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiStringsExtraData::asString( bool verbose ) const {
 	NI_STRINGS_EXTRA_DATA_STRING
 }
 
-void NiStringsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiStringsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_STRINGS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiStringsExtraData.h b/obj/NiStringsExtraData.h
index 53f6d8ad..32dd987c 100644
--- a/obj/NiStringsExtraData.h
+++ b/obj/NiStringsExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiStringsExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_STRINGS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiTextKeyExtraData.cpp b/obj/NiTextKeyExtraData.cpp
index b828f81f..aaa38c2f 100644
--- a/obj/NiTextKeyExtraData.cpp
+++ b/obj/NiTextKeyExtraData.cpp
@@ -10,7 +10,7 @@ NiTextKeyExtraData::NiTextKeyExtraData() NI_TEXT_KEY_EXTRA_DATA_CONSTRUCT {}
 
 NiTextKeyExtraData::~NiTextKeyExtraData() {}
 
-void NiTextKeyExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTextKeyExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXT_KEY_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTextKeyExtraData::asString( bool verbose ) const {
 	NI_TEXT_KEY_EXTRA_DATA_STRING
 }
 
-void NiTextKeyExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTextKeyExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXT_KEY_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTextKeyExtraData.h b/obj/NiTextKeyExtraData.h
index 6a27dcb7..2250a951 100644
--- a/obj/NiTextKeyExtraData.h
+++ b/obj/NiTextKeyExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiTextKeyExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXT_KEY_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiTextureEffect.cpp b/obj/NiTextureEffect.cpp
index 4563ce78..5aff510b 100644
--- a/obj/NiTextureEffect.cpp
+++ b/obj/NiTextureEffect.cpp
@@ -11,7 +11,7 @@ NiTextureEffect::NiTextureEffect() NI_TEXTURE_EFFECT_CONSTRUCT {}
 
 NiTextureEffect::~NiTextureEffect() {}
 
-void NiTextureEffect::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTextureEffect::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_EFFECT_READ
 }
 
@@ -23,7 +23,7 @@ string NiTextureEffect::asString( bool verbose ) const {
 	NI_TEXTURE_EFFECT_STRING
 }
 
-void NiTextureEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTextureEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_EFFECT_FIXLINKS
 }
 
diff --git a/obj/NiTextureEffect.h b/obj/NiTextureEffect.h
index 383eb1b6..322ddc85 100644
--- a/obj/NiTextureEffect.h
+++ b/obj/NiTextureEffect.h
@@ -20,10 +20,11 @@ public:
 	~NiTextureEffect();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXTURE_EFFECT_MEMBERS
 };
diff --git a/obj/NiTextureTransformController.cpp b/obj/NiTextureTransformController.cpp
index 93f81fa7..0e5b584d 100644
--- a/obj/NiTextureTransformController.cpp
+++ b/obj/NiTextureTransformController.cpp
@@ -11,7 +11,7 @@ NiTextureTransformController::NiTextureTransformController() NI_TEXTURE_TRANSFOR
 
 NiTextureTransformController::~NiTextureTransformController() {}
 
-void NiTextureTransformController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTextureTransformController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_TRANSFORM_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiTextureTransformController::asString( bool verbose ) const {
 	NI_TEXTURE_TRANSFORM_CONTROLLER_STRING
 }
 
-void NiTextureTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTextureTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURE_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiTextureTransformController.h b/obj/NiTextureTransformController.h
index c47d4bda..37b3414c 100644
--- a/obj/NiTextureTransformController.h
+++ b/obj/NiTextureTransformController.h
@@ -20,10 +20,11 @@ public:
 	~NiTextureTransformController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXTURE_TRANSFORM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiTexturingProperty.cpp b/obj/NiTexturingProperty.cpp
index a4f2bf1e..55c316a6 100644
--- a/obj/NiTexturingProperty.cpp
+++ b/obj/NiTexturingProperty.cpp
@@ -11,7 +11,7 @@ NiTexturingProperty::NiTexturingProperty() NI_TEXTURING_PROPERTY_CONSTRUCT {}
 
 NiTexturingProperty::~NiTexturingProperty() {}
 
-void NiTexturingProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTexturingProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURING_PROPERTY_READ
 }
 
@@ -23,7 +23,7 @@ string NiTexturingProperty::asString( bool verbose ) const {
 	NI_TEXTURING_PROPERTY_STRING
 }
 
-void NiTexturingProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTexturingProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TEXTURING_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiTexturingProperty.h b/obj/NiTexturingProperty.h
index 90b1cb4c..729f6a59 100644
--- a/obj/NiTexturingProperty.h
+++ b/obj/NiTexturingProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiTexturingProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TEXTURING_PROPERTY_MEMBERS
 };
diff --git a/obj/NiTimeController.cpp b/obj/NiTimeController.cpp
index 2c64c3aa..4682e5ac 100644
--- a/obj/NiTimeController.cpp
+++ b/obj/NiTimeController.cpp
@@ -10,7 +10,7 @@ NiTimeController::NiTimeController() NI_TIME_CONTROLLER_CONSTRUCT {}
 
 NiTimeController::~NiTimeController() {}
 
-void NiTimeController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTimeController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TIME_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiTimeController::asString( bool verbose ) const {
 	NI_TIME_CONTROLLER_STRING
 }
 
-void NiTimeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTimeController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TIME_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiTimeController.h b/obj/NiTimeController.h
index a40a950f..3deedec3 100644
--- a/obj/NiTimeController.h
+++ b/obj/NiTimeController.h
@@ -20,10 +20,11 @@ public:
 	~NiTimeController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TIME_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiTransformController.cpp b/obj/NiTransformController.cpp
index fb013818..c7db92cb 100644
--- a/obj/NiTransformController.cpp
+++ b/obj/NiTransformController.cpp
@@ -10,7 +10,7 @@ NiTransformController::NiTransformController() NI_TRANSFORM_CONTROLLER_CONSTRUCT
 
 NiTransformController::~NiTransformController() {}
 
-void NiTransformController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTransformController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string NiTransformController::asString( bool verbose ) const {
 	NI_TRANSFORM_CONTROLLER_STRING
 }
 
-void NiTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTransformController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiTransformController.h b/obj/NiTransformController.h
index 62b262f5..5750565f 100644
--- a/obj/NiTransformController.h
+++ b/obj/NiTransformController.h
@@ -20,10 +20,11 @@ public:
 	~NiTransformController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRANSFORM_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiTransformData.cpp b/obj/NiTransformData.cpp
index ca37afd0..b757eae0 100644
--- a/obj/NiTransformData.cpp
+++ b/obj/NiTransformData.cpp
@@ -10,7 +10,7 @@ NiTransformData::NiTransformData() NI_TRANSFORM_DATA_CONSTRUCT {}
 
 NiTransformData::~NiTransformData() {}
 
-void NiTransformData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTransformData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTransformData::asString( bool verbose ) const {
 	NI_TRANSFORM_DATA_STRING
 }
 
-void NiTransformData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTransformData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTransformData.h b/obj/NiTransformData.h
index c2e05fc0..99699723 100644
--- a/obj/NiTransformData.h
+++ b/obj/NiTransformData.h
@@ -20,10 +20,11 @@ public:
 	~NiTransformData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRANSFORM_DATA_MEMBERS
 };
diff --git a/obj/NiTransformInterpolator.cpp b/obj/NiTransformInterpolator.cpp
index cd4f5dfe..dcbb54e1 100644
--- a/obj/NiTransformInterpolator.cpp
+++ b/obj/NiTransformInterpolator.cpp
@@ -11,7 +11,7 @@ NiTransformInterpolator::NiTransformInterpolator() NI_TRANSFORM_INTERPOLATOR_CON
 
 NiTransformInterpolator::~NiTransformInterpolator() {}
 
-void NiTransformInterpolator::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTransformInterpolator::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_INTERPOLATOR_READ
 }
 
@@ -23,7 +23,7 @@ string NiTransformInterpolator::asString( bool verbose ) const {
 	NI_TRANSFORM_INTERPOLATOR_STRING
 }
 
-void NiTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
diff --git a/obj/NiTransformInterpolator.h b/obj/NiTransformInterpolator.h
index ef512042..bc71f0ec 100644
--- a/obj/NiTransformInterpolator.h
+++ b/obj/NiTransformInterpolator.h
@@ -20,10 +20,11 @@ public:
 	~NiTransformInterpolator();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRANSFORM_INTERPOLATOR_MEMBERS
 };
diff --git a/obj/NiTriBasedGeom.cpp b/obj/NiTriBasedGeom.cpp
index f16e65c4..9847528c 100644
--- a/obj/NiTriBasedGeom.cpp
+++ b/obj/NiTriBasedGeom.cpp
@@ -12,7 +12,7 @@ NiTriBasedGeom::NiTriBasedGeom() NI_TRI_BASED_GEOM_CONSTRUCT {}
 
 NiTriBasedGeom::~NiTriBasedGeom() {}
 
-void NiTriBasedGeom::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriBasedGeom::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_BASED_GEOM_READ
 }
 
@@ -24,7 +24,7 @@ string NiTriBasedGeom::asString( bool verbose ) const {
 	NI_TRI_BASED_GEOM_STRING
 }
 
-void NiTriBasedGeom::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriBasedGeom::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_BASED_GEOM_FIXLINKS
 }
 
diff --git a/obj/NiTriBasedGeom.h b/obj/NiTriBasedGeom.h
index f88fc20e..ea565b1e 100644
--- a/obj/NiTriBasedGeom.h
+++ b/obj/NiTriBasedGeom.h
@@ -20,10 +20,11 @@ public:
 	~NiTriBasedGeom();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	Vector3 Center() const;
 	float Radius() const;
diff --git a/obj/NiTriShape.cpp b/obj/NiTriShape.cpp
index 6f0e62ce..ce256695 100644
--- a/obj/NiTriShape.cpp
+++ b/obj/NiTriShape.cpp
@@ -10,7 +10,7 @@ NiTriShape::NiTriShape() NI_TRI_SHAPE_CONSTRUCT {}
 
 NiTriShape::~NiTriShape() {}
 
-void NiTriShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriShape::asString( bool verbose ) const {
 	NI_TRI_SHAPE_STRING
 }
 
-void NiTriShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_FIXLINKS
 }
 
diff --git a/obj/NiTriShape.h b/obj/NiTriShape.h
index fe28b1bd..899df250 100644
--- a/obj/NiTriShape.h
+++ b/obj/NiTriShape.h
@@ -20,10 +20,11 @@ public:
 	~NiTriShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_SHAPE_MEMBERS
 };
diff --git a/obj/NiTriShapeData.cpp b/obj/NiTriShapeData.cpp
index d4264124..e9be9574 100644
--- a/obj/NiTriShapeData.cpp
+++ b/obj/NiTriShapeData.cpp
@@ -10,7 +10,7 @@ NiTriShapeData::NiTriShapeData() NI_TRI_SHAPE_DATA_CONSTRUCT {}
 
 NiTriShapeData::~NiTriShapeData() {}
 
-void NiTriShapeData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriShapeData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriShapeData::asString( bool verbose ) const {
 	NI_TRI_SHAPE_DATA_STRING
 }
 
-void NiTriShapeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriShapeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_SHAPE_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTriShapeData.h b/obj/NiTriShapeData.h
index 6bd84ac1..8a17bc7c 100644
--- a/obj/NiTriShapeData.h
+++ b/obj/NiTriShapeData.h
@@ -20,10 +20,11 @@ public:
 	~NiTriShapeData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_SHAPE_DATA_MEMBERS
 };
diff --git a/obj/NiTriStrips.cpp b/obj/NiTriStrips.cpp
index e6538486..60cf1a29 100644
--- a/obj/NiTriStrips.cpp
+++ b/obj/NiTriStrips.cpp
@@ -10,7 +10,7 @@ NiTriStrips::NiTriStrips() NI_TRI_STRIPS_CONSTRUCT {}
 
 NiTriStrips::~NiTriStrips() {}
 
-void NiTriStrips::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriStrips::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriStrips::asString( bool verbose ) const {
 	NI_TRI_STRIPS_STRING
 }
 
-void NiTriStrips::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriStrips::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_FIXLINKS
 }
 
diff --git a/obj/NiTriStrips.h b/obj/NiTriStrips.h
index c1a03c1a..e4f93bb1 100644
--- a/obj/NiTriStrips.h
+++ b/obj/NiTriStrips.h
@@ -20,10 +20,11 @@ public:
 	~NiTriStrips();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_STRIPS_MEMBERS
 };
diff --git a/obj/NiTriStripsData.cpp b/obj/NiTriStripsData.cpp
index 20c4a24c..54af6909 100644
--- a/obj/NiTriStripsData.cpp
+++ b/obj/NiTriStripsData.cpp
@@ -10,7 +10,7 @@ NiTriStripsData::NiTriStripsData() NI_TRI_STRIPS_DATA_CONSTRUCT {}
 
 NiTriStripsData::~NiTriStripsData() {}
 
-void NiTriStripsData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiTriStripsData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiTriStripsData::asString( bool verbose ) const {
 	NI_TRI_STRIPS_DATA_STRING
 }
 
-void NiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_TRI_STRIPS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiTriStripsData.h b/obj/NiTriStripsData.h
index 1ee5fd3e..3c380a0f 100644
--- a/obj/NiTriStripsData.h
+++ b/obj/NiTriStripsData.h
@@ -20,10 +20,11 @@ public:
 	~NiTriStripsData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_TRI_STRIPS_DATA_MEMBERS
 };
diff --git a/obj/NiUVController.cpp b/obj/NiUVController.cpp
index e4e0a507..86f39c5f 100644
--- a/obj/NiUVController.cpp
+++ b/obj/NiUVController.cpp
@@ -11,7 +11,7 @@ NiUVController::NiUVController() NI_U_V_CONTROLLER_CONSTRUCT {}
 
 NiUVController::~NiUVController() {}
 
-void NiUVController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiUVController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiUVController::asString( bool verbose ) const {
 	NI_U_V_CONTROLLER_STRING
 }
 
-void NiUVController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiUVController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiUVController.h b/obj/NiUVController.h
index 564a721d..ecf9e137 100644
--- a/obj/NiUVController.h
+++ b/obj/NiUVController.h
@@ -20,10 +20,11 @@ public:
 	~NiUVController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_U_V_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiUVData.cpp b/obj/NiUVData.cpp
index 6c73f66f..632ded00 100644
--- a/obj/NiUVData.cpp
+++ b/obj/NiUVData.cpp
@@ -10,7 +10,7 @@ NiUVData::NiUVData() NI_U_V_DATA_CONSTRUCT {}
 
 NiUVData::~NiUVData() {}
 
-void NiUVData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiUVData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiUVData::asString( bool verbose ) const {
 	NI_U_V_DATA_STRING
 }
 
-void NiUVData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiUVData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_U_V_DATA_FIXLINKS
 }
 
diff --git a/obj/NiUVData.h b/obj/NiUVData.h
index 545ba7d2..bbaf7c80 100644
--- a/obj/NiUVData.h
+++ b/obj/NiUVData.h
@@ -20,10 +20,11 @@ public:
 	~NiUVData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_U_V_DATA_MEMBERS
 };
diff --git a/obj/NiVectorExtraData.cpp b/obj/NiVectorExtraData.cpp
index 9cb68b8b..5e313be3 100644
--- a/obj/NiVectorExtraData.cpp
+++ b/obj/NiVectorExtraData.cpp
@@ -10,7 +10,7 @@ NiVectorExtraData::NiVectorExtraData() NI_VECTOR_EXTRA_DATA_CONSTRUCT {}
 
 NiVectorExtraData::~NiVectorExtraData() {}
 
-void NiVectorExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVectorExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VECTOR_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiVectorExtraData::asString( bool verbose ) const {
 	NI_VECTOR_EXTRA_DATA_STRING
 }
 
-void NiVectorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVectorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VECTOR_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiVectorExtraData.h b/obj/NiVectorExtraData.h
index fe7ca061..dfaace00 100644
--- a/obj/NiVectorExtraData.h
+++ b/obj/NiVectorExtraData.h
@@ -20,10 +20,11 @@ public:
 	~NiVectorExtraData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VECTOR_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiVertWeightsExtraData.cpp b/obj/NiVertWeightsExtraData.cpp
index 447cb11b..03df727d 100644
--- a/obj/NiVertWeightsExtraData.cpp
+++ b/obj/NiVertWeightsExtraData.cpp
@@ -10,7 +10,7 @@ NiVertWeightsExtraData::NiVertWeightsExtraData() NI_VERT_WEIGHTS_EXTRA_DATA_CONS
 
 NiVertWeightsExtraData::~NiVertWeightsExtraData() {}
 
-void NiVertWeightsExtraData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVertWeightsExtraData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VERT_WEIGHTS_EXTRA_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiVertWeightsExtraData::asString( bool verbose ) const {
 	NI_VERT_WEIGHTS_EXTRA_DATA_STRING
 }
 
-void NiVertWeightsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVertWeightsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VERT_WEIGHTS_EXTRA_DATA_FIXLINKS
 }
 
diff --git a/obj/NiVertWeightsExtraData.h b/obj/NiVertWeightsExtraData.h
index 2400e42f..f6dec1b7 100644
--- a/obj/NiVertWeightsExtraData.h
+++ b/obj/NiVertWeightsExtraData.h
@@ -19,11 +19,12 @@ public:
 	NiVertWeightsExtraData();
 	~NiVertWeightsExtraData();
 	//Run-Time Type Information
-	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	static const Type
+		TYPE; virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VERT_WEIGHTS_EXTRA_DATA_MEMBERS
 };
diff --git a/obj/NiVertexColorProperty.cpp b/obj/NiVertexColorProperty.cpp
index a198d9ca..548646d8 100644
--- a/obj/NiVertexColorProperty.cpp
+++ b/obj/NiVertexColorProperty.cpp
@@ -10,7 +10,7 @@ NiVertexColorProperty::NiVertexColorProperty() NI_VERTEX_COLOR_PROPERTY_CONSTRUC
 
 NiVertexColorProperty::~NiVertexColorProperty() {}
 
-void NiVertexColorProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVertexColorProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VERTEX_COLOR_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiVertexColorProperty::asString( bool verbose ) const {
 	NI_VERTEX_COLOR_PROPERTY_STRING
 }
 
-void NiVertexColorProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVertexColorProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VERTEX_COLOR_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiVertexColorProperty.h b/obj/NiVertexColorProperty.h
index 560c17da..e2ffb801 100644
--- a/obj/NiVertexColorProperty.h
+++ b/obj/NiVertexColorProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiVertexColorProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VERTEX_COLOR_PROPERTY_MEMBERS
 };
diff --git a/obj/NiVisController.cpp b/obj/NiVisController.cpp
index 9fa64e18..ecafaa10 100644
--- a/obj/NiVisController.cpp
+++ b/obj/NiVisController.cpp
@@ -11,7 +11,7 @@ NiVisController::NiVisController() NI_VIS_CONTROLLER_CONSTRUCT {}
 
 NiVisController::~NiVisController() {}
 
-void NiVisController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVisController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_CONTROLLER_READ
 }
 
@@ -23,7 +23,7 @@ string NiVisController::asString( bool verbose ) const {
 	NI_VIS_CONTROLLER_STRING
 }
 
-void NiVisController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVisController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/NiVisController.h b/obj/NiVisController.h
index 354c5ddd..e999ffee 100644
--- a/obj/NiVisController.h
+++ b/obj/NiVisController.h
@@ -20,10 +20,11 @@ public:
 	~NiVisController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VIS_CONTROLLER_MEMBERS
 };
diff --git a/obj/NiVisData.cpp b/obj/NiVisData.cpp
index 114262ed..02c5e962 100644
--- a/obj/NiVisData.cpp
+++ b/obj/NiVisData.cpp
@@ -10,7 +10,7 @@ NiVisData::NiVisData() NI_VIS_DATA_CONSTRUCT {}
 
 NiVisData::~NiVisData() {}
 
-void NiVisData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiVisData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string NiVisData::asString( bool verbose ) const {
 	NI_VIS_DATA_STRING
 }
 
-void NiVisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiVisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_VIS_DATA_FIXLINKS
 }
 
diff --git a/obj/NiVisData.h b/obj/NiVisData.h
index 3468fe27..6c2d61e0 100644
--- a/obj/NiVisData.h
+++ b/obj/NiVisData.h
@@ -20,10 +20,11 @@ public:
 	~NiVisData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_VIS_DATA_MEMBERS
 };
diff --git a/obj/NiWireframeProperty.cpp b/obj/NiWireframeProperty.cpp
index 48ddb1ce..f5aebacc 100644
--- a/obj/NiWireframeProperty.cpp
+++ b/obj/NiWireframeProperty.cpp
@@ -10,7 +10,7 @@ NiWireframeProperty::NiWireframeProperty() NI_WIREFRAME_PROPERTY_CONSTRUCT {}
 
 NiWireframeProperty::~NiWireframeProperty() {}
 
-void NiWireframeProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiWireframeProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_WIREFRAME_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiWireframeProperty::asString( bool verbose ) const {
 	NI_WIREFRAME_PROPERTY_STRING
 }
 
-void NiWireframeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiWireframeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_WIREFRAME_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiWireframeProperty.h b/obj/NiWireframeProperty.h
index b1fea2ec..beb29df0 100644
--- a/obj/NiWireframeProperty.h
+++ b/obj/NiWireframeProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiWireframeProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_WIREFRAME_PROPERTY_MEMBERS
 };
diff --git a/obj/NiZBufferProperty.cpp b/obj/NiZBufferProperty.cpp
index 825887cb..80b4882c 100644
--- a/obj/NiZBufferProperty.cpp
+++ b/obj/NiZBufferProperty.cpp
@@ -10,7 +10,7 @@ NiZBufferProperty::NiZBufferProperty() NI_Z_BUFFER_PROPERTY_CONSTRUCT {}
 
 NiZBufferProperty::~NiZBufferProperty() {}
 
-void NiZBufferProperty::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void NiZBufferProperty::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	NI_Z_BUFFER_PROPERTY_READ
 }
 
@@ -22,7 +22,7 @@ string NiZBufferProperty::asString( bool verbose ) const {
 	NI_Z_BUFFER_PROPERTY_STRING
 }
 
-void NiZBufferProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void NiZBufferProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	NI_Z_BUFFER_PROPERTY_FIXLINKS
 }
 
diff --git a/obj/NiZBufferProperty.h b/obj/NiZBufferProperty.h
index fdc9c95e..a7b0f99a 100644
--- a/obj/NiZBufferProperty.h
+++ b/obj/NiZBufferProperty.h
@@ -20,10 +20,11 @@ public:
 	~NiZBufferProperty();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	NI_Z_BUFFER_PROPERTY_MEMBERS
 };
diff --git a/obj/RootCollisionNode.cpp b/obj/RootCollisionNode.cpp
index abee6c25..4603f6b3 100644
--- a/obj/RootCollisionNode.cpp
+++ b/obj/RootCollisionNode.cpp
@@ -10,7 +10,7 @@ RootCollisionNode::RootCollisionNode() ROOT_COLLISION_NODE_CONSTRUCT {}
 
 RootCollisionNode::~RootCollisionNode() {}
 
-void RootCollisionNode::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void RootCollisionNode::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	ROOT_COLLISION_NODE_READ
 }
 
@@ -22,7 +22,7 @@ string RootCollisionNode::asString( bool verbose ) const {
 	ROOT_COLLISION_NODE_STRING
 }
 
-void RootCollisionNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void RootCollisionNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	ROOT_COLLISION_NODE_FIXLINKS
 }
 
diff --git a/obj/RootCollisionNode.h b/obj/RootCollisionNode.h
index 03f863d2..efdea3c5 100644
--- a/obj/RootCollisionNode.h
+++ b/obj/RootCollisionNode.h
@@ -20,10 +20,11 @@ public:
 	~RootCollisionNode();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	ROOT_COLLISION_NODE_MEMBERS
 };
diff --git a/obj/TriBasedGeomData.cpp b/obj/TriBasedGeomData.cpp
index 04e5fab0..705c9c67 100644
--- a/obj/TriBasedGeomData.cpp
+++ b/obj/TriBasedGeomData.cpp
@@ -10,7 +10,7 @@ TriBasedGeomData::TriBasedGeomData() TRI_BASED_GEOM_DATA_CONSTRUCT {}
 
 TriBasedGeomData::~TriBasedGeomData() {}
 
-void TriBasedGeomData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void TriBasedGeomData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	TRI_BASED_GEOM_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string TriBasedGeomData::asString( bool verbose ) const {
 	TRI_BASED_GEOM_DATA_STRING
 }
 
-void TriBasedGeomData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void TriBasedGeomData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	TRI_BASED_GEOM_DATA_FIXLINKS
 }
 
diff --git a/obj/TriBasedGeomData.h b/obj/TriBasedGeomData.h
index a0156831..89fdaebb 100644
--- a/obj/TriBasedGeomData.h
+++ b/obj/TriBasedGeomData.h
@@ -20,10 +20,11 @@ public:
 	~TriBasedGeomData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 	
 	Vector3 Center() const;
 	float Radius() const;
diff --git a/obj/bhkBlendCollisionObject.cpp b/obj/bhkBlendCollisionObject.cpp
index 27214d78..7adf0260 100644
--- a/obj/bhkBlendCollisionObject.cpp
+++ b/obj/bhkBlendCollisionObject.cpp
@@ -10,7 +10,7 @@ bhkBlendCollisionObject::bhkBlendCollisionObject() BHK_BLEND_COLLISION_OBJECT_CO
 
 bhkBlendCollisionObject::~bhkBlendCollisionObject() {}
 
-void bhkBlendCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkBlendCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkBlendCollisionObject::asString( bool verbose ) const {
 	BHK_BLEND_COLLISION_OBJECT_STRING
 }
 
-void bhkBlendCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkBlendCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkBlendCollisionObject.h b/obj/bhkBlendCollisionObject.h
index a82460c0..fa31c24f 100644
--- a/obj/bhkBlendCollisionObject.h
+++ b/obj/bhkBlendCollisionObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkBlendCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_BLEND_COLLISION_OBJECT_MEMBERS
 };
diff --git a/obj/bhkBlendController.cpp b/obj/bhkBlendController.cpp
index d309565f..345c7a86 100644
--- a/obj/bhkBlendController.cpp
+++ b/obj/bhkBlendController.cpp
@@ -10,7 +10,7 @@ bhkBlendController::bhkBlendController() BHK_BLEND_CONTROLLER_CONSTRUCT {}
 
 bhkBlendController::~bhkBlendController() {}
 
-void bhkBlendController::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkBlendController::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_CONTROLLER_READ
 }
 
@@ -22,7 +22,7 @@ string bhkBlendController::asString( bool verbose ) const {
 	BHK_BLEND_CONTROLLER_STRING
 }
 
-void bhkBlendController::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkBlendController::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_BLEND_CONTROLLER_FIXLINKS
 }
 
diff --git a/obj/bhkBlendController.h b/obj/bhkBlendController.h
index 34a11c51..133581a1 100644
--- a/obj/bhkBlendController.h
+++ b/obj/bhkBlendController.h
@@ -20,10 +20,11 @@ public:
 	~bhkBlendController();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_BLEND_CONTROLLER_MEMBERS
 };
diff --git a/obj/bhkBoxShape.cpp b/obj/bhkBoxShape.cpp
index ddf34e16..25498684 100644
--- a/obj/bhkBoxShape.cpp
+++ b/obj/bhkBoxShape.cpp
@@ -10,7 +10,7 @@ bhkBoxShape::bhkBoxShape() BHK_BOX_SHAPE_CONSTRUCT {}
 
 bhkBoxShape::~bhkBoxShape() {}
 
-void bhkBoxShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkBoxShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_BOX_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkBoxShape::asString( bool verbose ) const {
 	BHK_BOX_SHAPE_STRING
 }
 
-void bhkBoxShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkBoxShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_BOX_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkBoxShape.h b/obj/bhkBoxShape.h
index ef206674..c5c2ccbc 100644
--- a/obj/bhkBoxShape.h
+++ b/obj/bhkBoxShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkBoxShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_BOX_SHAPE_MEMBERS
 };
diff --git a/obj/bhkCapsuleShape.cpp b/obj/bhkCapsuleShape.cpp
index 00046dc5..f2f8549d 100644
--- a/obj/bhkCapsuleShape.cpp
+++ b/obj/bhkCapsuleShape.cpp
@@ -10,7 +10,7 @@ bhkCapsuleShape::bhkCapsuleShape() BHK_CAPSULE_SHAPE_CONSTRUCT {}
 
 bhkCapsuleShape::~bhkCapsuleShape() {}
 
-void bhkCapsuleShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkCapsuleShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CAPSULE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkCapsuleShape::asString( bool verbose ) const {
 	BHK_CAPSULE_SHAPE_STRING
 }
 
-void bhkCapsuleShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkCapsuleShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CAPSULE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkCapsuleShape.h b/obj/bhkCapsuleShape.h
index 7adf103f..7395e417 100644
--- a/obj/bhkCapsuleShape.h
+++ b/obj/bhkCapsuleShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkCapsuleShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CAPSULE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkCollisionObject.cpp b/obj/bhkCollisionObject.cpp
index 5da7ae6c..54a2bf10 100644
--- a/obj/bhkCollisionObject.cpp
+++ b/obj/bhkCollisionObject.cpp
@@ -10,7 +10,7 @@ bhkCollisionObject::bhkCollisionObject() BHK_COLLISION_OBJECT_CONSTRUCT {}
 
 bhkCollisionObject::~bhkCollisionObject() {}
 
-void bhkCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkCollisionObject::asString( bool verbose ) const {
 	BHK_COLLISION_OBJECT_STRING
 }
 
-void bhkCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkCollisionObject.h b/obj/bhkCollisionObject.h
index fe5f2e65..7e99fcd5 100644
--- a/obj/bhkCollisionObject.h
+++ b/obj/bhkCollisionObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_COLLISION_OBJECT_MEMBERS
 };
diff --git a/obj/bhkConvexShape.cpp b/obj/bhkConvexShape.cpp
index eb863a6d..f25e98af 100644
--- a/obj/bhkConvexShape.cpp
+++ b/obj/bhkConvexShape.cpp
@@ -10,7 +10,7 @@ bhkConvexShape::bhkConvexShape() BHK_CONVEX_SHAPE_CONSTRUCT {}
 
 bhkConvexShape::~bhkConvexShape() {}
 
-void bhkConvexShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkConvexShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkConvexShape::asString( bool verbose ) const {
 	BHK_CONVEX_SHAPE_STRING
 }
 
-void bhkConvexShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkConvexShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkConvexShape.h b/obj/bhkConvexShape.h
index 8fdbf43c..b772a45a 100644
--- a/obj/bhkConvexShape.h
+++ b/obj/bhkConvexShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkConvexShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CONVEX_SHAPE_MEMBERS
 };
diff --git a/obj/bhkConvexTransformShape.cpp b/obj/bhkConvexTransformShape.cpp
index a781b9d7..687bbc24 100644
--- a/obj/bhkConvexTransformShape.cpp
+++ b/obj/bhkConvexTransformShape.cpp
@@ -10,7 +10,7 @@ bhkConvexTransformShape::bhkConvexTransformShape() BHK_CONVEX_TRANSFORM_SHAPE_CO
 
 bhkConvexTransformShape::~bhkConvexTransformShape() {}
 
-void bhkConvexTransformShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkConvexTransformShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_TRANSFORM_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkConvexTransformShape::asString( bool verbose ) const {
 	BHK_CONVEX_TRANSFORM_SHAPE_STRING
 }
 
-void bhkConvexTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkConvexTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_TRANSFORM_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkConvexTransformShape.h b/obj/bhkConvexTransformShape.h
index 9be7b37a..e3aa73ab 100644
--- a/obj/bhkConvexTransformShape.h
+++ b/obj/bhkConvexTransformShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkConvexTransformShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CONVEX_TRANSFORM_SHAPE_MEMBERS
 };
diff --git a/obj/bhkConvexVerticesShape.cpp b/obj/bhkConvexVerticesShape.cpp
index 932a1f47..dd098e53 100644
--- a/obj/bhkConvexVerticesShape.cpp
+++ b/obj/bhkConvexVerticesShape.cpp
@@ -10,7 +10,7 @@ bhkConvexVerticesShape::bhkConvexVerticesShape() BHK_CONVEX_VERTICES_SHAPE_CONST
 
 bhkConvexVerticesShape::~bhkConvexVerticesShape() {}
 
-void bhkConvexVerticesShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkConvexVerticesShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_VERTICES_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkConvexVerticesShape::asString( bool verbose ) const {
 	BHK_CONVEX_VERTICES_SHAPE_STRING
 }
 
-void bhkConvexVerticesShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkConvexVerticesShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_CONVEX_VERTICES_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkConvexVerticesShape.h b/obj/bhkConvexVerticesShape.h
index fc629043..49cf522e 100644
--- a/obj/bhkConvexVerticesShape.h
+++ b/obj/bhkConvexVerticesShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkConvexVerticesShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_CONVEX_VERTICES_SHAPE_MEMBERS
 };
diff --git a/obj/bhkEntity.cpp b/obj/bhkEntity.cpp
index 5839dc49..a4920f23 100644
--- a/obj/bhkEntity.cpp
+++ b/obj/bhkEntity.cpp
@@ -11,7 +11,7 @@ bhkEntity::bhkEntity() BHK_ENTITY_CONSTRUCT {}
 
 bhkEntity::~bhkEntity() {}
 
-void bhkEntity::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkEntity::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_ENTITY_READ
 }
 
@@ -23,7 +23,7 @@ string bhkEntity::asString( bool verbose ) const {
 	BHK_ENTITY_STRING
 }
 
-void bhkEntity::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkEntity::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_ENTITY_FIXLINKS
 }
 
diff --git a/obj/bhkEntity.h b/obj/bhkEntity.h
index 3f1959dc..e8678ea6 100644
--- a/obj/bhkEntity.h
+++ b/obj/bhkEntity.h
@@ -20,10 +20,11 @@ public:
 	~bhkEntity();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_ENTITY_MEMBERS
 };
diff --git a/obj/bhkHingeConstraint.cpp b/obj/bhkHingeConstraint.cpp
index 6c2d3f83..0db4e5ab 100644
--- a/obj/bhkHingeConstraint.cpp
+++ b/obj/bhkHingeConstraint.cpp
@@ -10,7 +10,7 @@ bhkHingeConstraint::bhkHingeConstraint() BHK_HINGE_CONSTRAINT_CONSTRUCT {}
 
 bhkHingeConstraint::~bhkHingeConstraint() {}
 
-void bhkHingeConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkHingeConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_HINGE_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkHingeConstraint::asString( bool verbose ) const {
 	BHK_HINGE_CONSTRAINT_STRING
 }
 
-void bhkHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_HINGE_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkHingeConstraint.h b/obj/bhkHingeConstraint.h
index b911a4fa..fa871e5b 100644
--- a/obj/bhkHingeConstraint.h
+++ b/obj/bhkHingeConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkHingeConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_HINGE_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkLimitedHingeConstraint.cpp b/obj/bhkLimitedHingeConstraint.cpp
index aa19c58b..1b5848d8 100644
--- a/obj/bhkLimitedHingeConstraint.cpp
+++ b/obj/bhkLimitedHingeConstraint.cpp
@@ -10,7 +10,7 @@ bhkLimitedHingeConstraint::bhkLimitedHingeConstraint() BHK_LIMITED_HINGE_CONSTRA
 
 bhkLimitedHingeConstraint::~bhkLimitedHingeConstraint() {}
 
-void bhkLimitedHingeConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkLimitedHingeConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIMITED_HINGE_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkLimitedHingeConstraint::asString( bool verbose ) const {
 	BHK_LIMITED_HINGE_CONSTRAINT_STRING
 }
 
-void bhkLimitedHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkLimitedHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIMITED_HINGE_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkLimitedHingeConstraint.h b/obj/bhkLimitedHingeConstraint.h
index 3253ae18..344178f4 100644
--- a/obj/bhkLimitedHingeConstraint.h
+++ b/obj/bhkLimitedHingeConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkLimitedHingeConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_LIMITED_HINGE_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkListShape.cpp b/obj/bhkListShape.cpp
index a2b6e77b..ea79b31a 100644
--- a/obj/bhkListShape.cpp
+++ b/obj/bhkListShape.cpp
@@ -11,7 +11,7 @@ bhkListShape::bhkListShape() BHK_LIST_SHAPE_CONSTRUCT {}
 
 bhkListShape::~bhkListShape() {}
 
-void bhkListShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkListShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIST_SHAPE_READ
 }
 
@@ -23,7 +23,7 @@ string bhkListShape::asString( bool verbose ) const {
 	BHK_LIST_SHAPE_STRING
 }
 
-void bhkListShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkListShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_LIST_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkListShape.h b/obj/bhkListShape.h
index 2711eb3e..a99c492c 100644
--- a/obj/bhkListShape.h
+++ b/obj/bhkListShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkListShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_LIST_SHAPE_MEMBERS
 };
diff --git a/obj/bhkMalleableConstraint.cpp b/obj/bhkMalleableConstraint.cpp
index 1bd788ed..9b59e55b 100644
--- a/obj/bhkMalleableConstraint.cpp
+++ b/obj/bhkMalleableConstraint.cpp
@@ -10,7 +10,7 @@ bhkMalleableConstraint::bhkMalleableConstraint() BHK_MALLEABLE_CONSTRAINT_CONSTR
 
 bhkMalleableConstraint::~bhkMalleableConstraint() {}
 
-void bhkMalleableConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkMalleableConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_MALLEABLE_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkMalleableConstraint::asString( bool verbose ) const {
 	BHK_MALLEABLE_CONSTRAINT_STRING
 }
 
-void bhkMalleableConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkMalleableConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_MALLEABLE_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkMalleableConstraint.h b/obj/bhkMalleableConstraint.h
index 26193e5d..e709ff02 100644
--- a/obj/bhkMalleableConstraint.h
+++ b/obj/bhkMalleableConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkMalleableConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_MALLEABLE_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkMoppBvTreeShape.cpp b/obj/bhkMoppBvTreeShape.cpp
index 0cb2129a..28864ecc 100644
--- a/obj/bhkMoppBvTreeShape.cpp
+++ b/obj/bhkMoppBvTreeShape.cpp
@@ -10,7 +10,7 @@ bhkMoppBvTreeShape::bhkMoppBvTreeShape() BHK_MOPP_BV_TREE_SHAPE_CONSTRUCT {}
 
 bhkMoppBvTreeShape::~bhkMoppBvTreeShape() {}
 
-void bhkMoppBvTreeShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkMoppBvTreeShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_MOPP_BV_TREE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkMoppBvTreeShape::asString( bool verbose ) const {
 	BHK_MOPP_BV_TREE_SHAPE_STRING
 }
 
-void bhkMoppBvTreeShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkMoppBvTreeShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_MOPP_BV_TREE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkMoppBvTreeShape.h b/obj/bhkMoppBvTreeShape.h
index 7da687e9..0bf5f534 100644
--- a/obj/bhkMoppBvTreeShape.h
+++ b/obj/bhkMoppBvTreeShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkMoppBvTreeShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_MOPP_BV_TREE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkMultiSphereShape.cpp b/obj/bhkMultiSphereShape.cpp
index 047f71d1..7add0ab9 100644
--- a/obj/bhkMultiSphereShape.cpp
+++ b/obj/bhkMultiSphereShape.cpp
@@ -10,7 +10,7 @@ bhkMultiSphereShape::bhkMultiSphereShape() BHK_MULTI_SPHERE_SHAPE_CONSTRUCT {}
 
 bhkMultiSphereShape::~bhkMultiSphereShape() {}
 
-void bhkMultiSphereShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkMultiSphereShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_MULTI_SPHERE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkMultiSphereShape::asString( bool verbose ) const {
 	BHK_MULTI_SPHERE_SHAPE_STRING
 }
 
-void bhkMultiSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkMultiSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_MULTI_SPHERE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkMultiSphereShape.h b/obj/bhkMultiSphereShape.h
index 291e7a7d..a1797584 100644
--- a/obj/bhkMultiSphereShape.h
+++ b/obj/bhkMultiSphereShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkMultiSphereShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_MULTI_SPHERE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkNiTriStripsShape.cpp b/obj/bhkNiTriStripsShape.cpp
index effb0cd7..e159287b 100644
--- a/obj/bhkNiTriStripsShape.cpp
+++ b/obj/bhkNiTriStripsShape.cpp
@@ -11,7 +11,7 @@ bhkNiTriStripsShape::bhkNiTriStripsShape() BHK_NI_TRI_STRIPS_SHAPE_CONSTRUCT {}
 
 bhkNiTriStripsShape::~bhkNiTriStripsShape() {}
 
-void bhkNiTriStripsShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkNiTriStripsShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_NI_TRI_STRIPS_SHAPE_READ
 }
 
@@ -23,7 +23,7 @@ string bhkNiTriStripsShape::asString( bool verbose ) const {
 	BHK_NI_TRI_STRIPS_SHAPE_STRING
 }
 
-void bhkNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_NI_TRI_STRIPS_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkNiTriStripsShape.h b/obj/bhkNiTriStripsShape.h
index 6b01d2d8..02c800c3 100644
--- a/obj/bhkNiTriStripsShape.h
+++ b/obj/bhkNiTriStripsShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkNiTriStripsShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_NI_TRI_STRIPS_SHAPE_MEMBERS
 };
diff --git a/obj/bhkPackedNiTriStripsShape.cpp b/obj/bhkPackedNiTriStripsShape.cpp
index 01b25a60..e6171c12 100644
--- a/obj/bhkPackedNiTriStripsShape.cpp
+++ b/obj/bhkPackedNiTriStripsShape.cpp
@@ -12,7 +12,7 @@ bhkPackedNiTriStripsShape::bhkPackedNiTriStripsShape() BHK_PACKED_NI_TRI_STRIPS_
 
 bhkPackedNiTriStripsShape::~bhkPackedNiTriStripsShape() {}
 
-void bhkPackedNiTriStripsShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkPackedNiTriStripsShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_READ
 }
 
@@ -24,7 +24,7 @@ string bhkPackedNiTriStripsShape::asString( bool verbose ) const {
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_STRING
 }
 
-void bhkPackedNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkPackedNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkPackedNiTriStripsShape.h b/obj/bhkPackedNiTriStripsShape.h
index ac9e82a8..d7c9a0cb 100644
--- a/obj/bhkPackedNiTriStripsShape.h
+++ b/obj/bhkPackedNiTriStripsShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkPackedNiTriStripsShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_MEMBERS
 };
diff --git a/obj/bhkPrismaticConstraint.cpp b/obj/bhkPrismaticConstraint.cpp
index fea2c86c..35ae2ee4 100644
--- a/obj/bhkPrismaticConstraint.cpp
+++ b/obj/bhkPrismaticConstraint.cpp
@@ -10,7 +10,7 @@ bhkPrismaticConstraint::bhkPrismaticConstraint() BHK_PRISMATIC_CONSTRAINT_CONSTR
 
 bhkPrismaticConstraint::~bhkPrismaticConstraint() {}
 
-void bhkPrismaticConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkPrismaticConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_PRISMATIC_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkPrismaticConstraint::asString( bool verbose ) const {
 	BHK_PRISMATIC_CONSTRAINT_STRING
 }
 
-void bhkPrismaticConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkPrismaticConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_PRISMATIC_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkPrismaticConstraint.h b/obj/bhkPrismaticConstraint.h
index dcccd0bd..e0fe19ae 100644
--- a/obj/bhkPrismaticConstraint.h
+++ b/obj/bhkPrismaticConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkPrismaticConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_PRISMATIC_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkRagdollConstraint.cpp b/obj/bhkRagdollConstraint.cpp
index 3d889c84..1ba2878a 100644
--- a/obj/bhkRagdollConstraint.cpp
+++ b/obj/bhkRagdollConstraint.cpp
@@ -10,7 +10,7 @@ bhkRagdollConstraint::bhkRagdollConstraint() BHK_RAGDOLL_CONSTRAINT_CONSTRUCT {}
 
 bhkRagdollConstraint::~bhkRagdollConstraint() {}
 
-void bhkRagdollConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRagdollConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_RAGDOLL_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkRagdollConstraint::asString( bool verbose ) const {
 	BHK_RAGDOLL_CONSTRAINT_STRING
 }
 
-void bhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_RAGDOLL_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkRagdollConstraint.h b/obj/bhkRagdollConstraint.h
index ae6cccf0..7aadeecd 100644
--- a/obj/bhkRagdollConstraint.h
+++ b/obj/bhkRagdollConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkRagdollConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_RAGDOLL_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkRefObject.cpp b/obj/bhkRefObject.cpp
index 485db7c6..dc4c1735 100644
--- a/obj/bhkRefObject.cpp
+++ b/obj/bhkRefObject.cpp
@@ -10,7 +10,7 @@ bhkRefObject::bhkRefObject() BHK_REF_OBJECT_CONSTRUCT {}
 
 bhkRefObject::~bhkRefObject() {}
 
-void bhkRefObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRefObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_REF_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkRefObject::asString( bool verbose ) const {
 	BHK_REF_OBJECT_STRING
 }
 
-void bhkRefObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRefObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_REF_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkRefObject.h b/obj/bhkRefObject.h
index dac4d8b1..b6b93c69 100644
--- a/obj/bhkRefObject.h
+++ b/obj/bhkRefObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkRefObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_REF_OBJECT_MEMBERS
 };
diff --git a/obj/bhkRigidBody.cpp b/obj/bhkRigidBody.cpp
index 9bdc7151..ab4cdef0 100644
--- a/obj/bhkRigidBody.cpp
+++ b/obj/bhkRigidBody.cpp
@@ -11,7 +11,7 @@ bhkRigidBody::bhkRigidBody() BHK_RIGID_BODY_CONSTRUCT {}
 
 bhkRigidBody::~bhkRigidBody() {}
 
-void bhkRigidBody::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBody::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_READ
 }
 
@@ -23,7 +23,7 @@ string bhkRigidBody::asString( bool verbose ) const {
 	BHK_RIGID_BODY_STRING
 }
 
-void bhkRigidBody::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBody::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_FIXLINKS
 }
 
diff --git a/obj/bhkRigidBody.h b/obj/bhkRigidBody.h
index 074e0471..fd1b6d59 100644
--- a/obj/bhkRigidBody.h
+++ b/obj/bhkRigidBody.h
@@ -20,10 +20,11 @@ public:
 	~bhkRigidBody();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_RIGID_BODY_MEMBERS
 };
diff --git a/obj/bhkRigidBodyT.cpp b/obj/bhkRigidBodyT.cpp
index 59bc18a1..b59120e5 100644
--- a/obj/bhkRigidBodyT.cpp
+++ b/obj/bhkRigidBodyT.cpp
@@ -10,7 +10,7 @@ bhkRigidBodyT::bhkRigidBodyT() BHK_RIGID_BODY_T_CONSTRUCT {}
 
 bhkRigidBodyT::~bhkRigidBodyT() {}
 
-void bhkRigidBodyT::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBodyT::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_T_READ
 }
 
@@ -22,7 +22,7 @@ string bhkRigidBodyT::asString( bool verbose ) const {
 	BHK_RIGID_BODY_T_STRING
 }
 
-void bhkRigidBodyT::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkRigidBodyT::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_RIGID_BODY_T_FIXLINKS
 }
 
diff --git a/obj/bhkRigidBodyT.h b/obj/bhkRigidBodyT.h
index aabc38aa..11cb7209 100644
--- a/obj/bhkRigidBodyT.h
+++ b/obj/bhkRigidBodyT.h
@@ -20,10 +20,11 @@ public:
 	~bhkRigidBodyT();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_RIGID_BODY_T_MEMBERS
 };
diff --git a/obj/bhkSPCollisionObject.cpp b/obj/bhkSPCollisionObject.cpp
index d39de7be..0347e327 100644
--- a/obj/bhkSPCollisionObject.cpp
+++ b/obj/bhkSPCollisionObject.cpp
@@ -10,7 +10,7 @@ bhkSPCollisionObject::bhkSPCollisionObject() BHK_S_P_COLLISION_OBJECT_CONSTRUCT
 
 bhkSPCollisionObject::~bhkSPCollisionObject() {}
 
-void bhkSPCollisionObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSPCollisionObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_S_P_COLLISION_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSPCollisionObject::asString( bool verbose ) const {
 	BHK_S_P_COLLISION_OBJECT_STRING
 }
 
-void bhkSPCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSPCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_S_P_COLLISION_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkSPCollisionObject.h b/obj/bhkSPCollisionObject.h
index c60fb362..c461df41 100644
--- a/obj/bhkSPCollisionObject.h
+++ b/obj/bhkSPCollisionObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkSPCollisionObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_S_P_COLLISION_OBJECT_MEMBERS
 };
diff --git a/obj/bhkSerializable.cpp b/obj/bhkSerializable.cpp
index 200da352..1d2b0d27 100644
--- a/obj/bhkSerializable.cpp
+++ b/obj/bhkSerializable.cpp
@@ -10,7 +10,7 @@ bhkSerializable::bhkSerializable() BHK_SERIALIZABLE_CONSTRUCT {}
 
 bhkSerializable::~bhkSerializable() {}
 
-void bhkSerializable::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSerializable::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SERIALIZABLE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSerializable::asString( bool verbose ) const {
 	BHK_SERIALIZABLE_STRING
 }
 
-void bhkSerializable::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSerializable::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SERIALIZABLE_FIXLINKS
 }
 
diff --git a/obj/bhkSerializable.h b/obj/bhkSerializable.h
index c58b1eaf..52a85ec8 100644
--- a/obj/bhkSerializable.h
+++ b/obj/bhkSerializable.h
@@ -20,10 +20,11 @@ public:
 	~bhkSerializable();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SERIALIZABLE_MEMBERS
 };
diff --git a/obj/bhkShape.cpp b/obj/bhkShape.cpp
index 2a1bca16..7d323073 100644
--- a/obj/bhkShape.cpp
+++ b/obj/bhkShape.cpp
@@ -10,7 +10,7 @@ bhkShape::bhkShape() BHK_SHAPE_CONSTRUCT {}
 
 bhkShape::~bhkShape() {}
 
-void bhkShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkShape::asString( bool verbose ) const {
 	BHK_SHAPE_STRING
 }
 
-void bhkShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkShape.h b/obj/bhkShape.h
index f541c99c..5de843b5 100644
--- a/obj/bhkShape.h
+++ b/obj/bhkShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SHAPE_MEMBERS
 };
diff --git a/obj/bhkSimpleShapePhantom.cpp b/obj/bhkSimpleShapePhantom.cpp
index 3b4fa84f..39971bff 100644
--- a/obj/bhkSimpleShapePhantom.cpp
+++ b/obj/bhkSimpleShapePhantom.cpp
@@ -10,7 +10,7 @@ bhkSimpleShapePhantom::bhkSimpleShapePhantom() BHK_SIMPLE_SHAPE_PHANTOM_CONSTRUC
 
 bhkSimpleShapePhantom::~bhkSimpleShapePhantom() {}
 
-void bhkSimpleShapePhantom::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSimpleShapePhantom::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SIMPLE_SHAPE_PHANTOM_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSimpleShapePhantom::asString( bool verbose ) const {
 	BHK_SIMPLE_SHAPE_PHANTOM_STRING
 }
 
-void bhkSimpleShapePhantom::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSimpleShapePhantom::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SIMPLE_SHAPE_PHANTOM_FIXLINKS
 }
 
diff --git a/obj/bhkSimpleShapePhantom.h b/obj/bhkSimpleShapePhantom.h
index f985eb0f..ba80f89a 100644
--- a/obj/bhkSimpleShapePhantom.h
+++ b/obj/bhkSimpleShapePhantom.h
@@ -20,10 +20,11 @@ public:
 	~bhkSimpleShapePhantom();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SIMPLE_SHAPE_PHANTOM_MEMBERS
 };
diff --git a/obj/bhkSphereRepShape.cpp b/obj/bhkSphereRepShape.cpp
index b2d4e231..ade1fe7e 100644
--- a/obj/bhkSphereRepShape.cpp
+++ b/obj/bhkSphereRepShape.cpp
@@ -10,7 +10,7 @@ bhkSphereRepShape::bhkSphereRepShape() BHK_SPHERE_REP_SHAPE_CONSTRUCT {}
 
 bhkSphereRepShape::~bhkSphereRepShape() {}
 
-void bhkSphereRepShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSphereRepShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_REP_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSphereRepShape::asString( bool verbose ) const {
 	BHK_SPHERE_REP_SHAPE_STRING
 }
 
-void bhkSphereRepShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSphereRepShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_REP_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkSphereRepShape.h b/obj/bhkSphereRepShape.h
index f48935a4..de8593b6 100644
--- a/obj/bhkSphereRepShape.h
+++ b/obj/bhkSphereRepShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkSphereRepShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SPHERE_REP_SHAPE_MEMBERS
 };
diff --git a/obj/bhkSphereShape.cpp b/obj/bhkSphereShape.cpp
index d110f9cb..234585b4 100644
--- a/obj/bhkSphereShape.cpp
+++ b/obj/bhkSphereShape.cpp
@@ -10,7 +10,7 @@ bhkSphereShape::bhkSphereShape() BHK_SPHERE_SHAPE_CONSTRUCT {}
 
 bhkSphereShape::~bhkSphereShape() {}
 
-void bhkSphereShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkSphereShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkSphereShape::asString( bool verbose ) const {
 	BHK_SPHERE_SHAPE_STRING
 }
 
-void bhkSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_SPHERE_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkSphereShape.h b/obj/bhkSphereShape.h
index 51a6bca3..9b16f0ca 100644
--- a/obj/bhkSphereShape.h
+++ b/obj/bhkSphereShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkSphereShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_SPHERE_SHAPE_MEMBERS
 };
diff --git a/obj/bhkStiffSpringConstraint.cpp b/obj/bhkStiffSpringConstraint.cpp
index fc2366b3..f4b40b6a 100644
--- a/obj/bhkStiffSpringConstraint.cpp
+++ b/obj/bhkStiffSpringConstraint.cpp
@@ -10,7 +10,7 @@ bhkStiffSpringConstraint::bhkStiffSpringConstraint() BHK_STIFF_SPRING_CONSTRAINT
 
 bhkStiffSpringConstraint::~bhkStiffSpringConstraint() {}
 
-void bhkStiffSpringConstraint::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkStiffSpringConstraint::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_STIFF_SPRING_CONSTRAINT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkStiffSpringConstraint::asString( bool verbose ) const {
 	BHK_STIFF_SPRING_CONSTRAINT_STRING
 }
 
-void bhkStiffSpringConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkStiffSpringConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_STIFF_SPRING_CONSTRAINT_FIXLINKS
 }
 
diff --git a/obj/bhkStiffSpringConstraint.h b/obj/bhkStiffSpringConstraint.h
index 62db183f..aded5a56 100644
--- a/obj/bhkStiffSpringConstraint.h
+++ b/obj/bhkStiffSpringConstraint.h
@@ -20,10 +20,11 @@ public:
 	~bhkStiffSpringConstraint();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_STIFF_SPRING_CONSTRAINT_MEMBERS
 };
diff --git a/obj/bhkTransformShape.cpp b/obj/bhkTransformShape.cpp
index f323cb78..c16ca1e4 100644
--- a/obj/bhkTransformShape.cpp
+++ b/obj/bhkTransformShape.cpp
@@ -10,7 +10,7 @@ bhkTransformShape::bhkTransformShape() BHK_TRANSFORM_SHAPE_CONSTRUCT {}
 
 bhkTransformShape::~bhkTransformShape() {}
 
-void bhkTransformShape::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkTransformShape::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_TRANSFORM_SHAPE_READ
 }
 
@@ -22,7 +22,7 @@ string bhkTransformShape::asString( bool verbose ) const {
 	BHK_TRANSFORM_SHAPE_STRING
 }
 
-void bhkTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_TRANSFORM_SHAPE_FIXLINKS
 }
 
diff --git a/obj/bhkTransformShape.h b/obj/bhkTransformShape.h
index bb6739fb..092d7011 100644
--- a/obj/bhkTransformShape.h
+++ b/obj/bhkTransformShape.h
@@ -20,10 +20,11 @@ public:
 	~bhkTransformShape();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_TRANSFORM_SHAPE_MEMBERS
 };
diff --git a/obj/bhkWorldObject.cpp b/obj/bhkWorldObject.cpp
index 304b51a4..9cd5a5c7 100644
--- a/obj/bhkWorldObject.cpp
+++ b/obj/bhkWorldObject.cpp
@@ -10,7 +10,7 @@ bhkWorldObject::bhkWorldObject() BHK_WORLD_OBJECT_CONSTRUCT {}
 
 bhkWorldObject::~bhkWorldObject() {}
 
-void bhkWorldObject::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void bhkWorldObject::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	BHK_WORLD_OBJECT_READ
 }
 
@@ -22,7 +22,7 @@ string bhkWorldObject::asString( bool verbose ) const {
 	BHK_WORLD_OBJECT_STRING
 }
 
-void bhkWorldObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void bhkWorldObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	BHK_WORLD_OBJECT_FIXLINKS
 }
 
diff --git a/obj/bhkWorldObject.h b/obj/bhkWorldObject.h
index d4250ef7..9d38b23f 100644
--- a/obj/bhkWorldObject.h
+++ b/obj/bhkWorldObject.h
@@ -20,10 +20,11 @@ public:
 	~bhkWorldObject();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	BHK_WORLD_OBJECT_MEMBERS
 };
diff --git a/obj/hkPackedNiTriStripsData.cpp b/obj/hkPackedNiTriStripsData.cpp
index 2c04f1ee..4bfb39a4 100644
--- a/obj/hkPackedNiTriStripsData.cpp
+++ b/obj/hkPackedNiTriStripsData.cpp
@@ -10,7 +10,7 @@ hkPackedNiTriStripsData::hkPackedNiTriStripsData() HK_PACKED_NI_TRI_STRIPS_DATA_
 
 hkPackedNiTriStripsData::~hkPackedNiTriStripsData() {}
 
-void hkPackedNiTriStripsData::Read( istream& in, list<uint> link_stack, unsigned int version ) {
+void hkPackedNiTriStripsData::Read( istream& in, list<uint> & link_stack, unsigned int version ) {
 	HK_PACKED_NI_TRI_STRIPS_DATA_READ
 }
 
@@ -22,7 +22,7 @@ string hkPackedNiTriStripsData::asString( bool verbose ) const {
 	HK_PACKED_NI_TRI_STRIPS_DATA_STRING
 }
 
-void hkPackedNiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version ) {
+void hkPackedNiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
 	HK_PACKED_NI_TRI_STRIPS_DATA_FIXLINKS
 }
 
diff --git a/obj/hkPackedNiTriStripsData.h b/obj/hkPackedNiTriStripsData.h
index f148dc32..cfd80d17 100644
--- a/obj/hkPackedNiTriStripsData.h
+++ b/obj/hkPackedNiTriStripsData.h
@@ -20,10 +20,11 @@ public:
 	~hkPackedNiTriStripsData();
 	//Run-Time Type Information
 	static const Type TYPE;
-	virtual void Read( istream& in, list<uint> link_stack, unsigned int version );
+	virtual const Type & GetType() const { return TYPE; };
+	virtual void Read( istream& in, list<uint> & link_stack, unsigned int version );
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
-	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> link_stack, unsigned int version );
+	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
 private:
 	HK_PACKED_NI_TRI_STRIPS_DATA_MEMBERS
 };
-- 
GitLab