restructure, change logic, unstable