The conditions sound fine, but the code doesn't read like what you described. Is there a way you can restructure cancelled() to be is_finished() ? Taken the way it is I had the same question Jason had.