Index: /trunk/src/game/SpellHandler.cpp
===================================================================
--- /trunk/src/game/SpellHandler.cpp (revision 284)
+++ /trunk/src/game/SpellHandler.cpp (revision 285)
@@ -359,47 +359,25 @@
         return;
 
-    // Remove possess/charm/sight aura from the possessed/charmed as well
-    // TODO: Remove this once the ability to cancel aura sets at once is implemented
-    if(_player->GetCharm() || _player->GetFarsightTarget())
-    {
-        for (int i = 0; i < 3; ++i)
-        {
-            if (spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_POSSESS ||
-                spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_POSSESS_PET ||
-                spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_CHARM ||
-                spellInfo->EffectApplyAuraName[i] == SPELL_AURA_BIND_SIGHT)
-            {
-                // Fix me: creature may be killed during player aura cancel
-                _player->RemoveAurasDueToSpellByCancel(spellId);
-                if (_player->GetCharm())
-                    _player->GetCharm()->RemoveAurasDueToSpellByCancel(spellId);
-                else if (_player->GetFarsightTarget() && _player->GetFarsightTarget()->GetTypeId() != TYPEID_DYNAMICOBJECT)
-                    ((Unit*)_player->GetFarsightTarget())->RemoveAurasDueToSpellByCancel(spellId);
-                return;
-            }
-            else if (spellInfo->Effect[i] == SPELL_EFFECT_SUMMON && 
-                (spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED || 
-                 spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED2 || 
-                 spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED3))
-            {
-                // Possession is removed in the UnSummon function
-                ((TemporarySummon*)_player->GetCharm())->UnSummon();
-            }
-        }
-    }
-
     // not allow remove non positive spells and spells with attr SPELL_ATTR_CANT_CANCEL
     if(!IsPositiveSpell(spellId) || (spellInfo->Attributes & SPELL_ATTR_CANT_CANCEL))
         return;
 
+    // channeled spell case (it currently casted then)
+    if(IsChanneledSpell(spellInfo))
+    {
+        if(Spell* spell = _player->m_currentSpells[CURRENT_CHANNELED_SPELL])
+        {
+            if(spell->m_spellInfo->Id==spellId)
+            {
+                spell->cancel();
+                spell->SetReferencedFromCurrent(false);
+                _player->m_currentSpells[CURRENT_CHANNELED_SPELL] = NULL;
+            }
+        }
+        return;
+    }
+
+    // non channeled case
     _player->RemoveAurasDueToSpellByCancel(spellId);
-
-    if (spellId == 2584)                                    // Waiting to resurrect spell cancel, we must remove player from resurrect queue
-    {
-        BattleGround *bg = _player->GetBattleGround();
-        if(!bg)
-            return;
-        bg->RemovePlayerFromResurrectQueue(_player->GetGUID());
-    }
 }
 
Index: /trunk/src/game/Unit.cpp
===================================================================
--- /trunk/src/game/Unit.cpp (revision 284)
+++ /trunk/src/game/Unit.cpp (revision 285)
@@ -47,5 +47,4 @@
 #include "CellImpl.h"
 #include "Path.h"
-#include "TemporarySummon.h"
 
 #include <math.h>
@@ -3413,19 +3412,4 @@
     if (m_currentSpells[CURRENT_CHANNELED_SPELL] && (!spell_id || m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->Id==spell_id))
     {
-        // Unsummon any summoned as possessed creatures on channel interrupt
-        SpellEntry const *spellInfo = m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo;
-        for (int i = 0; i < 3; i++)
-        {
-            if (spellInfo->Effect[i] == SPELL_EFFECT_SUMMON && 
-                (spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED || 
-                 spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED2 || 
-                 spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED3))
-            {
-                // Possession is removed in the UnSummon function
-                if (GetCharm())
-                    ((TemporarySummon*)GetCharm())->UnSummon(); 
-            }
-        }
-
         if (m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() != SPELL_STATE_FINISHED)
             m_currentSpells[CURRENT_CHANNELED_SPELL]->cancel();
Index: /trunk/src/game/Spell.cpp
===================================================================
--- /trunk/src/game/Spell.cpp (revision 284)
+++ /trunk/src/game/Spell.cpp (revision 285)
@@ -49,4 +49,5 @@
 #include "BattleGround.h"
 #include "Util.h"
+#include "TemporarySummon.h"
 
 #define SPELL_CHANNEL_UPDATE_INTERVAL 1000
@@ -2188,4 +2189,18 @@
     }
 
+    // Unsummon summon as possessed creatures on spell cancel
+    for (int i = 0; i < 3; i++)
+    {
+        if (m_spellInfo->Effect[i] == SPELL_EFFECT_SUMMON && 
+            (m_spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED || 
+             m_spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED2 || 
+             m_spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_POSESSED3))
+        {
+            // Possession is removed in the UnSummon function
+            if (m_caster->GetCharm())
+                ((TemporarySummon*)m_caster->GetCharm())->UnSummon(); 
+        }
+    }
+
     finish(false);
     m_caster->RemoveDynObject(m_spellInfo->Id);
Index: /trunk/sql/updates/287_world_scripts.sql
===================================================================
--- /trunk/sql/updates/287_world_scripts.sql (revision 285)
+++ /trunk/sql/updates/287_world_scripts.sql (revision 285)
@@ -0,0 +1,2 @@
+UPDATE `creature_template` SET `ScriptName` = 'npc_steam_tonk' WHERE `entry` = '19405';
+UPDATE `creature_template` SET `ScriptName` = 'npc_tonk_mine' WHERE `entry` = '15368';
