 							.prependTranslation(0, 0, boneLength * .5)
 							.prependScale(.02, .02, boneLength);
 						
-						target.addChild(boneMesh);
+						joint.addChild(boneMesh);
 					}
 				}
 			}
 		}
-		
-		private function targetRemovedHandler(ctrl 		: AbstractController,
-											  target	: Group) : void
-		{
-			for each (var jointMesh : Mesh in target.get("/mesh[name='__joint__']"))
-				jointMesh.parent = null;
-			
-			for each (var boneMesh : Mesh in target.get("/mesh[name='__bone__']"))
-				boneMesh.parent = null;
-		}
 	}
 }
	import aerys.minko.render.material.Material;
	import aerys.minko.render.material.basic.BasicMaterial;
	import aerys.minko.scene.controller.AbstractController;
	import aerys.minko.scene.node.Group;
	import aerys.minko.scene.node.Mesh;
	import aerys.minko.type.enum.DepthTest;

		}
		
		private function targetAddedHandler(ctrl	: AbstractController,
											target	: Mesh) : void
		{
			var skinningCtrl : SkinningController = target.getControllersByType(SkinningController)[0]
				as SkinningController;
			
			for each (var joint : Group in skinningCtrl.joints)
				addBonesAndJointsMeshes(joint);
		}
		
		private function targetRemovedHandler(ctrl 		: AbstractController,
											  target	: Mesh) : void
		{
			var skinningCtrl : SkinningController = target.getControllersByType(SkinningController)[0]
				as SkinningController;
			
			for each (var joint : Group in skinningCtrl.joints)
			{
				joint.getChildByName('__bone__').parent = null;
				joint.getChildByName('__joint__').parent = null;
			}
		}
		
		private function addBonesAndJointsMeshes(joint : Group) : void
		{
			if (joint.getChildByName('__bone__') || joint.getChildByName('__joint__'))
				return ;
			
			var numChildren : uint = joint.numChildren;
			
			for (var i : uint = 0; i < numChildren; ++i)
			{
				var child : Group = joint.getChildAt(i) as Group;
				
				if (child != null)
				{
