further abstraction to make compress goal easier