add ability to choose normal implementation