add test, restructure all