added animation abstraction