adding new features, rewriting it