Should this be cleaned up in the destructor? I guess the machines listener should do the same above.

If you open the machine view then go to the service view and drag a service to the canvas you get an error because the machine view is trying to update.