Index: /trunk/src/game/Level1.cpp
===================================================================
--- /trunk/src/game/Level1.cpp (revision 44)
+++ /trunk/src/game/Level1.cpp (revision 72)
@@ -1242,5 +1242,5 @@
 
     float Scale = (float)atof((char*)args);
-    if (Scale > 3.0f || Scale <= 0.0f)
+    if (Scale > 10.0f || Scale <= 0.0f)
     {
         SendSysMessage(LANG_BAD_VALUE);
Index: /trunk/src/game/Totem.cpp
===================================================================
--- /trunk/src/game/Totem.cpp (revision 44)
+++ /trunk/src/game/Totem.cpp (revision 72)
@@ -162,2 +162,18 @@
         m_type = TOTEM_STATUE;                              //Jewelery statue
 }
+
+bool Totem::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges)
+{
+    for (int i=0;i<3;i++)
+    {
+        switch(spellInfo->EffectApplyAuraName[i])
+        {
+            case SPELL_AURA_PERIODIC_DAMAGE:
+            case SPELL_AURA_PERIODIC_LEECH:
+                return true;
+            default:
+                continue;
+        }
+    }
+    return Creature::IsImmunedToSpell(spellInfo, useCharges);
+}
Index: /trunk/src/game/ThreatManager.cpp
===================================================================
--- /trunk/src/game/ThreatManager.cpp (revision 44)
+++ /trunk/src/game/ThreatManager.cpp (revision 72)
@@ -268,4 +268,8 @@
     HostilReference* currentRef = NULL;
     bool found = false;
+    
+    std::list<HostilReference*>::iterator lastRef = iThreatList.end();
+    lastRef--;
+    
     for(std::list<HostilReference*>::iterator iter = iThreatList.begin(); iter != iThreatList.end() && !found; ++iter)
     {
@@ -274,4 +278,15 @@
         Unit* target = currentRef->getTarget();
         assert(target);                                     // if the ref has status online the target must be there !
+        
+        // some units are prefered in comparison to others
+        if(iter != lastRef && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask(), false) ||
+                target->hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_FLEEING)
+                ) )
+        {
+            // current victim is a second choice target, so don't compare threat with it below
+            if(currentRef == pCurrentVictim)
+                pCurrentVictim = NULL;
+            continue;
+        }
 
         if(!pAttacker->IsOutOfThreatArea(target))           // skip non attackable currently targets
Index: /trunk/src/game/Totem.h
===================================================================
--- /trunk/src/game/Totem.h (revision 44)
+++ /trunk/src/game/Totem.h (revision 72)
@@ -55,4 +55,6 @@
         void UpdateAttackPowerAndDamage(bool /*ranged*/ ) {}
         void UpdateDamagePhysical(WeaponAttackType /*attType*/) {}
+        
+        bool IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges = false);
 
     protected:
