enhancement + tests