Index: trunk/src/formats/md3_loader.cc
===================================================================
--- trunk/src/formats/md3_loader.cc	(revision 149)
+++ trunk/src/formats/md3_loader.cc	(revision 153)
@@ -351,7 +351,18 @@
 }
 
-sint32 nv::md3_loader::get_max_frames() const
+sint32 md3_loader::get_max_frames() const
 {
 	return ((md3_t*)m_md3)->header.num_frames;
+}
+
+void md3_loader::load_tag_names( std::vector< std::string >& tags )
+{
+	tags.clear();
+	md3_t* md3 = (md3_t*)m_md3;
+	for ( sint32 i = 0; i < md3->header.num_tags; ++i )
+	{
+		const md3_tag_t& rtag = md3->tags[i + md3->header.num_tags];
+		tags.push_back( (char*)(rtag.name) );
+	}
 }
 
@@ -480,2 +491,20 @@
 
 }
+
+keyframed_mesh::keyframed_mesh( md3_loader* loader )
+{
+	loader->load_positions( m_positions );
+	loader->load_normals( m_normals );
+	loader->load_texcoords( m_texcoords );
+	loader->load_indicies( m_indices );
+
+	std::vector< std::string > names;
+	loader->load_tag_names( names );
+	for ( auto& name : names )
+	{
+		loader->load_tags( m_tags[ name ], name );
+	}
+
+	m_frames = loader->get_max_frames();
+}
+
