more object-oriented version