Refactored the whole interface