code: @Override
      public void readyChanged(SubsystemFactory id, boolean ready) {
          boolean allReady = true;
          synchronized (subsystemFactories) {
              subsystemFactories.put(id, ready);
              for (Boolean b : subsystemFactories.values()) {
                  allReady &= b;
              }
          }
          //TODO NO THREAD SAFETY use an atomic ref.??
          if (allReady && instance == null) {
  
              Hashtable<String, Object> properties = new Hashtable<String, Object>();
              properties.putAll(this.properties);
              instance = factory.newInstance(properties);
          } else if (!allReady && instance != null) {
              instance.dispose();
              instance = null;
          }
      }
docs: {@inheritDoc}