Index: trunk/src/gfx/keyframed_mesh.cc
===================================================================
--- trunk/src/gfx/keyframed_mesh.cc	(revision 423)
+++ trunk/src/gfx/keyframed_mesh.cc	(revision 424)
@@ -56,5 +56,5 @@
 	NV_ASSERT( node_id < m_tag_map->get_count(), "TAGMAP FAIL" );
 	const data_channel_set* data = m_tag_map->get_node( node_id )->data;
-	NV_ASSERT( data, "TAG FAIL" );
+	NV_ASSERT( data && data->size() > 0, "TAG FAIL" );
 	raw_channel_interpolator interpolator( data, m_interpolation_key );
 	return interpolator.get< transform >( m_last_frame, m_next_frame, m_interpolation );
Index: trunk/src/gfx/mesh_creator.cc
===================================================================
--- trunk/src/gfx/mesh_creator.cc	(revision 423)
+++ trunk/src/gfx/mesh_creator.cc	(revision 424)
@@ -18,5 +18,5 @@
 	for ( size_t i = 0; i < m_data->get_count(); ++i )
 	{
-		sint16 parent_id = m_data->m_nodes[i].parent_id;
+		sint16 parent_id = m_data->m_nodes[i].data->get_parent_id();
 		data_channel_set* keys   = m_data->m_nodes[i].data;
 		data_channel_set* pkeys  = ( parent_id != -1 ? m_data->m_nodes[parent_id].data : nullptr );
@@ -65,6 +65,9 @@
 			}
 
-			data_channel_set* new_keys = data_channel_set_creator::create( 1 );
+			data_channel_set* new_keys = data_channel_set_creator::create_set( 1 );
 			data_channel_set_creator nk_access( new_keys );
+			nk_access.set_name( old_keys->get_name() );
+			nk_access.set_parent_id( old_keys->get_parent_id() );
+			nk_access.set_transform( old_keys->get_transform() );
 			data_channel_access< nv_key_transform > kt_channel( nk_access.add_channel<nv_key_transform>( max_keys ) );
 
@@ -100,5 +103,5 @@
 	{
 		mesh_node_data& node = m_data->m_nodes[i];
-		node.transform = pre_transform * node.transform * post_transform;
+		node.data->m_transform = pre_transform * node.data->m_transform * post_transform;
 		if ( node.data )
 		{
Index: trunk/src/gfx/skeletal_mesh.cc
===================================================================
--- trunk/src/gfx/skeletal_mesh.cc	(revision 423)
+++ trunk/src/gfx/skeletal_mesh.cc	(revision 424)
@@ -23,5 +23,5 @@
 	for ( uint32 i = 0; i < bones->get_count(); ++i )
 	{
-		m_bone_offset[i] = transform( bones->get_node(i)->transform );
+		m_bone_offset[i] = transform( bones->get_node(i)->data->get_transform() );
 	}
 
@@ -95,5 +95,5 @@
 	for ( size_t i = 0; i < m_node_data->get_count(); ++i )
 	{
-		if ( m_node_data->get_node( i )->data )
+		if ( m_node_data->is_animated( i ) )
 		{
 			m_interpolation_key = m_node_data->get_node( i )->data->get_interpolation_key();
@@ -133,7 +133,7 @@
 		{
 			const mesh_node_data* node = m_node_data->get_node(n);
-			if ( node->parent_id != -1 )
-			{
-				m_children[ node->parent_id ].push_back( n );
+			if ( node->data->get_parent_id() != -1 )
+			{
+				m_children[ node->data->get_parent_id()].push_back( n );
 			}
 		}
@@ -157,7 +157,7 @@
 		{
 			const mesh_node_data* node = m_node_data->get_node(n);
-			nv::mat4 node_mat( node->transform );
-
-			if ( node->data )
+			nv::mat4 node_mat( node->data->get_transform() );
+
+			if ( node->data && node->data->size() > 0 )
 			{
 				raw_channel_interpolator interpolator( node->data, m_interpolation_key );
@@ -178,6 +178,6 @@
 	{
 		const mesh_node_data* bone = bones->get_node(bi);
-		bone_names[ bone->name ] = bi;
-		m_offsets[bi] = bone->transform;
+		bone_names[ bone->data->get_name() ] = bi;
+		m_offsets[bi] = bone->data->get_transform();
 	}
 
@@ -187,5 +187,5 @@
 		sint16 bone_id = -1;
 
-		auto bi = bone_names.find( node->name );
+		auto bi = bone_names.find( node->data->get_name() );
 		if ( bi != bone_names.end() )
 		{
@@ -194,5 +194,5 @@
 		m_bone_ids[n] = bone_id;
 
-		if ( m_interpolation_key.size() == 0 && node->data )
+		if ( m_interpolation_key.size() == 0 && node->data->size() > 0 )
 			m_interpolation_key = node->data->get_interpolation_key();
 
@@ -206,7 +206,7 @@
 	//       see note in assimp_loader.cc:load_node
 	const mesh_node_data* node = m_node_data->get_node( node_id );
-	mat4 node_mat( node->transform );
-
-	if ( node->data )
+	mat4 node_mat( node->data->get_transform() );
+
+	if ( node->data && node->data->size() > 0 )
 	{
 		raw_channel_interpolator interpolator( node->data, m_interpolation_key );
