refactored interface implementation