! refactoring
+ added some features