added graphics abstraction layer