 					}
 					
 					var invNormalLength : Number = 1 / Math.sqrt(outNx * outNx + outNy * outNy + outNz * outNz);
-					
-					fakeData.position = positionOffset;
-					fakeData.writeFloat(outX);
-					fakeData.writeFloat(outY);
-					fakeData.writeFloat(outZ);
-					
-					fakeData.position = normalOffset;
-					fakeData.writeFloat(outNx * invNormalLength);
-					fakeData.writeFloat(outNy * invNormalLength);
-					fakeData.writeFloat(outNz * invNormalLength);
-				}
-				
-				realStream.unlock(false);
-				fakeStream.unlock();
+										
+					fakeDataNormal.position = normalOffset;
+					fakeDataNormal.writeFloat(outNx * invNormalLength);
+					fakeDataNormal.writeFloat(outNy * invNormalLength);
+					fakeDataNormal.writeFloat(outNz * invNormalLength);
+				}
+				
+				realStreamXYZ.unlock(false);
+				if (realStreamNormal != realStreamXYZ)
+					realStreamNormal.unlock(false);
+				
+				fakeStreamXYZ.unlock();
+				if (fakeStreamNormal != fakeStreamXYZ)
+					fakeStreamNormal.unlock(false);
 			}
 		}
 	}

								+ inY * _matrices[uint(matrixOffset + 9)]
								+ inZ * _matrices[uint(matrixOffset + 10)]
								+ _matrices[uint(matrixOffset + 11)]);
							
							outNx += jointWeight * (inNx * _matrices[uint(matrixOffset + 0)]
								+ inNy * _matrices[uint(matrixOffset + 1)]
								+ inNz * _matrices[uint(matrixOffset + 2)]);

package aerys.minko.scene.controller.mesh.skinning
{
	import flash.geom.Matrix3D;
	import flash.utils.ByteArray;
	import flash.utils.Dictionary;
	
	import aerys.minko.render.geometry.Geometry;
	import aerys.minko.render.geometry.stream.IVertexStream;
	import aerys.minko.render.geometry.stream.StreamUsage;
