refs #10 use inheritance on algorithms to DRY up common functions