Index: trunk/src/engine/particle_engine.cc
===================================================================
--- trunk/src/engine/particle_engine.cc	(revision 477)
+++ trunk/src/engine/particle_engine.cc	(revision 479)
@@ -303,5 +303,5 @@
 {
 	shash64 id = table.get_string_hash_64( "id" );
-	if ( !id.valid() )
+	if ( !id )
 	{
 		NV_LOG_ERROR( "Bad table passed to particle_engine!" )
Index: trunk/src/engine/program_manager.cc
===================================================================
--- trunk/src/engine/program_manager.cc	(revision 477)
+++ trunk/src/engine/program_manager.cc	(revision 479)
@@ -36,5 +36,5 @@
 	}
 
-	add( m_context->get_device()->create_program( vsource, fsource ), id );
+	add( id, m_context->get_device()->create_program( vsource, fsource ) );
 	return true;
 }
Index: trunk/src/gfx/skeletal_mesh.cc
===================================================================
--- trunk/src/gfx/skeletal_mesh.cc	(revision 477)
+++ trunk/src/gfx/skeletal_mesh.cc	(revision 479)
@@ -15,25 +15,17 @@
 void nv::skeletal_animation_entry::update_skeleton( skeleton_instance& data, uint32 a_ms_time ) const
 {
-	float  fframe   = ( a_ms_time * 0.001f ) * m_fps;
-	uint32 frame    = uint32( math::floor( fframe ) );
-	float  reminder = fframe - static_cast<float>( frame );
+	float  fframe = ( a_ms_time * 0.001f ) * m_fps;
+	float  nframe = nv::floor( fframe );
 	uint32 duration = get_frame_count();
 	if ( duration == 0 )
 	{
-		frame  = get_start_frame();
-		fframe = static_cast<float>( frame );
+		fframe = static_cast<float>( get_start_frame() );
 	}
-	else if ( frame >= duration )
+	else if ( nframe >= duration )
 	{
 		if ( is_looping() )
-		{
-			frame  = frame % duration;
-			fframe = static_cast<float>( frame ) + reminder;
-		}
+			fframe = nv::fmodf( fframe, nv::f32( duration ) );
 		else
-		{
-			frame  = get_end_frame();
-			fframe = static_cast<float>( frame );
-		}
+			fframe = static_cast<float>( get_end_frame() );
 	}
 
