Index: trunk/src/game/Object.cpp
===================================================================
--- trunk/src/game/Object.cpp (revision 123)
+++ trunk/src/game/Object.cpp (revision 138)
@@ -1483,4 +1483,7 @@
         ((Creature*)this)->AI()->JustSummoned(pCreature);
 
+    if(pCreature->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER && pCreature->m_spells[0])
+        pCreature->CastSpell(pCreature, pCreature->m_spells[0], true, 0, 0, GetGUID());
+
     //return the creature therewith the summoner has access to it
     return pCreature;
Index: trunk/src/game/Unit.cpp
===================================================================
--- trunk/src/game/Unit.cpp (revision 136)
+++ trunk/src/game/Unit.cpp (revision 138)
@@ -8572,5 +8572,8 @@
         {
             // Units far than max visible distance for creature or not in our map are not visible too
-            if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
+            // Active unit should always be visibile
+            if (!IsWithinDistInMap(u, u->isActive() 
+                ? (MAX_VISIBILITY_DISTANCE - (inVisibleList ? 0.0f : World::GetVisibleUnitGreyDistance()))
+                : (World::GetMaxVisibleDistanceForCreature() + (inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f))))
                 return false;
         }
Index: trunk/src/game/World.cpp
===================================================================
--- trunk/src/game/World.cpp (revision 122)
+++ trunk/src/game/World.cpp (revision 138)
@@ -1097,4 +1097,7 @@
     spellmgr.LoadSpellExtraAttr();
 
+    sLog.outString( "Loading linked spells..." );
+    spellmgr.LoadSpellLinked();
+
     sLog.outString( "Loading player Create Info & Level Stats..." );
     objmgr.LoadPlayerInfo();
Index: trunk/src/game/Spell.cpp
===================================================================
--- trunk/src/game/Spell.cpp (revision 131)
+++ trunk/src/game/Spell.cpp (revision 138)
@@ -927,5 +927,5 @@
     {
         if(spell_triggered > 0)
-            m_caster->CastSpell(unit, spell_triggered, true);
+            unit->CastSpell(unit, spell_triggered, true/*, 0, 0, m_caster->GetGUID()*/);
         else
             unit->RemoveAurasDueToSpell(-spell_triggered);
