Index: away3d/animators/skin/Channel.as
===================================================================
--- away3d/animators/skin/Channel.as	(revision 1461)
+++ away3d/animators/skin/Channel.as	(working copy)
@@ -74,6 +74,8 @@
 				while (i--) {
 					if (type[i] == "transform") {
 						target.transform = param[_index][i];
+					} else if (type[i] == "visibility") {
+						target.visible = param[_index][i] > 0;
 					} else {
 						if (interpolate)
 							target[type[i]] = ((time - times[_index]) * param[int(_index + 1)][i] + (times[int(_index + 1)] - time) * param[_index][i]) / (times[int(_index + 1)] - times[_index]);
Index: away3d/loaders/Collada.as
===================================================================
--- away3d/loaders/Collada.as	(revision 1461)
+++ away3d/loaders/Collada.as	(working copy)
@@ -64,7 +64,8 @@
 		{
 			for each (var _objectData:ObjectData in containerData.children) {
 				if (_objectData is MeshData) {
-					buildMesh(_objectData as MeshData, parent);
+					var mesh:Mesh = buildMesh(_objectData as MeshData, parent);
+					_containers[_objectData.name] = mesh;
 				} else if (_objectData is BoneData) {
 					var _boneData:BoneData = _objectData as BoneData;
 					var bone:Bone = new Bone({name:_boneData.name});
@@ -106,7 +107,7 @@
 			}
 		}
 		
-		private function buildMesh(_meshData:MeshData, parent:ObjectContainer3D):void
+		private function buildMesh(_meshData:MeshData, parent:ObjectContainer3D):Mesh
 		{
 			Debug.trace(" + Build Mesh : "+_meshData.name);
 			
@@ -176,6 +177,7 @@
 			
 			mesh.type = ".Collada";
 			parent.addChild(mesh);
+			return mesh;
 		}
 		
         private function buildMaterials():void
@@ -243,6 +245,7 @@
 						
 						for each (var channelData:ChannelData in _animationData.channels) {
 							var channel:Channel = channelData.channel;
+							
 							channel.target = _containers[channel.name];
 							animation.appendChannel(channel);
 							
@@ -273,12 +276,14 @@
 				            switch(channelData.type)
 				            {
 				                case "translateX":
+								case "transform(3)(0)":
 				                	channel.type = ["x"];
 									if (yUp)
 										for each (param in channel.param)
 											param[0] *= -1*scaling;
 				                	break;
 								case "translateY":
+								case "transform(3)(1)":
 									if (yUp)
 										channel.type = ["y"];
 									else
@@ -287,6 +292,7 @@
 										param[0] *= scaling;
 				     				break;
 								case "translateZ":
+								case "transform(3)(2)":
 									if (yUp)
 										channel.type = ["z"];
 									else
@@ -340,18 +346,21 @@
 											param[0] *= -1;
 				            		break;
 								case "scaleX":
+								case "transform(0)(0)":
 									channel.type = [sX];
 									//if (yUp)
 									//	for each (param in channel.param)
 									//		param[0] *= -1;
 				            		break;
 								case "scaleY":
+								case "transform(1)(1)":
 									if (yUp)
 										channel.type = [sY];
 									else
 										channel.type = [sZ];
 				     				break;
 								case "scaleZ":
+								case "transform(2)(2)":
 									if (yUp)
 										channel.type = [sZ];
 									else
@@ -397,6 +406,10 @@
 								case "transform":
 									channel.type = ["transform"];
 									break;
+								
+								case "visibility":
+									channel.type = ["visibility"];
+									break;
 				            }
 						}
 						
