implementation decoupled on tests