boy i'm tempted to say we should get rid of all these convenience functions and just expose:

    def engage(operation, properties)