overlap fixed, but need to refactor a lot