speed up and clean
support selection