creating some abstractions