diff --git a/SolastaUnfinishedBusiness/Models/2024ClericContext.cs b/SolastaUnfinishedBusiness/Models/2024ClericContext.cs
index 35663fee83..b4bbd3b7d9 100644
--- a/SolastaUnfinishedBusiness/Models/2024ClericContext.cs
+++ b/SolastaUnfinishedBusiness/Models/2024ClericContext.cs
@@ -3,6 +3,7 @@
 using System.Linq;
 using SolastaUnfinishedBusiness.Api.GameExtensions;
 using SolastaUnfinishedBusiness.Api.LanguageExtensions;
+using SolastaUnfinishedBusiness.Behaviors;
 using SolastaUnfinishedBusiness.Behaviors.Specific;
 using SolastaUnfinishedBusiness.Builders;
 using SolastaUnfinishedBusiness.Builders.Features;
@@ -100,18 +101,15 @@ private static void LoadClericChannelDivinity()
                         EffectFormBuilder
                             .Create()
                             .SetBonusMode(AddBonusMode.AbilityBonus)
-                            // this doesn't seem to work with healing forms reason why the custom behavior
                             .SetDiceAdvancement(LevelSourceType.ClassLevel, 0, 20, (7, 2), (13, 3), (18, 4))
                             .SetHealingForm(
                                 HealingComputation.Dice, 0, DieType.D8, 1, false, HealingCap.MaximumHitPoints)
                             .Build())
                     .SetParticleEffectParameters(CureWounds)
                     .Build())
+            .AddCustomSubFeatures(ClassHolder.Cleric)
             .AddToDB();
 
-        powerDivineSparkHeal.AddCustomSubFeatures(
-            new ModifyEffectDescriptionPowerDivineSparkHeal(powerDivineSparkHeal));
-
         var powerDivineSparkDamageNecrotic = FeatureDefinitionPowerSharedPoolBuilder
             .Create("PowerClericDivineSparkDamageNecrotic")
             .SetGuiPresentation(Category.Feature)
@@ -134,6 +132,7 @@ private static void LoadClericChannelDivinity()
                     .SetCasterEffectParameters(FalseLife)
                     .SetImpactEffectParameters(PowerWightLordRetaliate)
                     .Build())
+            .AddCustomSubFeatures(ClassHolder.Cleric)
             .AddToDB();
 
         var powerDivineSparkDamageRadiant = FeatureDefinitionPowerSharedPoolBuilder
@@ -158,6 +157,7 @@ private static void LoadClericChannelDivinity()
                     .SetCasterEffectParameters(ShadowArmor)
                     .SetImpactEffectParameters(PowerDomainBattleDecisiveStrike)
                     .Build())
+            .AddCustomSubFeatures(ClassHolder.Cleric)
             .AddToDB();
 
         PowerBundle.RegisterPowerBundle(PowerClericDivineSpark, false,
@@ -358,35 +358,6 @@ internal static void SwitchClericSearUndead()
         Cleric.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock);
     }
 
-    private sealed class ModifyEffectDescriptionPowerDivineSparkHeal(FeatureDefinitionPower powerDivineSparkHeal)
-        : IModifyEffectDescription
-    {
-        public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription)
-        {
-            return definition == powerDivineSparkHeal;
-        }
-
-        public EffectDescription GetEffectDescription(
-            BaseDefinition definition,
-            EffectDescription effectDescription,
-            RulesetCharacter character,
-            RulesetEffect rulesetEffect)
-        {
-            var level = character.GetClassLevel(Cleric);
-            var diceNumber = level switch
-            {
-                >= 18 => 4,
-                >= 13 => 3,
-                >= 7 => 2,
-                _ => 1
-            };
-
-            effectDescription.EffectForms[0].HealingForm.diceNumber = diceNumber;
-
-            return effectDescription;
-        }
-    }
-
     private sealed class ModifyEffectDescriptionPowerTurnUndead : IModifyEffectDescription
     {
         public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription)
@@ -445,7 +416,7 @@ private static int GetWisdomModifierMinimumOne(RulesetCharacter character)
     {
         var wisdom = character.TryGetAttributeValue(AttributeDefinitions.Wisdom);
         var wisMod = AttributeDefinitions.ComputeAbilityScoreModifier(wisdom);
-        
+
         return Math.Max(wisMod, 1);
     }
 }
diff --git a/SolastaUnfinishedBusiness/Models/2024PaladinContext.cs b/SolastaUnfinishedBusiness/Models/2024PaladinContext.cs
index b45346143a..a192750ad5 100644
--- a/SolastaUnfinishedBusiness/Models/2024PaladinContext.cs
+++ b/SolastaUnfinishedBusiness/Models/2024PaladinContext.cs
@@ -82,9 +82,6 @@ internal static partial class Tabletop2024Context
         ConditionDefinitions.ConditionStunned
     ];
 
-    internal static readonly string[] RestoringTouchConditionNames =
-        RestoringTouchConditions.Select(c => c.Name).ToArray();
-
     private static void LoadPaladinRestoringTouch()
     {
         PowerPaladinLayOnHands.AddCustomSubFeatures(new PowerOrSpellFinishedByMeRestoringTouch());
@@ -249,53 +246,34 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action,
             var rulesetTarget = target.RulesetCharacter;
             var usablePowerPool = PowerProvider.Get(PowerPaladinRestoringTouch, rulesetCaster);
 
-            while (rulesetCaster.GetRemainingUsesOfPower(usablePowerPool) > 0)
+            while (!aborted && rulesetCaster.GetRemainingUsesOfPower(usablePowerPool) > 0)
             {
-                var usablePowers = new List<RulesetUsablePower>();
-
-                foreach (var condition in RestoringTouchConditions)
-                {
-                    if (!rulesetTarget.HasConditionOfTypeOrSubType(condition.Name))
-                    {
-                        continue;
-                    }
-
-                    var power = GetDefinition<FeatureDefinitionPower>(
-                        $"PowerPaladinRestoringTouch{condition.Name}");
-                    var usablePower = PowerProvider.Get(power, rulesetCaster);
-
-                    usablePowers.Add(usablePower);
-                    rulesetCaster.UsablePowers.Add(usablePower);
-                }
-
-                if (usablePowers.Count == 0)
+                var usablePowers = RestoringTouchConditions
+                    .Where(x => rulesetTarget.HasConditionOfTypeOrSubType(x.Name))
+                    .Select(x =>
+                        PowerProvider.Get(
+                            GetDefinition<FeatureDefinitionPower>($"PowerPaladinRestoringTouch{x.Name}"),
+                            rulesetCaster))
+                    .ToArray();
+
+                if (usablePowers.Length == 0)
                 {
                     yield break;
                 }
 
+                rulesetCaster.UsablePowers.AddRange(usablePowers);
+
                 yield return caster.MyReactToSpendPowerBundle(
                     usablePowerPool,
                     [target],
                     caster,
                     "RestoringTouch",
-                    reactionNotValidated: ReactionNotValidated);
+                    reactionNotValidated: _ => aborted = true);
 
                 foreach (var usablePower in usablePowers)
                 {
                     rulesetCaster.UsablePowers.Remove(usablePower);
                 }
-
-                if (aborted)
-                {
-                    yield break;
-                }
-
-                continue;
-
-                void ReactionNotValidated(ReactionRequestSpendBundlePower reactionRequest)
-                {
-                    aborted = true;
-                }
             }
         }
     }
diff --git a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs
index 0aaf2cf783..567284fe91 100644
--- a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs
+++ b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs
@@ -9,8 +9,6 @@
 using SolastaUnfinishedBusiness.Models;
 using UnityEngine;
 using static RuleDefinitions;
-using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions;
-using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers;
 
 namespace SolastaUnfinishedBusiness.Patches;
 
@@ -454,9 +452,7 @@ public static bool Prefix(
                     return false;
                 }
 
-                var targetedCharacter = __instance.targetedCharacter;
-
-                __instance.GameLocationSelectionService.SelectTarget(targetedCharacter);
+                __instance.GameLocationSelectionService.SelectTarget(__instance.targetedCharacter);
                 __instance.actionModifiersList.Add(__instance.actionModifier.Clone());
 
                 if (__instance.maxTargets > 0)
@@ -506,10 +502,8 @@ public static bool Prefix(
 
                             if (__instance.ActionParams.activeEffect is RulesetEffectPower rulesetEffect)
                             {
-                                var powerDefinition = rulesetEffect.PowerDefinition;
-
-                                if (powerDefinition.RechargeRate == RechargeRate.HealingPool &&
-                                    powerDefinition.CostPerUse <= 0)
+                                if (rulesetEffect.PowerDefinition.RechargeRate == RechargeRate.HealingPool &&
+                                    rulesetEffect.PowerDefinition.CostPerUse <= 0)
                                 {
                                     if (__instance.effectDescription.EffectForms.Any(effectForm =>
                                             effectForm.FormType == EffectForm.EffectFormType.Healing &&
@@ -518,28 +512,12 @@ public static bool Prefix(
                                     {
                                         flag3 = false;
 
-                                        var rulesetTarget = targetedCharacter.RulesetCharacter;
-                                        var minValue = 1;
-                                        var maxValue = Mathf.Min(
-                                            rulesetEffect.UsablePower.SpentPoints, rulesetTarget.MissingHitPoints);
-
-                                        //PATCH: support lay on hands special case
-                                        if (Main.Settings.EnablePaladinRestoringTouch2024 &&
-                                            powerDefinition == PowerPaladinLayOnHands &&
-                                            rulesetTarget.HasAnyConditionOfTypeOrSubType(Tabletop2024Context
-                                                .RestoringTouchConditionNames))
-                                        {
-                                            var paladinLevel = rulesetTarget.GetClassLevel(Paladin);
-
-                                            if (paladinLevel >= 14)
-                                            {
-                                                minValue = 0;
-                                            }
-                                        }
-                                        //END PATCH
-
-                                        Gui.GuiService.GetScreen<NumberSelectionModal>().ShowPower(
-                                            powerDefinition, minValue, maxValue, maxValue, rulesetEffect.UsablePower);
+                                        var num = Mathf.Min(rulesetEffect.UsablePower.SpentPoints,
+                                            __instance.targetedCharacter.RulesetCharacter.MissingHitPoints);
+
+                                        Gui.GuiService.GetScreen<NumberSelectionModal>()
+                                            .ShowPower(rulesetEffect.PowerDefinition, 1, num, num,
+                                                rulesetEffect.UsablePower);
                                     }
                                 }
                             }
diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs
index 122eb6a1f4..f4e7d29884 100644
--- a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs
+++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs
@@ -113,7 +113,8 @@ public InnovationVitriolist()
                             .Build(),
                         EffectFormBuilder.ConditionForm(conditionCorroded))
                     .Build())
-            .AddCustomSubFeatures(ModifyPowerVisibility.Hidden)
+            // required as in a feature set
+            .AddCustomSubFeatures(ClassHolder.Inventor, ModifyPowerVisibility.Hidden)
             .AddToDB();
 
         // Misery
@@ -155,6 +156,7 @@ public InnovationVitriolist()
                             .Build(),
                         EffectFormBuilder.ConditionForm(conditionMiserable))
                     .Build())
+            // required as in a feature set
             .AddCustomSubFeatures(ClassHolder.Inventor, ModifyPowerVisibility.Hidden)
             .AddToDB();
 
@@ -187,6 +189,7 @@ public InnovationVitriolist()
                             .Build(),
                         EffectFormBuilder.ConditionForm(ConditionDefinitions.ConditionPoisoned))
                     .Build())
+            // required as in a feature set
             .AddCustomSubFeatures(ClassHolder.Inventor, ModifyPowerVisibility.Hidden)
             .AddToDB();
 
@@ -214,6 +217,7 @@ public InnovationVitriolist()
                             .Build(),
                         EffectFormBuilder.ConditionForm(ConditionDefinitions.ConditionHindered))
                     .Build())
+            // required as in a feature set
             .AddCustomSubFeatures(ClassHolder.Inventor, ModifyPowerVisibility.Hidden)
             .AddToDB();