some slight refactor, as well as add all