this is my first commit of this project, even though most of functionality has already been implemented