Updated with refactoring