clock abstraction