performance improve
make tests pass