From 21152a65e593d9cb05a21b00718d833d891daa1b Mon Sep 17 00:00:00 2001
From: Amorilia <amorilia@users.sourceforge.net>
Date: Sun, 4 Jun 2006 16:05:38 +0000
Subject: [PATCH] GetRefs() implemented (first try, untested).

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

diff --git a/gen/obj_defines.h b/gen/obj_defines.h
index 9071d0a1..2675780f 100644
--- a/gen/obj_defines.h
+++ b/gen/obj_defines.h
@@ -33,6 +33,10 @@ return out.str(); \
 
 #define NI_OBJECT_FIXLINKS \
 
+#define NI_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+return refs; \
+
 #define A_KEYED_DATA_MEMBERS \
 
 #define A_KEYED_DATA_INCLUDE "NiObject.h" \
@@ -55,6 +59,11 @@ return out.str(); \
 #define A_KEYED_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define A_KEYED_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define A_PARTICLE_MODIFIER_MEMBERS \
 Ref<AParticleModifier > nextModifier; \
 NiParticleSystemController * controller; \
@@ -107,6 +116,12 @@ if (link_stack.front() != 0xffffffff) { \
 	controller = NULL; \
 link_stack.pop_front(); \
 
+#define A_PARTICLE_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(nextModifier)); \
+return refs; \
+
 #define BHK_REF_OBJECT_MEMBERS \
 
 #define BHK_REF_OBJECT_INCLUDE "NiObject.h" \
@@ -129,6 +144,11 @@ return out.str(); \
 #define BHK_REF_OBJECT_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define BHK_REF_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define BHK_SERIALIZABLE_MEMBERS \
 
 #define BHK_SERIALIZABLE_INCLUDE "bhkRefObject.h" \
@@ -151,6 +171,11 @@ return out.str(); \
 #define BHK_SERIALIZABLE_FIXLINKS \
 bhkRefObject::FixLinks( objects, link_stack, version ); \
 
+#define BHK_SERIALIZABLE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkRefObject::GetRefs(); \
+return refs; \
+
 #define ABHK_CONSTRAINT_MEMBERS \
 uint numBodies; \
 vector<bhkShape * > bodies; \
@@ -210,6 +235,13 @@ for (uint i0 = 0; i0 < bodies.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define ABHK_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkSerializable::GetRefs(); \
+for (uint i0 = 0; i0 < bodies.size(); i0++) { \
+}; \
+return refs; \
+
 #define ABHK_RAGDOLL_CONSTRAINT_MEMBERS \
 Float4 pivotA; \
 Float4 planeA; \
@@ -281,6 +313,11 @@ return out.str(); \
 #define ABHK_RAGDOLL_CONSTRAINT_FIXLINKS \
 AbhkConstraint::FixLinks( objects, link_stack, version ); \
 
+#define ABHK_RAGDOLL_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkConstraint::GetRefs(); \
+return refs; \
+
 #define BHK_SHAPE_MEMBERS \
 
 #define BHK_SHAPE_INCLUDE "bhkSerializable.h" \
@@ -303,6 +340,11 @@ return out.str(); \
 #define BHK_SHAPE_FIXLINKS \
 bhkSerializable::FixLinks( objects, link_stack, version ); \
 
+#define BHK_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkSerializable::GetRefs(); \
+return refs; \
+
 #define ABHK_SHAPE_COLLECTION_MEMBERS \
 
 #define ABHK_SHAPE_COLLECTION_INCLUDE "bhkShape.h" \
@@ -325,6 +367,11 @@ return out.str(); \
 #define ABHK_SHAPE_COLLECTION_FIXLINKS \
 bhkShape::FixLinks( objects, link_stack, version ); \
 
+#define ABHK_SHAPE_COLLECTION_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkShape::GetRefs(); \
+return refs; \
+
 #define BHK_SPHERE_REP_SHAPE_MEMBERS \
 uint material; \
 
@@ -352,6 +399,11 @@ return out.str(); \
 #define BHK_SPHERE_REP_SHAPE_FIXLINKS \
 bhkShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_SPHERE_REP_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkShape::GetRefs(); \
+return refs; \
+
 #define BHK_CONVEX_SHAPE_MEMBERS \
 
 #define BHK_CONVEX_SHAPE_INCLUDE "bhkSphereRepShape.h" \
@@ -374,6 +426,11 @@ return out.str(); \
 #define BHK_CONVEX_SHAPE_FIXLINKS \
 bhkSphereRepShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_CONVEX_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkSphereRepShape::GetRefs(); \
+return refs; \
+
 #define BHK_WORLD_OBJECT_MEMBERS \
 
 #define BHK_WORLD_OBJECT_INCLUDE "bhkShape.h" \
@@ -396,6 +453,11 @@ return out.str(); \
 #define BHK_WORLD_OBJECT_FIXLINKS \
 bhkShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_WORLD_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkShape::GetRefs(); \
+return refs; \
+
 #define BHK_ENTITY_MEMBERS \
 Ref<bhkShape > shape; \
 uint layer; \
@@ -438,6 +500,12 @@ if (link_stack.front() != 0xffffffff) { \
 	shape = NULL; \
 link_stack.pop_front(); \
 
+#define BHK_ENTITY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkWorldObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(shape)); \
+return refs; \
+
 #define NI_COLLISION_OBJECT_MEMBERS \
 NiAVObject * parent; \
 ushort unknownShort; \
@@ -494,6 +562,12 @@ if (link_stack.front() != 0xffffffff) { \
 	body = NULL; \
 link_stack.pop_front(); \
 
+#define NI_COLLISION_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(body)); \
+return refs; \
+
 #define NI_EXTRA_DATA_MEMBERS \
 string name; \
 Ref<NiExtraData > nextExtraData; \
@@ -546,6 +620,12 @@ if ( version <= 0x04020200 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(nextExtraData)); \
+return refs; \
+
 #define NI_INTERPOLATOR_MEMBERS \
 
 #define NI_INTERPOLATOR_INCLUDE "NiObject.h" \
@@ -568,6 +648,11 @@ return out.str(); \
 #define NI_INTERPOLATOR_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_BLEND_INTERPOLATOR_MEMBERS \
 ushort unknownShort; \
 uint unknownInt; \
@@ -599,6 +684,11 @@ return out.str(); \
 #define NI_BLEND_INTERPOLATOR_FIXLINKS \
 NiInterpolator::FixLinks( objects, link_stack, version ); \
 
+#define NI_BLEND_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+return refs; \
+
 #define NI_B_SPLINE_INTERPOLATOR_MEMBERS \
 float startTime; \
 float stopTime; \
@@ -630,6 +720,11 @@ return out.str(); \
 #define NI_B_SPLINE_INTERPOLATOR_FIXLINKS \
 NiInterpolator::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_SPLINE_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+return refs; \
+
 #define NI_OBJECT_N_E_T_MEMBERS \
 string name; \
 Ref<NiExtraData > extraData; \
@@ -729,6 +824,16 @@ if (link_stack.front() != 0xffffffff) { \
 	controller = NULL; \
 link_stack.pop_front(); \
 
+#define NI_OBJECT_N_E_T_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(extraData)); \
+for (uint i0 = 0; i0 < extraDataList.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(extraDataList[i0])); \
+}; \
+refs.push_back(StaticCast<NiObject>(controller)); \
+return refs; \
+
 #define NI_A_V_OBJECT_MEMBERS \
 unsigned short flags; \
 Vector3 translation; \
@@ -875,6 +980,16 @@ if ( version >= 0x14000005 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_A_V_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObjectNET::GetRefs(); \
+for (uint i0 = 0; i0 < properties.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(properties[i0])); \
+}; \
+refs.push_back(StaticCast<NiObject>(collisionData)); \
+refs.push_back(StaticCast<NiObject>(collisionObject)); \
+return refs; \
+
 #define NI_DYNAMIC_EFFECT_MEMBERS \
 bool hasAffectedNodeList_; \
 uint affectedNodeList_; \
@@ -962,6 +1077,14 @@ if ( version >= 0x0A010000 ) { \
 	}; \
 }; \
 
+#define NI_DYNAMIC_EFFECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiAVObject::GetRefs(); \
+for (uint i0 = 0; i0 < affectedNodes.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(affectedNodes[i0])); \
+}; \
+return refs; \
+
 #define NI_LIGHT_MEMBERS \
 float dimmer; \
 Color3 ambientColor; \
@@ -1001,6 +1124,11 @@ return out.str(); \
 #define NI_LIGHT_FIXLINKS \
 NiDynamicEffect::FixLinks( objects, link_stack, version ); \
 
+#define NI_LIGHT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiDynamicEffect::GetRefs(); \
+return refs; \
+
 #define NI_PROPERTY_MEMBERS \
 
 #define NI_PROPERTY_INCLUDE "NiObjectNET.h" \
@@ -1023,6 +1151,11 @@ return out.str(); \
 #define NI_PROPERTY_FIXLINKS \
 NiObjectNET::FixLinks( objects, link_stack, version ); \
 
+#define NI_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObjectNET::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_MODIFIER_MEMBERS \
 string name; \
 uint order; \
@@ -1073,6 +1206,11 @@ if (link_stack.front() != 0xffffffff) { \
 	target = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_MEMBERS \
 float speed; \
 float speedVariation; \
@@ -1140,6 +1278,11 @@ return out.str(); \
 #define NI_P_SYS_EMITTER_FIXLINKS \
 NiPSysModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_EMITTER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_VOLUME_EMITTER_MEMBERS \
 NiNode * emitterObject; \
 
@@ -1184,6 +1327,11 @@ if ( version >= 0x14000004 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_P_SYS_VOLUME_EMITTER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysEmitter::GetRefs(); \
+return refs; \
+
 #define NI_TIME_CONTROLLER_MEMBERS \
 Ref<NiTimeController > nextController; \
 unsigned short flags; \
@@ -1256,6 +1404,12 @@ if (link_stack.front() != 0xffffffff) { \
 	target = NULL; \
 link_stack.pop_front(); \
 
+#define NI_TIME_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(nextController)); \
+return refs; \
+
 #define A_BONE_L_O_D_CONTROLLER_MEMBERS \
 uint unknownInt1; \
 uint numNodeGroups; \
@@ -1331,6 +1485,16 @@ for (uint i0 = 0; i0 < nodeGroups.size(); i0++) { \
 	}; \
 }; \
 
+#define A_BONE_L_O_D_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+for (uint i0 = 0; i0 < nodeGroups.size(); i0++) { \
+	for (uint i1 = 0; i1 < nodeGroups[i0].nodes.size(); i1++) { \
+		refs.push_back(StaticCast<NiObject>(nodeGroups[i0].nodes[i1])); \
+	}; \
+}; \
+return refs; \
+
 #define NI_SINGLE_INTERPOLATOR_CONTROLLER_MEMBERS \
 Ref<NiInterpolator > interpolator; \
 
@@ -1375,6 +1539,12 @@ if ( version >= 0x0A020000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_SINGLE_INTERPOLATOR_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(interpolator)); \
+return refs; \
+
 #define A_P_SYS_CTLR_MEMBERS \
 string modifierName; \
 
@@ -1401,6 +1571,11 @@ return out.str(); \
 #define A_P_SYS_CTLR_FIXLINKS \
 NiSingleInterpolatorController::FixLinks( objects, link_stack, version ); \
 
+#define A_P_SYS_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiSingleInterpolatorController::GetRefs(); \
+return refs; \
+
 #define NI_TRI_BASED_GEOM_MEMBERS \
 Ref<NiTriBasedGeomData > data; \
 Ref<NiSkinInstance > skinInstance; \
@@ -1489,6 +1664,14 @@ if ( version >= 0x0A000100 ) { \
 	}; \
 }; \
 
+#define NI_TRI_BASED_GEOM_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiAVObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+refs.push_back(StaticCast<NiObject>(skinInstance)); \
+refs.push_back(StaticCast<NiObject>(unknownLink)); \
+return refs; \
+
 #define NI_TRI_BASED_GEOM_DATA_MEMBERS \
 string name; \
 ushort numVertices; \
@@ -1760,6 +1943,12 @@ if ( version >= 0x14000004 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_TRI_BASED_GEOM_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(unknownLink)); \
+return refs; \
+
 #define A_P_SYS_DATA_MEMBERS \
 bool hasUnknownFloats1; \
 vector<float > unknownFloats1; \
@@ -1841,6 +2030,11 @@ return out.str(); \
 #define A_P_SYS_DATA_FIXLINKS \
 NiTriBasedGeomData::FixLinks( objects, link_stack, version ); \
 
+#define A_P_SYS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTriBasedGeomData::GetRefs(); \
+return refs; \
+
 #define BHK_BLEND_COLLISION_OBJECT_MEMBERS \
 float unknownFloat1; \
 float unknownFloat2; \
@@ -1872,6 +2066,11 @@ return out.str(); \
 #define BHK_BLEND_COLLISION_OBJECT_FIXLINKS \
 NiCollisionObject::FixLinks( objects, link_stack, version ); \
 
+#define BHK_BLEND_COLLISION_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiCollisionObject::GetRefs(); \
+return refs; \
+
 #define BHK_BLEND_CONTROLLER_MEMBERS \
 uint unknownInt; \
 
@@ -1899,6 +2098,11 @@ return out.str(); \
 #define BHK_BLEND_CONTROLLER_FIXLINKS \
 NiTimeController::FixLinks( objects, link_stack, version ); \
 
+#define BHK_BLEND_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+return refs; \
+
 #define BHK_BOX_SHAPE_MEMBERS \
 float unknownFloat1; \
 ushort unknownShort1; \
@@ -1950,6 +2154,11 @@ return out.str(); \
 #define BHK_BOX_SHAPE_FIXLINKS \
 bhkConvexShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_BOX_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkConvexShape::GetRefs(); \
+return refs; \
+
 #define BHK_CAPSULE_SHAPE_MEMBERS \
 float radius; \
 ushort unknownShort1; \
@@ -2009,6 +2218,11 @@ return out.str(); \
 #define BHK_CAPSULE_SHAPE_FIXLINKS \
 bhkConvexShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_CAPSULE_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkConvexShape::GetRefs(); \
+return refs; \
+
 #define BHK_COLLISION_OBJECT_MEMBERS \
 
 #define BHK_COLLISION_OBJECT_INCLUDE "NiCollisionObject.h" \
@@ -2031,6 +2245,11 @@ return out.str(); \
 #define BHK_COLLISION_OBJECT_FIXLINKS \
 NiCollisionObject::FixLinks( objects, link_stack, version ); \
 
+#define BHK_COLLISION_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiCollisionObject::GetRefs(); \
+return refs; \
+
 #define BHK_CONVEX_VERTICES_SHAPE_MEMBERS \
 float unknownFloats1[7]; \
 uint num1; \
@@ -2106,6 +2325,11 @@ return out.str(); \
 #define BHK_CONVEX_VERTICES_SHAPE_FIXLINKS \
 bhkSphereRepShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_CONVEX_VERTICES_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkSphereRepShape::GetRefs(); \
+return refs; \
+
 #define BHK_HINGE_CONSTRAINT_MEMBERS \
 float unknownFloats[5][4]; \
 
@@ -2148,6 +2372,11 @@ return out.str(); \
 #define BHK_HINGE_CONSTRAINT_FIXLINKS \
 AbhkConstraint::FixLinks( objects, link_stack, version ); \
 
+#define BHK_HINGE_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkConstraint::GetRefs(); \
+return refs; \
+
 #define BHK_LIMITED_HINGE_CONSTRAINT_MEMBERS \
 LimitedHingeDescriptor limitedHinge; \
 
@@ -2201,6 +2430,11 @@ return out.str(); \
 #define BHK_LIMITED_HINGE_CONSTRAINT_FIXLINKS \
 AbhkConstraint::FixLinks( objects, link_stack, version ); \
 
+#define BHK_LIMITED_HINGE_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkConstraint::GetRefs(); \
+return refs; \
+
 #define BHK_LIST_SHAPE_MEMBERS \
 uint numSubShapes; \
 vector<Ref<bhkShape > > subShapes; \
@@ -2293,6 +2527,14 @@ for (uint i0 = 0; i0 < subShapes.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define BHK_LIST_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkShapeCollection::GetRefs(); \
+for (uint i0 = 0; i0 < subShapes.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(subShapes[i0])); \
+}; \
+return refs; \
+
 #define BHK_MALLEABLE_CONSTRAINT_MEMBERS \
 uint type; \
 uint unknownInt2; \
@@ -2445,6 +2687,13 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink2 = NULL; \
 link_stack.pop_front(); \
 
+#define BHK_MALLEABLE_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkConstraint::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(unknownLink1)); \
+refs.push_back(StaticCast<NiObject>(unknownLink2)); \
+return refs; \
+
 #define BHK_MOPP_BV_TREE_SHAPE_MEMBERS \
 Ref<bhkShape > shape; \
 uint material; \
@@ -2532,6 +2781,12 @@ if (link_stack.front() != 0xffffffff) { \
 	shape = NULL; \
 link_stack.pop_front(); \
 
+#define BHK_MOPP_BV_TREE_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkShape::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(shape)); \
+return refs; \
+
 #define BHK_MULTI_SPHERE_SHAPE_MEMBERS \
 float unknownFloat1; \
 float unknownFloat2; \
@@ -2585,6 +2840,11 @@ return out.str(); \
 #define BHK_MULTI_SPHERE_SHAPE_FIXLINKS \
 bhkSphereRepShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_MULTI_SPHERE_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkSphereRepShape::GetRefs(); \
+return refs; \
+
 #define BHK_NI_TRI_STRIPS_SHAPE_MEMBERS \
 float unknownFloats1[2]; \
 uint unknownInts1[5]; \
@@ -2705,6 +2965,14 @@ for (uint i0 = 0; i0 < stripsData.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define BHK_NI_TRI_STRIPS_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkSphereRepShape::GetRefs(); \
+for (uint i0 = 0; i0 < stripsData.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(stripsData[i0])); \
+}; \
+return refs; \
+
 #define BHK_PACKED_NI_TRI_STRIPS_SHAPE_MEMBERS \
 ushort numSubparts; \
 vector< array<uint,3> > subparts; \
@@ -2800,6 +3068,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define BHK_PACKED_NI_TRI_STRIPS_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkShapeCollection::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define BHK_PRISMATIC_CONSTRAINT_MEMBERS \
 Float4 unknownVectors[8]; \
 float unknownFloats2[3]; \
@@ -2850,6 +3124,11 @@ return out.str(); \
 #define BHK_PRISMATIC_CONSTRAINT_FIXLINKS \
 AbhkConstraint::FixLinks( objects, link_stack, version ); \
 
+#define BHK_PRISMATIC_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkConstraint::GetRefs(); \
+return refs; \
+
 #define BHK_RAGDOLL_CONSTRAINT_MEMBERS \
 
 #define BHK_RAGDOLL_CONSTRAINT_INCLUDE "AbhkRagdollConstraint.h" \
@@ -2872,6 +3151,11 @@ return out.str(); \
 #define BHK_RAGDOLL_CONSTRAINT_FIXLINKS \
 AbhkRagdollConstraint::FixLinks( objects, link_stack, version ); \
 
+#define BHK_RAGDOLL_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkRagdollConstraint::GetRefs(); \
+return refs; \
+
 #define BHK_RIGID_BODY_MEMBERS \
 float unknownFloats1[5]; \
 ushort unknownShorts1[4]; \
@@ -3094,6 +3378,14 @@ for (uint i0 = 0; i0 < constraints.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define BHK_RIGID_BODY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkEntity::GetRefs(); \
+for (uint i0 = 0; i0 < constraints.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(constraints[i0])); \
+}; \
+return refs; \
+
 #define BHK_RIGID_BODY_T_MEMBERS \
 
 #define BHK_RIGID_BODY_T_INCLUDE "bhkRigidBody.h" \
@@ -3116,6 +3408,11 @@ return out.str(); \
 #define BHK_RIGID_BODY_T_FIXLINKS \
 bhkRigidBody::FixLinks( objects, link_stack, version ); \
 
+#define BHK_RIGID_BODY_T_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkRigidBody::GetRefs(); \
+return refs; \
+
 #define BHK_SIMPLE_SHAPE_PHANTOM_MEMBERS \
 float unkownFloats[7]; \
 float unknownFloats2[3][5]; \
@@ -3177,6 +3474,11 @@ return out.str(); \
 #define BHK_SIMPLE_SHAPE_PHANTOM_FIXLINKS \
 bhkEntity::FixLinks( objects, link_stack, version ); \
 
+#define BHK_SIMPLE_SHAPE_PHANTOM_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkEntity::GetRefs(); \
+return refs; \
+
 #define BHK_S_P_COLLISION_OBJECT_MEMBERS \
 
 #define BHK_S_P_COLLISION_OBJECT_INCLUDE "NiCollisionObject.h" \
@@ -3199,6 +3501,11 @@ return out.str(); \
 #define BHK_S_P_COLLISION_OBJECT_FIXLINKS \
 NiCollisionObject::FixLinks( objects, link_stack, version ); \
 
+#define BHK_S_P_COLLISION_OBJECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiCollisionObject::GetRefs(); \
+return refs; \
+
 #define BHK_SPHERE_SHAPE_MEMBERS \
 float radius; \
 
@@ -3226,6 +3533,11 @@ return out.str(); \
 #define BHK_SPHERE_SHAPE_FIXLINKS \
 bhkConvexShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_SPHERE_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkConvexShape::GetRefs(); \
+return refs; \
+
 #define BHK_STIFF_SPRING_CONSTRAINT_MEMBERS \
 float unknownFloats[2][4]; \
 float unknownFloat; \
@@ -3273,6 +3585,11 @@ return out.str(); \
 #define BHK_STIFF_SPRING_CONSTRAINT_FIXLINKS \
 AbhkConstraint::FixLinks( objects, link_stack, version ); \
 
+#define BHK_STIFF_SPRING_CONSTRAINT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkConstraint::GetRefs(); \
+return refs; \
+
 #define BHK_TRANSFORM_SHAPE_MEMBERS \
 float unknownFloat1; \
 float unknownFloat2; \
@@ -3312,6 +3629,11 @@ return out.str(); \
 #define BHK_TRANSFORM_SHAPE_FIXLINKS \
 bhkEntity::FixLinks( objects, link_stack, version ); \
 
+#define BHK_TRANSFORM_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkEntity::GetRefs(); \
+return refs; \
+
 #define BHK_CONVEX_TRANSFORM_SHAPE_MEMBERS \
 
 #define BHK_CONVEX_TRANSFORM_SHAPE_INCLUDE "bhkTransformShape.h" \
@@ -3334,6 +3656,11 @@ return out.str(); \
 #define BHK_CONVEX_TRANSFORM_SHAPE_FIXLINKS \
 bhkTransformShape::FixLinks( objects, link_stack, version ); \
 
+#define BHK_CONVEX_TRANSFORM_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = bhkTransformShape::GetRefs(); \
+return refs; \
+
 #define B_S_BOUND_MEMBERS \
 float unknownFloats[6]; \
 
@@ -3370,6 +3697,11 @@ return out.str(); \
 #define B_S_BOUND_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define B_S_BOUND_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define B_S_FURNITURE_MARKER_MEMBERS \
 uint numPositions; \
 vector<FurniturePosition > positions; \
@@ -3417,6 +3749,11 @@ return out.str(); \
 #define B_S_FURNITURE_MARKER_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define B_S_FURNITURE_MARKER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define B_S_PARENT_VELOCITY_MODIFIER_MEMBERS \
 float unknownFloat; \
 
@@ -3444,6 +3781,11 @@ return out.str(); \
 #define B_S_PARENT_VELOCITY_MODIFIER_FIXLINKS \
 NiPSysModifier::FixLinks( objects, link_stack, version ); \
 
+#define B_S_PARENT_VELOCITY_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define B_S_P_SYS_ARRAY_EMITTER_MEMBERS \
 
 #define B_S_P_SYS_ARRAY_EMITTER_INCLUDE "NiPSysVolumeEmitter.h" \
@@ -3466,6 +3808,11 @@ return out.str(); \
 #define B_S_P_SYS_ARRAY_EMITTER_FIXLINKS \
 NiPSysVolumeEmitter::FixLinks( objects, link_stack, version ); \
 
+#define B_S_P_SYS_ARRAY_EMITTER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysVolumeEmitter::GetRefs(); \
+return refs; \
+
 #define B_S_X_FLAGS_MEMBERS \
 uint flags; \
 
@@ -3493,6 +3840,11 @@ return out.str(); \
 #define B_S_X_FLAGS_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define B_S_X_FLAGS_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define HK_PACKED_NI_TRI_STRIPS_DATA_MEMBERS \
 uint numTriangles; \
 vector<hkTriangle > triangles; \
@@ -3556,6 +3908,11 @@ return out.str(); \
 #define HK_PACKED_NI_TRI_STRIPS_DATA_FIXLINKS \
 AbhkShapeCollection::FixLinks( objects, link_stack, version ); \
 
+#define HK_PACKED_NI_TRI_STRIPS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AbhkShapeCollection::GetRefs(); \
+return refs; \
+
 #define NI_ALPHA_CONTROLLER_MEMBERS \
 Ref<NiFloatData > data; \
 
@@ -3600,6 +3957,12 @@ if ( version <= 0x0A010000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_ALPHA_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiSingleInterpolatorController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_ALPHA_PROPERTY_MEMBERS \
 unsigned short flags; \
 byte threshold; \
@@ -3631,6 +3994,11 @@ return out.str(); \
 #define NI_ALPHA_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_ALPHA_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_AMBIENT_LIGHT_MEMBERS \
 
 #define NI_AMBIENT_LIGHT_INCLUDE "NiLight.h" \
@@ -3653,6 +4021,11 @@ return out.str(); \
 #define NI_AMBIENT_LIGHT_FIXLINKS \
 NiLight::FixLinks( objects, link_stack, version ); \
 
+#define NI_AMBIENT_LIGHT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiLight::GetRefs(); \
+return refs; \
+
 #define NI_AUTO_NORMAL_PARTICLES_DATA_MEMBERS \
 ushort numParticles; \
 float size; \
@@ -3733,6 +4106,11 @@ return out.str(); \
 #define NI_AUTO_NORMAL_PARTICLES_DATA_FIXLINKS \
 NiTriBasedGeomData::FixLinks( objects, link_stack, version ); \
 
+#define NI_AUTO_NORMAL_PARTICLES_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTriBasedGeomData::GetRefs(); \
+return refs; \
+
 #define NI_BINARY_EXTRA_DATA_MEMBERS \
 ByteArray binaryData; \
 
@@ -3780,6 +4158,11 @@ return out.str(); \
 #define NI_BINARY_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_BINARY_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_BLEND_BOOL_INTERPOLATOR_MEMBERS \
 byte boolValue; \
 
@@ -3807,6 +4190,11 @@ return out.str(); \
 #define NI_BLEND_BOOL_INTERPOLATOR_FIXLINKS \
 NiBlendInterpolator::FixLinks( objects, link_stack, version ); \
 
+#define NI_BLEND_BOOL_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBlendInterpolator::GetRefs(); \
+return refs; \
+
 #define NI_BLEND_FLOAT_INTERPOLATOR_MEMBERS \
 float floatValue; \
 
@@ -3834,6 +4222,11 @@ return out.str(); \
 #define NI_BLEND_FLOAT_INTERPOLATOR_FIXLINKS \
 NiBlendInterpolator::FixLinks( objects, link_stack, version ); \
 
+#define NI_BLEND_FLOAT_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBlendInterpolator::GetRefs(); \
+return refs; \
+
 #define NI_BLEND_POINT3_INTERPOLATOR_MEMBERS \
 Vector3 pointValue; \
 
@@ -3860,6 +4253,11 @@ return out.str(); \
 #define NI_BLEND_POINT3_INTERPOLATOR_FIXLINKS \
 NiBlendInterpolator::FixLinks( objects, link_stack, version ); \
 
+#define NI_BLEND_POINT3_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBlendInterpolator::GetRefs(); \
+return refs; \
+
 #define NI_BLEND_TRANSFORM_INTERPOLATOR_MEMBERS \
 
 #define NI_BLEND_TRANSFORM_INTERPOLATOR_INCLUDE "NiBlendInterpolator.h" \
@@ -3882,6 +4280,11 @@ return out.str(); \
 #define NI_BLEND_TRANSFORM_INTERPOLATOR_FIXLINKS \
 NiBlendInterpolator::FixLinks( objects, link_stack, version ); \
 
+#define NI_BLEND_TRANSFORM_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBlendInterpolator::GetRefs(); \
+return refs; \
+
 #define NI_BONE_L_O_D_CONTROLLER_MEMBERS \
 uint numShapeGroups; \
 vector<SkinShapeGroup > shapeGroups1; \
@@ -3989,6 +4392,20 @@ for (uint i0 = 0; i0 < shapeGroups2.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_BONE_L_O_D_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = ABoneLODController::GetRefs(); \
+for (uint i0 = 0; i0 < shapeGroups1.size(); i0++) { \
+	for (uint i1 = 0; i1 < shapeGroups1[i0].linkPairs.size(); i1++) { \
+		refs.push_back(StaticCast<NiObject>(shapeGroups1[i0].linkPairs[i1].shape)); \
+		refs.push_back(StaticCast<NiObject>(shapeGroups1[i0].linkPairs[i1].skinInstance)); \
+	}; \
+}; \
+for (uint i0 = 0; i0 < shapeGroups2.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(shapeGroups2[i0])); \
+}; \
+return refs; \
+
 #define NI_BOOL_DATA_MEMBERS \
 KeyGroup<byte > data; \
 
@@ -4038,6 +4455,11 @@ return out.str(); \
 #define NI_BOOL_DATA_FIXLINKS \
 AKeyedData::FixLinks( objects, link_stack, version ); \
 
+#define NI_BOOL_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AKeyedData::GetRefs(); \
+return refs; \
+
 #define NI_BOOLEAN_EXTRA_DATA_MEMBERS \
 byte booleanData; \
 
@@ -4065,6 +4487,11 @@ return out.str(); \
 #define NI_BOOLEAN_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_BOOLEAN_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_BOOL_INTERPOLATOR_MEMBERS \
 bool boolValue; \
 Ref<NiBoolData > data; \
@@ -4107,6 +4534,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_BOOL_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_BOOL_TIMELINE_INTERPOLATOR_MEMBERS \
 byte boolValue; \
 Ref<NiBoolData > data; \
@@ -4149,6 +4582,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_BOOL_TIMELINE_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_B_S_BONE_L_O_D_CONTROLLER_MEMBERS \
 
 #define NI_B_S_BONE_L_O_D_CONTROLLER_INCLUDE "ABoneLODController.h" \
@@ -4171,6 +4610,11 @@ return out.str(); \
 #define NI_B_S_BONE_L_O_D_CONTROLLER_FIXLINKS \
 ABoneLODController::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_S_BONE_L_O_D_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = ABoneLODController::GetRefs(); \
+return refs; \
+
 #define NI_B_SPLINE_BASIS_DATA_MEMBERS \
 uint unknownInt; \
 
@@ -4198,6 +4642,11 @@ return out.str(); \
 #define NI_B_SPLINE_BASIS_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_SPLINE_BASIS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_MEMBERS \
 float unknownFloats[6]; \
 
@@ -4234,6 +4683,11 @@ return out.str(); \
 #define NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_FIXLINKS \
 NiBSplineInterpolator::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBSplineInterpolator::GetRefs(); \
+return refs; \
+
 #define NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_MEMBERS \
 Ref<NiBSplineData > data; \
 Ref<NiObject > unknownLink; \
@@ -4300,6 +4754,13 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink = NULL; \
 link_stack.pop_front(); \
 
+#define NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBSplineInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+refs.push_back(StaticCast<NiObject>(unknownLink)); \
+return refs; \
+
 #define NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_MEMBERS \
 Ref<NiBSplineData > data; \
 Ref<NiBSplineBasisData > basisData; \
@@ -4366,6 +4827,13 @@ if (link_stack.front() != 0xffffffff) { \
 	basisData = NULL; \
 link_stack.pop_front(); \
 
+#define NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBSplineInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+refs.push_back(StaticCast<NiObject>(basisData)); \
+return refs; \
+
 #define NI_B_SPLINE_DATA_MEMBERS \
 uint unknownInt; \
 uint count; \
@@ -4418,6 +4886,11 @@ return out.str(); \
 #define NI_B_SPLINE_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_SPLINE_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_CAMERA_MEMBERS \
 ushort unknownShort; \
 float frustumLeft; \
@@ -4528,6 +5001,12 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink_ = NULL; \
 link_stack.pop_front(); \
 
+#define NI_CAMERA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiAVObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(unknownLink_)); \
+return refs; \
+
 #define NI_COLLISION_DATA_MEMBERS \
 NiNode * targetNode; \
 uint unknown2; \
@@ -4632,6 +5111,11 @@ if (link_stack.front() != 0xffffffff) { \
 	targetNode = NULL; \
 link_stack.pop_front(); \
 
+#define NI_COLLISION_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_COLOR_DATA_MEMBERS \
 KeyGroup<Color4 > data; \
 
@@ -4681,6 +5165,11 @@ return out.str(); \
 #define NI_COLOR_DATA_FIXLINKS \
 AKeyedData::FixLinks( objects, link_stack, version ); \
 
+#define NI_COLOR_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AKeyedData::GetRefs(); \
+return refs; \
+
 #define NI_COLOR_EXTRA_DATA_MEMBERS \
 Color4 data; \
 
@@ -4707,6 +5196,11 @@ return out.str(); \
 #define NI_COLOR_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_COLOR_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_CONTROLLER_MANAGER_MEMBERS \
 bool cumulative; \
 uint numControllerSequences; \
@@ -4780,6 +5274,15 @@ if (link_stack.front() != 0xffffffff) { \
 	objectPalette = NULL; \
 link_stack.pop_front(); \
 
+#define NI_CONTROLLER_MANAGER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+for (uint i0 = 0; i0 < controllerSequences.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(controllerSequences[i0])); \
+}; \
+refs.push_back(StaticCast<NiObject>(objectPalette)); \
+return refs; \
+
 #define NI_CONTROLLER_SEQUENCE_MEMBERS \
 string name; \
 ControllerLink textKeys; \
@@ -5261,6 +5764,23 @@ if ( version >= 0x0A020000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_CONTROLLER_SEQUENCE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(textKeys.interpolator)); \
+refs.push_back(StaticCast<NiObject>(textKeys.unknownLink1)); \
+refs.push_back(StaticCast<NiObject>(textKeys.unknownLink2)); \
+refs.push_back(StaticCast<NiObject>(textKeys.stringPalette)); \
+for (uint i0 = 0; i0 < controlledBlocks.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(controlledBlocks[i0].interpolator)); \
+	refs.push_back(StaticCast<NiObject>(controlledBlocks[i0].unknownLink1)); \
+	refs.push_back(StaticCast<NiObject>(controlledBlocks[i0].unknownLink2)); \
+	refs.push_back(StaticCast<NiObject>(controlledBlocks[i0].stringPalette)); \
+}; \
+refs.push_back(StaticCast<NiObject>(textKeys2)); \
+refs.push_back(StaticCast<NiObject>(stringPalette)); \
+return refs; \
+
 #define NI_DEFAULT_A_V_OBJECT_PALETTE_MEMBERS \
 uint unknownInt; \
 uint numObjs; \
@@ -5319,6 +5839,13 @@ for (uint i0 = 0; i0 < objs.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_DEFAULT_A_V_OBJECT_PALETTE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+for (uint i0 = 0; i0 < objs.size(); i0++) { \
+}; \
+return refs; \
+
 #define NI_DIRECTIONAL_LIGHT_MEMBERS \
 
 #define NI_DIRECTIONAL_LIGHT_INCLUDE "NiLight.h" \
@@ -5341,6 +5868,11 @@ return out.str(); \
 #define NI_DIRECTIONAL_LIGHT_FIXLINKS \
 NiLight::FixLinks( objects, link_stack, version ); \
 
+#define NI_DIRECTIONAL_LIGHT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiLight::GetRefs(); \
+return refs; \
+
 #define NI_DITHER_PROPERTY_MEMBERS \
 unsigned short flags; \
 
@@ -5368,6 +5900,11 @@ return out.str(); \
 #define NI_DITHER_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_DITHER_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_FLIP_CONTROLLER_MEMBERS \
 uint textureSlot; \
 uint unknownInt2; \
@@ -5439,6 +5976,14 @@ for (uint i0 = 0; i0 < sources.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_FLIP_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiSingleInterpolatorController::GetRefs(); \
+for (uint i0 = 0; i0 < sources.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(sources[i0])); \
+}; \
+return refs; \
+
 #define NI_FLOAT_DATA_MEMBERS \
 KeyGroup<float > data; \
 
@@ -5488,6 +6033,11 @@ return out.str(); \
 #define NI_FLOAT_DATA_FIXLINKS \
 AKeyedData::FixLinks( objects, link_stack, version ); \
 
+#define NI_FLOAT_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AKeyedData::GetRefs(); \
+return refs; \
+
 #define NI_FLOAT_EXTRA_DATA_MEMBERS \
 float floatData; \
 
@@ -5515,6 +6065,11 @@ return out.str(); \
 #define NI_FLOAT_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_FLOAT_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_FLOAT_EXTRA_DATA_CONTROLLER_MEMBERS \
 Ref<NiObject > unknownLink; \
 string unknownString; \
@@ -5563,6 +6118,12 @@ if ( version >= 0x14000004 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_FLOAT_EXTRA_DATA_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(unknownLink)); \
+return refs; \
+
 #define NI_FLOAT_INTERPOLATOR_MEMBERS \
 float floatValue; \
 Ref<NiFloatData > data; \
@@ -5605,6 +6166,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_FLOAT_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_FLOATS_EXTRA_DATA_MEMBERS \
 uint numFloats; \
 vector<float > data; \
@@ -5647,6 +6214,11 @@ return out.str(); \
 #define NI_FLOATS_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_FLOATS_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_FOG_PROPERTY_MEMBERS \
 unsigned short flags; \
 float fogDepth; \
@@ -5682,6 +6254,11 @@ return out.str(); \
 #define NI_FOG_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_FOG_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_GEOM_MORPHER_CONTROLLER_MEMBERS \
 ushort unknown; \
 byte unknown2; \
@@ -5800,6 +6377,15 @@ if ( version >= 0x0A01006A ) { \
 	}; \
 }; \
 
+#define NI_GEOM_MORPHER_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+for (uint i0 = 0; i0 < interpolators.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(interpolators[i0])); \
+}; \
+return refs; \
+
 #define NI_GRAVITY_MEMBERS \
 float unknownFloat1; \
 float force; \
@@ -5843,6 +6429,11 @@ return out.str(); \
 #define NI_GRAVITY_FIXLINKS \
 AParticleModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_GRAVITY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+return refs; \
+
 #define NI_INTEGER_EXTRA_DATA_MEMBERS \
 uint integerData; \
 
@@ -5870,6 +6461,11 @@ return out.str(); \
 #define NI_INTEGER_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_INTEGER_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_INTEGERS_EXTRA_DATA_MEMBERS \
 uint numIntegers; \
 vector<uint > data; \
@@ -5912,6 +6508,11 @@ return out.str(); \
 #define NI_INTEGERS_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_INTEGERS_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_KEYFRAME_CONTROLLER_MEMBERS \
 Ref<NiKeyframeData > data; \
 
@@ -5950,6 +6551,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_KEYFRAME_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define B_S_KEYFRAME_CONTROLLER_MEMBERS \
 Ref<NiKeyframeData > data2; \
 
@@ -5988,6 +6595,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data2 = NULL; \
 link_stack.pop_front(); \
 
+#define B_S_KEYFRAME_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiKeyframeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data2)); \
+return refs; \
+
 #define NI_KEYFRAME_DATA_MEMBERS \
 uint numRotationKeys; \
 KeyType rotationType; \
@@ -6151,6 +6764,11 @@ return out.str(); \
 #define NI_KEYFRAME_DATA_FIXLINKS \
 AKeyedData::FixLinks( objects, link_stack, version ); \
 
+#define NI_KEYFRAME_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AKeyedData::GetRefs(); \
+return refs; \
+
 #define NI_LIGHT_COLOR_CONTROLLER_MEMBERS \
 ushort unknownShort; \
 Ref<NiPosData > data; \
@@ -6225,6 +6843,13 @@ if ( version >= 0x0A020000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_LIGHT_COLOR_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+refs.push_back(StaticCast<NiObject>(interpolator)); \
+return refs; \
+
 #define NI_LIGHT_DIMMER_CONTROLLER_MEMBERS \
 Ref<NiInterpolator > unknownLink; \
 
@@ -6263,6 +6888,12 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink = NULL; \
 link_stack.pop_front(); \
 
+#define NI_LIGHT_DIMMER_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(unknownLink)); \
+return refs; \
+
 #define NI_LOOK_AT_CONTROLLER_MEMBERS \
 ushort unknown1; \
 Ref<NiNode > lookAtNode; \
@@ -6309,6 +6940,12 @@ if (link_stack.front() != 0xffffffff) { \
 	lookAtNode = NULL; \
 link_stack.pop_front(); \
 
+#define NI_LOOK_AT_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(lookAtNode)); \
+return refs; \
+
 #define NI_LOOK_AT_INTERPOLATOR_MEMBERS \
 ushort unknownShort; \
 Ref<NiNode > lookAt; \
@@ -6409,6 +7046,15 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink3 = NULL; \
 link_stack.pop_front(); \
 
+#define NI_LOOK_AT_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(lookAt)); \
+refs.push_back(StaticCast<NiObject>(unknownLink1)); \
+refs.push_back(StaticCast<NiObject>(unknownLink2)); \
+refs.push_back(StaticCast<NiObject>(unknownLink3)); \
+return refs; \
+
 #define NI_MATERIAL_COLOR_CONTROLLER_MEMBERS \
 ushort unknown; \
 Ref<NiPosData > data; \
@@ -6461,6 +7107,12 @@ if ( version <= 0x0A010000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_MATERIAL_COLOR_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiSingleInterpolatorController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_MATERIAL_PROPERTY_MEMBERS \
 unsigned short flags; \
 Color3 ambientColor; \
@@ -6516,6 +7168,11 @@ return out.str(); \
 #define NI_MATERIAL_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_MATERIAL_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_MESH_P_SYS_DATA_MEMBERS \
 byte unknownByte11; \
 vector< array<float,4> > unknownFloats3; \
@@ -6728,6 +7385,16 @@ if ( version >= 0x0A020000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_MESH_P_SYS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysData::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(modifier)); \
+for (uint i0 = 0; i0 < unknownLinks.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(unknownLinks[i0])); \
+}; \
+refs.push_back(StaticCast<NiObject>(unknownLink2)); \
+return refs; \
+
 #define NI_MORPH_DATA_MEMBERS \
 uint numMorphs; \
 uint numVertices; \
@@ -6823,6 +7490,11 @@ return out.str(); \
 #define NI_MORPH_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_MORPH_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_MULTI_TARGET_TRANSFORM_CONTROLLER_MEMBERS \
 ushort numExtraTargets; \
 vector<NiNode * > extraTargets; \
@@ -6878,6 +7550,13 @@ for (uint i0 = 0; i0 < extraTargets.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_MULTI_TARGET_TRANSFORM_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+for (uint i0 = 0; i0 < extraTargets.size(); i0++) { \
+}; \
+return refs; \
+
 #define NI_NODE_MEMBERS \
 uint numChildren; \
 vector<Ref<NiAVObject > > children; \
@@ -6964,6 +7643,17 @@ for (uint i0 = 0; i0 < effects.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_NODE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiAVObject::GetRefs(); \
+for (uint i0 = 0; i0 < children.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(children[i0])); \
+}; \
+for (uint i0 = 0; i0 < effects.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(effects[i0])); \
+}; \
+return refs; \
+
 #define AVOID_NODE_MEMBERS \
 
 #define AVOID_NODE_INCLUDE "NiNode.h" \
@@ -6986,6 +7676,11 @@ return out.str(); \
 #define AVOID_NODE_FIXLINKS \
 NiNode::FixLinks( objects, link_stack, version ); \
 
+#define AVOID_NODE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiNode::GetRefs(); \
+return refs; \
+
 #define FX_WIDGET_MEMBERS \
 byte unknown1; \
 byte unknown292Bytes[292]; \
@@ -7027,6 +7722,11 @@ return out.str(); \
 #define FX_WIDGET_FIXLINKS \
 NiNode::FixLinks( objects, link_stack, version ); \
 
+#define FX_WIDGET_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiNode::GetRefs(); \
+return refs; \
+
 #define FX_BUTTON_MEMBERS \
 
 #define FX_BUTTON_INCLUDE "FxWidget.h" \
@@ -7049,6 +7749,11 @@ return out.str(); \
 #define FX_BUTTON_FIXLINKS \
 FxWidget::FixLinks( objects, link_stack, version ); \
 
+#define FX_BUTTON_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = FxWidget::GetRefs(); \
+return refs; \
+
 #define FX_RADIO_BUTTON_MEMBERS \
 uint unknownInt1; \
 uint unknownInt2; \
@@ -7116,6 +7821,14 @@ for (uint i0 = 0; i0 < unknownLinks.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define FX_RADIO_BUTTON_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = FxWidget::GetRefs(); \
+for (uint i0 = 0; i0 < unknownLinks.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(unknownLinks[i0])); \
+}; \
+return refs; \
+
 #define NI_BILLBOARD_NODE_MEMBERS \
 ushort billboardMode; \
 
@@ -7147,6 +7860,11 @@ return out.str(); \
 #define NI_BILLBOARD_NODE_FIXLINKS \
 NiNode::FixLinks( objects, link_stack, version ); \
 
+#define NI_BILLBOARD_NODE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiNode::GetRefs(); \
+return refs; \
+
 #define NI_B_S_ANIMATION_NODE_MEMBERS \
 
 #define NI_B_S_ANIMATION_NODE_INCLUDE "NiNode.h" \
@@ -7169,6 +7887,11 @@ return out.str(); \
 #define NI_B_S_ANIMATION_NODE_FIXLINKS \
 NiNode::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_S_ANIMATION_NODE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiNode::GetRefs(); \
+return refs; \
+
 #define NI_B_S_PARTICLE_NODE_MEMBERS \
 
 #define NI_B_S_PARTICLE_NODE_INCLUDE "NiNode.h" \
@@ -7191,6 +7914,11 @@ return out.str(); \
 #define NI_B_S_PARTICLE_NODE_FIXLINKS \
 NiNode::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_S_PARTICLE_NODE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiNode::GetRefs(); \
+return refs; \
+
 #define NI_L_O_D_NODE_MEMBERS \
 uint lodType; \
 Vector3 lodCenter; \
@@ -7273,6 +8001,12 @@ if ( (lodType == 1) ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_L_O_D_NODE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiNode::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(rangeData)); \
+return refs; \
+
 #define NI_PALETTE_MEMBERS \
 byte unknownByte; \
 uint numEntries_; \
@@ -7324,6 +8058,11 @@ return out.str(); \
 #define NI_PALETTE_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_PALETTE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLE_BOMB_MEMBERS \
 float unknownFloat1; \
 float unknownFloat2; \
@@ -7395,6 +8134,11 @@ return out.str(); \
 #define NI_PARTICLE_BOMB_FIXLINKS \
 AParticleModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_PARTICLE_BOMB_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLE_COLOR_MODIFIER_MEMBERS \
 Ref<NiColorData > colorData; \
 
@@ -7433,6 +8177,12 @@ if (link_stack.front() != 0xffffffff) { \
 	colorData = NULL; \
 link_stack.pop_front(); \
 
+#define NI_PARTICLE_COLOR_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(colorData)); \
+return refs; \
+
 #define NI_PARTICLE_GROW_FADE_MEMBERS \
 float grow; \
 float fade; \
@@ -7464,6 +8214,11 @@ return out.str(); \
 #define NI_PARTICLE_GROW_FADE_FIXLINKS \
 AParticleModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_PARTICLE_GROW_FADE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLE_MESH_MODIFIER_MEMBERS \
 uint numParticleMeshes; \
 Ref<NiTriBasedGeom > particleMeshes; \
@@ -7506,6 +8261,12 @@ if (link_stack.front() != 0xffffffff) { \
 	particleMeshes = NULL; \
 link_stack.pop_front(); \
 
+#define NI_PARTICLE_MESH_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(particleMeshes)); \
+return refs; \
+
 #define NI_PARTICLE_ROTATION_MEMBERS \
 byte unknownByte; \
 float unknownFloat1; \
@@ -7549,6 +8310,11 @@ return out.str(); \
 #define NI_PARTICLE_ROTATION_FIXLINKS \
 AParticleModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_PARTICLE_ROTATION_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLES_MEMBERS \
 
 #define NI_PARTICLES_INCLUDE "NiTriBasedGeom.h" \
@@ -7571,6 +8337,11 @@ return out.str(); \
 #define NI_PARTICLES_FIXLINKS \
 NiTriBasedGeom::FixLinks( objects, link_stack, version ); \
 
+#define NI_PARTICLES_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTriBasedGeom::GetRefs(); \
+return refs; \
+
 #define NI_AUTO_NORMAL_PARTICLES_MEMBERS \
 
 #define NI_AUTO_NORMAL_PARTICLES_INCLUDE "NiParticles.h" \
@@ -7593,6 +8364,11 @@ return out.str(); \
 #define NI_AUTO_NORMAL_PARTICLES_FIXLINKS \
 NiParticles::FixLinks( objects, link_stack, version ); \
 
+#define NI_AUTO_NORMAL_PARTICLES_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticles::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLE_MESHES_MEMBERS \
 
 #define NI_PARTICLE_MESHES_INCLUDE "NiParticles.h" \
@@ -7615,6 +8391,11 @@ return out.str(); \
 #define NI_PARTICLE_MESHES_FIXLINKS \
 NiParticles::FixLinks( objects, link_stack, version ); \
 
+#define NI_PARTICLE_MESHES_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticles::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLES_DATA_MEMBERS \
 ushort numActive; \
 bool hasUnknownFloats; \
@@ -7696,6 +8477,11 @@ return out.str(); \
 #define NI_PARTICLES_DATA_FIXLINKS \
 NiAutoNormalParticlesData::FixLinks( objects, link_stack, version ); \
 
+#define NI_PARTICLES_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiAutoNormalParticlesData::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLE_MESHES_DATA_MEMBERS \
 Ref<NiTriBasedGeom > unknownLink2; \
 
@@ -7734,6 +8520,12 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink2 = NULL; \
 link_stack.pop_front(); \
 
+#define NI_PARTICLE_MESHES_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticlesData::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(unknownLink2)); \
+return refs; \
+
 #define NI_PARTICLE_SYSTEM_MEMBERS \
 bool unknownBool; \
 uint numModifiers; \
@@ -7799,6 +8591,14 @@ if ( version >= 0x0A010000 ) { \
 	}; \
 }; \
 
+#define NI_PARTICLE_SYSTEM_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticles::GetRefs(); \
+for (uint i0 = 0; i0 < modifiers.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(modifiers[i0])); \
+}; \
+return refs; \
+
 #define NI_MESH_PARTICLE_SYSTEM_MEMBERS \
 
 #define NI_MESH_PARTICLE_SYSTEM_INCLUDE "NiParticleSystem.h" \
@@ -7821,6 +8621,11 @@ return out.str(); \
 #define NI_MESH_PARTICLE_SYSTEM_FIXLINKS \
 NiParticleSystem::FixLinks( objects, link_stack, version ); \
 
+#define NI_MESH_PARTICLE_SYSTEM_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticleSystem::GetRefs(); \
+return refs; \
+
 #define NI_PARTICLE_SYSTEM_CONTROLLER_MEMBERS \
 float speed; \
 float speedRandom; \
@@ -8050,6 +8855,15 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink2 = NULL; \
 link_stack.pop_front(); \
 
+#define NI_PARTICLE_SYSTEM_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(emitter)); \
+refs.push_back(StaticCast<NiObject>(unknownLink)); \
+refs.push_back(StaticCast<NiObject>(particleExtra)); \
+refs.push_back(StaticCast<NiObject>(unknownLink2)); \
+return refs; \
+
 #define NI_B_S_P_ARRAY_CONTROLLER_MEMBERS \
 
 #define NI_B_S_P_ARRAY_CONTROLLER_INCLUDE "NiParticleSystemController.h" \
@@ -8072,6 +8886,11 @@ return out.str(); \
 #define NI_B_S_P_ARRAY_CONTROLLER_FIXLINKS \
 NiParticleSystemController::FixLinks( objects, link_stack, version ); \
 
+#define NI_B_S_P_ARRAY_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticleSystemController::GetRefs(); \
+return refs; \
+
 #define NI_PATH_CONTROLLER_MEMBERS \
 ushort unknownShort2; \
 uint unknownInt1; \
@@ -8148,6 +8967,13 @@ if (link_stack.front() != 0xffffffff) { \
 	floatData = NULL; \
 link_stack.pop_front(); \
 
+#define NI_PATH_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(posData)); \
+refs.push_back(StaticCast<NiObject>(floatData)); \
+return refs; \
+
 #define NI_PATH_INTERPOLATOR_MEMBERS \
 float unknownFloat1; \
 float unknownFloat2; \
@@ -8212,6 +9038,13 @@ if (link_stack.front() != 0xffffffff) { \
 	floatData = NULL; \
 link_stack.pop_front(); \
 
+#define NI_PATH_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiBlendInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(posData)); \
+refs.push_back(StaticCast<NiObject>(floatData)); \
+return refs; \
+
 #define NI_PIXEL_DATA_MEMBERS \
 PixelFormat pixelFormat; \
 uint redMask; \
@@ -8368,6 +9201,12 @@ if (link_stack.front() != 0xffffffff) { \
 	palette = NULL; \
 link_stack.pop_front(); \
 
+#define NI_PIXEL_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(palette)); \
+return refs; \
+
 #define NI_PLANAR_COLLIDER_MEMBERS \
 ushort unknownShort; \
 float unknownFloat1; \
@@ -8471,6 +9310,11 @@ return out.str(); \
 #define NI_PLANAR_COLLIDER_FIXLINKS \
 AParticleModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_PLANAR_COLLIDER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+return refs; \
+
 #define NI_POINT3_INTERPOLATOR_MEMBERS \
 Vector3 point3Value; \
 Ref<NiPosData > data; \
@@ -8513,6 +9357,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_POINT3_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_POINT_LIGHT_MEMBERS \
 float constantAttenuation; \
 float linearAttenuation; \
@@ -8548,6 +9398,11 @@ return out.str(); \
 #define NI_POINT_LIGHT_FIXLINKS \
 NiLight::FixLinks( objects, link_stack, version ); \
 
+#define NI_POINT_LIGHT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiLight::GetRefs(); \
+return refs; \
+
 #define NI_POS_DATA_MEMBERS \
 KeyGroup<Vector3 > data; \
 
@@ -8597,6 +9452,11 @@ return out.str(); \
 #define NI_POS_DATA_FIXLINKS \
 AKeyedData::FixLinks( objects, link_stack, version ); \
 
+#define NI_POS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AKeyedData::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_AGE_DEATH_MODIFIER_MEMBERS \
 bool spawnOnDeath; \
 Ref<NiPSysSpawnModifier > spawnModifier; \
@@ -8639,6 +9499,12 @@ if (link_stack.front() != 0xffffffff) { \
 	spawnModifier = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_AGE_DEATH_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(spawnModifier)); \
+return refs; \
+
 #define NI_P_SYS_BOMB_MODIFIER_MEMBERS \
 NiNode * unknownLink; \
 uint unknownInts1[2]; \
@@ -8719,6 +9585,11 @@ if (link_stack.front() != 0xffffffff) { \
 	unknownLink = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_BOMB_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_BOUND_UPDATE_MODIFIER_MEMBERS \
 ushort updateSkip; \
 
@@ -8746,6 +9617,11 @@ return out.str(); \
 #define NI_P_SYS_BOUND_UPDATE_MODIFIER_FIXLINKS \
 NiPSysModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_BOUND_UPDATE_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_BOX_EMITTER_MEMBERS \
 float width; \
 float height; \
@@ -8781,6 +9657,11 @@ return out.str(); \
 #define NI_P_SYS_BOX_EMITTER_FIXLINKS \
 NiPSysVolumeEmitter::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_BOX_EMITTER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysVolumeEmitter::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_COLLIDER_MANAGER_MEMBERS \
 Ref<NiPSysPlanarCollider > collider; \
 
@@ -8819,6 +9700,12 @@ if (link_stack.front() != 0xffffffff) { \
 	collider = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_COLLIDER_MANAGER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(collider)); \
+return refs; \
+
 #define NI_P_SYS_COLOR_MODIFIER_MEMBERS \
 Ref<NiColorData > data; \
 
@@ -8857,6 +9744,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_COLOR_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_P_SYS_CYLINDER_EMITTER_MEMBERS \
 float radius; \
 float height; \
@@ -8888,6 +9781,11 @@ return out.str(); \
 #define NI_P_SYS_CYLINDER_EMITTER_FIXLINKS \
 NiPSysVolumeEmitter::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_CYLINDER_EMITTER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysVolumeEmitter::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_DATA_MEMBERS \
 vector< array<float,10> > unknownFloats4; \
 bool unknownBool1; \
@@ -9037,6 +9935,11 @@ return out.str(); \
 #define NI_P_SYS_DATA_FIXLINKS \
 APSysData::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysData::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_DRAG_MODIFIER_MEMBERS \
 NiObject * parent; \
 Vector3 dragAxis; \
@@ -9091,6 +9994,11 @@ if (link_stack.front() != 0xffffffff) { \
 	parent = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_DRAG_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_CTLR_MEMBERS \
 Ref<NiInterpolator > visibilityInterpolator; \
 
@@ -9129,6 +10037,12 @@ if (link_stack.front() != 0xffffffff) { \
 	visibilityInterpolator = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_EMITTER_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(visibilityInterpolator)); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_CTLR_DATA_MEMBERS \
 KeyGroup<float > floatKeys_; \
 uint numVisibilityKeys_; \
@@ -9198,6 +10112,11 @@ return out.str(); \
 #define NI_P_SYS_EMITTER_CTLR_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_EMITTER_CTLR_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_DECLINATION_CTLR_MEMBERS \
 
 #define NI_P_SYS_EMITTER_DECLINATION_CTLR_INCLUDE "APSysCtlr.h" \
@@ -9220,6 +10139,11 @@ return out.str(); \
 #define NI_P_SYS_EMITTER_DECLINATION_CTLR_FIXLINKS \
 APSysCtlr::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_EMITTER_DECLINATION_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_MEMBERS \
 
 #define NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_INCLUDE "APSysCtlr.h" \
@@ -9242,6 +10166,11 @@ return out.str(); \
 #define NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_FIXLINKS \
 APSysCtlr::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_MEMBERS \
 
 #define NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_INCLUDE "APSysCtlr.h" \
@@ -9264,6 +10193,11 @@ return out.str(); \
 #define NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_FIXLINKS \
 APSysCtlr::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_MEMBERS \
 
 #define NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_INCLUDE "APSysCtlr.h" \
@@ -9286,6 +10220,11 @@ return out.str(); \
 #define NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_FIXLINKS \
 APSysCtlr::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_EMITTER_SPEED_CTLR_MEMBERS \
 
 #define NI_P_SYS_EMITTER_SPEED_CTLR_INCLUDE "APSysCtlr.h" \
@@ -9308,6 +10247,11 @@ return out.str(); \
 #define NI_P_SYS_EMITTER_SPEED_CTLR_FIXLINKS \
 APSysCtlr::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_EMITTER_SPEED_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_GRAVITY_MODIFIER_MEMBERS \
 NiNode * gravityObject; \
 Vector3 gravityAxis; \
@@ -9370,6 +10314,11 @@ if (link_stack.front() != 0xffffffff) { \
 	gravityObject = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_GRAVITY_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_GRAVITY_STRENGTH_CTLR_MEMBERS \
 
 #define NI_P_SYS_GRAVITY_STRENGTH_CTLR_INCLUDE "APSysCtlr.h" \
@@ -9392,6 +10341,11 @@ return out.str(); \
 #define NI_P_SYS_GRAVITY_STRENGTH_CTLR_FIXLINKS \
 APSysCtlr::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_GRAVITY_STRENGTH_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_GROW_FADE_MODIFIER_MEMBERS \
 float growTime; \
 ushort growGeneration; \
@@ -9431,6 +10385,11 @@ return out.str(); \
 #define NI_P_SYS_GROW_FADE_MODIFIER_FIXLINKS \
 NiPSysModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_GROW_FADE_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_MESH_EMITTER_MEMBERS \
 uint numEmitterMeshes; \
 vector<Ref<NiTriBasedGeom > > emitterMeshes; \
@@ -9498,6 +10457,14 @@ for (uint i0 = 0; i0 < emitterMeshes.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_P_SYS_MESH_EMITTER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysEmitter::GetRefs(); \
+for (uint i0 = 0; i0 < emitterMeshes.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(emitterMeshes[i0])); \
+}; \
+return refs; \
+
 #define NI_P_SYS_MESH_UPDATE_MODIFIER_MEMBERS \
 uint numMeshes; \
 vector<Ref<NiNode > > meshes; \
@@ -9553,6 +10520,14 @@ for (uint i0 = 0; i0 < meshes.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_P_SYS_MESH_UPDATE_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+for (uint i0 = 0; i0 < meshes.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(meshes[i0])); \
+}; \
+return refs; \
+
 #define NI_P_SYS_MODIFIER_ACTIVE_CTLR_MEMBERS \
 
 #define NI_P_SYS_MODIFIER_ACTIVE_CTLR_INCLUDE "APSysCtlr.h" \
@@ -9575,6 +10550,11 @@ return out.str(); \
 #define NI_P_SYS_MODIFIER_ACTIVE_CTLR_FIXLINKS \
 APSysCtlr::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_MODIFIER_ACTIVE_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = APSysCtlr::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_PLANAR_COLLIDER_MEMBERS \
 float bounce; \
 bool spawnOnCollide; \
@@ -9683,6 +10663,14 @@ if (link_stack.front() != 0xffffffff) { \
 	colliderObject = NULL; \
 link_stack.pop_front(); \
 
+#define NI_P_SYS_PLANAR_COLLIDER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(spawnModifier)); \
+refs.push_back(StaticCast<NiObject>(unknownLink_)); \
+refs.push_back(StaticCast<NiObject>(colliderObject)); \
+return refs; \
+
 #define NI_P_SYS_POSITION_MODIFIER_MEMBERS \
 
 #define NI_P_SYS_POSITION_MODIFIER_INCLUDE "NiPSysModifier.h" \
@@ -9705,6 +10693,11 @@ return out.str(); \
 #define NI_P_SYS_POSITION_MODIFIER_FIXLINKS \
 NiPSysModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_POSITION_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_RESET_ON_LOOP_CTLR_MEMBERS \
 
 #define NI_P_SYS_RESET_ON_LOOP_CTLR_INCLUDE "NiTimeController.h" \
@@ -9727,6 +10720,11 @@ return out.str(); \
 #define NI_P_SYS_RESET_ON_LOOP_CTLR_FIXLINKS \
 NiTimeController::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_RESET_ON_LOOP_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_ROTATION_MODIFIER_MEMBERS \
 float initialRotationSpeed; \
 float initialRotationSpeedVariation; \
@@ -9782,6 +10780,11 @@ return out.str(); \
 #define NI_P_SYS_ROTATION_MODIFIER_FIXLINKS \
 NiPSysModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_ROTATION_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_SPAWN_MODIFIER_MEMBERS \
 ushort numSpawnGenerations; \
 float percentageSpawned; \
@@ -9837,6 +10840,11 @@ return out.str(); \
 #define NI_P_SYS_SPAWN_MODIFIER_FIXLINKS \
 NiPSysModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_SPAWN_MODIFIER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysModifier::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_SPHERE_EMITTER_MEMBERS \
 float radius; \
 
@@ -9864,6 +10872,11 @@ return out.str(); \
 #define NI_P_SYS_SPHERE_EMITTER_FIXLINKS \
 NiPSysVolumeEmitter::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_SPHERE_EMITTER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPSysVolumeEmitter::GetRefs(); \
+return refs; \
+
 #define NI_P_SYS_UPDATE_CTLR_MEMBERS \
 
 #define NI_P_SYS_UPDATE_CTLR_INCLUDE "NiTimeController.h" \
@@ -9886,6 +10899,11 @@ return out.str(); \
 #define NI_P_SYS_UPDATE_CTLR_FIXLINKS \
 NiTimeController::FixLinks( objects, link_stack, version ); \
 
+#define NI_P_SYS_UPDATE_CTLR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+return refs; \
+
 #define NI_RANGE_L_O_D_DATA_MEMBERS \
 Vector3 lodCenter; \
 uint numLodLevels; \
@@ -9931,6 +10949,11 @@ return out.str(); \
 #define NI_RANGE_L_O_D_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_RANGE_L_O_D_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_ROTATING_PARTICLES_MEMBERS \
 
 #define NI_ROTATING_PARTICLES_INCLUDE "NiParticles.h" \
@@ -9953,6 +10976,11 @@ return out.str(); \
 #define NI_ROTATING_PARTICLES_FIXLINKS \
 NiParticles::FixLinks( objects, link_stack, version ); \
 
+#define NI_ROTATING_PARTICLES_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticles::GetRefs(); \
+return refs; \
+
 #define NI_ROTATING_PARTICLES_DATA_MEMBERS \
 
 #define NI_ROTATING_PARTICLES_DATA_INCLUDE "NiParticlesData.h" \
@@ -9975,6 +11003,11 @@ return out.str(); \
 #define NI_ROTATING_PARTICLES_DATA_FIXLINKS \
 NiParticlesData::FixLinks( objects, link_stack, version ); \
 
+#define NI_ROTATING_PARTICLES_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiParticlesData::GetRefs(); \
+return refs; \
+
 #define NI_SCREEN_L_O_D_DATA_MEMBERS \
 float unknownFloats[8]; \
 uint unknownCount; \
@@ -10031,6 +11064,11 @@ return out.str(); \
 #define NI_SCREEN_L_O_D_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_SCREEN_L_O_D_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_SEQUENCE_STREAM_HELPER_MEMBERS \
 
 #define NI_SEQUENCE_STREAM_HELPER_INCLUDE "NiObjectNET.h" \
@@ -10053,6 +11091,11 @@ return out.str(); \
 #define NI_SEQUENCE_STREAM_HELPER_FIXLINKS \
 NiObjectNET::FixLinks( objects, link_stack, version ); \
 
+#define NI_SEQUENCE_STREAM_HELPER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObjectNET::GetRefs(); \
+return refs; \
+
 #define NI_SHADE_PROPERTY_MEMBERS \
 unsigned short flags; \
 
@@ -10080,6 +11123,11 @@ return out.str(); \
 #define NI_SHADE_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_SHADE_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_SKIN_DATA_MEMBERS \
 Matrix33 rotation; \
 Vector3 translation; \
@@ -10194,6 +11242,12 @@ if ( version <= 0x0A010000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_SKIN_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(skinPartition)); \
+return refs; \
+
 #define NI_SKIN_INSTANCE_MEMBERS \
 Ref<NiSkinData > data; \
 Ref<NiSkinPartition > skinPartition; \
@@ -10296,6 +11350,15 @@ for (uint i0 = 0; i0 < bones.bones.size(); i0++) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_SKIN_INSTANCE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+refs.push_back(StaticCast<NiObject>(skinPartition)); \
+for (uint i0 = 0; i0 < bones.bones.size(); i0++) { \
+}; \
+return refs; \
+
 #define NI_SKIN_PARTITION_MEMBERS \
 uint numSkinPartitionBlocks; \
 vector<SkinPartition > skinPartitionBlocks; \
@@ -10564,6 +11627,11 @@ return out.str(); \
 #define NI_SKIN_PARTITION_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_SKIN_PARTITION_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_SOURCE_TEXTURE_MEMBERS \
 byte useExternal; \
 string fileName; \
@@ -10696,6 +11764,13 @@ if ( (useExternal == 0) ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_SOURCE_TEXTURE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObjectNET::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(unknownLink)); \
+refs.push_back(StaticCast<NiObject>(pixelData)); \
+return refs; \
+
 #define NI_SPECULAR_PROPERTY_MEMBERS \
 unsigned short flags; \
 
@@ -10723,6 +11798,11 @@ return out.str(); \
 #define NI_SPECULAR_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_SPECULAR_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_SPHERICAL_COLLIDER_MEMBERS \
 float unknownFloat1; \
 ushort unknownShort; \
@@ -10770,6 +11850,11 @@ return out.str(); \
 #define NI_SPHERICAL_COLLIDER_FIXLINKS \
 AParticleModifier::FixLinks( objects, link_stack, version ); \
 
+#define NI_SPHERICAL_COLLIDER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AParticleModifier::GetRefs(); \
+return refs; \
+
 #define NI_SPOT_LIGHT_MEMBERS \
 float cutoffAngle; \
 float exponent; \
@@ -10801,6 +11886,11 @@ return out.str(); \
 #define NI_SPOT_LIGHT_FIXLINKS \
 NiPointLight::FixLinks( objects, link_stack, version ); \
 
+#define NI_SPOT_LIGHT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiPointLight::GetRefs(); \
+return refs; \
+
 #define NI_STENCIL_PROPERTY_MEMBERS \
 unsigned short flags; \
 bool stencilEnabled; \
@@ -10864,6 +11954,11 @@ return out.str(); \
 #define NI_STENCIL_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_STENCIL_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_STRING_EXTRA_DATA_MEMBERS \
 uint bytesRemaining; \
 string stringData; \
@@ -10899,6 +11994,11 @@ return out.str(); \
 #define NI_STRING_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_STRING_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_STRING_PALETTE_MEMBERS \
 StringPalette palette; \
 
@@ -10928,6 +12028,11 @@ return out.str(); \
 #define NI_STRING_PALETTE_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_STRING_PALETTE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_STRINGS_EXTRA_DATA_MEMBERS \
 uint numStrings; \
 vector<string > data; \
@@ -10970,6 +12075,11 @@ return out.str(); \
 #define NI_STRINGS_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_STRINGS_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_TEXT_KEY_EXTRA_DATA_MEMBERS \
 uint unknownInt1; \
 uint numTextKeys; \
@@ -11020,6 +12130,11 @@ return out.str(); \
 #define NI_TEXT_KEY_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_TEXT_KEY_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_TEXTURE_EFFECT_MEMBERS \
 Matrix33 modelProjectionMatrix; \
 Vector3 modelProjectionTransform; \
@@ -11114,6 +12229,12 @@ if (link_stack.front() != 0xffffffff) { \
 	sourceTexture = NULL; \
 link_stack.pop_front(); \
 
+#define NI_TEXTURE_EFFECT_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiDynamicEffect::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(sourceTexture)); \
+return refs; \
+
 #define NI_TEXTURE_TRANSFORM_CONTROLLER_MEMBERS \
 byte unknown2; \
 uint textureSlot; \
@@ -11170,6 +12291,12 @@ if ( version <= 0x0A010000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_TEXTURE_TRANSFORM_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiSingleInterpolatorController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_TEXTURING_PROPERTY_MEMBERS \
 unsigned short flags; \
 ApplyMode applyMode; \
@@ -11975,6 +13102,22 @@ if ( version >= 0x0A000100 ) { \
 	}; \
 }; \
 
+#define NI_TEXTURING_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(baseTexture.source)); \
+refs.push_back(StaticCast<NiObject>(darkTexture.source)); \
+refs.push_back(StaticCast<NiObject>(detailTexture.source)); \
+refs.push_back(StaticCast<NiObject>(glossTexture.source)); \
+refs.push_back(StaticCast<NiObject>(glowTexture.source)); \
+refs.push_back(StaticCast<NiObject>(bumpMapTexture.source)); \
+refs.push_back(StaticCast<NiObject>(decal0Texture.source)); \
+refs.push_back(StaticCast<NiObject>(decal1Texture.source)); \
+for (uint i0 = 0; i0 < shaderTextures.size(); i0++) { \
+	refs.push_back(StaticCast<NiObject>(shaderTextures[i0].textureData.source)); \
+}; \
+return refs; \
+
 #define NI_TRANSFORM_CONTROLLER_MEMBERS \
 
 #define NI_TRANSFORM_CONTROLLER_INCLUDE "NiSingleInterpolatorController.h" \
@@ -11997,6 +13140,11 @@ return out.str(); \
 #define NI_TRANSFORM_CONTROLLER_FIXLINKS \
 NiSingleInterpolatorController::FixLinks( objects, link_stack, version ); \
 
+#define NI_TRANSFORM_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiSingleInterpolatorController::GetRefs(); \
+return refs; \
+
 #define NI_TRANSFORM_DATA_MEMBERS \
 
 #define NI_TRANSFORM_DATA_INCLUDE "NiKeyframeData.h" \
@@ -12019,6 +13167,11 @@ return out.str(); \
 #define NI_TRANSFORM_DATA_FIXLINKS \
 NiKeyframeData::FixLinks( objects, link_stack, version ); \
 
+#define NI_TRANSFORM_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiKeyframeData::GetRefs(); \
+return refs; \
+
 #define NI_TRANSFORM_INTERPOLATOR_MEMBERS \
 Vector3 translation; \
 Quaternion rotation; \
@@ -12087,6 +13240,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_TRANSFORM_INTERPOLATOR_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiInterpolator::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_TRI_SHAPE_MEMBERS \
 
 #define NI_TRI_SHAPE_INCLUDE "NiTriBasedGeom.h" \
@@ -12109,6 +13268,11 @@ return out.str(); \
 #define NI_TRI_SHAPE_FIXLINKS \
 NiTriBasedGeom::FixLinks( objects, link_stack, version ); \
 
+#define NI_TRI_SHAPE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTriBasedGeom::GetRefs(); \
+return refs; \
+
 #define NI_TRI_SHAPE_DATA_MEMBERS \
 ushort numTriangles; \
 uint numTrianglePoints; \
@@ -12211,6 +13375,11 @@ return out.str(); \
 #define NI_TRI_SHAPE_DATA_FIXLINKS \
 NiTriBasedGeomData::FixLinks( objects, link_stack, version ); \
 
+#define NI_TRI_SHAPE_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTriBasedGeomData::GetRefs(); \
+return refs; \
+
 #define NI_TRI_STRIPS_MEMBERS \
 
 #define NI_TRI_STRIPS_INCLUDE "NiTriBasedGeom.h" \
@@ -12233,6 +13402,11 @@ return out.str(); \
 #define NI_TRI_STRIPS_FIXLINKS \
 NiTriBasedGeom::FixLinks( objects, link_stack, version ); \
 
+#define NI_TRI_STRIPS_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTriBasedGeom::GetRefs(); \
+return refs; \
+
 #define NI_TRI_STRIPS_DATA_MEMBERS \
 ushort numTriangles; \
 ushort numStrips; \
@@ -12333,6 +13507,11 @@ return out.str(); \
 #define NI_TRI_STRIPS_DATA_FIXLINKS \
 NiTriBasedGeomData::FixLinks( objects, link_stack, version ); \
 
+#define NI_TRI_STRIPS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTriBasedGeomData::GetRefs(); \
+return refs; \
+
 #define NI_U_V_CONTROLLER_MEMBERS \
 ushort unknownShort; \
 Ref<NiUVData > data; \
@@ -12375,6 +13554,12 @@ if (link_stack.front() != 0xffffffff) { \
 	data = NULL; \
 link_stack.pop_front(); \
 
+#define NI_U_V_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiTimeController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_U_V_DATA_MEMBERS \
 KeyGroup<float > uvGroups[4]; \
 
@@ -12430,6 +13615,11 @@ return out.str(); \
 #define NI_U_V_DATA_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
 
+#define NI_U_V_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiObject::GetRefs(); \
+return refs; \
+
 #define NI_VECTOR_EXTRA_DATA_MEMBERS \
 Vector3 vectorData; \
 float unknownFloat; \
@@ -12461,6 +13651,11 @@ return out.str(); \
 #define NI_VECTOR_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_VECTOR_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_VERTEX_COLOR_PROPERTY_MEMBERS \
 unsigned short flags; \
 VertMode vertexMode; \
@@ -12496,6 +13691,11 @@ return out.str(); \
 #define NI_VERTEX_COLOR_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_VERTEX_COLOR_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_VERT_WEIGHTS_EXTRA_DATA_MEMBERS \
 uint numBytes; \
 ushort numVertices; \
@@ -12542,6 +13742,11 @@ return out.str(); \
 #define NI_VERT_WEIGHTS_EXTRA_DATA_FIXLINKS \
 NiExtraData::FixLinks( objects, link_stack, version ); \
 
+#define NI_VERT_WEIGHTS_EXTRA_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiExtraData::GetRefs(); \
+return refs; \
+
 #define NI_VIS_CONTROLLER_MEMBERS \
 Ref<NiVisData > data; \
 
@@ -12586,6 +13791,12 @@ if ( version <= 0x0A010000 ) { \
 	link_stack.pop_front(); \
 }; \
 
+#define NI_VIS_CONTROLLER_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiSingleInterpolatorController::GetRefs(); \
+refs.push_back(StaticCast<NiObject>(data)); \
+return refs; \
+
 #define NI_VIS_DATA_MEMBERS \
 uint numVisKeys; \
 vector<Key<byte > > visKeys; \
@@ -12628,6 +13839,11 @@ return out.str(); \
 #define NI_VIS_DATA_FIXLINKS \
 AKeyedData::FixLinks( objects, link_stack, version ); \
 
+#define NI_VIS_DATA_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = AKeyedData::GetRefs(); \
+return refs; \
+
 #define NI_WIREFRAME_PROPERTY_MEMBERS \
 unsigned short flags; \
 
@@ -12655,6 +13871,11 @@ return out.str(); \
 #define NI_WIREFRAME_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_WIREFRAME_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define NI_Z_BUFFER_PROPERTY_MEMBERS \
 unsigned short flags; \
 uint function; \
@@ -12690,6 +13911,11 @@ return out.str(); \
 #define NI_Z_BUFFER_PROPERTY_FIXLINKS \
 NiProperty::FixLinks( objects, link_stack, version ); \
 
+#define NI_Z_BUFFER_PROPERTY_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiProperty::GetRefs(); \
+return refs; \
+
 #define ROOT_COLLISION_NODE_MEMBERS \
 
 #define ROOT_COLLISION_NODE_INCLUDE "NiNode.h" \
@@ -12712,4 +13938,9 @@ return out.str(); \
 #define ROOT_COLLISION_NODE_FIXLINKS \
 NiNode::FixLinks( objects, link_stack, version ); \
 
+#define ROOT_COLLISION_NODE_GETREFS \
+list<Ref<NiObject> > refs; \
+refs = NiNode::GetRefs(); \
+return refs; \
+
 #endif
diff --git a/obj/ABoneLODController.cpp b/obj/ABoneLODController.cpp
index 0b7150d1..3cb85e85 100644
--- a/obj/ABoneLODController.cpp
+++ b/obj/ABoneLODController.cpp
@@ -28,6 +28,10 @@ void ABoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	A_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> ABoneLODController::GetRefs() const {
+	A_BONE_L_O_D_CONTROLLER_GETREFS
+}
+
 const Type & ABoneLODController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/ABoneLODController.h b/obj/ABoneLODController.h
index 4c4673e2..967ccc0d 100644
--- a/obj/ABoneLODController.h
+++ b/obj/ABoneLODController.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	A_BONE_L_O_D_CONTROLLER_MEMBERS
diff --git a/obj/AKeyedData.cpp b/obj/AKeyedData.cpp
index 50a94de1..c256566a 100644
--- a/obj/AKeyedData.cpp
+++ b/obj/AKeyedData.cpp
@@ -26,6 +26,10 @@ void AKeyedData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & lin
 	A_KEYED_DATA_FIXLINKS
 }
 
+list<NiObjectRef> AKeyedData::GetRefs() const {
+	A_KEYED_DATA_GETREFS
+}
+
 const Type & AKeyedData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/AKeyedData.h b/obj/AKeyedData.h
index 24e4df25..f7365ef1 100644
--- a/obj/AKeyedData.h
+++ b/obj/AKeyedData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	A_KEYED_DATA_MEMBERS
diff --git a/obj/APSysCtlr.cpp b/obj/APSysCtlr.cpp
index 1d320d3d..a6aaea60 100644
--- a/obj/APSysCtlr.cpp
+++ b/obj/APSysCtlr.cpp
@@ -26,6 +26,10 @@ void APSysCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	A_P_SYS_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> APSysCtlr::GetRefs() const {
+	A_P_SYS_CTLR_GETREFS
+}
+
 const Type & APSysCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/APSysCtlr.h b/obj/APSysCtlr.h
index b468d230..3a42b6ba 100644
--- a/obj/APSysCtlr.h
+++ b/obj/APSysCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	A_P_SYS_CTLR_MEMBERS
diff --git a/obj/APSysData.cpp b/obj/APSysData.cpp
index 9b4e819c..12d56590 100644
--- a/obj/APSysData.cpp
+++ b/obj/APSysData.cpp
@@ -26,6 +26,10 @@ void APSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	A_P_SYS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> APSysData::GetRefs() const {
+	A_P_SYS_DATA_GETREFS
+}
+
 const Type & APSysData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/APSysData.h b/obj/APSysData.h
index 42124351..84cd1cdd 100644
--- a/obj/APSysData.h
+++ b/obj/APSysData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	A_P_SYS_DATA_MEMBERS
diff --git a/obj/AParticleModifier.cpp b/obj/AParticleModifier.cpp
index 56aadc44..465262c6 100644
--- a/obj/AParticleModifier.cpp
+++ b/obj/AParticleModifier.cpp
@@ -27,6 +27,10 @@ void AParticleModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	A_PARTICLE_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> AParticleModifier::GetRefs() const {
+	A_PARTICLE_MODIFIER_GETREFS
+}
+
 const Type & AParticleModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/AParticleModifier.h b/obj/AParticleModifier.h
index 6f1f2ba0..b71f945b 100644
--- a/obj/AParticleModifier.h
+++ b/obj/AParticleModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	A_PARTICLE_MODIFIER_MEMBERS
diff --git a/obj/AbhkConstraint.cpp b/obj/AbhkConstraint.cpp
index c8d2f610..0d6da0ee 100644
--- a/obj/AbhkConstraint.cpp
+++ b/obj/AbhkConstraint.cpp
@@ -27,6 +27,10 @@ void AbhkConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	ABHK_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> AbhkConstraint::GetRefs() const {
+	ABHK_CONSTRAINT_GETREFS
+}
+
 const Type & AbhkConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/AbhkConstraint.h b/obj/AbhkConstraint.h
index 05ea479b..8d57465a 100644
--- a/obj/AbhkConstraint.h
+++ b/obj/AbhkConstraint.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	ABHK_CONSTRAINT_MEMBERS
diff --git a/obj/AbhkRagdollConstraint.cpp b/obj/AbhkRagdollConstraint.cpp
index 62b414b2..79f83abb 100644
--- a/obj/AbhkRagdollConstraint.cpp
+++ b/obj/AbhkRagdollConstraint.cpp
@@ -26,6 +26,10 @@ void AbhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<
 	ABHK_RAGDOLL_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> AbhkRagdollConstraint::GetRefs() const {
+	ABHK_RAGDOLL_CONSTRAINT_GETREFS
+}
+
 const Type & AbhkRagdollConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/AbhkRagdollConstraint.h b/obj/AbhkRagdollConstraint.h
index fd0f3506..696a945e 100644
--- a/obj/AbhkRagdollConstraint.h
+++ b/obj/AbhkRagdollConstraint.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	ABHK_RAGDOLL_CONSTRAINT_MEMBERS
diff --git a/obj/AbhkShapeCollection.cpp b/obj/AbhkShapeCollection.cpp
index bc0e7bf9..3d564ea4 100644
--- a/obj/AbhkShapeCollection.cpp
+++ b/obj/AbhkShapeCollection.cpp
@@ -26,6 +26,10 @@ void AbhkShapeCollection::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	ABHK_SHAPE_COLLECTION_FIXLINKS
 }
 
+list<NiObjectRef> AbhkShapeCollection::GetRefs() const {
+	ABHK_SHAPE_COLLECTION_GETREFS
+}
+
 const Type & AbhkShapeCollection::GetType() const {
 	return TYPE;
 };
diff --git a/obj/AbhkShapeCollection.h b/obj/AbhkShapeCollection.h
index a4ceeca8..aebefb4c 100644
--- a/obj/AbhkShapeCollection.h
+++ b/obj/AbhkShapeCollection.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	ABHK_SHAPE_COLLECTION_MEMBERS
diff --git a/obj/AvoidNode.cpp b/obj/AvoidNode.cpp
index 18bbd3b3..1a855d21 100644
--- a/obj/AvoidNode.cpp
+++ b/obj/AvoidNode.cpp
@@ -26,6 +26,10 @@ void AvoidNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	AVOID_NODE_FIXLINKS
 }
 
+list<NiObjectRef> AvoidNode::GetRefs() const {
+	AVOID_NODE_GETREFS
+}
+
 const Type & AvoidNode::GetType() const {
 	return TYPE;
 };
diff --git a/obj/AvoidNode.h b/obj/AvoidNode.h
index 4ae02299..40d12ed6 100644
--- a/obj/AvoidNode.h
+++ b/obj/AvoidNode.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	AVOID_NODE_MEMBERS
diff --git a/obj/BSBound.cpp b/obj/BSBound.cpp
index c3de87ec..eac8bd12 100644
--- a/obj/BSBound.cpp
+++ b/obj/BSBound.cpp
@@ -26,6 +26,10 @@ void BSBound::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_s
 	B_S_BOUND_FIXLINKS
 }
 
+list<NiObjectRef> BSBound::GetRefs() const {
+	B_S_BOUND_GETREFS
+}
+
 const Type & BSBound::GetType() const {
 	return TYPE;
 };
diff --git a/obj/BSBound.h b/obj/BSBound.h
index 8ae511c2..fe63181d 100644
--- a/obj/BSBound.h
+++ b/obj/BSBound.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	B_S_BOUND_MEMBERS
diff --git a/obj/BSFurnitureMarker.cpp b/obj/BSFurnitureMarker.cpp
index e09ab256..50c39cfa 100644
--- a/obj/BSFurnitureMarker.cpp
+++ b/obj/BSFurnitureMarker.cpp
@@ -27,6 +27,10 @@ void BSFurnitureMarker::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	B_S_FURNITURE_MARKER_FIXLINKS
 }
 
+list<NiObjectRef> BSFurnitureMarker::GetRefs() const {
+	B_S_FURNITURE_MARKER_GETREFS
+}
+
 const Type & BSFurnitureMarker::GetType() const {
 	return TYPE;
 };
diff --git a/obj/BSFurnitureMarker.h b/obj/BSFurnitureMarker.h
index 1cc0578d..2f99e474 100644
--- a/obj/BSFurnitureMarker.h
+++ b/obj/BSFurnitureMarker.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	B_S_FURNITURE_MARKER_MEMBERS
diff --git a/obj/BSKeyframeController.cpp b/obj/BSKeyframeController.cpp
index f568af7d..d35f7737 100644
--- a/obj/BSKeyframeController.cpp
+++ b/obj/BSKeyframeController.cpp
@@ -27,6 +27,10 @@ void BSKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<u
 	B_S_KEYFRAME_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> BSKeyframeController::GetRefs() const {
+	B_S_KEYFRAME_CONTROLLER_GETREFS
+}
+
 const Type & BSKeyframeController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/BSKeyframeController.h b/obj/BSKeyframeController.h
index 05ba40fd..e8f15da4 100644
--- a/obj/BSKeyframeController.h
+++ b/obj/BSKeyframeController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	B_S_KEYFRAME_CONTROLLER_MEMBERS
diff --git a/obj/BSPSysArrayEmitter.cpp b/obj/BSPSysArrayEmitter.cpp
index 48b5305e..54d50dd1 100644
--- a/obj/BSPSysArrayEmitter.cpp
+++ b/obj/BSPSysArrayEmitter.cpp
@@ -26,6 +26,10 @@ void BSPSysArrayEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	B_S_P_SYS_ARRAY_EMITTER_FIXLINKS
 }
 
+list<NiObjectRef> BSPSysArrayEmitter::GetRefs() const {
+	B_S_P_SYS_ARRAY_EMITTER_GETREFS
+}
+
 const Type & BSPSysArrayEmitter::GetType() const {
 	return TYPE;
 };
diff --git a/obj/BSPSysArrayEmitter.h b/obj/BSPSysArrayEmitter.h
index d15ded2e..fa80fe42 100644
--- a/obj/BSPSysArrayEmitter.h
+++ b/obj/BSPSysArrayEmitter.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	B_S_P_SYS_ARRAY_EMITTER_MEMBERS
diff --git a/obj/BSParentVelocityModifier.cpp b/obj/BSParentVelocityModifier.cpp
index 3f80e915..5fe9ecfe 100644
--- a/obj/BSParentVelocityModifier.cpp
+++ b/obj/BSParentVelocityModifier.cpp
@@ -26,6 +26,10 @@ void BSParentVelocityModifier::FixLinks( const vector<NiObjectRef> & objects, li
 	B_S_PARENT_VELOCITY_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> BSParentVelocityModifier::GetRefs() const {
+	B_S_PARENT_VELOCITY_MODIFIER_GETREFS
+}
+
 const Type & BSParentVelocityModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/BSParentVelocityModifier.h b/obj/BSParentVelocityModifier.h
index e5866cab..797f2f5c 100644
--- a/obj/BSParentVelocityModifier.h
+++ b/obj/BSParentVelocityModifier.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	B_S_PARENT_VELOCITY_MODIFIER_MEMBERS
diff --git a/obj/BSXFlags.cpp b/obj/BSXFlags.cpp
index 7a1ab565..6d16f11f 100644
--- a/obj/BSXFlags.cpp
+++ b/obj/BSXFlags.cpp
@@ -26,6 +26,10 @@ void BSXFlags::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_
 	B_S_X_FLAGS_FIXLINKS
 }
 
+list<NiObjectRef> BSXFlags::GetRefs() const {
+	B_S_X_FLAGS_GETREFS
+}
+
 const Type & BSXFlags::GetType() const {
 	return TYPE;
 };
diff --git a/obj/BSXFlags.h b/obj/BSXFlags.h
index 5da0fe6c..4f92a640 100644
--- a/obj/BSXFlags.h
+++ b/obj/BSXFlags.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	B_S_X_FLAGS_MEMBERS
diff --git a/obj/FxButton.cpp b/obj/FxButton.cpp
index 32e9b824..f29ca52c 100644
--- a/obj/FxButton.cpp
+++ b/obj/FxButton.cpp
@@ -26,6 +26,10 @@ void FxButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_
 	FX_BUTTON_FIXLINKS
 }
 
+list<NiObjectRef> FxButton::GetRefs() const {
+	FX_BUTTON_GETREFS
+}
+
 const Type & FxButton::GetType() const {
 	return TYPE;
 };
diff --git a/obj/FxButton.h b/obj/FxButton.h
index 37864eeb..cf737879 100644
--- a/obj/FxButton.h
+++ b/obj/FxButton.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	FX_BUTTON_MEMBERS
diff --git a/obj/FxRadioButton.cpp b/obj/FxRadioButton.cpp
index 9534548c..f90f00d0 100644
--- a/obj/FxRadioButton.cpp
+++ b/obj/FxRadioButton.cpp
@@ -27,6 +27,10 @@ void FxRadioButton::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	FX_RADIO_BUTTON_FIXLINKS
 }
 
+list<NiObjectRef> FxRadioButton::GetRefs() const {
+	FX_RADIO_BUTTON_GETREFS
+}
+
 const Type & FxRadioButton::GetType() const {
 	return TYPE;
 };
diff --git a/obj/FxRadioButton.h b/obj/FxRadioButton.h
index 9ad12f51..e08d1849 100644
--- a/obj/FxRadioButton.h
+++ b/obj/FxRadioButton.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	FX_RADIO_BUTTON_MEMBERS
diff --git a/obj/FxWidget.cpp b/obj/FxWidget.cpp
index cc362c8c..06b91b54 100644
--- a/obj/FxWidget.cpp
+++ b/obj/FxWidget.cpp
@@ -26,6 +26,10 @@ void FxWidget::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_
 	FX_WIDGET_FIXLINKS
 }
 
+list<NiObjectRef> FxWidget::GetRefs() const {
+	FX_WIDGET_GETREFS
+}
+
 const Type & FxWidget::GetType() const {
 	return TYPE;
 };
diff --git a/obj/FxWidget.h b/obj/FxWidget.h
index 2c20d0aa..e0c95c1b 100644
--- a/obj/FxWidget.h
+++ b/obj/FxWidget.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	FX_WIDGET_MEMBERS
diff --git a/obj/NiAlphaController.cpp b/obj/NiAlphaController.cpp
index c3212ddd..67206965 100644
--- a/obj/NiAlphaController.cpp
+++ b/obj/NiAlphaController.cpp
@@ -27,6 +27,10 @@ void NiAlphaController::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_ALPHA_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiAlphaController::GetRefs() const {
+	NI_ALPHA_CONTROLLER_GETREFS
+}
+
 const Type & NiAlphaController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiAlphaController.h b/obj/NiAlphaController.h
index 78747b71..eac7aafd 100644
--- a/obj/NiAlphaController.h
+++ b/obj/NiAlphaController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_ALPHA_CONTROLLER_MEMBERS
diff --git a/obj/NiAlphaProperty.cpp b/obj/NiAlphaProperty.cpp
index 0616869a..72b28557 100644
--- a/obj/NiAlphaProperty.cpp
+++ b/obj/NiAlphaProperty.cpp
@@ -26,6 +26,10 @@ void NiAlphaProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_ALPHA_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiAlphaProperty::GetRefs() const {
+	NI_ALPHA_PROPERTY_GETREFS
+}
+
 const Type & NiAlphaProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiAlphaProperty.h b/obj/NiAlphaProperty.h
index bc14c616..62a96618 100644
--- a/obj/NiAlphaProperty.h
+++ b/obj/NiAlphaProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_ALPHA_PROPERTY_MEMBERS
diff --git a/obj/NiAmbientLight.cpp b/obj/NiAmbientLight.cpp
index ca076cc6..43973c34 100644
--- a/obj/NiAmbientLight.cpp
+++ b/obj/NiAmbientLight.cpp
@@ -26,6 +26,10 @@ void NiAmbientLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_AMBIENT_LIGHT_FIXLINKS
 }
 
+list<NiObjectRef> NiAmbientLight::GetRefs() const {
+	NI_AMBIENT_LIGHT_GETREFS
+}
+
 const Type & NiAmbientLight::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiAmbientLight.h b/obj/NiAmbientLight.h
index 43b32bae..7903ee28 100644
--- a/obj/NiAmbientLight.h
+++ b/obj/NiAmbientLight.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_AMBIENT_LIGHT_MEMBERS
diff --git a/obj/NiAutoNormalParticles.cpp b/obj/NiAutoNormalParticles.cpp
index d120d34f..6f184912 100644
--- a/obj/NiAutoNormalParticles.cpp
+++ b/obj/NiAutoNormalParticles.cpp
@@ -26,6 +26,10 @@ void NiAutoNormalParticles::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_AUTO_NORMAL_PARTICLES_FIXLINKS
 }
 
+list<NiObjectRef> NiAutoNormalParticles::GetRefs() const {
+	NI_AUTO_NORMAL_PARTICLES_GETREFS
+}
+
 const Type & NiAutoNormalParticles::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiAutoNormalParticles.h b/obj/NiAutoNormalParticles.h
index 1a8294fe..a4e6d584 100644
--- a/obj/NiAutoNormalParticles.h
+++ b/obj/NiAutoNormalParticles.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_AUTO_NORMAL_PARTICLES_MEMBERS
diff --git a/obj/NiAutoNormalParticlesData.cpp b/obj/NiAutoNormalParticlesData.cpp
index 0d25450e..59da8952 100644
--- a/obj/NiAutoNormalParticlesData.cpp
+++ b/obj/NiAutoNormalParticlesData.cpp
@@ -26,6 +26,10 @@ void NiAutoNormalParticlesData::FixLinks( const vector<NiObjectRef> & objects, l
 	NI_AUTO_NORMAL_PARTICLES_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiAutoNormalParticlesData::GetRefs() const {
+	NI_AUTO_NORMAL_PARTICLES_DATA_GETREFS
+}
+
 const Type & NiAutoNormalParticlesData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiAutoNormalParticlesData.h b/obj/NiAutoNormalParticlesData.h
index c0255ac1..6e3004fc 100644
--- a/obj/NiAutoNormalParticlesData.h
+++ b/obj/NiAutoNormalParticlesData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_AUTO_NORMAL_PARTICLES_DATA_MEMBERS
diff --git a/obj/NiBSAnimationNode.cpp b/obj/NiBSAnimationNode.cpp
index 07710079..531f7ec8 100644
--- a/obj/NiBSAnimationNode.cpp
+++ b/obj/NiBSAnimationNode.cpp
@@ -26,6 +26,10 @@ void NiBSAnimationNode::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_B_S_ANIMATION_NODE_FIXLINKS
 }
 
+list<NiObjectRef> NiBSAnimationNode::GetRefs() const {
+	NI_B_S_ANIMATION_NODE_GETREFS
+}
+
 const Type & NiBSAnimationNode::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSAnimationNode.h b/obj/NiBSAnimationNode.h
index 916136e1..d8451fe5 100644
--- a/obj/NiBSAnimationNode.h
+++ b/obj/NiBSAnimationNode.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_S_ANIMATION_NODE_MEMBERS
diff --git a/obj/NiBSBoneLODController.cpp b/obj/NiBSBoneLODController.cpp
index cfa75a7a..7becf62f 100644
--- a/obj/NiBSBoneLODController.cpp
+++ b/obj/NiBSBoneLODController.cpp
@@ -26,6 +26,10 @@ void NiBSBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_B_S_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiBSBoneLODController::GetRefs() const {
+	NI_B_S_BONE_L_O_D_CONTROLLER_GETREFS
+}
+
 const Type & NiBSBoneLODController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSBoneLODController.h b/obj/NiBSBoneLODController.h
index 2dad516a..e07326a6 100644
--- a/obj/NiBSBoneLODController.h
+++ b/obj/NiBSBoneLODController.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_S_BONE_L_O_D_CONTROLLER_MEMBERS
diff --git a/obj/NiBSPArrayController.cpp b/obj/NiBSPArrayController.cpp
index e8c08a68..88d338eb 100644
--- a/obj/NiBSPArrayController.cpp
+++ b/obj/NiBSPArrayController.cpp
@@ -26,6 +26,10 @@ void NiBSPArrayController::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_B_S_P_ARRAY_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiBSPArrayController::GetRefs() const {
+	NI_B_S_P_ARRAY_CONTROLLER_GETREFS
+}
+
 const Type & NiBSPArrayController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSPArrayController.h b/obj/NiBSPArrayController.h
index bb1c6837..69feea4a 100644
--- a/obj/NiBSPArrayController.h
+++ b/obj/NiBSPArrayController.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_S_P_ARRAY_CONTROLLER_MEMBERS
diff --git a/obj/NiBSParticleNode.cpp b/obj/NiBSParticleNode.cpp
index c3da59ec..ba48d613 100644
--- a/obj/NiBSParticleNode.cpp
+++ b/obj/NiBSParticleNode.cpp
@@ -26,6 +26,10 @@ void NiBSParticleNode::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_B_S_PARTICLE_NODE_FIXLINKS
 }
 
+list<NiObjectRef> NiBSParticleNode::GetRefs() const {
+	NI_B_S_PARTICLE_NODE_GETREFS
+}
+
 const Type & NiBSParticleNode::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSParticleNode.h b/obj/NiBSParticleNode.h
index 156c7d5a..9735fdea 100644
--- a/obj/NiBSParticleNode.h
+++ b/obj/NiBSParticleNode.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_S_PARTICLE_NODE_MEMBERS
diff --git a/obj/NiBSplineBasisData.cpp b/obj/NiBSplineBasisData.cpp
index 710e11a7..635860b3 100644
--- a/obj/NiBSplineBasisData.cpp
+++ b/obj/NiBSplineBasisData.cpp
@@ -26,6 +26,10 @@ void NiBSplineBasisData::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_B_SPLINE_BASIS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiBSplineBasisData::GetRefs() const {
+	NI_B_SPLINE_BASIS_DATA_GETREFS
+}
+
 const Type & NiBSplineBasisData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSplineBasisData.h b/obj/NiBSplineBasisData.h
index be380bed..8cc36b56 100644
--- a/obj/NiBSplineBasisData.h
+++ b/obj/NiBSplineBasisData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_SPLINE_BASIS_DATA_MEMBERS
diff --git a/obj/NiBSplineCompFloatInterpolator.cpp b/obj/NiBSplineCompFloatInterpolator.cpp
index 87af4f7d..9f698ec2 100644
--- a/obj/NiBSplineCompFloatInterpolator.cpp
+++ b/obj/NiBSplineCompFloatInterpolator.cpp
@@ -26,6 +26,10 @@ void NiBSplineCompFloatInterpolator::FixLinks( const vector<NiObjectRef> & objec
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBSplineCompFloatInterpolator::GetRefs() const {
+	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBSplineCompFloatInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSplineCompFloatInterpolator.h b/obj/NiBSplineCompFloatInterpolator.h
index db462b18..6360dbfe 100644
--- a/obj/NiBSplineCompFloatInterpolator.h
+++ b/obj/NiBSplineCompFloatInterpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBSplineCompPoint3Interpolator.cpp b/obj/NiBSplineCompPoint3Interpolator.cpp
index 5b63a1a4..0ffd9d06 100644
--- a/obj/NiBSplineCompPoint3Interpolator.cpp
+++ b/obj/NiBSplineCompPoint3Interpolator.cpp
@@ -28,6 +28,10 @@ void NiBSplineCompPoint3Interpolator::FixLinks( const vector<NiObjectRef> & obje
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBSplineCompPoint3Interpolator::GetRefs() const {
+	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBSplineCompPoint3Interpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSplineCompPoint3Interpolator.h b/obj/NiBSplineCompPoint3Interpolator.h
index 26a46ba7..bec9e9f6 100644
--- a/obj/NiBSplineCompPoint3Interpolator.h
+++ b/obj/NiBSplineCompPoint3Interpolator.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBSplineCompTransformInterpolator.cpp b/obj/NiBSplineCompTransformInterpolator.cpp
index 83ada955..678f140b 100644
--- a/obj/NiBSplineCompTransformInterpolator.cpp
+++ b/obj/NiBSplineCompTransformInterpolator.cpp
@@ -28,6 +28,10 @@ void NiBSplineCompTransformInterpolator::FixLinks( const vector<NiObjectRef> & o
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBSplineCompTransformInterpolator::GetRefs() const {
+	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBSplineCompTransformInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSplineCompTransformInterpolator.h b/obj/NiBSplineCompTransformInterpolator.h
index 4142c7e8..3ef5428f 100644
--- a/obj/NiBSplineCompTransformInterpolator.h
+++ b/obj/NiBSplineCompTransformInterpolator.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBSplineData.cpp b/obj/NiBSplineData.cpp
index 8128ff4a..69e74552 100644
--- a/obj/NiBSplineData.cpp
+++ b/obj/NiBSplineData.cpp
@@ -26,6 +26,10 @@ void NiBSplineData::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_B_SPLINE_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiBSplineData::GetRefs() const {
+	NI_B_SPLINE_DATA_GETREFS
+}
+
 const Type & NiBSplineData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSplineData.h b/obj/NiBSplineData.h
index 141f700b..f103e7fc 100644
--- a/obj/NiBSplineData.h
+++ b/obj/NiBSplineData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_SPLINE_DATA_MEMBERS
diff --git a/obj/NiBSplineInterpolator.cpp b/obj/NiBSplineInterpolator.cpp
index 00756469..c17a14be 100644
--- a/obj/NiBSplineInterpolator.cpp
+++ b/obj/NiBSplineInterpolator.cpp
@@ -26,6 +26,10 @@ void NiBSplineInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_B_SPLINE_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBSplineInterpolator::GetRefs() const {
+	NI_B_SPLINE_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBSplineInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBSplineInterpolator.h b/obj/NiBSplineInterpolator.h
index d18756bb..d12ff4c8 100644
--- a/obj/NiBSplineInterpolator.h
+++ b/obj/NiBSplineInterpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_B_SPLINE_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBillboardNode.cpp b/obj/NiBillboardNode.cpp
index 37419095..cc409efc 100644
--- a/obj/NiBillboardNode.cpp
+++ b/obj/NiBillboardNode.cpp
@@ -26,6 +26,10 @@ void NiBillboardNode::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_BILLBOARD_NODE_FIXLINKS
 }
 
+list<NiObjectRef> NiBillboardNode::GetRefs() const {
+	NI_BILLBOARD_NODE_GETREFS
+}
+
 const Type & NiBillboardNode::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBillboardNode.h b/obj/NiBillboardNode.h
index daa880bb..a1b6498a 100644
--- a/obj/NiBillboardNode.h
+++ b/obj/NiBillboardNode.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BILLBOARD_NODE_MEMBERS
diff --git a/obj/NiBinaryExtraData.cpp b/obj/NiBinaryExtraData.cpp
index 21c24b2f..d1e7cab9 100644
--- a/obj/NiBinaryExtraData.cpp
+++ b/obj/NiBinaryExtraData.cpp
@@ -27,6 +27,10 @@ void NiBinaryExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_BINARY_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiBinaryExtraData::GetRefs() const {
+	NI_BINARY_EXTRA_DATA_GETREFS
+}
+
 const Type & NiBinaryExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBinaryExtraData.h b/obj/NiBinaryExtraData.h
index 8b55f23a..e5b31c6b 100644
--- a/obj/NiBinaryExtraData.h
+++ b/obj/NiBinaryExtraData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BINARY_EXTRA_DATA_MEMBERS
diff --git a/obj/NiBlendBoolInterpolator.cpp b/obj/NiBlendBoolInterpolator.cpp
index 83c055f0..11fba6e1 100644
--- a/obj/NiBlendBoolInterpolator.cpp
+++ b/obj/NiBlendBoolInterpolator.cpp
@@ -26,6 +26,10 @@ void NiBlendBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, lis
 	NI_BLEND_BOOL_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBlendBoolInterpolator::GetRefs() const {
+	NI_BLEND_BOOL_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBlendBoolInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBlendBoolInterpolator.h b/obj/NiBlendBoolInterpolator.h
index 97a55f8d..eaa4d889 100644
--- a/obj/NiBlendBoolInterpolator.h
+++ b/obj/NiBlendBoolInterpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BLEND_BOOL_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBlendFloatInterpolator.cpp b/obj/NiBlendFloatInterpolator.cpp
index 466b8a83..5aa2c1bd 100644
--- a/obj/NiBlendFloatInterpolator.cpp
+++ b/obj/NiBlendFloatInterpolator.cpp
@@ -26,6 +26,10 @@ void NiBlendFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, li
 	NI_BLEND_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBlendFloatInterpolator::GetRefs() const {
+	NI_BLEND_FLOAT_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBlendFloatInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBlendFloatInterpolator.h b/obj/NiBlendFloatInterpolator.h
index 99daedee..c6c3a2cd 100644
--- a/obj/NiBlendFloatInterpolator.h
+++ b/obj/NiBlendFloatInterpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BLEND_FLOAT_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBlendInterpolator.cpp b/obj/NiBlendInterpolator.cpp
index 43edb9fc..26359cf4 100644
--- a/obj/NiBlendInterpolator.cpp
+++ b/obj/NiBlendInterpolator.cpp
@@ -26,6 +26,10 @@ void NiBlendInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_BLEND_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBlendInterpolator::GetRefs() const {
+	NI_BLEND_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBlendInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBlendInterpolator.h b/obj/NiBlendInterpolator.h
index 23ca125b..34f8a1bf 100644
--- a/obj/NiBlendInterpolator.h
+++ b/obj/NiBlendInterpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BLEND_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBlendPoint3Interpolator.cpp b/obj/NiBlendPoint3Interpolator.cpp
index f85e1df1..53fa67ca 100644
--- a/obj/NiBlendPoint3Interpolator.cpp
+++ b/obj/NiBlendPoint3Interpolator.cpp
@@ -26,6 +26,10 @@ void NiBlendPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, l
 	NI_BLEND_POINT3_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBlendPoint3Interpolator::GetRefs() const {
+	NI_BLEND_POINT3_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBlendPoint3Interpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBlendPoint3Interpolator.h b/obj/NiBlendPoint3Interpolator.h
index 64d7dac3..1ef48d45 100644
--- a/obj/NiBlendPoint3Interpolator.h
+++ b/obj/NiBlendPoint3Interpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BLEND_POINT3_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBlendTransformInterpolator.cpp b/obj/NiBlendTransformInterpolator.cpp
index 7de85b6e..e9a767b3 100644
--- a/obj/NiBlendTransformInterpolator.cpp
+++ b/obj/NiBlendTransformInterpolator.cpp
@@ -26,6 +26,10 @@ void NiBlendTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects
 	NI_BLEND_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBlendTransformInterpolator::GetRefs() const {
+	NI_BLEND_TRANSFORM_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBlendTransformInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBlendTransformInterpolator.h b/obj/NiBlendTransformInterpolator.h
index 1866471a..a1478bd5 100644
--- a/obj/NiBlendTransformInterpolator.h
+++ b/obj/NiBlendTransformInterpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BLEND_TRANSFORM_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBoneLODController.cpp b/obj/NiBoneLODController.cpp
index d479f621..c2e63d17 100644
--- a/obj/NiBoneLODController.cpp
+++ b/obj/NiBoneLODController.cpp
@@ -31,6 +31,10 @@ void NiBoneLODController::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_BONE_L_O_D_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiBoneLODController::GetRefs() const {
+	NI_BONE_L_O_D_CONTROLLER_GETREFS
+}
+
 const Type & NiBoneLODController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBoneLODController.h b/obj/NiBoneLODController.h
index 9811cad5..1bb998b2 100644
--- a/obj/NiBoneLODController.h
+++ b/obj/NiBoneLODController.h
@@ -31,6 +31,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BONE_L_O_D_CONTROLLER_MEMBERS
diff --git a/obj/NiBoolData.cpp b/obj/NiBoolData.cpp
index 99885b93..74632e87 100644
--- a/obj/NiBoolData.cpp
+++ b/obj/NiBoolData.cpp
@@ -27,6 +27,10 @@ void NiBoolData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & lin
 	NI_BOOL_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiBoolData::GetRefs() const {
+	NI_BOOL_DATA_GETREFS
+}
+
 const Type & NiBoolData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBoolData.h b/obj/NiBoolData.h
index fdecbfce..832f0d35 100644
--- a/obj/NiBoolData.h
+++ b/obj/NiBoolData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BOOL_DATA_MEMBERS
diff --git a/obj/NiBoolInterpolator.cpp b/obj/NiBoolInterpolator.cpp
index e85d86be..499bbf8d 100644
--- a/obj/NiBoolInterpolator.cpp
+++ b/obj/NiBoolInterpolator.cpp
@@ -27,6 +27,10 @@ void NiBoolInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_BOOL_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBoolInterpolator::GetRefs() const {
+	NI_BOOL_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBoolInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBoolInterpolator.h b/obj/NiBoolInterpolator.h
index 064b9829..1d165a21 100644
--- a/obj/NiBoolInterpolator.h
+++ b/obj/NiBoolInterpolator.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BOOL_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBoolTimelineInterpolator.cpp b/obj/NiBoolTimelineInterpolator.cpp
index d6f48966..21c1ee89 100644
--- a/obj/NiBoolTimelineInterpolator.cpp
+++ b/obj/NiBoolTimelineInterpolator.cpp
@@ -27,6 +27,10 @@ void NiBoolTimelineInterpolator::FixLinks( const vector<NiObjectRef> & objects,
 	NI_BOOL_TIMELINE_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiBoolTimelineInterpolator::GetRefs() const {
+	NI_BOOL_TIMELINE_INTERPOLATOR_GETREFS
+}
+
 const Type & NiBoolTimelineInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBoolTimelineInterpolator.h b/obj/NiBoolTimelineInterpolator.h
index 2ba31a21..c4648f7a 100644
--- a/obj/NiBoolTimelineInterpolator.h
+++ b/obj/NiBoolTimelineInterpolator.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BOOL_TIMELINE_INTERPOLATOR_MEMBERS
diff --git a/obj/NiBooleanExtraData.cpp b/obj/NiBooleanExtraData.cpp
index 3aefc47f..43dd8e46 100644
--- a/obj/NiBooleanExtraData.cpp
+++ b/obj/NiBooleanExtraData.cpp
@@ -26,6 +26,10 @@ void NiBooleanExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_BOOLEAN_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiBooleanExtraData::GetRefs() const {
+	NI_BOOLEAN_EXTRA_DATA_GETREFS
+}
+
 const Type & NiBooleanExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiBooleanExtraData.h b/obj/NiBooleanExtraData.h
index 2317cdad..2d26a1bb 100644
--- a/obj/NiBooleanExtraData.h
+++ b/obj/NiBooleanExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_BOOLEAN_EXTRA_DATA_MEMBERS
diff --git a/obj/NiCamera.cpp b/obj/NiCamera.cpp
index f8434d42..45720ebe 100644
--- a/obj/NiCamera.cpp
+++ b/obj/NiCamera.cpp
@@ -27,6 +27,10 @@ void NiCamera::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_
 	NI_CAMERA_FIXLINKS
 }
 
+list<NiObjectRef> NiCamera::GetRefs() const {
+	NI_CAMERA_GETREFS
+}
+
 const Type & NiCamera::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiCamera.h b/obj/NiCamera.h
index d747210a..da00e20f 100644
--- a/obj/NiCamera.h
+++ b/obj/NiCamera.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_CAMERA_MEMBERS
diff --git a/obj/NiCollisionData.cpp b/obj/NiCollisionData.cpp
index 1c2bc285..899411e8 100644
--- a/obj/NiCollisionData.cpp
+++ b/obj/NiCollisionData.cpp
@@ -27,6 +27,10 @@ void NiCollisionData::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_COLLISION_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiCollisionData::GetRefs() const {
+	NI_COLLISION_DATA_GETREFS
+}
+
 const Type & NiCollisionData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiCollisionData.h b/obj/NiCollisionData.h
index 2cac6b83..f447a6a8 100644
--- a/obj/NiCollisionData.h
+++ b/obj/NiCollisionData.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_COLLISION_DATA_MEMBERS
diff --git a/obj/NiCollisionObject.cpp b/obj/NiCollisionObject.cpp
index 04c509fa..3ada66b0 100644
--- a/obj/NiCollisionObject.cpp
+++ b/obj/NiCollisionObject.cpp
@@ -28,6 +28,10 @@ void NiCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_COLLISION_OBJECT_FIXLINKS
 }
 
+list<NiObjectRef> NiCollisionObject::GetRefs() const {
+	NI_COLLISION_OBJECT_GETREFS
+}
+
 const Type & NiCollisionObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiCollisionObject.h b/obj/NiCollisionObject.h
index 069a8874..24825473 100644
--- a/obj/NiCollisionObject.h
+++ b/obj/NiCollisionObject.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NiAVObject * NiCollisionObject::Parent() const;
diff --git a/obj/NiColorData.cpp b/obj/NiColorData.cpp
index 54094f12..55de5055 100644
--- a/obj/NiColorData.cpp
+++ b/obj/NiColorData.cpp
@@ -27,6 +27,10 @@ void NiColorData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_COLOR_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiColorData::GetRefs() const {
+	NI_COLOR_DATA_GETREFS
+}
+
 const Type & NiColorData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiColorData.h b/obj/NiColorData.h
index 9fc575ed..3aedbb0c 100644
--- a/obj/NiColorData.h
+++ b/obj/NiColorData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_COLOR_DATA_MEMBERS
diff --git a/obj/NiColorExtraData.cpp b/obj/NiColorExtraData.cpp
index bf1fc8aa..e5102b16 100644
--- a/obj/NiColorExtraData.cpp
+++ b/obj/NiColorExtraData.cpp
@@ -26,6 +26,10 @@ void NiColorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_COLOR_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiColorExtraData::GetRefs() const {
+	NI_COLOR_EXTRA_DATA_GETREFS
+}
+
 const Type & NiColorExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiColorExtraData.h b/obj/NiColorExtraData.h
index 5e631308..820fda64 100644
--- a/obj/NiColorExtraData.h
+++ b/obj/NiColorExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_COLOR_EXTRA_DATA_MEMBERS
diff --git a/obj/NiControllerManager.cpp b/obj/NiControllerManager.cpp
index 775dce7f..a8e6197e 100644
--- a/obj/NiControllerManager.cpp
+++ b/obj/NiControllerManager.cpp
@@ -28,6 +28,10 @@ void NiControllerManager::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_CONTROLLER_MANAGER_FIXLINKS
 }
 
+list<NiObjectRef> NiControllerManager::GetRefs() const {
+	NI_CONTROLLER_MANAGER_GETREFS
+}
+
 const Type & NiControllerManager::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiControllerManager.h b/obj/NiControllerManager.h
index 6a6f93a2..91b3092c 100644
--- a/obj/NiControllerManager.h
+++ b/obj/NiControllerManager.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_CONTROLLER_MANAGER_MEMBERS
diff --git a/obj/NiControllerSequence.cpp b/obj/NiControllerSequence.cpp
index b4950b79..4d01c1a1 100644
--- a/obj/NiControllerSequence.cpp
+++ b/obj/NiControllerSequence.cpp
@@ -37,6 +37,10 @@ void NiControllerSequence::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_CONTROLLER_SEQUENCE_FIXLINKS
 }
 
+list<NiObjectRef> NiControllerSequence::GetRefs() const {
+	NI_CONTROLLER_SEQUENCE_GETREFS
+}
+
 const Type & NiControllerSequence::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiControllerSequence.h b/obj/NiControllerSequence.h
index 31451463..b3268861 100644
--- a/obj/NiControllerSequence.h
+++ b/obj/NiControllerSequence.h
@@ -33,6 +33,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NiControllerManager * NiControllerSequence::Parent() const;
diff --git a/obj/NiDefaultAVObjectPalette.cpp b/obj/NiDefaultAVObjectPalette.cpp
index e1085e01..f3a092dd 100644
--- a/obj/NiDefaultAVObjectPalette.cpp
+++ b/obj/NiDefaultAVObjectPalette.cpp
@@ -28,6 +28,10 @@ void NiDefaultAVObjectPalette::FixLinks( const vector<NiObjectRef> & objects, li
 	NI_DEFAULT_A_V_OBJECT_PALETTE_FIXLINKS
 }
 
+list<NiObjectRef> NiDefaultAVObjectPalette::GetRefs() const {
+	NI_DEFAULT_A_V_OBJECT_PALETTE_GETREFS
+}
+
 const Type & NiDefaultAVObjectPalette::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiDefaultAVObjectPalette.h b/obj/NiDefaultAVObjectPalette.h
index e4251325..7498afcc 100644
--- a/obj/NiDefaultAVObjectPalette.h
+++ b/obj/NiDefaultAVObjectPalette.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_DEFAULT_A_V_OBJECT_PALETTE_MEMBERS
diff --git a/obj/NiDirectionalLight.cpp b/obj/NiDirectionalLight.cpp
index 106a7d95..10b593f8 100644
--- a/obj/NiDirectionalLight.cpp
+++ b/obj/NiDirectionalLight.cpp
@@ -26,6 +26,10 @@ void NiDirectionalLight::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_DIRECTIONAL_LIGHT_FIXLINKS
 }
 
+list<NiObjectRef> NiDirectionalLight::GetRefs() const {
+	NI_DIRECTIONAL_LIGHT_GETREFS
+}
+
 const Type & NiDirectionalLight::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiDirectionalLight.h b/obj/NiDirectionalLight.h
index 5157a5bc..5a867c9f 100644
--- a/obj/NiDirectionalLight.h
+++ b/obj/NiDirectionalLight.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_DIRECTIONAL_LIGHT_MEMBERS
diff --git a/obj/NiDitherProperty.cpp b/obj/NiDitherProperty.cpp
index 2cb098d2..e1bd65b3 100644
--- a/obj/NiDitherProperty.cpp
+++ b/obj/NiDitherProperty.cpp
@@ -26,6 +26,10 @@ void NiDitherProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_DITHER_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiDitherProperty::GetRefs() const {
+	NI_DITHER_PROPERTY_GETREFS
+}
+
 const Type & NiDitherProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiDitherProperty.h b/obj/NiDitherProperty.h
index 70512a92..8ff67a0c 100644
--- a/obj/NiDitherProperty.h
+++ b/obj/NiDitherProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_DITHER_PROPERTY_MEMBERS
diff --git a/obj/NiDynamicEffect.cpp b/obj/NiDynamicEffect.cpp
index 5097f328..32af609b 100644
--- a/obj/NiDynamicEffect.cpp
+++ b/obj/NiDynamicEffect.cpp
@@ -27,6 +27,10 @@ void NiDynamicEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_DYNAMIC_EFFECT_FIXLINKS
 }
 
+list<NiObjectRef> NiDynamicEffect::GetRefs() const {
+	NI_DYNAMIC_EFFECT_GETREFS
+}
+
 const Type & NiDynamicEffect::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiDynamicEffect.h b/obj/NiDynamicEffect.h
index 171fe350..158b89bc 100644
--- a/obj/NiDynamicEffect.h
+++ b/obj/NiDynamicEffect.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_DYNAMIC_EFFECT_MEMBERS
diff --git a/obj/NiExtraData.cpp b/obj/NiExtraData.cpp
index 6ade94fb..1184ed44 100644
--- a/obj/NiExtraData.cpp
+++ b/obj/NiExtraData.cpp
@@ -26,6 +26,10 @@ void NiExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiExtraData::GetRefs() const {
+	NI_EXTRA_DATA_GETREFS
+}
+
 const Type & NiExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiExtraData.h b/obj/NiExtraData.h
index 07e585ec..8837f850 100644
--- a/obj/NiExtraData.h
+++ b/obj/NiExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_EXTRA_DATA_MEMBERS
diff --git a/obj/NiFlipController.cpp b/obj/NiFlipController.cpp
index 1489896a..640f2767 100644
--- a/obj/NiFlipController.cpp
+++ b/obj/NiFlipController.cpp
@@ -27,6 +27,10 @@ void NiFlipController::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_FLIP_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiFlipController::GetRefs() const {
+	NI_FLIP_CONTROLLER_GETREFS
+}
+
 const Type & NiFlipController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiFlipController.h b/obj/NiFlipController.h
index 37644539..40bc42bd 100644
--- a/obj/NiFlipController.h
+++ b/obj/NiFlipController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_FLIP_CONTROLLER_MEMBERS
diff --git a/obj/NiFloatData.cpp b/obj/NiFloatData.cpp
index 194126a6..98493f85 100644
--- a/obj/NiFloatData.cpp
+++ b/obj/NiFloatData.cpp
@@ -27,6 +27,10 @@ void NiFloatData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_FLOAT_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiFloatData::GetRefs() const {
+	NI_FLOAT_DATA_GETREFS
+}
+
 const Type & NiFloatData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiFloatData.h b/obj/NiFloatData.h
index b9a82e53..d33085a6 100644
--- a/obj/NiFloatData.h
+++ b/obj/NiFloatData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_FLOAT_DATA_MEMBERS
diff --git a/obj/NiFloatExtraData.cpp b/obj/NiFloatExtraData.cpp
index 511492ba..1b09cd7c 100644
--- a/obj/NiFloatExtraData.cpp
+++ b/obj/NiFloatExtraData.cpp
@@ -26,6 +26,10 @@ void NiFloatExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_FLOAT_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiFloatExtraData::GetRefs() const {
+	NI_FLOAT_EXTRA_DATA_GETREFS
+}
+
 const Type & NiFloatExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiFloatExtraData.h b/obj/NiFloatExtraData.h
index a930f7f4..ffb931fc 100644
--- a/obj/NiFloatExtraData.h
+++ b/obj/NiFloatExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_FLOAT_EXTRA_DATA_MEMBERS
diff --git a/obj/NiFloatExtraDataController.cpp b/obj/NiFloatExtraDataController.cpp
index 37d988ce..22de28bf 100644
--- a/obj/NiFloatExtraDataController.cpp
+++ b/obj/NiFloatExtraDataController.cpp
@@ -27,6 +27,10 @@ void NiFloatExtraDataController::FixLinks( const vector<NiObjectRef> & objects,
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiFloatExtraDataController::GetRefs() const {
+	NI_FLOAT_EXTRA_DATA_CONTROLLER_GETREFS
+}
+
 const Type & NiFloatExtraDataController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiFloatExtraDataController.h b/obj/NiFloatExtraDataController.h
index 82d8adea..47f73e59 100644
--- a/obj/NiFloatExtraDataController.h
+++ b/obj/NiFloatExtraDataController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_FLOAT_EXTRA_DATA_CONTROLLER_MEMBERS
diff --git a/obj/NiFloatInterpolator.cpp b/obj/NiFloatInterpolator.cpp
index 0d15959c..88431793 100644
--- a/obj/NiFloatInterpolator.cpp
+++ b/obj/NiFloatInterpolator.cpp
@@ -27,6 +27,10 @@ void NiFloatInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_FLOAT_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiFloatInterpolator::GetRefs() const {
+	NI_FLOAT_INTERPOLATOR_GETREFS
+}
+
 const Type & NiFloatInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiFloatInterpolator.h b/obj/NiFloatInterpolator.h
index b41f5fde..51ded684 100644
--- a/obj/NiFloatInterpolator.h
+++ b/obj/NiFloatInterpolator.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_FLOAT_INTERPOLATOR_MEMBERS
diff --git a/obj/NiFloatsExtraData.cpp b/obj/NiFloatsExtraData.cpp
index b1324326..0df0f182 100644
--- a/obj/NiFloatsExtraData.cpp
+++ b/obj/NiFloatsExtraData.cpp
@@ -26,6 +26,10 @@ void NiFloatsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_FLOATS_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiFloatsExtraData::GetRefs() const {
+	NI_FLOATS_EXTRA_DATA_GETREFS
+}
+
 const Type & NiFloatsExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiFloatsExtraData.h b/obj/NiFloatsExtraData.h
index f485d7de..db7f4e50 100644
--- a/obj/NiFloatsExtraData.h
+++ b/obj/NiFloatsExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_FLOATS_EXTRA_DATA_MEMBERS
diff --git a/obj/NiFogProperty.cpp b/obj/NiFogProperty.cpp
index bbfa3527..3b5dad5e 100644
--- a/obj/NiFogProperty.cpp
+++ b/obj/NiFogProperty.cpp
@@ -26,6 +26,10 @@ void NiFogProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_FOG_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiFogProperty::GetRefs() const {
+	NI_FOG_PROPERTY_GETREFS
+}
+
 const Type & NiFogProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiFogProperty.h b/obj/NiFogProperty.h
index f39e96e4..d2ae0617 100644
--- a/obj/NiFogProperty.h
+++ b/obj/NiFogProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_FOG_PROPERTY_MEMBERS
diff --git a/obj/NiGeomMorpherController.cpp b/obj/NiGeomMorpherController.cpp
index a96da209..f159615e 100644
--- a/obj/NiGeomMorpherController.cpp
+++ b/obj/NiGeomMorpherController.cpp
@@ -28,6 +28,10 @@ void NiGeomMorpherController::FixLinks( const vector<NiObjectRef> & objects, lis
 	NI_GEOM_MORPHER_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiGeomMorpherController::GetRefs() const {
+	NI_GEOM_MORPHER_CONTROLLER_GETREFS
+}
+
 const Type & NiGeomMorpherController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiGeomMorpherController.h b/obj/NiGeomMorpherController.h
index 33a4a7f3..2b3cedd3 100644
--- a/obj/NiGeomMorpherController.h
+++ b/obj/NiGeomMorpherController.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_GEOM_MORPHER_CONTROLLER_MEMBERS
diff --git a/obj/NiGravity.cpp b/obj/NiGravity.cpp
index 13f38ede..b0204435 100644
--- a/obj/NiGravity.cpp
+++ b/obj/NiGravity.cpp
@@ -26,6 +26,10 @@ void NiGravity::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	NI_GRAVITY_FIXLINKS
 }
 
+list<NiObjectRef> NiGravity::GetRefs() const {
+	NI_GRAVITY_GETREFS
+}
+
 const Type & NiGravity::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiGravity.h b/obj/NiGravity.h
index b03f18cf..04fa40f4 100644
--- a/obj/NiGravity.h
+++ b/obj/NiGravity.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_GRAVITY_MEMBERS
diff --git a/obj/NiIntegerExtraData.cpp b/obj/NiIntegerExtraData.cpp
index d953dafa..2365df15 100644
--- a/obj/NiIntegerExtraData.cpp
+++ b/obj/NiIntegerExtraData.cpp
@@ -26,6 +26,10 @@ void NiIntegerExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_INTEGER_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiIntegerExtraData::GetRefs() const {
+	NI_INTEGER_EXTRA_DATA_GETREFS
+}
+
 const Type & NiIntegerExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiIntegerExtraData.h b/obj/NiIntegerExtraData.h
index abf6099a..36b1fa45 100644
--- a/obj/NiIntegerExtraData.h
+++ b/obj/NiIntegerExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_INTEGER_EXTRA_DATA_MEMBERS
diff --git a/obj/NiIntegersExtraData.cpp b/obj/NiIntegersExtraData.cpp
index 236abc89..b1a55e3e 100644
--- a/obj/NiIntegersExtraData.cpp
+++ b/obj/NiIntegersExtraData.cpp
@@ -26,6 +26,10 @@ void NiIntegersExtraData::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_INTEGERS_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiIntegersExtraData::GetRefs() const {
+	NI_INTEGERS_EXTRA_DATA_GETREFS
+}
+
 const Type & NiIntegersExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiIntegersExtraData.h b/obj/NiIntegersExtraData.h
index 77c68367..8adb7b97 100644
--- a/obj/NiIntegersExtraData.h
+++ b/obj/NiIntegersExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_INTEGERS_EXTRA_DATA_MEMBERS
diff --git a/obj/NiInterpolator.cpp b/obj/NiInterpolator.cpp
index a5c8d211..73890c9b 100644
--- a/obj/NiInterpolator.cpp
+++ b/obj/NiInterpolator.cpp
@@ -26,6 +26,10 @@ void NiInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiInterpolator::GetRefs() const {
+	NI_INTERPOLATOR_GETREFS
+}
+
 const Type & NiInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiInterpolator.h b/obj/NiInterpolator.h
index b1b10309..04a5229e 100644
--- a/obj/NiInterpolator.h
+++ b/obj/NiInterpolator.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_INTERPOLATOR_MEMBERS
diff --git a/obj/NiKeyframeController.cpp b/obj/NiKeyframeController.cpp
index 3616ee45..9ac39689 100644
--- a/obj/NiKeyframeController.cpp
+++ b/obj/NiKeyframeController.cpp
@@ -27,6 +27,10 @@ void NiKeyframeController::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_KEYFRAME_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiKeyframeController::GetRefs() const {
+	NI_KEYFRAME_CONTROLLER_GETREFS
+}
+
 const Type & NiKeyframeController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiKeyframeController.h b/obj/NiKeyframeController.h
index e5caed79..9423af87 100644
--- a/obj/NiKeyframeController.h
+++ b/obj/NiKeyframeController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_KEYFRAME_CONTROLLER_MEMBERS
diff --git a/obj/NiKeyframeData.cpp b/obj/NiKeyframeData.cpp
index 547ad68c..53f7af56 100644
--- a/obj/NiKeyframeData.cpp
+++ b/obj/NiKeyframeData.cpp
@@ -29,6 +29,10 @@ void NiKeyframeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_KEYFRAME_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiKeyframeData::GetRefs() const {
+	NI_KEYFRAME_DATA_GETREFS
+}
+
 const Type & NiKeyframeData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiKeyframeData.h b/obj/NiKeyframeData.h
index 9fcac8d1..7a78c254 100644
--- a/obj/NiKeyframeData.h
+++ b/obj/NiKeyframeData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_KEYFRAME_DATA_MEMBERS
diff --git a/obj/NiLODNode.cpp b/obj/NiLODNode.cpp
index c3ea8efd..1f23670d 100644
--- a/obj/NiLODNode.cpp
+++ b/obj/NiLODNode.cpp
@@ -28,6 +28,10 @@ void NiLODNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	NI_L_O_D_NODE_FIXLINKS
 }
 
+list<NiObjectRef> NiLODNode::GetRefs() const {
+	NI_L_O_D_NODE_GETREFS
+}
+
 const Type & NiLODNode::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiLODNode.h b/obj/NiLODNode.h
index 5d33d6ca..f90db028 100644
--- a/obj/NiLODNode.h
+++ b/obj/NiLODNode.h
@@ -31,6 +31,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_L_O_D_NODE_MEMBERS
diff --git a/obj/NiLight.cpp b/obj/NiLight.cpp
index 3b43430f..0808c430 100644
--- a/obj/NiLight.cpp
+++ b/obj/NiLight.cpp
@@ -26,6 +26,10 @@ void NiLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_s
 	NI_LIGHT_FIXLINKS
 }
 
+list<NiObjectRef> NiLight::GetRefs() const {
+	NI_LIGHT_GETREFS
+}
+
 const Type & NiLight::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiLight.h b/obj/NiLight.h
index 3fae892d..59a283fb 100644
--- a/obj/NiLight.h
+++ b/obj/NiLight.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_LIGHT_MEMBERS
diff --git a/obj/NiLightColorController.cpp b/obj/NiLightColorController.cpp
index c794a169..152a10e5 100644
--- a/obj/NiLightColorController.cpp
+++ b/obj/NiLightColorController.cpp
@@ -28,6 +28,10 @@ void NiLightColorController::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_LIGHT_COLOR_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiLightColorController::GetRefs() const {
+	NI_LIGHT_COLOR_CONTROLLER_GETREFS
+}
+
 const Type & NiLightColorController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiLightColorController.h b/obj/NiLightColorController.h
index a5496339..6e8f69b6 100644
--- a/obj/NiLightColorController.h
+++ b/obj/NiLightColorController.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_LIGHT_COLOR_CONTROLLER_MEMBERS
diff --git a/obj/NiLightDimmerController.cpp b/obj/NiLightDimmerController.cpp
index dd329225..470228c1 100644
--- a/obj/NiLightDimmerController.cpp
+++ b/obj/NiLightDimmerController.cpp
@@ -27,6 +27,10 @@ void NiLightDimmerController::FixLinks( const vector<NiObjectRef> & objects, lis
 	NI_LIGHT_DIMMER_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiLightDimmerController::GetRefs() const {
+	NI_LIGHT_DIMMER_CONTROLLER_GETREFS
+}
+
 const Type & NiLightDimmerController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiLightDimmerController.h b/obj/NiLightDimmerController.h
index 2ac5b5de..b77e7ec5 100644
--- a/obj/NiLightDimmerController.h
+++ b/obj/NiLightDimmerController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_LIGHT_DIMMER_CONTROLLER_MEMBERS
diff --git a/obj/NiLookAtController.cpp b/obj/NiLookAtController.cpp
index a113acf5..d7fb9979 100644
--- a/obj/NiLookAtController.cpp
+++ b/obj/NiLookAtController.cpp
@@ -27,6 +27,10 @@ void NiLookAtController::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_LOOK_AT_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiLookAtController::GetRefs() const {
+	NI_LOOK_AT_CONTROLLER_GETREFS
+}
+
 const Type & NiLookAtController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiLookAtController.h b/obj/NiLookAtController.h
index 96fad72e..9f28cad1 100644
--- a/obj/NiLookAtController.h
+++ b/obj/NiLookAtController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_LOOK_AT_CONTROLLER_MEMBERS
diff --git a/obj/NiLookAtInterpolator.cpp b/obj/NiLookAtInterpolator.cpp
index d3acdf2a..3546887f 100644
--- a/obj/NiLookAtInterpolator.cpp
+++ b/obj/NiLookAtInterpolator.cpp
@@ -29,6 +29,10 @@ void NiLookAtInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_LOOK_AT_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiLookAtInterpolator::GetRefs() const {
+	NI_LOOK_AT_INTERPOLATOR_GETREFS
+}
+
 const Type & NiLookAtInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiLookAtInterpolator.h b/obj/NiLookAtInterpolator.h
index e2ae7e9d..ba01ac34 100644
--- a/obj/NiLookAtInterpolator.h
+++ b/obj/NiLookAtInterpolator.h
@@ -31,6 +31,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_LOOK_AT_INTERPOLATOR_MEMBERS
diff --git a/obj/NiMaterialColorController.cpp b/obj/NiMaterialColorController.cpp
index a8f45263..e188292c 100644
--- a/obj/NiMaterialColorController.cpp
+++ b/obj/NiMaterialColorController.cpp
@@ -27,6 +27,10 @@ void NiMaterialColorController::FixLinks( const vector<NiObjectRef> & objects, l
 	NI_MATERIAL_COLOR_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiMaterialColorController::GetRefs() const {
+	NI_MATERIAL_COLOR_CONTROLLER_GETREFS
+}
+
 const Type & NiMaterialColorController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiMaterialColorController.h b/obj/NiMaterialColorController.h
index 0afb64fe..1ee72ad6 100644
--- a/obj/NiMaterialColorController.h
+++ b/obj/NiMaterialColorController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_MATERIAL_COLOR_CONTROLLER_MEMBERS
diff --git a/obj/NiMaterialProperty.cpp b/obj/NiMaterialProperty.cpp
index 0d97b2c0..8afb4841 100644
--- a/obj/NiMaterialProperty.cpp
+++ b/obj/NiMaterialProperty.cpp
@@ -26,6 +26,10 @@ void NiMaterialProperty::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_MATERIAL_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiMaterialProperty::GetRefs() const {
+	NI_MATERIAL_PROPERTY_GETREFS
+}
+
 const Type & NiMaterialProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiMaterialProperty.h b/obj/NiMaterialProperty.h
index a701aeb8..0eddc8b7 100644
--- a/obj/NiMaterialProperty.h
+++ b/obj/NiMaterialProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_MATERIAL_PROPERTY_MEMBERS
diff --git a/obj/NiMeshPSysData.cpp b/obj/NiMeshPSysData.cpp
index 9ae0462a..0477818a 100644
--- a/obj/NiMeshPSysData.cpp
+++ b/obj/NiMeshPSysData.cpp
@@ -28,6 +28,10 @@ void NiMeshPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_MESH_P_SYS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiMeshPSysData::GetRefs() const {
+	NI_MESH_P_SYS_DATA_GETREFS
+}
+
 const Type & NiMeshPSysData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiMeshPSysData.h b/obj/NiMeshPSysData.h
index c626afe1..d5864adc 100644
--- a/obj/NiMeshPSysData.h
+++ b/obj/NiMeshPSysData.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_MESH_P_SYS_DATA_MEMBERS
diff --git a/obj/NiMeshParticleSystem.cpp b/obj/NiMeshParticleSystem.cpp
index c6e2facd..d49975a3 100644
--- a/obj/NiMeshParticleSystem.cpp
+++ b/obj/NiMeshParticleSystem.cpp
@@ -26,6 +26,10 @@ void NiMeshParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_MESH_PARTICLE_SYSTEM_FIXLINKS
 }
 
+list<NiObjectRef> NiMeshParticleSystem::GetRefs() const {
+	NI_MESH_PARTICLE_SYSTEM_GETREFS
+}
+
 const Type & NiMeshParticleSystem::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiMeshParticleSystem.h b/obj/NiMeshParticleSystem.h
index c88bc649..80489dcc 100644
--- a/obj/NiMeshParticleSystem.h
+++ b/obj/NiMeshParticleSystem.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_MESH_PARTICLE_SYSTEM_MEMBERS
diff --git a/obj/NiMorphData.cpp b/obj/NiMorphData.cpp
index 78f022d1..f989dafe 100644
--- a/obj/NiMorphData.cpp
+++ b/obj/NiMorphData.cpp
@@ -27,6 +27,10 @@ void NiMorphData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_MORPH_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiMorphData::GetRefs() const {
+	NI_MORPH_DATA_GETREFS
+}
+
 const Type & NiMorphData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiMorphData.h b/obj/NiMorphData.h
index 4d34ca50..7279d669 100644
--- a/obj/NiMorphData.h
+++ b/obj/NiMorphData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_MORPH_DATA_MEMBERS
diff --git a/obj/NiMultiTargetTransformController.cpp b/obj/NiMultiTargetTransformController.cpp
index 0b530afd..da9d80fc 100644
--- a/obj/NiMultiTargetTransformController.cpp
+++ b/obj/NiMultiTargetTransformController.cpp
@@ -27,6 +27,10 @@ void NiMultiTargetTransformController::FixLinks( const vector<NiObjectRef> & obj
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiMultiTargetTransformController::GetRefs() const {
+	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_GETREFS
+}
+
 const Type & NiMultiTargetTransformController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiMultiTargetTransformController.h b/obj/NiMultiTargetTransformController.h
index 9b70f15a..832d9488 100644
--- a/obj/NiMultiTargetTransformController.h
+++ b/obj/NiMultiTargetTransformController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_MULTI_TARGET_TRANSFORM_CONTROLLER_MEMBERS
diff --git a/obj/NiNode.cpp b/obj/NiNode.cpp
index 8722c162..a88b3765 100644
--- a/obj/NiNode.cpp
+++ b/obj/NiNode.cpp
@@ -28,6 +28,10 @@ void NiNode::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_st
 	NI_NODE_FIXLINKS
 }
 
+list<NiObjectRef> NiNode::GetRefs() const {
+	NI_NODE_GETREFS
+}
+
 const Type & NiNode::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiNode.h b/obj/NiNode.h
index 9aca2c55..a31fabc3 100644
--- a/obj/NiNode.h
+++ b/obj/NiNode.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_NODE_MEMBERS
diff --git a/obj/NiObject.cpp b/obj/NiObject.cpp
index f8a47f98..2bf16bec 100644
--- a/obj/NiObject.cpp
+++ b/obj/NiObject.cpp
@@ -54,7 +54,7 @@ string NiObject::asString( bool verbose ) const {
 	return string();
 }
 
-list<NiObjectRef> NiObject::GetRefs() {
+list<NiObjectRef> NiObject::GetRefs() const {
 	return list<NiObjectRef>();
 }
 
diff --git a/obj/NiObject.h b/obj/NiObject.h
index 03e5b11d..59b570b4 100644
--- a/obj/NiObject.h
+++ b/obj/NiObject.h
@@ -122,7 +122,7 @@ public:
 	 * attr_list = my_block.GetRefs()
 	 * \endcode
 	 */
-	virtual list<NiObjectRef> GetRefs();
+	virtual list<NiObjectRef> GetRefs() const;
 	
 	// Python Operator Overloads
 	string __str__() const {
diff --git a/obj/NiPSysAgeDeathModifier.cpp b/obj/NiPSysAgeDeathModifier.cpp
index e26760a2..8a246bf5 100644
--- a/obj/NiPSysAgeDeathModifier.cpp
+++ b/obj/NiPSysAgeDeathModifier.cpp
@@ -27,6 +27,10 @@ void NiPSysAgeDeathModifier::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_P_SYS_AGE_DEATH_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysAgeDeathModifier::GetRefs() const {
+	NI_P_SYS_AGE_DEATH_MODIFIER_GETREFS
+}
+
 const Type & NiPSysAgeDeathModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysAgeDeathModifier.h b/obj/NiPSysAgeDeathModifier.h
index 92c26031..2c55cf43 100644
--- a/obj/NiPSysAgeDeathModifier.h
+++ b/obj/NiPSysAgeDeathModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_AGE_DEATH_MODIFIER_MEMBERS
diff --git a/obj/NiPSysBombModifier.cpp b/obj/NiPSysBombModifier.cpp
index a89c044c..598bbf8c 100644
--- a/obj/NiPSysBombModifier.cpp
+++ b/obj/NiPSysBombModifier.cpp
@@ -27,6 +27,10 @@ void NiPSysBombModifier::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_P_SYS_BOMB_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysBombModifier::GetRefs() const {
+	NI_P_SYS_BOMB_MODIFIER_GETREFS
+}
+
 const Type & NiPSysBombModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysBombModifier.h b/obj/NiPSysBombModifier.h
index c429f272..57758b36 100644
--- a/obj/NiPSysBombModifier.h
+++ b/obj/NiPSysBombModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_BOMB_MODIFIER_MEMBERS
diff --git a/obj/NiPSysBoundUpdateModifier.cpp b/obj/NiPSysBoundUpdateModifier.cpp
index d255d858..fe8d87b0 100644
--- a/obj/NiPSysBoundUpdateModifier.cpp
+++ b/obj/NiPSysBoundUpdateModifier.cpp
@@ -26,6 +26,10 @@ void NiPSysBoundUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, l
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysBoundUpdateModifier::GetRefs() const {
+	NI_P_SYS_BOUND_UPDATE_MODIFIER_GETREFS
+}
+
 const Type & NiPSysBoundUpdateModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysBoundUpdateModifier.h b/obj/NiPSysBoundUpdateModifier.h
index 27350154..9686cf96 100644
--- a/obj/NiPSysBoundUpdateModifier.h
+++ b/obj/NiPSysBoundUpdateModifier.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_BOUND_UPDATE_MODIFIER_MEMBERS
diff --git a/obj/NiPSysBoxEmitter.cpp b/obj/NiPSysBoxEmitter.cpp
index 78785cc0..a40d167e 100644
--- a/obj/NiPSysBoxEmitter.cpp
+++ b/obj/NiPSysBoxEmitter.cpp
@@ -26,6 +26,10 @@ void NiPSysBoxEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_P_SYS_BOX_EMITTER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysBoxEmitter::GetRefs() const {
+	NI_P_SYS_BOX_EMITTER_GETREFS
+}
+
 const Type & NiPSysBoxEmitter::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysBoxEmitter.h b/obj/NiPSysBoxEmitter.h
index 9fe6608f..050db57c 100644
--- a/obj/NiPSysBoxEmitter.h
+++ b/obj/NiPSysBoxEmitter.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_BOX_EMITTER_MEMBERS
diff --git a/obj/NiPSysColliderManager.cpp b/obj/NiPSysColliderManager.cpp
index d738ef5f..dfc9204e 100644
--- a/obj/NiPSysColliderManager.cpp
+++ b/obj/NiPSysColliderManager.cpp
@@ -27,6 +27,10 @@ void NiPSysColliderManager::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_P_SYS_COLLIDER_MANAGER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysColliderManager::GetRefs() const {
+	NI_P_SYS_COLLIDER_MANAGER_GETREFS
+}
+
 const Type & NiPSysColliderManager::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysColliderManager.h b/obj/NiPSysColliderManager.h
index 4937792c..3970dff2 100644
--- a/obj/NiPSysColliderManager.h
+++ b/obj/NiPSysColliderManager.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_COLLIDER_MANAGER_MEMBERS
diff --git a/obj/NiPSysColorModifier.cpp b/obj/NiPSysColorModifier.cpp
index c4bb2ab4..80ecc637 100644
--- a/obj/NiPSysColorModifier.cpp
+++ b/obj/NiPSysColorModifier.cpp
@@ -27,6 +27,10 @@ void NiPSysColorModifier::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_P_SYS_COLOR_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysColorModifier::GetRefs() const {
+	NI_P_SYS_COLOR_MODIFIER_GETREFS
+}
+
 const Type & NiPSysColorModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysColorModifier.h b/obj/NiPSysColorModifier.h
index 3a5c75d9..2d6be326 100644
--- a/obj/NiPSysColorModifier.h
+++ b/obj/NiPSysColorModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_COLOR_MODIFIER_MEMBERS
diff --git a/obj/NiPSysCylinderEmitter.cpp b/obj/NiPSysCylinderEmitter.cpp
index dccf2e96..3a427978 100644
--- a/obj/NiPSysCylinderEmitter.cpp
+++ b/obj/NiPSysCylinderEmitter.cpp
@@ -26,6 +26,10 @@ void NiPSysCylinderEmitter::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_P_SYS_CYLINDER_EMITTER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysCylinderEmitter::GetRefs() const {
+	NI_P_SYS_CYLINDER_EMITTER_GETREFS
+}
+
 const Type & NiPSysCylinderEmitter::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysCylinderEmitter.h b/obj/NiPSysCylinderEmitter.h
index 8321b4a6..1f6af356 100644
--- a/obj/NiPSysCylinderEmitter.h
+++ b/obj/NiPSysCylinderEmitter.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_CYLINDER_EMITTER_MEMBERS
diff --git a/obj/NiPSysData.cpp b/obj/NiPSysData.cpp
index 9f36462b..16769560 100644
--- a/obj/NiPSysData.cpp
+++ b/obj/NiPSysData.cpp
@@ -26,6 +26,10 @@ void NiPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & lin
 	NI_P_SYS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysData::GetRefs() const {
+	NI_P_SYS_DATA_GETREFS
+}
+
 const Type & NiPSysData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysData.h b/obj/NiPSysData.h
index f5cad9f2..89a9d5fd 100644
--- a/obj/NiPSysData.h
+++ b/obj/NiPSysData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_DATA_MEMBERS
diff --git a/obj/NiPSysDragModifier.cpp b/obj/NiPSysDragModifier.cpp
index 843036c4..43e35901 100644
--- a/obj/NiPSysDragModifier.cpp
+++ b/obj/NiPSysDragModifier.cpp
@@ -27,6 +27,10 @@ void NiPSysDragModifier::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_P_SYS_DRAG_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysDragModifier::GetRefs() const {
+	NI_P_SYS_DRAG_MODIFIER_GETREFS
+}
+
 const Type & NiPSysDragModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysDragModifier.h b/obj/NiPSysDragModifier.h
index c50c6e58..21116631 100644
--- a/obj/NiPSysDragModifier.h
+++ b/obj/NiPSysDragModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_DRAG_MODIFIER_MEMBERS
diff --git a/obj/NiPSysEmitter.cpp b/obj/NiPSysEmitter.cpp
index adc4c9de..72cb8e9d 100644
--- a/obj/NiPSysEmitter.cpp
+++ b/obj/NiPSysEmitter.cpp
@@ -26,6 +26,10 @@ void NiPSysEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_P_SYS_EMITTER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitter::GetRefs() const {
+	NI_P_SYS_EMITTER_GETREFS
+}
+
 const Type & NiPSysEmitter::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitter.h b/obj/NiPSysEmitter.h
index 6d2fbe50..79f94bf4 100644
--- a/obj/NiPSysEmitter.h
+++ b/obj/NiPSysEmitter.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_MEMBERS
diff --git a/obj/NiPSysEmitterCtlr.cpp b/obj/NiPSysEmitterCtlr.cpp
index bca11836..e7c0de6f 100644
--- a/obj/NiPSysEmitterCtlr.cpp
+++ b/obj/NiPSysEmitterCtlr.cpp
@@ -27,6 +27,10 @@ void NiPSysEmitterCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_P_SYS_EMITTER_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitterCtlr::GetRefs() const {
+	NI_P_SYS_EMITTER_CTLR_GETREFS
+}
+
 const Type & NiPSysEmitterCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitterCtlr.h b/obj/NiPSysEmitterCtlr.h
index 9bab7940..feefc0a6 100644
--- a/obj/NiPSysEmitterCtlr.h
+++ b/obj/NiPSysEmitterCtlr.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_CTLR_MEMBERS
diff --git a/obj/NiPSysEmitterCtlrData.cpp b/obj/NiPSysEmitterCtlrData.cpp
index 601cda1c..f97240b7 100644
--- a/obj/NiPSysEmitterCtlrData.cpp
+++ b/obj/NiPSysEmitterCtlrData.cpp
@@ -27,6 +27,10 @@ void NiPSysEmitterCtlrData::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_P_SYS_EMITTER_CTLR_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitterCtlrData::GetRefs() const {
+	NI_P_SYS_EMITTER_CTLR_DATA_GETREFS
+}
+
 const Type & NiPSysEmitterCtlrData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitterCtlrData.h b/obj/NiPSysEmitterCtlrData.h
index 471ef8cb..24428af7 100644
--- a/obj/NiPSysEmitterCtlrData.h
+++ b/obj/NiPSysEmitterCtlrData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_CTLR_DATA_MEMBERS
diff --git a/obj/NiPSysEmitterDeclinationCtlr.cpp b/obj/NiPSysEmitterDeclinationCtlr.cpp
index 27bedeb0..56f7c78d 100644
--- a/obj/NiPSysEmitterDeclinationCtlr.cpp
+++ b/obj/NiPSysEmitterDeclinationCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysEmitterDeclinationCtlr::FixLinks( const vector<NiObjectRef> & objects
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitterDeclinationCtlr::GetRefs() const {
+	NI_P_SYS_EMITTER_DECLINATION_CTLR_GETREFS
+}
+
 const Type & NiPSysEmitterDeclinationCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitterDeclinationCtlr.h b/obj/NiPSysEmitterDeclinationCtlr.h
index 058e01b3..4ba6926a 100644
--- a/obj/NiPSysEmitterDeclinationCtlr.h
+++ b/obj/NiPSysEmitterDeclinationCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_DECLINATION_CTLR_MEMBERS
diff --git a/obj/NiPSysEmitterDeclinationVarCtlr.cpp b/obj/NiPSysEmitterDeclinationVarCtlr.cpp
index cd76aca6..bbc49fd4 100644
--- a/obj/NiPSysEmitterDeclinationVarCtlr.cpp
+++ b/obj/NiPSysEmitterDeclinationVarCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysEmitterDeclinationVarCtlr::FixLinks( const vector<NiObjectRef> & obje
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitterDeclinationVarCtlr::GetRefs() const {
+	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_GETREFS
+}
+
 const Type & NiPSysEmitterDeclinationVarCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitterDeclinationVarCtlr.h b/obj/NiPSysEmitterDeclinationVarCtlr.h
index 788ec81b..dcd269d5 100644
--- a/obj/NiPSysEmitterDeclinationVarCtlr.h
+++ b/obj/NiPSysEmitterDeclinationVarCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_DECLINATION_VAR_CTLR_MEMBERS
diff --git a/obj/NiPSysEmitterInitialRadiusCtlr.cpp b/obj/NiPSysEmitterInitialRadiusCtlr.cpp
index f0475c86..e8a9f341 100644
--- a/obj/NiPSysEmitterInitialRadiusCtlr.cpp
+++ b/obj/NiPSysEmitterInitialRadiusCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysEmitterInitialRadiusCtlr::FixLinks( const vector<NiObjectRef> & objec
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitterInitialRadiusCtlr::GetRefs() const {
+	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_GETREFS
+}
+
 const Type & NiPSysEmitterInitialRadiusCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitterInitialRadiusCtlr.h b/obj/NiPSysEmitterInitialRadiusCtlr.h
index 45fdd88b..3866bd0c 100644
--- a/obj/NiPSysEmitterInitialRadiusCtlr.h
+++ b/obj/NiPSysEmitterInitialRadiusCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_INITIAL_RADIUS_CTLR_MEMBERS
diff --git a/obj/NiPSysEmitterLifeSpanCtlr.cpp b/obj/NiPSysEmitterLifeSpanCtlr.cpp
index 180b8695..fd296b3c 100644
--- a/obj/NiPSysEmitterLifeSpanCtlr.cpp
+++ b/obj/NiPSysEmitterLifeSpanCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysEmitterLifeSpanCtlr::FixLinks( const vector<NiObjectRef> & objects, l
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitterLifeSpanCtlr::GetRefs() const {
+	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_GETREFS
+}
+
 const Type & NiPSysEmitterLifeSpanCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitterLifeSpanCtlr.h b/obj/NiPSysEmitterLifeSpanCtlr.h
index 1a15cdaa..b9508509 100644
--- a/obj/NiPSysEmitterLifeSpanCtlr.h
+++ b/obj/NiPSysEmitterLifeSpanCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_LIFE_SPAN_CTLR_MEMBERS
diff --git a/obj/NiPSysEmitterSpeedCtlr.cpp b/obj/NiPSysEmitterSpeedCtlr.cpp
index bea55122..e8276ac2 100644
--- a/obj/NiPSysEmitterSpeedCtlr.cpp
+++ b/obj/NiPSysEmitterSpeedCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysEmitterSpeedCtlr::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_P_SYS_EMITTER_SPEED_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysEmitterSpeedCtlr::GetRefs() const {
+	NI_P_SYS_EMITTER_SPEED_CTLR_GETREFS
+}
+
 const Type & NiPSysEmitterSpeedCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysEmitterSpeedCtlr.h b/obj/NiPSysEmitterSpeedCtlr.h
index b94a651f..f844ba1b 100644
--- a/obj/NiPSysEmitterSpeedCtlr.h
+++ b/obj/NiPSysEmitterSpeedCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_EMITTER_SPEED_CTLR_MEMBERS
diff --git a/obj/NiPSysGravityModifier.cpp b/obj/NiPSysGravityModifier.cpp
index 0f80ce67..f2bbfd7d 100644
--- a/obj/NiPSysGravityModifier.cpp
+++ b/obj/NiPSysGravityModifier.cpp
@@ -27,6 +27,10 @@ void NiPSysGravityModifier::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_P_SYS_GRAVITY_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysGravityModifier::GetRefs() const {
+	NI_P_SYS_GRAVITY_MODIFIER_GETREFS
+}
+
 const Type & NiPSysGravityModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysGravityModifier.h b/obj/NiPSysGravityModifier.h
index f5f5b122..b4220855 100644
--- a/obj/NiPSysGravityModifier.h
+++ b/obj/NiPSysGravityModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_GRAVITY_MODIFIER_MEMBERS
diff --git a/obj/NiPSysGravityStrengthCtlr.cpp b/obj/NiPSysGravityStrengthCtlr.cpp
index a48ac1b3..421ba015 100644
--- a/obj/NiPSysGravityStrengthCtlr.cpp
+++ b/obj/NiPSysGravityStrengthCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysGravityStrengthCtlr::FixLinks( const vector<NiObjectRef> & objects, l
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysGravityStrengthCtlr::GetRefs() const {
+	NI_P_SYS_GRAVITY_STRENGTH_CTLR_GETREFS
+}
+
 const Type & NiPSysGravityStrengthCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysGravityStrengthCtlr.h b/obj/NiPSysGravityStrengthCtlr.h
index 4f498dcc..5f4f7772 100644
--- a/obj/NiPSysGravityStrengthCtlr.h
+++ b/obj/NiPSysGravityStrengthCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_GRAVITY_STRENGTH_CTLR_MEMBERS
diff --git a/obj/NiPSysGrowFadeModifier.cpp b/obj/NiPSysGrowFadeModifier.cpp
index cbc254b3..43076f22 100644
--- a/obj/NiPSysGrowFadeModifier.cpp
+++ b/obj/NiPSysGrowFadeModifier.cpp
@@ -26,6 +26,10 @@ void NiPSysGrowFadeModifier::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_P_SYS_GROW_FADE_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysGrowFadeModifier::GetRefs() const {
+	NI_P_SYS_GROW_FADE_MODIFIER_GETREFS
+}
+
 const Type & NiPSysGrowFadeModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysGrowFadeModifier.h b/obj/NiPSysGrowFadeModifier.h
index b310cd97..4bec0d07 100644
--- a/obj/NiPSysGrowFadeModifier.h
+++ b/obj/NiPSysGrowFadeModifier.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_GROW_FADE_MODIFIER_MEMBERS
diff --git a/obj/NiPSysMeshEmitter.cpp b/obj/NiPSysMeshEmitter.cpp
index ea7ff35f..8c4b5cdf 100644
--- a/obj/NiPSysMeshEmitter.cpp
+++ b/obj/NiPSysMeshEmitter.cpp
@@ -27,6 +27,10 @@ void NiPSysMeshEmitter::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_P_SYS_MESH_EMITTER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysMeshEmitter::GetRefs() const {
+	NI_P_SYS_MESH_EMITTER_GETREFS
+}
+
 const Type & NiPSysMeshEmitter::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysMeshEmitter.h b/obj/NiPSysMeshEmitter.h
index dc89004f..04d6716b 100644
--- a/obj/NiPSysMeshEmitter.h
+++ b/obj/NiPSysMeshEmitter.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_MESH_EMITTER_MEMBERS
diff --git a/obj/NiPSysMeshUpdateModifier.cpp b/obj/NiPSysMeshUpdateModifier.cpp
index a02d3a78..548f96c7 100644
--- a/obj/NiPSysMeshUpdateModifier.cpp
+++ b/obj/NiPSysMeshUpdateModifier.cpp
@@ -27,6 +27,10 @@ void NiPSysMeshUpdateModifier::FixLinks( const vector<NiObjectRef> & objects, li
 	NI_P_SYS_MESH_UPDATE_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysMeshUpdateModifier::GetRefs() const {
+	NI_P_SYS_MESH_UPDATE_MODIFIER_GETREFS
+}
+
 const Type & NiPSysMeshUpdateModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysMeshUpdateModifier.h b/obj/NiPSysMeshUpdateModifier.h
index 58ac752b..a3108e89 100644
--- a/obj/NiPSysMeshUpdateModifier.h
+++ b/obj/NiPSysMeshUpdateModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_MESH_UPDATE_MODIFIER_MEMBERS
diff --git a/obj/NiPSysModifier.cpp b/obj/NiPSysModifier.cpp
index 0e591c80..8a50eae8 100644
--- a/obj/NiPSysModifier.cpp
+++ b/obj/NiPSysModifier.cpp
@@ -27,6 +27,10 @@ void NiPSysModifier::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_P_SYS_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysModifier::GetRefs() const {
+	NI_P_SYS_MODIFIER_GETREFS
+}
+
 const Type & NiPSysModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysModifier.h b/obj/NiPSysModifier.h
index 5e3b7184..13f12d74 100644
--- a/obj/NiPSysModifier.h
+++ b/obj/NiPSysModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_MODIFIER_MEMBERS
diff --git a/obj/NiPSysModifierActiveCtlr.cpp b/obj/NiPSysModifierActiveCtlr.cpp
index a4ed6ac4..ac6ce889 100644
--- a/obj/NiPSysModifierActiveCtlr.cpp
+++ b/obj/NiPSysModifierActiveCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysModifierActiveCtlr::FixLinks( const vector<NiObjectRef> & objects, li
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysModifierActiveCtlr::GetRefs() const {
+	NI_P_SYS_MODIFIER_ACTIVE_CTLR_GETREFS
+}
+
 const Type & NiPSysModifierActiveCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysModifierActiveCtlr.h b/obj/NiPSysModifierActiveCtlr.h
index 264ab507..3f5503c9 100644
--- a/obj/NiPSysModifierActiveCtlr.h
+++ b/obj/NiPSysModifierActiveCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_MODIFIER_ACTIVE_CTLR_MEMBERS
diff --git a/obj/NiPSysPlanarCollider.cpp b/obj/NiPSysPlanarCollider.cpp
index 72225644..127396c4 100644
--- a/obj/NiPSysPlanarCollider.cpp
+++ b/obj/NiPSysPlanarCollider.cpp
@@ -29,6 +29,10 @@ void NiPSysPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_P_SYS_PLANAR_COLLIDER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysPlanarCollider::GetRefs() const {
+	NI_P_SYS_PLANAR_COLLIDER_GETREFS
+}
+
 const Type & NiPSysPlanarCollider::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysPlanarCollider.h b/obj/NiPSysPlanarCollider.h
index 5fa74908..938aeb13 100644
--- a/obj/NiPSysPlanarCollider.h
+++ b/obj/NiPSysPlanarCollider.h
@@ -31,6 +31,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_PLANAR_COLLIDER_MEMBERS
diff --git a/obj/NiPSysPositionModifier.cpp b/obj/NiPSysPositionModifier.cpp
index 1b194929..01563386 100644
--- a/obj/NiPSysPositionModifier.cpp
+++ b/obj/NiPSysPositionModifier.cpp
@@ -26,6 +26,10 @@ void NiPSysPositionModifier::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_P_SYS_POSITION_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysPositionModifier::GetRefs() const {
+	NI_P_SYS_POSITION_MODIFIER_GETREFS
+}
+
 const Type & NiPSysPositionModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysPositionModifier.h b/obj/NiPSysPositionModifier.h
index eec7983d..253de59e 100644
--- a/obj/NiPSysPositionModifier.h
+++ b/obj/NiPSysPositionModifier.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_POSITION_MODIFIER_MEMBERS
diff --git a/obj/NiPSysResetOnLoopCtlr.cpp b/obj/NiPSysResetOnLoopCtlr.cpp
index 30cfe474..fb9bb071 100644
--- a/obj/NiPSysResetOnLoopCtlr.cpp
+++ b/obj/NiPSysResetOnLoopCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysResetOnLoopCtlr::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_P_SYS_RESET_ON_LOOP_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysResetOnLoopCtlr::GetRefs() const {
+	NI_P_SYS_RESET_ON_LOOP_CTLR_GETREFS
+}
+
 const Type & NiPSysResetOnLoopCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysResetOnLoopCtlr.h b/obj/NiPSysResetOnLoopCtlr.h
index 63619976..8e5f333f 100644
--- a/obj/NiPSysResetOnLoopCtlr.h
+++ b/obj/NiPSysResetOnLoopCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_RESET_ON_LOOP_CTLR_MEMBERS
diff --git a/obj/NiPSysRotationModifier.cpp b/obj/NiPSysRotationModifier.cpp
index febc9187..10981e8c 100644
--- a/obj/NiPSysRotationModifier.cpp
+++ b/obj/NiPSysRotationModifier.cpp
@@ -26,6 +26,10 @@ void NiPSysRotationModifier::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_P_SYS_ROTATION_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysRotationModifier::GetRefs() const {
+	NI_P_SYS_ROTATION_MODIFIER_GETREFS
+}
+
 const Type & NiPSysRotationModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysRotationModifier.h b/obj/NiPSysRotationModifier.h
index d7321b04..44bc5889 100644
--- a/obj/NiPSysRotationModifier.h
+++ b/obj/NiPSysRotationModifier.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_ROTATION_MODIFIER_MEMBERS
diff --git a/obj/NiPSysSpawnModifier.cpp b/obj/NiPSysSpawnModifier.cpp
index f2e00244..2cf905ae 100644
--- a/obj/NiPSysSpawnModifier.cpp
+++ b/obj/NiPSysSpawnModifier.cpp
@@ -26,6 +26,10 @@ void NiPSysSpawnModifier::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_P_SYS_SPAWN_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysSpawnModifier::GetRefs() const {
+	NI_P_SYS_SPAWN_MODIFIER_GETREFS
+}
+
 const Type & NiPSysSpawnModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysSpawnModifier.h b/obj/NiPSysSpawnModifier.h
index b9437a94..d619ab27 100644
--- a/obj/NiPSysSpawnModifier.h
+++ b/obj/NiPSysSpawnModifier.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_SPAWN_MODIFIER_MEMBERS
diff --git a/obj/NiPSysSphereEmitter.cpp b/obj/NiPSysSphereEmitter.cpp
index 41994fb0..de937a75 100644
--- a/obj/NiPSysSphereEmitter.cpp
+++ b/obj/NiPSysSphereEmitter.cpp
@@ -26,6 +26,10 @@ void NiPSysSphereEmitter::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_P_SYS_SPHERE_EMITTER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysSphereEmitter::GetRefs() const {
+	NI_P_SYS_SPHERE_EMITTER_GETREFS
+}
+
 const Type & NiPSysSphereEmitter::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysSphereEmitter.h b/obj/NiPSysSphereEmitter.h
index 331b5269..66f8dc3d 100644
--- a/obj/NiPSysSphereEmitter.h
+++ b/obj/NiPSysSphereEmitter.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_SPHERE_EMITTER_MEMBERS
diff --git a/obj/NiPSysUpdateCtlr.cpp b/obj/NiPSysUpdateCtlr.cpp
index b5c1c299..da91cb8a 100644
--- a/obj/NiPSysUpdateCtlr.cpp
+++ b/obj/NiPSysUpdateCtlr.cpp
@@ -26,6 +26,10 @@ void NiPSysUpdateCtlr::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_P_SYS_UPDATE_CTLR_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysUpdateCtlr::GetRefs() const {
+	NI_P_SYS_UPDATE_CTLR_GETREFS
+}
+
 const Type & NiPSysUpdateCtlr::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysUpdateCtlr.h b/obj/NiPSysUpdateCtlr.h
index d209d1cd..3b8feb0c 100644
--- a/obj/NiPSysUpdateCtlr.h
+++ b/obj/NiPSysUpdateCtlr.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_UPDATE_CTLR_MEMBERS
diff --git a/obj/NiPSysVolumeEmitter.cpp b/obj/NiPSysVolumeEmitter.cpp
index d348991d..7fd60dcf 100644
--- a/obj/NiPSysVolumeEmitter.cpp
+++ b/obj/NiPSysVolumeEmitter.cpp
@@ -27,6 +27,10 @@ void NiPSysVolumeEmitter::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_P_SYS_VOLUME_EMITTER_FIXLINKS
 }
 
+list<NiObjectRef> NiPSysVolumeEmitter::GetRefs() const {
+	NI_P_SYS_VOLUME_EMITTER_GETREFS
+}
+
 const Type & NiPSysVolumeEmitter::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPSysVolumeEmitter.h b/obj/NiPSysVolumeEmitter.h
index 8763a125..69793428 100644
--- a/obj/NiPSysVolumeEmitter.h
+++ b/obj/NiPSysVolumeEmitter.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_P_SYS_VOLUME_EMITTER_MEMBERS
diff --git a/obj/NiPalette.cpp b/obj/NiPalette.cpp
index 780a9237..cef491bd 100644
--- a/obj/NiPalette.cpp
+++ b/obj/NiPalette.cpp
@@ -26,6 +26,10 @@ void NiPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	NI_PALETTE_FIXLINKS
 }
 
+list<NiObjectRef> NiPalette::GetRefs() const {
+	NI_PALETTE_GETREFS
+}
+
 const Type & NiPalette::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPalette.h b/obj/NiPalette.h
index 142fd7f2..2c624983 100644
--- a/obj/NiPalette.h
+++ b/obj/NiPalette.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PALETTE_MEMBERS
diff --git a/obj/NiParticleBomb.cpp b/obj/NiParticleBomb.cpp
index 7d0b5430..cc9a2d41 100644
--- a/obj/NiParticleBomb.cpp
+++ b/obj/NiParticleBomb.cpp
@@ -26,6 +26,10 @@ void NiParticleBomb::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_PARTICLE_BOMB_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleBomb::GetRefs() const {
+	NI_PARTICLE_BOMB_GETREFS
+}
+
 const Type & NiParticleBomb::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleBomb.h b/obj/NiParticleBomb.h
index 0781faa3..4dcef70a 100644
--- a/obj/NiParticleBomb.h
+++ b/obj/NiParticleBomb.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_BOMB_MEMBERS
diff --git a/obj/NiParticleColorModifier.cpp b/obj/NiParticleColorModifier.cpp
index 64dd82e1..f86df5ef 100644
--- a/obj/NiParticleColorModifier.cpp
+++ b/obj/NiParticleColorModifier.cpp
@@ -27,6 +27,10 @@ void NiParticleColorModifier::FixLinks( const vector<NiObjectRef> & objects, lis
 	NI_PARTICLE_COLOR_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleColorModifier::GetRefs() const {
+	NI_PARTICLE_COLOR_MODIFIER_GETREFS
+}
+
 const Type & NiParticleColorModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleColorModifier.h b/obj/NiParticleColorModifier.h
index c5acf891..a07b68ce 100644
--- a/obj/NiParticleColorModifier.h
+++ b/obj/NiParticleColorModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_COLOR_MODIFIER_MEMBERS
diff --git a/obj/NiParticleGrowFade.cpp b/obj/NiParticleGrowFade.cpp
index b76272f3..2b69a475 100644
--- a/obj/NiParticleGrowFade.cpp
+++ b/obj/NiParticleGrowFade.cpp
@@ -26,6 +26,10 @@ void NiParticleGrowFade::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_PARTICLE_GROW_FADE_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleGrowFade::GetRefs() const {
+	NI_PARTICLE_GROW_FADE_GETREFS
+}
+
 const Type & NiParticleGrowFade::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleGrowFade.h b/obj/NiParticleGrowFade.h
index 0b5b4e15..237d687b 100644
--- a/obj/NiParticleGrowFade.h
+++ b/obj/NiParticleGrowFade.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_GROW_FADE_MEMBERS
diff --git a/obj/NiParticleMeshModifier.cpp b/obj/NiParticleMeshModifier.cpp
index 65148c33..4b66509f 100644
--- a/obj/NiParticleMeshModifier.cpp
+++ b/obj/NiParticleMeshModifier.cpp
@@ -27,6 +27,10 @@ void NiParticleMeshModifier::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_PARTICLE_MESH_MODIFIER_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleMeshModifier::GetRefs() const {
+	NI_PARTICLE_MESH_MODIFIER_GETREFS
+}
+
 const Type & NiParticleMeshModifier::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleMeshModifier.h b/obj/NiParticleMeshModifier.h
index cf2acbfe..1e8576eb 100644
--- a/obj/NiParticleMeshModifier.h
+++ b/obj/NiParticleMeshModifier.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_MESH_MODIFIER_MEMBERS
diff --git a/obj/NiParticleMeshes.cpp b/obj/NiParticleMeshes.cpp
index 748853b6..9604ab95 100644
--- a/obj/NiParticleMeshes.cpp
+++ b/obj/NiParticleMeshes.cpp
@@ -26,6 +26,10 @@ void NiParticleMeshes::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_PARTICLE_MESHES_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleMeshes::GetRefs() const {
+	NI_PARTICLE_MESHES_GETREFS
+}
+
 const Type & NiParticleMeshes::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleMeshes.h b/obj/NiParticleMeshes.h
index 03c4f236..22cc3ebb 100644
--- a/obj/NiParticleMeshes.h
+++ b/obj/NiParticleMeshes.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_MESHES_MEMBERS
diff --git a/obj/NiParticleMeshesData.cpp b/obj/NiParticleMeshesData.cpp
index c07c4fe6..7c9c6960 100644
--- a/obj/NiParticleMeshesData.cpp
+++ b/obj/NiParticleMeshesData.cpp
@@ -27,6 +27,10 @@ void NiParticleMeshesData::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_PARTICLE_MESHES_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleMeshesData::GetRefs() const {
+	NI_PARTICLE_MESHES_DATA_GETREFS
+}
+
 const Type & NiParticleMeshesData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleMeshesData.h b/obj/NiParticleMeshesData.h
index b890f085..9995acc8 100644
--- a/obj/NiParticleMeshesData.h
+++ b/obj/NiParticleMeshesData.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_MESHES_DATA_MEMBERS
diff --git a/obj/NiParticleRotation.cpp b/obj/NiParticleRotation.cpp
index 9057cc52..6bb77c26 100644
--- a/obj/NiParticleRotation.cpp
+++ b/obj/NiParticleRotation.cpp
@@ -26,6 +26,10 @@ void NiParticleRotation::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_PARTICLE_ROTATION_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleRotation::GetRefs() const {
+	NI_PARTICLE_ROTATION_GETREFS
+}
+
 const Type & NiParticleRotation::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleRotation.h b/obj/NiParticleRotation.h
index 8fb3b8d8..865e1101 100644
--- a/obj/NiParticleRotation.h
+++ b/obj/NiParticleRotation.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_ROTATION_MEMBERS
diff --git a/obj/NiParticleSystem.cpp b/obj/NiParticleSystem.cpp
index 4617ff67..4476f8a5 100644
--- a/obj/NiParticleSystem.cpp
+++ b/obj/NiParticleSystem.cpp
@@ -27,6 +27,10 @@ void NiParticleSystem::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_PARTICLE_SYSTEM_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleSystem::GetRefs() const {
+	NI_PARTICLE_SYSTEM_GETREFS
+}
+
 const Type & NiParticleSystem::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleSystem.h b/obj/NiParticleSystem.h
index 17b21905..00d3b61a 100644
--- a/obj/NiParticleSystem.h
+++ b/obj/NiParticleSystem.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_SYSTEM_MEMBERS
diff --git a/obj/NiParticleSystemController.cpp b/obj/NiParticleSystemController.cpp
index f5ba01f4..0c93a98d 100644
--- a/obj/NiParticleSystemController.cpp
+++ b/obj/NiParticleSystemController.cpp
@@ -29,6 +29,10 @@ void NiParticleSystemController::FixLinks( const vector<NiObjectRef> & objects,
 	NI_PARTICLE_SYSTEM_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiParticleSystemController::GetRefs() const {
+	NI_PARTICLE_SYSTEM_CONTROLLER_GETREFS
+}
+
 const Type & NiParticleSystemController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticleSystemController.h b/obj/NiParticleSystemController.h
index a9e9513c..a0ad9e4f 100644
--- a/obj/NiParticleSystemController.h
+++ b/obj/NiParticleSystemController.h
@@ -32,6 +32,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLE_SYSTEM_CONTROLLER_MEMBERS
diff --git a/obj/NiParticles.cpp b/obj/NiParticles.cpp
index 52b24e1d..3a56498c 100644
--- a/obj/NiParticles.cpp
+++ b/obj/NiParticles.cpp
@@ -26,6 +26,10 @@ void NiParticles::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_PARTICLES_FIXLINKS
 }
 
+list<NiObjectRef> NiParticles::GetRefs() const {
+	NI_PARTICLES_GETREFS
+}
+
 const Type & NiParticles::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticles.h b/obj/NiParticles.h
index 7f23758b..0175eba8 100644
--- a/obj/NiParticles.h
+++ b/obj/NiParticles.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLES_MEMBERS
diff --git a/obj/NiParticlesData.cpp b/obj/NiParticlesData.cpp
index 09280918..7cfd348c 100644
--- a/obj/NiParticlesData.cpp
+++ b/obj/NiParticlesData.cpp
@@ -26,6 +26,10 @@ void NiParticlesData::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_PARTICLES_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiParticlesData::GetRefs() const {
+	NI_PARTICLES_DATA_GETREFS
+}
+
 const Type & NiParticlesData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiParticlesData.h b/obj/NiParticlesData.h
index 7b64472b..3c62ef35 100644
--- a/obj/NiParticlesData.h
+++ b/obj/NiParticlesData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PARTICLES_DATA_MEMBERS
diff --git a/obj/NiPathController.cpp b/obj/NiPathController.cpp
index f33de29e..f65da38f 100644
--- a/obj/NiPathController.cpp
+++ b/obj/NiPathController.cpp
@@ -28,6 +28,10 @@ void NiPathController::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_PATH_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiPathController::GetRefs() const {
+	NI_PATH_CONTROLLER_GETREFS
+}
+
 const Type & NiPathController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPathController.h b/obj/NiPathController.h
index 22806119..7ab363b0 100644
--- a/obj/NiPathController.h
+++ b/obj/NiPathController.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PATH_CONTROLLER_MEMBERS
diff --git a/obj/NiPathInterpolator.cpp b/obj/NiPathInterpolator.cpp
index 59b23a27..7101dc97 100644
--- a/obj/NiPathInterpolator.cpp
+++ b/obj/NiPathInterpolator.cpp
@@ -28,6 +28,10 @@ void NiPathInterpolator::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_PATH_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiPathInterpolator::GetRefs() const {
+	NI_PATH_INTERPOLATOR_GETREFS
+}
+
 const Type & NiPathInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPathInterpolator.h b/obj/NiPathInterpolator.h
index 76808b20..8449e148 100644
--- a/obj/NiPathInterpolator.h
+++ b/obj/NiPathInterpolator.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PATH_INTERPOLATOR_MEMBERS
diff --git a/obj/NiPixelData.cpp b/obj/NiPixelData.cpp
index ca4189f8..d2bda0ec 100644
--- a/obj/NiPixelData.cpp
+++ b/obj/NiPixelData.cpp
@@ -29,6 +29,10 @@ void NiPixelData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_PIXEL_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiPixelData::GetRefs() const {
+	NI_PIXEL_DATA_GETREFS
+}
+
 const Type & NiPixelData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPixelData.h b/obj/NiPixelData.h
index 948e4962..630c0bd4 100644
--- a/obj/NiPixelData.h
+++ b/obj/NiPixelData.h
@@ -32,6 +32,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PIXEL_DATA_MEMBERS
diff --git a/obj/NiPlanarCollider.cpp b/obj/NiPlanarCollider.cpp
index 158cacef..85065c6a 100644
--- a/obj/NiPlanarCollider.cpp
+++ b/obj/NiPlanarCollider.cpp
@@ -26,6 +26,10 @@ void NiPlanarCollider::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_PLANAR_COLLIDER_FIXLINKS
 }
 
+list<NiObjectRef> NiPlanarCollider::GetRefs() const {
+	NI_PLANAR_COLLIDER_GETREFS
+}
+
 const Type & NiPlanarCollider::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPlanarCollider.h b/obj/NiPlanarCollider.h
index 92e05e84..865bb0df 100644
--- a/obj/NiPlanarCollider.h
+++ b/obj/NiPlanarCollider.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PLANAR_COLLIDER_MEMBERS
diff --git a/obj/NiPoint3Interpolator.cpp b/obj/NiPoint3Interpolator.cpp
index 143c789d..87162841 100644
--- a/obj/NiPoint3Interpolator.cpp
+++ b/obj/NiPoint3Interpolator.cpp
@@ -27,6 +27,10 @@ void NiPoint3Interpolator::FixLinks( const vector<NiObjectRef> & objects, list<u
 	NI_POINT3_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiPoint3Interpolator::GetRefs() const {
+	NI_POINT3_INTERPOLATOR_GETREFS
+}
+
 const Type & NiPoint3Interpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPoint3Interpolator.h b/obj/NiPoint3Interpolator.h
index ec997102..650352c6 100644
--- a/obj/NiPoint3Interpolator.h
+++ b/obj/NiPoint3Interpolator.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_POINT3_INTERPOLATOR_MEMBERS
diff --git a/obj/NiPointLight.cpp b/obj/NiPointLight.cpp
index f473b81d..ab18bd42 100644
--- a/obj/NiPointLight.cpp
+++ b/obj/NiPointLight.cpp
@@ -26,6 +26,10 @@ void NiPointLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & l
 	NI_POINT_LIGHT_FIXLINKS
 }
 
+list<NiObjectRef> NiPointLight::GetRefs() const {
+	NI_POINT_LIGHT_GETREFS
+}
+
 const Type & NiPointLight::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPointLight.h b/obj/NiPointLight.h
index 0c87f34e..28bd3859 100644
--- a/obj/NiPointLight.h
+++ b/obj/NiPointLight.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_POINT_LIGHT_MEMBERS
diff --git a/obj/NiPosData.cpp b/obj/NiPosData.cpp
index 824d98fa..2bce4140 100644
--- a/obj/NiPosData.cpp
+++ b/obj/NiPosData.cpp
@@ -27,6 +27,10 @@ void NiPosData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	NI_POS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiPosData::GetRefs() const {
+	NI_POS_DATA_GETREFS
+}
+
 const Type & NiPosData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiPosData.h b/obj/NiPosData.h
index 5cb657be..04a83539 100644
--- a/obj/NiPosData.h
+++ b/obj/NiPosData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_POS_DATA_MEMBERS
diff --git a/obj/NiProperty.cpp b/obj/NiProperty.cpp
index d8f1217a..6cb87f00 100644
--- a/obj/NiProperty.cpp
+++ b/obj/NiProperty.cpp
@@ -26,6 +26,10 @@ void NiProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint> & lin
 	NI_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiProperty::GetRefs() const {
+	NI_PROPERTY_GETREFS
+}
+
 const Type & NiProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiProperty.h b/obj/NiProperty.h
index e95c6b20..bceab520 100644
--- a/obj/NiProperty.h
+++ b/obj/NiProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_PROPERTY_MEMBERS
diff --git a/obj/NiRangeLODData.cpp b/obj/NiRangeLODData.cpp
index b5f7be22..d4f08220 100644
--- a/obj/NiRangeLODData.cpp
+++ b/obj/NiRangeLODData.cpp
@@ -27,6 +27,10 @@ void NiRangeLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_RANGE_L_O_D_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiRangeLODData::GetRefs() const {
+	NI_RANGE_L_O_D_DATA_GETREFS
+}
+
 const Type & NiRangeLODData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiRangeLODData.h b/obj/NiRangeLODData.h
index 9cc32c04..48772b9c 100644
--- a/obj/NiRangeLODData.h
+++ b/obj/NiRangeLODData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_RANGE_L_O_D_DATA_MEMBERS
diff --git a/obj/NiRotatingParticles.cpp b/obj/NiRotatingParticles.cpp
index 7230527a..057e033b 100644
--- a/obj/NiRotatingParticles.cpp
+++ b/obj/NiRotatingParticles.cpp
@@ -26,6 +26,10 @@ void NiRotatingParticles::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_ROTATING_PARTICLES_FIXLINKS
 }
 
+list<NiObjectRef> NiRotatingParticles::GetRefs() const {
+	NI_ROTATING_PARTICLES_GETREFS
+}
+
 const Type & NiRotatingParticles::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiRotatingParticles.h b/obj/NiRotatingParticles.h
index 78432d91..2148798e 100644
--- a/obj/NiRotatingParticles.h
+++ b/obj/NiRotatingParticles.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_ROTATING_PARTICLES_MEMBERS
diff --git a/obj/NiRotatingParticlesData.cpp b/obj/NiRotatingParticlesData.cpp
index 02a37c84..1a8596a5 100644
--- a/obj/NiRotatingParticlesData.cpp
+++ b/obj/NiRotatingParticlesData.cpp
@@ -26,6 +26,10 @@ void NiRotatingParticlesData::FixLinks( const vector<NiObjectRef> & objects, lis
 	NI_ROTATING_PARTICLES_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiRotatingParticlesData::GetRefs() const {
+	NI_ROTATING_PARTICLES_DATA_GETREFS
+}
+
 const Type & NiRotatingParticlesData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiRotatingParticlesData.h b/obj/NiRotatingParticlesData.h
index 273e210a..193ef285 100644
--- a/obj/NiRotatingParticlesData.h
+++ b/obj/NiRotatingParticlesData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_ROTATING_PARTICLES_DATA_MEMBERS
diff --git a/obj/NiScreenLODData.cpp b/obj/NiScreenLODData.cpp
index 957e00a4..40d5adc1 100644
--- a/obj/NiScreenLODData.cpp
+++ b/obj/NiScreenLODData.cpp
@@ -26,6 +26,10 @@ void NiScreenLODData::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_SCREEN_L_O_D_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiScreenLODData::GetRefs() const {
+	NI_SCREEN_L_O_D_DATA_GETREFS
+}
+
 const Type & NiScreenLODData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiScreenLODData.h b/obj/NiScreenLODData.h
index faf813ad..d78af08c 100644
--- a/obj/NiScreenLODData.h
+++ b/obj/NiScreenLODData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SCREEN_L_O_D_DATA_MEMBERS
diff --git a/obj/NiSequenceStreamHelper.cpp b/obj/NiSequenceStreamHelper.cpp
index 2dcd303f..c9731033 100644
--- a/obj/NiSequenceStreamHelper.cpp
+++ b/obj/NiSequenceStreamHelper.cpp
@@ -26,6 +26,10 @@ void NiSequenceStreamHelper::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_SEQUENCE_STREAM_HELPER_FIXLINKS
 }
 
+list<NiObjectRef> NiSequenceStreamHelper::GetRefs() const {
+	NI_SEQUENCE_STREAM_HELPER_GETREFS
+}
+
 const Type & NiSequenceStreamHelper::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSequenceStreamHelper.h b/obj/NiSequenceStreamHelper.h
index 289dbb7d..28e5b35d 100644
--- a/obj/NiSequenceStreamHelper.h
+++ b/obj/NiSequenceStreamHelper.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SEQUENCE_STREAM_HELPER_MEMBERS
diff --git a/obj/NiShadeProperty.cpp b/obj/NiShadeProperty.cpp
index 33b11ec5..e34ac541 100644
--- a/obj/NiShadeProperty.cpp
+++ b/obj/NiShadeProperty.cpp
@@ -26,6 +26,10 @@ void NiShadeProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_SHADE_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiShadeProperty::GetRefs() const {
+	NI_SHADE_PROPERTY_GETREFS
+}
+
 const Type & NiShadeProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiShadeProperty.h b/obj/NiShadeProperty.h
index 3b3f0f54..66499aa3 100644
--- a/obj/NiShadeProperty.h
+++ b/obj/NiShadeProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SHADE_PROPERTY_MEMBERS
diff --git a/obj/NiSingleInterpolatorController.cpp b/obj/NiSingleInterpolatorController.cpp
index 58f2c0b2..69e2e5e5 100644
--- a/obj/NiSingleInterpolatorController.cpp
+++ b/obj/NiSingleInterpolatorController.cpp
@@ -27,6 +27,10 @@ void NiSingleInterpolatorController::FixLinks( const vector<NiObjectRef> & objec
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiSingleInterpolatorController::GetRefs() const {
+	NI_SINGLE_INTERPOLATOR_CONTROLLER_GETREFS
+}
+
 const Type & NiSingleInterpolatorController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSingleInterpolatorController.h b/obj/NiSingleInterpolatorController.h
index e74a5def..73533e53 100644
--- a/obj/NiSingleInterpolatorController.h
+++ b/obj/NiSingleInterpolatorController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SINGLE_INTERPOLATOR_CONTROLLER_MEMBERS
diff --git a/obj/NiSkinData.cpp b/obj/NiSkinData.cpp
index 5f320b28..5e974913 100644
--- a/obj/NiSkinData.cpp
+++ b/obj/NiSkinData.cpp
@@ -29,6 +29,10 @@ void NiSkinData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & lin
 	NI_SKIN_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiSkinData::GetRefs() const {
+	NI_SKIN_DATA_GETREFS
+}
+
 const Type & NiSkinData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSkinData.h b/obj/NiSkinData.h
index 1b8872fb..4a0582c7 100644
--- a/obj/NiSkinData.h
+++ b/obj/NiSkinData.h
@@ -31,6 +31,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SKIN_DATA_MEMBERS
diff --git a/obj/NiSkinInstance.cpp b/obj/NiSkinInstance.cpp
index ebdf0975..d9ba95f0 100644
--- a/obj/NiSkinInstance.cpp
+++ b/obj/NiSkinInstance.cpp
@@ -31,6 +31,10 @@ void NiSkinInstance::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_SKIN_INSTANCE_FIXLINKS
 }
 
+list<NiObjectRef> NiSkinInstance::GetRefs() const {
+	NI_SKIN_INSTANCE_GETREFS
+}
+
 const Type & NiSkinInstance::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSkinInstance.h b/obj/NiSkinInstance.h
index 4af90b17..d91d5f8c 100644
--- a/obj/NiSkinInstance.h
+++ b/obj/NiSkinInstance.h
@@ -33,6 +33,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NiNode * NiSkinInstance::SkeletonRoot() const;
diff --git a/obj/NiSkinPartition.cpp b/obj/NiSkinPartition.cpp
index b724668b..1930a7aa 100644
--- a/obj/NiSkinPartition.cpp
+++ b/obj/NiSkinPartition.cpp
@@ -27,6 +27,10 @@ void NiSkinPartition::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_SKIN_PARTITION_FIXLINKS
 }
 
+list<NiObjectRef> NiSkinPartition::GetRefs() const {
+	NI_SKIN_PARTITION_GETREFS
+}
+
 const Type & NiSkinPartition::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSkinPartition.h b/obj/NiSkinPartition.h
index 4485d9be..cb713b1f 100644
--- a/obj/NiSkinPartition.h
+++ b/obj/NiSkinPartition.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SKIN_PARTITION_MEMBERS
diff --git a/obj/NiSourceTexture.cpp b/obj/NiSourceTexture.cpp
index 505e36a9..c6d00ad0 100644
--- a/obj/NiSourceTexture.cpp
+++ b/obj/NiSourceTexture.cpp
@@ -28,6 +28,10 @@ void NiSourceTexture::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_SOURCE_TEXTURE_FIXLINKS
 }
 
+list<NiObjectRef> NiSourceTexture::GetRefs() const {
+	NI_SOURCE_TEXTURE_GETREFS
+}
+
 const Type & NiSourceTexture::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSourceTexture.h b/obj/NiSourceTexture.h
index d66c614f..98844417 100644
--- a/obj/NiSourceTexture.h
+++ b/obj/NiSourceTexture.h
@@ -30,6 +30,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SOURCE_TEXTURE_MEMBERS
diff --git a/obj/NiSpecularProperty.cpp b/obj/NiSpecularProperty.cpp
index 11fe6135..4e97f24e 100644
--- a/obj/NiSpecularProperty.cpp
+++ b/obj/NiSpecularProperty.cpp
@@ -26,6 +26,10 @@ void NiSpecularProperty::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_SPECULAR_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiSpecularProperty::GetRefs() const {
+	NI_SPECULAR_PROPERTY_GETREFS
+}
+
 const Type & NiSpecularProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSpecularProperty.h b/obj/NiSpecularProperty.h
index 6678b148..7a4ada64 100644
--- a/obj/NiSpecularProperty.h
+++ b/obj/NiSpecularProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SPECULAR_PROPERTY_MEMBERS
diff --git a/obj/NiSphericalCollider.cpp b/obj/NiSphericalCollider.cpp
index b37bb056..8c2669ae 100644
--- a/obj/NiSphericalCollider.cpp
+++ b/obj/NiSphericalCollider.cpp
@@ -26,6 +26,10 @@ void NiSphericalCollider::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_SPHERICAL_COLLIDER_FIXLINKS
 }
 
+list<NiObjectRef> NiSphericalCollider::GetRefs() const {
+	NI_SPHERICAL_COLLIDER_GETREFS
+}
+
 const Type & NiSphericalCollider::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSphericalCollider.h b/obj/NiSphericalCollider.h
index 82c30f15..6b0b3bf8 100644
--- a/obj/NiSphericalCollider.h
+++ b/obj/NiSphericalCollider.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SPHERICAL_COLLIDER_MEMBERS
diff --git a/obj/NiSpotLight.cpp b/obj/NiSpotLight.cpp
index 7fa25402..4a42323f 100644
--- a/obj/NiSpotLight.cpp
+++ b/obj/NiSpotLight.cpp
@@ -26,6 +26,10 @@ void NiSpotLight::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_SPOT_LIGHT_FIXLINKS
 }
 
+list<NiObjectRef> NiSpotLight::GetRefs() const {
+	NI_SPOT_LIGHT_GETREFS
+}
+
 const Type & NiSpotLight::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiSpotLight.h b/obj/NiSpotLight.h
index cc92f50d..1338f430 100644
--- a/obj/NiSpotLight.h
+++ b/obj/NiSpotLight.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_SPOT_LIGHT_MEMBERS
diff --git a/obj/NiStencilProperty.cpp b/obj/NiStencilProperty.cpp
index bd75f0b2..07c16344 100644
--- a/obj/NiStencilProperty.cpp
+++ b/obj/NiStencilProperty.cpp
@@ -26,6 +26,10 @@ void NiStencilProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_STENCIL_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiStencilProperty::GetRefs() const {
+	NI_STENCIL_PROPERTY_GETREFS
+}
+
 const Type & NiStencilProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiStencilProperty.h b/obj/NiStencilProperty.h
index b0a9f5fe..82531fd6 100644
--- a/obj/NiStencilProperty.h
+++ b/obj/NiStencilProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_STENCIL_PROPERTY_MEMBERS
diff --git a/obj/NiStringExtraData.cpp b/obj/NiStringExtraData.cpp
index 53f4cbe8..f7c1b8e7 100644
--- a/obj/NiStringExtraData.cpp
+++ b/obj/NiStringExtraData.cpp
@@ -26,6 +26,10 @@ void NiStringExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_STRING_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiStringExtraData::GetRefs() const {
+	NI_STRING_EXTRA_DATA_GETREFS
+}
+
 const Type & NiStringExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiStringExtraData.h b/obj/NiStringExtraData.h
index 3975882d..a569b64f 100644
--- a/obj/NiStringExtraData.h
+++ b/obj/NiStringExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	uint BytesRemaining() const;
diff --git a/obj/NiStringPalette.cpp b/obj/NiStringPalette.cpp
index b0277a50..a5135369 100644
--- a/obj/NiStringPalette.cpp
+++ b/obj/NiStringPalette.cpp
@@ -27,6 +27,10 @@ void NiStringPalette::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_STRING_PALETTE_FIXLINKS
 }
 
+list<NiObjectRef> NiStringPalette::GetRefs() const {
+	NI_STRING_PALETTE_GETREFS
+}
+
 const Type & NiStringPalette::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiStringPalette.h b/obj/NiStringPalette.h
index b825da78..e416fdd8 100644
--- a/obj/NiStringPalette.h
+++ b/obj/NiStringPalette.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_STRING_PALETTE_MEMBERS
diff --git a/obj/NiStringsExtraData.cpp b/obj/NiStringsExtraData.cpp
index 20b67663..88624246 100644
--- a/obj/NiStringsExtraData.cpp
+++ b/obj/NiStringsExtraData.cpp
@@ -26,6 +26,10 @@ void NiStringsExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_STRINGS_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiStringsExtraData::GetRefs() const {
+	NI_STRINGS_EXTRA_DATA_GETREFS
+}
+
 const Type & NiStringsExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiStringsExtraData.h b/obj/NiStringsExtraData.h
index 40eb2972..afbf8067 100644
--- a/obj/NiStringsExtraData.h
+++ b/obj/NiStringsExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_STRINGS_EXTRA_DATA_MEMBERS
diff --git a/obj/NiTextKeyExtraData.cpp b/obj/NiTextKeyExtraData.cpp
index f30195ac..21ad3d15 100644
--- a/obj/NiTextKeyExtraData.cpp
+++ b/obj/NiTextKeyExtraData.cpp
@@ -26,6 +26,10 @@ void NiTextKeyExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_TEXT_KEY_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiTextKeyExtraData::GetRefs() const {
+	NI_TEXT_KEY_EXTRA_DATA_GETREFS
+}
+
 const Type & NiTextKeyExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTextKeyExtraData.h b/obj/NiTextKeyExtraData.h
index 29c45f84..c42e1f51 100644
--- a/obj/NiTextKeyExtraData.h
+++ b/obj/NiTextKeyExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TEXT_KEY_EXTRA_DATA_MEMBERS
diff --git a/obj/NiTextureEffect.cpp b/obj/NiTextureEffect.cpp
index 41778f72..078336e3 100644
--- a/obj/NiTextureEffect.cpp
+++ b/obj/NiTextureEffect.cpp
@@ -27,6 +27,10 @@ void NiTextureEffect::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_TEXTURE_EFFECT_FIXLINKS
 }
 
+list<NiObjectRef> NiTextureEffect::GetRefs() const {
+	NI_TEXTURE_EFFECT_GETREFS
+}
+
 const Type & NiTextureEffect::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTextureEffect.h b/obj/NiTextureEffect.h
index dbc21bf6..848e3b0e 100644
--- a/obj/NiTextureEffect.h
+++ b/obj/NiTextureEffect.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TEXTURE_EFFECT_MEMBERS
diff --git a/obj/NiTextureTransformController.cpp b/obj/NiTextureTransformController.cpp
index 6980eda0..1fb1495f 100644
--- a/obj/NiTextureTransformController.cpp
+++ b/obj/NiTextureTransformController.cpp
@@ -27,6 +27,10 @@ void NiTextureTransformController::FixLinks( const vector<NiObjectRef> & objects
 	NI_TEXTURE_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiTextureTransformController::GetRefs() const {
+	NI_TEXTURE_TRANSFORM_CONTROLLER_GETREFS
+}
+
 const Type & NiTextureTransformController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTextureTransformController.h b/obj/NiTextureTransformController.h
index 04970ffe..0f3fd674 100644
--- a/obj/NiTextureTransformController.h
+++ b/obj/NiTextureTransformController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TEXTURE_TRANSFORM_CONTROLLER_MEMBERS
diff --git a/obj/NiTexturingProperty.cpp b/obj/NiTexturingProperty.cpp
index bdc93e04..2189f5f7 100644
--- a/obj/NiTexturingProperty.cpp
+++ b/obj/NiTexturingProperty.cpp
@@ -45,6 +45,10 @@ void NiTexturingProperty::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_TEXTURING_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiTexturingProperty::GetRefs() const {
+	NI_TEXTURING_PROPERTY_GETREFS
+}
+
 const Type & NiTexturingProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTexturingProperty.h b/obj/NiTexturingProperty.h
index f9560eb2..0b553ee3 100644
--- a/obj/NiTexturingProperty.h
+++ b/obj/NiTexturingProperty.h
@@ -28,6 +28,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TEXTURING_PROPERTY_MEMBERS
diff --git a/obj/NiTimeController.cpp b/obj/NiTimeController.cpp
index 486c295c..78afb8e2 100644
--- a/obj/NiTimeController.cpp
+++ b/obj/NiTimeController.cpp
@@ -27,6 +27,10 @@ void NiTimeController::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_TIME_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiTimeController::GetRefs() const {
+	NI_TIME_CONTROLLER_GETREFS
+}
+
 const Type & NiTimeController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTimeController.h b/obj/NiTimeController.h
index 452ffab5..91c8ba2b 100644
--- a/obj/NiTimeController.h
+++ b/obj/NiTimeController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TIME_CONTROLLER_MEMBERS
diff --git a/obj/NiTransformController.cpp b/obj/NiTransformController.cpp
index 28d2b0af..e9480298 100644
--- a/obj/NiTransformController.cpp
+++ b/obj/NiTransformController.cpp
@@ -26,6 +26,10 @@ void NiTransformController::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_TRANSFORM_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiTransformController::GetRefs() const {
+	NI_TRANSFORM_CONTROLLER_GETREFS
+}
+
 const Type & NiTransformController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTransformController.h b/obj/NiTransformController.h
index 41e62d75..77a01106 100644
--- a/obj/NiTransformController.h
+++ b/obj/NiTransformController.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRANSFORM_CONTROLLER_MEMBERS
diff --git a/obj/NiTransformData.cpp b/obj/NiTransformData.cpp
index f940e57f..1f5ae04a 100644
--- a/obj/NiTransformData.cpp
+++ b/obj/NiTransformData.cpp
@@ -26,6 +26,10 @@ void NiTransformData::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_TRANSFORM_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiTransformData::GetRefs() const {
+	NI_TRANSFORM_DATA_GETREFS
+}
+
 const Type & NiTransformData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTransformData.h b/obj/NiTransformData.h
index cfb496e8..e52727de 100644
--- a/obj/NiTransformData.h
+++ b/obj/NiTransformData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRANSFORM_DATA_MEMBERS
diff --git a/obj/NiTransformInterpolator.cpp b/obj/NiTransformInterpolator.cpp
index b302b89b..90fc5fa6 100644
--- a/obj/NiTransformInterpolator.cpp
+++ b/obj/NiTransformInterpolator.cpp
@@ -27,6 +27,10 @@ void NiTransformInterpolator::FixLinks( const vector<NiObjectRef> & objects, lis
 	NI_TRANSFORM_INTERPOLATOR_FIXLINKS
 }
 
+list<NiObjectRef> NiTransformInterpolator::GetRefs() const {
+	NI_TRANSFORM_INTERPOLATOR_GETREFS
+}
+
 const Type & NiTransformInterpolator::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTransformInterpolator.h b/obj/NiTransformInterpolator.h
index 67c2344a..fd3d9dcd 100644
--- a/obj/NiTransformInterpolator.h
+++ b/obj/NiTransformInterpolator.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRANSFORM_INTERPOLATOR_MEMBERS
diff --git a/obj/NiTriBasedGeom.cpp b/obj/NiTriBasedGeom.cpp
index e12d35d4..2fc14504 100644
--- a/obj/NiTriBasedGeom.cpp
+++ b/obj/NiTriBasedGeom.cpp
@@ -29,6 +29,10 @@ void NiTriBasedGeom::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_TRI_BASED_GEOM_FIXLINKS
 }
 
+list<NiObjectRef> NiTriBasedGeom::GetRefs() const {
+	NI_TRI_BASED_GEOM_GETREFS
+}
+
 const Type & NiTriBasedGeom::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTriBasedGeom.h b/obj/NiTriBasedGeom.h
index bd3878f9..5da9b657 100644
--- a/obj/NiTriBasedGeom.h
+++ b/obj/NiTriBasedGeom.h
@@ -31,6 +31,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRI_BASED_GEOM_MEMBERS
diff --git a/obj/NiTriBasedGeomData.cpp b/obj/NiTriBasedGeomData.cpp
index 3efae487..1a00526a 100644
--- a/obj/NiTriBasedGeomData.cpp
+++ b/obj/NiTriBasedGeomData.cpp
@@ -27,6 +27,10 @@ void NiTriBasedGeomData::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	NI_TRI_BASED_GEOM_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiTriBasedGeomData::GetRefs() const {
+	NI_TRI_BASED_GEOM_DATA_GETREFS
+}
+
 const Type & NiTriBasedGeomData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTriBasedGeomData.h b/obj/NiTriBasedGeomData.h
index d29494bd..0258ee6c 100644
--- a/obj/NiTriBasedGeomData.h
+++ b/obj/NiTriBasedGeomData.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	Vector3 Center() const;
diff --git a/obj/NiTriShape.cpp b/obj/NiTriShape.cpp
index f7c0bddb..967e9228 100644
--- a/obj/NiTriShape.cpp
+++ b/obj/NiTriShape.cpp
@@ -26,6 +26,10 @@ void NiTriShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & lin
 	NI_TRI_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> NiTriShape::GetRefs() const {
+	NI_TRI_SHAPE_GETREFS
+}
+
 const Type & NiTriShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTriShape.h b/obj/NiTriShape.h
index 6286e1ce..02ffdb24 100644
--- a/obj/NiTriShape.h
+++ b/obj/NiTriShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRI_SHAPE_MEMBERS
diff --git a/obj/NiTriShapeData.cpp b/obj/NiTriShapeData.cpp
index b37891be..ea669528 100644
--- a/obj/NiTriShapeData.cpp
+++ b/obj/NiTriShapeData.cpp
@@ -27,6 +27,10 @@ void NiTriShapeData::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_TRI_SHAPE_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiTriShapeData::GetRefs() const {
+	NI_TRI_SHAPE_DATA_GETREFS
+}
+
 const Type & NiTriShapeData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTriShapeData.h b/obj/NiTriShapeData.h
index 9facc177..2a4e765f 100644
--- a/obj/NiTriShapeData.h
+++ b/obj/NiTriShapeData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRI_SHAPE_DATA_MEMBERS
diff --git a/obj/NiTriStrips.cpp b/obj/NiTriStrips.cpp
index cdd6c967..47e3df18 100644
--- a/obj/NiTriStrips.cpp
+++ b/obj/NiTriStrips.cpp
@@ -26,6 +26,10 @@ void NiTriStrips::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	NI_TRI_STRIPS_FIXLINKS
 }
 
+list<NiObjectRef> NiTriStrips::GetRefs() const {
+	NI_TRI_STRIPS_GETREFS
+}
+
 const Type & NiTriStrips::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTriStrips.h b/obj/NiTriStrips.h
index 9f2b7918..ceb3abc1 100644
--- a/obj/NiTriStrips.h
+++ b/obj/NiTriStrips.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRI_STRIPS_MEMBERS
diff --git a/obj/NiTriStripsData.cpp b/obj/NiTriStripsData.cpp
index 744c4d4f..8bf4024b 100644
--- a/obj/NiTriStripsData.cpp
+++ b/obj/NiTriStripsData.cpp
@@ -26,6 +26,10 @@ void NiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_TRI_STRIPS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiTriStripsData::GetRefs() const {
+	NI_TRI_STRIPS_DATA_GETREFS
+}
+
 const Type & NiTriStripsData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiTriStripsData.h b/obj/NiTriStripsData.h
index 114e83f1..1d6939cf 100644
--- a/obj/NiTriStripsData.h
+++ b/obj/NiTriStripsData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_TRI_STRIPS_DATA_MEMBERS
diff --git a/obj/NiUVController.cpp b/obj/NiUVController.cpp
index de739390..ef6ba346 100644
--- a/obj/NiUVController.cpp
+++ b/obj/NiUVController.cpp
@@ -27,6 +27,10 @@ void NiUVController::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	NI_U_V_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiUVController::GetRefs() const {
+	NI_U_V_CONTROLLER_GETREFS
+}
+
 const Type & NiUVController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiUVController.h b/obj/NiUVController.h
index 150c13ac..36ea5cb9 100644
--- a/obj/NiUVController.h
+++ b/obj/NiUVController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_U_V_CONTROLLER_MEMBERS
diff --git a/obj/NiUVData.cpp b/obj/NiUVData.cpp
index 4de891ee..d715137d 100644
--- a/obj/NiUVData.cpp
+++ b/obj/NiUVData.cpp
@@ -27,6 +27,10 @@ void NiUVData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_
 	NI_U_V_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiUVData::GetRefs() const {
+	NI_U_V_DATA_GETREFS
+}
+
 const Type & NiUVData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiUVData.h b/obj/NiUVData.h
index aaaeae6c..177f6e53 100644
--- a/obj/NiUVData.h
+++ b/obj/NiUVData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_U_V_DATA_MEMBERS
diff --git a/obj/NiVectorExtraData.cpp b/obj/NiVectorExtraData.cpp
index 9e8fa4a9..d809fad1 100644
--- a/obj/NiVectorExtraData.cpp
+++ b/obj/NiVectorExtraData.cpp
@@ -26,6 +26,10 @@ void NiVectorExtraData::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_VECTOR_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiVectorExtraData::GetRefs() const {
+	NI_VECTOR_EXTRA_DATA_GETREFS
+}
+
 const Type & NiVectorExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiVectorExtraData.h b/obj/NiVectorExtraData.h
index 51a04c72..f51c0516 100644
--- a/obj/NiVectorExtraData.h
+++ b/obj/NiVectorExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_VECTOR_EXTRA_DATA_MEMBERS
diff --git a/obj/NiVertWeightsExtraData.cpp b/obj/NiVertWeightsExtraData.cpp
index 348a3fbe..ff833614 100644
--- a/obj/NiVertWeightsExtraData.cpp
+++ b/obj/NiVertWeightsExtraData.cpp
@@ -26,6 +26,10 @@ void NiVertWeightsExtraData::FixLinks( const vector<NiObjectRef> & objects, list
 	NI_VERT_WEIGHTS_EXTRA_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiVertWeightsExtraData::GetRefs() const {
+	NI_VERT_WEIGHTS_EXTRA_DATA_GETREFS
+}
+
 const Type & NiVertWeightsExtraData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiVertWeightsExtraData.h b/obj/NiVertWeightsExtraData.h
index 3ddab2be..33862fc3 100644
--- a/obj/NiVertWeightsExtraData.h
+++ b/obj/NiVertWeightsExtraData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_VERT_WEIGHTS_EXTRA_DATA_MEMBERS
diff --git a/obj/NiVertexColorProperty.cpp b/obj/NiVertexColorProperty.cpp
index f28d7b37..e8c43e50 100644
--- a/obj/NiVertexColorProperty.cpp
+++ b/obj/NiVertexColorProperty.cpp
@@ -26,6 +26,10 @@ void NiVertexColorProperty::FixLinks( const vector<NiObjectRef> & objects, list<
 	NI_VERTEX_COLOR_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiVertexColorProperty::GetRefs() const {
+	NI_VERTEX_COLOR_PROPERTY_GETREFS
+}
+
 const Type & NiVertexColorProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiVertexColorProperty.h b/obj/NiVertexColorProperty.h
index fb2e2206..e040f71e 100644
--- a/obj/NiVertexColorProperty.h
+++ b/obj/NiVertexColorProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_VERTEX_COLOR_PROPERTY_MEMBERS
diff --git a/obj/NiVisController.cpp b/obj/NiVisController.cpp
index 5d92157f..0a03fc15 100644
--- a/obj/NiVisController.cpp
+++ b/obj/NiVisController.cpp
@@ -27,6 +27,10 @@ void NiVisController::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	NI_VIS_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> NiVisController::GetRefs() const {
+	NI_VIS_CONTROLLER_GETREFS
+}
+
 const Type & NiVisController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiVisController.h b/obj/NiVisController.h
index 6e8a28dc..89ce79a2 100644
--- a/obj/NiVisController.h
+++ b/obj/NiVisController.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_VIS_CONTROLLER_MEMBERS
diff --git a/obj/NiVisData.cpp b/obj/NiVisData.cpp
index f9143da8..1eaa9f55 100644
--- a/obj/NiVisData.cpp
+++ b/obj/NiVisData.cpp
@@ -26,6 +26,10 @@ void NiVisData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	NI_VIS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> NiVisData::GetRefs() const {
+	NI_VIS_DATA_GETREFS
+}
+
 const Type & NiVisData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiVisData.h b/obj/NiVisData.h
index 3cd603cf..c109d0d0 100644
--- a/obj/NiVisData.h
+++ b/obj/NiVisData.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_VIS_DATA_MEMBERS
diff --git a/obj/NiWireframeProperty.cpp b/obj/NiWireframeProperty.cpp
index ceadb0b8..531db8e9 100644
--- a/obj/NiWireframeProperty.cpp
+++ b/obj/NiWireframeProperty.cpp
@@ -26,6 +26,10 @@ void NiWireframeProperty::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	NI_WIREFRAME_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiWireframeProperty::GetRefs() const {
+	NI_WIREFRAME_PROPERTY_GETREFS
+}
+
 const Type & NiWireframeProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiWireframeProperty.h b/obj/NiWireframeProperty.h
index a3363bec..63820f76 100644
--- a/obj/NiWireframeProperty.h
+++ b/obj/NiWireframeProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_WIREFRAME_PROPERTY_MEMBERS
diff --git a/obj/NiZBufferProperty.cpp b/obj/NiZBufferProperty.cpp
index 90329fed..de874176 100644
--- a/obj/NiZBufferProperty.cpp
+++ b/obj/NiZBufferProperty.cpp
@@ -26,6 +26,10 @@ void NiZBufferProperty::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	NI_Z_BUFFER_PROPERTY_FIXLINKS
 }
 
+list<NiObjectRef> NiZBufferProperty::GetRefs() const {
+	NI_Z_BUFFER_PROPERTY_GETREFS
+}
+
 const Type & NiZBufferProperty::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiZBufferProperty.h b/obj/NiZBufferProperty.h
index d9557eb9..e0c17b33 100644
--- a/obj/NiZBufferProperty.h
+++ b/obj/NiZBufferProperty.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	NI_Z_BUFFER_PROPERTY_MEMBERS
diff --git a/obj/RootCollisionNode.cpp b/obj/RootCollisionNode.cpp
index e540e260..76512175 100644
--- a/obj/RootCollisionNode.cpp
+++ b/obj/RootCollisionNode.cpp
@@ -26,6 +26,10 @@ void RootCollisionNode::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	ROOT_COLLISION_NODE_FIXLINKS
 }
 
+list<NiObjectRef> RootCollisionNode::GetRefs() const {
+	ROOT_COLLISION_NODE_GETREFS
+}
+
 const Type & RootCollisionNode::GetType() const {
 	return TYPE;
 };
diff --git a/obj/RootCollisionNode.h b/obj/RootCollisionNode.h
index 9d4aade8..e410e17c 100644
--- a/obj/RootCollisionNode.h
+++ b/obj/RootCollisionNode.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	ROOT_COLLISION_NODE_MEMBERS
diff --git a/obj/bhkBlendCollisionObject.cpp b/obj/bhkBlendCollisionObject.cpp
index ae9e0d3a..fcbbeac3 100644
--- a/obj/bhkBlendCollisionObject.cpp
+++ b/obj/bhkBlendCollisionObject.cpp
@@ -26,6 +26,10 @@ void bhkBlendCollisionObject::FixLinks( const vector<NiObjectRef> & objects, lis
 	BHK_BLEND_COLLISION_OBJECT_FIXLINKS
 }
 
+list<NiObjectRef> bhkBlendCollisionObject::GetRefs() const {
+	BHK_BLEND_COLLISION_OBJECT_GETREFS
+}
+
 const Type & bhkBlendCollisionObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkBlendCollisionObject.h b/obj/bhkBlendCollisionObject.h
index f175069a..1489e3dc 100644
--- a/obj/bhkBlendCollisionObject.h
+++ b/obj/bhkBlendCollisionObject.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_BLEND_COLLISION_OBJECT_MEMBERS
diff --git a/obj/bhkBlendController.cpp b/obj/bhkBlendController.cpp
index cf99e4d7..c7ab9031 100644
--- a/obj/bhkBlendController.cpp
+++ b/obj/bhkBlendController.cpp
@@ -26,6 +26,10 @@ void bhkBlendController::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	BHK_BLEND_CONTROLLER_FIXLINKS
 }
 
+list<NiObjectRef> bhkBlendController::GetRefs() const {
+	BHK_BLEND_CONTROLLER_GETREFS
+}
+
 const Type & bhkBlendController::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkBlendController.h b/obj/bhkBlendController.h
index 31d36993..c20353b5 100644
--- a/obj/bhkBlendController.h
+++ b/obj/bhkBlendController.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_BLEND_CONTROLLER_MEMBERS
diff --git a/obj/bhkBoxShape.cpp b/obj/bhkBoxShape.cpp
index 1bd4145e..7886c33c 100644
--- a/obj/bhkBoxShape.cpp
+++ b/obj/bhkBoxShape.cpp
@@ -26,6 +26,10 @@ void bhkBoxShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & li
 	BHK_BOX_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkBoxShape::GetRefs() const {
+	BHK_BOX_SHAPE_GETREFS
+}
+
 const Type & bhkBoxShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkBoxShape.h b/obj/bhkBoxShape.h
index 55c2e1b6..0a184f04 100644
--- a/obj/bhkBoxShape.h
+++ b/obj/bhkBoxShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_BOX_SHAPE_MEMBERS
diff --git a/obj/bhkCapsuleShape.cpp b/obj/bhkCapsuleShape.cpp
index 395e799b..d4daf70d 100644
--- a/obj/bhkCapsuleShape.cpp
+++ b/obj/bhkCapsuleShape.cpp
@@ -26,6 +26,10 @@ void bhkCapsuleShape::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	BHK_CAPSULE_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkCapsuleShape::GetRefs() const {
+	BHK_CAPSULE_SHAPE_GETREFS
+}
+
 const Type & bhkCapsuleShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkCapsuleShape.h b/obj/bhkCapsuleShape.h
index 31ba3bed..fa021a2b 100644
--- a/obj/bhkCapsuleShape.h
+++ b/obj/bhkCapsuleShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_CAPSULE_SHAPE_MEMBERS
diff --git a/obj/bhkCollisionObject.cpp b/obj/bhkCollisionObject.cpp
index c9fc7618..50c98505 100644
--- a/obj/bhkCollisionObject.cpp
+++ b/obj/bhkCollisionObject.cpp
@@ -26,6 +26,10 @@ void bhkCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	BHK_COLLISION_OBJECT_FIXLINKS
 }
 
+list<NiObjectRef> bhkCollisionObject::GetRefs() const {
+	BHK_COLLISION_OBJECT_GETREFS
+}
+
 const Type & bhkCollisionObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkCollisionObject.h b/obj/bhkCollisionObject.h
index d75a148e..0d983700 100644
--- a/obj/bhkCollisionObject.h
+++ b/obj/bhkCollisionObject.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_COLLISION_OBJECT_MEMBERS
diff --git a/obj/bhkConvexShape.cpp b/obj/bhkConvexShape.cpp
index ab008280..84ca9860 100644
--- a/obj/bhkConvexShape.cpp
+++ b/obj/bhkConvexShape.cpp
@@ -26,6 +26,10 @@ void bhkConvexShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	BHK_CONVEX_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkConvexShape::GetRefs() const {
+	BHK_CONVEX_SHAPE_GETREFS
+}
+
 const Type & bhkConvexShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkConvexShape.h b/obj/bhkConvexShape.h
index 8b3bcf6f..53bad3d2 100644
--- a/obj/bhkConvexShape.h
+++ b/obj/bhkConvexShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_CONVEX_SHAPE_MEMBERS
diff --git a/obj/bhkConvexTransformShape.cpp b/obj/bhkConvexTransformShape.cpp
index 7f59985f..f92ef629 100644
--- a/obj/bhkConvexTransformShape.cpp
+++ b/obj/bhkConvexTransformShape.cpp
@@ -26,6 +26,10 @@ void bhkConvexTransformShape::FixLinks( const vector<NiObjectRef> & objects, lis
 	BHK_CONVEX_TRANSFORM_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkConvexTransformShape::GetRefs() const {
+	BHK_CONVEX_TRANSFORM_SHAPE_GETREFS
+}
+
 const Type & bhkConvexTransformShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkConvexTransformShape.h b/obj/bhkConvexTransformShape.h
index a7095af7..ae45a970 100644
--- a/obj/bhkConvexTransformShape.h
+++ b/obj/bhkConvexTransformShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_CONVEX_TRANSFORM_SHAPE_MEMBERS
diff --git a/obj/bhkConvexVerticesShape.cpp b/obj/bhkConvexVerticesShape.cpp
index 05f45050..d97b9ba4 100644
--- a/obj/bhkConvexVerticesShape.cpp
+++ b/obj/bhkConvexVerticesShape.cpp
@@ -26,6 +26,10 @@ void bhkConvexVerticesShape::FixLinks( const vector<NiObjectRef> & objects, list
 	BHK_CONVEX_VERTICES_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkConvexVerticesShape::GetRefs() const {
+	BHK_CONVEX_VERTICES_SHAPE_GETREFS
+}
+
 const Type & bhkConvexVerticesShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkConvexVerticesShape.h b/obj/bhkConvexVerticesShape.h
index 3b87c359..cba132f2 100644
--- a/obj/bhkConvexVerticesShape.h
+++ b/obj/bhkConvexVerticesShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_CONVEX_VERTICES_SHAPE_MEMBERS
diff --git a/obj/bhkEntity.cpp b/obj/bhkEntity.cpp
index 65511234..916e4213 100644
--- a/obj/bhkEntity.cpp
+++ b/obj/bhkEntity.cpp
@@ -27,6 +27,10 @@ void bhkEntity::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link
 	BHK_ENTITY_FIXLINKS
 }
 
+list<NiObjectRef> bhkEntity::GetRefs() const {
+	BHK_ENTITY_GETREFS
+}
+
 const Type & bhkEntity::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkEntity.h b/obj/bhkEntity.h
index b866af90..ab436980 100644
--- a/obj/bhkEntity.h
+++ b/obj/bhkEntity.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_ENTITY_MEMBERS
diff --git a/obj/bhkHingeConstraint.cpp b/obj/bhkHingeConstraint.cpp
index 2e1c0251..c640b6c4 100644
--- a/obj/bhkHingeConstraint.cpp
+++ b/obj/bhkHingeConstraint.cpp
@@ -26,6 +26,10 @@ void bhkHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	BHK_HINGE_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> bhkHingeConstraint::GetRefs() const {
+	BHK_HINGE_CONSTRAINT_GETREFS
+}
+
 const Type & bhkHingeConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkHingeConstraint.h b/obj/bhkHingeConstraint.h
index f3db970d..f191702c 100644
--- a/obj/bhkHingeConstraint.h
+++ b/obj/bhkHingeConstraint.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_HINGE_CONSTRAINT_MEMBERS
diff --git a/obj/bhkLimitedHingeConstraint.cpp b/obj/bhkLimitedHingeConstraint.cpp
index 23b6122c..4b07b959 100644
--- a/obj/bhkLimitedHingeConstraint.cpp
+++ b/obj/bhkLimitedHingeConstraint.cpp
@@ -27,6 +27,10 @@ void bhkLimitedHingeConstraint::FixLinks( const vector<NiObjectRef> & objects, l
 	BHK_LIMITED_HINGE_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> bhkLimitedHingeConstraint::GetRefs() const {
+	BHK_LIMITED_HINGE_CONSTRAINT_GETREFS
+}
+
 const Type & bhkLimitedHingeConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkLimitedHingeConstraint.h b/obj/bhkLimitedHingeConstraint.h
index 6379fa75..92558b9a 100644
--- a/obj/bhkLimitedHingeConstraint.h
+++ b/obj/bhkLimitedHingeConstraint.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_LIMITED_HINGE_CONSTRAINT_MEMBERS
diff --git a/obj/bhkListShape.cpp b/obj/bhkListShape.cpp
index 5ff2602c..3f1d443b 100644
--- a/obj/bhkListShape.cpp
+++ b/obj/bhkListShape.cpp
@@ -27,6 +27,10 @@ void bhkListShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & l
 	BHK_LIST_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkListShape::GetRefs() const {
+	BHK_LIST_SHAPE_GETREFS
+}
+
 const Type & bhkListShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkListShape.h b/obj/bhkListShape.h
index 10519ec8..8f0438ef 100644
--- a/obj/bhkListShape.h
+++ b/obj/bhkListShape.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_LIST_SHAPE_MEMBERS
diff --git a/obj/bhkMalleableConstraint.cpp b/obj/bhkMalleableConstraint.cpp
index c5918cf7..f1ac2bfb 100644
--- a/obj/bhkMalleableConstraint.cpp
+++ b/obj/bhkMalleableConstraint.cpp
@@ -29,6 +29,10 @@ void bhkMalleableConstraint::FixLinks( const vector<NiObjectRef> & objects, list
 	BHK_MALLEABLE_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> bhkMalleableConstraint::GetRefs() const {
+	BHK_MALLEABLE_CONSTRAINT_GETREFS
+}
+
 const Type & bhkMalleableConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkMalleableConstraint.h b/obj/bhkMalleableConstraint.h
index c0407a11..6b766a89 100644
--- a/obj/bhkMalleableConstraint.h
+++ b/obj/bhkMalleableConstraint.h
@@ -32,6 +32,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_MALLEABLE_CONSTRAINT_MEMBERS
diff --git a/obj/bhkMoppBvTreeShape.cpp b/obj/bhkMoppBvTreeShape.cpp
index 49d19a97..e6f1756a 100644
--- a/obj/bhkMoppBvTreeShape.cpp
+++ b/obj/bhkMoppBvTreeShape.cpp
@@ -27,6 +27,10 @@ void bhkMoppBvTreeShape::FixLinks( const vector<NiObjectRef> & objects, list<uin
 	BHK_MOPP_BV_TREE_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkMoppBvTreeShape::GetRefs() const {
+	BHK_MOPP_BV_TREE_SHAPE_GETREFS
+}
+
 const Type & bhkMoppBvTreeShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkMoppBvTreeShape.h b/obj/bhkMoppBvTreeShape.h
index 26ba5abb..323300be 100644
--- a/obj/bhkMoppBvTreeShape.h
+++ b/obj/bhkMoppBvTreeShape.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_MOPP_BV_TREE_SHAPE_MEMBERS
diff --git a/obj/bhkMultiSphereShape.cpp b/obj/bhkMultiSphereShape.cpp
index 11fff599..a54ad1d2 100644
--- a/obj/bhkMultiSphereShape.cpp
+++ b/obj/bhkMultiSphereShape.cpp
@@ -26,6 +26,10 @@ void bhkMultiSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	BHK_MULTI_SPHERE_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkMultiSphereShape::GetRefs() const {
+	BHK_MULTI_SPHERE_SHAPE_GETREFS
+}
+
 const Type & bhkMultiSphereShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkMultiSphereShape.h b/obj/bhkMultiSphereShape.h
index c1dcc203..e58f5fb3 100644
--- a/obj/bhkMultiSphereShape.h
+++ b/obj/bhkMultiSphereShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_MULTI_SPHERE_SHAPE_MEMBERS
diff --git a/obj/bhkNiTriStripsShape.cpp b/obj/bhkNiTriStripsShape.cpp
index aac32116..608b1491 100644
--- a/obj/bhkNiTriStripsShape.cpp
+++ b/obj/bhkNiTriStripsShape.cpp
@@ -27,6 +27,10 @@ void bhkNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, list<ui
 	BHK_NI_TRI_STRIPS_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkNiTriStripsShape::GetRefs() const {
+	BHK_NI_TRI_STRIPS_SHAPE_GETREFS
+}
+
 const Type & bhkNiTriStripsShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkNiTriStripsShape.h b/obj/bhkNiTriStripsShape.h
index 5688e6a9..fe480cae 100644
--- a/obj/bhkNiTriStripsShape.h
+++ b/obj/bhkNiTriStripsShape.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_NI_TRI_STRIPS_SHAPE_MEMBERS
diff --git a/obj/bhkPackedNiTriStripsShape.cpp b/obj/bhkPackedNiTriStripsShape.cpp
index 15e19024..67f0968a 100644
--- a/obj/bhkPackedNiTriStripsShape.cpp
+++ b/obj/bhkPackedNiTriStripsShape.cpp
@@ -27,6 +27,10 @@ void bhkPackedNiTriStripsShape::FixLinks( const vector<NiObjectRef> & objects, l
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkPackedNiTriStripsShape::GetRefs() const {
+	BHK_PACKED_NI_TRI_STRIPS_SHAPE_GETREFS
+}
+
 const Type & bhkPackedNiTriStripsShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkPackedNiTriStripsShape.h b/obj/bhkPackedNiTriStripsShape.h
index 896ad9ff..b1643b60 100644
--- a/obj/bhkPackedNiTriStripsShape.h
+++ b/obj/bhkPackedNiTriStripsShape.h
@@ -29,6 +29,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_PACKED_NI_TRI_STRIPS_SHAPE_MEMBERS
diff --git a/obj/bhkPrismaticConstraint.cpp b/obj/bhkPrismaticConstraint.cpp
index a885d13d..a43573a7 100644
--- a/obj/bhkPrismaticConstraint.cpp
+++ b/obj/bhkPrismaticConstraint.cpp
@@ -26,6 +26,10 @@ void bhkPrismaticConstraint::FixLinks( const vector<NiObjectRef> & objects, list
 	BHK_PRISMATIC_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> bhkPrismaticConstraint::GetRefs() const {
+	BHK_PRISMATIC_CONSTRAINT_GETREFS
+}
+
 const Type & bhkPrismaticConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkPrismaticConstraint.h b/obj/bhkPrismaticConstraint.h
index 2ac540ad..01801a06 100644
--- a/obj/bhkPrismaticConstraint.h
+++ b/obj/bhkPrismaticConstraint.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_PRISMATIC_CONSTRAINT_MEMBERS
diff --git a/obj/bhkRagdollConstraint.cpp b/obj/bhkRagdollConstraint.cpp
index 77496b9e..20f591c6 100644
--- a/obj/bhkRagdollConstraint.cpp
+++ b/obj/bhkRagdollConstraint.cpp
@@ -26,6 +26,10 @@ void bhkRagdollConstraint::FixLinks( const vector<NiObjectRef> & objects, list<u
 	BHK_RAGDOLL_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> bhkRagdollConstraint::GetRefs() const {
+	BHK_RAGDOLL_CONSTRAINT_GETREFS
+}
+
 const Type & bhkRagdollConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkRagdollConstraint.h b/obj/bhkRagdollConstraint.h
index 5a4a0104..e53e5c7d 100644
--- a/obj/bhkRagdollConstraint.h
+++ b/obj/bhkRagdollConstraint.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_RAGDOLL_CONSTRAINT_MEMBERS
diff --git a/obj/bhkRefObject.cpp b/obj/bhkRefObject.cpp
index 9c5a4372..9f463576 100644
--- a/obj/bhkRefObject.cpp
+++ b/obj/bhkRefObject.cpp
@@ -26,6 +26,10 @@ void bhkRefObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> & l
 	BHK_REF_OBJECT_FIXLINKS
 }
 
+list<NiObjectRef> bhkRefObject::GetRefs() const {
+	BHK_REF_OBJECT_GETREFS
+}
+
 const Type & bhkRefObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkRefObject.h b/obj/bhkRefObject.h
index 6f70902d..aebce51d 100644
--- a/obj/bhkRefObject.h
+++ b/obj/bhkRefObject.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_REF_OBJECT_MEMBERS
diff --git a/obj/bhkRigidBody.cpp b/obj/bhkRigidBody.cpp
index a7646431..227a9109 100644
--- a/obj/bhkRigidBody.cpp
+++ b/obj/bhkRigidBody.cpp
@@ -28,6 +28,10 @@ void bhkRigidBody::FixLinks( const vector<NiObjectRef> & objects, list<uint> & l
 	BHK_RIGID_BODY_FIXLINKS
 }
 
+list<NiObjectRef> bhkRigidBody::GetRefs() const {
+	BHK_RIGID_BODY_GETREFS
+}
+
 const Type & bhkRigidBody::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkRigidBody.h b/obj/bhkRigidBody.h
index e18b35ba..ca3e92bb 100644
--- a/obj/bhkRigidBody.h
+++ b/obj/bhkRigidBody.h
@@ -31,6 +31,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_RIGID_BODY_MEMBERS
diff --git a/obj/bhkRigidBodyT.cpp b/obj/bhkRigidBodyT.cpp
index e3078b81..19c702dd 100644
--- a/obj/bhkRigidBodyT.cpp
+++ b/obj/bhkRigidBodyT.cpp
@@ -26,6 +26,10 @@ void bhkRigidBodyT::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	BHK_RIGID_BODY_T_FIXLINKS
 }
 
+list<NiObjectRef> bhkRigidBodyT::GetRefs() const {
+	BHK_RIGID_BODY_T_GETREFS
+}
+
 const Type & bhkRigidBodyT::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkRigidBodyT.h b/obj/bhkRigidBodyT.h
index 91383c64..e8d2fc1f 100644
--- a/obj/bhkRigidBodyT.h
+++ b/obj/bhkRigidBodyT.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_RIGID_BODY_T_MEMBERS
diff --git a/obj/bhkSPCollisionObject.cpp b/obj/bhkSPCollisionObject.cpp
index 9cbdf640..0eaf7267 100644
--- a/obj/bhkSPCollisionObject.cpp
+++ b/obj/bhkSPCollisionObject.cpp
@@ -26,6 +26,10 @@ void bhkSPCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<u
 	BHK_S_P_COLLISION_OBJECT_FIXLINKS
 }
 
+list<NiObjectRef> bhkSPCollisionObject::GetRefs() const {
+	BHK_S_P_COLLISION_OBJECT_GETREFS
+}
+
 const Type & bhkSPCollisionObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkSPCollisionObject.h b/obj/bhkSPCollisionObject.h
index 7709d14a..0ad03b9e 100644
--- a/obj/bhkSPCollisionObject.h
+++ b/obj/bhkSPCollisionObject.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_S_P_COLLISION_OBJECT_MEMBERS
diff --git a/obj/bhkSerializable.cpp b/obj/bhkSerializable.cpp
index bf3416ec..b765f4a9 100644
--- a/obj/bhkSerializable.cpp
+++ b/obj/bhkSerializable.cpp
@@ -26,6 +26,10 @@ void bhkSerializable::FixLinks( const vector<NiObjectRef> & objects, list<uint>
 	BHK_SERIALIZABLE_FIXLINKS
 }
 
+list<NiObjectRef> bhkSerializable::GetRefs() const {
+	BHK_SERIALIZABLE_GETREFS
+}
+
 const Type & bhkSerializable::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkSerializable.h b/obj/bhkSerializable.h
index 0264cb0e..ee1e59b4 100644
--- a/obj/bhkSerializable.h
+++ b/obj/bhkSerializable.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_SERIALIZABLE_MEMBERS
diff --git a/obj/bhkShape.cpp b/obj/bhkShape.cpp
index ce3eea46..5def530b 100644
--- a/obj/bhkShape.cpp
+++ b/obj/bhkShape.cpp
@@ -26,6 +26,10 @@ void bhkShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_
 	BHK_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkShape::GetRefs() const {
+	BHK_SHAPE_GETREFS
+}
+
 const Type & bhkShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkShape.h b/obj/bhkShape.h
index 3d5a2c99..53773d97 100644
--- a/obj/bhkShape.h
+++ b/obj/bhkShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_SHAPE_MEMBERS
diff --git a/obj/bhkSimpleShapePhantom.cpp b/obj/bhkSimpleShapePhantom.cpp
index 228eee8b..97062062 100644
--- a/obj/bhkSimpleShapePhantom.cpp
+++ b/obj/bhkSimpleShapePhantom.cpp
@@ -26,6 +26,10 @@ void bhkSimpleShapePhantom::FixLinks( const vector<NiObjectRef> & objects, list<
 	BHK_SIMPLE_SHAPE_PHANTOM_FIXLINKS
 }
 
+list<NiObjectRef> bhkSimpleShapePhantom::GetRefs() const {
+	BHK_SIMPLE_SHAPE_PHANTOM_GETREFS
+}
+
 const Type & bhkSimpleShapePhantom::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkSimpleShapePhantom.h b/obj/bhkSimpleShapePhantom.h
index 0c136d6a..e651de47 100644
--- a/obj/bhkSimpleShapePhantom.h
+++ b/obj/bhkSimpleShapePhantom.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_SIMPLE_SHAPE_PHANTOM_MEMBERS
diff --git a/obj/bhkSphereRepShape.cpp b/obj/bhkSphereRepShape.cpp
index 6d0ed3cc..4757aa5e 100644
--- a/obj/bhkSphereRepShape.cpp
+++ b/obj/bhkSphereRepShape.cpp
@@ -26,6 +26,10 @@ void bhkSphereRepShape::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	BHK_SPHERE_REP_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkSphereRepShape::GetRefs() const {
+	BHK_SPHERE_REP_SHAPE_GETREFS
+}
+
 const Type & bhkSphereRepShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkSphereRepShape.h b/obj/bhkSphereRepShape.h
index 5db802e4..ac4a25cf 100644
--- a/obj/bhkSphereRepShape.h
+++ b/obj/bhkSphereRepShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_SPHERE_REP_SHAPE_MEMBERS
diff --git a/obj/bhkSphereShape.cpp b/obj/bhkSphereShape.cpp
index fee7feca..a2364ea3 100644
--- a/obj/bhkSphereShape.cpp
+++ b/obj/bhkSphereShape.cpp
@@ -26,6 +26,10 @@ void bhkSphereShape::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	BHK_SPHERE_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkSphereShape::GetRefs() const {
+	BHK_SPHERE_SHAPE_GETREFS
+}
+
 const Type & bhkSphereShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkSphereShape.h b/obj/bhkSphereShape.h
index f2a415d7..b0660643 100644
--- a/obj/bhkSphereShape.h
+++ b/obj/bhkSphereShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_SPHERE_SHAPE_MEMBERS
diff --git a/obj/bhkStiffSpringConstraint.cpp b/obj/bhkStiffSpringConstraint.cpp
index dd8ed5aa..86ec2824 100644
--- a/obj/bhkStiffSpringConstraint.cpp
+++ b/obj/bhkStiffSpringConstraint.cpp
@@ -26,6 +26,10 @@ void bhkStiffSpringConstraint::FixLinks( const vector<NiObjectRef> & objects, li
 	BHK_STIFF_SPRING_CONSTRAINT_FIXLINKS
 }
 
+list<NiObjectRef> bhkStiffSpringConstraint::GetRefs() const {
+	BHK_STIFF_SPRING_CONSTRAINT_GETREFS
+}
+
 const Type & bhkStiffSpringConstraint::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkStiffSpringConstraint.h b/obj/bhkStiffSpringConstraint.h
index 1b437238..2299a0c3 100644
--- a/obj/bhkStiffSpringConstraint.h
+++ b/obj/bhkStiffSpringConstraint.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_STIFF_SPRING_CONSTRAINT_MEMBERS
diff --git a/obj/bhkTransformShape.cpp b/obj/bhkTransformShape.cpp
index d0c13891..1d636a2e 100644
--- a/obj/bhkTransformShape.cpp
+++ b/obj/bhkTransformShape.cpp
@@ -26,6 +26,10 @@ void bhkTransformShape::FixLinks( const vector<NiObjectRef> & objects, list<uint
 	BHK_TRANSFORM_SHAPE_FIXLINKS
 }
 
+list<NiObjectRef> bhkTransformShape::GetRefs() const {
+	BHK_TRANSFORM_SHAPE_GETREFS
+}
+
 const Type & bhkTransformShape::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkTransformShape.h b/obj/bhkTransformShape.h
index bd805aad..193427b4 100644
--- a/obj/bhkTransformShape.h
+++ b/obj/bhkTransformShape.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_TRANSFORM_SHAPE_MEMBERS
diff --git a/obj/bhkWorldObject.cpp b/obj/bhkWorldObject.cpp
index 7ea1454a..32351c82 100644
--- a/obj/bhkWorldObject.cpp
+++ b/obj/bhkWorldObject.cpp
@@ -26,6 +26,10 @@ void bhkWorldObject::FixLinks( const vector<NiObjectRef> & objects, list<uint> &
 	BHK_WORLD_OBJECT_FIXLINKS
 }
 
+list<NiObjectRef> bhkWorldObject::GetRefs() const {
+	BHK_WORLD_OBJECT_GETREFS
+}
+
 const Type & bhkWorldObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/bhkWorldObject.h b/obj/bhkWorldObject.h
index 6b89e2c8..aa3bdab9 100644
--- a/obj/bhkWorldObject.h
+++ b/obj/bhkWorldObject.h
@@ -25,6 +25,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	BHK_WORLD_OBJECT_MEMBERS
diff --git a/obj/hkPackedNiTriStripsData.cpp b/obj/hkPackedNiTriStripsData.cpp
index 090cf94b..e39a01c6 100644
--- a/obj/hkPackedNiTriStripsData.cpp
+++ b/obj/hkPackedNiTriStripsData.cpp
@@ -27,6 +27,10 @@ void hkPackedNiTriStripsData::FixLinks( const vector<NiObjectRef> & objects, lis
 	HK_PACKED_NI_TRI_STRIPS_DATA_FIXLINKS
 }
 
+list<NiObjectRef> hkPackedNiTriStripsData::GetRefs() const {
+	HK_PACKED_NI_TRI_STRIPS_DATA_GETREFS
+}
+
 const Type & hkPackedNiTriStripsData::GetType() const {
 	return TYPE;
 };
diff --git a/obj/hkPackedNiTriStripsData.h b/obj/hkPackedNiTriStripsData.h
index 67726450..9d04cf18 100644
--- a/obj/hkPackedNiTriStripsData.h
+++ b/obj/hkPackedNiTriStripsData.h
@@ -27,6 +27,7 @@ public:
 	virtual void Write( ostream& out, map<NiObjectRef,uint> link_map, unsigned int version ) const;
 	virtual string asString( bool verbose = false ) const;
 	virtual void FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version );
+	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 protected:
 	HK_PACKED_NI_TRI_STRIPS_DATA_MEMBERS
-- 
GitLab