binding covenant functions to their instance greatly simplifies code, implement protected functionality in promise