initial implementation according to the requirements