diff --git a/gen/obj_defines.h b/gen/obj_defines.h
index 362452b337061952afe7ba21ae3bde7f63993bf1..30fbc1c8a999f76c28acf659ef02897a79771ce6 100644
--- a/gen/obj_defines.h
+++ b/gen/obj_defines.h
@@ -1248,9 +1248,9 @@ InternalFixLinks( objects, link_stack, version, user_version ); \
 return InternalGetRefs(); \
 
 #define BHK_NI_TRI_STRIPS_SHAPE_MEMBERS \
-array<float,2> unknownFloats1; \
-array<uint,5> unknownInts1; \
-array<float,3> unknownFloats2; \
+float unknownFloat1; \
+uint unknownInt1; \
+Vector3 scale; \
 uint unknownInt2; \
 mutable uint numStripsData; \
 vector<Ref<NiTriStripsData > > stripsData; \
@@ -1262,7 +1262,7 @@ vector<uint > unknownInts3; \
 #define BHK_NI_TRI_STRIPS_SHAPE_PARENT bhkSphereRepShape \
 
 #define BHK_NI_TRI_STRIPS_SHAPE_CONSTRUCT \
- : unknownInt2((uint)0), numStripsData((uint)0), numUnknownInts3((uint)0) \
+ : unknownFloat1(0.1f), unknownInt1((uint)0x004ABE60), scale(1.0f, 1.0f, 1.0f), unknownInt2((uint)0), numStripsData((uint)0), numUnknownInts3((uint)0) \
 
 #define BHK_NI_TRI_STRIPS_SHAPE_READ \
 InternalRead( in, link_stack, version, user_version ); \
diff --git a/gen/obj_impl.cpp b/gen/obj_impl.cpp
index 924551ebeda01946bd96875c3d7372929c6eed0c..e475cf93b99fd585d21bc0fbb5df26f089fe945f 100644
--- a/gen/obj_impl.cpp
+++ b/gen/obj_impl.cpp
@@ -2809,15 +2809,9 @@ std::list<NiObjectRef> bhkMultiSphereShape::InternalGetRefs() const {
 void bhkNiTriStripsShape::InternalRead( istream& in, list<uint> & link_stack, unsigned int version, unsigned int user_version ) {
 	uint block_num;
 	bhkSphereRepShape::Read( in, link_stack, version, user_version );
-	for (uint i1 = 0; i1 < 2; i1++) {
-		NifStream( unknownFloats1[i1], in, version );
-	};
-	for (uint i1 = 0; i1 < 5; i1++) {
-		NifStream( unknownInts1[i1], in, version );
-	};
-	for (uint i1 = 0; i1 < 3; i1++) {
-		NifStream( unknownFloats2[i1], in, version );
-	};
+	NifStream( unknownFloat1, in, version );
+	NifStream( unknownInt1, in, version );
+	NifStream( scale, in, version );
 	NifStream( unknownInt2, in, version );
 	NifStream( numStripsData, in, version );
 	stripsData.resize(numStripsData);
@@ -2836,15 +2830,9 @@ void bhkNiTriStripsShape::InternalWrite( ostream& out, map<NiObjectRef,uint> lin
 	bhkSphereRepShape::Write( out, link_map, version, user_version );
 	numUnknownInts3 = uint(unknownInts3.size());
 	numStripsData = uint(stripsData.size());
-	for (uint i1 = 0; i1 < 2; i1++) {
-		NifStream( unknownFloats1[i1], out, version );
-	};
-	for (uint i1 = 0; i1 < 5; i1++) {
-		NifStream( unknownInts1[i1], out, version );
-	};
-	for (uint i1 = 0; i1 < 3; i1++) {
-		NifStream( unknownFloats2[i1], out, version );
-	};
+	NifStream( unknownFloat1, out, version );
+	NifStream( unknownInt1, out, version );
+	NifStream( scale, out, version );
 	NifStream( unknownInt2, out, version );
 	NifStream( numStripsData, out, version );
 	for (uint i1 = 0; i1 < stripsData.size(); i1++) {
@@ -2864,27 +2852,9 @@ std::string bhkNiTriStripsShape::InternalAsString( bool verbose ) const {
 	out << bhkSphereRepShape::asString();
 	numUnknownInts3 = uint(unknownInts3.size());
 	numStripsData = uint(stripsData.size());
-	for (uint i1 = 0; i1 < 2; i1++) {
-		if ( !verbose && ( i1 > MAXARRAYDUMP ) ) {
-			out << "<Data Truncated. Use verbose mode to see complete listing.>" << endl;
-			break;
-		};
-		out << "    Unknown Floats 1[" << i1 << "]:  " << unknownFloats1[i1] << endl;
-	};
-	for (uint i1 = 0; i1 < 5; i1++) {
-		if ( !verbose && ( i1 > MAXARRAYDUMP ) ) {
-			out << "<Data Truncated. Use verbose mode to see complete listing.>" << endl;
-			break;
-		};
-		out << "    Unknown Ints 1[" << i1 << "]:  " << unknownInts1[i1] << endl;
-	};
-	for (uint i1 = 0; i1 < 3; i1++) {
-		if ( !verbose && ( i1 > MAXARRAYDUMP ) ) {
-			out << "<Data Truncated. Use verbose mode to see complete listing.>" << endl;
-			break;
-		};
-		out << "    Unknown Floats 2[" << i1 << "]:  " << unknownFloats2[i1] << endl;
-	};
+	out << "  Unknown Float 1:  " << unknownFloat1 << endl;
+	out << "  Unknown Int 1:  " << unknownInt1 << endl;
+	out << "  Scale:  " << scale << endl;
 	out << "  Unknown Int 2:  " << unknownInt2 << endl;
 	out << "  Num Strips Data:  " << numStripsData << endl;
 	for (uint i1 = 0; i1 < stripsData.size(); i1++) {
@@ -10792,7 +10762,7 @@ void NiSkinPartition::InternalWrite( ostream& out, map<NiObjectRef,uint> link_ma
 		skinPartitionBlocks[i1].numWeightsPerVertex = ushort((skinPartitionBlocks[i1].vertexWeights.size() > 0) ? skinPartitionBlocks[i1].vertexWeights[0].size() : 0);
 		skinPartitionBlocks[i1].numStrips = ushort(skinPartitionBlocks[i1].stripLengths.size());
 		skinPartitionBlocks[i1].numBones = ushort(skinPartitionBlocks[i1].bones.size());
-		skinPartitionBlocks[i1].numTriangles = ushort(skinPartitionBlocks[i1].triangles.size());
+		skinPartitionBlocks[i1].numTriangles = skinPartitionBlocks[i1].CalcNumTriangles();
 		skinPartitionBlocks[i1].numVertices = ushort(skinPartitionBlocks[i1].vertexMap.size());
 		NifStream( skinPartitionBlocks[i1].numVertices, out, version );
 		NifStream( skinPartitionBlocks[i1].numTriangles, out, version );
@@ -10883,7 +10853,7 @@ std::string NiSkinPartition::InternalAsString( bool verbose ) const {
 		skinPartitionBlocks[i1].numWeightsPerVertex = ushort((skinPartitionBlocks[i1].vertexWeights.size() > 0) ? skinPartitionBlocks[i1].vertexWeights[0].size() : 0);
 		skinPartitionBlocks[i1].numStrips = ushort(skinPartitionBlocks[i1].stripLengths.size());
 		skinPartitionBlocks[i1].numBones = ushort(skinPartitionBlocks[i1].bones.size());
-		skinPartitionBlocks[i1].numTriangles = ushort(skinPartitionBlocks[i1].triangles.size());
+		skinPartitionBlocks[i1].numTriangles = skinPartitionBlocks[i1].CalcNumTriangles();
 		skinPartitionBlocks[i1].numVertices = ushort(skinPartitionBlocks[i1].vertexMap.size());
 		out << "    Num Vertices:  " << skinPartitionBlocks[i1].numVertices << endl;
 		out << "    Num Triangles:  " << skinPartitionBlocks[i1].numTriangles << endl;
diff --git a/obj/NiAVObject.cpp b/obj/NiAVObject.cpp
index b5df531fc39a0f0efc5d60a8943f6203ca2a6aa9..a4e31db510b8361cb6911b37021058450dc963aa 100644
--- a/obj/NiAVObject.cpp
+++ b/obj/NiAVObject.cpp
@@ -145,3 +145,8 @@ Vector3 NiAVObject::GetVelocity() const {
 void NiAVObject::SetVelocity( const Vector3 & n ) {
 	velocity = n;
 }
+
+void NiAVObject::SetCollisionObject(Ref<NiCollisionObject> &obj)
+{
+	collisionObject = obj;
+}
\ No newline at end of file
diff --git a/obj/NiAVObject.h b/obj/NiAVObject.h
index 1849750e57e6e0993088171a4b4eec75d94bb09a..884406bd1bb590ae6b22a6f5ef6eb1019e4342ff 100644
--- a/obj/NiAVObject.h
+++ b/obj/NiAVObject.h
@@ -82,6 +82,8 @@ public:
 	Vector3 GetVelocity() const;
 	void SetVelocity( const Vector3 & n );
 
+	void SetCollisionObject(Ref<NiCollisionObject> &);
+
 protected:
 	NiNode * parent;
 	NI_A_V_OBJECT_MEMBERS
diff --git a/obj/NiCollisionObject.cpp b/obj/NiCollisionObject.cpp
index 814b4c523f5ca32cdc7a32115b94d1d3369b3473..a925bc7968f79502222a7a9b0f15289c125fa4d4 100644
--- a/obj/NiCollisionObject.cpp
+++ b/obj/NiCollisionObject.cpp
@@ -33,6 +33,16 @@ list<NiObjectRef> NiCollisionObject::GetRefs() const {
 	NI_COLLISION_OBJECT_GETREFS
 }
 
+void NiCollisionObject::SetParent(NiAVObject *obj)
+{
+	parent = obj;
+}
+
+void NiCollisionObject::SetBody(const Ref<NiObject> &obj)
+{
+	body = obj;
+}
+
 const Type & NiCollisionObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiCollisionObject.h b/obj/NiCollisionObject.h
index 9332ea9d6a9e3548b6247affef7d6bc2f0de57e0..5fcbeab62f5e46a8c1c2176f8a464c0198691ecf 100644
--- a/obj/NiCollisionObject.h
+++ b/obj/NiCollisionObject.h
@@ -39,6 +39,9 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void 	SetParent(NiAVObject *);
+	void 	SetBody(const Ref<NiObject> &);
+
 protected:
 	NiAVObject * NiCollisionObject::Parent() const;
 	NI_COLLISION_OBJECT_MEMBERS
diff --git a/obj/NiExtraData.cpp b/obj/NiExtraData.cpp
index e1c68a804a3c726edacd7cf3517942d12ada4612..9ba79c2018998757394dfd37dc25ea1e0d7e5a87 100644
--- a/obj/NiExtraData.cpp
+++ b/obj/NiExtraData.cpp
@@ -39,7 +39,7 @@ string NiExtraData::GetName() {
 	return name;
 }
 
-void NiExtraData::SetName( string & new_name ) {
+void NiExtraData::SetName( const string & new_name ) {
 	name = new_name;
 }
 
diff --git a/obj/NiExtraData.h b/obj/NiExtraData.h
index 4728763aef71a9650208620f2745cb28f709f08c..1c26ea788a0355e1e8c1a75b43c107fb4102b9c0 100644
--- a/obj/NiExtraData.h
+++ b/obj/NiExtraData.h
@@ -60,7 +60,7 @@ public:
 	 * version NIF files.
 	 * \param new_name The new name for this NiExtraData object.
 	 */
-	void SetName( string & new_name );
+	void SetName( const string & new_name );
 
 	/*!
 	 * Formats a human readable string that includes the type of the object
diff --git a/obj/NiObjectNET.cpp b/obj/NiObjectNET.cpp
index 2d7a504a87aad180a4d4172ae2cca9a6fda0fce8..183cd57a9b6a87fb9de16a529271ea032b970973 100644
--- a/obj/NiObjectNET.cpp
+++ b/obj/NiObjectNET.cpp
@@ -41,7 +41,7 @@ string NiObjectNET::GetName() {
 	return name;
 }
 
-void NiObjectNET::SetName( string & new_name ) {
+void NiObjectNET::SetName( const string & new_name ) {
 	name = new_name;
 }
 
diff --git a/obj/NiObjectNET.h b/obj/NiObjectNET.h
index 268db450f746baaf456f3674c78ef2bbded5f7a2..b1e2e5d38b6a7c87b55b6b6f8475545b89547fcc 100644
--- a/obj/NiObjectNET.h
+++ b/obj/NiObjectNET.h
@@ -41,7 +41,7 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 
 	string GetName();
-	void SetName( string & new_name );
+	void SetName( const string & new_name );
 	/*!
 	 * Formats a human readable string that includes the type of the object
 	 * \return A string in the form:  address(type) {name}
diff --git a/obj/bhkCollisionObject.cpp b/obj/bhkCollisionObject.cpp
index 73f35d53756a858b3620bc4715bc4a9fa3ea6e74..a4babe100cbffafff6a4691e95a812af387fd979 100644
--- a/obj/bhkCollisionObject.cpp
+++ b/obj/bhkCollisionObject.cpp
@@ -28,7 +28,10 @@ void bhkCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uin
 }
 
 list<NiObjectRef> bhkCollisionObject::GetRefs() const {
-	BHK_COLLISION_OBJECT_GETREFS
+//	BHK_COLLISION_OBJECT_GETREFS
+	list<NiObjectRef> refs =  InternalGetRefs();
+	refs.reverse();
+	return refs;
 }
 
 const Type & bhkCollisionObject::GetType() const {
diff --git a/obj/bhkEntity.cpp b/obj/bhkEntity.cpp
index b2463e4a5a8cb8bbff1beb9d708b9504e2cbcb23..3f6740f77d18f905e5873e37f4de2f2acf6cca57 100644
--- a/obj/bhkEntity.cpp
+++ b/obj/bhkEntity.cpp
@@ -36,3 +36,12 @@ const Type & bhkEntity::GetType() const {
 	return TYPE;
 };
 
+void bhkEntity::SetShape(const Ref<bhkShape> &s)
+{
+	shape = s;
+}
+
+void bhkEntity::SetLayer(int l)
+{
+	layer = l;
+}
diff --git a/obj/bhkEntity.h b/obj/bhkEntity.h
index 339d31d6c80ff8add8f70e25e8d90dea93c74c8f..b672b7f54e95618116ff87a50c40be265066a9ff 100644
--- a/obj/bhkEntity.h
+++ b/obj/bhkEntity.h
@@ -38,6 +38,9 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void SetShape(const Ref<bhkShape> &);
+	void SetLayer(int layer);
+
 protected:
 	BHK_ENTITY_MEMBERS
 	STANDARD_INTERNAL_METHODS
diff --git a/obj/bhkNiTriStripsShape.cpp b/obj/bhkNiTriStripsShape.cpp
index ece80031507db3f84f10a2463df5a9ba0496387c..6077a69fa283c77f8040f447d623e42faf3da1d9 100644
--- a/obj/bhkNiTriStripsShape.cpp
+++ b/obj/bhkNiTriStripsShape.cpp
@@ -36,3 +36,14 @@ const Type & bhkNiTriStripsShape::GetType() const {
 	return TYPE;
 };
 
+void bhkNiTriStripsShape::SetNumStripsData(int n)
+{
+	numStripsData = n;
+	stripsData.resize(n);
+}
+
+void bhkNiTriStripsShape::SetStripsData(int i, Ref<NiTriStripsData> &strips)
+{
+	stripsData[i] = strips;
+}
+
diff --git a/obj/bhkNiTriStripsShape.h b/obj/bhkNiTriStripsShape.h
index f718e884261ee65a2a976517876323aa144a195e..00a8dbb7fbde5ec33487552d748ee57b7f9413ee 100644
--- a/obj/bhkNiTriStripsShape.h
+++ b/obj/bhkNiTriStripsShape.h
@@ -38,6 +38,9 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void	SetNumStripsData(int i);
+	void	SetStripsData(int i, Ref<NiTriStripsData> &);
+
 protected:
 	BHK_NI_TRI_STRIPS_SHAPE_MEMBERS
 	STANDARD_INTERNAL_METHODS
diff --git a/obj/bhkRigidBody.cpp b/obj/bhkRigidBody.cpp
index 21037095f59f69d4660c2531a4f816d0571f3c9b..5f8790817641ebb0ff633993d71a832c6f886a28 100644
--- a/obj/bhkRigidBody.cpp
+++ b/obj/bhkRigidBody.cpp
@@ -37,3 +37,18 @@ const Type & bhkRigidBody::GetType() const {
 	return TYPE;
 };
 
+void bhkRigidBody::SetTranslation(const Vector3 &v)
+{
+	translation = v;
+}
+
+void bhkRigidBody::SetRotation(const QuaternionXYZW &q)
+{
+	rotation = q;
+}
+
+void bhkRigidBody::SetLayerCopy(int l)
+{
+	layerCopy_ = l;
+}
+
diff --git a/obj/bhkRigidBody.h b/obj/bhkRigidBody.h
index c04a41e11cfcb10cc75ea8940b559ad43e1cee65..96977efdd79981daf6ae21677e4e5661f50cc26a 100644
--- a/obj/bhkRigidBody.h
+++ b/obj/bhkRigidBody.h
@@ -39,6 +39,10 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void SetTranslation(const Vector3 &v);
+	void SetRotation(const QuaternionXYZW &q);
+	void SetLayerCopy(int l);
+
 protected:
 	BHK_RIGID_BODY_MEMBERS
 	STANDARD_INTERNAL_METHODS
diff --git a/obj/bhkSphereRepShape.cpp b/obj/bhkSphereRepShape.cpp
index 43c8c4adbfb7bc1cd2a1a962fd34a2d935e78fd9..d6353be7c93221eb85f2be20590ef73e27b7fc84 100644
--- a/obj/bhkSphereRepShape.cpp
+++ b/obj/bhkSphereRepShape.cpp
@@ -35,3 +35,7 @@ const Type & bhkSphereRepShape::GetType() const {
 	return TYPE;
 };
 
+void bhkSphereRepShape::SetMaterial(int m)
+{
+	material = m;
+}
diff --git a/obj/bhkSphereRepShape.h b/obj/bhkSphereRepShape.h
index 4536c968ec2ab5ea027758600f8ffa67a642fd62..5ccfdfc01f0910e52cdcffced5eb57de097bb954 100644
--- a/obj/bhkSphereRepShape.h
+++ b/obj/bhkSphereRepShape.h
@@ -34,6 +34,8 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void SetMaterial(int m);
+
 protected:
 	BHK_SPHERE_REP_SHAPE_MEMBERS
 	STANDARD_INTERNAL_METHODS