Hey Ludo’, I've attached an updated patch. I couldn't think of any unwanted consequences, so I took your idea of making register-services handle most of the details of replacement. With my patch, something like > herd eval root '(register-services (load "a.scm") (load > "b.scm"))' will deal with a conflict by either replacing the old service (if it's not running), arranging for the old service to be replaced when it's stopped, or raising an error. This seems like a sensible way for things to function. >> At the very least we need to control the inherent race >> condition [...] > > Indeed. Despite my desire to deal with the race condition, I haven't done anything about it in this patch. The modification of %services that was done in register-services was already racy, and I don't think this patch will make it worse. If it hasn't been a problem up until now, then I don't think this will make it a problem. Carlo