public void propertyChange(PropertyChangeEvent e) {
            String propertyName = e.getPropertyName();
            if (!Task.PROP_DONE.equals(propertyName)) {
                return; // sca
            }

            Task<?, ?> task = (Task<?, ?>) e.getSource();
            if (task.isDone()) {
                List<Task<?, ?>> oldTaskList, newTaskList;
                synchronized (tasks) {
                    oldTaskList = copyTasksList();
                    tasks.remove(task);
                    task.removePropertyChangeListener(taskPCL);
                    newTaskList = copyTasksList();
                }
                firePropertyChange(TASKS_PROPERTY, oldTaskList, newTaskList);
                Task.InputBlocker inputBlocker = task.getInputBlocker();
                if (inputBlocker != null) {
                    inputBlocker.unblock();
                }
            }

        }