api + tests + configurable trait