refactor for more readable
add PageCollection class
incorporate PageCollection obj