Index: /trunk/nv/lua/lua_state.hh
===================================================================
--- /trunk/nv/lua/lua_state.hh	(revision 304)
+++ /trunk/nv/lua/lua_state.hh	(revision 305)
@@ -130,4 +130,33 @@
 			}
 
+			template< typename R >
+			R get( const path& p, const R& def )
+			{
+				if ( p.resolve( m_state, m_global ) )
+				{
+					return detail::pop_return_value<R>( m_state, def );
+				}
+				return R();
+			}
+
+			template< typename R, typename T >
+			R get( const T& key, const R& def )
+			{
+				if ( m_global ) push_global_table();
+				detail::push_value( m_state, key );
+				call_get();
+				if ( m_global ) pop_global_table();
+				return detail::pop_return_value<R>( m_state, def );
+			}
+
+			template< typename R, typename T >
+			R raw_get( const T& key, const R& def )
+			{
+				if ( m_global ) push_global_table();
+				detail::push_value( m_state, key );
+				call_get_raw();
+				if ( m_global ) pop_global_table();
+				return detail::pop_return_value<R>( m_state, def );
+			}
 			bool is_defined( const path& p ) { return is_defined( p, m_global ); }
 			void register_native_function( lfunction f, const char* name );
Index: /trunk/nv/lua/lua_values.hh
===================================================================
--- /trunk/nv/lua/lua_values.hh	(revision 304)
+++ /trunk/nv/lua/lua_values.hh	(revision 305)
@@ -247,4 +247,21 @@
 
 			template < typename T >
+			inline void pop_value( lua_State *L, T& p, const T& def )
+			{
+				typedef typename type_degrade<T>::type degraded;
+				p = (T)pass_traits<degraded>::to( L, -1, def );
+				detail::pop_and_discard(L, 1);
+			}
+			template < typename T >
+			inline T pop_return_value( lua_State *L, const T& def )
+			{
+				typedef typename type_degrade<T>::type degraded;
+				T ret;
+				ret = (T)pass_traits<degraded>::to( L, -1, def );
+				detail::pop_and_discard(L, 1);
+				return ret;
+			}
+
+			template < typename T >
 			inline typename std::remove_reference<T>::type get_value( lua_State *L, int index )
 			{
Index: /trunk/src/lua/lua_state.cc
===================================================================
--- /trunk/src/lua/lua_state.cc	(revision 304)
+++ /trunk/src/lua/lua_state.cc	(revision 305)
@@ -118,6 +118,7 @@
 	m_global = false;
 	m_level  = lua_gettop( m_state );
-	if ( !p.resolve( m_state, global ) )
-	{
+	if ( !p.resolve( m_state, global ) || lua_type(m_state, -1) != LUA_TTABLE )
+	{
+		NV_LOG( LOG_ERROR, "Could not resolve table!" );
 		// TODO : error handling
 	}
@@ -129,6 +130,7 @@
 	m_global = false;
 	m_level  = lua_gettop( m_state );
-	if ( !p.resolve( m_state, false ) )
-	{
+	if ( !p.resolve( m_state, false ) || lua_type(m_state, -1) != LUA_TTABLE )
+	{
+		NV_LOG( LOG_ERROR, "Could not resolve table!" );
 		// TODO : error handling
 	}
