Index: code/ai/ai_profiles.cpp
===================================================================
--- code/ai/ai_profiles.cpp	(revision 4831)
+++ code/ai/ai_profiles.cpp	(working copy)
@@ -363,6 +369,8 @@
 
 			set_flag(profile, "$allow event and goal scoring in multiplayer:", AIPF_ALLOW_MULTI_EVENT_SCORING);
 
+			set_flag(profile, "$AI supports limited afterburner fuel:", AIPF_AI_SUPPORTS_LIMITED_AFTERBURNER_FUEL);
+
 			// if we've been through once already and are at the same place, force a move
 			if ( saved_Mp && (saved_Mp == Mp) )
 				Mp++;
Index: code/ai/ai_profiles.h
===================================================================
--- code/ai/ai_profiles.h	(revision 4831)
+++ code/ai/ai_profiles.h	(working copy)
@@ -77,6 +77,7 @@
 #define AIPF_KILL_SCORING_SCALES_WITH_DAMAGE						(1 << 16)
 #define AIPF_ASSIST_SCORING_SCALES_WITH_DAMAGE						(1 << 17)
 #define AIPF_ALLOW_MULTI_EVENT_SCORING								(1 << 18)
+#define AIPF_AI_SUPPORTS_LIMITED_AFTERBURNER_FUEL					(1 << 19)
 
 
 #define MAX_AI_PROFILES	5
Index: code/ai/aicode.cpp
===================================================================
--- code/ai/aicode.cpp	(revision 4831)
+++ code/ai/aicode.cpp	(working copy)
@@ -6033,7 +6033,12 @@
 		float percent_left = 100.0f * shipp->afterburner_fuel / sip->afterburner_fuel_capacity;
 		if (percent_left > 30.0f + ((Pl_objp-Objects) & 0x0f)) {
 			afterburners_start(Pl_objp);
-			aip->afterburner_stop_time = Missiontime + F1_0 + static_rand(Pl_objp-Objects)/4;
+			
+			if (The_mission.ai_profile->flags & AIPF_AI_SUPPORTS_LIMITED_AFTERBURNER_FUEL) {
+				aip->afterburner_stop_time = Missiontime + F1_0 + static_randf(Pl_objp-Objects) * F1_0 / 4;
+			} else {				
+				aip->afterburner_stop_time = Missiontime + F1_0 + static_rand(Pl_objp-Objects)/4;
+			}
 		}
 	}
 
@@ -7584,8 +7589,30 @@
 					if (sip->afterburner_fuel_capacity > 0.0f) {
 						percent_left = 100.0f * shipp->afterburner_fuel / sip->afterburner_fuel_capacity;
 						if (percent_left > 30.0f + ((Pl_objp-Objects) & 0x0f)) {
-							afterburners_start(Pl_objp);
-							aip->afterburner_stop_time = Missiontime + F1_0 + static_rand(Pl_objp-Objects)/4;
+							afterburners_start(Pl_objp);							
+							if (The_mission.ai_profile->flags & AIPF_AI_SUPPORTS_LIMITED_AFTERBURNER_FUEL) {
+								float max_ab_vel;
+								float time_to_exhaust_25pct_fuel;
+								float time_to_fly_75pct_of_distance;
+								float ab_time;
+
+								// Max afterburner speed - make sure we don't devide by 0 later
+								max_ab_vel = sip->afterburner_max_vel.xyz.z > 0.0f ? sip->afterburner_max_vel.xyz.z : sip->max_vel.xyz.z;
+								max_ab_vel = max_ab_vel > 0.0f ? max_ab_vel : 0.0001f;
+
+								// Time to exhaust 25% of the remaining fuel
+								time_to_exhaust_25pct_fuel = shipp->afterburner_fuel * 0.25f / sip->afterburner_burn_rate;
+
+								// Time to fly 75% of the distance to the target
+								time_to_fly_75pct_of_distance = dist_to_enemy * 0.75f / max_ab_vel;
+
+								// Get minimum
+								ab_time = min(time_to_exhaust_25pct_fuel, time_to_fly_75pct_of_distance);								
+								
+								aip->afterburner_stop_time = Missiontime + F1_0 * ab_time;
+							} else {				
+								aip->afterburner_stop_time = Missiontime + F1_0 + static_rand(Pl_objp-Objects)/4;
+							}
 						}
 					}
 				}
Index: code/globalincs/def_files.cpp
===================================================================
--- code/globalincs/def_files.cpp	(revision 4831)
+++ code/globalincs/def_files.cpp	(working copy)
@@ -864,6 +870,10 @@
 ;; events in multiplayer												\n\
 $allow event and goal scoring in multiplayer: NO						\n\
 																		\n\
+;; if set, the AI can handle limited afterburner fuel					\n\
+;; and will be smarter in spending it									\n\
+$AI supports limited afterburner fuel: NO								\n\
 																		\n\
+																		\n\
 #End																	\n\
 ";
