diff --git a/niflib.vcproj b/niflib.vcproj
index 0443027e686ba52e4800abba5e1853e331335db3..3d4b70dd10f2c233b93e648cc52ccddadd1ceb14 100644
--- a/niflib.vcproj
+++ b/niflib.vcproj
@@ -134,6 +134,9 @@
 			Name="Source Files"
 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+			<File
+				RelativePath=".\obj\AParticleModifier.cpp">
+			</File>
 			<File
 				RelativePath=".\NIF_IO.cpp">
 			</File>
@@ -170,6 +173,9 @@
 			Name="Header Files"
 			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+			<File
+				RelativePath=".\obj\AParticleModifier.h">
+			</File>
 			<File
 				RelativePath=".\NIF_IO.h">
 			</File>
@@ -179,6 +185,9 @@
 			<File
 				RelativePath=".\niflib.h">
 			</File>
+			<File
+				RelativePath=".\xml_extract.h">
+			</File>
 			<Filter
 				Name="obj"
 				Filter="">
diff --git a/obj/NiObject.h b/obj/NiObject.h
index f3da692e56f71594c3124011d8c1e3f3212c8394..678b47ea76b120e2ae1bdcde918731f54cfd9139 100644
--- a/obj/NiObject.h
+++ b/obj/NiObject.h
@@ -44,6 +44,7 @@ POSSIBILITY OF SUCH DAMAGE. */
 #include <vector>
 #include "NIF_IO.h"
 #include "Ref.h"
+#include "xml_extract.h"
 
 using namespace std;
 
diff --git a/obj/NiObjectNET.h b/obj/NiObjectNET.h
index 75f95a2bafabfdc100186ff5b00d6a6bdb1411f0..43bf9f91eb19ee107b91d7bf8aa3756cddc7a535 100644
--- a/obj/NiObjectNET.h
+++ b/obj/NiObjectNET.h
@@ -4,7 +4,6 @@ All rights reserved.  Please see niflib.h for licence. */
 #ifndef _NIOBJECTNET_H_
 #define _NIOBJECTNET_H_
 
-#include "xml_extract.h"
 #include "NiObject.h"
 
 /*
diff --git a/xml_extract.h b/xml_extract.h
index 3ff0db782da4595b37021e59e6f4ac37f4f1f867..8f73b46d24194b8b5f553726fb60e33eb1b7b4c5 100644
--- a/xml_extract.h
+++ b/xml_extract.h
@@ -46,7 +46,7 @@
 #define _XML_EXTRACT_H_
 
 #include "NIF_IO.h"
-#include "obj\NiObject.h"
+#include "obj\Ref.h"
 #include <iostream>
 #include <fstream>
 #include <vector>
@@ -1275,7 +1275,7 @@ NiObject::FixLinks( objects, link_stack, version ); \
 Ref<AParticleModifier > nextModifier; \
 AParticleModifier * previousModifier; \
 
-#define A_PARTICLE_MODIFIER_PARENTS NiObject \
+#define A_PARTICLE_MODIFIER_PARENTS NiObject
 
 #define A_PARTICLE_MODIFIER_CONSTRUCT \
 
@@ -1289,8 +1289,8 @@ link_stack.push_back( block_num ); \
 
 #define A_PARTICLE_MODIFIER_WRITE \
 NiObject::Write( out, link_map, version ); \
-NifStream( link_map[nextModifier], out, version ); \
-NifStream( link_map[previousModifier], out, version ); \
+NifStream( link_map[StaticCast<NiObject>(nextModifier)], out, version ); \
+NifStream( link_map[StaticCast<NiObject>(previousModifier)], out, version ); \
 
 #define A_PARTICLE_MODIFIER_STRING \
 stringstream out; \
@@ -1301,9 +1301,9 @@ return out.str(); \
 
 #define A_PARTICLE_MODIFIER_FIXLINKS \
 NiObject::FixLinks( objects, link_stack, version ); \
-nextModifier = blocks[link_stack.front()]; \
+nextModifier = DynamicCast<AParticleModifier>(objects[link_stack.front()]); \
 link_stack.pop_front(); \
-previousModifier = blocks[link_stack.front()]; \
+previousModifier = DynamicCast<AParticleModifier>(objects[link_stack.front()]); \
 link_stack.pop_front(); \
 
 #define A_P_SYS_MODIFIER_MEMBERS \