 		 * of the actual ray/geometry hit point.
 		 * @param hitUV An optional reference to a Point object to fill with the (u, v) texture coordinates
 		 * of the actual ray/geometry hit point.
+		 * @param hitNormal An optional reference to a Vector4 object to fill the normal of the intersection
+		 * point if any.
 		 * 
 		 * @return The triangle ID (the ID of the first index of the triangle in the IndexStream) that was
 		 * hit by the specified ray, -1 otherwise.

			
			var lambda			: Vector4		= new Vector4();
			
			for (var verticeIndex : uint = 0; verticeIndex < numVertices; verticeIndex += 3)
			{
				indicesData.position = verticeIndex * 2;
				
				xyzData.position = indicesData.readUnsignedShort() * xyzVertexSize + offset
				var v0X : Number = xyzData.readFloat();
				var v0Y : Number = xyzData.readFloat();
				var v0Z : Number = xyzData.readFloat();

				xyzData.position = indicesData.readUnsignedShort() * xyzVertexSize + offset;
				var v1X : Number = xyzData.readFloat();
				var v1Y : Number = xyzData.readFloat();
				var v1Z : Number = xyzData.readFloat();
				
				xyzData.position = indicesData.readUnsignedShort() * xyzVertexSize + offset;
				var v2X : Number = xyzData.readFloat();
				var v2Y : Number = xyzData.readFloat();
				var v2Z : Number = xyzData.readFloat();


				var edge1X : Number = v1X - v0X;
				var edge1Y : Number = v1Y - v0Y;
				var edge1Z : Number = v1Z - v0Z;
				
				var edge2X : Number = v2X - v0X;
				var edge2Y : Number = v2Y - v0Y;
				var edge2Z : Number = v2Z - v0Z;				
				
				// cross product
				var pvecX : Number = localDirectionY * edge2Z - edge2Y * localDirectionZ;

		public function cast(ray 		: Ray,
							 transform 	: Matrix4x4 = null,
							 hitXYZ 	: Vector4 	= null,
							 hitUV		: Point		= null,
							 hitNormal	: Vector4	= null) : int
		{
			var numVertices : uint 	= indexStream._data.length / 2;
			
