added abstraction layer for different levels