implement the remaining abstract methods

may still need to override more of the internal methods to get it to
work well