revise project structure
make more modular
make more modular