Index: code/nebula/neblightning.cpp
===================================================================
--- code/nebula/neblightning.cpp	(revision 10833)
+++ code/nebula/neblightning.cpp	(working copy)
@@ -955,15 +955,15 @@
 		vm_vec_add2(&pt, &a->pos);
 			
 		// transform
-		if (Cmdline_nohtl) {
-			g3_rotate_vertex(&c->vex[idx], &pt);
-		} else {
-			g3_transfer_vertex(&c->vex[idx], &pt);
+		g3_rotate_vertex(&c->vex[idx], &pt);
+		g3_project_vertex(&c->vex[idx]);
+		if (!Cmdline_nohtl) {
+			g3_transfer_vertex(&c->vex[idx], &pt, true);
 		}
-		g3_project_vertex(&c->vex[idx]);		
 
 		// if first frame, keep track of the average screen pos
-		if((c->vex[idx].screen.xyw.x >= 0)
+		if( !(c->vex[idx].flags & PF_OVERFLOW)
+			&& (c->vex[idx].screen.xyw.x >= 0)
 			&& (c->vex[idx].screen.xyw.x < gr_screen.max_w)
 			&& (c->vex[idx].screen.xyw.y >= 0)
 			&& (c->vex[idx].screen.xyw.y < gr_screen.max_h))
@@ -975,18 +975,14 @@
 	}
 	// calculate the glow points		
 	nebl_calc_facing_pts_smart(&glow_a, &glow_b, &dir_normal, &a->pos, pinch_a ? 0.5f : width * 6.0f, Nebl_type->b_add);
-	if (Cmdline_nohtl) {
-		g3_rotate_vertex(&c->glow_vex[0], &glow_a);
-	} else {
-		g3_transfer_vertex(&c->glow_vex[0], &glow_a);
-	}
+	g3_rotate_vertex(&c->glow_vex[0], &glow_a);
 	g3_project_vertex(&c->glow_vex[0]);
-	if (Cmdline_nohtl) {
-		g3_rotate_vertex(&c->glow_vex[1], &glow_b);
-	} else {
-		g3_transfer_vertex(&c->glow_vex[1], &glow_b);
+	g3_rotate_vertex(&c->glow_vex[1], &glow_b);
+	g3_project_vertex(&c->glow_vex[1]);
+	if (!Cmdline_nohtl) {
+		g3_transfer_vertex(&c->glow_vex[0], &glow_a, true);
+		g3_transfer_vertex(&c->glow_vex[1], &glow_b, true);
 	}
-	g3_project_vertex(&c->glow_vex[1]);	
 
 	// maybe do a cap
 	if(cap != NULL){		
@@ -1002,15 +998,15 @@
 			vm_vec_add2(&pt, &b->pos);
 			
 			// transform
-			if (Cmdline_nohtl) {
-				g3_rotate_vertex(&cap->vex[idx], &pt);
-			} else {
-				g3_transfer_vertex(&cap->vex[idx], &pt);
+			g3_rotate_vertex(&cap->vex[idx], &pt);
+			g3_project_vertex(&cap->vex[idx]);
+			if (!Cmdline_nohtl) {
+				g3_transfer_vertex(&cap->vex[idx], &pt, true);
 			}
-			g3_project_vertex(&cap->vex[idx]);			
 
 			// if first frame, keep track of the average screen pos			
-			if( (cap->vex[idx].screen.xyw.x >= 0)
+			if( !(cap->vex[idx].flags & PF_OVERFLOW)
+				&& (cap->vex[idx].screen.xyw.x >= 0)
 				&& (cap->vex[idx].screen.xyw.x < gr_screen.max_w)
 				&& (cap->vex[idx].screen.xyw.y >= 0)
 				&& (cap->vex[idx].screen.xyw.y < gr_screen.max_h))
@@ -1023,18 +1019,14 @@
 		
 		// calculate the glow points		
 		nebl_calc_facing_pts_smart(&glow_a, &glow_b, &dir_normal, &b->pos, pinch_b ? 0.5f : width * 6.0f, bi->b_add);
-		if (Cmdline_nohtl) {
-			g3_rotate_vertex(&cap->glow_vex[0], &glow_a);
-		} else {
-			g3_transfer_vertex(&cap->glow_vex[0], &glow_a);
-		}
+		g3_rotate_vertex(&cap->glow_vex[0], &glow_a);
 		g3_project_vertex(&cap->glow_vex[0]);
-		if (Cmdline_nohtl) {
-			g3_rotate_vertex(&cap->glow_vex[1], &glow_b);
-		} else {
-			g3_transfer_vertex(&cap->glow_vex[1], &glow_b);
+		g3_rotate_vertex(&cap->glow_vex[1], &glow_b);
+		g3_project_vertex(&cap->glow_vex[1]);
+		if (!Cmdline_nohtl) {
+			g3_transfer_vertex(&cap->glow_vex[0], &glow_a, true);
+			g3_transfer_vertex(&cap->glow_vex[1], &glow_b, true);
 		}
-		g3_project_vertex(&cap->glow_vex[1]);
 	}
 }
 
Index: code/render/3d.h
===================================================================
--- code/render/3d.h	(revision 10833)
+++ code/render/3d.h	(working copy)
@@ -354,7 +354,7 @@
  */
 void g3_stop_user_clip_plane();
 
-ubyte g3_transfer_vertex(vertex *dest, vec3d *src);
+ubyte g3_transfer_vertex(vertex *dest, vec3d *src, bool keep_flags = false);
 
 int g3_draw_2d_poly_bitmap_list(bitmap_2d_list* b_list, int n_bm, uint additional_tmap_flags);
 int g3_draw_2d_poly_bitmap_rect_list(bitmap_rect_list* b_list, int n_bm, uint additional_tmap_flags);
Index: code/render/3dmath.cpp
===================================================================
--- code/render/3dmath.cpp	(revision 10833)
+++ code/render/3dmath.cpp	(working copy)
@@ -81,12 +81,14 @@
 
 }
 
-ubyte g3_transfer_vertex(vertex *dest,vec3d *src)
+ubyte g3_transfer_vertex(vertex *dest, vec3d *src, bool keep_flags)
 {
 	dest->world = *src;
 
-	dest->codes = 0;
-	dest->flags = 0;
+	if (!keep_flags) {
+		dest->codes = 0;
+		dest->flags = 0;
+	}
 
 	return 0;
 }
