clcok abstraction