All features are implemented but code still need to be refactored.