update using pointer method
refactored interfaces
removed virtual method declarations
add more implemtations
update