slightly nicer organization for dynamic method dispatch