none of what you are suggesting is necessary at all. i'm relatively new to the Mac platform, but at least from what i can tell you have everything you need in the leopard release (not sure if it was there before).

the major reason to run performSelectorOnMainThread is to ensure secondary threads don't update the UI since thread safe access is accomplish through thread affinity using NSRunLoop.

you can call performSelectorOnMainThread on any object or class, and providing the selector is implemented via a matching method, Cocoa will execute that method on the "main" thread.

whomever is writing the code should be aware what their doing;nonetheless, you can ensure it by doing something similar to the following:

-(void)doSomething: (NSNumber*)someValue
{
if (![NSThread isMainThread])
[self performSelectorOnMainThread:@selector(doSomething:)
withObject:somevalue
waitUntilDone:NO];
else
[_txtField1 setIntValue: [someValue intValue]];
}