Index: trunk/src/bindings/scripts/include/sc_creature.cpp
===================================================================
--- trunk/src/bindings/scripts/include/sc_creature.cpp (revision 13)
+++ trunk/src/bindings/scripts/include/sc_creature.cpp (revision 18)
@@ -36,6 +36,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -55,6 +55,6 @@
         if (!InCombat)
         {
+            InCombat = true;
             Aggro(who);
-            InCombat = true;
         }
     }
@@ -583,6 +583,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -602,6 +602,6 @@
         if (!InCombat)
         {
+            InCombat = true;
             Aggro(who);
-            InCombat = true;
         }
     }
Index: trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp (revision 14)
+++ trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp (revision 18)
@@ -56,6 +56,4 @@
                     ProcessEvent(*i);
                     break;
-                default:
-                    break;
             }
         }
@@ -613,10 +611,16 @@
                 }
 
-                //Interrupt any previous spell
-                if (caster->IsNonMeleeSpellCasted(false) && param3 & CAST_INTURRUPT_PREVIOUS)
-                    caster->InterruptNonMeleeSpells(false);
-
-                //Cast only if not casting or if spell is triggered
-                if (param3 & CAST_TRIGGERED || !caster->IsNonMeleeSpellCasted(false))
+                //Allowed to cast only if not casting (unless we interrupt ourself) or if spell is triggered
+                bool canCast = !(caster->IsNonMeleeSpellCasted(false) && (param3 & CAST_TRIGGERED | CAST_INTURRUPT_PREVIOUS));
+
+                // If cast flag CAST_AURA_NOT_PRESENT is active, check if target already has aura on them
+                if(param3 & CAST_AURA_NOT_PRESENT)
+                {
+                    for(uint8 i = 0; i < 3; ++i)
+                        if(target->HasAura(param1, i))
+                            return;
+                }
+
+                if (canCast)
                 {
                     const SpellEntry* tSpell = GetSpellStore()->LookupEntry(param1);
@@ -639,5 +643,12 @@
                             }
 
-                        }else caster->CastSpell(target, param1, (param3 & CAST_TRIGGERED));
+                        }else
+                        {
+                            //Interrupt any previous spell
+                            if (caster->IsNonMeleeSpellCasted(false) && param3 & CAST_INTURRUPT_PREVIOUS)
+                                caster->InterruptNonMeleeSpells(false);
+
+                            caster->CastSpell(target, param1, (param3 & CAST_TRIGGERED));
+                        }
 
                     }else if (EAI_ErrorLevel > 0)
@@ -997,9 +1008,9 @@
                     }
                     break;
-                default:
+                //default:
                     //TODO: enable below code line / verify this is correct to enable events previously disabled (ex. aggro yell), instead of enable this in void Aggro()
                     //(*i).Enabled = true;
                     //(*i).Time = 0;
-                    break;
+                    //break;
             }
         }
@@ -1030,6 +1041,4 @@
                     ProcessEvent(*i);
                     break;
-                default:
-                    break;
             }
         }
@@ -1051,6 +1060,4 @@
                     ProcessEvent(*i, killer);
                     break;
-                default:
-                    break;
             }
         }
@@ -1070,6 +1077,4 @@
                     ProcessEvent(*i, victim);
                     break;
-                default:
-                    break;
             }
         }
@@ -1089,6 +1094,4 @@
                 case EVENT_T_SUMMONED_UNIT:
                     ProcessEvent(*i, pUnit);
-                    break;
-                default:
                     break;
             }
@@ -1146,6 +1149,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -1194,6 +1197,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
@@ -1215,6 +1218,4 @@
                                 ProcessEvent(*i, pUnit);
                     }
-                    break;
-                default:
                     break;
             }
Index: trunk/src/bindings/scripts/scripts/creature/mob_event_ai.h
===================================================================
--- trunk/src/bindings/scripts/scripts/creature/mob_event_ai.h (revision 6)
+++ trunk/src/bindings/scripts/scripts/creature/mob_event_ai.h (revision 18)
@@ -114,4 +114,5 @@
     CAST_NO_MELEE_IF_OOM        = 0x08,     //Prevents creature from entering melee if out of mana or out of range
     CAST_FORCE_TARGET_SELF      = 0x10,     //Forces the target to cast this spell on itself
+    CAST_AURA_NOT_PRESENT       = 0x20,     //Only casts the spell if the target does not have an aura from the spell
 };
 
Index: trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp (revision 18)
@@ -109,6 +109,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp (revision 18)
@@ -118,6 +118,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -139,6 +139,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp (revision 18)
@@ -201,6 +201,6 @@
             if( !InCombat )
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -238,6 +238,6 @@
                 if( !InCombat )
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp (revision 18)
@@ -216,6 +216,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
@@ -235,6 +235,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -864,11 +864,7 @@
                             DoPlaySoundToSet(m_creature, SOUND_SUMMON_PHOENIX1);
                             break;
-
                         case 1:
                             DoYell(SAY_SUMMON_PHOENIX2, LANG_UNIVERSAL, NULL);
                             DoPlaySoundToSet(m_creature, SOUND_SUMMON_PHOENIX2);
-                            break;
-
-                        default:
                             break;
                     }
@@ -1253,6 +1249,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
Index: trunk/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp (revision 18)
@@ -131,6 +131,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
@@ -149,6 +149,6 @@
             if( !InCombat )
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -237,6 +237,4 @@
                         Intro = true;
                         break;
-                    default:
-                        break;
                 }
             }else Intro_Timer -=diff;
Index: trunk/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp (revision 18)
@@ -139,6 +139,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
@@ -154,6 +154,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -445,6 +445,4 @@
                     pInstance->SetData(TYPE_WARDEN_5,IN_PROGRESS);
                     break;
-                default:
-                    break;
             }
             CanSpawn = true;
@@ -506,6 +504,4 @@
                         DoPlaySoundToSet(m_creature,SOUND_WELCOME);
                         break;
-                    default:
-                        break;
                 }
                 CanSpawn = false;
@@ -554,6 +550,4 @@
                         EventProgress_Timer = 15000;
                         break;
-                    default:
-                        break;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp (revision 18)
@@ -666,6 +666,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
Index: trunk/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp (revision 18)
@@ -107,6 +107,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp (revision 18)
@@ -105,6 +105,4 @@
                     Class_Timer = 10000;
                     break;
-                default:
-                    break;
             }
         }else Class_Timer -= diff;
@@ -205,6 +203,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp (revision 18)
@@ -116,6 +116,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp (revision 18)
@@ -126,6 +126,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp (revision 18)
@@ -75,6 +75,6 @@
             if (!InCombat)
             {
+                InCombat = true;
                 Aggro(who);
-                InCombat = true;
             }
         }
@@ -96,6 +96,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/burning_steppes/burning_steppes.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/burning_steppes/burning_steppes.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/burning_steppes/burning_steppes.cpp (revision 18)
@@ -62,6 +62,6 @@
                 if (!InCombat)
                 {
+                    InCombat = true;
                     Aggro(who);
-                    InCombat = true;
                 }
             }
Index: trunk/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp (revision 18)
@@ -583,5 +583,5 @@
         {
             //Check for base attack
-            if( m_creature->isAttackReady())
+            if( m_creature->isAttackReady() && m_creature->getVictim() )
             {
                 m_creature->AttackerStateUpdate(m_creature->getVictim());
@@ -589,5 +589,5 @@
             }
             //Check for offhand attack
-            if( m_creature->isAttackReady(OFF_ATTACK))
+            if( m_creature->isAttackReady(OFF_ATTACK) && m_creature->getVictim() )
             {
                 m_creature->AttackerStateUpdate(m_creature->getVictim(), OFF_ATTACK);
Index: trunk/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp (revision 18)
@@ -164,7 +164,4 @@
                     FlamewakerPriest = creature->GetGUID();
                     break;
-
-                default:
-                    return;
             }
         }
Index: trunk/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp (revision 6)
+++ trunk/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp (revision 18)
@@ -265,6 +265,4 @@
                     ++Phase;
                     break;
-                default:
-                    break;
             }
         } else Event_Timer -= diff;
Index: trunk/src/bindings/scripts/docs/EventAI.txt
===================================================================
--- trunk/src/bindings/scripts/docs/EventAI.txt (revision 2)
+++ trunk/src/bindings/scripts/docs/EventAI.txt (revision 18)
@@ -680,4 +680,5 @@
 3       8           CAST_NO_MELEE_IF_OOM           Prevents creature from entering melee if out of mana or out of range
 4       16          CAST_FORCE_TARGET_SELF         Forces the target to cast this spell on itself
+5       32          CAST_AURA_NOT_PRESENT          Only casts the spell on the target if the target does not have the aura from that spell on itself already.
 
 NOTE: You can add the numbers in the decimal column to combine flags. 
