make model more clear and use more functional style :)