Needs Refactoring