Index: trunk/src/gfx/keyframed_mesh.cc
===================================================================
--- trunk/src/gfx/keyframed_mesh.cc	(revision 428)
+++ trunk/src/gfx/keyframed_mesh.cc	(revision 430)
@@ -13,8 +13,7 @@
 using namespace nv;
 
-nv::keyframed_mesh::keyframed_mesh( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+nv::keyframed_mesh::keyframed_mesh( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map )
 	: animated_mesh()
 	, m_context( a_context )
-	, m_mesh_data( a_data )
 	, m_tag_map( a_tag_map )
 	, m_last_frame( 0 )
@@ -23,10 +22,10 @@
 	, m_active( false )
 {
-	m_index_count   = m_mesh_data->get_channel_size( slot::INDEX );
-	m_vertex_count  = m_mesh_data->get_channel_size<vertex_t>();
-	uint32 pos_size = m_mesh_data->get_channel_size<vertex_pnt>();
+	m_index_count   = a_data->get_channel_size( slot::INDEX );
+	m_vertex_count  = a_data->get_channel_size<vertex_t>();
+	uint32 pos_size = a_data->get_channel_size<vertex_pnt>();
 	if ( pos_size == 0 )
 	{
-		pos_size      = m_mesh_data->get_channel_size<vertex_pn>();
+		pos_size      = a_data->get_channel_size<vertex_pn>();
 		m_has_tangent = false;
 		m_vsize       = sizeof( vertex_pn );
@@ -127,5 +126,5 @@
 }
 
-nv::keyframed_mesh_gpu::keyframed_mesh_gpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+nv::keyframed_mesh_gpu::keyframed_mesh_gpu( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map )
 	: keyframed_mesh( a_context, a_data, a_tag_map )
 	, m_loc_next_position( -1 )
@@ -186,5 +185,5 @@
 }
 
-nv::keyframed_mesh_cpu::keyframed_mesh_cpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map )
+nv::keyframed_mesh_cpu::keyframed_mesh_cpu( context* a_context, const data_channel_set* a_data, const mesh_nodes_data* a_tag_map )
 	: keyframed_mesh( a_context, a_data, a_tag_map )
 {
@@ -194,12 +193,14 @@
 	m_context->add_vertex_buffers( m_va, m_pbuffer, vchannel->descriptor() );
 
-	buffer  vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * sizeof( vec2 ), m_mesh_data->get_channel_data<vertex_t>() );
-	m_context->add_vertex_buffers( m_va, vb, m_mesh_data->get_channel<vertex_t>()->descriptor() );
-
-	const raw_data_channel* index_channel = m_mesh_data->get_channel( slot::INDEX );
+	buffer  vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * sizeof( vec2 ), a_data->get_channel_data<vertex_t>() );
+	m_context->add_vertex_buffers( m_va, vb, a_data->get_channel<vertex_t>()->descriptor() );
+
+	const raw_data_channel* index_channel = a_data->get_channel( slot::INDEX );
 	buffer  ib = m_context->get_device()->create_buffer( INDEX_BUFFER, STATIC_DRAW, index_channel->raw_size(), index_channel->raw_data() );
 	m_context->set_index_buffer( m_va, ib, index_channel->descriptor()[0].etype, true );
 
 	m_data = new uint8[ m_vertex_count * m_vsize ];
+
+	m_model_data = vchannel->raw_data();
 }
 
@@ -210,5 +211,5 @@
 	if ( m_has_tangent )
 	{
-		const vertex_pnt* data = m_mesh_data->get_channel_data<vertex_pnt>();
+		const vertex_pnt* data = reinterpret_cast< const vertex_pnt* >( m_model_data );
 		const vertex_pnt* prev = data + m_vertex_count * m_last_frame;
 		const vertex_pnt* next = data + m_vertex_count * m_next_frame;
@@ -223,5 +224,5 @@
 	else
 	{
-		const vertex_pn* data = m_mesh_data->get_channel_data<vertex_pn>();
+		const vertex_pn* data = reinterpret_cast< const vertex_pn* >( m_model_data );
 		const vertex_pn* prev = data + m_vertex_count * m_last_frame;
 		const vertex_pn* next = data + m_vertex_count * m_next_frame;
Index: trunk/src/gfx/mesh_creator.cc
===================================================================
--- trunk/src/gfx/mesh_creator.cc	(revision 428)
+++ trunk/src/gfx/mesh_creator.cc	(revision 430)
@@ -385,5 +385,5 @@
 
 
-bool nv::mesh_data_creator::is_same_format( mesh_data* other )
+bool nv::mesh_data_creator::is_same_format( data_channel_set* other )
 {
 	if ( m_data->size() != other->size() ) return false;
@@ -396,5 +396,5 @@
 }
 
-void nv::mesh_data_creator::merge( mesh_data* other )
+void nv::mesh_data_creator::merge( data_channel_set* other )
 {
 	if ( !is_same_format( other ) ) return;
Index: trunk/src/gfx/skeletal_mesh.cc
===================================================================
--- trunk/src/gfx/skeletal_mesh.cc	(revision 428)
+++ trunk/src/gfx/skeletal_mesh.cc	(revision 430)
@@ -11,5 +11,5 @@
 #include "nv/stl/unordered_map.hh"
 
-nv::skeletal_mesh_cpu::skeletal_mesh_cpu( context* a_context, const mesh_data* a_mesh_data, const mesh_nodes_data* bones )
+nv::skeletal_mesh_cpu::skeletal_mesh_cpu( context* a_context, const data_channel_set* a_mesh_data, const mesh_nodes_data* bones )
 	: skeletal_mesh( a_context )
 {
@@ -234,5 +234,5 @@
 }
 
-nv::skeletal_mesh_gpu::skeletal_mesh_gpu( context* a_context, const mesh_data* a_mesh, const mesh_nodes_data* a_bone_data )
+nv::skeletal_mesh_gpu::skeletal_mesh_gpu( context* a_context, const data_channel_set* a_mesh, const mesh_nodes_data* a_bone_data )
 	: skeletal_mesh( a_context ), m_bone_data( a_bone_data ), m_transform( nullptr )
 {
