diff --git a/NIF_IO.h b/NIF_IO.h
index 027fbcb3dfb7a62282840ea21890110c9d8153ff..df54f33d314f2f730f1948c1a5e8216094c15af0 100644
--- a/NIF_IO.h
+++ b/NIF_IO.h
@@ -70,6 +70,19 @@ struct Key {
 	float continuity; /*!< The amount of continuity to use in tension, bias, continuity interpolation.  Ignored if key type is something else.*/
 };
 
+/*! Used to enable static arrays to be members of vectors */
+template<class T, int size>
+struct array {
+	T data[size];
+	T & operator[]( uint index ) {
+		return data[index];
+	}
+	T operator[]( uint index ) const {
+		return data[index];
+	}
+};
+
+
 struct HeaderString {
 	string header;
 };
diff --git a/gen/obj_defines.h b/gen/obj_defines.h
index 715233542745e33b2c6944084d6febcf8ccdecc1..5614600efb291d5e7bce0b2b29dc1df987b41375 100644
--- a/gen/obj_defines.h
+++ b/gen/obj_defines.h
@@ -1752,8 +1752,6 @@ if ( version <= 0x04000002 ) { \
 }; \
 if ( version <= 0x04020200 ) { \
   uvSets.resize(numUvSets); \
-  for (uint i1 = 0; i1 < numUvSets; i1++) \
-    uvSets[i1].resize(numVertices); \
   for (uint i1 = 0; i1 < numUvSets; i1++) { \
     for (uint i2 = 0; i2 < numVertices; i2++) { \
       NifStream( uvSets[i1][i2], in, version ); \
@@ -1762,8 +1760,6 @@ if ( version <= 0x04020200 ) { \
 }; \
 if ( version >= 0x0A000100 ) { \
   uvSets2.resize((numUvSets2 & 63)); \
-  for (uint i1 = 0; i1 < (numUvSets2 & 63); i1++) \
-    uvSets2[i1].resize(numVertices); \
   for (uint i1 = 0; i1 < (numUvSets2 & 63); i1++) { \
     for (uint i2 = 0; i2 < numVertices; i2++) { \
       NifStream( uvSets2[i1][i2], in, version ); \
@@ -2172,7 +2168,7 @@ return out.str(); \
 NiCollisionObject::FixLinks( objects, link_stack, version ); \
 
 #define BHK_CONVEX_VERTICES_SHAPE_MEMBERS \
-vector<float > unknownFloats1; \
+float unknownFloats1[7]; \
 uint num1; \
 vector<Float4 > unknownVectors1; \
 uint num2; \
@@ -2187,7 +2183,6 @@ vector<Float4 > unknownVectors2; \
 
 #define BHK_CONVEX_VERTICES_SHAPE_READ \
 bhkSphereRepShape::Read( in, link_stack, version ); \
-unknownFloats1.resize(7); \
 for (uint i0 = 0; i0 < 7; i0++) { \
   NifStream( unknownFloats1[i0], in, version ); \
 }; \
@@ -2236,7 +2231,7 @@ return out.str(); \
 bhkSphereRepShape::FixLinks( objects, link_stack, version ); \
 
 #define BHK_HINGE_CONSTRAINT_MEMBERS \
-vector<vector<float > > unknownFloats; \
+float unknownFloats[5][4]; \
 
 #define BHK_HINGE_CONSTRAINT_INCLUDE "AbhkConstraint.h" \
 
@@ -2246,9 +2241,6 @@ vector<vector<float > > unknownFloats; \
 
 #define BHK_HINGE_CONSTRAINT_READ \
 AbhkConstraint::Read( in, link_stack, version ); \
-unknownFloats.resize(5); \
-for (uint i0 = 0; i0 < 5; i0++) \
-  unknownFloats[i0].resize(4); \
 for (uint i0 = 0; i0 < 5; i0++) { \
   for (uint i1 = 0; i1 < 4; i1++) { \
     NifStream( unknownFloats[i0][i1], in, version ); \
@@ -2307,7 +2299,7 @@ AbhkRagdollConstraint::FixLinks( objects, link_stack, version ); \
 uint numSubShapes; \
 vector<Ref<bhkShape > > subShapes; \
 uint material; \
-vector<float > unknownFloats; \
+float unknownFloats[6]; \
 uint numUnknownInts; \
 vector<uint > unknownInts; \
 
@@ -2328,7 +2320,6 @@ for (uint i0 = 0; i0 < numSubShapes; i0++) { \
   link_stack.push_back( block_num ); \
 }; \
 NifStream( material, in, version ); \
-unknownFloats.resize(6); \
 for (uint i0 = 0; i0 < 6; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
@@ -2388,8 +2379,8 @@ uint unknownInt2; \
 Ref<NiObject > unknownLink1; \
 Ref<NiObject > unknownLink2; \
 uint unknownInt3; \
-vector<float > unknownFloats1; \
-vector<vector<float > > unknownFloats; \
+float unknownFloats1[3]; \
+float unknownFloats[7][4]; \
 float unknownFloat1; \
 float unknownFloat2; \
 
@@ -2410,13 +2401,9 @@ link_stack.push_back( block_num ); \
 NifStream( block_num, in, version ); \
 link_stack.push_back( block_num ); \
 NifStream( unknownInt3, in, version ); \
-unknownFloats1.resize(3); \
 for (uint i0 = 0; i0 < 3; i0++) { \
   NifStream( unknownFloats1[i0], in, version ); \
 }; \
-unknownFloats.resize(7); \
-for (uint i0 = 0; i0 < 7; i0++) \
-  unknownFloats[i0].resize(4); \
 for (uint i0 = 0; i0 < 7; i0++) { \
   for (uint i1 = 0; i1 < 4; i1++) { \
     NifStream( unknownFloats[i0][i1], in, version ); \
@@ -2489,7 +2476,7 @@ link_stack.pop_front(); \
 #define BHK_MOPP_BV_TREE_SHAPE_MEMBERS \
 Ref<bhkShape > shape; \
 uint material; \
-vector<byte > unknownBytes1; \
+byte unknownBytes1[8]; \
 float unknownFloat; \
 uint numUnknownBytes2; \
 vector<byte > unknownBytes2; \
@@ -2509,7 +2496,6 @@ bhkShape::Read( in, link_stack, version ); \
 NifStream( block_num, in, version ); \
 link_stack.push_back( block_num ); \
 NifStream( material, in, version ); \
-unknownBytes1.resize(8); \
 for (uint i0 = 0; i0 < 8; i0++) { \
   NifStream( unknownBytes1[i0], in, version ); \
 }; \
@@ -2569,7 +2555,7 @@ float unknownFloat1; \
 float unknownFloat2; \
 float unknownFloat3; \
 uint unknownInt2; \
-vector<float > unknownFloats; \
+float unknownFloats[8]; \
 
 #define BHK_MULTI_SPHERE_SHAPE_INCLUDE "bhkSphereRepShape.h" \
 
@@ -2584,7 +2570,6 @@ NifStream( unknownFloat1, in, version ); \
 NifStream( unknownFloat2, in, version ); \
 NifStream( unknownFloat3, in, version ); \
 NifStream( unknownInt2, in, version ); \
-unknownFloats.resize(8); \
 for (uint i0 = 0; i0 < 8; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
@@ -2615,9 +2600,9 @@ return out.str(); \
 bhkSphereRepShape::FixLinks( objects, link_stack, version ); \
 
 #define BHK_NI_TRI_STRIPS_SHAPE_MEMBERS \
-vector<float > unknownFloats1; \
-vector<uint > unknownInts1; \
-vector<float > unknownFloats2; \
+float unknownFloats1[2]; \
+uint unknownInts1[5]; \
+float unknownFloats2[3]; \
 uint unknownInt2; \
 uint numStripsData; \
 vector<Ref<NiTriStripsData > > stripsData; \
@@ -2634,15 +2619,12 @@ vector<uint > unknownInts3; \
 #define BHK_NI_TRI_STRIPS_SHAPE_READ \
 uint block_num; \
 bhkSphereRepShape::Read( in, link_stack, version ); \
-unknownFloats1.resize(2); \
 for (uint i0 = 0; i0 < 2; i0++) { \
   NifStream( unknownFloats1[i0], in, version ); \
 }; \
-unknownInts1.resize(5); \
 for (uint i0 = 0; i0 < 5; i0++) { \
   NifStream( unknownInts1[i0], in, version ); \
 }; \
-unknownFloats2.resize(3); \
 for (uint i0 = 0; i0 < 3; i0++) { \
   NifStream( unknownFloats2[i0], in, version ); \
 }; \
@@ -2717,10 +2699,10 @@ for (uint i0 = 0; i0 < numStripsData; i0++) { \
 
 #define BHK_PACKED_NI_TRI_STRIPS_SHAPE_MEMBERS \
 ushort numSubparts; \
-vector<vector<uint > > subparts; \
-vector<float > unknownFloats; \
+vector< array<uint,3> > subparts; \
+float unknownFloats[9]; \
 float scale; \
-vector<float > unknownFloats2; \
+float unknownFloats2[3]; \
 Ref<hkPackedNiTriStripsData > data; \
 
 #define BHK_PACKED_NI_TRI_STRIPS_SHAPE_INCLUDE "AbhkShapeCollection.h" \
@@ -2735,19 +2717,15 @@ uint block_num; \
 AbhkShapeCollection::Read( in, link_stack, version ); \
 NifStream( numSubparts, in, version ); \
 subparts.resize(numSubparts); \
-for (uint i0 = 0; i0 < numSubparts; i0++) \
-  subparts[i0].resize(3); \
 for (uint i0 = 0; i0 < numSubparts; i0++) { \
   for (uint i1 = 0; i1 < 3; i1++) { \
     NifStream( subparts[i0][i1], in, version ); \
   }; \
 }; \
-unknownFloats.resize(9); \
 for (uint i0 = 0; i0 < 9; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
 NifStream( scale, in, version ); \
-unknownFloats2.resize(3); \
 for (uint i0 = 0; i0 < 3; i0++) { \
   NifStream( unknownFloats2[i0], in, version ); \
 }; \
@@ -2801,8 +2779,8 @@ else \
 link_stack.pop_front(); \
 
 #define BHK_PRISMATIC_CONSTRAINT_MEMBERS \
-vector<vector<float > > unknownFloats; \
-vector<float > unknownFloats2; \
+float unknownFloats[8][4]; \
+float unknownFloats2[3]; \
 
 #define BHK_PRISMATIC_CONSTRAINT_INCLUDE "AbhkConstraint.h" \
 
@@ -2812,15 +2790,11 @@ vector<float > unknownFloats2; \
 
 #define BHK_PRISMATIC_CONSTRAINT_READ \
 AbhkConstraint::Read( in, link_stack, version ); \
-unknownFloats.resize(8); \
-for (uint i0 = 0; i0 < 8; i0++) \
-  unknownFloats[i0].resize(4); \
 for (uint i0 = 0; i0 < 8; i0++) { \
   for (uint i1 = 0; i1 < 4; i1++) { \
     NifStream( unknownFloats[i0][i1], in, version ); \
   }; \
 }; \
-unknownFloats2.resize(3); \
 for (uint i0 = 0; i0 < 3; i0++) { \
   NifStream( unknownFloats2[i0], in, version ); \
 }; \
@@ -2875,10 +2849,10 @@ return out.str(); \
 AbhkRagdollConstraint::FixLinks( objects, link_stack, version ); \
 
 #define BHK_RIGID_BODY_MEMBERS \
-vector<float > unknownFloats1; \
-vector<ushort > unknownShorts1; \
+float unknownFloats1[5]; \
+ushort unknownShorts1[4]; \
 uint layerCopy_; \
-vector<ushort > unknownShorts2; \
+ushort unknownShorts2[6]; \
 Vector3 translation; \
 float unknownFloat00; \
 QuaternionXYZW rotation; \
@@ -2886,7 +2860,7 @@ Vector3 linearVelocity; \
 float unknownFloat01; \
 Vector3 angularVelocity; \
 float unknownFloat02; \
-vector<float > transform_; \
+float transform_[12]; \
 Vector3 center; \
 float unknownFloat03; \
 float mass; \
@@ -2917,16 +2891,13 @@ vector<Ref<AbhkConstraint > > constraints; \
 #define BHK_RIGID_BODY_READ \
 uint block_num; \
 bhkEntity::Read( in, link_stack, version ); \
-unknownFloats1.resize(5); \
 for (uint i0 = 0; i0 < 5; i0++) { \
   NifStream( unknownFloats1[i0], in, version ); \
 }; \
-unknownShorts1.resize(4); \
 for (uint i0 = 0; i0 < 4; i0++) { \
   NifStream( unknownShorts1[i0], in, version ); \
 }; \
 NifStream( layerCopy_, in, version ); \
-unknownShorts2.resize(6); \
 for (uint i0 = 0; i0 < 6; i0++) { \
   NifStream( unknownShorts2[i0], in, version ); \
 }; \
@@ -2940,7 +2911,6 @@ NifStream( linearVelocity, in, version ); \
 NifStream( unknownFloat01, in, version ); \
 NifStream( angularVelocity, in, version ); \
 NifStream( unknownFloat02, in, version ); \
-transform_.resize(12); \
 for (uint i0 = 0; i0 < 12; i0++) { \
   NifStream( transform_[i0], in, version ); \
 }; \
@@ -3101,8 +3071,8 @@ return out.str(); \
 bhkRigidBody::FixLinks( objects, link_stack, version ); \
 
 #define BHK_SIMPLE_SHAPE_PHANTOM_MEMBERS \
-vector<float > unkownFloats; \
-vector<vector<float > > unknownFloats2; \
+float unkownFloats[7]; \
+float unknownFloats2[3][5]; \
 float unknownFloat; \
 
 #define BHK_SIMPLE_SHAPE_PHANTOM_INCLUDE "bhkEntity.h" \
@@ -3114,13 +3084,9 @@ float unknownFloat; \
 
 #define BHK_SIMPLE_SHAPE_PHANTOM_READ \
 bhkEntity::Read( in, link_stack, version ); \
-unkownFloats.resize(7); \
 for (uint i0 = 0; i0 < 7; i0++) { \
   NifStream( unkownFloats[i0], in, version ); \
 }; \
-unknownFloats2.resize(3); \
-for (uint i0 = 0; i0 < 3; i0++) \
-  unknownFloats2[i0].resize(5); \
 for (uint i0 = 0; i0 < 3; i0++) { \
   for (uint i1 = 0; i1 < 5; i1++) { \
     NifStream( unknownFloats2[i0][i1], in, version ); \
@@ -3207,7 +3173,7 @@ return out.str(); \
 bhkConvexShape::FixLinks( objects, link_stack, version ); \
 
 #define BHK_STIFF_SPRING_CONSTRAINT_MEMBERS \
-vector<vector<float > > unknownFloats; \
+float unknownFloats[2][4]; \
 float unknownFloat; \
 
 #define BHK_STIFF_SPRING_CONSTRAINT_INCLUDE "AbhkConstraint.h" \
@@ -3219,9 +3185,6 @@ float unknownFloat; \
 
 #define BHK_STIFF_SPRING_CONSTRAINT_READ \
 AbhkConstraint::Read( in, link_stack, version ); \
-unknownFloats.resize(2); \
-for (uint i0 = 0; i0 < 2; i0++) \
-  unknownFloats[i0].resize(4); \
 for (uint i0 = 0; i0 < 2; i0++) { \
   for (uint i1 = 0; i1 < 4; i1++) { \
     NifStream( unknownFloats[i0][i1], in, version ); \
@@ -3314,7 +3277,7 @@ return out.str(); \
 bhkTransformShape::FixLinks( objects, link_stack, version ); \
 
 #define B_S_BOUND_MEMBERS \
-vector<float > unknownFloats; \
+float unknownFloats[6]; \
 
 #define B_S_BOUND_INCLUDE "NiExtraData.h" \
 
@@ -3324,7 +3287,6 @@ vector<float > unknownFloats; \
 
 #define B_S_BOUND_READ \
 NiExtraData::Read( in, link_stack, version ); \
-unknownFloats.resize(6); \
 for (uint i0 = 0; i0 < 6; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
@@ -4143,7 +4105,7 @@ return out.str(); \
 NiObject::FixLinks( objects, link_stack, version ); \
 
 #define NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_MEMBERS \
-vector<float > unknownFloats; \
+float unknownFloats[6]; \
 
 #define NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_INCLUDE "NiBSplineInterpolator.h" \
 
@@ -4153,7 +4115,6 @@ vector<float > unknownFloats; \
 
 #define NI_B_SPLINE_COMP_FLOAT_INTERPOLATOR_READ \
 NiBSplineInterpolator::Read( in, link_stack, version ); \
-unknownFloats.resize(6); \
 for (uint i0 = 0; i0 < 6; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
@@ -4178,7 +4139,7 @@ NiBSplineInterpolator::FixLinks( objects, link_stack, version ); \
 #define NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_MEMBERS \
 Ref<NiBSplineData > data; \
 Ref<NiObject > unknownLink; \
-vector<float > unknownFloats; \
+float unknownFloats[6]; \
 
 #define NI_B_SPLINE_COMP_POINT3_INTERPOLATOR_INCLUDE "NiBSplineInterpolator.h" \
 
@@ -4194,7 +4155,6 @@ NifStream( block_num, in, version ); \
 link_stack.push_back( block_num ); \
 NifStream( block_num, in, version ); \
 link_stack.push_back( block_num ); \
-unknownFloats.resize(6); \
 for (uint i0 = 0; i0 < 6; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
@@ -4237,7 +4197,7 @@ link_stack.pop_front(); \
 #define NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_MEMBERS \
 Ref<NiBSplineData > data; \
 Ref<NiBSplineBasisData > basisData; \
-vector<float > unknown4; \
+float unknown4[17]; \
 
 #define NI_B_SPLINE_COMP_TRANSFORM_INTERPOLATOR_INCLUDE "NiBSplineInterpolator.h" \
 
@@ -4253,7 +4213,6 @@ NifStream( block_num, in, version ); \
 link_stack.push_back( block_num ); \
 NifStream( block_num, in, version ); \
 link_stack.push_back( block_num ); \
-unknown4.resize(17); \
 for (uint i0 = 0; i0 < 17; i0++) { \
   NifStream( unknown4[i0], in, version ); \
 }; \
@@ -4296,7 +4255,7 @@ link_stack.pop_front(); \
 #define NI_B_SPLINE_DATA_MEMBERS \
 uint unknownInt; \
 uint count; \
-vector<vector<byte > > unknownData; \
+vector< array<byte,2> > unknownData; \
 
 #define NI_B_SPLINE_DATA_INCLUDE "NiObject.h" \
 
@@ -4310,8 +4269,6 @@ NiObject::Read( in, link_stack, version ); \
 NifStream( unknownInt, in, version ); \
 NifStream( count, in, version ); \
 unknownData.resize(count); \
-for (uint i0 = 0; i0 < count; i0++) \
-  unknownData[i0].resize(2); \
 for (uint i0 = 0; i0 < count; i0++) { \
   for (uint i1 = 0; i1 < 2; i1++) { \
     NifStream( unknownData[i0][i1], in, version ); \
@@ -4458,8 +4415,8 @@ byte unknown3; \
 uint collisionType; \
 uint unknown5; \
 Vector3 unknown7; \
-vector<float > unknown6; \
-vector<float > unknown8; \
+float unknown6[8]; \
+float unknown8[15]; \
 
 #define NI_COLLISION_DATA_INCLUDE "NiObject.h" \
 
@@ -4481,13 +4438,11 @@ if ( (collisionType == 0) ) { \
   NifStream( unknown7, in, version ); \
 }; \
 if ( (collisionType == 2) ) { \
-  unknown6.resize(8); \
   for (uint i1 = 0; i1 < 8; i1++) { \
     NifStream( unknown6[i1], in, version ); \
   }; \
 }; \
 if ( (collisionType == 1) ) { \
-  unknown8.resize(15); \
   for (uint i1 = 0; i1 < 15; i1++) { \
     NifStream( unknown8[i1], in, version ); \
   }; \
@@ -5834,7 +5789,7 @@ uint numRotationKeys; \
 KeyType rotationType; \
 vector<Key<Quaternion > > quaternionKeys; \
 float unknownFloat; \
-vector<KeyGroup<float > > xyzRotations; \
+KeyGroup<float > xyzRotations[3]; \
 KeyGroup<Vector3 > translations; \
 KeyGroup<float > scales; \
 
@@ -5863,7 +5818,6 @@ if ( version <= 0x0A010000 ) { \
   }; \
 }; \
 if ( (rotationType == 4) ) { \
-  xyzRotations.resize(3); \
   for (uint i1 = 0; i1 < 3; i1++) { \
     NifStream( xyzRotations[i1].numKeys, in, version ); \
     if ( (xyzRotations[i1].numKeys != 0) ) { \
@@ -6326,9 +6280,9 @@ NiProperty::FixLinks( objects, link_stack, version ); \
 
 #define NI_MESH_P_SYS_DATA_MEMBERS \
 byte unknownByte11; \
-vector<vector<float > > unknownFloats3; \
-vector<vector<float > > unknownFloats4; \
-vector<vector<float > > unknownFloats5; \
+vector< array<float,4> > unknownFloats3; \
+vector< array<float,10> > unknownFloats4; \
+vector< array<float,12> > unknownFloats5; \
 uint unknownInt1; \
 Ref<AParticleModifier > modifier; \
 byte unknownByte2; \
@@ -6356,16 +6310,12 @@ if ( version >= 0x14000005 ) { \
 }; \
 if ( version <= 0x14000004 ) { \
   unknownFloats3.resize(numVertices); \
-  for (uint i1 = 0; i1 < numVertices; i1++) \
-    unknownFloats3[i1].resize(4); \
   for (uint i1 = 0; i1 < numVertices; i1++) { \
     for (uint i2 = 0; i2 < 4; i2++) { \
       NifStream( unknownFloats3[i1][i2], in, version ); \
     }; \
   }; \
   unknownFloats4.resize(numVertices); \
-  for (uint i1 = 0; i1 < numVertices; i1++) \
-    unknownFloats4[i1].resize(10); \
   for (uint i1 = 0; i1 < numVertices; i1++) { \
     for (uint i2 = 0; i2 < 10; i2++) { \
       NifStream( unknownFloats4[i1][i2], in, version ); \
@@ -6374,8 +6324,6 @@ if ( version <= 0x14000004 ) { \
 }; \
 if ( version >= 0x14000005 ) { \
   unknownFloats5.resize(numVertices); \
-  for (uint i1 = 0; i1 < numVertices; i1++) \
-    unknownFloats5[i1].resize(12); \
   for (uint i1 = 0; i1 < numVertices; i1++) { \
     for (uint i2 = 0; i2 < 12; i2++) { \
       NifStream( unknownFloats5[i1][i2], in, version ); \
@@ -6754,7 +6702,7 @@ NiNode::FixLinks( objects, link_stack, version ); \
 
 #define FX_WIDGET_MEMBERS \
 byte unknown1; \
-vector<byte > unknown292Bytes; \
+byte unknown292Bytes[292]; \
 
 #define FX_WIDGET_INCLUDE "NiNode.h" \
 
@@ -6766,7 +6714,6 @@ vector<byte > unknown292Bytes; \
 #define FX_WIDGET_READ \
 NiNode::Read( in, link_stack, version ); \
 NifStream( unknown1, in, version ); \
-unknown292Bytes.resize(292); \
 for (uint i0 = 0; i0 < 292; i0++) { \
   NifStream( unknown292Bytes[i0], in, version ); \
 }; \
@@ -7031,7 +6978,7 @@ if ( (lodType == 1) ) { \
 #define NI_PALETTE_MEMBERS \
 byte unknownByte; \
 uint numEntries_; \
-vector<vector<byte > > palette; \
+byte palette[256][4]; \
 
 #define NI_PALETTE_INCLUDE "NiObject.h" \
 
@@ -7044,9 +6991,6 @@ vector<vector<byte > > palette; \
 NiObject::Read( in, link_stack, version ); \
 NifStream( unknownByte, in, version ); \
 NifStream( numEntries_, in, version ); \
-palette.resize(256); \
-for (uint i0 = 0; i0 < 256; i0++) \
-  palette[i0].resize(4); \
 for (uint i0 = 0; i0 < 256; i0++) { \
   for (uint i1 = 0; i1 < 4; i1++) { \
     NifStream( palette[i0][i1], in, version ); \
@@ -7937,9 +7881,9 @@ uint greenMask; \
 uint blueMask; \
 uint alphaMask; \
 uint bitsPerPixel; \
-vector<byte > unknown8Bytes; \
+byte unknown8Bytes[8]; \
 uint unknownInt; \
-vector<byte > unknown54Bytes; \
+byte unknown54Bytes[54]; \
 Ref<NiPalette > palette; \
 uint numMipmaps; \
 uint bytesPerPixel; \
@@ -7963,7 +7907,6 @@ if ( version <= 0x0A020000 ) { \
   NifStream( blueMask, in, version ); \
   NifStream( alphaMask, in, version ); \
   NifStream( bitsPerPixel, in, version ); \
-  unknown8Bytes.resize(8); \
   for (uint i1 = 0; i1 < 8; i1++) { \
     NifStream( unknown8Bytes[i1], in, version ); \
   }; \
@@ -7972,7 +7915,6 @@ if ( ( version >= 0x0A010000 ) && ( version <= 0x0A020000 ) ) { \
   NifStream( unknownInt, in, version ); \
 }; \
 if ( version >= 0x14000004 ) { \
-  unknown54Bytes.resize(54); \
   for (uint i1 = 0; i1 < 54; i1++) { \
     NifStream( unknown54Bytes[i1], in, version ); \
   }; \
@@ -8339,9 +8281,9 @@ link_stack.pop_front(); \
 
 #define NI_P_SYS_BOMB_MODIFIER_MEMBERS \
 NiNode * unknownLink; \
-vector<uint > unknownInts1; \
-vector<float > unknownFloats; \
-vector<uint > unknownInts2; \
+uint unknownInts1[2]; \
+float unknownFloats[3]; \
+uint unknownInts2[2]; \
 
 #define NI_P_SYS_BOMB_MODIFIER_INCLUDE "NiPSysModifier.h" \
 
@@ -8355,15 +8297,12 @@ uint block_num; \
 NiPSysModifier::Read( in, link_stack, version ); \
 NifStream( block_num, in, version ); \
 link_stack.push_back( block_num ); \
-unknownInts1.resize(2); \
 for (uint i0 = 0; i0 < 2; i0++) { \
   NifStream( unknownInts1[i0], in, version ); \
 }; \
-unknownFloats.resize(3); \
 for (uint i0 = 0; i0 < 3; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
-unknownInts2.resize(2); \
 for (uint i0 = 0; i0 < 2; i0++) { \
   NifStream( unknownInts2[i0], in, version ); \
 }; \
@@ -8572,13 +8511,13 @@ return out.str(); \
 NiPSysVolumeEmitter::FixLinks( objects, link_stack, version ); \
 
 #define NI_P_SYS_DATA_MEMBERS \
-vector<vector<float > > unknownFloats4; \
+vector< array<float,10> > unknownFloats4; \
 bool unknownBool1; \
-vector<vector<byte > > unknownBytes; \
-vector<vector<byte > > unknownBytesAlt; \
+vector< array<byte,32> > unknownBytes; \
+vector< array<byte,28> > unknownBytesAlt; \
 byte unknownByte3; \
 bool unknownBool2; \
-vector<vector<byte > > unknownBytes2; \
+vector< array<byte,4> > unknownBytes2; \
 uint unknownInt1; \
 
 #define NI_P_SYS_DATA_INCLUDE "APSysData.h" \
@@ -8592,8 +8531,6 @@ uint unknownInt1; \
 APSysData::Read( in, link_stack, version ); \
 if ( version <= 0x0A020000 ) { \
   unknownFloats4.resize(numVertices); \
-  for (uint i1 = 0; i1 < numVertices; i1++) \
-    unknownFloats4[i1].resize(10); \
   for (uint i1 = 0; i1 < numVertices; i1++) { \
     for (uint i2 = 0; i2 < 10; i2++) { \
       NifStream( unknownFloats4[i1][i2], in, version ); \
@@ -8604,8 +8541,6 @@ if ( version >= 0x14000004 ) { \
   NifStream( unknownBool1, in, version ); \
   if ( (unknownBool1 != 0) ) { \
     unknownBytes.resize(numVertices); \
-    for (uint i2 = 0; i2 < numVertices; i2++) \
-      unknownBytes[i2].resize(32); \
     for (uint i2 = 0; i2 < numVertices; i2++) { \
       for (uint i3 = 0; i3 < 32; i3++) { \
         NifStream( unknownBytes[i2][i3], in, version ); \
@@ -8614,8 +8549,6 @@ if ( version >= 0x14000004 ) { \
   }; \
   if ( (unknownBool1 == 0) ) { \
     unknownBytesAlt.resize(numVertices); \
-    for (uint i2 = 0; i2 < numVertices; i2++) \
-      unknownBytesAlt[i2].resize(28); \
     for (uint i2 = 0; i2 < numVertices; i2++) { \
       for (uint i3 = 0; i3 < 28; i3++) { \
         NifStream( unknownBytesAlt[i2][i3], in, version ); \
@@ -8626,8 +8559,6 @@ if ( version >= 0x14000004 ) { \
   NifStream( unknownBool2, in, version ); \
   if ( (unknownBool2 != 0) ) { \
     unknownBytes2.resize(numVertices); \
-    for (uint i2 = 0; i2 < numVertices; i2++) \
-      unknownBytes2[i2].resize(4); \
     for (uint i2 = 0; i2 < numVertices; i2++) { \
       for (uint i3 = 0; i3 < 4; i3++) { \
         NifStream( unknownBytes2[i2][i3], in, version ); \
@@ -9617,7 +9548,7 @@ return out.str(); \
 NiParticlesData::FixLinks( objects, link_stack, version ); \
 
 #define NI_SCREEN_L_O_D_DATA_MEMBERS \
-vector<float > unknownFloats; \
+float unknownFloats[8]; \
 uint unknownCount; \
 vector<float > unknownFloats2; \
 
@@ -9630,7 +9561,6 @@ vector<float > unknownFloats2; \
 
 #define NI_SCREEN_L_O_D_DATA_READ \
 NiObject::Read( in, link_stack, version ); \
-unknownFloats.resize(8); \
 for (uint i0 = 0; i0 < 8; i0++) { \
   NifStream( unknownFloats[i0], in, version ); \
 }; \
@@ -9749,7 +9679,6 @@ for (uint i0 = 0; i0 < numBones; i0++) { \
   NifStream( boneList[i0].rotation, in, version ); \
   NifStream( boneList[i0].translation, in, version ); \
   NifStream( boneList[i0].scale, in, version ); \
-  boneList[i0].unknown4Floats.resize(4); \
   for (uint i1 = 0; i1 < 4; i1++) { \
     NifStream( boneList[i0].unknown4Floats[i1], in, version ); \
   }; \
@@ -9958,8 +9887,6 @@ for (uint i0 = 0; i0 < numSkinPartitionBlocks; i0++) { \
   }; \
   if ( version <= 0x0A000102 ) { \
     skinPartitionBlocks[i0].vertexWeights.resize(skinPartitionBlocks[i0].numVertices); \
-    for (uint i2 = 0; i2 < skinPartitionBlocks[i0].numVertices; i2++) \
-      skinPartitionBlocks[i0].vertexWeights[i2].resize(skinPartitionBlocks[i0].numWeightsPerVertex); \
     for (uint i2 = 0; i2 < skinPartitionBlocks[i0].numVertices; i2++) { \
       for (uint i3 = 0; i3 < skinPartitionBlocks[i0].numWeightsPerVertex; i3++) { \
         NifStream( skinPartitionBlocks[i0].vertexWeights[i2][i3], in, version ); \
@@ -9969,8 +9896,6 @@ for (uint i0 = 0; i0 < numSkinPartitionBlocks; i0++) { \
   if ( version >= 0x0A010000 ) { \
     if ( (skinPartitionBlocks[i0].hasVertexWeights != 0) ) { \
       skinPartitionBlocks[i0].vertexWeights.resize(skinPartitionBlocks[i0].numVertices); \
-      for (uint i3 = 0; i3 < skinPartitionBlocks[i0].numVertices; i3++) \
-        skinPartitionBlocks[i0].vertexWeights[i3].resize(skinPartitionBlocks[i0].numWeightsPerVertex); \
       for (uint i3 = 0; i3 < skinPartitionBlocks[i0].numVertices; i3++) { \
         for (uint i4 = 0; i4 < skinPartitionBlocks[i0].numWeightsPerVertex; i4++) { \
           NifStream( skinPartitionBlocks[i0].vertexWeights[i3][i4], in, version ); \
@@ -9987,8 +9912,6 @@ for (uint i0 = 0; i0 < numSkinPartitionBlocks; i0++) { \
   }; \
   if ( version <= 0x0A000102 ) { \
     skinPartitionBlocks[i0].strips.resize(skinPartitionBlocks[i0].numStrips); \
-    for (uint i2 = 0; i2 < skinPartitionBlocks[i0].numStrips; i2++) \
-      skinPartitionBlocks[i0].strips[i2].resize(skinPartitionBlocks[i0].stripLengths[i2]); \
     for (uint i2 = 0; i2 < skinPartitionBlocks[i0].numStrips; i2++) { \
       for (uint i3 = 0; i3 < skinPartitionBlocks[i0].stripLengths[i2]; i3++) { \
         NifStream( skinPartitionBlocks[i0].strips[i2][i3], in, version ); \
@@ -9998,8 +9921,6 @@ for (uint i0 = 0; i0 < numSkinPartitionBlocks; i0++) { \
   if ( version >= 0x0A010000 ) { \
     if ( (skinPartitionBlocks[i0].hasStrips != 0) ) { \
       skinPartitionBlocks[i0].strips.resize(skinPartitionBlocks[i0].numStrips); \
-      for (uint i3 = 0; i3 < skinPartitionBlocks[i0].numStrips; i3++) \
-        skinPartitionBlocks[i0].strips[i3].resize(skinPartitionBlocks[i0].stripLengths[i3]); \
       for (uint i3 = 0; i3 < skinPartitionBlocks[i0].numStrips; i3++) { \
         for (uint i4 = 0; i4 < skinPartitionBlocks[i0].stripLengths[i3]; i4++) { \
           NifStream( skinPartitionBlocks[i0].strips[i3][i4], in, version ); \
@@ -10016,8 +9937,6 @@ for (uint i0 = 0; i0 < numSkinPartitionBlocks; i0++) { \
   NifStream( skinPartitionBlocks[i0].hasBoneIndices, in, version ); \
   if ( (skinPartitionBlocks[i0].hasBoneIndices != 0) ) { \
     skinPartitionBlocks[i0].boneIndices.resize(skinPartitionBlocks[i0].numVertices); \
-    for (uint i2 = 0; i2 < skinPartitionBlocks[i0].numVertices; i2++) \
-      skinPartitionBlocks[i0].boneIndices[i2].resize(skinPartitionBlocks[i0].numWeightsPerVertex); \
     for (uint i2 = 0; i2 < skinPartitionBlocks[i0].numVertices; i2++) { \
       for (uint i3 = 0; i3 < skinPartitionBlocks[i0].numWeightsPerVertex; i3++) { \
         NifStream( skinPartitionBlocks[i0].boneIndices[i2][i3], in, version ); \
@@ -11583,7 +11502,7 @@ NiKeyframeData::FixLinks( objects, link_stack, version ); \
 Vector3 translation; \
 Quaternion rotation; \
 float scale; \
-vector<byte > unknownBytes; \
+byte unknownBytes[3]; \
 Ref<NiTransformData > data; \
 
 #define NI_TRANSFORM_INTERPOLATOR_INCLUDE "NiInterpolator.h" \
@@ -11600,7 +11519,6 @@ NifStream( translation, in, version ); \
 NifStream( rotation, in, version ); \
 NifStream( scale, in, version ); \
 if ( ( version >= 0x0A01006A ) && ( version <= 0x0A01006A ) ) { \
-  unknownBytes.resize(3); \
   for (uint i1 = 0; i1 < 3; i1++) { \
     NifStream( unknownBytes[i1], in, version ); \
   }; \
@@ -11807,8 +11725,6 @@ if ( version >= 0x0A010000 ) { \
 }; \
 if ( version <= 0x0A000102 ) { \
   points.resize(numStrips); \
-  for (uint i1 = 0; i1 < numStrips; i1++) \
-    points[i1].resize(stripLengths[i1]); \
   for (uint i1 = 0; i1 < numStrips; i1++) { \
     for (uint i2 = 0; i2 < stripLengths[i1]; i2++) { \
       NifStream( points[i1][i2], in, version ); \
@@ -11818,8 +11734,6 @@ if ( version <= 0x0A000102 ) { \
 if ( version >= 0x0A010000 ) { \
   if ( (hasPoints != 0) ) { \
     points.resize(numStrips); \
-    for (uint i2 = 0; i2 < numStrips; i2++) \
-      points[i2].resize(stripLengths[i2]); \
     for (uint i2 = 0; i2 < numStrips; i2++) { \
       for (uint i3 = 0; i3 < stripLengths[i2]; i3++) { \
         NifStream( points[i2][i3], in, version ); \
@@ -11915,7 +11829,7 @@ else \
 link_stack.pop_front(); \
 
 #define NI_U_V_DATA_MEMBERS \
-vector<KeyGroup<float > > uvGroups; \
+KeyGroup<float > uvGroups[4]; \
 
 #define NI_U_V_DATA_INCLUDE "NiObject.h" \
 
@@ -11925,7 +11839,6 @@ vector<KeyGroup<float > > uvGroups; \
 
 #define NI_U_V_DATA_READ \
 NiObject::Read( in, link_stack, version ); \
-uvGroups.resize(4); \
 for (uint i0 = 0; i0 < 4; i0++) { \
   NifStream( uvGroups[i0].numKeys, in, version ); \
   if ( (uvGroups[i0].numKeys != 0) ) { \
diff --git a/niflib.cpp b/niflib.cpp
index 40e9fe0b5436582b9765613a816af00db22f7a9b..2496c857d6f682a3a3b74bc1270109c5e2f5625f 100644
--- a/niflib.cpp
+++ b/niflib.cpp
@@ -274,7 +274,7 @@ vector<NiObjectRef> ReadNifList( istream & in ) {
 			}
 		}
 
-		//cout << endl << i << ":  " << blockName;
+		cout << endl << i << ":  " << blockName;
 
 		//Create Block of the type that was found
 		blocks[i] = CreateBlock(blockName);
diff --git a/obj/NiMeshPSysData.cpp b/obj/NiMeshPSysData.cpp
index c5f1f7ba207e0efae04647f02d8b272443ac7a51..b4f95cae5ff1d04737f4623cdd1a2c326e0dc6d9 100644
--- a/obj/NiMeshPSysData.cpp
+++ b/obj/NiMeshPSysData.cpp
@@ -26,7 +26,7 @@ string NiMeshPSysData::asString( bool verbose ) const {
 }
 
 void NiMeshPSysData::FixLinks( const vector<NiObjectRef> & objects, list<uint> & link_stack, unsigned int version ) {
-  NI_MESH_P_SYS_DATA_FIXLINKS
+	NI_MESH_P_SYS_DATA_FIXLINKS
 }
 
 const Type & NiMeshPSysData::GetType() const {