Have to cleanup and refactored