first shot done, just need to refactoring