initial draft of first part (theory and acceptance tests, without unit tests part)