improve abstraction.