a bunch of work writing my own parser