Index: trunk/src/gui/gui_environment.cc
===================================================================
--- trunk/src/gui/gui_environment.cc	(revision 257)
+++ trunk/src/gui/gui_environment.cc	(revision 264)
@@ -36,5 +36,4 @@
 	m_screen = new screen( m_area );
 	m_renderer = new renderer( w, shader_path );
-	root::add_child( m_screen );
 }
 
@@ -47,8 +46,14 @@
 {
 	element* result = new element( r );
-	object_created( result );
 	if ( parent == nullptr ) parent = m_screen;
 	parent->add_child( result );
 	return result;
+}
+
+void nv::gui::environment::destroy_element( element* e )
+{
+	destroy_children( e );
+	e->detach();
+	delete e;
 }
 
@@ -94,13 +99,21 @@
 }
 
-void environment::add_child( object* child )
+void environment::add_child( element* child )
 {
-	// TODO: check if element
 	m_screen->add_child( child );
 }
 
+void environment::destroy_children( element* e )
+{
+	while ( !e->m_children.empty() )
+	{
+		destroy_element( (element*)e->m_children.front() );
+	}
+}
+
+
 environment::~environment()
 {
-	destroy_children( this );
+	destroy_element( m_screen );
 	delete m_renderer;
 }
