reverted to a less object oriented implementation into an idea of caching, convenience and ease of use
added a convenience encoding along with extra documentation