completely rewriting the parser, cause it's too complex.