>This seems to be in need of a refactor, suggestions very welcome.

[Mostly note to self:] Perhaps a private fuinction to handle the common stuff instead of a shared parent class? One which accepts a function that transforms a single value, rather than two functions that tell it what arguments to use and how to get the value.