refactor, OperationValues don't need to know their tp