It's not a good idea to combine status and control conditions in the same program.
I have played with this a lot, just to find out that control and status generates 2 different events if they relate to the same device.
You first get an event for the control, the if is evaluated and the program runs accordingly. Then, the status change, cancels the program and retriggers the evaluation. The status is always the second event (no matter if it's a on, Fast on, etc), and the controls always evaluate to false, because the event is the status change.
Perhaps this behavior has changed in recent firmwares, as apostolakisl suggest, but this was like that not so long ago.
So for my own needs, I wanted to have different behavior for a Fast On, and a "normal" On (no matter how it was turned on). So I used a program triggered on a Fast On that sets a variable. Then, from a status change I can also check the variable, so I know it comes from the Fast On, or not.
Benoit.