>>>The PBxxxxAsync functions return almost immediately, i.e. before they have completed their action. Your program is then supposed to wait until they signal via a completion routine. >>>If, as in your code, you do not wait for completion then you have a race condition, leading to sporadic failures. >>>Avoid all that by calling the correct routine PBHOpenSync. It returns only after completing its job. Thanks for your reply. OK, I get that and will look for some documentation on the PBHOpen functions. What does FBwdToPBwd actually do, so I can understand why I am able to add it with, apparently, no effect except for changing the conditions affecting the critical race? S