diff --git a/E3Next/Data/Spell.cs b/E3Next/Data/Spell.cs
index ab530d4c..e241cc98 100644
--- a/E3Next/Data/Spell.cs
+++ b/E3Next/Data/Spell.cs
@@ -100,6 +100,10 @@ void Parse(IniData parsedData)
 					{
 						Debug = true;
 					}
+					else if (value.Equals("IgnoreStackRules", StringComparison.OrdinalIgnoreCase))
+					{
+						IgnoreStackRules = true;
+					}
 					else if (value.StartsWith("HealthMax|", StringComparison.OrdinalIgnoreCase))
 					{
 						HealthMax = GetArgument<Int32>(value);
@@ -798,6 +802,7 @@ public decimal MyCastTime
         public Int64 LastUpdateCheckFromTopicUpdate = 0;
         public bool IsShortBuff = false;
         public Int32 HealthMax = 100;
+        public bool IgnoreStackRules = false;
       
 
         public override string ToString()
diff --git a/E3Next/Processors/Alerts.cs b/E3Next/Processors/Alerts.cs
index 3fe8718e..49a5b782 100644
--- a/E3Next/Processors/Alerts.cs
+++ b/E3Next/Processors/Alerts.cs
@@ -201,8 +201,7 @@ private static void RegisterEvents()
 
 				
 				if (!Basics.IsPaused) return;
-				Basics.IsPaused = false;
-				E3.Bots.Broadcast("\agRunning E3 again!");
+				Basics.Pause(false);
 			});
 			pattern = @"It will take you about 30 seconds to prepare your camp\.";
 			EventProcessor.RegisterEvent("PauseForCamp30", pattern, (x) => {
@@ -211,9 +210,7 @@ private static void RegisterEvents()
 				{
 					return;
 				}
-				if (Basics.IsPaused) return;
-				Basics.IsPaused = true;
-				E3.Bots.Broadcast("\arPAUSING E3!");
+                Basics.Pause(true);
 			});
 			pattern = @"It will take about 20 more seconds to prepare your camp\.";
 			EventProcessor.RegisterEvent("PauseForCamp20", pattern, (x) => {
@@ -224,8 +221,7 @@ private static void RegisterEvents()
 					return;
 				}
                 if (Basics.IsPaused) return;
-				Basics.IsPaused = true;
-				E3.Bots.Broadcast("\arPAUSING E3!");
+				Basics.Pause(true);
 			});
 
 			pattern = @"It will take about 5 more seconds to prepare your camp\.";
diff --git a/E3Next/Processors/Basics.cs b/E3Next/Processors/Basics.cs
index 68369d3c..6825fe06 100644
--- a/E3Next/Processors/Basics.cs
+++ b/E3Next/Processors/Basics.cs
@@ -279,8 +279,32 @@ public static void RegisterEvents()
                     PubServer.AddTopicMessage("WorldShutdown", $"{minutes}");
                 }
             });
+			EventProcessor.RegisterCommand("/e3camp", (x) =>
+			{
+				string user = string.Empty;
+
+				if (x.args.Count > 0)
+				{
+					if (!e3util.FilterMe(x))
+					{
+                        Pause(true);
+                        MQ.Cmd("/camp");
+
+					}
+				}
+				else
+				{
+                    if (!e3util.FilterMe(x))
+                    {
+                        Pause(true);
+                        MQ.Cmd("/camp");
+                    }
+					//we are telling people to follow us
+					E3.Bots.BroadcastCommandToGroup("/e3camp " + E3.CurrentName, x);
 
-            EventProcessor.RegisterCommand("/e3treport", (x) =>
+				}
+			});
+			EventProcessor.RegisterCommand("/e3treport", (x) =>
 			{
                 if(x.args.Count > 0)
                 {
@@ -668,25 +692,21 @@ public static void RegisterEvents()
                     {
                         if (IsPaused)
                         {
-                            IsPaused = false;
-                            E3.Bots.Broadcast("\agRunning E3 again!");
+                            Pause(false);
                         }
                     }
                     else if (x.args[0].Equals("on", StringComparison.OrdinalIgnoreCase))
                     {
                         if(!IsPaused)
                         {
-                            IsPaused = true;
-                            E3.Bots.Broadcast("\arPAUSING E3!");
-
+                            Pause(true);
                         }
                     }
                 }
                 else
                 {
-                    IsPaused = IsPaused ? false : true;
-                    if (IsPaused) E3.Bots.Broadcast("\arPAUSING E3!");
-                    if (!IsPaused) E3.Bots.Broadcast("\agRunning E3 again!");
+
+                    Pause(IsPaused ? false : true);
 
                 }
 
@@ -887,7 +907,21 @@ private static void PrintE3TReport_Information(Spell spell, Int32 timeInMS,Int32
 
 			}
 		}
+        public static void Pause(bool on)
+        {
+            if(on && IsPaused==false)
+            {
+				IsPaused = true;
+				E3.Bots.Broadcast("\arPAUSING E3!");
+			
 
+			}
+            else if(!on && IsPaused==true)
+            {
+				IsPaused = false;
+				E3.Bots.Broadcast("\agRunning E3 again!");
+			}
+		}
         private static void PrintE3TReportEntries()
         {
             foreach (var spell in E3.CharacterSettings.Report_Entries)
diff --git a/E3Next/Processors/DebuffDot.cs b/E3Next/Processors/DebuffDot.cs
index 3fc1db3f..c3d68f65 100644
--- a/E3Next/Processors/DebuffDot.cs
+++ b/E3Next/Processors/DebuffDot.cs
@@ -449,13 +449,16 @@ private static void CastLongTermSpell(Int32 mobid, List<Data.Spell> spells, Dict
 						if (shouldContinue) { continue; }
 					}
 				    
-                    if (!MQ.Query<bool>($"${{Spell[{spell.SpellID}].StacksTarget}}"))
+                    if(!spell.IgnoreStackRules)
                     {
-                        //spell won't land based on stacking, move to next
-                        continue;
-                    }
-                    
-                    var result = Casting.Cast(mobid, spell, Heals.SomeoneNeedsHealing);
+						if (!MQ.Query<bool>($"${{Spell[{spell.SpellID}].StacksTarget}}"))
+						{
+							//spell won't land based on stacking, move to next
+							continue;
+						}
+					}
+
+					var result = Casting.Cast(mobid, spell, Heals.SomeoneNeedsHealing);
                     if (result == CastReturn.CAST_INTERRUPTFORHEAL)
                     {
                         return;