public void monitor() {
   final Device d = getDevice(uuid);
   monitor =
       new Thread(
           new Runnable() {
             @Override
             public void run() {
               String id = data.get("InstanceID");
               while (active && !"STOPPED".equals(data.get("TransportState"))) {
                 UPNPHelper.sleep(1000);
                 //						if (DEBUG) LOGGER.debug("InstanceID: " + id);
                 for (ActionArgumentValue o : getPositionInfo(d, id)) {
                   data.put(o.getArgument().getName(), o.toString());
                   //							if (DEBUG) LOGGER.debug(o.getArgument().getName() + ": " +
                   // o.toString());
                 }
                 alert();
               }
               if (!active) {
                 data.put("TransportState", "STOPPED");
                 alert();
               }
             }
           },
           "UPNP-" + d.getDetails().getFriendlyName());
   monitor.start();
 }
 public void alert() {
   if (isUpnpDevice(uuid)
       && (monitor == null || !monitor.isAlive())
       && !"STOPPED".equals(data.get("TransportState"))) {
     monitor();
   }
   for (ActionListener l : listeners) {
     l.actionPerformed(event);
   }
 }