updates #12, restructure the project