finished refactoring, need to introduce start and stop