Index: /trunk/src/game/Unit.cpp
===================================================================
--- /trunk/src/game/Unit.cpp (revision 272)
+++ /trunk/src/game/Unit.cpp (revision 276)
@@ -47,4 +47,5 @@
 #include "CellImpl.h"
 #include "Path.h"
+#include "TemporarySummon.h"
 
 #include <math.h>
@@ -3425,4 +3426,21 @@
         m_currentSpells[CURRENT_CHANNELED_SPELL]->SetReferencedFromCurrent(false);
         m_currentSpells[CURRENT_CHANNELED_SPELL] = NULL;
+
+        // Unsummon any summoned as possessed creatures on channel interrupt
+        SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id);
+        if (!spellInfo || !interrupted)
+            return;
+        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(); 
+            }
+        }
     }
 }
