diff --git a/engine/client/r_part.c b/engine/client/r_part.c
index e2c665d63..a12f3c008 100644
--- a/engine/client/r_part.c
+++ b/engine/client/r_part.c
@@ -108,6 +108,9 @@ cvar_t r_particlesdesc = {"r_particlesdesc", "spikeset", NULL, CVAR_LATCH|CVAR_S
 
 cvar_t r_part_rain_quantity = {"r_part_rain_quantity", "1"};
 
+cvar_t r_rockettrail = {"r_rockettrail", "1"};
+cvar_t r_grenadetrail = {"r_grenadetrail", "1"};
+
 cvar_t gl_part_trifansparks = {"gl_part_trifansparks", "0"};
 
 cvar_t r_particle_tracelimit = {"r_particle_tracelimit", "250"};
@@ -774,9 +777,46 @@ void R_DefaultTrail (model_t *model)
 		return;
 
 	if (model->flags & EF_ROCKET)
-		model->particletrail = rt_rocket;//q2 models do this without flags.
+	{
+		switch((int)r_rockettrail.value)
+		{
+		case 0:
+			model->particletrail = AllocateParticleType("t_null");
+			break;
+		case 1:
+		default:
+			model->particletrail = rt_rocket;//q2 models do this without flags.
+			break;
+		case 2:
+			model->particletrail = AllocateParticleType("t_grenade");
+			break;
+		case 3:
+			model->particletrail = AllocateParticleType("t_altrocket");
+			break;
+		case 4:
+			model->particletrail = AllocateParticleType("t_gib");
+			break;
+		case 5:
+			model->particletrail = AllocateParticleType("t_zomgib");
+			break;
+		case 6:
+			model->particletrail = AllocateParticleType("t_tracer");
+			break;
+		case 7:
+			model->particletrail = AllocateParticleType("t_tracer2");
+			break;
+		case 8:
+			model->particletrail = AllocateParticleType("t_tracer3");
+			break;
+		}
+	}
 	else if (model->flags & EF_GRENADE)
-		model->particletrail = AllocateParticleType("t_grenade");
+	{
+		if (r_grenadetrail.value)
+			model->particletrail = AllocateParticleType("t_grenade");
+		else
+			model->particletrail = AllocateParticleType("t_null");
+	}
 	else if (model->flags & EF_GIB)
 		model->particletrail = AllocateParticleType("t_gib");
 	else if (model->flags & EF_TRACER)
@@ -926,6 +966,9 @@ void R_InitParticles (void)
 	Cvar_Register(&gl_part_trifansparks, particlecvargroupname);
 	Cvar_Register(&r_particle_tracelimit, particlecvargroupname);
 
+	Cvar_Register(&r_rockettrail, particlecvargroupname);
+	Cvar_Register(&r_grenadetrail, particlecvargroupname);
+
 	pt_explosion		= AllocateParticleType("te_explosion");
 	pt_emp				= AllocateParticleType("te_emp");
 	pt_pointfile		= AllocateParticleType("te_pointfile");