CreateSpellBuffOnSelf("Metamorphosis"),
                CreateCastPetAction("Axe Toss")
                CreateSpellCast("Hand of Gul'dan"),
                CreateCastPetAction("Felstorm")
                CreateSpellBuff("Immolate", true),
                CreateSpellBuff("Curse of Tongues", ret => Me.CurrentTarget.PowerType == WoWPowerType.Mana),
                CreateSpellBuff("Curse of Weakness", ret => Me.CurrentTarget.PowerType != WoWPowerType.Mana),
                CreateSpellBuff("Bane of Doom", ret => CurrentTargetIsEliteOrBoss),
                CreateSpellBuff("Bane of Agony", ret => !Me.CurrentTarget.HasAura("Bane of Doom") && (Me.CurrentTarget.HealthPercent >= 20 || CurrentTargetIsEliteOrBoss)),
                // Use the infernal if we have a few mobs around us, and it's off CD. Otherwise, just use the Doomguard.
                // Its a 10min CD, with a 1-1.2min uptime on the minion. Hey, any extra DPS is fine in my book!
                // Make sure these 2 summons are AFTER the banes above.
                new Decorator(
                    ret => NearbyUnfriendlyUnits.Count(u => u.Distance <= 20) > 2,
                    CreateSpellCastOnLocation("Summon Infernal", ret => Me.CurrentTarget.Location)
                    ),
                CreateSpellCast("Summon Doomguard"),
                CreateSpellBuff("Corruption",ret =>  Me.CurrentTarget.HealthPercent >= 30 || CurrentTargetIsElite),
                CreateSpellBuffOnSelf("Soulburn", ret => Me.HealthPercent < 70),
                CreateSpellCast("Drain Life", ret => Me.HealthPercent < 70 && Me.HasAura("Soulburn")),
                CreateSpellCast("Health Funnel", ret => Me.GotAlivePet && Me.Pet.HealthPercent < 70),
                // TODO: Make this cast Soulburn if it's available
                CreateSpellCast("Soul Fire", ret => Me.HasAura("Improved Soul Fire") || Me.HasAura("Soulburn")),
                CreateSpellCast("Soul Fire", ret => Me.HasAura("Decimation")),
                CreateSpellCast("Incinerate", ret => Me.HasAura("Molten Core")),
                CreateSpellCast("Shadow Bolt"),
                CreateSpellCast("Drain Soul", ret => Me.ManaPercent < 50 && Me.CurrentTarget > 25)
                );
        }
    }
}