Index: /trunk/nv/core/resource.hh
===================================================================
--- /trunk/nv/core/resource.hh	(revision 512)
+++ /trunk/nv/core/resource.hh	(revision 513)
@@ -20,5 +20,5 @@
 
 #include <nv/core/logging.hh>
-
+#include <nv/core/types.hh>
 
 namespace nv
@@ -30,5 +30,5 @@
 	template < typename T > class resource_lock;
 	using resource_id = shash64;
-	using resource_type_id = shash64;
+	using resource_type_id = thash64;
 
 	class resource_handler
@@ -211,5 +211,5 @@
 		Manager* register_resource_handler( Manager* handler )
 		{
-			return static_cast<Manager*>( register_resource_handler( handler, resource_type_id( rtti_type_hash<T>::value ) ) );
+			return static_cast<Manager*>( register_resource_handler( handler, resource_type_id::create<T>() ) );
 		}
 
@@ -217,5 +217,5 @@
 		resource< T > get( const string_view& id )
 		{
-			auto m = m_handlers.find( resource_type_id( rtti_type_hash<T>::value ) );
+			auto m = m_handlers.find( resource_type_id::create<T>() );
 			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
 			shash64 hid( id );
@@ -229,5 +229,5 @@
 		resource< T > get( uint64 id )
 		{
-			auto m = m_handlers.find( resource_type_id( rtti_type_hash<T>::value ) );
+			auto m = m_handlers.find( resource_type_id::create<T>() );
 			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
 			shash64 hid( id );
@@ -243,5 +243,5 @@
 		resource< T > add( shash64 id, T* value )
 		{
-			auto m = m_handlers.find( resource_type_id( rtti_type_hash<T>::value ) );
+			auto m = m_handlers.find( resource_type_id::create<T>() );
 			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
 			m->second->raw_add( id, value );
@@ -252,23 +252,37 @@
 		void remove( shash64 id )
 		{
-			auto m = m_handlers.find( resource_type_id( rtti_type_hash<T>::value ) );
+			remove( resource_type_id::create<T>(), id );
+		}
+
+		template < typename T >
+		void rename( shash64 id, shash64 new_id )
+		{
+			rename( resource_type_id::create<T>(), id, new_id );
+		}
+
+		template < typename T > bool exists( shash64 id )
+		{
+			return exists( resource_type_id::create<T>(), id );
+		}
+
+		bool exists( resource_type_id tid, resource_id id )
+		{
+			auto m = m_handlers.find( tid );
+			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
+			return m->second->exists( id );
+		}
+
+		void rename( resource_type_id tid, resource_id id, resource_id new_id )
+		{
+			auto m = m_handlers.find( tid );
+			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
+			m->second->rename( id, new_id );
+		}
+
+		void remove( resource_type_id tid, resource_id id )
+		{
+			auto m = m_handlers.find( tid );
 			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
 			m->second->remove( id );
-		}
-
-		template < typename T >
-		void rename( shash64 id, shash64 new_id )
-		{
-			auto m = m_handlers.find( resource_type_id( rtti_type_hash<T>::value ) );
-			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
-			m->second->rename( id, new_id );
-		}
-
-		template < typename T >
-		bool exists( shash64 id )
-		{
-			auto m = m_handlers.find( resource_type_id( rtti_type_hash<T>::value ) );
-			NV_ASSERT( m != m_handlers.end(), "Resource type unrecognized!" );
-			return m->second->exists( id );
 		}
 
@@ -279,4 +293,6 @@
 				delete *i;
 		}
+
+
 	protected:
 
