improve parsing algo