Index: code/ai/ai_profiles.cpp
===================================================================
--- code/ai/ai_profiles.cpp	(revision 4835)
+++ code/ai/ai_profiles.cpp	(working copy)
@@ -335,6 +335,8 @@
 
 			set_flag(profile, "$smart afterburner management:", AIPF_SMART_AFTERBURNER_MANAGEMENT);
 
+			set_flag(profile, "$smart linked fire management:", AIPF_SMART_LINKED_FIRE_MANAGEMENT);
+
 			set_flag(profile, "$allow rapid secondary dumbfire:", AIPF_ALLOW_RAPID_SECONDARY_DUMBFIRE);
 			
 			set_flag(profile, "$huge turret weapons ignore bombs:", AIPF_HUGE_TURRET_WEAPONS_IGNORE_BOMBS);
Index: code/ai/ai_profiles.h
===================================================================
--- code/ai/ai_profiles.h	(revision 4835)
+++ code/ai/ai_profiles.h	(working copy)
@@ -78,6 +78,7 @@
 #define AIPF_ASSIST_SCORING_SCALES_WITH_DAMAGE						(1 << 17)
 #define AIPF_ALLOW_MULTI_EVENT_SCORING								(1 << 18)
 #define AIPF_SMART_AFTERBURNER_MANAGEMENT							(1 << 19)
+#define AIPF_SMART_LINKED_FIRE_MANAGEMENT							(1 << 20)
 
 
 #define MAX_AI_PROFILES	5
Index: code/ai/aicode.cpp
===================================================================
--- code/ai/aicode.cpp	(revision 4835)
+++ code/ai/aicode.cpp	(working copy)
@@ -6554,9 +6554,11 @@
 	}
 
 	// regular lasers
-	if (shipp->weapon_energy > The_mission.ai_profile->link_energy_levels_always[Game_skill_level]) {
+	if (!(The_mission.ai_profile->flags & AIPF_SMART_LINKED_FIRE_MANAGEMENT) && shipp->weapon_energy > The_mission.ai_profile->link_energy_levels_always[Game_skill_level] ||
+		The_mission.ai_profile->flags & AIPF_SMART_LINKED_FIRE_MANAGEMENT && shipp->weapon_energy * 100.0f / sip->max_weapon_reserve > The_mission.ai_profile->link_energy_levels_always[Game_skill_level]) {
 		shipp->flags |= SF_PRIMARY_LINKED;
-	} else if (shipp->weapon_energy > The_mission.ai_profile->link_energy_levels_maybe[Game_skill_level]) {
+	} else if (!(The_mission.ai_profile->flags & AIPF_SMART_LINKED_FIRE_MANAGEMENT) && shipp->weapon_energy > The_mission.ai_profile->link_energy_levels_maybe[Game_skill_level] ||
+				The_mission.ai_profile->flags & AIPF_SMART_LINKED_FIRE_MANAGEMENT && shipp->weapon_energy * 100.0f / sip->max_weapon_reserve > The_mission.ai_profile->link_energy_levels_maybe[Game_skill_level]) {
 		if (objp->hull_strength < shipp->ship_max_hull_strength/3.0f)
 			shipp->flags |= SF_PRIMARY_LINKED;
 	}
Index: code/globalincs/def_files.cpp
===================================================================
--- code/globalincs/def_files.cpp	(revision 4835)
+++ code/globalincs/def_files.cpp	(working copy)
@@ -816,6 +816,10 @@
 ;; instead of afterburning until fuel is exhausted						\n\
 $smart afterburner management: NO										\n\
 																		\n\
+;; if set, the AI will properly link primaries according to				\n\
+;; specified percentages of energy levels instead of retail behavior	\n\
+$smart linked fire management: NO										\n\
+																		\n\
 ;; if set, allows an AI ship to switch to rapid fire for dumbfire		\n\
 ;; missiles																\n\
 $allow rapid secondary dumbfire: NO										\n\
