Index: trunk/src/engine/particle_engine.cc
===================================================================
--- trunk/src/engine/particle_engine.cc	(revision 540)
+++ trunk/src/engine/particle_engine.cc	(revision 543)
@@ -350,8 +350,18 @@
 }
 
+void nv::particle_engine::release( particle_system_info* info )
+{
+	if ( info )
+	{
+		m_pgm->unref( info->group );
+		delete[] info->particles;
+	}
+}
+
 void nv::particle_engine::clear()
 {
-	while ( m_systems.size() > 0 )
-		release( m_systems.get_handle( 0 ) );
+	for ( auto& s : m_systems )
+		release( &s );
+	m_systems.clear();
 	if ( m_pgm )
 		m_pgm->reset();
@@ -363,9 +373,7 @@
 void nv::particle_engine::release( particle_system system )
 {
-	particle_system_info* info = m_systems.get( system );
-	if ( info )
-	{
-		m_pgm->unref( info->group );
-		delete[] info->particles;
+	if ( particle_system_info* info = m_systems.get( system ) )
+	{
+		release( info );
 		m_systems.destroy( system );
 	}
Index: trunk/src/engine/particle_group.cc
===================================================================
--- trunk/src/engine/particle_group.cc	(revision 540)
+++ trunk/src/engine/particle_group.cc	(revision 543)
@@ -33,9 +33,7 @@
 void particle_group_manager::release( particle_group group )
 {
-	particle_group_info* info = m_groups.get( group );
-	if ( info )
-	{
-		delete[] info->quads;
-		m_context->release( info->vtx_array );
+	if ( particle_group_info* info = m_groups.get( group ) )
+	{
+		release( info );
 		m_groups.destroy( group );
 	}
@@ -194,4 +192,13 @@
 }
 
+void nv::particle_group_manager::release( particle_group_info* info )
+{
+	if ( info )
+	{
+		delete[] info->quads;
+		m_context->release( info->vtx_array );
+	}
+}
+
 particle_group_manager::~particle_group_manager()
 {
@@ -201,6 +208,7 @@
 void particle_group_manager::clear()
 {
-	while ( m_groups.size() > 0 )
-		release( m_groups.get_handle( 0 ) );
+	for ( auto& g : m_groups )
+		release( &g );
+	m_groups.clear();
 }
 
