private XmlAction createHookNodeUndoAction(MindMapNode focussed,
                                               List selecteds, String hookName) {
        CompoundAction undoAction = new CompoundAction();
        HookNodeAction hookNodeAction = createHookNodeAction(focussed,
                selecteds, hookName, null);
        undoAction.addChoice(hookNodeAction);
        HookInstanciationMethod instMethod = getInstanciationMethod(hookName);
        // get destination nodes
        Collection destinationNodes = instMethod.getDestinationNodes(
                mMindMapController, focussed, selecteds);
        MindMapNode adaptedFocussedNode = instMethod.getCenterNode(
                mMindMapController, focussed, selecteds);
        // test if hook already present
        if (instMethod.isAlreadyPresent(mMindMapController, hookName,
                adaptedFocussedNode)) {
            // remove the hook:
            for (Iterator i = destinationNodes.iterator(); i.hasNext(); ) {
                MindMapNode currentDestinationNode = (MindMapNode) i.next();
                // find the hook in the current node, if present:
                for (Iterator j = currentDestinationNode.getActivatedHooks()
                        .iterator(); j.hasNext(); ) {
                    PermanentNodeHook hook = (PermanentNodeHook) j.next();
                    if (hook.getName().equals(hookName)) {
                        XMLElement child = new XMLElement();
                        hook.save(child);
                        if (child.countChildren() == 1) {
                            XMLElement parameters = (XMLElement) child
                                    .getChildren().firstElement();
                            if (Tools.safeEquals(parameters.getName(),
                                    PermanentNodeHookAdapter.PARAMETERS)) {
                                // standard save mechanism
                                for (Iterator it = parameters
                                        .enumerateAttributeNames(); it
                                             .hasNext(); ) {
                                    String name = (String) it.next();
                                    NodeChildParameter nodeHookChild = new NodeChildParameter();
                                    nodeHookChild.setKey(name);
                                    nodeHookChild.setValue(parameters
                                            .getStringAttribute(name));
                                    hookNodeAction
                                            .addNodeChildParameter(nodeHookChild);
                                }

                            } else {
                                logger.warning("Unusual save mechanism, implement me.");
                            }
                        } else {
                            logger.warning("Unusual save mechanism, implement me.");
                        }
                        /*
						 * fc, 30.7.2004: we have to break. otherwise the
						 * collection is modified at two points (i.e., the
						 * collection is not valid anymore after removing one
						 * element). But this is no problem, as there exist only
						 * "once" plugins currently.
						 */
                        break;
                    }
                }
            }
        }
        return undoAction;
    }