some major functionality push, to be refactored