diff --git a/gen/AVObject.h b/gen/AVObject.h
index 96924240bf83df374e53729e33603090592ea68a..d7810069123984900fb37909f4c5e8cc1b8fd6f3 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 9f6cbd063262b2f87cf7d030544479d56327710e..4d52e49ccdba8deeaff91c8eff5b713e89f52813 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 407aa0fbeec9fa90f797a49f652e1c36833f6b49..8cbf106a0adb2794b96f6f41fe22cdfca41b7aa5 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 92c803315593b2f29b95536648fddcc3dc78f4d6..2abc3f3e3f45ab5cc6bad54320386421e6799fe9 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 334d8128d1f8af7e5066de2cc8a904ac674d1819..1324f6285ff74b38c370ff9da53510f72adf4d3e 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 f4b32de8c27b2240ad05d54194244230366ee996..0a20591d52df47a2ffb3f8cab9bae8741a9bb162 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 4e4dfb997dabedf1fa64ac4ce372c07e10d64c8d..2e6d2442f77797177226776237f8226e6ec41ead 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 bc1eea03c2170f6468832f2f47d8c751e7528b3d..a020b6218ad6320e284ea7f18249d99b0d5a2794 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 3a2673853d4c3252aba2ab58590cd149537ca13e..b7b987b6e8b9d448dd372ea2f8ad095b8e54ab6f 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 5dfdb116a56aa4cea2e9d4189100786a28791dc7..bceeb6230dee25f396576ebf38d98e4d600d1e02 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 dad364d73154351b4a5e2a6572b6e5bb0d3fb1c2..b3c1d06459983f36226bbe5338adc639b095885e 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 9ba6cf7eedd657eb091283696b04191715078802..828e5bc9b3bc1c9d824c38b52077f4d2edc61634 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 29ff9dab15346f95f66b13b151aa70a2d574d0de..cea98735d9bd7f1af7a4dc5c2c6bfa2dd40411e4 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 85848b403b81248f1ef01584e04660df1f86a7a0..f1275a4d13438651e0f2df1c54ad260903bcae6e 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 8f6b5eb5994835af62bf5f5d5371429c9b4d8326..aa65e6767f2932b7b5ddbb51b0be8910290a20e8 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 8606370f724d04d6e14f5651507acab183454a2d..e53394f335ab17f25082d66c143dd165609ae3e8 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 f0d062729830c887f2c9e0c034ec499b134395a7..877f21d717ea2a3572034e3de644b64867ec244c 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 1b338088a5e031b97fee1fc39512993cf5081c75..719185e6363e14761f668953a19ac0260f90326a 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 abed273faef0b37d0cdfd774f5f45508bd04bdb5..41abf21eb017b3e673e2c90659cd55a312895746 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 59aa54fd28febdd11ec0eecdd510d20c8e767752..77998aaaf14ce85062e6ee6902abf75c7ec87442 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 071aef7c104e40865a5d025c008f0061d8989a90..0b7150d1aad2f2473a8f3cdc039a18b95cbeb433 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 42ef40d5bfb3cffdc9225f6828bc20363a1ee6f8..4c4673e20c8b25be1582f5e545db21a3fdc0f381 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 ee9e401e4a9d1cb02100642419724a1a01f1f91a..6f1f2ba08a30b34012a3976adc12db13d1fde49f 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 7fe2582ffb99274f3acb1cef0d3531af584a2d72..05ea479b1c5e24b02859ed3ce1e88ac224b48e48 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 a5df11dd91df83d03d17d6c08472b6d6da7a725b..1cc0578d61bff32c26d8d9d5113fc7ef78f9868c 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 85012f21a84fa397469172ea4f83d2c67798bd1a..f568af7de27a9f3826875b4eb745a36073cddd07 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 07129a23a1834f0f5fb760dc6b5b7794ff7bdd60..05ba40fde5a22124b04b49fe656ee741db0bc007 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 27dc87d24a827210c6c61c9f95c8021ad59cc797..9534548c5012ed27b4163fb3f25ff74ebede1150 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 fff149336bc2d024c48ad1762acefbff3bb7cfa1..9ad12f51dd748914d27bfbd6755a4f50d4cc61f9 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 1e7c67f017d3813327ddbb4859f73694e010cea5..c3212dddb6044e9d5f0dcc78f36b11c55fd22cef 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 3b4843d11b5a2a001ea333c809489c500e5322a3..78747b71f5cf63e109ee011fad90c2680016cbd1 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 5997bb75a8cac2e6eb793fb616ae4ecb4f736a91..5b63a1a4aa9e60855f2dff818838403b6527ad96 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 6281937e35353ab671aa1d8f676c86af8758c9b3..26a46ba71025ecdf2651bf7027a3d45e5bd21f36 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 d463a4c5753e5ab2e6b206f2aedca628777b8f41..83ada955f7e36fe8693c7e425c869a0df435aad2 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 3e67a168cae58a250381ebceeee7154b46786959..4142c7e84ab0c24b514d26e834b835b6df3482b0 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 25455856b8bfd94903f8d1332b50b8db8b2fb57b..8b55f23a65d1a5b277a5eee53ade9c44ad2b4706 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 49e0990325cb5714a2cbb3a8c4cb03f8b3b256e4..d479f621c3a51b2fec61c194d1970c18cdc1c1ce 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 cca9b519ba22859f52850e31402913a84c75449a..9811cad55c8303d9a04bf5a1a2f7c0cf8a85222f 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 67208155aa77e0054ae6e5582137d9ec651ef89c..fdecbfcef8a7762f5e911a27120529321ccc12e5 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 38141eb1ed6685f3c0623bad4a0a262979bd60d7..e85d86be20fd3099ae4a5bab28352cd7903811a5 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 7a98bb86067799ea82d0711bc1ec0868511e079f..064b9829cb98f5b30f1b1eb5cba18bb307a7dbea 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 d450991b0261bfec368dd1bffc8f211695e9ef51..d6f48966687e2abbae54993d60a5580e50b8a03d 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 2e21bbc459338c920a273bb95866e7d66aab1a83..2ba31a21fd805844f7caddf383f6371cfcebcdd6 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 a40b125b6939c7e8a2ac46beb8b23154076d0786..f8434d42dc988b8c93b031c3b74a740b07177258 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 67fc8d2b5e12efd93672d2ca60c854232c7db308..d747210aa6cad9148dfd53ea2d9a56e8d703bd3d 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 3bf3cf24f7818d2de31c22ee68cc312578cb9dc7..2cac6b83cb2ee608cba11593e9c7b00cb0dad9c8 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 9c6aa54345b949bd39c21ff627a50dd0b8f2181c..04c509fa152f82454edac5a2b25da21c0fe8ec76 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 06410dba56d9b4d8b7429257a044bd6844119a1a..069a8874fa7639c4e890620d966443cd44cade0c 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 6e871db3cceb31591291c60ad7ce30e30e284a10..9fc575ed558ae93dc6c1dd749cd9b2846577f9aa 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 013dc47a20ad0f4ba304be2649ae43477e4cddbe..775dce7f0b23e35eb167a84262812c180cd60b66 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 04ecec742c25da00029c2d50db65a7f056daf219..6a6f93a2e160c91b5c30c1cf31e2a82626f41a1a 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 3d163f5ffd891adf7ff0ccc8adfa11b5913a7afb..b4950b7959084c3f60b1c5841df7d1e788ceaa56 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 9116b21ad0978a626ca3ac06cea4d15846ddc13f..31451463bde55daa8c0ac73fb9b8d7d540ef1af2 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 ffbbf5f7d0d46779287a71615e1257d38e92e623..e4251325ca4f6b152605f5096248857524d1d989 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 544c699b2076ab0c8c66459204ff0975192807ee..5097f32850ee2d4d0da54d62ea3a8f1da9b60cc6 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 9a6efc8609490935e6d78fbab0fb673594821879..171fe350198cebd4a0224c11235250b79989e8d2 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 e7c03e7f6463906734f5cd9343419a7e0d5f1662..1489896aa3a1008c15446f60710e3c4cc0a3c1e6 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 9670c048a59ff408a5007394144af13b9dce597b..376445390cbd24f58c83174e6c5e325b69794ff0 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 d6ba57dd3a2269f82dadab8acdde35bbffa81e9e..b9a82e53751aa553547399091d65ddbcad8501d4 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 743ae9402e7406bfea7d17aca3355c0596677dc0..37d988ced7b7c012f658df212458515fe6beea72 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 0148876c919ba95cc9c4972b9021f5dd655947bb..82d8adea1e1d355456169a5e8f0675715ff78881 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 ecb89d2b45696fd30eef02c69b1f64e60a9a7466..0d15959ce66023c09ef76210498ea7817ab995bb 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 58c57472c1e43943f334f259dfc19ffae2727fdf..b41f5fdeebe3305113ae5c7e4a2a06789cd5c12b 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 8d00b8b1143d40872afc620256d027fd8cea2e26..a96da209490459a118a377fdce4b79f9bd0f1ead 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 9a0acd9e4f6da557a7c31e1663d5cc6b9dcfece3..33a4a7f328340945f4425061abf4971ae308f063 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 6b3e95021357dc81827bf42745f4c958285b8188..3616ee45526f8d6add9ba13a624687705f1947f8 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 52ef482906712098d8a95e2298275a2ae5f5974d..e5caed79423d41230f58cbff486ab75a13d1c777 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 02908d34f84a1375eaa2984e90a41572d74a237b..9fcac8d124be90b0e89ede078b15a2b134d57906 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 b5884ed11b5c20c4b223a3267f43b174114508a1..c3ea8efdafc2bdfcc852c1da587e306c2ef750a0 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 7e11240349932a888bef6e1ec29e75ea9149045a..5d33d6cab212719bfe48b4c7105849f6b29a97f3 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 64671d68d66ae4d1a425a9fc7f2ca4e65144946d..c794a169021a8d432345aaacf38d473043a83ed3 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 78e9ce88fa102391224828d8dda1a368f827b70b..a549633964c89970a64dcc7ef8e7c5adef190088 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 c9f3fccb5673a214c7f939364c318ac1954f049a..dd329225b3f20d2b5ac6c5d1923cc07775014c3f 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 a0f38c01f6f8c86b86886ee71f79f25661b10195..2ac5b5de47d6b8897014e93db0457e549a570962 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 799b7fe6af67ae48b49fadb131efd224e1b91246..a113acf53099f007a96355651755f0b192dc13a8 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 45afc4273bf0f5451dc330b205ebdd53175e08b6..96fad72eb60cf2afc33075632fe6dc181c3290e5 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 2e7cc0cd25b63e5b1dad1374cc4b7f962573a747..d3acdf2a4c6b8ae40d24f94566aaeefb1ed15aea 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 583fa00134830dcf788d24dcd14989be68cd4bfc..e2ae7e9d55bf982003d05bab2d2da2e9e197d831 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 59597742c125f97dd7df8185ddfc48fc6ccfe2ac..a8f4526339ca285ebd97972f6ce55c1c0f059bab 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 6eb4d3b5edd36048d13a5f63c0ab8675ce779d2e..0afb64fe72e708080457fd7fe1821d7b9a82c641 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 8819f6cf02355132107d0c6219665c24bdb28736..9ae0462ad4df1a62875f3c60a15ab9653c85acd5 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 0cbca428831a28488cb63d4f5404805e6fef4353..c626afe12fd6d0059f525c9c364a51c653ac60da 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 339ab5f092e7566fd1c965981d59054b62c5673f..4d34ca50e816b215728d34417660b92c8a425d86 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 622db8d7402c69f4e23e44bf7b522768e338200d..9b70f15a71c654fa5a3d660b0ea0fc8e426b2a51 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 9fda856d42de4a8781d2715763a4e6fd23f2514b..8722c1620a8970eda454eea563e71c83f015fe81 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 6f82633fa0360bdf0141d2308e0463f1bc1122d3..9aca2c55e0522c0b4b2940c0769ed1fd25360c3e 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 4d4114682890470ab9074b66a8409fb632a85dce..e26760a2916d76264bd79a676a1a7257ec07b35f 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 915fc7d07dbe5a8ea33ace80150286e28eb8136c..92c260314bf8abcf2c819bca473652d3b9959739 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 cb8b0745d524cd50b530d77a1c8b7f26fa2fce47..c429f272a18ef8ccfc3942db5e83df4de5d77478 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 22a9e20b52b53c53a4bfb05d7ae200984ccba130..d738ef5febc17040990732bdef81dcbd73540c26 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 1f1d3361471314e398a0a53bd89730b61d7ee5c3..4937792c5b30f7b85b0e4584858e34b1e1f9568d 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 036a659bd06b570c9a1dc70077e70d82ba779606..c4bb2ab43c891a2f1731c66e339025e939c93617 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 209b31e45f45ac41f164fe50924cffb05a097908..3a5c75d9ce78d46eeb71b6cd0fc7a5cc708c19c7 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 b5ee8f83684177dd6564f3124a46a2f05f9315f8..c50c6e586b1a9f1ff2b07462679816f5afb293d9 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 90eb75c0844bccb87b10d974bd7983b28566d87e..bca11836892d1e4a3c9efe895b6803e2965923b4 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 e2da78a9ba36c31b2af7c7f8b92a4da5a1bcbc52..9bab79407e5a34cd992c64f20c1c83380c7d84a3 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 620ee91ce37e7aab36b90202a3d89f5ce72e388a..471ef8cbb6d8d4c99986a2a4b0d3dbcec0209714 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 2ba15aff66b923e612ca859ea95cbe1d0430b105..f5f5b122d78cd81a772de2cb0cc2e01832b6a5e1 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 9c6302b8cdfc111676300a44c60606e7825c05e7..ea7ff35f75fde85540036acc793dc71979e3f879 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 c48934033eb5e35ec29758454756d6f7ca0bdcf5..dc89004f4e4cb142da59592a066086fe4ee8afc5 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 da5c393d46b71759ba5ee00db0cd1e086649a60d..a02d3a7868c73fdc5662d4937cdfaf933f9700b6 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 28b99c960eb3c4ea0473c078a4b252214cdc006c..58ac752bab09b38f4955c363a6f2d6eca713288f 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 dd5f353dd754e996c1897e55b0311533ac250bc7..5e3b7184659fa2f1a428d1bd74eff2e49513db37 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 15b750fbb880eccabddb7a80f1d619a980463145..7222564480d9ce3ae4a6df7cdff5d55d84759bdc 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 74b9c3a4a14508da025234b3fb89a249b35e1d10..5fa7490866b21e6cc57a1aaf81915c29abfa1af1 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 566728bbc4c89aed2aef96056490690efa086b4e..8763a125ec37f0f6dd3d54848d49ff3ea687a284 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 24cb99aae10f9a994ec41f3eaeff99d6d90221d6..64dd82e1f874d2ec5606fbef433a9e146abe369e 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 6ad1ac33fca6b6e12c7cda869c437c62cee87b93..c5acf8911e0f58a72e8f8558577334038db3b35c 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 43042c10bd54b22b39464275fca2fcff575136c7..65148c3309561ae77ad0abea3bced321ed776433 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 c1d20eb23260f28aa1c0a298462709a8b91e1af6..cf2acbfe62db0b9091728323fcc195917a37196f 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 3d0b7f13335f4880aa272e383337cd9f322dc401..c07c4fe6af399a8a6e3bbf81788c547b62f20d1f 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 46b37d4b67c733dd4a975ad7717aa8d4d55e9aeb..b890f085ac8ad55f33db721921af80ad064dd0f6 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 a61ef7222550f5bf7ddf9a4fcd91464132006cd7..4617ff67b84dfb50236ae8cc66f9160f3b516b8b 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 d6c3ac91bbbf98f9b9270d7b87def4922e266d06..17b2190592a24d53a41452d0286bddbf91b302d1 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 515d7b7de0a504f21e2fb6dac7f44f49b0f20342..f5ba01f4b7bed51412dab5528b8c750b66f955d1 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 4173bcd94f0d26f64acd60c40cc59e8c974ee120..a9e9513c6fae885df2208bf0bd9da870048792e3 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 1e42522a26b1837d97f10a5a99967ebfac1be42f..f33de29e0b366ab1be8d211968beda727edfc94b 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 a0a5d2542a02d57ba6232c54bdb4ef869a7b1373..22806119011dba82dc621eb9071bfb1113b78380 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 a3363148e7fa85ec1b4e2e8ff084530fa270e92e..59b23a277230bc1a9ccd2f67d541991802959128 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 9befdaf9c25229503ef81f0fd6eee447e4db99bd..76808b204a035299ee8ab33ba905c04a9994aed3 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 10b3d4fc40e10c53997150dba641df9bb47c640d..ca4189f83dd6777d0e1921368db9ffd7c78eb196 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 18726f56d7daf169d30b60520c83d7abfcf324d2..948e49622599aae2bc27f49b7b728f51ddc93c20 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 7431aae201e64d3e67a7096c570d62d97112b847..143c789d6c4814b11555e77a406ec7a94ce7e7a3 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 8573c958bb0d04d06178e8ab50e81a50e2b1a479..ec997102dfdd9eaf8a6af6c4bab1354f0687f868 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 3b6d0129978ad9d36283c89f7fdf1435322cf090..5cb657bedb6e15e1a571f1e605d81e8cb836e269 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 b600aeb83698d1c5e7bb3c025ad697c21f7cd127..9cc32c044a56b956c8fc747eff03e8bfdf7333c8 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 f6f99767cae77e10f54f5b4f20e62782e55f65cb..58f2c0b234f7929bb465e62f7508540c582dcafb 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 db7d35ca71fd9a90c1de19a76f4173788b8b940f..e74a5defe29034500bdc3006bc23e5278a9a0734 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 2899331c4127f1431acc79109b5c20aef5530d54..5f320b280c4acc0a35ea5ad03c3f547466fab115 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 43842163ffd7b7d832043725b01498edf9dad83b..1b8872fba0fab8995d9548fb5a37ecb262e7324d 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 d3313602c866ae037835fa9c96a9ece212daa7c8..ebdf097529c701ce578c9e396df418a65736b7e7 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 3eb376c3713d4464757a2af363a6182d398c9603..4af90b17fce3336654c5608b2c5170d3f1807526 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 459ba4b1ee13cc5a6b5a7520d5ad46ad54c3c0bb..4485d9bedf63c06c785d817a483e446f4dc7958c 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 d89318b87dabfcab0bba2e214b11177827934fe2..505e36a971bf33126cb07df55be1cf5806a3503e 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 5f43f9f45d9425a86c0303e45a43f19385e3da69..d66c614fd1f830e13f1bb99f56af57c5607b9279 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 7480ec851825d1866b2cf7fa1376aa90c97c9caa..b825da788b995a1346098f2a328a8a17ac7ddc84 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 93b29c480943dc85619701e5db0df2103c191b2f..41778f72f55d8f3aaba6ce24de890337224bc402 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 c589553d12166c10c556a5be83c42de7c969a5ab..dbc21bf64fdbcbd6b1d7d01c68560aed1b5e0f46 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 3d03b5085b34f7d0c206453d84c185a03b3285d3..6980eda03c7eb0b2862855435514fa981423a5fc 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 7c5596cadeb8e8f0fc6347c3318bdd5238818b8a..04970ffee83f4babdb588b57457d77328f03d24d 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 120ac0feb02f2906421fc7e16e99429f6220eeae..bdc93e04cd0d7e1da4ead930dc203830056a5ad3 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 44196ed2c36c6ca2decddcf2f15ac10a3c7acf69..f9560eb2bc6ce90f5185e2fc921df3dc6f6183a6 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 5308e57a4c0ad2136f934e9ddc08683218f3528d..452ffab5f6b06cb32019d96b80486ddf53b4dc61 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 8c25f4d45f727b81e020d243d8eaeb421333b9a4..b302b89bca12bc98015f7143085a6d9bf30fefc5 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 0c5499a1744fe18b14e3dffcd321a06ed8f6a35c..67c2344acd33ac25abc261b3b309d0c3d2913956 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 12b83fff07bb9bfc7c3f3c810ea74703c8c34c8c..e12d35d4e1f0f9b3e3ea83b980874a4a7ea077b6 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 1a25b371bac5608a5b8070a6b5a5ced5e5543554..bd3878f9dd1a0ed2392627e9c9e080e02eba3eb7 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 bade701ca9a57f62943df90022c242e14993b9f4..3efae487ff94572d1643759cc6a43dbdbc53742e 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 655aef1ed2323f3cdbae69a1b187434f53244b4b..d29494bd57042190a4bce55be847b32e9d912776 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 6f6015a32029f6428a711d559b27644700ffde5a..9facc177d77e924ed2ae9935b95a1b7567112cd6 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 b0ae0b3c2da9307f9de710aa453bcae01a7a8038..de739390575c02ebe5dd9b5b4abc21538ed1de81 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 e7df1c015071c8e2df5ff882bcf88f24a77e4f89..150c13aced115176f78548fe989f0b5c81cb0529 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 389eb85ed9d0883e5b2e67bd2fa6eaa2a4b21bcd..aaaeae6c9638283720f99f8c87df2081e99bcb4a 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 8809ae1cce3c27dbde57c4fc8a9ad9f984438478..5d92157f1e59c41924a6743e7186b10dc9c3ea72 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 cbbd0072823121656465a217e63c8749c0c62ea1..6e8a28dc6d2750740884b097a68270efc3ef4b35 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 8bbbd87104b4cb89662f5e851cb10192fe41f7b7..65511234b354e6cf82ddd70ad9e3ce4cf2ba39a6 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 d99bcf3a715e1b1ae4a0b87f8c8a7e90729031df..b866af90048928e7e90b17de3481b425a8c3971b 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 521455e3613c74308b0d3e431508a9a4d5bd7509..6379fa75f5b9a9c9db06145fe20ea8f0cf76323c 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 185a0bb93ba2344b6a2b31e91c24db5104e18ceb..5ff2602c5a8070af245bc0b41d57cb5293556ba8 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 0b47e8d6860ba663cefa9c0ccb7f87b4049de8b3..10519ec85fcb66e61aa74239b746cd552a4eec25 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 f368eefb6c894f714d3e4202e7552e1387a11c00..c5918cf71eabcb2df7dfb11065ecca6b09edb8fc 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 14b4e866023462a5974404aed1e3c24f3c5fabd4..c0407a11b51e993e8d956bdd09aa427a221a8d50 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 9ba19222aae7ea0527ca999b9934c4fa2e972e33..49d19a97be21c47eb4dbf217719523e1f4988df2 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 02fd5f540ff916e2a2209b81c762b5ab12382a03..26ba5abb3a35631b42c98593e7aea7ac9ce27930 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 38266cd72eb4d44ff28d33675dd62f076affe0aa..aac321165da322de9e19570e9674454b9be35de6 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 5b73ca5fc3fa177b7b501feac046dd5ce6434757..5688e6a91d0db8bae1fb96becb567d8a125f87ec 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 a9e35d8ac14affaa2a3f666085730669d1540406..15e19024890ddf85818dcade2324f095fd056904 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 3ad34c6fcceaee704650e04e91a02d433ac2d00e..896ad9ff58f271a359afc5267b5a4f360fbf41f1 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 3cfa6e7963c120bab1347343b13b9eb8a344b80b..a76464310fd73aad8f91049ac9e4268691b016a2 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 c7b258fb02121901e6217fb577d52431c6b8d6f6..e18b35badfff7477a58b144836981d44105f59fd 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 8ce644f9e3dbdc4cbbd9350a8668e4c90e61569c..67726450472f4bad52d8639bee567e4ac2a8b45c 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"