Refactored to better interface and concrete naming