Sly, you might have to re-explain that to me. I'm not sure I'm getting it all. I never set Done := False because I never leave Application.OnIdle (I immediately enter a seperate infinite loop). All my message handling is done through periodic calls to Application.ProcessMessages. Which I would assume would allow Windows to handle any messages it needs to. How is this different than setting Done := False? From what I understand, Application.OnIdle only gets called externally once and by setting Done := False it basically recalls itself until Done := True. Where exactly is the message handling done in that case? If no specific calls to Application.ProcessMessages are made.