second major refactoring - better use of protocols
data.generators look interesting for testing - added dependency