Index: trunk/src/lua/lua_iterator.cc
===================================================================
--- trunk/src/lua/lua_iterator.cc	(revision 538)
+++ trunk/src/lua/lua_iterator.cc	(revision 538)
@@ -0,0 +1,43 @@
+// Copyright (C) 2017-2017 ChaosForge Ltd
+// http://chaosforge.org/
+//
+// This file is part of Nova libraries. 
+// For conditions of distribution and use, see copying.txt file in root folder.
+
+#include "nv/lua/lua_iterator.hh"
+
+#include "nv/lua/lua_raw.hh"
+#include "nv/lua/lua_state.hh"
+
+using namespace nv;
+using namespace nv::lua;
+
+nv::lua::iterator_provider_base::iterator_provider_base( state* parent, int index )
+{
+	m_parent = parent;
+	m_index = nlua_absindex( *m_parent, index );
+	m_level = lua_gettop( *m_parent );
+	lua_pushnil( *m_parent );
+}
+
+nv::lua::iterator_provider_base::~iterator_provider_base()
+{
+	if ( m_parent )
+		lua_settop( *m_parent, m_level );
+}
+
+void nv::lua::iterator_base::next()
+{
+	if ( !m_state ) return;
+	lua_pop( *( m_state ), 1 );
+	if ( lua_next( *( m_state ), m_index ) == 0 )
+		m_state = nullptr;
+}
+
+nv::lua::iterator_base::iterator_base( state* state, sint32 index )
+	: m_state( state ), m_index( index )
+{
+	if ( m_state )
+		if ( lua_next( *( m_state ), m_index ) == 0 )
+			m_state = nullptr;
+}
Index: trunk/src/lua/lua_proxy.cc
===================================================================
--- trunk/src/lua/lua_proxy.cc	(revision 538)
+++ trunk/src/lua/lua_proxy.cc	(revision 538)
@@ -0,0 +1,32 @@
+// Copyright (C) 2017-2017 ChaosForge Ltd
+// http://chaosforge.org/
+//
+// This file is part of Nova libraries. 
+// For conditions of distribution and use, see copying.txt file in root folder.
+
+#include "nv/lua/lua_proxy.hh"
+
+#include "nv/lua/lua_raw.hh"
+#include "nv/lua/lua_state.hh"
+
+using namespace nv;
+using namespace nv::lua;
+
+nv::string64 nv::lua::stack_proxy::get_string64() const
+{
+	size_t l = 0;
+	const char* str = nullptr;
+	if ( lua_type( *m_state, m_index ) == LUA_TSTRING )
+	{
+		str = lua_tolstring( *m_state, m_index, &l );
+	}
+	return string64( str, static_cast<uint32>( l ) );
+}
+
+nv::string64 nv::lua::stack_proxy::to_string64()
+{
+	size_t l = 0;
+	const char* str = nullptr;
+	str = lua_tolstring( *m_state, m_index, &l );
+	return string64( str, static_cast<uint32>( l ) );
+}
Index: trunk/src/lua/lua_state.cc
===================================================================
--- trunk/src/lua/lua_state.cc	(revision 535)
+++ trunk/src/lua/lua_state.cc	(revision 538)
@@ -938,2 +938,3 @@
 //	insert<nv::uint64>( nlua_rtti_floating_push<nv::uint64>, nlua_rtti_floating_read<nv::uint64> );
 }
+
