Index: trunk/src/gl/gl_context.cc
===================================================================
--- trunk/src/gl/gl_context.cc	(revision 383)
+++ trunk/src/gl/gl_context.cc	(revision 392)
@@ -713,5 +713,5 @@
 	if ( info )
 	{
-		for ( auto u : info->m_engine_uniforms )
+		for ( auto& u : *info->m_engine_uniforms )
 		{
 			u->set( this, &s );
Index: trunk/src/gl/gl_device.cc
===================================================================
--- trunk/src/gl/gl_device.cc	(revision 383)
+++ trunk/src/gl/gl_device.cc	(revision 392)
@@ -17,7 +17,7 @@
 	m_shader_header  = "#version 120\n";
 	for ( auto& i : get_uniform_factory() ) 
-		m_shader_header += "uniform "+datatype_to_glsl_type( i.second->get_datatype() )+" "+i.first+";\n";
+		m_shader_header += "uniform "+datatype_to_glsl_type( i.second->get_datatype() )+" "+ i.first.to_string() +";\n";
 	for ( auto& i : get_link_uniform_factory() ) 
-		m_shader_header += "uniform sampler2D "+i.first+";\n";
+		m_shader_header += "uniform sampler2D "+i.first.to_string() +";\n";
 }
 
@@ -26,4 +26,8 @@
 	program result = m_programs.create();
 	gl_program_info* info = m_programs.get( result );
+
+	info->m_attribute_map   = new attribute_map;
+	info->m_engine_uniforms = new engine_uniform_list;
+	info->m_uniform_map     = new uniform_map;
 
 	info->glid = glCreateProgram();
@@ -179,5 +183,5 @@
 	if ( info )
 	{
-		for ( auto& i : info->m_uniform_map )
+		for ( auto& i : *info->m_uniform_map )
 			delete i.second;
 
@@ -188,4 +192,8 @@
 		glDeleteProgram( info->glid );
 
+		delete info->m_attribute_map;
+		delete info->m_engine_uniforms;
+		delete info->m_uniform_map;
+
 		m_programs.destroy( p );
 	}
@@ -200,5 +208,5 @@
 		auto& lmap = get_link_uniform_factory();
 
-		for ( auto& i : info->m_uniform_map )
+		for ( auto& i : *info->m_uniform_map )
 		{
 			auto j = lmap.find( i.first );
@@ -211,5 +219,5 @@
 			if ( k != map.end() )
 			{
-				info->m_engine_uniforms.push_back( k->second->create( i.second ) );
+				info->m_engine_uniforms->push_back( k->second->create( i.second ) );
 			}				
 		}
@@ -221,6 +229,6 @@
 	const gl_program_info* info = m_programs.get( p );
 	{
-		nv::uniform_map::const_iterator i = info->m_uniform_map.find( name );
-		if ( i != info->m_uniform_map.end() )
+		nv::uniform_map::const_iterator i = info->m_uniform_map->find( name );
+		if ( i != info->m_uniform_map->end() )
 		{
 			return i->second;
@@ -240,6 +248,6 @@
 	if ( info )
 	{
-		attribute_map::const_iterator i = info->m_attribute_map.find( name );
-		if ( i != info->m_attribute_map.end() )
+		attribute_map::const_iterator i = info->m_attribute_map->find( name );
+		if ( i != info->m_attribute_map->end() )
 		{
 			return i->second.location;
@@ -307,7 +315,7 @@
 void nv::gl_device::update_uniforms( gl_program_info* p )
 {
-	for ( uniform_map::iterator i = p->m_uniform_map.begin(); 	i != p->m_uniform_map.end(); ++i ) 
-	{
-		uniform_base* ubase = i->second;
+	for ( auto& i : *p->m_uniform_map )
+	{
+		uniform_base* ubase = i.second;
 		if ( ubase->is_dirty() )
 		{
@@ -354,5 +362,5 @@
 		int attr_loc = glGetAttribLocation( p->glid, name.c_str() );
 
-		attribute& attr = p->m_attribute_map[ name ];
+		attribute& attr = (*p->m_attribute_map)[ name ];
 		attr.name     = name;
 		attr.location = attr_loc;
@@ -393,5 +401,5 @@
 		uniform_base* u = uniform_base::create( utype, name, uni_loc, uni_len );
 		NV_ASSERT( u, "Unknown uniform type!" );
-		p->m_uniform_map[ name ] = u;
+		(*p->m_uniform_map)[ name ] = u;
 	}
 }
