complete with all the necessary data parsing