Refactored to use Abstract.