Index: /trunk/src/game/SpellMgr.cpp
===================================================================
--- /trunk/src/game/SpellMgr.cpp (revision 79)
+++ /trunk/src/game/SpellMgr.cpp (revision 87)
@@ -1034,18 +1034,30 @@
         return false;
 
-    if(spellInfo_1->Id == spellId_2)
-        return false;
+    if(spellInfo_1->Id == spellId_2) //checked before 
+        return false;
+
+    if(spellInfo_1->SpellFamilyName && spellInfo_1->SpellFamilyName == spellInfo_2->SpellFamilyName) //resurrection sickness
+    {
+        if(spellInfo_1->SpellFamilyFlags == spellInfo_2->SpellFamilyFlags)
+            return true;
+        //Corruption & Seed of corruption
+        if(spellInfo_1->SpellFamilyName == SPELLFAMILY_WARLOCK)
+            if( spellInfo_1->SpellIconID == 313 && spellInfo_2->SpellIconID == 1932 ||
+                spellInfo_2->SpellIconID == 313 && spellInfo_1->SpellIconID == 1932 )
+                if(spellInfo_1->SpellVisual != 0 && spellInfo_2->SpellVisual != 0)
+                    return true;                        // can't be stacked
+    }
 
     //I think we don't check this correctly because i need a exception for spell:
     //72,11327,18461...(called from 1856,1857...) Call Aura 16,31, after trigger another spell who call aura 77 and 77 remove 16 and 31, this should not happen.
-    if(spellInfo_2->SpellFamilyFlags == 2048)
-        return false;
+    //if(spellInfo_2->SpellFamilyFlags == 2048)
+    //    return false;
 
     // Resurrection sickness
-    if((spellInfo_1->Id == SPELL_ID_PASSIVE_RESURRECTION_SICKNESS) != (spellInfo_2->Id==SPELL_ID_PASSIVE_RESURRECTION_SICKNESS))
-        return false;
+    //if((spellInfo_1->Id == SPELL_ID_PASSIVE_RESURRECTION_SICKNESS) != (spellInfo_2->Id==SPELL_ID_PASSIVE_RESURRECTION_SICKNESS))
+    //    return false;
 
     // Specific spell family spells
-    switch(spellInfo_1->SpellFamilyName)
+    /*switch(spellInfo_1->SpellFamilyName)
     {
         case SPELLFAMILY_GENERIC:
@@ -1347,8 +1359,8 @@
 
     if (IsRankSpellDueToSpell(spellInfo_1, spellId_2))
-        return true;
-
-    if (spellInfo_1->SpellIconID != spellInfo_2->SpellIconID ||
-        !spellInfo_1->SpellIconID)
+        return true;*/
+
+    if (spellInfo_1->SpellIconID != spellInfo_2->SpellIconID 
+        || !spellInfo_1->SpellIconID)
         return false;
 
