factored transfer function out into subclasses