Refactored base classess