For your first question, I'll have to think if there might be a way. Since the onSheetWorkerCompleted is a global 'lock', there isn't really any way to prevent another script from calling setWithWorker() while your stuff is happening. That said, is your onSheetWorkerCompleted() registration not happening immediately before your first setWithWorker() call? What it sounds like is that you are calling onSheetWorkerCompleted(), then a lot of time is going by (during which this other script is calling setWithWorker() and the queue is clearing out), then later on you are calling setWithWorker()? I would think if you did onSheetWorkerCompleted(), followed in the same execution thread with a setWithWorker(), that other scripts calling setWithWorker() shouldn't matter... For your second question, findObjs() would actually be faster than getAttrByName() in that case, because getAttrByName() does additional work to check for things like default values, nth number repeating sections, etc. So if you know that the attribute is definitely already going to be set, and you don't care about default values or repeating_$n_whatever, then you can just use findObjs() instead. At its heart getAtrtrByName() is just that exact findObjs() call, just with the extra logic before and after it to handle those other special cases (like the attribute not being set yet but you want the default value instead). var search = findObjs({_type: "attribute", name: attrname, _characterid: character_id}, {caseInsensitive: true});