Index: code/object/objcollide.cpp
===================================================================
--- code/object/objcollide.cpp	(revision 8916)
+++ code/object/objcollide.cpp	(working copy)
@@ -779,9 +779,24 @@
 			vec3d delta_x, laser_vel;
 			float a,b,c, delta_x_dot_vl, delta_t;
 			float root1, root2, root, earliest_time;
-
+			float laser_vel_mag;
 			vm_vec_sub( &delta_x, &obj_weapon->pos, &other->pos );
 			laser_vel = obj_weapon->phys_info.vel;
+
+			laser_vel_mag = vm_vec_mag(&laser_vel);
+			if( laser_vel_mag < max_vel_other ) { //Valathil - Algorithm is ill suited for projectiles with a slower speed than the targeted ship
+				float delta_x_mag = vm_vec_mag(&delta_x);
+				if( delta_x_mag < other->radius)
+					current_pair->next_check_time = timestamp(0);
+				else {
+					float earliest_time = (delta_x_mag - other->radius)/(laser_vel_mag + max_vel_other);
+					if( earliest_time > wp->lifeleft )
+						return 1;
+					current_pair->next_check_time = timestamp( fl2i( earliest_time*1000.0f ) );
+				}
+				return 0;
+			}
+			
 			// vm_vec_copy_scale( &laser_vel, &weapon->orient.vec.fvec, max_vel_weapon );
 			delta_t = (other->radius + 10.0f) / max_vel_other;		// time to get from center to radius of other obj
 			delta_x_dot_vl = vm_vec_dotprod( &delta_x, &laser_vel );
