refactored interpreter