If anyone is interested, we did get this working with Generals....what a pig it is to...the end result is seemless and works well, but the method used to implement it is not logical at all.
The dozer has 2 upgrades, an next and previous button...these toggle between commandsets. Each one of these creates an OCL that cancels the other out. I build a free upgrade object at 0 cost and 0 time with no model and use the trigger to switch the commandset...then in the newly created object, set the lifetime of the object to die almost immediately and when it dies it cancels the upgrade.
In this way you can switch command sets and have as many as you like. In Zero Hour it is much simplier...
Yeah, we've found that, and implemented it before, but I've found that after a certain number of upgrades, you can no longer use one of them. I'm not sure why, as the code works fine for all of the first times, but then it just quits. I avoided that problem, more or less with my multi-paradrop by creating a new plane for the different drops. That clears all of the upgrades.