diff --git a/include/ComplexShape.h b/include/ComplexShape.h
index ede2cdac5628291b2b19c43827df9fcec309a1a9..7358ed0d617e241da7295cb98bfc5f14a9d29886 100644
--- a/include/ComplexShape.h
+++ b/include/ComplexShape.h
@@ -306,7 +306,7 @@ public:
 	 * Sets the association between the body parts and the faces in the complex shape
 	 * \param[in] The new association meaning that the face at the position of the index corresponds to the body part group given by the value at the position of the index of the face
 	 */
-	NIFLIB_API void SetDismemberPartitionsFaces( vector<int> value );
+	NIFLIB_API void SetDismemberPartitionsFaces( const vector<int>& value );
 
 	/*
 	 * Gets a list of the dismember groups
@@ -318,7 +318,7 @@ public:
 	 * Gets the association between the faces in the complex shape and the corresponding body parts
 	 * \param[in] A list of the dismember groups;
 	 */
-	NIFLIB_API void SetDismemberPartitionsBodyParts( vector<BodyPartList> value);
+	NIFLIB_API void SetDismemberPartitionsBodyParts( const vector<BodyPartList>& value);
 
 private:
 	vector<BodyPartList> dismemberPartitionsBodyParts;
diff --git a/src/ComplexShape.cpp b/src/ComplexShape.cpp
index 16a6895c24f358c0299a061f7eb69bcc68e6f3cc..d0cf2069a0a08a8b66bcc9452e1eb0957294d101 100644
--- a/src/ComplexShape.cpp
+++ b/src/ComplexShape.cpp
@@ -149,15 +149,19 @@ vector<int> ComplexShape::GetDismemberPartitionsFaces() const {
 	return dismemberPartitionsFaces;
 }
 
-void ComplexShape::SetDismemberPartitionsFaces( vector<int> value ) {
-	dismemberPartitionsFaces = value;
+void ComplexShape::SetDismemberPartitionsFaces(const vector<int>& value ) {
+	dismemberPartitionsFaces.resize(value.size());
+
+	for(int i = 0; i < dismemberPartitionsFaces.size(); i++) {
+		dismemberPartitionsFaces[i] = value[i];
+	}
 }
 
 vector<BodyPartList> ComplexShape::GetDismemberPartitionsBodyParts() const {
 	return dismemberPartitionsBodyParts;
 }
 
-void ComplexShape::SetDismemberPartitionsBodyParts( vector<BodyPartList> value ) {
+void ComplexShape::SetDismemberPartitionsBodyParts( const vector<BodyPartList>& value ) {
 	dismemberPartitionsBodyParts = value;
 }
 
@@ -787,11 +791,14 @@ Ref<NiAVObject> ComplexShape::Split( NiNode * parent, Matrix44 & transform, int
 		vector<Triangle> shapeTriangles;
 
 		//a vector that holds in what dismember groups or skin partition does each face belong
-		vector<BodyPartList> current_dismember_partitions;
+		vector<BodyPartList> current_dismember_partitions = dismemberPartitionsBodyParts;
 
 		//create a map betweem the faces and the dismember groups
 		vector<int> current_dismember_partitions_faces;
 
+		//since we might have dismember partitions the face index is also required
+		int current_face_index = 0;
+
 		//Loop through all faces, and all points on each face
 		//to set the vertices in the CompoundVertex list
 		for ( vector<ComplexFace>::const_iterator face = faces.begin(); face != faces.end(); ++face ) {
@@ -887,18 +894,16 @@ Ref<NiAVObject> ComplexShape::Split( NiNode * parent, Matrix44 & transform, int
 					shapeTriangles.push_back(new_face);
 
 					//all the resulting triangles belong in the the same dismember partition or better said skin partition
-					current_dismember_partitions_faces.push_back(dismemberPartitionsFaces[i]);
+					current_dismember_partitions_faces.push_back(dismemberPartitionsFaces[current_face_index]);
 				}
-			}			
+			}
+			current_face_index++;
 		}
 
 		//Clean up the dismember skin partitions
 		//if no face points to a certain dismember partition then that dismember partition must be removed
 		if(use_dismember_partitions == true) {
-			vector<bool> used_dismember_groups;
-			for(int x = 0; x < current_dismember_partitions.size(); x++) {
-				used_dismember_groups.push_back(false);
-			}
+			vector<bool> used_dismember_groups(current_dismember_partitions.size(), false);
 			for(int x = 0; x < current_dismember_partitions_faces.size(); x++) {
 				if(used_dismember_groups[current_dismember_partitions_faces[x]] == false) {
 					used_dismember_groups[current_dismember_partitions_faces[x]] = true;
@@ -921,7 +926,7 @@ Ref<NiAVObject> ComplexShape::Split( NiNode * parent, Matrix44 & transform, int
 		}
 
 		//Attatch properties if any
-		//Check if the properties are skyrim specific in which case attach them in the 2 special slots
+		//Check if the properties are skyrim specific in which case attach them in the 2 special slots called bs_properties
 		if ( propGroups.size() > 0 ) {
 			BSLightingShaderPropertyRef shader_property = NULL;