Index: ClassSpecific/Priest/Common.cs
===================================================================
--- ClassSpecific/Priest/Common.cs	(revision 77)
+++ ClassSpecific/Priest/Common.cs	(working copy)
@@ -17,6 +17,7 @@
 using Styx.WoWInternals.WoWObjects;
 
 using TreeSharp;
+using Singular.Settings;
 
 namespace Singular
 {
@@ -33,14 +34,16 @@
         {
             return new PrioritySelector(
                 CreateSpellBuffOnSelf("Power Word: Fortitude", ret => CanCastFortitudeOn(Me)),
-                CreateSpellBuffOnSelf("Inner Fire"),
-                CreateSpellBuffOnSelf("Fear Ward"),
+                CreateSpellBuffOnSelf("Inner Fire", ret => !SingularSettings.Instance.Priest.InnerWill),
+                CreateSpellBuffOnSelf("Inner Will", ret => SingularSettings.Instance.Priest.InnerWill),
+                CreateSpellBuffOnSelf("Shadow Protection"),
+                CreateSpellBuffOnSelf("Fear Ward", ret=> SingularSettings.Instance.Priest.FearWard),
                 CreateSpellCast(
                     "Power Word: Fortitude",
                     ret => NearbyFriendlyPlayers.Any(u => !u.Dead && !u.IsGhost && u.IsInMyPartyOrRaid && CanCastFortitudeOn(u))),
                 CreateSpellBuffOnSelf("Shadowform"),
                 CreateSpellBuffOnSelf("Vampiric Embrace")
-                );
+                );  
         }
 
         public bool CanCastFortitudeOn(WoWUnit unit)
Index: ClassSpecific/Priest/Shadow.cs
===================================================================
--- ClassSpecific/Priest/Shadow.cs	(revision 77)
+++ ClassSpecific/Priest/Shadow.cs	(working copy)
@@ -12,8 +12,9 @@
 #endregion
 
 using Styx.Combat.CombatRoutine;
-
+using System.Linq;
 using TreeSharp;
+using Singular.Settings;
 
 namespace Singular
 {
@@ -31,14 +32,35 @@
                 CreateEnsureTarget(),
                 CreateRangeAndFace(30, ret => Me.CurrentTarget),
                 CreateWaitForCast(),
-                CreateSpellBuff("Shadow Word: Pain"),
-                CreateSpellBuff("Devouring Plague"),
-                CreateSpellBuff("Vampiric Touch"),
-                CreateSpellBuff("Archangel", ret => HasAuraStacks("Evangelism", 5)),
-                CreateSpellCast("Shadow Word: Death", ret => Me.CurrentTarget.HealthPercent < 25),
-                CreateSpellCast("Shadow Fiend"),
+
+                // Mind Spike logic. Work in progress. Highly "experimental".
+                new Decorator (
+                    ret => SingularSettings.Instance.Priest.MindSpike
+                        && Me.CurrentTarget.MaxHealth < Me.MaxHealth * SingularSettings.Instance.Priest.MindSpikeTreshold,
+                    new PrioritySelector(
+                        CreateSpellCast("Mind Blast", ret => HasAuraStacks("Mind Spike", 3, Me.CurrentTarget) &&
+                            Me.CurrentTarget.GetAllAuras().Any(a => a.Name == "Mind Spike" && a.CreatorGuid == Me.Guid)),
+                        CreateSpellCast("Mind Spike"))),
+                // Start with Devouring Plague if our target's level is with 7 below us, might one-shot it.
+                CreateSpellBuff("Devouring Plague", ret => Me.Level > Me.CurrentTarget.Level + 7),
+                CreateSpellCast("Shadow Word: Death", ret => Me.Level > Me.CurrentTarget.Level + 7),
+                // If it's not dead yet or it's not low level, let's do our normal rotation
+                CreateSpellBuff("Shadow Word: Pain",
+                    ret => !Me.CurrentTarget.GetAllAuras().Any(a => a.Name == "Shadow Word: Pain" && a.CreatorGuid == Me.Guid)),
+                CreateSpellCast("Devouring Plague",
+                    ret => !Me.CurrentTarget.GetAllAuras().Any(a => a.Name == "Devouring Plague" && a.CreatorGuid == Me.Guid)
+                        || Me.CurrentTarget.Auras["Devouring Plague"].TimeLeft.TotalSeconds < 4),   
+                CreateSpellCast("Vampiric Touch",
+                    ret => !Me.CurrentTarget.GetAllAuras().Any(a => a.Name == "Vampiric Touch" && a.CreatorGuid == Me.Guid)
+                        || Me.CurrentTarget.Auras["Vampiric Touch"].TimeLeft.TotalSeconds < 4),
+                CreateSpellBuff("Archangel", ret => HasAuraStacks("Dark Evangelism", 5)),
+                CreateSpellCast("Shadow Word: Death",
+                    ret => (Me.CurrentTarget.HealthPercent < 25 && Me.HealthPercent > 20)
+                        || (SingularSettings.Instance.Priest.Masochism && Me.ManaPercent < 50 && Me.HealthPercent > 50)),
+                CreateSpellCast("Shadowfiend"),
                 CreateSpellCast("Mind Blast"),
-                CreateSpellCast("Mind Flay")
+                CreateSpellCast("Mind Flay"),
+                CreateSpellBuff("Dispersion", ret => Me.ManaPercent < 5)
                 );
         }
     }
Index: Settings/PriestSettings.cs
===================================================================
--- Settings/PriestSettings.cs	(revision 77)
+++ Settings/PriestSettings.cs	(working copy)
@@ -27,6 +27,41 @@
         {
         }
 
+        [Setting]
+        [DefaultValue(false)]
+        [Category("Common")]
+        [DisplayName("Use Fear Ward")]
+        [Description("Should we use Fear Ward?")]
+        public bool FearWard { get; set; }
+
+        [Setting]
+        [DefaultValue(false)]
+        [Category("Common")]
+        [DisplayName("Use Inner Will")]
+        [Description("Use Inner Will instead of Inner Fire. Useful for farming low-level mobs")]
+        public bool InnerWill { get; set; }
+
+        [Setting]
+        [DefaultValue(false)]
+        [Category("Shadow")]
+        [DisplayName("Use Mind Spike")]
+        [Description("Should we use the MSx3 & MB rotation? Still testing.")]
+        public bool MindSpike { get; set; }
+
+        [Setting]
+        [DefaultValue(1.5)]
+        [Category("Shadow")]
+        [DisplayName("Mind Spike Treshold")]
+        [Description("We will only use the Mind Spike rotation if target's health is below this modifier (my hp * modifier)")]
+        public double MindSpikeTreshold { get; set; }
+
+        [Setting]
+        [DefaultValue(false)]
+        [Category("Shadow")]
+        [DisplayName("Masochism - Low Mana")]
+        [Description("Always use Shadow Word: Death if we are Talented with Masochism and we have mana problems. This will start casting Shadow Word: Death if we're below 50% Mana and Current HP > 50%")]
+        public bool Masochism { get; set; }
+
 		[Setting]
 		[DefaultValue(30)]
 		[Category("Discipline")]