refactor, move, rewrite and added some new toys