almost rewrite, add many features, do you mind pull it?