added abstraction
added abstraction