Index: trunk/src/gl/gl_vertex_buffer.cc
===================================================================
--- trunk/src/gl/gl_vertex_buffer.cc	(revision 98)
+++ trunk/src/gl/gl_vertex_buffer.cc	(revision 99)
@@ -25,4 +25,12 @@
 	glBindBuffer( GL_ARRAY_BUFFER, 0);
 }
+
+void gl_vertex_buffer::assign( void* data, int offset, int size )
+{
+	glBindBuffer( GL_ARRAY_BUFFER, m_name.get_value() );
+	glBufferSubData( GL_ARRAY_BUFFER, offset, size, data );
+	glBindBuffer( GL_ARRAY_BUFFER, 0);
+}
+
 
 void gl_vertex_buffer::bind()
@@ -54,4 +62,11 @@
 	glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_name.get_value() );
 	glBufferData( GL_ELEMENT_ARRAY_BUFFER, m_size, data, buffer_hint_to_enum( m_hint ) );
+	glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0);
+}
+
+void gl_index_buffer::assign( void* data, int offset, int size )
+{
+	glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_name.get_value() );
+	glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, offset, size, data );
 	glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0);
 }
Index: trunk/src/gui/gui_element.cc
===================================================================
--- trunk/src/gui/gui_element.cc	(revision 98)
+++ trunk/src/gui/gui_element.cc	(revision 99)
@@ -12,6 +12,6 @@
 using namespace nv::gui;
 
-element::element( root* aroot, const rectangle r ) 
-	: object( aroot, "" ), m_class(""), m_relative( r ), m_absolute( r ), m_enabled( true ), m_visible( true ), m_dirty( true )
+element::element( root* aroot, const rectangle& r ) 
+	: object( aroot, "" ), m_class(""), m_relative( r ), m_absolute( r ), m_enabled( true ), m_visible( true ), m_dirty( true ), m_render_data( nullptr )
 {
 
@@ -97,2 +97,15 @@
 	}
 }
+
+void element::recalculate_absolute_children()
+{
+	for ( object* o : *this )
+	{
+		((element*)o)->recalculate_absolute();
+	}
+}
+
+element::~element()
+{
+	delete m_render_data;
+}
