more abstraction to acommodate lazy CC