From 3353890d3666cb2091753e075428f61564cf4206 Mon Sep 17 00:00:00 2001
From: Amorilia <amorilia@users.sourceforge.net>
Date: Sun, 4 Jun 2006 15:09:31 +0000
Subject: [PATCH] Implemented Shon's idea about forward declaration and
 includes.

---
 gen/AVObject.h                             | 3 +++
 gen/Bones.h                                | 3 +++
 gen/ControllerLink.cpp                     | 3 +++
 gen/ControllerLink.h                       | 8 +++++---
 gen/Footer.cpp                             | 1 +
 gen/Footer.h                               | 4 +++-
 gen/Header.h                               | 1 +
 gen/NodeGroup.cpp                          | 1 +
 gen/NodeGroup.h                            | 4 +++-
 gen/ShaderTexDesc.cpp                      | 1 +
 gen/ShaderTexDesc.h                        | 1 +
 gen/SkinData.h                             | 1 +
 gen/SkinShape.cpp                          | 2 ++
 gen/SkinShape.h                            | 6 ++++--
 gen/SkinShapeGroup.cpp                     | 2 ++
 gen/SkinShapeGroup.h                       | 1 +
 gen/TexDesc.cpp                            | 1 +
 gen/TexDesc.h                              | 4 +++-
 gen/TexSource.cpp                          | 2 ++
 gen/TexSource.h                            | 6 ++++--
 obj/ABoneLODController.cpp                 | 1 +
 obj/ABoneLODController.h                   | 1 +
 obj/AParticleModifier.h                    | 3 +++
 obj/AbhkConstraint.h                       | 3 +++
 obj/BSFurnitureMarker.h                    | 1 +
 obj/BSKeyframeController.cpp               | 1 +
 obj/BSKeyframeController.h                 | 4 +++-
 obj/FxRadioButton.cpp                      | 1 +
 obj/FxRadioButton.h                        | 4 +++-
 obj/NiAlphaController.cpp                  | 1 +
 obj/NiAlphaController.h                    | 4 +++-
 obj/NiBSplineCompPoint3Interpolator.cpp    | 2 ++
 obj/NiBSplineCompPoint3Interpolator.h      | 6 ++++--
 obj/NiBSplineCompTransformInterpolator.cpp | 2 ++
 obj/NiBSplineCompTransformInterpolator.h   | 6 ++++--
 obj/NiBinaryExtraData.h                    | 1 +
 obj/NiBoneLODController.cpp                | 3 +++
 obj/NiBoneLODController.h                  | 5 ++++-
 obj/NiBoolData.h                           | 1 +
 obj/NiBoolInterpolator.cpp                 | 1 +
 obj/NiBoolInterpolator.h                   | 4 +++-
 obj/NiBoolTimelineInterpolator.cpp         | 1 +
 obj/NiBoolTimelineInterpolator.h           | 4 +++-
 obj/NiCamera.cpp                           | 1 +
 obj/NiCamera.h                             | 4 +++-
 obj/NiCollisionData.h                      | 3 +++
 obj/NiCollisionObject.cpp                  | 1 +
 obj/NiCollisionObject.h                    | 4 +++-
 obj/NiColorData.h                          | 1 +
 obj/NiControllerManager.cpp                | 2 ++
 obj/NiControllerManager.h                  | 6 ++++--
 obj/NiControllerSequence.cpp               | 8 ++++++++
 obj/NiControllerSequence.h                 | 7 +++++--
 obj/NiDefaultAVObjectPalette.h             | 1 +
 obj/NiDynamicEffect.cpp                    | 1 +
 obj/NiDynamicEffect.h                      | 4 +++-
 obj/NiFlipController.cpp                   | 1 +
 obj/NiFlipController.h                     | 4 +++-
 obj/NiFloatData.h                          | 1 +
 obj/NiFloatExtraDataController.cpp         | 1 +
 obj/NiFloatExtraDataController.h           | 4 +++-
 obj/NiFloatInterpolator.cpp                | 1 +
 obj/NiFloatInterpolator.h                  | 4 +++-
 obj/NiGeomMorpherController.cpp            | 2 ++
 obj/NiGeomMorpherController.h              | 6 ++++--
 obj/NiKeyframeController.cpp               | 1 +
 obj/NiKeyframeController.h                 | 4 +++-
 obj/NiKeyframeData.h                       | 1 +
 obj/NiLODNode.cpp                          | 1 +
 obj/NiLODNode.h                            | 5 ++++-
 obj/NiLightColorController.cpp             | 2 ++
 obj/NiLightColorController.h               | 6 ++++--
 obj/NiLightDimmerController.cpp            | 1 +
 obj/NiLightDimmerController.h              | 4 +++-
 obj/NiLookAtController.cpp                 | 1 +
 obj/NiLookAtController.h                   | 4 +++-
 obj/NiLookAtInterpolator.cpp               | 3 +++
 obj/NiLookAtInterpolator.h                 | 8 +++++---
 obj/NiMaterialColorController.cpp          | 1 +
 obj/NiMaterialColorController.h            | 4 +++-
 obj/NiMeshPSysData.cpp                     | 2 ++
 obj/NiMeshPSysData.h                       | 6 ++++--
 obj/NiMorphData.h                          | 1 +
 obj/NiMultiTargetTransformController.h     | 3 +++
 obj/NiNode.cpp                             | 2 ++
 obj/NiNode.h                               | 6 ++++--
 obj/NiPSysAgeDeathModifier.cpp             | 1 +
 obj/NiPSysAgeDeathModifier.h               | 4 +++-
 obj/NiPSysBombModifier.h                   | 3 +++
 obj/NiPSysColliderManager.cpp              | 1 +
 obj/NiPSysColliderManager.h                | 4 +++-
 obj/NiPSysColorModifier.cpp                | 1 +
 obj/NiPSysColorModifier.h                  | 4 +++-
 obj/NiPSysDragModifier.h                   | 3 +++
 obj/NiPSysEmitterCtlr.cpp                  | 1 +
 obj/NiPSysEmitterCtlr.h                    | 4 +++-
 obj/NiPSysEmitterCtlrData.h                | 1 +
 obj/NiPSysGravityModifier.h                | 3 +++
 obj/NiPSysMeshEmitter.cpp                  | 1 +
 obj/NiPSysMeshEmitter.h                    | 4 +++-
 obj/NiPSysMeshUpdateModifier.cpp           | 1 +
 obj/NiPSysMeshUpdateModifier.h             | 4 +++-
 obj/NiPSysModifier.h                       | 3 +++
 obj/NiPSysPlanarCollider.cpp               | 2 ++
 obj/NiPSysPlanarCollider.h                 | 7 ++++---
 obj/NiPSysVolumeEmitter.h                  | 3 +++
 obj/NiParticleColorModifier.cpp            | 1 +
 obj/NiParticleColorModifier.h              | 4 +++-
 obj/NiParticleMeshModifier.cpp             | 1 +
 obj/NiParticleMeshModifier.h               | 4 +++-
 obj/NiParticleMeshesData.cpp               | 1 +
 obj/NiParticleMeshesData.h                 | 4 +++-
 obj/NiParticleSystem.cpp                   | 1 +
 obj/NiParticleSystem.h                     | 4 +++-
 obj/NiParticleSystemController.cpp         | 2 ++
 obj/NiParticleSystemController.h           | 9 ++++++---
 obj/NiPathController.cpp                   | 2 ++
 obj/NiPathController.h                     | 6 ++++--
 obj/NiPathInterpolator.cpp                 | 2 ++
 obj/NiPathInterpolator.h                   | 6 ++++--
 obj/NiPixelData.cpp                        | 1 +
 obj/NiPixelData.h                          | 7 +++++--
 obj/NiPoint3Interpolator.cpp               | 1 +
 obj/NiPoint3Interpolator.h                 | 4 +++-
 obj/NiPosData.h                            | 1 +
 obj/NiRangeLODData.h                       | 1 +
 obj/NiSingleInterpolatorController.cpp     | 1 +
 obj/NiSingleInterpolatorController.h       | 4 +++-
 obj/NiSkinData.cpp                         | 1 +
 obj/NiSkinData.h                           | 7 +++++--
 obj/NiSkinInstance.cpp                     | 2 ++
 obj/NiSkinInstance.h                       | 9 ++++++---
 obj/NiSkinPartition.h                      | 1 +
 obj/NiSourceTexture.cpp                    | 2 ++
 obj/NiSourceTexture.h                      | 6 ++++--
 obj/NiStringPalette.h                      | 1 +
 obj/NiTextureEffect.cpp                    | 1 +
 obj/NiTextureEffect.h                      | 4 +++-
 obj/NiTextureTransformController.cpp       | 1 +
 obj/NiTextureTransformController.h         | 4 +++-
 obj/NiTexturingProperty.cpp                | 9 +++++++++
 obj/NiTexturingProperty.h                  | 1 +
 obj/NiTimeController.h                     | 3 +++
 obj/NiTransformInterpolator.cpp            | 1 +
 obj/NiTransformInterpolator.h              | 4 +++-
 obj/NiTriBasedGeom.cpp                     | 3 +++
 obj/NiTriBasedGeom.h                       | 8 +++++---
 obj/NiTriBasedGeomData.cpp                 | 1 +
 obj/NiTriBasedGeomData.h                   | 4 +++-
 obj/NiTriShapeData.h                       | 1 +
 obj/NiUVController.cpp                     | 1 +
 obj/NiUVController.h                       | 4 +++-
 obj/NiUVData.h                             | 1 +
 obj/NiVisController.cpp                    | 1 +
 obj/NiVisController.h                      | 4 +++-
 obj/bhkEntity.cpp                          | 1 +
 obj/bhkEntity.h                            | 4 +++-
 obj/bhkLimitedHingeConstraint.h            | 1 +
 obj/bhkListShape.cpp                       | 1 +
 obj/bhkListShape.h                         | 4 +++-
 obj/bhkMalleableConstraint.cpp             | 1 +
 obj/bhkMalleableConstraint.h               | 7 +++++--
 obj/bhkMoppBvTreeShape.cpp                 | 1 +
 obj/bhkMoppBvTreeShape.h                   | 4 +++-
 obj/bhkNiTriStripsShape.cpp                | 1 +
 obj/bhkNiTriStripsShape.h                  | 4 +++-
 obj/bhkPackedNiTriStripsShape.cpp          | 1 +
 obj/bhkPackedNiTriStripsShape.h            | 4 +++-
 obj/bhkRigidBody.cpp                       | 1 +
 obj/bhkRigidBody.h                         | 5 ++++-
 obj/hkPackedNiTriStripsData.h              | 1 +
 171 files changed, 402 insertions(+), 94 deletions(-)

diff --git a/gen/AVObject.h b/gen/AVObject.h
index 96924240..d7810069 100644
--- a/gen/AVObject.h
+++ b/gen/AVObject.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _AVOBJECT_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiAVObject;
 
 /*!
diff --git a/gen/Bones.h b/gen/Bones.h
index 9f6cbd06..4d52e49c 100644
--- a/gen/Bones.h
+++ b/gen/Bones.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BONES_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiNode;
 
 /*!
diff --git a/gen/ControllerLink.cpp b/gen/ControllerLink.cpp
index 407aa0fb..8cbf106a 100644
--- a/gen/ControllerLink.cpp
+++ b/gen/ControllerLink.cpp
@@ -2,6 +2,9 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/ControllerLink.h"
+#include "obj/NiInterpolator.h"
+#include "obj/NiObject.h"
+#include "obj/NiStringPalette.h"
 
 //Constructor
 ControllerLink::ControllerLink() : interpolator(NULL), unknownLink1(NULL), unknownLink2(NULL), unknownShort0((ushort)0), priority_((byte)0), stringPalette(NULL), nodeNameOffset((uint)0), propertyTypeOffset((uint)0), controllerTypeOffset((uint)0), variableOffset1((uint)0), variableOffset2((uint)0) {};
diff --git a/gen/ControllerLink.h b/gen/ControllerLink.h
index 92c80331..2abc3f3e 100644
--- a/gen/ControllerLink.h
+++ b/gen/ControllerLink.h
@@ -5,10 +5,12 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _CONTROLLERLINK_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiInterpolator.h"
-#include "obj/NiObject.h"
-#include "obj/NiStringPalette.h"
+class NiInterpolator;
+class NiObject;
+class NiStringPalette;
 
 /*!
  * In a .kf file, this links to a controllable block, via its name (or
diff --git a/gen/Footer.cpp b/gen/Footer.cpp
index 334d8128..1324f628 100644
--- a/gen/Footer.cpp
+++ b/gen/Footer.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/Footer.h"
+#include "obj/NiAVObject.h"
 
 //Constructor
 Footer::Footer() : numRoots((uint)0) {};
diff --git a/gen/Footer.h b/gen/Footer.h
index f4b32de8..0a20591d 100644
--- a/gen/Footer.h
+++ b/gen/Footer.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _FOOTER_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiAVObject.h"
+class NiAVObject;
 
 /*!
  * The NIF file footer.
diff --git a/gen/Header.h b/gen/Header.h
index 4e4dfb99..2e6d2442 100644
--- a/gen/Header.h
+++ b/gen/Header.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _HEADER_H_
 
 #include "NIF_IO.h"
+// Include structures
 #include "gen/ShortString.h"
 
 /*!
diff --git a/gen/NodeGroup.cpp b/gen/NodeGroup.cpp
index bc1eea03..a020b621 100644
--- a/gen/NodeGroup.cpp
+++ b/gen/NodeGroup.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/NodeGroup.h"
+#include "obj/NiNode.h"
 
 //Constructor
 NodeGroup::NodeGroup() : numNodes((uint)0) {};
diff --git a/gen/NodeGroup.h b/gen/NodeGroup.h
index 3a267385..b7b987b6 100644
--- a/gen/NodeGroup.h
+++ b/gen/NodeGroup.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NODEGROUP_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiNode.h"
+class NiNode;
 
 /*!
  * A group of NiNodes references.
diff --git a/gen/ShaderTexDesc.cpp b/gen/ShaderTexDesc.cpp
index 5dfdb116..bceeb623 100644
--- a/gen/ShaderTexDesc.cpp
+++ b/gen/ShaderTexDesc.cpp
@@ -3,6 +3,7 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/ShaderTexDesc.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 
 //Constructor
 ShaderTexDesc::ShaderTexDesc() : isUsed(false), unknownInt((uint)0) {};
diff --git a/gen/ShaderTexDesc.h b/gen/ShaderTexDesc.h
index dad364d7..b3c1d064 100644
--- a/gen/ShaderTexDesc.h
+++ b/gen/ShaderTexDesc.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _SHADERTEXDESC_H_
 
 #include "NIF_IO.h"
+// Include structures
 #include "gen/TexDesc.h"
 
 /*!
diff --git a/gen/SkinData.h b/gen/SkinData.h
index 9ba6cf7e..828e5bc9 100644
--- a/gen/SkinData.h
+++ b/gen/SkinData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _SKINDATA_H_
 
 #include "NIF_IO.h"
+// Include structures
 #include "gen/SkinWeight.h"
 
 /*!
diff --git a/gen/SkinShape.cpp b/gen/SkinShape.cpp
index 29ff9dab..cea98735 100644
--- a/gen/SkinShape.cpp
+++ b/gen/SkinShape.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/SkinShape.h"
+#include "obj/NiTriShape.h"
+#include "obj/NiSkinInstance.h"
 
 //Constructor
 SkinShape::SkinShape() : shape(NULL), skinInstance(NULL) {};
diff --git a/gen/SkinShape.h b/gen/SkinShape.h
index 85848b40..f1275a4d 100644
--- a/gen/SkinShape.h
+++ b/gen/SkinShape.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _SKINSHAPE_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTriShape.h"
-#include "obj/NiSkinInstance.h"
+class NiTriShape;
+class NiSkinInstance;
 
 /*!
  * Reference to shape and skin instance.
diff --git a/gen/SkinShapeGroup.cpp b/gen/SkinShapeGroup.cpp
index 8f6b5eb5..aa65e676 100644
--- a/gen/SkinShapeGroup.cpp
+++ b/gen/SkinShapeGroup.cpp
@@ -3,6 +3,8 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/SkinShapeGroup.h"
 #include "gen/SkinShape.h"
+#include "obj/NiTriShape.h"
+#include "obj/NiSkinInstance.h"
 
 //Constructor
 SkinShapeGroup::SkinShapeGroup() : numLinkPairs((uint)0) {};
diff --git a/gen/SkinShapeGroup.h b/gen/SkinShapeGroup.h
index 8606370f..e53394f3 100644
--- a/gen/SkinShapeGroup.h
+++ b/gen/SkinShapeGroup.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _SKINSHAPEGROUP_H_
 
 #include "NIF_IO.h"
+// Include structures
 #include "gen/SkinShape.h"
 
 /*!
diff --git a/gen/TexDesc.cpp b/gen/TexDesc.cpp
index f0d06272..877f21d7 100644
--- a/gen/TexDesc.cpp
+++ b/gen/TexDesc.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 
 //Constructor
 TexDesc::TexDesc() : source(NULL), clampMode((TexClampMode)WRAP_S_WRAP_T), filterMode((TexFilterMode)FILTER_TRILERP), textureSet((uint)0), ps2L((ushort)0), ps2K((ushort)0xFFB5), unknown1((ushort)0), hasTextureTransform(false), wRotation(0.0f), transformType_((uint)0) {};
diff --git a/gen/TexDesc.h b/gen/TexDesc.h
index 1b338088..719185e6 100644
--- a/gen/TexDesc.h
+++ b/gen/TexDesc.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _TEXDESC_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiSourceTexture.h"
+class NiSourceTexture;
 
 /*!
  * Texture description.
diff --git a/gen/TexSource.cpp b/gen/TexSource.cpp
index abed273f..41abf21e 100644
--- a/gen/TexSource.cpp
+++ b/gen/TexSource.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "gen/TexSource.h"
+#include "obj/NiObject.h"
+#include "obj/NiPixelData.h"
 
 //Constructor
 TexSource::TexSource() : useExternal((byte)0), unknownLink(NULL), unknownByte((byte)0), pixelData(NULL) {};
diff --git a/gen/TexSource.h b/gen/TexSource.h
index 59aa54fd..77998aaa 100644
--- a/gen/TexSource.h
+++ b/gen/TexSource.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _TEXSOURCE_H_
 
 #include "NIF_IO.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiObject.h"
-#include "obj/NiPixelData.h"
+class NiObject;
+class NiPixelData;
 
 /*!
  * A texture source.
diff --git a/obj/ABoneLODController.cpp b/obj/ABoneLODController.cpp
index 071aef7c..0b7150d1 100644
--- a/obj/ABoneLODController.cpp
+++ b/obj/ABoneLODController.cpp
@@ -3,6 +3,7 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/ABoneLODController.h"
 #include "gen/NodeGroup.h"
+#include "obj/NiNode.h"
 
 //Definition of TYPE constant
 const Type ABoneLODController::TYPE("ABoneLODController", &A_BONE_L_O_D_CONTROLLER_PARENT::TYPE );
diff --git a/obj/ABoneLODController.h b/obj/ABoneLODController.h
index 42ef40d5..4c4673e2 100644
--- a/obj/ABoneLODController.h
+++ b/obj/ABoneLODController.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _ABONELODCONTROLLER_H_
 
 #include "NiTimeController.h"
+// Include structures
 #include "gen/NodeGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/AParticleModifier.h b/obj/AParticleModifier.h
index ee9e401e..6f1f2ba0 100644
--- a/obj/AParticleModifier.h
+++ b/obj/AParticleModifier.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _APARTICLEMODIFIER_H_
 
 #include "NiObject.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiParticleSystemController;
 
 #include "gen/obj_defines.h"
diff --git a/obj/AbhkConstraint.h b/obj/AbhkConstraint.h
index 7fe2582f..05ea479b 100644
--- a/obj/AbhkConstraint.h
+++ b/obj/AbhkConstraint.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _ABHKCONSTRAINT_H_
 
 #include "bhkSerializable.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class bhkShape;
 
 #include "gen/obj_defines.h"
diff --git a/obj/BSFurnitureMarker.h b/obj/BSFurnitureMarker.h
index a5df11dd..1cc0578d 100644
--- a/obj/BSFurnitureMarker.h
+++ b/obj/BSFurnitureMarker.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BSFURNITUREMARKER_H_
 
 #include "NiExtraData.h"
+// Include structures
 #include "gen/FurniturePosition.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/BSKeyframeController.cpp b/obj/BSKeyframeController.cpp
index 85012f21..f568af7d 100644
--- a/obj/BSKeyframeController.cpp
+++ b/obj/BSKeyframeController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/BSKeyframeController.h"
+#include "obj/NiKeyframeData.h"
 
 //Definition of TYPE constant
 const Type BSKeyframeController::TYPE("BSKeyframeController", &B_S_KEYFRAME_CONTROLLER_PARENT::TYPE );
diff --git a/obj/BSKeyframeController.h b/obj/BSKeyframeController.h
index 07129a23..05ba40fd 100644
--- a/obj/BSKeyframeController.h
+++ b/obj/BSKeyframeController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BSKEYFRAMECONTROLLER_H_
 
 #include "NiKeyframeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiKeyframeData.h"
+class NiKeyframeData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/FxRadioButton.cpp b/obj/FxRadioButton.cpp
index 27dc87d2..9534548c 100644
--- a/obj/FxRadioButton.cpp
+++ b/obj/FxRadioButton.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/FxRadioButton.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type FxRadioButton::TYPE("FxRadioButton", &FX_RADIO_BUTTON_PARENT::TYPE );
diff --git a/obj/FxRadioButton.h b/obj/FxRadioButton.h
index fff14933..9ad12f51 100644
--- a/obj/FxRadioButton.h
+++ b/obj/FxRadioButton.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _FXRADIOBUTTON_H_
 
 #include "FxWidget.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiObject.h"
+class NiObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiAlphaController.cpp b/obj/NiAlphaController.cpp
index 1e7c67f0..c3212ddd 100644
--- a/obj/NiAlphaController.cpp
+++ b/obj/NiAlphaController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiAlphaController.h"
+#include "obj/NiFloatData.h"
 
 //Definition of TYPE constant
 const Type NiAlphaController::TYPE("NiAlphaController", &NI_ALPHA_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiAlphaController.h b/obj/NiAlphaController.h
index 3b4843d1..78747b71 100644
--- a/obj/NiAlphaController.h
+++ b/obj/NiAlphaController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIALPHACONTROLLER_H_
 
 #include "NiSingleInterpolatorController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiFloatData.h"
+class NiFloatData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiBSplineCompPoint3Interpolator.cpp b/obj/NiBSplineCompPoint3Interpolator.cpp
index 5997bb75..5b63a1a4 100644
--- a/obj/NiBSplineCompPoint3Interpolator.cpp
+++ b/obj/NiBSplineCompPoint3Interpolator.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiBSplineCompPoint3Interpolator.h"
+#include "obj/NiBSplineData.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type NiBSplineCompPoint3Interpolator::TYPE("NiBSplineCompPoint3Interpolator", &NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiBSplineCompPoint3Interpolator.h b/obj/NiBSplineCompPoint3Interpolator.h
index 6281937e..26a46ba7 100644
--- a/obj/NiBSplineCompPoint3Interpolator.h
+++ b/obj/NiBSplineCompPoint3Interpolator.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIBSPLINECOMPPOINT3INTERPOLATOR_H_
 
 #include "NiBSplineInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiBSplineData.h"
-#include "obj/NiObject.h"
+class NiBSplineData;
+class NiObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiBSplineCompTransformInterpolator.cpp b/obj/NiBSplineCompTransformInterpolator.cpp
index d463a4c5..83ada955 100644
--- a/obj/NiBSplineCompTransformInterpolator.cpp
+++ b/obj/NiBSplineCompTransformInterpolator.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiBSplineCompTransformInterpolator.h"
+#include "obj/NiBSplineData.h"
+#include "obj/NiBSplineBasisData.h"
 
 //Definition of TYPE constant
 const Type NiBSplineCompTransformInterpolator::TYPE("NiBSplineCompTransformInterpolator", &NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiBSplineCompTransformInterpolator.h b/obj/NiBSplineCompTransformInterpolator.h
index 3e67a168..4142c7e8 100644
--- a/obj/NiBSplineCompTransformInterpolator.h
+++ b/obj/NiBSplineCompTransformInterpolator.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIBSPLINECOMPTRANSFORMINTERPOLATOR_H_
 
 #include "NiBSplineInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiBSplineData.h"
-#include "obj/NiBSplineBasisData.h"
+class NiBSplineData;
+class NiBSplineBasisData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiBinaryExtraData.h b/obj/NiBinaryExtraData.h
index 25455856..8b55f23a 100644
--- a/obj/NiBinaryExtraData.h
+++ b/obj/NiBinaryExtraData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIBINARYEXTRADATA_H_
 
 #include "NiExtraData.h"
+// Include structures
 #include "gen/ByteArray.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiBoneLODController.cpp b/obj/NiBoneLODController.cpp
index 49e09903..d479f621 100644
--- a/obj/NiBoneLODController.cpp
+++ b/obj/NiBoneLODController.cpp
@@ -4,6 +4,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #include "obj/NiBoneLODController.h"
 #include "gen/SkinShapeGroup.h"
 #include "gen/SkinShape.h"
+#include "obj/NiTriShape.h"
+#include "obj/NiSkinInstance.h"
+#include "obj/NiTriShape.h"
 
 //Definition of TYPE constant
 const Type NiBoneLODController::TYPE("NiBoneLODController", &NI_BONE_L_O_D_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiBoneLODController.h b/obj/NiBoneLODController.h
index cca9b519..9811cad5 100644
--- a/obj/NiBoneLODController.h
+++ b/obj/NiBoneLODController.h
@@ -5,9 +5,12 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIBONELODCONTROLLER_H_
 
 #include "ABoneLODController.h"
+// Include structures
 #include "gen/SkinShapeGroup.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTriShape.h"
+class NiTriShape;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiBoolData.h b/obj/NiBoolData.h
index 67208155..fdecbfce 100644
--- a/obj/NiBoolData.h
+++ b/obj/NiBoolData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIBOOLDATA_H_
 
 #include "AKeyedData.h"
+// Include structures
 #include "gen/KeyGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiBoolInterpolator.cpp b/obj/NiBoolInterpolator.cpp
index 38141eb1..e85d86be 100644
--- a/obj/NiBoolInterpolator.cpp
+++ b/obj/NiBoolInterpolator.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiBoolInterpolator.h"
+#include "obj/NiBoolData.h"
 
 //Definition of TYPE constant
 const Type NiBoolInterpolator::TYPE("NiBoolInterpolator", &NI_BOOL_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiBoolInterpolator.h b/obj/NiBoolInterpolator.h
index 7a98bb86..064b9829 100644
--- a/obj/NiBoolInterpolator.h
+++ b/obj/NiBoolInterpolator.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIBOOLINTERPOLATOR_H_
 
 #include "NiInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiBoolData.h"
+class NiBoolData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiBoolTimelineInterpolator.cpp b/obj/NiBoolTimelineInterpolator.cpp
index d450991b..d6f48966 100644
--- a/obj/NiBoolTimelineInterpolator.cpp
+++ b/obj/NiBoolTimelineInterpolator.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiBoolTimelineInterpolator.h"
+#include "obj/NiBoolData.h"
 
 //Definition of TYPE constant
 const Type NiBoolTimelineInterpolator::TYPE("NiBoolTimelineInterpolator", &NI_BOOL_TIMELINE_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiBoolTimelineInterpolator.h b/obj/NiBoolTimelineInterpolator.h
index 2e21bbc4..2ba31a21 100644
--- a/obj/NiBoolTimelineInterpolator.h
+++ b/obj/NiBoolTimelineInterpolator.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIBOOLTIMELINEINTERPOLATOR_H_
 
 #include "NiInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiBoolData.h"
+class NiBoolData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiCamera.cpp b/obj/NiCamera.cpp
index a40b125b..f8434d42 100644
--- a/obj/NiCamera.cpp
+++ b/obj/NiCamera.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiCamera.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type NiCamera::TYPE("NiCamera", &NI_CAMERA_PARENT::TYPE );
diff --git a/obj/NiCamera.h b/obj/NiCamera.h
index 67fc8d2b..d747210a 100644
--- a/obj/NiCamera.h
+++ b/obj/NiCamera.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NICAMERA_H_
 
 #include "NiAVObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiObject.h"
+class NiObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiCollisionData.h b/obj/NiCollisionData.h
index 3bf3cf24..2cac6b83 100644
--- a/obj/NiCollisionData.h
+++ b/obj/NiCollisionData.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NICOLLISIONDATA_H_
 
 #include "NiObject.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiNode;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiCollisionObject.cpp b/obj/NiCollisionObject.cpp
index 9c6aa543..04c509fa 100644
--- a/obj/NiCollisionObject.cpp
+++ b/obj/NiCollisionObject.cpp
@@ -3,6 +3,7 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiCollisionObject.h"
 #include "obj/NiAVObject.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type NiCollisionObject::TYPE("NiCollisionObject", &NI_COLLISION_OBJECT_PARENT::TYPE );
diff --git a/obj/NiCollisionObject.h b/obj/NiCollisionObject.h
index 06410dba..069a8874 100644
--- a/obj/NiCollisionObject.h
+++ b/obj/NiCollisionObject.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NICOLLISIONOBJECT_H_
 
 #include "NiObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiObject.h"
 class NiAVObject;
+class NiObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiColorData.h b/obj/NiColorData.h
index 6e871db3..9fc575ed 100644
--- a/obj/NiColorData.h
+++ b/obj/NiColorData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NICOLORDATA_H_
 
 #include "AKeyedData.h"
+// Include structures
 #include "gen/KeyGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiControllerManager.cpp b/obj/NiControllerManager.cpp
index 013dc47a..775dce7f 100644
--- a/obj/NiControllerManager.cpp
+++ b/obj/NiControllerManager.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiControllerManager.h"
+#include "obj/NiControllerSequence.h"
+#include "obj/NiDefaultAVObjectPalette.h"
 
 //Definition of TYPE constant
 const Type NiControllerManager::TYPE("NiControllerManager", &NI_CONTROLLER_MANAGER_PARENT::TYPE );
diff --git a/obj/NiControllerManager.h b/obj/NiControllerManager.h
index 04ecec74..6a6f93a2 100644
--- a/obj/NiControllerManager.h
+++ b/obj/NiControllerManager.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NICONTROLLERMANAGER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiControllerSequence.h"
-#include "obj/NiDefaultAVObjectPalette.h"
+class NiControllerSequence;
+class NiDefaultAVObjectPalette;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiControllerSequence.cpp b/obj/NiControllerSequence.cpp
index 3d163f5f..b4950b79 100644
--- a/obj/NiControllerSequence.cpp
+++ b/obj/NiControllerSequence.cpp
@@ -3,8 +3,16 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiControllerSequence.h"
 #include "gen/ControllerLink.h"
+#include "obj/NiInterpolator.h"
+#include "obj/NiObject.h"
+#include "obj/NiStringPalette.h"
 #include "gen/ControllerLink.h"
+#include "obj/NiInterpolator.h"
+#include "obj/NiObject.h"
+#include "obj/NiStringPalette.h"
+#include "obj/NiTextKeyExtraData.h"
 #include "obj/NiControllerManager.h"
+#include "obj/NiStringPalette.h"
 
 //Definition of TYPE constant
 const Type NiControllerSequence::TYPE("NiControllerSequence", &NI_CONTROLLER_SEQUENCE_PARENT::TYPE );
diff --git a/obj/NiControllerSequence.h b/obj/NiControllerSequence.h
index 9116b21a..31451463 100644
--- a/obj/NiControllerSequence.h
+++ b/obj/NiControllerSequence.h
@@ -5,11 +5,14 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NICONTROLLERSEQUENCE_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/ControllerLink.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTextKeyExtraData.h"
-#include "obj/NiStringPalette.h"
+class NiTextKeyExtraData;
 class NiControllerManager;
+class NiStringPalette;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiDefaultAVObjectPalette.h b/obj/NiDefaultAVObjectPalette.h
index ffbbf5f7..e4251325 100644
--- a/obj/NiDefaultAVObjectPalette.h
+++ b/obj/NiDefaultAVObjectPalette.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIDEFAULTAVOBJECTPALETTE_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/AVObject.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiDynamicEffect.cpp b/obj/NiDynamicEffect.cpp
index 544c699b..5097f328 100644
--- a/obj/NiDynamicEffect.cpp
+++ b/obj/NiDynamicEffect.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiDynamicEffect.h"
+#include "obj/NiAVObject.h"
 
 //Definition of TYPE constant
 const Type NiDynamicEffect::TYPE("NiDynamicEffect", &NI_DYNAMIC_EFFECT_PARENT::TYPE );
diff --git a/obj/NiDynamicEffect.h b/obj/NiDynamicEffect.h
index 9a6efc86..171fe350 100644
--- a/obj/NiDynamicEffect.h
+++ b/obj/NiDynamicEffect.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIDYNAMICEFFECT_H_
 
 #include "NiAVObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiAVObject.h"
+class NiAVObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiFlipController.cpp b/obj/NiFlipController.cpp
index e7c03e7f..1489896a 100644
--- a/obj/NiFlipController.cpp
+++ b/obj/NiFlipController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiFlipController.h"
+#include "obj/NiSourceTexture.h"
 
 //Definition of TYPE constant
 const Type NiFlipController::TYPE("NiFlipController", &NI_FLIP_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiFlipController.h b/obj/NiFlipController.h
index 9670c048..37644539 100644
--- a/obj/NiFlipController.h
+++ b/obj/NiFlipController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIFLIPCONTROLLER_H_
 
 #include "NiSingleInterpolatorController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiSourceTexture.h"
+class NiSourceTexture;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiFloatData.h b/obj/NiFloatData.h
index d6ba57dd..b9a82e53 100644
--- a/obj/NiFloatData.h
+++ b/obj/NiFloatData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIFLOATDATA_H_
 
 #include "AKeyedData.h"
+// Include structures
 #include "gen/KeyGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiFloatExtraDataController.cpp b/obj/NiFloatExtraDataController.cpp
index 743ae940..37d988ce 100644
--- a/obj/NiFloatExtraDataController.cpp
+++ b/obj/NiFloatExtraDataController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiFloatExtraDataController.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type NiFloatExtraDataController::TYPE("NiFloatExtraDataController", &NI_FLOAT_EXTRA_DATA_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiFloatExtraDataController.h b/obj/NiFloatExtraDataController.h
index 0148876c..82d8adea 100644
--- a/obj/NiFloatExtraDataController.h
+++ b/obj/NiFloatExtraDataController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIFLOATEXTRADATACONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiObject.h"
+class NiObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiFloatInterpolator.cpp b/obj/NiFloatInterpolator.cpp
index ecb89d2b..0d15959c 100644
--- a/obj/NiFloatInterpolator.cpp
+++ b/obj/NiFloatInterpolator.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiFloatInterpolator.h"
+#include "obj/NiFloatData.h"
 
 //Definition of TYPE constant
 const Type NiFloatInterpolator::TYPE("NiFloatInterpolator", &NI_FLOAT_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiFloatInterpolator.h b/obj/NiFloatInterpolator.h
index 58c57472..b41f5fde 100644
--- a/obj/NiFloatInterpolator.h
+++ b/obj/NiFloatInterpolator.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIFLOATINTERPOLATOR_H_
 
 #include "NiInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiFloatData.h"
+class NiFloatData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiGeomMorpherController.cpp b/obj/NiGeomMorpherController.cpp
index 8d00b8b1..a96da209 100644
--- a/obj/NiGeomMorpherController.cpp
+++ b/obj/NiGeomMorpherController.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiGeomMorpherController.h"
+#include "obj/NiMorphData.h"
+#include "obj/NiInterpolator.h"
 
 //Definition of TYPE constant
 const Type NiGeomMorpherController::TYPE("NiGeomMorpherController", &NI_GEOM_MORPHER_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiGeomMorpherController.h b/obj/NiGeomMorpherController.h
index 9a0acd9e..33a4a7f3 100644
--- a/obj/NiGeomMorpherController.h
+++ b/obj/NiGeomMorpherController.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIGEOMMORPHERCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiMorphData.h"
-#include "obj/NiInterpolator.h"
+class NiMorphData;
+class NiInterpolator;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiKeyframeController.cpp b/obj/NiKeyframeController.cpp
index 6b3e9502..3616ee45 100644
--- a/obj/NiKeyframeController.cpp
+++ b/obj/NiKeyframeController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiKeyframeController.h"
+#include "obj/NiKeyframeData.h"
 
 //Definition of TYPE constant
 const Type NiKeyframeController::TYPE("NiKeyframeController", &NI_KEYFRAME_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiKeyframeController.h b/obj/NiKeyframeController.h
index 52ef4829..e5caed79 100644
--- a/obj/NiKeyframeController.h
+++ b/obj/NiKeyframeController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIKEYFRAMECONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiKeyframeData.h"
+class NiKeyframeData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiKeyframeData.h b/obj/NiKeyframeData.h
index 02908d34..9fcac8d1 100644
--- a/obj/NiKeyframeData.h
+++ b/obj/NiKeyframeData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIKEYFRAMEDATA_H_
 
 #include "AKeyedData.h"
+// Include structures
 #include "gen/KeyGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiLODNode.cpp b/obj/NiLODNode.cpp
index b5884ed1..c3ea8efd 100644
--- a/obj/NiLODNode.cpp
+++ b/obj/NiLODNode.cpp
@@ -3,6 +3,7 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiLODNode.h"
 #include "gen/LODRange.h"
+#include "obj/NiRangeLODData.h"
 
 //Definition of TYPE constant
 const Type NiLODNode::TYPE("NiLODNode", &NI_L_O_D_NODE_PARENT::TYPE );
diff --git a/obj/NiLODNode.h b/obj/NiLODNode.h
index 7e112403..5d33d6ca 100644
--- a/obj/NiLODNode.h
+++ b/obj/NiLODNode.h
@@ -5,9 +5,12 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NILODNODE_H_
 
 #include "NiNode.h"
+// Include structures
 #include "gen/LODRange.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiRangeLODData.h"
+class NiRangeLODData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiLightColorController.cpp b/obj/NiLightColorController.cpp
index 64671d68..c794a169 100644
--- a/obj/NiLightColorController.cpp
+++ b/obj/NiLightColorController.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiLightColorController.h"
+#include "obj/NiPosData.h"
+#include "obj/NiPoint3Interpolator.h"
 
 //Definition of TYPE constant
 const Type NiLightColorController::TYPE("NiLightColorController", &NI_LIGHT_COLOR_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiLightColorController.h b/obj/NiLightColorController.h
index 78e9ce88..a5496339 100644
--- a/obj/NiLightColorController.h
+++ b/obj/NiLightColorController.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NILIGHTCOLORCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPosData.h"
-#include "obj/NiPoint3Interpolator.h"
+class NiPosData;
+class NiPoint3Interpolator;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiLightDimmerController.cpp b/obj/NiLightDimmerController.cpp
index c9f3fccb..dd329225 100644
--- a/obj/NiLightDimmerController.cpp
+++ b/obj/NiLightDimmerController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiLightDimmerController.h"
+#include "obj/NiInterpolator.h"
 
 //Definition of TYPE constant
 const Type NiLightDimmerController::TYPE("NiLightDimmerController", &NI_LIGHT_DIMMER_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiLightDimmerController.h b/obj/NiLightDimmerController.h
index a0f38c01..2ac5b5de 100644
--- a/obj/NiLightDimmerController.h
+++ b/obj/NiLightDimmerController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NILIGHTDIMMERCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiInterpolator.h"
+class NiInterpolator;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiLookAtController.cpp b/obj/NiLookAtController.cpp
index 799b7fe6..a113acf5 100644
--- a/obj/NiLookAtController.cpp
+++ b/obj/NiLookAtController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiLookAtController.h"
+#include "obj/NiNode.h"
 
 //Definition of TYPE constant
 const Type NiLookAtController::TYPE("NiLookAtController", &NI_LOOK_AT_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiLookAtController.h b/obj/NiLookAtController.h
index 45afc427..96fad72e 100644
--- a/obj/NiLookAtController.h
+++ b/obj/NiLookAtController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NILOOKATCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiNode.h"
+class NiNode;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiLookAtInterpolator.cpp b/obj/NiLookAtInterpolator.cpp
index 2e7cc0cd..d3acdf2a 100644
--- a/obj/NiLookAtInterpolator.cpp
+++ b/obj/NiLookAtInterpolator.cpp
@@ -2,6 +2,9 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiLookAtInterpolator.h"
+#include "obj/NiNode.h"
+#include "obj/NiPoint3Interpolator.h"
+#include "obj/NiFloatInterpolator.h"
 
 //Definition of TYPE constant
 const Type NiLookAtInterpolator::TYPE("NiLookAtInterpolator", &NI_LOOK_AT_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiLookAtInterpolator.h b/obj/NiLookAtInterpolator.h
index 583fa001..e2ae7e9d 100644
--- a/obj/NiLookAtInterpolator.h
+++ b/obj/NiLookAtInterpolator.h
@@ -5,10 +5,12 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NILOOKATINTERPOLATOR_H_
 
 #include "NiInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiNode.h"
-#include "obj/NiPoint3Interpolator.h"
-#include "obj/NiFloatInterpolator.h"
+class NiNode;
+class NiPoint3Interpolator;
+class NiFloatInterpolator;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiMaterialColorController.cpp b/obj/NiMaterialColorController.cpp
index 59597742..a8f45263 100644
--- a/obj/NiMaterialColorController.cpp
+++ b/obj/NiMaterialColorController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiMaterialColorController.h"
+#include "obj/NiPosData.h"
 
 //Definition of TYPE constant
 const Type NiMaterialColorController::TYPE("NiMaterialColorController", &NI_MATERIAL_COLOR_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiMaterialColorController.h b/obj/NiMaterialColorController.h
index 6eb4d3b5..0afb64fe 100644
--- a/obj/NiMaterialColorController.h
+++ b/obj/NiMaterialColorController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIMATERIALCOLORCONTROLLER_H_
 
 #include "NiSingleInterpolatorController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPosData.h"
+class NiPosData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiMeshPSysData.cpp b/obj/NiMeshPSysData.cpp
index 8819f6cf..9ae0462a 100644
--- a/obj/NiMeshPSysData.cpp
+++ b/obj/NiMeshPSysData.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiMeshPSysData.h"
+#include "obj/AParticleModifier.h"
+#include "obj/NiNode.h"
 
 //Definition of TYPE constant
 const Type NiMeshPSysData::TYPE("NiMeshPSysData", &NI_MESH_P_SYS_DATA_PARENT::TYPE );
diff --git a/obj/NiMeshPSysData.h b/obj/NiMeshPSysData.h
index 0cbca428..c626afe1 100644
--- a/obj/NiMeshPSysData.h
+++ b/obj/NiMeshPSysData.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIMESHPSYSDATA_H_
 
 #include "APSysData.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/AParticleModifier.h"
-#include "obj/NiNode.h"
+class AParticleModifier;
+class NiNode;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiMorphData.h b/obj/NiMorphData.h
index 339ab5f0..4d34ca50 100644
--- a/obj/NiMorphData.h
+++ b/obj/NiMorphData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIMORPHDATA_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/Morph.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiMultiTargetTransformController.h b/obj/NiMultiTargetTransformController.h
index 622db8d7..9b70f15a 100644
--- a/obj/NiMultiTargetTransformController.h
+++ b/obj/NiMultiTargetTransformController.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIMULTITARGETTRANSFORMCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiNode;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiNode.cpp b/obj/NiNode.cpp
index 9fda856d..8722c162 100644
--- a/obj/NiNode.cpp
+++ b/obj/NiNode.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiNode.h"
+#include "obj/NiAVObject.h"
+#include "obj/NiDynamicEffect.h"
 
 //Definition of TYPE constant
 const Type NiNode::TYPE("NiNode", &NI_NODE_PARENT::TYPE );
diff --git a/obj/NiNode.h b/obj/NiNode.h
index 6f82633f..9aca2c55 100644
--- a/obj/NiNode.h
+++ b/obj/NiNode.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NINODE_H_
 
 #include "NiAVObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiAVObject.h"
-#include "obj/NiDynamicEffect.h"
+class NiAVObject;
+class NiDynamicEffect;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysAgeDeathModifier.cpp b/obj/NiPSysAgeDeathModifier.cpp
index 4d411468..e26760a2 100644
--- a/obj/NiPSysAgeDeathModifier.cpp
+++ b/obj/NiPSysAgeDeathModifier.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPSysAgeDeathModifier.h"
+#include "obj/NiPSysSpawnModifier.h"
 
 //Definition of TYPE constant
 const Type NiPSysAgeDeathModifier::TYPE("NiPSysAgeDeathModifier", &NI_P_SYS_AGE_DEATH_MODIFIER_PARENT::TYPE );
diff --git a/obj/NiPSysAgeDeathModifier.h b/obj/NiPSysAgeDeathModifier.h
index 915fc7d0..92c26031 100644
--- a/obj/NiPSysAgeDeathModifier.h
+++ b/obj/NiPSysAgeDeathModifier.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSAGEDEATHMODIFIER_H_
 
 #include "NiPSysModifier.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPSysSpawnModifier.h"
+class NiPSysSpawnModifier;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysBombModifier.h b/obj/NiPSysBombModifier.h
index cb8b0745..c429f272 100644
--- a/obj/NiPSysBombModifier.h
+++ b/obj/NiPSysBombModifier.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSBOMBMODIFIER_H_
 
 #include "NiPSysModifier.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiNode;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiPSysColliderManager.cpp b/obj/NiPSysColliderManager.cpp
index 22a9e20b..d738ef5f 100644
--- a/obj/NiPSysColliderManager.cpp
+++ b/obj/NiPSysColliderManager.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPSysColliderManager.h"
+#include "obj/NiPSysPlanarCollider.h"
 
 //Definition of TYPE constant
 const Type NiPSysColliderManager::TYPE("NiPSysColliderManager", &NI_P_SYS_COLLIDER_MANAGER_PARENT::TYPE );
diff --git a/obj/NiPSysColliderManager.h b/obj/NiPSysColliderManager.h
index 1f1d3361..4937792c 100644
--- a/obj/NiPSysColliderManager.h
+++ b/obj/NiPSysColliderManager.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSCOLLIDERMANAGER_H_
 
 #include "NiPSysModifier.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPSysPlanarCollider.h"
+class NiPSysPlanarCollider;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysColorModifier.cpp b/obj/NiPSysColorModifier.cpp
index 036a659b..c4bb2ab4 100644
--- a/obj/NiPSysColorModifier.cpp
+++ b/obj/NiPSysColorModifier.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPSysColorModifier.h"
+#include "obj/NiColorData.h"
 
 //Definition of TYPE constant
 const Type NiPSysColorModifier::TYPE("NiPSysColorModifier", &NI_P_SYS_COLOR_MODIFIER_PARENT::TYPE );
diff --git a/obj/NiPSysColorModifier.h b/obj/NiPSysColorModifier.h
index 209b31e4..3a5c75d9 100644
--- a/obj/NiPSysColorModifier.h
+++ b/obj/NiPSysColorModifier.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSCOLORMODIFIER_H_
 
 #include "NiPSysModifier.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiColorData.h"
+class NiColorData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysDragModifier.h b/obj/NiPSysDragModifier.h
index b5ee8f83..c50c6e58 100644
--- a/obj/NiPSysDragModifier.h
+++ b/obj/NiPSysDragModifier.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSDRAGMODIFIER_H_
 
 #include "NiPSysModifier.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiObject;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiPSysEmitterCtlr.cpp b/obj/NiPSysEmitterCtlr.cpp
index 90eb75c0..bca11836 100644
--- a/obj/NiPSysEmitterCtlr.cpp
+++ b/obj/NiPSysEmitterCtlr.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPSysEmitterCtlr.h"
+#include "obj/NiInterpolator.h"
 
 //Definition of TYPE constant
 const Type NiPSysEmitterCtlr::TYPE("NiPSysEmitterCtlr", &NI_P_SYS_EMITTER_CTLR_PARENT::TYPE );
diff --git a/obj/NiPSysEmitterCtlr.h b/obj/NiPSysEmitterCtlr.h
index e2da78a9..9bab7940 100644
--- a/obj/NiPSysEmitterCtlr.h
+++ b/obj/NiPSysEmitterCtlr.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSEMITTERCTLR_H_
 
 #include "APSysCtlr.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiInterpolator.h"
+class NiInterpolator;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysEmitterCtlrData.h b/obj/NiPSysEmitterCtlrData.h
index 620ee91c..471ef8cb 100644
--- a/obj/NiPSysEmitterCtlrData.h
+++ b/obj/NiPSysEmitterCtlrData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSEMITTERCTLRDATA_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/KeyGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiPSysGravityModifier.h b/obj/NiPSysGravityModifier.h
index 2ba15aff..f5f5b122 100644
--- a/obj/NiPSysGravityModifier.h
+++ b/obj/NiPSysGravityModifier.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSGRAVITYMODIFIER_H_
 
 #include "NiPSysModifier.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiNode;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiPSysMeshEmitter.cpp b/obj/NiPSysMeshEmitter.cpp
index 9c6302b8..ea7ff35f 100644
--- a/obj/NiPSysMeshEmitter.cpp
+++ b/obj/NiPSysMeshEmitter.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPSysMeshEmitter.h"
+#include "obj/NiTriBasedGeom.h"
 
 //Definition of TYPE constant
 const Type NiPSysMeshEmitter::TYPE("NiPSysMeshEmitter", &NI_P_SYS_MESH_EMITTER_PARENT::TYPE );
diff --git a/obj/NiPSysMeshEmitter.h b/obj/NiPSysMeshEmitter.h
index c4893403..dc89004f 100644
--- a/obj/NiPSysMeshEmitter.h
+++ b/obj/NiPSysMeshEmitter.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSMESHEMITTER_H_
 
 #include "NiPSysEmitter.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTriBasedGeom.h"
+class NiTriBasedGeom;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysMeshUpdateModifier.cpp b/obj/NiPSysMeshUpdateModifier.cpp
index da5c393d..a02d3a78 100644
--- a/obj/NiPSysMeshUpdateModifier.cpp
+++ b/obj/NiPSysMeshUpdateModifier.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPSysMeshUpdateModifier.h"
+#include "obj/NiNode.h"
 
 //Definition of TYPE constant
 const Type NiPSysMeshUpdateModifier::TYPE("NiPSysMeshUpdateModifier", &NI_P_SYS_MESH_UPDATE_MODIFIER_PARENT::TYPE );
diff --git a/obj/NiPSysMeshUpdateModifier.h b/obj/NiPSysMeshUpdateModifier.h
index 28b99c96..58ac752b 100644
--- a/obj/NiPSysMeshUpdateModifier.h
+++ b/obj/NiPSysMeshUpdateModifier.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSMESHUPDATEMODIFIER_H_
 
 #include "NiPSysModifier.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiNode.h"
+class NiNode;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysModifier.h b/obj/NiPSysModifier.h
index dd5f353d..5e3b7184 100644
--- a/obj/NiPSysModifier.h
+++ b/obj/NiPSysModifier.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSMODIFIER_H_
 
 #include "NiObject.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiParticleSystem;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiPSysPlanarCollider.cpp b/obj/NiPSysPlanarCollider.cpp
index 15b750fb..72225644 100644
--- a/obj/NiPSysPlanarCollider.cpp
+++ b/obj/NiPSysPlanarCollider.cpp
@@ -2,7 +2,9 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPSysPlanarCollider.h"
+#include "obj/NiPSysSpawnModifier.h"
 #include "obj/NiObject.h"
+#include "obj/NiNode.h"
 
 //Definition of TYPE constant
 const Type NiPSysPlanarCollider::TYPE("NiPSysPlanarCollider", &NI_P_SYS_PLANAR_COLLIDER_PARENT::TYPE );
diff --git a/obj/NiPSysPlanarCollider.h b/obj/NiPSysPlanarCollider.h
index 74b9c3a4..5fa74908 100644
--- a/obj/NiPSysPlanarCollider.h
+++ b/obj/NiPSysPlanarCollider.h
@@ -5,11 +5,12 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSPLANARCOLLIDER_H_
 
 #include "NiObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPSysSpawnModifier.h"
-#include "obj/NiObject.h"
-#include "obj/NiNode.h"
+class NiPSysSpawnModifier;
 class NiObject;
+class NiNode;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPSysVolumeEmitter.h b/obj/NiPSysVolumeEmitter.h
index 566728bb..8763a125 100644
--- a/obj/NiPSysVolumeEmitter.h
+++ b/obj/NiPSysVolumeEmitter.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPSYSVOLUMEEMITTER_H_
 
 #include "NiPSysEmitter.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiNode;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiParticleColorModifier.cpp b/obj/NiParticleColorModifier.cpp
index 24cb99aa..64dd82e1 100644
--- a/obj/NiParticleColorModifier.cpp
+++ b/obj/NiParticleColorModifier.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiParticleColorModifier.h"
+#include "obj/NiColorData.h"
 
 //Definition of TYPE constant
 const Type NiParticleColorModifier::TYPE("NiParticleColorModifier", &NI_PARTICLE_COLOR_MODIFIER_PARENT::TYPE );
diff --git a/obj/NiParticleColorModifier.h b/obj/NiParticleColorModifier.h
index 6ad1ac33..c5acf891 100644
--- a/obj/NiParticleColorModifier.h
+++ b/obj/NiParticleColorModifier.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPARTICLECOLORMODIFIER_H_
 
 #include "AParticleModifier.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiColorData.h"
+class NiColorData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiParticleMeshModifier.cpp b/obj/NiParticleMeshModifier.cpp
index 43042c10..65148c33 100644
--- a/obj/NiParticleMeshModifier.cpp
+++ b/obj/NiParticleMeshModifier.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiParticleMeshModifier.h"
+#include "obj/NiTriBasedGeom.h"
 
 //Definition of TYPE constant
 const Type NiParticleMeshModifier::TYPE("NiParticleMeshModifier", &NI_PARTICLE_MESH_MODIFIER_PARENT::TYPE );
diff --git a/obj/NiParticleMeshModifier.h b/obj/NiParticleMeshModifier.h
index c1d20eb2..cf2acbfe 100644
--- a/obj/NiParticleMeshModifier.h
+++ b/obj/NiParticleMeshModifier.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPARTICLEMESHMODIFIER_H_
 
 #include "AParticleModifier.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTriBasedGeom.h"
+class NiTriBasedGeom;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiParticleMeshesData.cpp b/obj/NiParticleMeshesData.cpp
index 3d0b7f13..c07c4fe6 100644
--- a/obj/NiParticleMeshesData.cpp
+++ b/obj/NiParticleMeshesData.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiParticleMeshesData.h"
+#include "obj/NiTriBasedGeom.h"
 
 //Definition of TYPE constant
 const Type NiParticleMeshesData::TYPE("NiParticleMeshesData", &NI_PARTICLE_MESHES_DATA_PARENT::TYPE );
diff --git a/obj/NiParticleMeshesData.h b/obj/NiParticleMeshesData.h
index 46b37d4b..b890f085 100644
--- a/obj/NiParticleMeshesData.h
+++ b/obj/NiParticleMeshesData.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPARTICLEMESHESDATA_H_
 
 #include "NiParticlesData.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTriBasedGeom.h"
+class NiTriBasedGeom;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiParticleSystem.cpp b/obj/NiParticleSystem.cpp
index a61ef722..4617ff67 100644
--- a/obj/NiParticleSystem.cpp
+++ b/obj/NiParticleSystem.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiParticleSystem.h"
+#include "obj/NiPSysModifier.h"
 
 //Definition of TYPE constant
 const Type NiParticleSystem::TYPE("NiParticleSystem", &NI_PARTICLE_SYSTEM_PARENT::TYPE );
diff --git a/obj/NiParticleSystem.h b/obj/NiParticleSystem.h
index d6c3ac91..17b21905 100644
--- a/obj/NiParticleSystem.h
+++ b/obj/NiParticleSystem.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPARTICLESYSTEM_H_
 
 #include "NiParticles.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPSysModifier.h"
+class NiPSysModifier;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiParticleSystemController.cpp b/obj/NiParticleSystemController.cpp
index 515d7b7d..f5ba01f4 100644
--- a/obj/NiParticleSystemController.cpp
+++ b/obj/NiParticleSystemController.cpp
@@ -3,6 +3,8 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiParticleSystemController.h"
 #include "gen/Particle.h"
+#include "obj/NiObject.h"
+#include "obj/AParticleModifier.h"
 
 //Definition of TYPE constant
 const Type NiParticleSystemController::TYPE("NiParticleSystemController", &NI_PARTICLE_SYSTEM_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiParticleSystemController.h b/obj/NiParticleSystemController.h
index 4173bcd9..a9e9513c 100644
--- a/obj/NiParticleSystemController.h
+++ b/obj/NiParticleSystemController.h
@@ -5,10 +5,13 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPARTICLESYSTEMCONTROLLER_H_
 
 #include "NiTimeController.h"
-#include "Ref.h"
-#include "obj/NiObject.h"
+// Include structures
 #include "gen/Particle.h"
-#include "obj/AParticleModifier.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
+class NiObject;
+class AParticleModifier;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPathController.cpp b/obj/NiPathController.cpp
index 1e42522a..f33de29e 100644
--- a/obj/NiPathController.cpp
+++ b/obj/NiPathController.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPathController.h"
+#include "obj/NiPosData.h"
+#include "obj/NiFloatData.h"
 
 //Definition of TYPE constant
 const Type NiPathController::TYPE("NiPathController", &NI_PATH_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiPathController.h b/obj/NiPathController.h
index a0a5d254..22806119 100644
--- a/obj/NiPathController.h
+++ b/obj/NiPathController.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPATHCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPosData.h"
-#include "obj/NiFloatData.h"
+class NiPosData;
+class NiFloatData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPathInterpolator.cpp b/obj/NiPathInterpolator.cpp
index a3363148..59b23a27 100644
--- a/obj/NiPathInterpolator.cpp
+++ b/obj/NiPathInterpolator.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPathInterpolator.h"
+#include "obj/NiPosData.h"
+#include "obj/NiFloatData.h"
 
 //Definition of TYPE constant
 const Type NiPathInterpolator::TYPE("NiPathInterpolator", &NI_PATH_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiPathInterpolator.h b/obj/NiPathInterpolator.h
index 9befdaf9..76808b20 100644
--- a/obj/NiPathInterpolator.h
+++ b/obj/NiPathInterpolator.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPATHINTERPOLATOR_H_
 
 #include "NiBlendInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPosData.h"
-#include "obj/NiFloatData.h"
+class NiPosData;
+class NiFloatData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPixelData.cpp b/obj/NiPixelData.cpp
index 10b3d4fc..ca4189f8 100644
--- a/obj/NiPixelData.cpp
+++ b/obj/NiPixelData.cpp
@@ -4,6 +4,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #include "obj/NiPixelData.h"
 #include "gen/MipMap.h"
 #include "gen/ByteArray.h"
+#include "obj/NiPalette.h"
 
 //Definition of TYPE constant
 const Type NiPixelData::TYPE("NiPixelData", &NI_PIXEL_DATA_PARENT::TYPE );
diff --git a/obj/NiPixelData.h b/obj/NiPixelData.h
index 18726f56..948e4962 100644
--- a/obj/NiPixelData.h
+++ b/obj/NiPixelData.h
@@ -5,11 +5,14 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPIXELDATA_H_
 
 #include "NiObject.h"
-#include "Ref.h"
-#include "obj/NiPalette.h"
+// Include structures
 #include "gen/MipMap.h"
 #include "gen/ByteArray.h"
 
+// Forward define of referenced blocks
+#include "Ref.h"
+class NiPalette;
+
 #include "gen/obj_defines.h"
 
 /*
diff --git a/obj/NiPoint3Interpolator.cpp b/obj/NiPoint3Interpolator.cpp
index 7431aae2..143c789d 100644
--- a/obj/NiPoint3Interpolator.cpp
+++ b/obj/NiPoint3Interpolator.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiPoint3Interpolator.h"
+#include "obj/NiPosData.h"
 
 //Definition of TYPE constant
 const Type NiPoint3Interpolator::TYPE("NiPoint3Interpolator", &NI_POINT3_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiPoint3Interpolator.h b/obj/NiPoint3Interpolator.h
index 8573c958..ec997102 100644
--- a/obj/NiPoint3Interpolator.h
+++ b/obj/NiPoint3Interpolator.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPOINT3INTERPOLATOR_H_
 
 #include "NiInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiPosData.h"
+class NiPosData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiPosData.h b/obj/NiPosData.h
index 3b6d0129..5cb657be 100644
--- a/obj/NiPosData.h
+++ b/obj/NiPosData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIPOSDATA_H_
 
 #include "AKeyedData.h"
+// Include structures
 #include "gen/KeyGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiRangeLODData.h b/obj/NiRangeLODData.h
index b600aeb8..9cc32c04 100644
--- a/obj/NiRangeLODData.h
+++ b/obj/NiRangeLODData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIRANGELODDATA_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/LODRange.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiSingleInterpolatorController.cpp b/obj/NiSingleInterpolatorController.cpp
index f6f99767..58f2c0b2 100644
--- a/obj/NiSingleInterpolatorController.cpp
+++ b/obj/NiSingleInterpolatorController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiSingleInterpolatorController.h"
+#include "obj/NiInterpolator.h"
 
 //Definition of TYPE constant
 const Type NiSingleInterpolatorController::TYPE("NiSingleInterpolatorController", &NI_SINGLE_INTERPOLATOR_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiSingleInterpolatorController.h b/obj/NiSingleInterpolatorController.h
index db7d35ca..e74a5def 100644
--- a/obj/NiSingleInterpolatorController.h
+++ b/obj/NiSingleInterpolatorController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NISINGLEINTERPOLATORCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiInterpolator.h"
+class NiInterpolator;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiSkinData.cpp b/obj/NiSkinData.cpp
index 2899331c..5f320b28 100644
--- a/obj/NiSkinData.cpp
+++ b/obj/NiSkinData.cpp
@@ -4,6 +4,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #include "obj/NiSkinData.h"
 #include "gen/SkinData.h"
 #include "gen/SkinWeight.h"
+#include "obj/NiSkinPartition.h"
 
 //Definition of TYPE constant
 const Type NiSkinData::TYPE("NiSkinData", &NI_SKIN_DATA_PARENT::TYPE );
diff --git a/obj/NiSkinData.h b/obj/NiSkinData.h
index 43842163..1b8872fb 100644
--- a/obj/NiSkinData.h
+++ b/obj/NiSkinData.h
@@ -5,10 +5,13 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NISKINDATA_H_
 
 #include "NiObject.h"
-#include "Ref.h"
-#include "obj/NiSkinPartition.h"
+// Include structures
 #include "gen/SkinData.h"
 
+// Forward define of referenced blocks
+#include "Ref.h"
+class NiSkinPartition;
+
 #include "gen/obj_defines.h"
 
 /*
diff --git a/obj/NiSkinInstance.cpp b/obj/NiSkinInstance.cpp
index d3313602..ebdf0975 100644
--- a/obj/NiSkinInstance.cpp
+++ b/obj/NiSkinInstance.cpp
@@ -4,6 +4,8 @@ All rights reserved.  Please see niflib.h for licence. */
 #include "obj/NiSkinInstance.h"
 #include "gen/Bones.h"
 #include "obj/NiNode.h"
+#include "obj/NiSkinData.h"
+#include "obj/NiSkinPartition.h"
 #include "obj/NiNode.h"
 
 //Definition of TYPE constant
diff --git a/obj/NiSkinInstance.h b/obj/NiSkinInstance.h
index 3eb376c3..4af90b17 100644
--- a/obj/NiSkinInstance.h
+++ b/obj/NiSkinInstance.h
@@ -5,10 +5,13 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NISKININSTANCE_H_
 
 #include "NiObject.h"
-#include "Ref.h"
-#include "obj/NiSkinData.h"
-#include "obj/NiSkinPartition.h"
+// Include structures
 #include "gen/Bones.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
+class NiSkinData;
+class NiSkinPartition;
 class NiNode;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiSkinPartition.h b/obj/NiSkinPartition.h
index 459ba4b1..4485d9be 100644
--- a/obj/NiSkinPartition.h
+++ b/obj/NiSkinPartition.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NISKINPARTITION_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/SkinPartition.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiSourceTexture.cpp b/obj/NiSourceTexture.cpp
index d89318b8..505e36a9 100644
--- a/obj/NiSourceTexture.cpp
+++ b/obj/NiSourceTexture.cpp
@@ -2,6 +2,8 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiSourceTexture.h"
+#include "obj/NiObject.h"
+#include "obj/NiPixelData.h"
 
 //Definition of TYPE constant
 const Type NiSourceTexture::TYPE("NiSourceTexture", &NI_SOURCE_TEXTURE_PARENT::TYPE );
diff --git a/obj/NiSourceTexture.h b/obj/NiSourceTexture.h
index 5f43f9f4..d66c614f 100644
--- a/obj/NiSourceTexture.h
+++ b/obj/NiSourceTexture.h
@@ -5,9 +5,11 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NISOURCETEXTURE_H_
 
 #include "NiObjectNET.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiObject.h"
-#include "obj/NiPixelData.h"
+class NiObject;
+class NiPixelData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiStringPalette.h b/obj/NiStringPalette.h
index 7480ec85..b825da78 100644
--- a/obj/NiStringPalette.h
+++ b/obj/NiStringPalette.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NISTRINGPALETTE_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/StringPalette.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiTextureEffect.cpp b/obj/NiTextureEffect.cpp
index 93b29c48..41778f72 100644
--- a/obj/NiTextureEffect.cpp
+++ b/obj/NiTextureEffect.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiTextureEffect.h"
+#include "obj/NiSourceTexture.h"
 
 //Definition of TYPE constant
 const Type NiTextureEffect::TYPE("NiTextureEffect", &NI_TEXTURE_EFFECT_PARENT::TYPE );
diff --git a/obj/NiTextureEffect.h b/obj/NiTextureEffect.h
index c589553d..dbc21bf6 100644
--- a/obj/NiTextureEffect.h
+++ b/obj/NiTextureEffect.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITEXTUREEFFECT_H_
 
 #include "NiDynamicEffect.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiSourceTexture.h"
+class NiSourceTexture;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiTextureTransformController.cpp b/obj/NiTextureTransformController.cpp
index 3d03b508..6980eda0 100644
--- a/obj/NiTextureTransformController.cpp
+++ b/obj/NiTextureTransformController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiTextureTransformController.h"
+#include "obj/NiFloatData.h"
 
 //Definition of TYPE constant
 const Type NiTextureTransformController::TYPE("NiTextureTransformController", &NI_TEXTURE_TRANSFORM_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiTextureTransformController.h b/obj/NiTextureTransformController.h
index 7c5596ca..04970ffe 100644
--- a/obj/NiTextureTransformController.h
+++ b/obj/NiTextureTransformController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITEXTURETRANSFORMCONTROLLER_H_
 
 #include "NiSingleInterpolatorController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiFloatData.h"
+class NiFloatData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiTexturingProperty.cpp b/obj/NiTexturingProperty.cpp
index 120ac0fe..bdc93e04 100644
--- a/obj/NiTexturingProperty.cpp
+++ b/obj/NiTexturingProperty.cpp
@@ -3,15 +3,24 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiTexturingProperty.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 #include "gen/ShaderTexDesc.h"
 #include "gen/TexDesc.h"
+#include "obj/NiSourceTexture.h"
 
 //Definition of TYPE constant
 const Type NiTexturingProperty::TYPE("NiTexturingProperty", &NI_TEXTURING_PROPERTY_PARENT::TYPE );
diff --git a/obj/NiTexturingProperty.h b/obj/NiTexturingProperty.h
index 44196ed2..f9560eb2 100644
--- a/obj/NiTexturingProperty.h
+++ b/obj/NiTexturingProperty.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITEXTURINGPROPERTY_H_
 
 #include "NiProperty.h"
+// Include structures
 #include "gen/TexDesc.h"
 #include "gen/ShaderTexDesc.h"
 
diff --git a/obj/NiTimeController.h b/obj/NiTimeController.h
index 5308e57a..452ffab5 100644
--- a/obj/NiTimeController.h
+++ b/obj/NiTimeController.h
@@ -5,6 +5,9 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITIMECONTROLLER_H_
 
 #include "NiObject.h"
+
+// Forward define of referenced blocks
+#include "Ref.h"
 class NiObject;
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiTransformInterpolator.cpp b/obj/NiTransformInterpolator.cpp
index 8c25f4d4..b302b89b 100644
--- a/obj/NiTransformInterpolator.cpp
+++ b/obj/NiTransformInterpolator.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiTransformInterpolator.h"
+#include "obj/NiTransformData.h"
 
 //Definition of TYPE constant
 const Type NiTransformInterpolator::TYPE("NiTransformInterpolator", &NI_TRANSFORM_INTERPOLATOR_PARENT::TYPE );
diff --git a/obj/NiTransformInterpolator.h b/obj/NiTransformInterpolator.h
index 0c5499a1..67c2344a 100644
--- a/obj/NiTransformInterpolator.h
+++ b/obj/NiTransformInterpolator.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITRANSFORMINTERPOLATOR_H_
 
 #include "NiInterpolator.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTransformData.h"
+class NiTransformData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiTriBasedGeom.cpp b/obj/NiTriBasedGeom.cpp
index 12b83fff..e12d35d4 100644
--- a/obj/NiTriBasedGeom.cpp
+++ b/obj/NiTriBasedGeom.cpp
@@ -2,6 +2,9 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiTriBasedGeom.h"
+#include "obj/NiTriBasedGeomData.h"
+#include "obj/NiSkinInstance.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type NiTriBasedGeom::TYPE("NiTriBasedGeom", &NI_TRI_BASED_GEOM_PARENT::TYPE );
diff --git a/obj/NiTriBasedGeom.h b/obj/NiTriBasedGeom.h
index 1a25b371..bd3878f9 100644
--- a/obj/NiTriBasedGeom.h
+++ b/obj/NiTriBasedGeom.h
@@ -5,10 +5,12 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITRIBASEDGEOM_H_
 
 #include "NiAVObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTriBasedGeomData.h"
-#include "obj/NiSkinInstance.h"
-#include "obj/NiObject.h"
+class NiTriBasedGeomData;
+class NiSkinInstance;
+class NiObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiTriBasedGeomData.cpp b/obj/NiTriBasedGeomData.cpp
index bade701c..3efae487 100644
--- a/obj/NiTriBasedGeomData.cpp
+++ b/obj/NiTriBasedGeomData.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiTriBasedGeomData.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type NiTriBasedGeomData::TYPE("NiTriBasedGeomData", &NI_TRI_BASED_GEOM_DATA_PARENT::TYPE );
diff --git a/obj/NiTriBasedGeomData.h b/obj/NiTriBasedGeomData.h
index 655aef1e..d29494bd 100644
--- a/obj/NiTriBasedGeomData.h
+++ b/obj/NiTriBasedGeomData.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITRIBASEDGEOMDATA_H_
 
 #include "NiObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiObject.h"
+class NiObject;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiTriShapeData.h b/obj/NiTriShapeData.h
index 6f6015a3..9facc177 100644
--- a/obj/NiTriShapeData.h
+++ b/obj/NiTriShapeData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NITRISHAPEDATA_H_
 
 #include "NiTriBasedGeomData.h"
+// Include structures
 #include "gen/MatchGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiUVController.cpp b/obj/NiUVController.cpp
index b0ae0b3c..de739390 100644
--- a/obj/NiUVController.cpp
+++ b/obj/NiUVController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiUVController.h"
+#include "obj/NiUVData.h"
 
 //Definition of TYPE constant
 const Type NiUVController::TYPE("NiUVController", &NI_U_V_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiUVController.h b/obj/NiUVController.h
index e7df1c01..150c13ac 100644
--- a/obj/NiUVController.h
+++ b/obj/NiUVController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIUVCONTROLLER_H_
 
 #include "NiTimeController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiUVData.h"
+class NiUVData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/NiUVData.h b/obj/NiUVData.h
index 389eb85e..aaaeae6c 100644
--- a/obj/NiUVData.h
+++ b/obj/NiUVData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIUVDATA_H_
 
 #include "NiObject.h"
+// Include structures
 #include "gen/KeyGroup.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/NiVisController.cpp b/obj/NiVisController.cpp
index 8809ae1c..5d92157f 100644
--- a/obj/NiVisController.cpp
+++ b/obj/NiVisController.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/NiVisController.h"
+#include "obj/NiVisData.h"
 
 //Definition of TYPE constant
 const Type NiVisController::TYPE("NiVisController", &NI_VIS_CONTROLLER_PARENT::TYPE );
diff --git a/obj/NiVisController.h b/obj/NiVisController.h
index cbbd0072..6e8a28dc 100644
--- a/obj/NiVisController.h
+++ b/obj/NiVisController.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _NIVISCONTROLLER_H_
 
 #include "NiSingleInterpolatorController.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiVisData.h"
+class NiVisData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/bhkEntity.cpp b/obj/bhkEntity.cpp
index 8bbbd871..65511234 100644
--- a/obj/bhkEntity.cpp
+++ b/obj/bhkEntity.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/bhkEntity.h"
+#include "obj/bhkShape.h"
 
 //Definition of TYPE constant
 const Type bhkEntity::TYPE("bhkEntity", &BHK_ENTITY_PARENT::TYPE );
diff --git a/obj/bhkEntity.h b/obj/bhkEntity.h
index d99bcf3a..b866af90 100644
--- a/obj/bhkEntity.h
+++ b/obj/bhkEntity.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKENTITY_H_
 
 #include "bhkWorldObject.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/bhkShape.h"
+class bhkShape;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/bhkLimitedHingeConstraint.h b/obj/bhkLimitedHingeConstraint.h
index 521455e3..6379fa75 100644
--- a/obj/bhkLimitedHingeConstraint.h
+++ b/obj/bhkLimitedHingeConstraint.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKLIMITEDHINGECONSTRAINT_H_
 
 #include "AbhkConstraint.h"
+// Include structures
 #include "gen/LimitedHingeDescriptor.h"
 
 #include "gen/obj_defines.h"
diff --git a/obj/bhkListShape.cpp b/obj/bhkListShape.cpp
index 185a0bb9..5ff2602c 100644
--- a/obj/bhkListShape.cpp
+++ b/obj/bhkListShape.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/bhkListShape.h"
+#include "obj/bhkShape.h"
 
 //Definition of TYPE constant
 const Type bhkListShape::TYPE("bhkListShape", &BHK_LIST_SHAPE_PARENT::TYPE );
diff --git a/obj/bhkListShape.h b/obj/bhkListShape.h
index 0b47e8d6..10519ec8 100644
--- a/obj/bhkListShape.h
+++ b/obj/bhkListShape.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKLISTSHAPE_H_
 
 #include "AbhkShapeCollection.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/bhkShape.h"
+class bhkShape;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/bhkMalleableConstraint.cpp b/obj/bhkMalleableConstraint.cpp
index f368eefb..c5918cf7 100644
--- a/obj/bhkMalleableConstraint.cpp
+++ b/obj/bhkMalleableConstraint.cpp
@@ -4,6 +4,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #include "obj/bhkMalleableConstraint.h"
 #include "gen/RagDollDescriptor.h"
 #include "gen/LimitedHingeDescriptor.h"
+#include "obj/NiObject.h"
 
 //Definition of TYPE constant
 const Type bhkMalleableConstraint::TYPE("bhkMalleableConstraint", &BHK_MALLEABLE_CONSTRAINT_PARENT::TYPE );
diff --git a/obj/bhkMalleableConstraint.h b/obj/bhkMalleableConstraint.h
index 14b4e866..c0407a11 100644
--- a/obj/bhkMalleableConstraint.h
+++ b/obj/bhkMalleableConstraint.h
@@ -5,11 +5,14 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKMALLEABLECONSTRAINT_H_
 
 #include "AbhkConstraint.h"
-#include "Ref.h"
-#include "obj/NiObject.h"
+// Include structures
 #include "gen/RagDollDescriptor.h"
 #include "gen/LimitedHingeDescriptor.h"
 
+// Forward define of referenced blocks
+#include "Ref.h"
+class NiObject;
+
 #include "gen/obj_defines.h"
 
 /*
diff --git a/obj/bhkMoppBvTreeShape.cpp b/obj/bhkMoppBvTreeShape.cpp
index 9ba19222..49d19a97 100644
--- a/obj/bhkMoppBvTreeShape.cpp
+++ b/obj/bhkMoppBvTreeShape.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/bhkMoppBvTreeShape.h"
+#include "obj/bhkShape.h"
 
 //Definition of TYPE constant
 const Type bhkMoppBvTreeShape::TYPE("bhkMoppBvTreeShape", &BHK_MOPP_BV_TREE_SHAPE_PARENT::TYPE );
diff --git a/obj/bhkMoppBvTreeShape.h b/obj/bhkMoppBvTreeShape.h
index 02fd5f54..26ba5abb 100644
--- a/obj/bhkMoppBvTreeShape.h
+++ b/obj/bhkMoppBvTreeShape.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKMOPPBVTREESHAPE_H_
 
 #include "bhkShape.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/bhkShape.h"
+class bhkShape;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/bhkNiTriStripsShape.cpp b/obj/bhkNiTriStripsShape.cpp
index 38266cd7..aac32116 100644
--- a/obj/bhkNiTriStripsShape.cpp
+++ b/obj/bhkNiTriStripsShape.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/bhkNiTriStripsShape.h"
+#include "obj/NiTriStripsData.h"
 
 //Definition of TYPE constant
 const Type bhkNiTriStripsShape::TYPE("bhkNiTriStripsShape", &BHK_NI_TRI_STRIPS_SHAPE_PARENT::TYPE );
diff --git a/obj/bhkNiTriStripsShape.h b/obj/bhkNiTriStripsShape.h
index 5b73ca5f..5688e6a9 100644
--- a/obj/bhkNiTriStripsShape.h
+++ b/obj/bhkNiTriStripsShape.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKNITRISTRIPSSHAPE_H_
 
 #include "bhkSphereRepShape.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/NiTriStripsData.h"
+class NiTriStripsData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/bhkPackedNiTriStripsShape.cpp b/obj/bhkPackedNiTriStripsShape.cpp
index a9e35d8a..15e19024 100644
--- a/obj/bhkPackedNiTriStripsShape.cpp
+++ b/obj/bhkPackedNiTriStripsShape.cpp
@@ -2,6 +2,7 @@
 All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/bhkPackedNiTriStripsShape.h"
+#include "obj/hkPackedNiTriStripsData.h"
 
 //Definition of TYPE constant
 const Type bhkPackedNiTriStripsShape::TYPE("bhkPackedNiTriStripsShape", &BHK_PACKED_NI_TRI_STRIPS_SHAPE_PARENT::TYPE );
diff --git a/obj/bhkPackedNiTriStripsShape.h b/obj/bhkPackedNiTriStripsShape.h
index 3ad34c6f..896ad9ff 100644
--- a/obj/bhkPackedNiTriStripsShape.h
+++ b/obj/bhkPackedNiTriStripsShape.h
@@ -5,8 +5,10 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKPACKEDNITRISTRIPSSHAPE_H_
 
 #include "AbhkShapeCollection.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/hkPackedNiTriStripsData.h"
+class hkPackedNiTriStripsData;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/bhkRigidBody.cpp b/obj/bhkRigidBody.cpp
index 3cfa6e79..a7646431 100644
--- a/obj/bhkRigidBody.cpp
+++ b/obj/bhkRigidBody.cpp
@@ -3,6 +3,7 @@ All rights reserved.  Please see niflib.h for licence. */
 
 #include "obj/bhkRigidBody.h"
 #include "gen/QuaternionXYZW.h"
+#include "obj/AbhkConstraint.h"
 
 //Definition of TYPE constant
 const Type bhkRigidBody::TYPE("bhkRigidBody", &BHK_RIGID_BODY_PARENT::TYPE );
diff --git a/obj/bhkRigidBody.h b/obj/bhkRigidBody.h
index c7b258fb..e18b35ba 100644
--- a/obj/bhkRigidBody.h
+++ b/obj/bhkRigidBody.h
@@ -5,9 +5,12 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _BHKRIGIDBODY_H_
 
 #include "bhkEntity.h"
+// Include structures
 #include "gen/QuaternionXYZW.h"
+
+// Forward define of referenced blocks
 #include "Ref.h"
-#include "obj/AbhkConstraint.h"
+class AbhkConstraint;
 
 #include "gen/obj_defines.h"
 
diff --git a/obj/hkPackedNiTriStripsData.h b/obj/hkPackedNiTriStripsData.h
index 8ce644f9..67726450 100644
--- a/obj/hkPackedNiTriStripsData.h
+++ b/obj/hkPackedNiTriStripsData.h
@@ -5,6 +5,7 @@ All rights reserved.  Please see niflib.h for licence. */
 #define _HKPACKEDNITRISTRIPSDATA_H_
 
 #include "AbhkShapeCollection.h"
+// Include structures
 #include "gen/hkTriangle.h"
 
 #include "gen/obj_defines.h"
-- 
GitLab