OK I appreciate your help. Now the line that is causing the problem is trying to set an object:

Set objSMSReceiver = ...

I dont think the rest of the page is particularly relevant - 9 times out of 10 this works. I suspect that when this page is called simultaneously, or at very close intervals, the dll is still processing stuff, and only a limited number (or even 1) instance of this may be created at one time.

I'm sorry if I'm not being very clear but I really odnt know how to explain better. I really need to try and understand if this is the case or not and how to improve matters.

Is this anything to do with 'threading'?