Added some documentation and marked abstract methods.