refactor to allow multiple renderer factories