To simplify scripting, add an apparently synchronous version of refresh.
well I guess there is kind of good news; I've figured out how to do this (also for Task.requestAddXxxObserver). For every observable:observer pair there is now an Observation object. The synchronized version could block on that object, and then when the core has finished processing, unblock it vis: xxxx() Observation o = new observation (....) send observation to event loop return o.wait () The only restriction is that the method not be called by the EventLoop thread - instant deadlock. Having this will also likely make scripts easier vis: main () { Host = new LinuxHost (); host.refresh (); for (task in host.getTasks ()) task.so something; } of course this isn't an ok for the gui, that needs to be more agressive and use the async mechanisms.