If you want the "Organisation" to not lock up messenger you must run it in another thread. This means you call the organisation function and then instantly set sResult to "" and return
I dont know what VBs like for multithreading, i use c. However in c, the task would be along the lines of
* make a data structure to contain "messages".
* make a function to check the data structure for "messages" such as the "Organise files" message, and when it finds the message, calls the organise files function.
* create a new thread to execute that function
*in the main thread, at the appropriate time add the "Organise files" message to the queue.
obviously you would start your thread up at initialise() and close it down at uninitialise.
if only u used c/c++ cos i got a set of classes that do all this for u =/