improvement and restructure
add missing classes