Index: code/particle/particle.cpp
===================================================================
--- code/particle/particle.cpp	(revision 9388)
+++ code/particle/particle.cpp	(working copy)
@@ -23,7 +23,7 @@
 #endif
 
 int Num_particles = 0;
-static SCP_vector<particle*> Particles;
+static SCP_list<particle*> Particles;
 
 int Anim_bitmap_id_fire = -1;
 int Anim_num_frames_fire = -1;
@@ -75,14 +75,10 @@
 // only call from game_shutdown()!!!
 void particle_close()
 {
-	while (!Particles.empty())
-	{		
-		particle* part = Particles.back();
-		part->signature = 0;
-		delete part;
-
-		Particles.pop_back();
+	for (SCP_list<particle*>::iterator p = Particles.begin(); p != Particles.end(); ++p) {		
+		delete *p;
 	}
+	Particles.clear();
 }
 
 void particle_page_in()
@@ -252,7 +248,7 @@
 	if ( Particles.empty() )
 		return;
 
-	for (SCP_vector<particle*>::iterator p = Particles.begin(); p != Particles.end(); ) {	
+	for (SCP_list<particle*>::iterator p = Particles.begin(); p != Particles.end(); ++p) {	
 		particle* part = *p;
 		if (part->age == 0.0f) {
 			part->age = 0.00001f;
@@ -266,10 +262,7 @@
 			if ( (part->age > frametime) || (part->max_life > 0.0f) ) {
 				part->signature = 0;
 				delete *p;
-				*p = NULL;
-
-				*p = Particles.back();
-				Particles.pop_back();
+				p = Particles.erase(p);
 				continue;
 			}
 		}
@@ -282,10 +275,7 @@
 			{
 				part->signature = 0;
 				delete *p;
-				*p = NULL;
-
-				*p = Particles.back();
-				Particles.pop_back();
+				p = Particles.erase(p);
 				continue;
 			}
 		}
@@ -293,9 +283,6 @@
 		else {
 			vm_vec_scale_add2( &part->pos, &part->velocity, frametime );
 		}
-
-		// next particle
-		++p;
 	}
 }
 
@@ -306,13 +293,10 @@
 	Num_particles = 0;
 	Num_particles_hwm = 0;
 
-	while (!Particles.empty())
-	{
-		particle* part = Particles.back();
-		part->signature = 0;
-		delete part;
-		Particles.pop_back();
+	for (SCP_list<particle*>::iterator p = Particles.begin(); p != Particles.end(); ++p) {		
+		delete *p;
 	}
+	Particles.clear();
 }
 
 MONITOR( NumParticlesRend )
@@ -363,7 +347,7 @@
 	if ( Particles.empty() )
 		return;
 
-	for (SCP_vector<particle*>::iterator p = Particles.begin(); p != Particles.end(); ++p) {
+	for (SCP_list<particle*>::iterator p = Particles.begin(); p != Particles.end(); ++p) {
 		particle* part = *p;
 		// skip back-facing particles (ripped from fullneb code)
 		// Wanderer - add support for attached particles
