slightly better spec, making parse_page private